using System; using System.Collections.Generic; using System.Linq; using System.Text; using WMS.Model.Stock; using System.Data; using WMS.IData; using WMS.Common; using WMS.Business.Base; using WMS.Model.Base; using WMS.Model.CK; namespace WMS.Business.Stock { public class BussAreaRep : IBussFactory { /// /// 获取库区间调拨单结果集 /// /// 库区间调拨单 public List GetAreaRepList(AreaRepModel model) { DataTable table = DataProvider.Instance.AreaRep.GetAreaRepDT(model); List AreaRepModel = ConvertHelper.ConvertToList(table); if (DataLogErrWrite(table, "获取库区间调拨单")) { return AreaRepModel; } return null; } /// /// 删除库区间调拨单信息 /// /// 库区间调拨单 /// 是否成功 public string DeleteAreaRep(string AreaRepID) { DataProvider.Instance.AreaRep.DeleteAreaRep(AreaRepID); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; //删除规格明细 //SKUTabModel skuTab = new SKUTabModel(); //skuTab.DOCCTNUMBER = AreaRepID; //DataProvider.Instance.SKUTab.DelSKUTab(skuTab); //logList.Add(DataProvider.Instance.logData); //删除消息 DataProvider.Instance.Message.DeleteMessByRelativeNumber(AreaRepID); logList.Add(DataProvider.Instance.logData); TaCmtOrRak(); return ErrText; } /// /// 删除库区间调拨单(包括明细) /// /// 库区间调拨单 /// 是否成功 public string DeleteAreaRepAndTab(string AreaRepID) { DataProvider.Instance.AreaRep.DeleteAreaRep(AreaRepID); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; //获取原来的所有明细,减去原来的已占用库存 AreaRepOutModel tab = new AreaRepOutModel(); tab.AREA_REP_ID = AreaRepID; DataTable table = DataProvider.Instance.AreaRepOut.GetAreaRepOutDT(tab); List list = ConvertHelper.ConvertToList(table); foreach (var item in list) { MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = item.PUTIN_ID; mi.GOODS_ID = item.GOODS_ID; mi.LOCATION_ID = item.OUT_LOC_ID; mi.OCCUPY_NUM = -item.PLAN_COUNT; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); //删除库存占用记录表相应记录 MIStockOccupyModel queryOccupy = new MIStockOccupyModel(); queryOccupy.GOODS_ID = mi.GOODS_ID; queryOccupy.LOCATION_ID = mi.LOCATION_ID; queryOccupy.PUTIN_ID = mi.PUTIN_ID; List occupy = ConvertHelper.ConvertToList(DataProvider.Instance.MIStockOccupy.GetMIStockOccupyDT(queryOccupy)); DataProvider.Instance.MIStockOccupy.DeleteMIStockOccupy(occupy[0]); logList.Add(DataProvider.Instance.logData); } DataProvider.Instance.AreaRepOut.DeleteAreaRepOutByAreaRepID(AreaRepID); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.AreaRepIn.DeleteAreaRepInByAreaRepID(AreaRepID); logList.Add(DataProvider.Instance.logData); //删除规格明细 //SKUTabModel skuTab = new SKUTabModel(); //skuTab.DOCCTNUMBER = AreaRepID; //DataProvider.Instance.SKUTab.DelSKUTab(skuTab); //logList.Add(DataProvider.Instance.logData); //删除消息 DataProvider.Instance.Message.DeleteMessByRelativeNumber(AreaRepID); logList.Add(DataProvider.Instance.logData); TaCmtOrRak(); return ErrText; } /// /// 新增库区间调拨单(包括明细) /// /// 库区间调拨单Model /// 出库明细ModelList /// 入库明细ModelList /// 是否成功 public string InsertAreaRepAndTab(AreaRepModel areaRepModel, List listAreaRepOut, List listAreaRepIn, List listSKU) { //新增库区间调拨单 areaRepModel.AREA_REP_ID = IBussFactory.Instance().GetDocumentStream("库区调拨单"); DataProvider.Instance.AreaRep.InsertAreaRep(areaRepModel); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; ////删除所有明细 //DataProvider.Instance.AreaRepOut.DeleteAreaRepOutByAreaRepID(AreaRepModel.AREA_REP_ID); //logList.Add(DataProvider.Instance.logData); //DataProvider.Instance.AreaRepIn.DeleteAreaRepInByAreaRepID(AreaRepModel.AREA_REP_ID); //logList.Add(DataProvider.Instance.logData); //增加明细 foreach (AreaRepOutModel areaRepOutModel in listAreaRepOut) { if (!string.IsNullOrEmpty(areaRepModel.AREA_REP_ID)) { areaRepOutModel.AREA_REP_ID = areaRepModel.AREA_REP_ID; } DataProvider.Instance.AreaRepOut.InsertAreaRepOut(areaRepOutModel); logList.Add(DataProvider.Instance.logData); ////根据计划数修改已占用库存 //MIStockModel mi = new MIStockModel(); //mi.PUTIN_ID = areaRepOutModel.PUTIN_ID; //mi.GOODS_ID = areaRepOutModel.GOODS_ID; //mi.LOCATION_ID = areaRepOutModel.OUT_LOC_ID; //mi.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; //DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); //logList.Add(DataProvider.Instance.logData); ////写入库存占用记录表 //MIStockModel mistock = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(mi))[0]; //MIStockOccupyModel occupy = new MIStockOccupyModel(); //occupy.AREA_ID = mistock.AREA_ID; //occupy.DOCCTNUMBER = areaRepOutModel.AREA_REP_ID; //occupy.GOODS_ID = mistock.GOODS_ID; //occupy.LOCATION_ID = mistock.LOCATION_ID; //occupy.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; //occupy.PUTIN_ID = mistock.PUTIN_ID; //occupy.STOCK_ID = mistock.STOCK_ID; //occupy.STORAGE_ID = mistock.STORAGE_ID; //DataProvider.Instance.MIStockOccupy.InsertMIStockOccupy(occupy); //logList.Add(DataProvider.Instance.logData); } foreach (AreaRepInModel areaRepInModel in listAreaRepIn) { if (!string.IsNullOrEmpty(areaRepModel.AREA_REP_ID)) { areaRepInModel.AREA_REP_ID = areaRepModel.AREA_REP_ID; } DataProvider.Instance.AreaRepIn.InsertAreaRepIn(areaRepInModel); logList.Add(DataProvider.Instance.logData); } ////新增规格明细 //if (listSKU != null && listSKU.Count > 0) //{ // //新增规格明细 // foreach (var item in listSKU) // { // item.DOCCTNUMBER = areaRepModel.AREA_REP_ID; // DataProvider.Instance.SKUTab.AddSKUTab(item); // logList.Add(DataProvider.Instance.logData); // } //} TaCmtOrRak(); #region 新增消息 MessageModel messModel = new MessageModel(); messModel.ID = "KQ" + DateTime.Now.ToString("yyyyMMddHHmmss") + DataProvider.Instance.Message.GetSerialNum(); messModel.MENU_FORM = "FrmAreaRep"; messModel.MESS_CONTENT = "新增库区补货单,单据编号:" + areaRepModel.AREA_REP_ID; messModel.MESS_DATE = DateTime.Now; messModel.MESS_DEP = areaRepModel.STORAGE_ID; messModel.MESS_FLAG = "0"; messModel.MESS_STAR = areaRepModel.CREATE_PERSON; messModel.MESS_TO = areaRepModel.OUT_PERSON; messModel.MESS_STATUS = "0"; messModel.WORK_TYPE = "worktype004"; messModel.WORK_KIND = "0"; messModel.MESS_TYPE = "6"; messModel.RELATIVE_NUMBER = areaRepModel.AREA_REP_ID; messModel.STO_ID = areaRepModel.STORAGE_ID; DataProvider.Instance.Message.Add(messModel); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; TaCmtOrRak(); #endregion return ErrText; } /// /// 修改库区间调拨单(包括明细) /// /// 库区间调拨单Model /// 出库明细ModelList /// 入库明细ModelList /// 是否成功 public string UpdateAreaRepAndTab(AreaRepModel areaRepModel, List listAreaRepOut, List listAreaRepIn, List listSKU) { //修改库区间调拨单 DataProvider.Instance.AreaRep.UpdateAreaRep(areaRepModel); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; if (areaRepModel.STATE != "0") { //获取原来的所有明细,减去原来的已占用库存 AreaRepOutModel tab = new AreaRepOutModel(); tab.AREA_REP_ID = areaRepModel.AREA_REP_ID; DataTable table = DataProvider.Instance.AreaRepOut.GetAreaRepOutDT(tab); List list = ConvertHelper.ConvertToList(table); foreach (var item in list) { MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = item.PUTIN_ID; mi.GOODS_ID = item.GOODS_ID; mi.LOCATION_ID = item.OUT_LOC_ID; mi.OCCUPY_NUM = -item.PLAN_COUNT; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); try { //删除库存占用记录表相应记录 MIStockOccupyModel queryOccupy = new MIStockOccupyModel(); queryOccupy.GOODS_ID = mi.GOODS_ID; queryOccupy.LOCATION_ID = mi.LOCATION_ID; queryOccupy.PUTIN_ID = mi.PUTIN_ID; List occupy = ConvertHelper.ConvertToList(DataProvider.Instance.MIStockOccupy.GetMIStockOccupyDT(queryOccupy)); DataProvider.Instance.MIStockOccupy.DeleteMIStockOccupy(occupy[0]); logList.Add(DataProvider.Instance.logData); } catch (Exception) { } } } //删除所有明细 DataProvider.Instance.AreaRepOut.DeleteAreaRepOutByAreaRepID(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.AreaRepIn.DeleteAreaRepInByAreaRepID(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); //增加明细 foreach (AreaRepOutModel areaRepOutModel in listAreaRepOut) { DataProvider.Instance.AreaRepOut.InsertAreaRepOut(areaRepOutModel); logList.Add(DataProvider.Instance.logData); //根据计划数修改已占用库存 MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = areaRepOutModel.PUTIN_ID; mi.GOODS_ID = areaRepOutModel.GOODS_ID; mi.LOCATION_ID = areaRepOutModel.OUT_LOC_ID; mi.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); //写入库存占用记录表 MIStockModel mistock = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(mi))[0]; MIStockOccupyModel occupy = new MIStockOccupyModel(); occupy.AREA_ID = mistock.AREA_ID; occupy.DOCCTNUMBER = areaRepOutModel.AREA_REP_ID; occupy.GOODS_ID = mistock.GOODS_ID; occupy.LOCATION_ID = mistock.LOCATION_ID; occupy.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; occupy.PUTIN_ID = mistock.PUTIN_ID; occupy.STOCK_ID = mistock.STOCK_ID; occupy.STORAGE_ID = mistock.STORAGE_ID; DataProvider.Instance.MIStockOccupy.InsertMIStockOccupy(occupy); logList.Add(DataProvider.Instance.logData); } foreach (AreaRepInModel areaRepInModel in listAreaRepIn) { DataProvider.Instance.AreaRepIn.InsertAreaRepIn(areaRepInModel); logList.Add(DataProvider.Instance.logData); } //修改规格明细 //if (listSKU != null && listSKU.Count > 0) //{ // //删除规格明细 // SKUTabModel skuTab = new SKUTabModel(); // skuTab.DOCCTNUMBER = areaRepModel.AREA_REP_ID; // DataProvider.Instance.SKUTab.DelSKUTab(skuTab); // logList.Add(DataProvider.Instance.logData); // //新增规格明细 // foreach (var item in listSKU) // { // item.DOCCTNUMBER = areaRepModel.AREA_REP_ID; // DataProvider.Instance.SKUTab.AddSKUTab(item); // logList.Add(DataProvider.Instance.logData); // } //} if (areaRepModel.STATE == "2"){//状态为完成 List hadUpdeteList = new List();//已经被修改过的库存记录 List listOut = new List(); foreach (AreaRepOutModel item in listAreaRepOut) { for (int i = 0; i < item.REAL_COUNT; i++) { listOut.Add(item); } //根据实际数修改实际库存 MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = item.PUTIN_ID; mi.GOODS_ID = item.GOODS_ID; mi.LOCATION_ID = item.OUT_LOC_ID; mi.SHELVES_NUM = item.REAL_COUNT; DataProvider.Instance.MIStock.UpdateMIStockNum(mi); logList.Add(DataProvider.Instance.logData); ////根据计划数修改已占用库存 //mi = new MIStockModel(); //mi.PUTIN_ID = item.PUTIN_ID; //mi.GOODS_ID = item.GOODS_ID; //mi.LOCATION_ID = item.OUT_LOC_ID; //mi.OCCUPY_NUM = -item.PLAN_COUNT; //DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); //logList.Add(DataProvider.Instance.logData); ////删除库存占用记录表相应记录 //MIStockOccupyModel queryOccupy = new MIStockOccupyModel(); //queryOccupy.GOODS_ID = mi.GOODS_ID; //queryOccupy.LOCATION_ID = mi.LOCATION_ID; //queryOccupy.PUTIN_ID = mi.PUTIN_ID; //List occupy = ConvertHelper.ConvertToList(DataProvider.Instance.MIStockOccupy.GetMIStockOccupyDT(queryOccupy)); //DataProvider.Instance.MIStockOccupy.DeleteMIStockOccupy(occupy[0]); //logList.Add(DataProvider.Instance.logData); } List listMI = new List(); foreach (AreaRepOutModel outM in listOut) { AreaRepInModel inM = listAreaRepIn.Find(p => p.REAL_COUNT != p.TEMP_COUNT && p.GOODS_ID == outM.GOODS_ID); inM.TEMP_COUNT++; MIStockModel model = listMI.Find(i => i.LOCATION_ID == inM.IN_LOC_ID && i.GOODS_ID == outM.GOODS_ID && i.PUTIN_ID == outM.PUTIN_ID && i.AREA_ID == areaRepModel.IN_AREA_ID); if (model != null) { model.SHELVES_NUM++; } else { model = new MIStockModel(); model.PUTIN_ID = outM.PUTIN_ID; model.AREA_ID = areaRepModel.OUT_AREA_ID; model.LOCATION_ID = outM.OUT_LOC_ID; model.GOODS_ID = outM.GOODS_ID; model = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(model))[0]; model.OCCUPY_NUM = 0; model.LOCATION_ID = inM.IN_LOC_ID; model.SHELVES_NUM = 1; model.AREA_ID = areaRepModel.IN_AREA_ID; listMI.Add(model); } } foreach (MIStockModel model in listMI) { MIStockModel queryModel = new MIStockModel(); queryModel.PUTIN_ID = model.PUTIN_ID; queryModel.AREA_ID = model.AREA_ID; queryModel.LOCATION_ID = model.LOCATION_ID; queryModel.GOODS_ID = model.GOODS_ID; List queryList = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(queryModel)); if (queryList == null || queryList.Count == 0) { model.STOCK_ID = DataProvider.Instance.MIStock.InsertMIStock(model); } else { DataProvider.Instance.MIStock.UpdateMIStock(model); } logList.Add(DataProvider.Instance.logData); //操作库存日志表 MIStockBackModel backModel = new MIStockBackModel();//入 backModel.AREA_ID = model.AREA_ID; backModel.CHANGE_NUM = model.SHELVES_NUM; backModel.GOODS_ID = model.GOODS_ID; backModel.GOODS_NAME = model.GOODS_NAME; backModel.GOODS_NUM = model.SHELVES_NUM; backModel.GOODS_TYPEID = model.GOODS_TYPEID; backModel.ID = DataProvider.Instance.MIStockBack.GetSerialNum(); backModel.LOCATION_ID = model.LOCATION_ID; backModel.OPERATOR_MAN = areaRepModel.IN_PERSON; backModel.OPERATOR_MAN_NAME = areaRepModel.IN_PERSON_NAME; backModel.OPERATOR_TYPE = "0"; backModel.ORI_NUM = 0; backModel.PUTIN_ID = model.PUTIN_ID; backModel.PRODUCTION_DATE = model.PRODUCTION_DATE; backModel.REMARK = model.REMARK; backModel.STOCK_ID = model.STOCK_ID; backModel.STORAGE_ID = model.STORAGE_ID; backModel.STORAGE_NAME = model.STORAGE_NAME; backModel.VERSION = model.VERSION; DataProvider.Instance.MIStockBack.AddBMiStockack(backModel); logList.Add(DataProvider.Instance.logData); //修改库位已占用体积 GoodsInfoModel goods = new GoodsInfoModel(); Decimal perVo = Convert.ToDecimal(DataProvider.Instance.Goods.GetGoodsDataTable(model.GOODS_ID, "", "", "").Rows[0]["GVOLUME"].ToString()); Decimal allVo = 0; allVo = model.SHELVES_NUM * perVo; if (allVo != 0) { //新库位 StorageAreaLocationModel loc = new StorageAreaLocationModel(); loc.STORAGE_ID = areaRepModel.STORAGE_ID; loc.LOCATION_ID = model.LOCATION_ID; loc = ConvertHelper.ConvertToList(DataProvider.Instance.StorageAreaLocation.GetLocationInfoDS(loc))[0]; loc.HASVOLUME += allVo; loc.OPERATORID = areaRepModel.IN_PERSON; DataProvider.Instance.StorageAreaLocation.UpdateLocHasVolume(loc); logList.Add(DataProvider.Instance.logData); } } //写工作量 //WorkLoadModel workLoad = new WorkLoadModel(); //workLoad.BILLS_ID = areaRepModel.AREA_REP_ID; //workLoad.USER_ID = areaRepModel.OUT_PERSON; //workLoad.WORK_DATE = System.DateTime.Now; //workLoad.WORK_DATE_STAR = System.DateTime.Now.Date; //workLoad.WORK_DATE_END = System.DateTime.Now.Date; //workLoad.WORK_NUM = areaRepModel.REAL_PLAN_NUM; //workLoad.WORK_TYPE = "3"; ////workLoad.DEP_ID = //if (listAreaRepOut != null && listAreaRepOut.Count > 0) //{ // workLoad.WORK_UNIT = listAreaRepOut[0].UNIT; //} //DataProvider.Instance.WorkLoad.Add(workLoad); //logList.Add(DataProvider.Instance.logData); //workLoad = new WorkLoadModel(); //workLoad.BILLS_ID = areaRepModel.AREA_REP_ID; // workLoad.USER_ID = areaRepModel.IN_PERSON; //workLoad.WORK_DATE = System.DateTime.Now; //workLoad.WORK_DATE_STAR = System.DateTime.Now.Date; //workLoad.WORK_DATE_END = System.DateTime.Now.Date; //workLoad.WORK_NUM = areaRepModel.REAL_PLAN_NUM; //workLoad.WORK_TYPE = "3"; ////workLoad.DEP_ID = //if (listAreaRepOut != null && listAreaRepOut.Count > 0) //{ // workLoad.WORK_UNIT = listAreaRepOut[0].UNIT; //} // DataProvider.Instance.WorkLoad.Add(workLoad); // logList.Add(DataProvider.Instance.logData); //foreach (AreaRepInModel item in listAreaRepIn) //{ // //操作库存表 // MIStockModel model = new MIStockModel();//入 // //model.LOCATION_ID = item.IN_LOC_ID; // //model.GOODS_ID = item.GOODS_ID; // ////得到库存记录 // //bool hadMIStock = false; // //foreach (MIStockModel i in hadUpdeteList) // //{ // // if (i.LOCATION_ID == model.LOCATION_ID && i.GOODS_ID == model.GOODS_ID) // // { // // hadMIStock = true; // // model = i; // // break; // // } // //} // //if (!hadMIStock) // //{ // // List nowMIStock = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(model)); // // if (nowMIStock.Count > 0)//有该库存 修改 // // { // // model = nowMIStock[0]; // // model.SHELVES_NUM += item.REAL_COUNT; // // DataProvider.Instance.MIStock.UpdateMIStock(model); // // logList.Add(DataProvider.Instance.logData); // // } // // else//无该库存 新增 // // { // foreach (AreaRepOutModel i in listAreaRepOut) // { // if (i.GOODS_ID == item.GOODS_ID) // { // MIStockModel outModel = new MIStockModel(); // outModel.LOCATION_ID = i.OUT_LOC_ID; // outModel.GOODS_ID = i.GOODS_ID; // model = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(outModel))[0]; // break; // } // } // model.LOCATION_ID = item.IN_LOC_ID; // //StorageAreaLocationModel locModel = new StorageAreaLocationModel(); // //locModel.LOCATION_ID = model.LOCATION_ID; // model.AREA_ID = areaRepModel.IN_AREA_ID;// IBussFactory.Instance().GetLocationInfoDS(locModel)[0].STORAGE_AREA_ID;//入库库区编号 // model.GOODS_ID = item.GOODS_ID; // model.SHELVES_NUM = item.REAL_COUNT;//原值是出库的 必须重新赋值 // model.WARE_DATE = System.DateTime.Now; // model.AREA_NAME = areaRepModel.IN_AREA_NAME; // model.DOCCTNUMBER = item.AREA_REP_ID;//////////////////////////////////////////// // model.STOCK_ID = DataProvider.Instance.MIStock.InsertMIStock(model); // logList.Add(DataProvider.Instance.logData); // // } // //} // //else // //{//已经改过 // // model.SHELVES_NUM += item.REAL_COUNT; // // DataProvider.Instance.MIStock.UpdateMIStock(model); // // logList.Add(DataProvider.Instance.logData); // //} // //hadUpdeteList.Add(model);//保存修改过的库存记录 // //操作库存日志表 // MIStockBackModel backModel = new MIStockBackModel();//入 // backModel.AREA_ID = model.AREA_ID; // backModel.CHANGE_NUM = model.SHELVES_NUM; // backModel.GOODS_ID = model.GOODS_ID; // backModel.GOODS_NAME = model.GOODS_NAME; // backModel.GOODS_NUM = item.REAL_COUNT; // backModel.GOODS_TYPEID = model.GOODS_TYPEID; // backModel.ID = DataProvider.Instance.MIStockBack.GetSerialNum(); // backModel.LOCATION_ID = model.LOCATION_ID; // backModel.OPERATOR_MAN = areaRepModel.IN_PERSON; // backModel.OPERATOR_MAN_NAME = areaRepModel.IN_PERSON_NAME; // backModel.OPERATOR_TYPE = "0"; // backModel.ORI_NUM = model.SHELVES_NUM - item.REAL_COUNT; // backModel.PUTIN_ID = item.TAB_IN_ID; // backModel.PRODUCTION_DATE = model.PRODUCTION_DATE; // backModel.REMARK = model.REMARK; // backModel.STOCK_ID = model.STOCK_ID; // backModel.STORAGE_ID = model.STORAGE_ID; // backModel.STORAGE_NAME = model.STORAGE_NAME; // backModel.VERSION = model.VERSION; // DataProvider.Instance.MIStockBack.Add(backModel); // logList.Add(DataProvider.Instance.logData); // //修改库位已占用体积 // GoodsInfoModel goods = new GoodsInfoModel(); // Decimal perVo = Convert.ToDecimal(DataProvider.Instance.Goods.GetGoodsDataTable(item.GOODS_ID, "", "", "").Rows[0]["GVOLUME"].ToString()); // Decimal allVo = 0; // allVo = item.REAL_COUNT * perVo; // if (allVo != 0) // { // //新库位 // StorageAreaLocationModel loc = new StorageAreaLocationModel(); // loc.STORAGE_ID = areaRepModel.STORAGE_ID; // loc.LOCATION_ID = item.IN_LOC_ID; // loc = ConvertHelper.ConvertToList(DataProvider.Instance.StorageAreaLocation.GetLocationInfoDS(loc))[0]; // loc.HASVOLUME += allVo; // loc.OPERATORID = areaRepModel.IN_PERSON; // DataProvider.Instance.StorageAreaLocation.UpdateLocHasVolume(loc); // logList.Add(DataProvider.Instance.logData); // } //} //foreach (AreaRepOutModel item in listAreaRepOut) //{ // //操作库存表 // MIStockModel model = new MIStockModel();//出 // model.LOCATION_ID = item.OUT_LOC_ID; // model.GOODS_ID = item.GOODS_ID; // model.PUTIN_ID = item.PUTIN_ID; // model.AREA_ID = areaRepModel.OUT_AREA_ID; // //得到库存记录 // bool hadMIStock = false; // foreach (MIStockModel i in hadUpdeteList) // { // if (i.LOCATION_ID == model.LOCATION_ID && i.GOODS_ID == model.GOODS_ID && i.PUTIN_ID == model.PUTIN_ID && i.AREA_ID == model.AREA_ID) // { // hadMIStock = true; // model = i; // break; // } // } // if (!hadMIStock) // { // model = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(model))[0]; // } // model.SHELVES_NUM -= item.REAL_COUNT; // if (model.SHELVES_NUM == 0) // { //删该条库存 // DataProvider.Instance.MIStock.DeleteMIStock(model); // logList.Add(DataProvider.Instance.logData); // } // else // { // hadUpdeteList.Add(model);//保存修改过的库存记录 // DataProvider.Instance.MIStock.UpdateMIStock(model); // logList.Add(DataProvider.Instance.logData); // } // //操作库存日志表 // MIStockBackModel backModel = new MIStockBackModel();//出 // backModel.AREA_ID = model.AREA_ID; // backModel.CHANGE_NUM = model.SHELVES_NUM; // backModel.GOODS_ID = model.GOODS_ID; // backModel.GOODS_NAME = model.GOODS_NAME; // backModel.GOODS_NUM = item.REAL_COUNT; // backModel.GOODS_TYPEID = model.GOODS_TYPEID; // backModel.ID = DataProvider.Instance.MIStockBack.GetSerialNum(); // backModel.LOCATION_ID = model.LOCATION_ID; // backModel.OPERATOR_MAN = areaRepModel.OUT_PERSON; // backModel.OPERATOR_MAN_NAME = areaRepModel.OUT_PERSON_NAME; // backModel.OPERATOR_TYPE = "1"; // backModel.ORI_NUM = model.SHELVES_NUM + item.REAL_COUNT; // backModel.OUT_ID = item.TAB_OUT_ID; // backModel.PRODUCTION_DATE = model.PRODUCTION_DATE; // backModel.REMARK = model.REMARK; // backModel.STOCK_ID = model.STOCK_ID; // backModel.STORAGE_ID = model.STORAGE_ID; // backModel.STORAGE_NAME = model.STORAGE_NAME; // backModel.VERSION = model.VERSION; // DataProvider.Instance.MIStockBack.Add(backModel); // logList.Add(DataProvider.Instance.logData); // //修改库位已占用体积 // GoodsInfoModel goods = new GoodsInfoModel(); // Decimal perVo = Convert.ToDecimal(DataProvider.Instance.Goods.GetGoodsDataTable(item.GOODS_ID, "", "", "").Rows[0]["GVOLUME"].ToString()); // Decimal allVo = 0; // allVo = item.REAL_COUNT * perVo; // if (allVo != 0) // { // //原库位 // StorageAreaLocationModel loc = new StorageAreaLocationModel(); // loc.STORAGE_ID = areaRepModel.STORAGE_ID; // loc.LOCATION_ID = item.OUT_LOC_ID; // loc = ConvertHelper.ConvertToList(DataProvider.Instance.StorageAreaLocation.GetLocationInfoDS(loc))[0]; // loc.HASVOLUME -= allVo; // loc.OPERATORID = areaRepModel.OUT_PERSON; // DataProvider.Instance.StorageAreaLocation.UpdateLocHasVolume(loc); // logList.Add(DataProvider.Instance.logData); // } //} } TaCmtOrRak(); return ErrText; } /// /// 修改库区间调拨单状态 /// /// 库区间调拨单Model /// 是否成功 public string UpdateAreaRepState(AreaRepModel AreaRepModel) { //修改库区间调拨单状态 DataProvider.Instance.AreaRep.UpdateAreaRepState(AreaRepModel); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; if (AreaRepModel.STATE == "1") { AreaRepOutModel m = new AreaRepOutModel(); m.AREA_REP_ID = AreaRepModel.AREA_REP_ID; DataTable table = DataProvider.Instance.AreaRepOut.GetAreaRepOutDT(m); List AreaRepOutModel = ConvertHelper.ConvertToList(table); foreach (var areaRepOutModel in AreaRepOutModel) { //根据计划数修改已占用库存 MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = areaRepOutModel.PUTIN_ID; mi.GOODS_ID = areaRepOutModel.GOODS_ID; mi.LOCATION_ID = areaRepOutModel.OUT_LOC_ID; mi.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); //写入库存占用记录表 MIStockModel mistock = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(mi))[0]; MIStockOccupyModel occupy = new MIStockOccupyModel(); occupy.AREA_ID = mistock.AREA_ID; occupy.DOCCTNUMBER = areaRepOutModel.AREA_REP_ID; occupy.GOODS_ID = mistock.GOODS_ID; occupy.LOCATION_ID = mistock.LOCATION_ID; occupy.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; occupy.PUTIN_ID = mistock.PUTIN_ID; occupy.STOCK_ID = mistock.STOCK_ID; occupy.STORAGE_ID = mistock.STORAGE_ID; DataProvider.Instance.MIStockOccupy.InsertMIStockOccupy(occupy); logList.Add(DataProvider.Instance.logData); } } TaCmtOrRak(); return ErrText; } /// /// 将已完成的或已关闭的库区间调拨单与属于它的明细放到备份表中 /// /// 库区间调拨单 /// 是否成功 public string MoveAreaRepAndTabIntoBack(AreaRepModel areaRepModel) { DataProvider.Instance.AreaRep.UpdateAreaRepState(areaRepModel); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; DataProvider.Instance.AreaRep.InsertAreaRepBack(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.AreaRepOut.InsertAreaRepOutBack(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.AreaRepIn.InsertAreaRepInBack(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.AreaRep.DeleteAreaRep(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); //获取原来的所有明细,减去原来的已占用库存 AreaRepOutModel tab = new AreaRepOutModel(); tab.AREA_REP_ID = areaRepModel.AREA_REP_ID; DataTable table = DataProvider.Instance.AreaRepOut.GetAreaRepOutDT(tab); List list = ConvertHelper.ConvertToList(table); foreach (var item in list) { try { if (string.IsNullOrEmpty(item.PUTIN_ID)) { continue; } if (string.IsNullOrEmpty(item.GOODS_ID)) { continue; } if (string.IsNullOrEmpty(item.OUT_LOC_ID)) { continue; } MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = item.PUTIN_ID; mi.GOODS_ID = item.GOODS_ID; mi.LOCATION_ID = item.OUT_LOC_ID; mi.OCCUPY_NUM = -item.PLAN_COUNT; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); //删除库存占用记录表相应记录 MIStockOccupyModel queryOccupy = new MIStockOccupyModel(); queryOccupy.GOODS_ID = mi.GOODS_ID; queryOccupy.LOCATION_ID = mi.LOCATION_ID; queryOccupy.PUTIN_ID = mi.PUTIN_ID; List occupy = ConvertHelper.ConvertToList(DataProvider.Instance.MIStockOccupy.GetMIStockOccupyDT(queryOccupy)); DataProvider.Instance.MIStockOccupy.DeleteMIStockOccupy(occupy[0]); logList.Add(DataProvider.Instance.logData); } catch (Exception) { } } DataProvider.Instance.AreaRepOut.DeleteAreaRepOut(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.AreaRepIn.DeleteAreaRepIn(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); //删除消息 DataProvider.Instance.Message.DeleteMessByRelativeNumber(areaRepModel.AREA_REP_ID); logList.Add(DataProvider.Instance.logData); TaCmtOrRak(); return ErrText; } /// /// 打印完成 /// /// 库区间调拨单 /// 是否成功 public string PrintOK(AreaRepModel model) { //修改拣货单打印次数 model.PRINT_COUNT += 1; DataProvider.Instance.AreaRep.UpdateAreaRep(model); logList.Add(DataProvider.Instance.logData); Transaction = DataProvider.Instance.TranOracle; //新增打印记录 PrintInfoModel printInfo = new PrintInfoModel(); printInfo.Order_id = model.AREA_REP_ID; printInfo.PRINT_DATE = model.DOCUMENT_TIME; printInfo.PRINT_PER = model.DOCUMENT_PERSON_ID; printInfo.Print_per_name = model.DOCUMENT_PERSON; printInfo.PRINT_TYPE = "5"; DataProvider.Instance.PrintInfo.UpdatePrintInfo(printInfo); logList.Add(DataProvider.Instance.logData); TaCmtOrRak(); return ErrText; } #region 通过出库库区、商品、商品数量获取出库库位明细 #region 变量 /// /// 需要的商品、商品数量,用于判断商品是否充足、拣货 /// private List listOrderGoods = new List(); /// /// 发货仓库的所有库存 /// private List listMIStock = new List(); /// /// 有所需商品的库存->需要拣货的库存(某种商品的) /// private List listPackingMIStock = new List(); /// /// 某商品在listPackingMIStock中的总数 /// private decimal num = 0; /// /// 某商品在拣货后为空库位的库位中的总数 /// private decimal numNew = 0; /// /// 生产日期 是否优先 /// private bool byProduce = true; /// /// 上架日期 是否优先 /// private bool byAdded = true; /// /// 捡空库位 是否优先 /// private bool byNull = true; #endregion #region 筛选 /// /// 通过生产日期筛选库存记录 /// /// true:数量正好满足 无需再次筛选 private bool GetMiStockByProductDate() { List newMIStockList = new List(); //获取listPackingMIStock中的生产日期并从小到大排序 List dtList = new List(); foreach (MIStockModel oldMIStock in listPackingMIStock) { if (!dtList.Exists(p => p == oldMIStock.PRODUCTION_DATE)) { dtList.Add(oldMIStock.PRODUCTION_DATE); } } dtList.Sort(); for (int i = 0; i < dtList.Count; i++)//遍历生产日期 { //将与当前生产日期相同的库存记录 foreach (MIStockModel oldMIStock in listPackingMIStock) { if (oldMIStock.PRODUCTION_DATE == dtList[i]) { newMIStockList.Add(oldMIStock); } } //检查当前记录的库存能否满足拣货需求,若满足:跳出循环 num = 0; foreach (MIStockModel newMIStock in newMIStockList) { //foreach (OrderDetailModel item in listOrderGoods) //{ // if (item.GOOD_ID == newMIStock.GOODS_ID) // { // num += Convert.ToDecimal(newMIStock.ABLE_NUM);//记录拣货区该商品总数 // } //} if (listPackingMIStock[0].GOODS_ID == newMIStock.GOODS_ID) { num += Convert.ToDecimal(newMIStock.ABLE_NUM);//记录拣货区该商品总数 } } foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == newMIStockList[0].GOODS_ID) { if (num == item.GOODS_NUM) { listPackingMIStock = newMIStockList; return true; } else if (num > item.GOODS_NUM) { listPackingMIStock = newMIStockList; return false; } } } } return false; } /// /// 通过上架日期筛选库存记录 /// /// true:数量正好满足 无需再次筛选 private bool GetMiStockByWaveDate() { List newMIStockList = new List(); //获取listPackingMIStock中的上架日期并从小到大排序 List dtList = new List(); foreach (MIStockModel oldMIStock in listPackingMIStock) { if (!dtList.Exists(p => p == oldMIStock.WARE_DATE)) { dtList.Add(oldMIStock.WARE_DATE); } } dtList.Sort(); for (int i = 0; i < dtList.Count; i++)//遍历上架日期 { //将与当前上架日期相同的库存记录 foreach (MIStockModel oldMIStock in listPackingMIStock) { if (oldMIStock.WARE_DATE == dtList[i]) { newMIStockList.Add(oldMIStock); } } //检查当前记录的库存能否满足拣货需求,若满足:跳出循环 num = 0; foreach (MIStockModel newMIStock in newMIStockList) { //foreach (OrderDetailModel item in listOrderGoods) //{ // if (item.GOOD_ID == newMIStock.GOODS_ID) // { // num += Convert.ToDecimal(newMIStock.ABLE_NUM);//记录拣货区该商品总数 // } //} if (listPackingMIStock[0].GOODS_ID == newMIStock.GOODS_ID) { num += Convert.ToDecimal(newMIStock.ABLE_NUM);//记录拣货区该商品总数 } } foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == newMIStockList[0].GOODS_ID) { if (num == item.GOODS_NUM) { listPackingMIStock = newMIStockList; return true; } else if (num > item.GOODS_NUM) { listPackingMIStock = newMIStockList; return false; } } } } return false; } /// /// 通过拣货后的已占用容积筛选库存记录 /// /// 只存放所需商品的库位 /// false:数量不足 private bool GetMiStockByOnlyOne(ref List newMIStockList) { numNew = 0; //获取listPackingMIStock中的所有库位 List locList = new List(); foreach (MIStockModel oldMIStock in listPackingMIStock) { if (!locList.Exists(p => p == oldMIStock.LOCATION_ID)) { locList.Add(oldMIStock.LOCATION_ID); } } locList.Sort(); //遍历存在该商品的所有库位 for (int i = 0; i < locList.Count; i++) { if (listMIStock.FindAll(p => p.LOCATION_ID == locList[i]).Count > 1) { locList[i] = string.Empty;//所有不只存放该商品的库位移除 } } //记录只存放一种商品的库存 foreach (string i in locList) { if (i != string.Empty) { foreach (MIStockModel item in listPackingMIStock) { if (i == item.LOCATION_ID) { newMIStockList.Add(item); } } } } if (newMIStockList.Count > 0)//只存放该商品的库存->拣货后已占用容积为0的库位 { //检查当前记录的库存能否满足拣货需求 foreach (MIStockModel newMIStock in newMIStockList) { if (listPackingMIStock[0].GOODS_ID == newMIStock.GOODS_ID) { numNew += Convert.ToDecimal(newMIStock.ABLE_NUM);//记录拣货区只有该商品的库位上该商品总数 } } foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == newMIStockList[0].GOODS_ID) { if (numNew == item.GOODS_NUM || newMIStockList.Count == 1) { listPackingMIStock = newMIStockList; return true; } else if (numNew > item.GOODS_NUM) { listPackingMIStock = newMIStockList; newMIStockList = new List(); GetMiStockBySurplus(ref newMIStockList); return true; //newMIStockList.Sort((left, right) => //{ // if ((left.ABLE_NUM) > (right.ABLE_NUM)) // return -1; // else if ((left.ABLE_NUM) == (right.ABLE_NUM)) // return 0; // else // return 1; //});//排序 先移走库存最小的 //while ( (numNew - newMIStockList[newMIStockList.Count - 1].ABLE_NUM) > item.GOODS_NUM)//保证拣货库位不多余 //{ // if ((numNew - newMIStockList[newMIStockList.Count - 1].ABLE_NUM) < item.GOODS_NUM)//保证商品不少于 // { // break; // } // numNew -= newMIStockList[newMIStockList.Count - 1].ABLE_NUM; // newMIStockList.RemoveAt(newMIStockList.Count - 1);//移除最后一个 //} //return true; } else { return false; } } } } return false; } /// /// 通过拣货后的剩余容积筛选库存记录 /// /// 只存放所需商品的库位(必须拣货的库位) private void GetMiStockBySurplus(ref List newMIStockList) { //int needNum = 0;//还需要的数量 //foreach (OrderDetailModel item in listOrderGoods) //{ // if (item.GOOD_ID == newMIStockList[0].GOODS_ID) // { // needNum = Convert.ToDecimal(item.GOODS_NUM) - numNew; // } //} ////通过商品ID得商品 //DataTable table = DataProvider.Instance.Goods.GetGoodsDataTable(newMIStockList[0].GOODS_ID,"","",""); //GoodsInfoModel goods = ConvertHelper.ConvertToList(table)[0]; if (newMIStockList.Count > 0) { //遍历必须拣货的库位(拣货后已占用容积为0的) foreach (MIStockModel newMIStock in newMIStockList) { listPackingMIStock.RemoveAll(p => p.LOCATION_ID == newMIStock.LOCATION_ID);//移除重复库位 } } //获取listPackingMIStock中的所有库位 List locList = new List(); foreach (MIStockModel oldMIStock in listPackingMIStock) { if (!locList.Exists(p => p == oldMIStock.LOCATION_ID)) { locList.Add(oldMIStock.LOCATION_ID); } } //locList.Sort(); List listLoc = new List(); foreach (string locID in locList) { StorageAreaLocationModel loc = new StorageAreaLocationModel(); loc.STORAGE_ID = listPackingMIStock[0].STORAGE_ID; loc.LOCATION_ID = locID; DataTable table = DataProvider.Instance.StorageAreaLocation.GetLocationInfoDS(loc); loc = ConvertHelper.ConvertToList(table)[0]; loc.HASVOLUME = 0; listLoc.Add(loc); } //算各个库位拣货后的已占用体积 foreach (StorageAreaLocationModel loc in listLoc) { foreach (MIStockModel miStock in listMIStock) { if (miStock.LOCATION_ID == loc.LOCATION_ID && miStock.GOODS_ID != listPackingMIStock[0].GOODS_ID) { DataTable table = DataProvider.Instance.Goods.GetGoodsDataTable(miStock.GOODS_ID, "", "", ""); GoodsInfoModel otherGoods = ConvertHelper.ConvertToList(table)[0]; loc.HASVOLUME += otherGoods.GVOLUME; } } } //按剩余容积排序 listLoc.Sort((left, right) => { if ((left.VOLUME - left.HASVOLUME) > (right.VOLUME - right.HASVOLUME)) return 1; else if ((left.VOLUME - left.HASVOLUME) == (right.VOLUME - right.HASVOLUME)) return 0; else return -1; }); for (int i = 0; i < listLoc.Count; i++)//遍历 { //将与当前编号相同的库存记录 foreach (MIStockModel oldMIStock in listPackingMIStock) { if (oldMIStock.LOCATION_ID == listLoc[i].LOCATION_ID) { newMIStockList.Add(oldMIStock); } } //检查当前记录的库存能否满足拣货需求,若满足:跳出循环 num = 0; foreach (MIStockModel newMIStock in newMIStockList) { if (listPackingMIStock[0].GOODS_ID == newMIStock.GOODS_ID) { num += Convert.ToDecimal(newMIStock.ABLE_NUM);//记录拣货区该商品总数 } } foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == newMIStockList[0].GOODS_ID) { if (num == item.GOODS_NUM) { listPackingMIStock = newMIStockList; return; } else if (num > item.GOODS_NUM) { listPackingMIStock = newMIStockList; return; } } } } } #endregion /// /// 通过出库库区、商品、商品数量获取出库库位明细 /// /// /// /// /// 是否成功/找不到策略的信息 public string GetAreaRepOutLoc(AreaRepModel areaRepModel, ref List listOut) { List tempOut = new List();//存放计划数量为0的 tempOut = listOut.FindAll(p=>p.PLAN_COUNT == 0 || !string.IsNullOrEmpty(p.OUT_LOC_ID)); listOut.RemoveAll(p => p.PLAN_COUNT == 0 || !string.IsNullOrEmpty(p.OUT_LOC_ID)); #region 清空数据 listOrderGoods = new List(); listMIStock = new List(); listPackingMIStock = new List(); num = 0; numNew = 0; byProduce = true; byAdded = true; byNull = true; listPackingMIStock = new List();//有所需商品的库存->需要拣货的库存(某种商品的) #endregion #region 转成标准单位,数量一并改变 foreach (AreaRepOutModel orderTab in listOut) { //获取商品标准单位 DataTable dt = DataProvider.Instance.Goods.GetGoodsDataTable(orderTab.GOODS_ID, "", "", ""); List list = null; if (DataLogErrWrite(dt, "获取商品标准单位")) { list = ConvertHelper.ConvertToList(dt); } else { return ErrText; } string standardUnit = list[0].UNIT; //如果不是标准单位 转换 if (orderTab.UNIT != null && standardUnit != orderTab.UNIT) { //获取商品可选单位、转换率 DataTable unitTable = DataProvider.Instance.Goods.GetGoodsUnit(orderTab.GOODS_ID); if (!DataLogErrWrite(unitTable, "获取商品可选单位、转换率")) { return ErrText; } //获取转换率 decimal convert = 0; foreach (DataRow unitRow in unitTable.Rows) { if (unitRow[0].ToString() == orderTab.UNIT) { convert = decimal.Parse(unitRow[2].ToString()); break; } } if (convert == 0) { ErrText += "单位转换率不能为0,请检查商品资料 "; return ErrText; } //转成标准单位,数量一并改变 if (orderTab.PLAN_COUNT > 0) { orderTab.PLAN_COUNT = orderTab.PLAN_COUNT / convert; } if (orderTab.REAL_COUNT > 0) { orderTab.REAL_COUNT = orderTab.REAL_COUNT / convert; } if (orderTab.MISTOCK_NUM > 0) { orderTab.MISTOCK_NUM = orderTab.MISTOCK_NUM / convert; } orderTab.UNIT = standardUnit; } } #endregion #region 获取需要拣货的商品 foreach (var item in listOut) { OrderDetailModel tab = new OrderDetailModel(); tab.GOOD_ID = item.GOODS_ID; tab.GOODS_NUM = item.PLAN_COUNT; tab.UNIT = item.UNIT; listOrderGoods.Add(tab); } #endregion #region 获取发货仓库的所有库存 MIStockModel queryMIStock = new MIStockModel(); queryMIStock.STORAGE_ID = areaRepModel.STORAGE_ID; DataTable tableMIStock = DataProvider.Instance.MIStock.GetMIStockDT(queryMIStock); listMIStock = ConvertHelper.ConvertToList(tableMIStock);//发货仓库的所有库存 if (!DataLogErrWrite(tableMIStock, "获取发货仓库的所有库存")) { return ErrText; } listMIStock.RemoveAll(p => p.ABLE_NUM == 0);//移除所有数量为0的 #endregion #region 根据拣货策略记录需要的商品在拣货区的数量 DataTable downStrategy = DataProvider.Instance.DownStrategy.GetDownStrategyDTByStorage(areaRepModel.STORAGE_ID); bool haveStrategy = false; foreach (DataRow row in downStrategy.Rows) { if (areaRepModel.OUT_AREA_ID == row["STORAGE_AREA_ID"].ToString()) { haveStrategy = true; foreach (MIStockModel MIStock in listMIStock) { if (MIStock.AREA_ID == row["STORAGE_AREA_ID"].ToString()) { foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == MIStock.GOODS_ID) { item.AREA_NUM += Convert.ToDecimal(MIStock.ABLE_NUM);//记录拣货区该商品总数 } } } } } } if (!haveStrategy) { //ErrText = "找不到下架策略 "; return ErrText; } #endregion #region 获取对应库位 foreach (OrderDetailModel item in listOrderGoods)//遍历需要拣货的商品 { //获取有所需商品的库存集合 listPackingMIStock = new List(); foreach (DataRow row in downStrategy.Rows) { if (areaRepModel.OUT_AREA_ID == row["STORAGE_AREA_ID"].ToString()) { foreach (MIStockModel MIStock in listMIStock) { if (MIStock.AREA_ID == row["STORAGE_AREA_ID"].ToString()) { if (item.GOOD_ID == MIStock.GOODS_ID) { listPackingMIStock.Add(MIStock); } } } if (row["PRODUCE_FLAG"].ToString() == "0") { byProduce = false; } else { byProduce = true; } if (row["ADDED_FLAG"].ToString() == "0") { byAdded = false; } else { byAdded = true; } if (row["NULL_FLAG"].ToString() == "0") { byNull = false; } else { byNull = true; } } } //通过生产日期对listGoodsMIStock筛选 if (byProduce && (GetMiStockByProductDate() || listPackingMIStock.Count == 1))//数量正好满足或只有1个库位可以满足 { } else { //通过上架日期对listGoodsMIStock筛选 if (byAdded && (GetMiStockByWaveDate() || listPackingMIStock.Count == 1))//数量正好满足或只有1个库位可以满足 { } else { List newMIList = new List();//拣货后已占用容积为0的所有库位(只有这一种商品的库位) if (byNull && GetMiStockByOnlyOne(ref newMIList)) { } else//少 { GetMiStockBySurplus(ref newMIList);//取拣货后剩余容积大的 } } } List tempOutList = new List(); foreach (var outModel in listOut) { decimal tempCount = outModel.PLAN_COUNT; List tempList = listPackingMIStock.FindAll(p => p.GOODS_ID == outModel.GOODS_ID); if (tempList.Count == 0) { continue; } //outModel.OUT_LOC_ID = tempList[0].LOCATION_ID; //if (tempList.Count > 1) //{ // outModel.PLAN_COUNT = tempList[0].ABLE_NUM; for (int i = 0; i < tempList.Count; i++) { AreaRepOutModel tempOutModel = new AreaRepOutModel(); tempOutModel.AREA_REP_ID = outModel.AREA_REP_ID; tempOutModel.GOODS_ID = outModel.GOODS_ID; tempOutModel.GOODS_NAME = outModel.GOODS_NAME; tempOutModel.MISTOCK_NUM = outModel.MISTOCK_NUM; tempOutModel.PRICE = outModel.PRICE; tempOutModel.REAL_COUNT = outModel.REAL_COUNT; tempOutModel.SCALE_UNIT = outModel.SCALE_UNIT; tempOutModel.SORT = outModel.SORT; tempOutModel.TAB_OUT_ID = outModel.TAB_OUT_ID; tempOutModel.UNIT = outModel.UNIT; tempOutModel.UNIT_NAME = outModel.UNIT_NAME; tempOutModel.OUT_LOC_ID = tempList[i].LOCATION_ID; tempOutModel.LOC_NUM = tempList[i].ABLE_NUM; tempOutModel.DOCCTNUMBER = tempList[i].DOCCTNUMBER; tempOutModel.PUTIN_ID = tempList[i].PUTIN_ID; tempOutModel.PRODUCTION_DATE = tempList[i].PRODUCTION_DATE; tempOutModel.WARE_DATE = tempList[i].WARE_DATE; tempOutModel.PROVIDER_ID = tempList[i].PROVIDER_ID; if (tempList.Count - 1 == i) { tempOutModel.PLAN_COUNT = tempCount - tempOutList.FindAll(p => p.GOODS_ID == outModel.GOODS_ID).Sum(p => p.PLAN_COUNT); } else { tempOutModel.PLAN_COUNT = tempList[i].ABLE_NUM; } tempOutList.Add(tempOutModel); } //} } listOut.AddRange(tempOutList); //单位转换回去 } #endregion listOut.RemoveAll(p=>p.PLAN_COUNT > 0 && string.IsNullOrEmpty(p.OUT_LOC_ID)); ////根据库位 商品 汇总 //List newOutList = new List(); //foreach (var item in listOut) //{ // if (newOutList.Exists(p => p.OUT_LOC_ID == item.OUT_LOC_ID && p.GOODS_ID == item.GOODS_ID)) // { // AreaRepOutModel tempOutModel = newOutList.Find(p => p.OUT_LOC_ID == item.OUT_LOC_ID && p.GOODS_ID == item.GOODS_ID); // tempOutModel.PLAN_COUNT += item.PLAN_COUNT; // tempOutModel.LOC_NUM += item.LOC_NUM; // } // else { // newOutList.Add(item); // } //} //listOut.Clear(); //listOut.AddRange(newOutList); listOut.AddRange(tempOut); listOut.OrderBy(p => p.GOODS_ID); return ErrText; } /// /// 通过库区名称得到库区ID(仓库编号指定为发货仓库ID) /// /// /// private string getAreaID(string areaName) { StorageAreaModel queryArea = new StorageAreaModel(); queryArea.STORAGE_AREA_NAME = areaName; queryArea.STORAGE_ID = storageID; DataTable table = DataProvider.Instance.StorageArea.GetAreaInfoDS(queryArea, string.Empty); string areaID = string.Empty; if (table.Rows.Count == 0) { queryArea = new StorageAreaModel(); queryArea.STORAGE_ID = storageID; table = DataProvider.Instance.StorageArea.GetAreaInfoDS(queryArea, string.Empty); areaID = ConvertHelper.ConvertToList(table)[0].STORAGE_AREA_ID; } else { areaID = ConvertHelper.ConvertToList(table)[0].STORAGE_AREA_ID; //if (DataLogErrWrite(table, "获取发货仓库拣货区库区编号")) //{ //} //else //{ // return string.Empty; //} } return areaID; } #endregion private void getAreaGoodsType(ref List areaGoodsTypeList, string GOODS_TYPE_ID) { if (!string.IsNullOrEmpty(GOODS_TYPE_ID)) { AreaGoodsTypeModel m = new AreaGoodsTypeModel(); m.GOODS_TYPE_ID = GOODS_TYPE_ID; DataTable table2 = DataProvider.Instance.AreaGoodsType.GetAreaGoodsTypeDT(m); areaGoodsTypeList = ConvertHelper.ConvertToList(table2); if (areaGoodsTypeList == null || areaGoodsTypeList.Count == 0) { GoodsTypeModel goodsType = new GoodsTypeModel(); goodsType.GOODS_TYPE_ID = m.GOODS_TYPE_ID; List gtList = ConvertHelper.ConvertToList(DataProvider.Instance.GoodsType.GetGoodsTypeDataTable(goodsType)); if (gtList != null && gtList.Count > 0 && !string.IsNullOrEmpty(gtList[0].PARENT_ID)) { m.GOODS_TYPE_ID = gtList[0].PARENT_ID; table2 = DataProvider.Instance.AreaGoodsType.GetAreaGoodsTypeDT(m); areaGoodsTypeList = ConvertHelper.ConvertToList(table2); if (areaGoodsTypeList == null || areaGoodsTypeList.Count == 0) { goodsType = new GoodsTypeModel(); goodsType.GOODS_TYPE_ID = m.GOODS_TYPE_ID; gtList = ConvertHelper.ConvertToList(DataProvider.Instance.GoodsType.GetGoodsTypeDataTable(goodsType)); if (gtList != null && gtList.Count > 0 && !string.IsNullOrEmpty(gtList[0].PARENT_ID)) { m.GOODS_TYPE_ID = gtList[0].PARENT_ID; table2 = DataProvider.Instance.AreaGoodsType.GetAreaGoodsTypeDT(m); areaGoodsTypeList = ConvertHelper.ConvertToList(table2); } } } } } } /// /// 仓库编号 /// string storageID; /// /// 线上订单占用库存 /// /// /// /// /// /// /// public string OccupyMIStock(string province, string city, string district,string id, Dictionary listD) { StorageOrderModel storOrderModel = new StorageOrderModel(); storOrderModel.TOWN_ID = DataProvider.Instance.AddressArea.GetAddressArea(province, city, district).Rows[0][0].ToString(); DataTable table = DataProvider.Instance.StorageOrder.GetStorOrderDT(storOrderModel); List storOrderList = ConvertHelper.ConvertToList(table); if (storOrderList == null || storOrderList.Count == 0) { return "找不到配送仓库"; } storageID = storOrderList[0].STORAGE_ID; List listOut = new List(); foreach (var item in listD) { AreaRepOutModel areaRepOut = new AreaRepOutModel(); areaRepOut.GOODS_ID = item.Key; areaRepOut.PLAN_COUNT = item.Value; listOut.Add(areaRepOut); } List tempOut = new List();//存放计划数量为0的 tempOut = listOut.FindAll(p => p.PLAN_COUNT == 0 || !string.IsNullOrEmpty(p.OUT_LOC_ID)); listOut.RemoveAll(p => p.PLAN_COUNT == 0 || !string.IsNullOrEmpty(p.OUT_LOC_ID)); #region 清空数据 listOrderGoods = new List(); listMIStock = new List(); listPackingMIStock = new List(); num = 0; numNew = 0; byProduce = true; byAdded = true; byNull = true; listPackingMIStock = new List();//有所需商品的库存->需要拣货的库存(某种商品的) #endregion listPackingMIStock = new List();//有所需商品的库存->需要拣货的库存(某种商品的) DataTable downStrategy = DataProvider.Instance.DownStrategy.GetDownStrategyDTByStorage(storageID); StorageAreaModel tempArea = new StorageAreaModel(); tempArea.STORAGE_ID = storageID; List listJianHuo = ConvertHelper.ConvertToList(DataProvider.Instance.StorageArea.GetAreaInfoDS(tempArea, "拣配区")); List listShangJia = ConvertHelper.ConvertToList(DataProvider.Instance.StorageArea.GetAreaInfoDS(tempArea, "整箱区")); foreach (DataRow row in downStrategy.Rows) { if (!listJianHuo.Exists(p => p.STORAGE_AREA_ID == row["STORAGE_AREA_ID"].ToString())) { row["STORAGE_AREA_ID"] = string.Empty; } } #region 获取需要拣货的商品 foreach (var item in listOut) { OrderDetailModel tab = new OrderDetailModel(); tab.GOOD_ID = item.GOODS_ID; tab.GOODS_NUM = item.PLAN_COUNT; tab.UNIT = item.UNIT; listOrderGoods.Add(tab); } #endregion #region 获取发货仓库的所有库存 MIStockModel queryMIStock = new MIStockModel(); queryMIStock.STORAGE_ID = storageID; DataTable tableMIStock = DataProvider.Instance.MIStock.GetMIStockDT(queryMIStock); listMIStock = ConvertHelper.ConvertToList(tableMIStock);//发货仓库的所有库存 if (!DataLogErrWrite(tableMIStock, "获取发货仓库的所有库存")) { return ErrText; } listMIStock.RemoveAll(p => p.ABLE_NUM == 0);//移除所有数量为0的 #endregion #region 根据拣货策略记录需要的商品在拣货区的数量 int te = 0; List areaList = new List(); foreach (DataRow row in downStrategy.Rows) { if (row["STORAGE_AREA_ID"].ToString() == string.Empty) { continue; } te++; } if (te == 0) { foreach (var item in listOrderGoods) { string areaID = string.Empty; List areaGoodsTypeList = new List(); getAreaGoodsType(ref areaGoodsTypeList, item.GOODS_TYPE_ID); if (areaGoodsTypeList != null && areaGoodsTypeList.Count > 0) { foreach (var jh in listJianHuo) { if (areaGoodsTypeList.Exists(p => p.AREA_ID == jh.STORAGE_AREA_ID)) { areaID = jh.STORAGE_AREA_ID; break; } } } if (areaID == string.Empty) { areaID = getAreaID("拣配区"); } MIStockModel m = new MIStockModel(); m.AREA_ID = areaID; m.GOODS_ID = item.GOOD_ID; areaList.Add(m); } foreach (var area in areaList) { foreach (MIStockModel MIStock in listMIStock) { if (area.GOODS_ID == MIStock.GOODS_ID && MIStock.AREA_ID == area.AREA_ID) { foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == MIStock.GOODS_ID) { item.AREA_NUM += Convert.ToDecimal(MIStock.ABLE_NUM);//记录拣货区该商品总数 } } } } } //ErrText += "找不到该仓库的下架策略或该仓库的下架策略已被禁用 "; //return ErrText; } else { foreach (DataRow row in downStrategy.Rows) { if (row["STORAGE_AREA_ID"].ToString() == string.Empty) { continue; } foreach (MIStockModel MIStock in listMIStock) { if (MIStock.AREA_ID == row["STORAGE_AREA_ID"].ToString()) { foreach (OrderDetailModel item in listOrderGoods) { if (item.GOOD_ID == MIStock.GOODS_ID) { item.AREA_NUM += Convert.ToDecimal(MIStock.ABLE_NUM);//记录拣货区该商品总数 } } } } } } #endregion //判断库存是否充足,如果不足调拨 bool have = true; List listAddGoods = new List(); foreach (OrderDetailModel item in listOrderGoods) { if (item.AREA_NUM < item.GOODS_NUM) { have = false; if (listAddGoods.Exists(p => p.GOOD_ID == item.GOOD_ID)) { listAddGoods.Find(p => p.GOOD_ID == item.GOOD_ID).GOODS_NUM += (item.GOODS_NUM - item.AREA_NUM); } else { OrderDetailModel t = new OrderDetailModel(); t.GOOD_ID = item.GOOD_ID; t.GOODS_NUM = (item.GOODS_NUM - item.AREA_NUM); t.GOODS_TYPE_ID = item.GOODS_TYPE_ID; if (t.GOODS_NUM <= 0) { break; } listAddGoods.Add(t); } } } if (!have) { List listAreaRep = new List(); List listInGoods = new List(); List listOutGoods = new List(); Transaction = DataProvider.Instance.TranOracle; foreach (OrderDetailModel item in listAddGoods) { #region 通过商品找商品分类找存放该商品分类的捡货区、上架区 string inAreaID = string.Empty; string outAreaID = string.Empty; List areaGoodsTypeList = new List(); getAreaGoodsType(ref areaGoodsTypeList, item.GOODS_TYPE_ID); if (areaGoodsTypeList != null && areaGoodsTypeList.Count > 0) { foreach (var jh in listJianHuo) { if (areaGoodsTypeList.Exists(p => p.AREA_ID == jh.STORAGE_AREA_ID)) { inAreaID = jh.STORAGE_AREA_ID; break; } } foreach (var sj in listShangJia) { if (areaGoodsTypeList.Exists(p => p.AREA_ID == sj.STORAGE_AREA_ID)) { outAreaID = sj.STORAGE_AREA_ID; break; } } } if (inAreaID == string.Empty) { inAreaID = getAreaID("拣配区"); } if (outAreaID == string.Empty) { outAreaID = getAreaID("整箱区"); } AreaRepModel areaRepGoods; if (!listAreaRep.Exists(p => p.IN_AREA_ID == inAreaID && p.OUT_AREA_ID == outAreaID)) { areaRepGoods = new AreaRepModel();//商品调拨单 areaRepGoods.CREATE_METHOD = "0"; //areaRepGoods.CREATE_PERSON = listOrders[0].CREATE_MAN; areaRepGoods.IN_AREA_ID = inAreaID; areaRepGoods.OUT_AREA_ID = outAreaID; areaRepGoods.STATE = "0"; areaRepGoods.STORAGE_ID = storageID; areaRepGoods.REASON = "0"; areaRepGoods.TOTAL_PLAN_NUM = 0;//计划出库总数 areaRepGoods.AREA_REP_ID = DataProvider.Instance.AreaRep.InsertAreaRep(areaRepGoods); logList.Add(DataProvider.Instance.logData); listAreaRep.Add(areaRepGoods); } else { areaRepGoods = listAreaRep.Find(p => p.IN_AREA_ID == inAreaID && p.OUT_AREA_ID == outAreaID); } #endregion AreaRepInModel inGoods = new AreaRepInModel(); inGoods.GOODS_ID = item.GOOD_ID; inGoods.AREA_REP_ID = areaRepGoods.AREA_REP_ID; //上架区商品数 inGoods.MISTOCK_NUM = 0; foreach (MIStockModel MIStock in listMIStock) { if (MIStock.AREA_ID == outAreaID) { if (inGoods.GOODS_ID == MIStock.GOODS_ID) { inGoods.MISTOCK_NUM += Convert.ToDecimal(MIStock.ABLE_NUM); } } } inGoods.PLAN_COUNT = item.GOODS_NUM;// num + repGoodsNum;////////////////////////////////??????????????????????????????? listInGoods.Add(inGoods); AreaRepOutModel outGoods = new AreaRepOutModel(); outGoods.AREA_REP_ID = areaRepGoods.AREA_REP_ID; outGoods.GOODS_ID = item.GOOD_ID; outGoods.MISTOCK_NUM = inGoods.MISTOCK_NUM; outGoods.PLAN_COUNT = inGoods.PLAN_COUNT; listOutGoods.Add(outGoods); //areaRepGoods.TOTAL_PLAN_NUM += inGoods.PLAN_COUNT; //decimal nu = item.AREA_NUM - Convert.ToDecimal(item.GOODS_NUM); //if (nu < addGoodsNum)//调拨商品 //{ // AreaRepInModel inGoods = new AreaRepInModel(); // inGoods.GOODS_ID = item.GOOD_ID; // //上架区商品数 // inGoods.MISTOCK_NUM = 0; // foreach (MIStockModel MIStock in listMIStock) // { // if (MIStock.AREA_NAME == "上架区") // { // if (inGoods.GOODS_ID == MIStock.GOODS_ID) // { // inGoods.MISTOCK_NUM += Convert.ToDecimal(MIStock.ABLE_NUM); // } // } // } // inGoods.PLAN_COUNT = 0;// num + repGoodsNum; // listInGoods.Add(inGoods); // AreaRepOutModel outGoods = new AreaRepOutModel(); // outGoods.GOODS_ID = item.GOOD_ID; // outGoods.MISTOCK_NUM = inGoods.MISTOCK_NUM; // outGoods.PLAN_COUNT = 0;// num + repGoodsNum; // listOutGoods.Add(outGoods); // areaRepGoods.TOTAL_PLAN_NUM += inGoods.PLAN_COUNT; //} } foreach (var areaRepModel in listAreaRep) { List listO = listOutGoods.FindAll(p => p.AREA_REP_ID == areaRepModel.AREA_REP_ID); //ErrText += IBussFactory.Instance().GetAreaRepOutLoc(areaRepModel, ref listO); } //增加明细 foreach (AreaRepOutModel areaRepOutModel in listOutGoods) { DataProvider.Instance.AreaRepOut.InsertAreaRepOut(areaRepOutModel); logList.Add(DataProvider.Instance.logData); ////根据计划数修改已占用库存 //MIStockModel mi = new MIStockModel(); //mi.PUTIN_ID = areaRepOutModel.PUTIN_ID; //mi.GOODS_ID = areaRepOutModel.GOODS_ID; //mi.LOCATION_ID = areaRepOutModel.OUT_LOC_ID; //mi.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; //DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); //logList.Add(DataProvider.Instance.logData); ////写入库存占用记录表 //MIStockModel mistock = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(mi))[0]; //MIStockOccupyModel occupy = new MIStockOccupyModel(); //occupy.AREA_ID = mistock.AREA_ID; //occupy.DOCCTNUMBER = areaRepOutModel.AREA_REP_ID; //occupy.GOODS_ID = mistock.GOODS_ID; //occupy.LOCATION_ID = mistock.LOCATION_ID; //occupy.OCCUPY_NUM = areaRepOutModel.PLAN_COUNT; //occupy.PUTIN_ID = mistock.PUTIN_ID; //occupy.STOCK_ID = mistock.STOCK_ID; //occupy.STORAGE_ID = mistock.STORAGE_ID; //DataProvider.Instance.MIStockOccupy.InsertMIStockOccupy(occupy); //logList.Add(DataProvider.Instance.logData); listAreaRep.Find(p => p.AREA_REP_ID == areaRepOutModel.AREA_REP_ID).TOTAL_PLAN_NUM += areaRepOutModel.PLAN_COUNT; } foreach (AreaRepInModel areaRepInModel in listInGoods) { DataProvider.Instance.AreaRepIn.InsertAreaRepIn(areaRepInModel); logList.Add(DataProvider.Instance.logData); } foreach (var item in listAreaRep)//修改计划总数 { DataProvider.Instance.AreaRep.UpdateAreaRep(item); logList.Add(DataProvider.Instance.logData); } TaCmtOrRak();//提交事务 return "库存不足"; } #region 获取对应库位 foreach (OrderDetailModel item in listOrderGoods)//遍历需要拣货的商品 { //获取有所需商品的库存集合 listPackingMIStock = new List(); if (te == 0) { foreach (var area in areaList) { foreach (MIStockModel MIStock in listMIStock) { if (area.GOODS_ID == MIStock.GOODS_ID && MIStock.AREA_ID == area.AREA_ID) { foreach (OrderDetailModel ite in listOrderGoods) { if (ite.GOOD_ID == MIStock.GOODS_ID) { listPackingMIStock.Add(MIStock); } } } } } } else { foreach (DataRow row in downStrategy.Rows) { if (row["STORAGE_AREA_ID"].ToString() == string.Empty) { continue; } foreach (MIStockModel MIStock in listMIStock) { if (MIStock.AREA_ID == row["STORAGE_AREA_ID"].ToString()) { if (item.GOOD_ID == MIStock.GOODS_ID) { listPackingMIStock.Add(MIStock); } } } if (row["PRODUCE_FLAG"].ToString() == "0") { byProduce = false; } else { byProduce = true; } if (row["ADDED_FLAG"].ToString() == "0") { byAdded = false; } else { byAdded = true; } if (row["NULL_FLAG"].ToString() == "0") { byNull = false; } else { byNull = true; } } } //通过生产日期对listGoodsMIStock筛选 if (byProduce && (GetMiStockByProductDate() || listPackingMIStock.Count == 1))//数量正好满足或只有1个库位可以满足 { } else { //通过上架日期对listGoodsMIStock筛选 if (byAdded && (GetMiStockByWaveDate() || listPackingMIStock.Count == 1))//数量正好满足或只有1个库位可以满足 { } else { List newMIList = new List();//拣货后已占用容积为0的所有库位(只有这一种商品的库位) if (byNull && GetMiStockByOnlyOne(ref newMIList)) { } else//少 { GetMiStockBySurplus(ref newMIList);//取拣货后剩余容积大的 } } } List tempOutList = new List(); foreach (var outModel in listOut) { decimal tempCount = outModel.PLAN_COUNT; List tempList = listPackingMIStock.FindAll(p => p.GOODS_ID == outModel.GOODS_ID); if (tempList.Count == 0) { continue; } for (int i = 0; i < tempList.Count; i++) { AreaRepOutModel tempOutModel = new AreaRepOutModel(); tempOutModel.AREA_REP_ID = outModel.AREA_REP_ID; tempOutModel.GOODS_ID = outModel.GOODS_ID; tempOutModel.GOODS_NAME = outModel.GOODS_NAME; tempOutModel.MISTOCK_NUM = outModel.MISTOCK_NUM; tempOutModel.PRICE = outModel.PRICE; tempOutModel.REAL_COUNT = outModel.REAL_COUNT; tempOutModel.SCALE_UNIT = outModel.SCALE_UNIT; tempOutModel.SORT = outModel.SORT; tempOutModel.TAB_OUT_ID = outModel.TAB_OUT_ID; tempOutModel.UNIT = outModel.UNIT; tempOutModel.UNIT_NAME = outModel.UNIT_NAME; tempOutModel.OUT_LOC_ID = tempList[i].LOCATION_ID; tempOutModel.LOC_NUM = tempList[i].ABLE_NUM; tempOutModel.DOCCTNUMBER = tempList[i].DOCCTNUMBER; tempOutModel.PUTIN_ID = tempList[i].PUTIN_ID; tempOutModel.PRODUCTION_DATE = tempList[i].PRODUCTION_DATE; tempOutModel.WARE_DATE = tempList[i].WARE_DATE; tempOutModel.PROVIDER_ID = tempList[i].PROVIDER_ID; if (tempList.Count - 1 == i) { tempOutModel.PLAN_COUNT = tempCount - tempOutList.FindAll(p => p.GOODS_ID == outModel.GOODS_ID).Sum(p => p.PLAN_COUNT); } else { tempOutModel.PLAN_COUNT = tempList[i].ABLE_NUM; } tempOutList.Add(tempOutModel); } //} } listOut.AddRange(tempOutList); } #endregion listOut.RemoveAll(p => p.PLAN_COUNT > 0 && string.IsNullOrEmpty(p.OUT_LOC_ID)); listOut.AddRange(tempOut); Transaction = DataProvider.Instance.TranOracle; //减库存 foreach (var i in listOut) { //查询数据库里面有没有该商品,如果没有则插入该商品(商品编号,商品名称) foreach (var or_de_Model in listOut) { if (DataProvider.Instance.Goods.GetGoodsDataTable(or_de_Model.GOODS_ID, or_de_Model.GOODS_NAME, "", "").Rows.Count <= 0) { GoodsInfoModel goods = new GoodsInfoModel(); goods.GOODS_ID = or_de_Model.GOODS_ID; goods.GOODS_NAME = or_de_Model.GOODS_NAME; //DataProvider.Instance.Goods.AddGoodsInfo(goods); } } //根据计划数修改已占用库存 MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = i.PUTIN_ID; mi.GOODS_ID = i.GOODS_ID; mi.LOCATION_ID = i.OUT_LOC_ID; mi.OCCUPY_NUM = i.PLAN_COUNT; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); //写入库存占用记录表 MIStockModel mistock = ConvertHelper.ConvertToList(DataProvider.Instance.MIStock.GetMIStockDT(mi))[0]; MIStockOccupyModel occupy = new MIStockOccupyModel(); occupy.AREA_ID = mistock.AREA_ID; occupy.DOCCTNUMBER = id; occupy.GOODS_ID = mistock.GOODS_ID; occupy.LOCATION_ID = mistock.LOCATION_ID; occupy.OCCUPY_NUM = i.PLAN_COUNT; occupy.PUTIN_ID = mistock.PUTIN_ID; occupy.STOCK_ID = mistock.STOCK_ID; occupy.STORAGE_ID = mistock.STORAGE_ID; DataProvider.Instance.MIStockOccupy.InsertMIStockOccupy(occupy); logList.Add(DataProvider.Instance.logData); } TaCmtOrRak(); return ErrText; } /// /// ERP线上订单取消库存占用 /// /// /// public string CancelOccupyMIStock(string id) { MIStockOccupyModel queryOccupy = new MIStockOccupyModel(); queryOccupy.DOCCTNUMBER = id; List occupy = ConvertHelper.ConvertToList(DataProvider.Instance.MIStockOccupy.GetMIStockOccupyDT(queryOccupy)); Transaction = DataProvider.Instance.TranOracle; foreach (var i in occupy) { MIStockModel mi = new MIStockModel(); mi.PUTIN_ID = i.PUTIN_ID; mi.GOODS_ID = i.GOODS_ID; mi.LOCATION_ID = i.LOCATION_ID; mi.AREA_ID = i.AREA_ID; mi.STOCK_ID = i.STOCK_ID; mi.STORAGE_ID = i.STORAGE_ID; mi.OCCUPY_NUM = -i.OCCUPY_NUM; DataProvider.Instance.MIStock.UpdateMIStockOccupyNum(mi); logList.Add(DataProvider.Instance.logData); DataProvider.Instance.MIStockOccupy.DeleteMIStockOccupy(i); logList.Add(DataProvider.Instance.logData); } TaCmtOrRak(); return ErrText; } } }