/// <summary> /// 下单、修改订单时,修改商品库存 /// </summary> /// <param name="str">修改订单时,加库存</param> /// <param name="OrderDetailList">新增商品信息</param> /// <returns></returns> public string GetSqlInventory(string str, List <Hi.Model.DIS_OrderDetail> OrderDetailList) { StringBuilder sb = new StringBuilder(); if (!str.Equals("")) { //订单修改时,订单明细删除的商品,返还商品库存 List <Hi.Model.DIS_OrderDetail> odl = new Hi.BLL.DIS_OrderDetail().GetList("", str, ""); if (odl != null && odl.Count > 0) { foreach (var item in odl) { sb.AppendFormat("update BD_GoodsInfo set Inventory+={0} where ID={1};", item.GoodsNum + Convert.ToDecimal(item.ProNum), item.GoodsinfoID); } } } if (OrderDetailList != null && OrderDetailList.Count > 0) { foreach (var item in OrderDetailList) { sb.AppendFormat("update BD_GoodsInfo set Inventory-={0} where ID={1};", item.GoodsNum + Convert.ToDecimal(item.ProNum), item.GoodsinfoID); } } return(sb.ToString()); }
/// <summary> /// 判断商品库存是否满足 /// </summary> /// <param name="goodsInfoID">商品信息ID</param> /// <param name="OrderId">订单ID</param> /// <param name="num">下单商品库存数量</param> /// <returns>0、没有库存 1、返回商品库存数量,包括修改订单时,修改订单商品明细数量</returns> public static decimal GetInevntory(int goodsInfoID, int OrderId, decimal num) { decimal Inventory = 0; if (OrderId != 0) { //修改订单时,判断商品库存加上订单明细上的该商品数量 List <Hi.Model.DIS_OrderDetail> l = new Hi.BLL.DIS_OrderDetail().GetList("", " IsNull(dr,0)=0 and GoodsInfoID=" + goodsInfoID + " and OrderID=" + OrderId, ""); if (l != null && l.Count <= 0) { Inventory = 0; } else { Inventory = Convert.ToDecimal(l[0].GoodsNum.ToString()); } } Hi.Model.BD_GoodsInfo infoModel = new Hi.BLL.BD_GoodsInfo().GetModel(goodsInfoID); Inventory += infoModel.Inventory; if (num != 0 && Inventory < num) { return(0); } return(Inventory); }
/// <summary> /// 判断商品库存是否满足 /// </summary> /// <param name="goodsInfoID">商品信息ID</param> /// <param name="OrderId">订单ID</param> /// <param name="num">下单商品库存数量</param> /// <param name="Inventory">商品库存数量</param> /// <returns>false:可以下单 true:商品存库不足</returns> public static bool GetInevntory(int CompID, int goodsInfoID, int OrderId, decimal num, out string Inventory) { Inventory = "0"; int IsInve = Convert.ToInt32(rdoOrderAudit("商品是否启用库存", CompID)); if (IsInve == 0) { string Digits = rdoOrderAudit("订单下单数量是否取整", CompID); //启用库存 if (OrderId != 0) { //修改订单时,判断商品库存加上订单明细上的该商品数量 List <Hi.Model.DIS_OrderDetail> l = new Hi.BLL.DIS_OrderDetail().GetList("", " IsNull(dr,0)=0 and GoodsInfoID=" + goodsInfoID + " and OrderID=" + OrderId, ""); if (l != null && l.Count <= 0) { Inventory = "0"; } else { Inventory = (Convert.ToDecimal(l[0].GoodsNum.ToString()) + Convert.ToDecimal(l[0].ProNum.ToString())).ToString(); } } Hi.Model.BD_GoodsInfo infoModel = new Hi.BLL.BD_GoodsInfo().GetModel(goodsInfoID); Inventory = (Convert.ToDecimal(Inventory) + infoModel.Inventory).ToString(); Inventory = decimal.Parse(string.Format("{0:N2}", Inventory)).ToString(Digits); if (num != 0 && Convert.ToDecimal(Inventory) < num) { return(true); } return(false); } else { return(false); } }
/// <summary> /// 修改商品库存,订单商品明细为NULL、传订单ID,不为空时传订单明细、订单为0; /// </summary> /// <param name="OrderID">订单ID</param> /// <param name="odl">订单商品明细</param> /// <param name="type">0、加商品库存 1、减商品库存</param> /// <returns></returns> public string GetSqlAddInve(int OrderID, List <Hi.Model.DIS_OrderDetail> odl, int type) { StringBuilder sb = new StringBuilder(); if (OrderID != 0) { //传订单ID,查询订单明细 List <Hi.Model.DIS_OrderDetail> l = new Hi.BLL.DIS_OrderDetail().GetList("", " IsNUll(dr,0)=0 and OrderID=" + OrderID, ""); if (l != null && l.Count > 0) { foreach (var item in l) { if (type == 0) { sb.AppendFormat("update BD_GoodsInfo set Inventory+={0} where ID={1};", item.GoodsNum + Convert.ToDecimal(item.ProNum), item.GoodsinfoID); } else { sb.AppendFormat("update BD_GoodsInfo set Inventory-={0} where ID={1};", item.GoodsNum + Convert.ToDecimal(item.ProNum), item.GoodsinfoID); } } } } else if (odl != null && odl.Count > 0) { foreach (var item in odl) { if (type == 0) { sb.AppendFormat("update BD_GoodsInfo set Inventory+={0} where ID={1};", item.GoodsNum + Convert.ToDecimal(item.ProNum), item.GoodsinfoID); } else { sb.AppendFormat("update BD_GoodsInfo set Inventory-={0} where ID={1};", item.GoodsNum + Convert.ToDecimal(item.ProNum), item.GoodsinfoID); } } } return(sb.ToString()); }
/// <summary> /// 已发货超时未签收的订单 自动签收 /// </summary> /// <returns></returns> public static string SendShip() { try { //系统自动签收天数 int Sign = System.Configuration.ConfigurationManager.AppSettings["Sign"] != null?Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["Sign"].ToString()) : 10; List <Hi.Model.BD_Company> coml = new Hi.BLL.BD_Company().GetList("ID", " isnull(dr,0)=0 and isnull(IsEnabled,0)=1 and AuditState=2", ""); //执行sql string str = string.Empty; if (coml != null && coml.Count > 0) { foreach (var icom in coml) { //获取核心企业设置自动签收天数 List <Hi.Model.SYS_SysName> sl = new Hi.BLL.SYS_SysName().GetList("", "Name='订单自动签收' and CompID=" + icom.ID, ""); if (sl != null && sl.Count > 0) { Sign = Convert.ToInt32(sl[0].Value); } //当前时间 DateTime now = DateTime.Now; DateTime oldTime = now.AddDays(-Sign); //用户名ID、Name int UserID = 0; string userName = string.Empty; //Common.GetUserName(UserID); //查询超过签收天数条件 string signstr = " CompID=" + icom.ID + " and isnull(IsSign,0)=0 and SendDate<='" + oldTime + "'"; //查询超过签收天数未签收的订单 List <Hi.Model.DIS_OrderOut> outl = new Hi.BLL.DIS_OrderOut().GetList("", signstr, ""); if (outl == null && outl.Count == 0) { return(""); } foreach (Hi.Model.DIS_OrderOut item in outl) { Hi.Model.DIS_Order OrderModel = new Hi.BLL.DIS_Order().GetModel(item.OrderID); List <Hi.Model.DIS_OrderDetail> od = new Hi.BLL.DIS_OrderDetail().GetList("", "OrderID=" + item.OrderID, ""); //查询该订单已发货的发货单 List <Hi.Model.DIS_OrderOut> lo = new Hi.BLL.DIS_OrderOut().GetList("", " OrderID=" + item.OrderID, ""); //订单明细商品总数量 decimal goodsnum = 0; //订单商品总数 if (od != null && od.Count > 0) { foreach (var item0 in od) { goodsnum += item0.GoodsNum; } } decimal outnum = 0; //已发货商品数量 if (lo != null && lo.Count > 0) { var idstr = ""; foreach (var item1 in lo) { idstr += item1.ID + ","; } if (idstr.Length > 0) { idstr = idstr.Substring(0, idstr.Length - 1); } List <Hi.Model.DIS_OrderOutDetail> lod = new Hi.BLL.DIS_OrderOutDetail().GetList("", " OrderOutID in(" + idstr + ")", ""); if (lod != null && lod.Count > 0) { foreach (var item2 in lod) { outnum += item2.OutNum; } } } int IsOutState = (int)Enums.IsOutState.全部到货; int OState = (int)Enums.OrderState.已到货; //订单 //到货签收修改订单状态 if (OrderModel.IsOutState == (int)Enums.IsOutState.全部发货) { //已发货数量等于订单商品数量 ==全部到货 if (outnum == goodsnum) { IsOutState = (int)Enums.IsOutState.全部到货; OState = (int)Enums.OrderState.已到货; } else { IsOutState = (int)Enums.IsOutState.全部发货; OState = (int)Enums.OrderState.已到货; } } else if (OrderModel.IsOutState == (int)Enums.IsOutState.部分发货 || OrderModel.IsOutState == (int)Enums.IsOutState.部分到货) { IsOutState = (int)Enums.IsOutState.部分到货; OState = (int)Enums.OrderState.已发货; } //本次签收商品数量 List <Hi.Model.DIS_OrderOutDetail> lodd = new Hi.BLL.DIS_OrderOutDetail().GetList("", " OrderOutID=" + item.ID, ""); if (lodd != null && lodd.Count > 0 && OrderModel.IsOutState == (int)Enums.IsOutState.全部发货) { foreach (var item3 in lodd) { str += "update DIS_OrderOutDetail set SignNum=OutNum where OrderOutID=" + item.ID + " and ID=" + item3.ID + ";"; } } userName = GetUserName(OrderModel.DisUserID); UserID = OrderModel.DisUserID; //判断订单状态 if (OrderModel.OState >= (int)Enums.OrderState.已发货 && OrderModel.IsOutState == (int)Enums.IsOutState.全部发货 && (OrderModel.ReturnState == (int)Enums.ReturnState.未退货 || OrderModel.ReturnState == (int)Enums.ReturnState.拒绝退货)) { //订单状态 str += " update Dis_Order set OState=" + OState + ",IsOutState=" + IsOutState + ",modifyuser="******",ts='" + DateTime.Now + "' where ID=" + item.OrderID + ";"; //签收状态 str += " update Dis_OrderOut set SignDate='" + DateTime.Now + "',SignUser='******',SignUserId=" + UserID + ",IsSign=1,modifyuser="******",ts='" + DateTime.Now + "' where ID=" + item.ID + ";"; //自动签收日志 str += string.Format("INSERT INTO SYS_SysBusinessLog VALUES({0},'{1}',{2},'{3}','{4}',{5},'{6}','{7}','{8}',{9},{10});", icom.ID, "Order", item.OrderID, "订单自动签收", DateTime.Now, UserID, userName, "", DateTime.Now, 0, UserID); } else { continue; } } } } SqlTransaction TranSaction = null; SqlConnection Connection = new SqlConnection(SqlHelper.LocalSqlServer); Connection.Open(); TranSaction = Connection.BeginTransaction(); try { SqlCommand cmd = new SqlCommand(str.ToString(), Connection, TranSaction); cmd.CommandType = CommandType.Text; int rowsAffected = SqlHelper.GetInt(cmd.ExecuteNonQuery().ToString()); if (rowsAffected > 0) { TranSaction.Commit(); return("1"); } else { TranSaction.Rollback(); return(""); } } catch (Exception ex) { TranSaction.Rollback(); Console.WriteLine(ex.Message); return(""); } finally { Connection.Dispose(); } } catch (Exception ex) { //错误日志 string strPath = @"../autoOrder/"; strPath = strPath + "\\" + DateTime.Now.ToString("yyyyMMhh") + "_服务错误日志" + ".txt"; StreamWriter fs = new StreamWriter(strPath, false, System.Text.Encoding.Default); fs.WriteLine(ex.Message); fs.WriteLine(ex.Source + "::" + ex.InnerException + "::" + ex.TargetSite); fs.WriteLine("**************************************"); fs.Close(); } return("1"); }
/// <summary> /// 订单分摊商品价格 /// </summary> /// <param name="OrderID">订单ID</param> /// <param name="TotalAmount">订单商品总价</param> /// <param name="AuditAmount">订单应收总价</param> /// <returns></returns> public int GetSharePrice(int OrderID, decimal TotalAmount, decimal AuditAmount) { int sh = 0; try { //订单商品总价小于等于0,不能分摊 if (TotalAmount <= 0) { return(0); } List <Hi.Model.DIS_OrderDetail> odl = new BLL.DIS_OrderDetail().GetList("", " isnull(dr,0)=0 and OrderID=" + OrderID, ""); //分摊价格=(商品小计/订单商品总价)* 订单应收总价 //最后一个商品分摊价格=订单应收总价-(分摊价格+分摊价格n); if (odl != null && odl.Count > 0) { SqlTransaction sqlTrans = DBUtility.SqlHelper.CreateStoreTranSaction(); //订单商品个数 int ldline = odl.Count; int i = 0; //分摊商品小计总价 decimal SumShare = 0; foreach (var item in odl) { //分摊商品单价小计 decimal Share = 0; i++; if (ldline == i) { //最后一个商品分摊价格 Share = AuditAmount - SumShare; //分摊商品小计 item.SharePrice = Share; //分摊商品单价 item.Price = Share / item.GoodsNum; } else { //Floor 返回小于或等于指定的取大整数 Share = (item.sumAmount / TotalAmount) * AuditAmount; //垒加分摊商品小计总价Math.Floor() SumShare += Share; //分摊商品小计 item.SharePrice = Share; //分摊商品单价 item.Price = Share / item.GoodsNum; } sh = new Hi.BLL.DIS_OrderDetail().UpdateOrderDetail(sqlTrans.Connection, item, sqlTrans); if (sh == 0) { sqlTrans.Rollback(); return(sh); } } sqlTrans.Commit(); } } catch (Exception ex) { throw ex; } return(sh); }