/// <summary> /// 拆包确认配货 /// </summary> /// <returns></returns> public ActionResult DispartConfirmDistrbuilt() // { base_users Userinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); //得到用户信息 RFTDistrView peihuoinfo = JsonHelper.DeserializeJsonToObject <RFTDistrView>(GetCookie("peihuoinfo")); //得到配货信息 try { bool isok = _service.DispartConfirmDistruit(peihuoinfo, Userinfo); //真正在数据库中拆分掉包裹 if (isok) //配货成功 { //ViewData["userid"] = Userinfo.real_name; return(RedirectToAction("DistrubulitSucc")); } else { ViewData["errorinfo"] = "配货失败!"; return(View("ComErrorView")); } } catch (Exception ex) { ViewData["errorinfo"] = "配货程序出错!" + ex.Message; return(View("ComErrorView")); } finally //删除之前的配货信息 { peihuoinfo = null; DelCookie("peihuoinfo"); } }
/// <summary> /// 菜单主页 /// </summary> /// <returns></returns> public ActionResult MainMenu() { try { RFTDistrView peihuoinfo = JsonHelper.DeserializeJsonToObject <RFTDistrView>(GetCookie("peihuoinfo")); //得到配货信息 if (peihuoinfo != null) //代表取消进入此页面 { bool isok = _service.CancelDistrubilt(peihuoinfo); if (!isok) { ViewData["errorinfo"] = "取消配货失败"; return(View("ComErrorView")); } } var Userinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); ViewData["userid"] = Userinfo.real_name; DelCookie("peihuoinfo"); //删除之前的配货cookie信息 return(View("MainMenu")); } catch (Exception ex) { ViewData["errorinfo"] = ex.Message.ToString(); return(View("ComErrorView")); } }
/// <summary> /// 配货 /// </summary> /// <param name="SKUcode">SKU</param> /// <returns></returns> public ActionResult RDistrbuilt(string skucode) { //------------------------------测试代码------------------------------------------------------------ //var objinfo = JsonHelper.DeserializeJsonToObject<base_users>( GetCookie("userinfo")); //ViewData["realname"] = objinfo.real_name; //return View("test"); //------------------------------------------------------------------------------------------- if (string.IsNullOrEmpty(skucode)) { ViewData["errorinfo"] = "请先扫描SKU"; return(View("ComErrorView")); } bool isok = _service.IsSKUInSys(skucode);//判断SKU在系统中是否存在 if (!isok) { ViewData["errorinfo"] = "此SKU在系统中不存在"; return(View("ComErrorView")); } try { RFTDistrView dis = _service.Distrbuilt(skucode, 0, ""); //得到配货信息 if (dis == null) { ViewData["errorinfo"] = "无可配货信息"; return(View("ComErrorView")); } else { var useinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); ViewData["userid"] = useinfo.real_name; SetCookie("peihuoinfo", JsonHelper.SerializeObject(dis)); //将数据放入cookie,记得确认配货完删除cookie if (dis.info == "可包装") { ViewData["disinfo"] = dis; return(View("DistrbuiltInfo")); } else { ViewData["disinfo"] = dis; return(View("DistrbuiltInfo2")); } } } catch (Exception ex) { ViewData["errorinfo"] = ex.Message; return(View("ComErrorView")); } }
/// <summary> /// 取消配货 /// </summary> /// <param name="peihuoinfo"></param> /// <returns></returns> public bool CancelDistrubilt(RFTDistrView peihuoinfo) { using (var db = SugarDao.GetInstance(conn)) { try { bool isok = db.Update <busi_workinfo>(new { islock = 0 }, s => s.work_id == peihuoinfo.workid); return(isok); } catch (Exception ex) { throw ex; } } }
/// <summary> /// 店铺确认配货 /// </summary> /// <param name="skucode"></param> /// <param name="shopid"></param> /// <returns></returns> public ActionResult RShopFirstDistrbuilt(string skucode, int shopid) // { SetCookieHasTime("currshopid", shopid.ToString(), 1); //过期一分钟 if (string.IsNullOrEmpty(skucode)) { ViewData["errorinfo"] = "SKU和包店铺ID不能为空"; return(View("ComErrorView")); } bool isok = _service.IsSKUInSys(skucode); //判断SKU在系统中是否存在 if (!isok) { ViewData["errorinfo"] = "此SKU在系统中不存在"; return(View("ComErrorView")); } try { RFTDistrView dis = _service.Distrbuilt(skucode, shopid, ""); //得到配货信息 if (dis == null) { ViewData["errorinfo"] = "无可配货信息"; return(View("ComErrorView")); } else { var useinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); ViewData["userid"] = useinfo.real_name; SetCookie("peihuoinfo", JsonHelper.SerializeObject(dis)); //将数据放入cookie,记得确认配货完删除cookie if (dis.info == "可包装") { ViewData["disinfo"] = dis; return(View("DistrbuiltInfo")); } else { ViewData["disinfo"] = dis; return(View("DistrbuiltInfo2")); } } } catch (Exception ex) { ViewData["errorinfo"] = ex.Message; return(View("ComErrorView")); } }
/// <summary> /// 包裹优先配货 /// </summary> /// <param name="skucode"></param> /// <param name="packgecode"></param> /// <returns></returns> public ActionResult RPFirstDistrbuilt(string skucode, string packgecode) // { packgecode = packgecode.Replace("A", "").Trim(); if (string.IsNullOrEmpty(skucode) || string.IsNullOrEmpty(packgecode)) { ViewData["errorinfo"] = "SKU和包裹号不能为空"; return(View("ComErrorView")); } bool isok = _service.IsSKUInSys(skucode); //判断SKU在系统中是否存在 if (!isok) { ViewData["errorinfo"] = "此SKU在系统中不存在"; return(View("ComErrorView")); } try { RFTDistrView dis = _service.Distrbuilt(skucode, 0, packgecode); //得到配货信息 if (dis == null) { ViewData["errorinfo"] = "无可配货信息"; return(View("ComErrorView")); } else { var useinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); ViewData["userid"] = useinfo.real_name; SetCookie("peihuoinfo", JsonHelper.SerializeObject(dis)); //将数据放入cookie,记得确认配货完删除cookie if (dis.info == "可包装") { ViewData["disinfo"] = dis; return(View("DistrbuiltInfo")); } else { ViewData["disinfo"] = dis; return(View("DistrbuiltInfo2")); } } } catch (Exception ex) { ViewData["errorinfo"] = ex.Message; return(View("ComErrorView")); } }
/// <summary> /// 拆分包裹(虚拟拆分并没有真正拆分掉) /// </summary> /// <param name="peihuoinfo"></param> /// <returns></returns> public RFTDistrView Dispartpackge(RFTDistrView peihuoinfo) { using (var db = SugarDao.GetInstance(conn)) { try { int packges = db.Queryable <busi_sendorder>().Where(s => s.custorder_id == peihuoinfo.orderid).ToList().Count; //得到订单包裹数 string npackgecode = GetPackCode().ToString(); //新的包裹号 peihuoinfo.packgecode = npackgecode; //新增包裹号 peihuoinfo.info = "可包装"; peihuoinfo.packges = packges; //原先包裹数量 return(peihuoinfo); } catch (Exception ex) { throw ex; } } }
/// <summary> /// 拆分包裹 /// </summary> /// <returns></returns> public ActionResult Dipartpackge() // { try { base_users Userinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); //得到用户信息 RFTDistrView peihuoinfo = JsonHelper.DeserializeJsonToObject <RFTDistrView>(GetCookie("peihuoinfo")); //得到配货信息 RFTDistrView newpeihuoinfo = _service.Dispartpackge(peihuoinfo); //DelCookie("peihuoinfo"); //删除之前的配货cookie信息 if (newpeihuoinfo == null) { ViewData["errorinfo"] = "拆分包裹失败"; return(View("ComErrorView")); } else { var useinfo = JsonHelper.DeserializeJsonToObject <base_users>(GetCookie("userinfo")); ViewData["userid"] = useinfo.real_name; SetCookie("peihuoinfo", JsonHelper.SerializeObject(newpeihuoinfo)); //将数据放入cookie,记得确认配货完删除cookie if (newpeihuoinfo.info == "可包装") { ViewData["disinfo"] = newpeihuoinfo; return(View("DistrbuiltInfo3")); } else { ViewData["disinfo"] = newpeihuoinfo; return(View("DistrbuiltInfo2")); } } } catch (Exception ex) { ViewData["errorinfo"] = ex.Message.ToString(); return(View("ComErrorView")); } }
/// <summary> /// 正常配货上架,店铺优先,包裹优先全部包含在内 /// </summary> /// <param name="SKUcode"></param> /// <returns></returns> public RFTDistrView Distrbuilt(string SKUcode, int shopID, string packcode) { using (var db = SugarDao.GetInstance(conn)) { try { var depotID = db.Queryable <base_wh_warehouse>().Where(s => s.wh_name == "金华仓").FirstOrDefault(); if (null == depotID) { throw new Exception("金华仓不存在"); } var locationID = db.Queryable <base_location>().Where(s => s.wh_id == depotID.wh_id && s.locat_code == "zz-zz-zz").FirstOrDefault(); if (null == locationID) { throw new Exception("金华仓库位zz-zz-zz不存在"); } long codeid = db.Queryable <base_prod_code>().Where(s => s.sku_code == SKUcode).FirstOrDefault().code_id;//得到skuid var stock = db.Queryable <base_wh_stock>().Where(s => s.location_id == locationID.locat_id && s.code_id == codeid).FirstOrDefault(); if (stock == null || 0 >= stock.stock_qty) { throw new Exception("金华仓临时库库存为零"); } string[] list = null; if (!string.IsNullOrEmpty(packcode)) { list = db.SqlQuery <string[]>(@"select top 1 a.order_code,a.latest_date,b.work_id,b.packid,b.shop_id,b.prod_code_id,c.prod_num,c.order_code,a.order_id from busi_custorder a right join busi_workinfo b on a.order_id=b.custorder_id left join busi_sendorder c on c.order_id=b.packid where b.del_flag=1 and b.is_work=0 and b.islock=0 and c.del_flag=1 and b.prod_code_id=@codeid and c.order_code=@packcode order by a.order_date ,c.prod_num,b.create_time", new { codeid = codeid, packcode = packcode }).SingleOrDefault(); } else if (0 != shopID)//店铺优先 { list = db.SqlQuery <string[]>(@"select top 1 a.order_code,a.latest_date,b.work_id,b.packid,b.shop_id,b.prod_code_id,c.prod_num,c.order_code,a.order_id from busi_custorder a right join busi_workinfo b on a.order_id=b.custorder_id left join busi_sendorder c on c.order_id=b.packid where b.del_flag=1 and b.is_work=0 and b.islock=0 and c.del_flag=1 and b.prod_code_id=@codeid and a.shop_id=@shopID order by a.order_date ,c.prod_num,b.create_time", new { codeid = codeid, shopID = shopID }).SingleOrDefault(); } else { list = db.SqlQuery <string[]>(@"select top 1 a.order_code,a.latest_date,b.work_id,b.packid,b.shop_id,b.prod_code_id,c.prod_num,c.order_code,a.order_id from busi_custorder a right join busi_workinfo b on a.order_id=b.custorder_id left join busi_sendorder c on c.order_id=b.packid where b.del_flag=1 and b.is_work=0 and b.islock=0 and c.del_flag=1 and b.prod_code_id=@codeid order by a.order_date ,c.prod_num,b.create_time", new { codeid = codeid }).SingleOrDefault(); } if (list == null) //无可配包裹 { return(null); } //得到包裹号 int packid = list[3].ObjToInt(); //得到包裹已配数量 int Ispackpacknum = db.SqlQuery <int>(@"select count(*) as num from busi_workinfo where is_work=1 and packid=@packid", new { packid = packid }).SingleOrDefault(); //得到订单号 string ordercode = list[0].ToString(); //得到包裹号 string packgecode = list[7].ToString(); //得到包裹SKU总数 int packnum = list[6].ObjToInt(); //得到店铺ID int shopid = list[4].ObjToInt(); //得到订单中包裹数目 int cusorderid = list[8].ObjToInt(); int packges = db.Queryable <busi_sendorder>().Where(s => s.custorder_id == cusorderid).ToList().Count; string shopname = db.Queryable <base_shop>().Where(s => s.shop_id == shopid).FirstOrDefault().shop_name; int workid = list[2].ObjToInt(); RFTDistrView dis = new RFTDistrView(); dis.Ispackpacknum = Ispackpacknum; dis.ordercode = ordercode; dis.skucode = SKUcode; dis.packgecode = packgecode; dis.packnum = packnum; dis.shopname = shopname; dis.workid = workid; dis.packges = packges; dis.packid = packid; dis.orderid = cusorderid; if (packnum > 1) { dis.info = "可拆包"; } else { dis.info = "可包装"; } db.Update <busi_workinfo>(new { islock = 1 }, s => s.work_id == dis.workid); //锁定这条配货信息 return(dis); } catch (Exception ex) { throw ex; } } }
/// <summary> /// 拆分包裹确认配货 /// </summary> /// <param name="peihuoinfo"></param> /// <param name="Userinfo"></param> /// <returns></returns> public bool DispartConfirmDistruit(RFTDistrView peihuoinfo, base_users Userinfo) { using (var db = SugarDao.GetInstance(conn)) { db.CommandTimeOut = 3000;//设置超时时间 try { db.BeginTran(); //1.先设置work_info中已配货的状态 bool isok = db.Update <busi_workinfo>(new { is_work = 1, work_type = 2, work_time = DateTime.Now, edit_user_id = Userinfo.user_id, islock = 0 }, it => it.work_id == peihuoinfo.workid); if (isok) { if (peihuoinfo.info == "可包装")//单件的,需要打印 { //1.先拆分包裹,先得到原先的包裹号 busi_sendorder oldpack = db.Queryable <busi_sendorder>().Where(s => s.order_id == peihuoinfo.packid).FirstOrDefault(); if (peihuoinfo.packgecode != GetPackCode().ToString())//再次取新的包裹号,如果不相等说明刚才的包裹号被其他地方占用了 { throw new Exception("拆分后的包裹号被占用请重新拆分"); } long oldpackid = oldpack.order_id; oldpack.prod_num--; //减少原先包裹SKU数量 db.Update <busi_sendorder>(oldpack); //先更新原先包裹SKU数量信息 oldpack.order_code = peihuoinfo.packgecode; oldpack.order_id = 0; oldpack.prod_num = 1; oldpack.order_tatus = 40; //包裹配货完成 int npackid = db.Insert <busi_sendorder>(oldpack).ObjToInt(); //插入新包裹 //判断这个包裹中是否买了多个相同的SKU long codeid = db.Queryable <base_prod_code>().Where(s => s.sku_code == peihuoinfo.skucode).FirstOrDefault().code_id;//得到skuid busi_sendorder_detail oldsenddetail = db.Queryable <busi_sendorder_detail>().Where(s1 => s1.order_id == peihuoinfo.packid).Where(s1 => s1.code_id == codeid).FirstOrDefault(); long senddetailid = 0; if (Convert.ToInt32(oldsenddetail.prod_num) > 1) //原包裹相同SKU购买多件 { oldsenddetail.prod_num--; db.Update <busi_sendorder_detail>(new { prod_num = oldsenddetail.prod_num }, it => it.detail_id == oldsenddetail.detail_id); oldsenddetail.detail_id = 0; oldsenddetail.order_id = npackid; oldsenddetail.prod_num = 1; senddetailid = db.Insert <busi_sendorder_detail>(oldsenddetail).ObjToInt(); } else if (Convert.ToInt32(oldsenddetail.prod_num) == 1)//只买了一个,直接更新这条数据 { senddetailid = oldsenddetail.detail_id; db.Update <busi_sendorder_detail>(new { order_id = npackid }, it => it.detail_id == oldsenddetail.detail_id); } db.Update <busi_workinfo>(new { packid = npackid, sendorder_detail_id = senddetailid, islock = 0 }, it => it.work_id == peihuoinfo.workid); //==================20171023添加,如果上架过,最后一个拆分包裹,检查原包裹的状态并做相应的更新=================== //1.判断已上架的数量和包裹SKU数量是否相等 int skunum = db.Queryable <busi_sendorder>().Where(s => s.order_id == oldpackid).FirstOrDefault().prod_num; var worklist = db.Queryable <busi_workinfo>().Where(s => s.packid == oldpackid && s.is_work == true && s.del_flag == true).ToList(); if (skunum == worklist.Count) { db.Update <busi_sendorder>(new { order_tatus = 40 }, it => it.order_id == peihuoinfo.packid);//原先包裹更新状态,全部配货 } else { db.Update <busi_sendorder>(new { order_tatus = 30 }, it => it.order_id == peihuoinfo.packid);//原先包裹更新状态,部分配货 } //================================================================================================ //插入打印数据 //插入打印数据,只是包裹号 busi_printwork insertinfo = new busi_printwork(); insertinfo.p_WorkType = 30; insertinfo.data_1 = peihuoinfo.packgecode; insertinfo.data_4 = DateTime.Now.ToString(); insertinfo.p_idPoint = 1; //测试 insertinfo.p_Status = 1; insertinfo.data_2 = peihuoinfo.packgecode.Substring(8, 4); insertinfo.data_3 = peihuoinfo.packnum.ToString(); db.Insert <busi_printwork>(insertinfo); //-------------------20170720减库存-------------------------------------- var depotID = db.Queryable <base_wh_warehouse>().Where(s => s.wh_name == "金华仓").FirstOrDefault(); if (null == depotID) { throw new Exception("金华仓不存在"); } var locationID = db.Queryable <base_location>().Where(s => s.wh_id == depotID.wh_id && s.locat_code == "zz-zz-zz").FirstOrDefault(); if (null == locationID) { throw new Exception("金华仓库位zz-zz-zz不存在"); } var skuid = db.Queryable <base_prod_code>().Where(s => s.sku_code == peihuoinfo.skucode).FirstOrDefault(); var stock = db.Queryable <base_wh_stock>().Where(s => s.location_id == locationID.locat_id && s.code_id == skuid.code_id).FirstOrDefault(); if (0 >= stock.stock_qty) { throw new Exception("金华仓临时库库存为零"); } stock.stock_qty--; db.Update <base_wh_stock>(stock); //--------------------------------------------------------------------------- //3.得到这个订单的所有包裹数目 int packges = db.Queryable <busi_sendorder>().Where(s => s.custorder_id == peihuoinfo.orderid).Where(s => s.del_flag == true).ToList().Count; //已配货数量 int ispackingnum = db.Queryable <busi_sendorder>().Where(s => s.custorder_id == peihuoinfo.orderid).Where(s => s.del_flag == true).Where(s => s.order_tatus >= 40).ToList().Count; if (packges == ispackingnum) { db.Update <busi_custorder>(new { order_status = 40 }, it => it.order_id == peihuoinfo.orderid); } } db.CommitTran(); return(true); } else { db.RollbackTran(); return(false); } } catch (Exception ex) { db.RollbackTran(); throw ex; } } }
/// <summary> /// 确认配货 /// </summary> /// <param name="peihuoinfo"></param> /// <param name="Userinfo"></param> /// <returns></returns> public bool ConfirmDistruit(RFTDistrView peihuoinfo, base_users Userinfo) { using (var db = SugarDao.GetInstance(conn)) { try { //1.先设置work_info中已配货的状态 bool isok = db.Update <busi_workinfo>(new { is_work = 1, work_type = 2, work_time = DateTime.Now, edit_user_id = Userinfo.user_id, islock = 0 }, it => it.work_id == peihuoinfo.workid); if (isok) { if (peihuoinfo.info == "可包装")//单件的,需要打印 { db.Update <busi_sendorder>(new { order_tatus = 40 }, it => it.order_id == peihuoinfo.packid); //插入打印数据,只是包裹号 busi_printwork insertinfo = new busi_printwork(); insertinfo.p_WorkType = 30; insertinfo.data_1 = peihuoinfo.packgecode; insertinfo.data_4 = DateTime.Now.ToString(); insertinfo.p_idPoint = 1; //测试 insertinfo.p_Status = 1; insertinfo.data_2 = peihuoinfo.packgecode.Substring(8, 4); insertinfo.data_3 = peihuoinfo.packnum.ToString(); db.Insert <busi_printwork>(insertinfo); //-------------------20170720减库存-------------------------------------- var depotID = db.Queryable <base_wh_warehouse>().Where(s => s.wh_name == "金华仓").FirstOrDefault(); if (null == depotID) { throw new Exception("金华仓不存在"); } var locationID = db.Queryable <base_location>().Where(s => s.wh_id == depotID.wh_id && s.locat_code == "zz-zz-zz").FirstOrDefault(); if (null == locationID) { throw new Exception("金华仓库位zz-zz-zz不存在"); } var skuid = db.Queryable <base_prod_code>().Where(s => s.sku_code == peihuoinfo.skucode).FirstOrDefault(); var stock = db.Queryable <base_wh_stock>().Where(s => s.location_id == locationID.locat_id && s.code_id == skuid.code_id).FirstOrDefault(); if (stock == null || 0 >= stock.stock_qty) { throw new Exception("金华仓临时库库存为零"); } stock.stock_qty--; db.Update <base_wh_stock>(stock); //--------------------------------------------------------------------- } else if (peihuoinfo.info == "可拆包")//多件的在拣选中打印(上架) { //2.再判断此包裹是否已配齐,如果配齐,设置状态,如果不配齐,设置对应状态(如果是单件的,直接打印,多件的不打印) int Ispackpacknum = db.SqlQuery <int>(@"select count(*) as num from busi_workinfo where is_work=1 and packid=@packid", new { packid = peihuoinfo.packid }).SingleOrDefault(); if (peihuoinfo.packnum == Ispackpacknum) //此处判断包裹是否已配齐 { db.Update <busi_sendorder>(new { order_tatus = 40 }, it => it.order_id == peihuoinfo.packid); //如果相等,配齐 } else { db.Update <busi_sendorder>(new { order_tatus = 30 }, it => it.order_id == peihuoinfo.packid); //如果小于,设置包裹部分配货 } } //3.判断订单是否已配齐 int packges = db.Queryable <busi_sendorder>().Where(s => s.custorder_id == peihuoinfo.orderid).Where(s => s.del_flag == true).ToList().Count; //已配货数量 int ispackingnum = db.Queryable <busi_sendorder>().Where(s => s.custorder_id == peihuoinfo.orderid).Where(s => s.del_flag == true).Where(s => s.order_tatus >= 40).ToList().Count; if (packges == ispackingnum) { db.Update <busi_custorder>(new { order_status = 40 }, it => it.order_id == peihuoinfo.orderid); } return(true); } else { return(false); } } catch (Exception ex) { throw ex; } } }