2263 lines
99 KiB
C#
2263 lines
99 KiB
C#
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
|
||
{
|
||
/// <summary>
|
||
/// 获取库区间调拨单结果集
|
||
/// </summary>
|
||
/// <returns>库区间调拨单</returns>
|
||
public List<AreaRepModel> GetAreaRepList(AreaRepModel model)
|
||
{
|
||
DataTable table = DataProvider.Instance.AreaRep.GetAreaRepDT(model);
|
||
List<AreaRepModel> AreaRepModel = ConvertHelper<AreaRepModel>.ConvertToList(table);
|
||
|
||
if (DataLogErrWrite(table, "获取库区间调拨单"))
|
||
{
|
||
return AreaRepModel;
|
||
}
|
||
return null;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除库区间调拨单信息
|
||
/// </summary>
|
||
/// <param name="AreaRep">库区间调拨单</param>
|
||
/// <returns>是否成功</returns>
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除库区间调拨单(包括明细)
|
||
/// </summary>
|
||
/// <param name="AreaRep">库区间调拨单</param>
|
||
/// <returns>是否成功</returns>
|
||
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<AreaRepOutModel> list = ConvertHelper<AreaRepOutModel>.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<MIStockOccupyModel> occupy = ConvertHelper<MIStockOccupyModel>.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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 新增库区间调拨单(包括明细)
|
||
/// </summary>
|
||
/// <param name="AreaRepModel">库区间调拨单Model</param>
|
||
/// <param name="listAreaRepOut">出库明细ModelList</param>
|
||
/// <param name="listAreaRepIn">入库明细ModelList</param>
|
||
/// <returns>是否成功</returns>
|
||
public string InsertAreaRepAndTab(AreaRepModel areaRepModel, List<AreaRepOutModel> listAreaRepOut, List<AreaRepInModel> listAreaRepIn, List<SKUTabModel> listSKU)
|
||
{
|
||
//新增库区间调拨单
|
||
areaRepModel.AREA_REP_ID = IBussFactory<WMS.Business.Base.BussDocumentTable>.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<MIStockModel>.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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改库区间调拨单(包括明细)
|
||
/// </summary>
|
||
/// <param name="AreaRepModel">库区间调拨单Model</param>
|
||
/// <param name="listAreaRepOut">出库明细ModelList</param>
|
||
/// <param name="listAreaRepIn">入库明细ModelList</param>
|
||
/// <returns>是否成功</returns>
|
||
public string UpdateAreaRepAndTab(AreaRepModel areaRepModel, List<AreaRepOutModel> listAreaRepOut, List<AreaRepInModel> listAreaRepIn, List<SKUTabModel> 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<AreaRepOutModel> list = ConvertHelper<AreaRepOutModel>.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<MIStockOccupyModel> occupy = ConvertHelper<MIStockOccupyModel>.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<MIStockModel>.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<MIStockModel> hadUpdeteList = new List<MIStockModel>();//已经被修改过的库存记录
|
||
|
||
List<AreaRepOutModel> listOut = new List<AreaRepOutModel>();
|
||
|
||
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<MIStockOccupyModel> occupy = ConvertHelper<MIStockOccupyModel>.ConvertToList(DataProvider.Instance.MIStockOccupy.GetMIStockOccupyDT(queryOccupy));
|
||
//DataProvider.Instance.MIStockOccupy.DeleteMIStockOccupy(occupy[0]);
|
||
//logList.Add(DataProvider.Instance.logData);
|
||
}
|
||
|
||
|
||
List<MIStockModel> listMI = new List<MIStockModel>();
|
||
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<MIStockModel>.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<MIStockModel> queryList = ConvertHelper<MIStockModel>.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<StorageAreaLocationModel>.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<MIStockModel> nowMIStock = ConvertHelper<MIStockModel>.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<MIStockModel>.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<BussStorageAreaLocation>.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<StorageAreaLocationModel>.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<MIStockModel>.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<StorageAreaLocationModel>.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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 修改库区间调拨单状态
|
||
/// </summary>
|
||
/// <param name="AreaRepModel">库区间调拨单Model</param>
|
||
/// <returns>是否成功</returns>
|
||
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> AreaRepOutModel = ConvertHelper<AreaRepOutModel>.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<MIStockModel>.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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 将已完成的或已关闭的库区间调拨单与属于它的明细放到备份表中
|
||
/// </summary>
|
||
/// <param name="areaRepModel">库区间调拨单</param>
|
||
/// <returns>是否成功</returns>
|
||
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<AreaRepOutModel> list = ConvertHelper<AreaRepOutModel>.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<MIStockOccupyModel> occupy = ConvertHelper<MIStockOccupyModel>.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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 打印完成
|
||
/// </summary>
|
||
/// <param name="model">库区间调拨单</param>
|
||
/// <returns>是否成功</returns>
|
||
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 变量
|
||
|
||
/// <summary>
|
||
/// 需要的商品、商品数量,用于判断商品是否充足、拣货
|
||
/// </summary>
|
||
private List<OrderDetailModel> listOrderGoods = new List<OrderDetailModel>();
|
||
/// <summary>
|
||
/// 发货仓库的所有库存
|
||
/// </summary>
|
||
private List<MIStockModel> listMIStock = new List<MIStockModel>();
|
||
/// <summary>
|
||
/// 有所需商品的库存->需要拣货的库存(某种商品的)
|
||
/// </summary>
|
||
private List<MIStockModel> listPackingMIStock = new List<MIStockModel>();
|
||
/// <summary>
|
||
/// 某商品在listPackingMIStock中的总数
|
||
/// </summary>
|
||
private decimal num = 0;
|
||
/// <summary>
|
||
/// 某商品在拣货后为空库位的库位中的总数
|
||
/// </summary>
|
||
private decimal numNew = 0;
|
||
|
||
/// <summary>
|
||
/// 生产日期 是否优先
|
||
/// </summary>
|
||
private bool byProduce = true;
|
||
/// <summary>
|
||
/// 上架日期 是否优先
|
||
/// </summary>
|
||
private bool byAdded = true;
|
||
/// <summary>
|
||
/// 捡空库位 是否优先
|
||
/// </summary>
|
||
private bool byNull = true;
|
||
|
||
#endregion
|
||
|
||
#region 筛选
|
||
/// <summary>
|
||
/// 通过生产日期筛选库存记录
|
||
/// </summary>
|
||
/// <returns>true:数量正好满足 无需再次筛选</returns>
|
||
private bool GetMiStockByProductDate()
|
||
{
|
||
List<MIStockModel> newMIStockList = new List<MIStockModel>();
|
||
|
||
//获取listPackingMIStock中的生产日期并从小到大排序
|
||
List<DateTime> dtList = new List<DateTime>();
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过上架日期筛选库存记录
|
||
/// </summary>
|
||
/// <returns>true:数量正好满足 无需再次筛选</returns>
|
||
private bool GetMiStockByWaveDate()
|
||
{
|
||
List<MIStockModel> newMIStockList = new List<MIStockModel>();
|
||
|
||
//获取listPackingMIStock中的上架日期并从小到大排序
|
||
List<DateTime> dtList = new List<DateTime>();
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过拣货后的已占用容积筛选库存记录
|
||
/// </summary>
|
||
/// <param name="newMIStockList">只存放所需商品的库位</param>
|
||
/// <returns>false:数量不足</returns>
|
||
private bool GetMiStockByOnlyOne(ref List<MIStockModel> newMIStockList)
|
||
{
|
||
numNew = 0;
|
||
|
||
//获取listPackingMIStock中的所有库位
|
||
List<string> locList = new List<string>();
|
||
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<MIStockModel>();
|
||
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;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过拣货后的剩余容积筛选库存记录
|
||
/// </summary>
|
||
/// <param name="newMIStockList">只存放所需商品的库位(必须拣货的库位)</param>
|
||
private void GetMiStockBySurplus(ref List<MIStockModel> 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<GoodsInfoModel>.ConvertToList(table)[0];
|
||
|
||
if (newMIStockList.Count > 0)
|
||
{
|
||
//遍历必须拣货的库位(拣货后已占用容积为0的)
|
||
foreach (MIStockModel newMIStock in newMIStockList)
|
||
{
|
||
listPackingMIStock.RemoveAll(p => p.LOCATION_ID == newMIStock.LOCATION_ID);//移除重复库位
|
||
}
|
||
}
|
||
|
||
//获取listPackingMIStock中的所有库位
|
||
List<string> locList = new List<string>();
|
||
foreach (MIStockModel oldMIStock in listPackingMIStock)
|
||
{
|
||
if (!locList.Exists(p => p == oldMIStock.LOCATION_ID))
|
||
{
|
||
locList.Add(oldMIStock.LOCATION_ID);
|
||
}
|
||
}
|
||
//locList.Sort();
|
||
List<StorageAreaLocationModel> listLoc = new List<StorageAreaLocationModel>();
|
||
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<StorageAreaLocationModel>.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<GoodsInfoModel>.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
|
||
|
||
/// <summary>
|
||
/// 通过出库库区、商品、商品数量获取出库库位明细
|
||
/// </summary>
|
||
/// <param name="areaRepModel"></param>
|
||
/// <param name="listOut"></param>
|
||
/// <param name="haveStrategy"></param>
|
||
/// <returns>是否成功/找不到策略的信息</returns>
|
||
public string GetAreaRepOutLoc(AreaRepModel areaRepModel, ref List<AreaRepOutModel> listOut)
|
||
{
|
||
List<AreaRepOutModel> tempOut = new List<AreaRepOutModel>();//存放计划数量为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<OrderDetailModel>();
|
||
listMIStock = new List<MIStockModel>();
|
||
listPackingMIStock = new List<MIStockModel>();
|
||
num = 0;
|
||
numNew = 0;
|
||
byProduce = true;
|
||
byAdded = true;
|
||
byNull = true;
|
||
listPackingMIStock = new List<MIStockModel>();//有所需商品的库存->需要拣货的库存(某种商品的)
|
||
#endregion
|
||
|
||
#region 转成标准单位,数量一并改变
|
||
|
||
foreach (AreaRepOutModel orderTab in listOut)
|
||
{
|
||
//获取商品标准单位
|
||
DataTable dt = DataProvider.Instance.Goods.GetGoodsDataTable(orderTab.GOODS_ID, "", "", "");
|
||
List<GoodsInfoModel> list = null;
|
||
if (DataLogErrWrite(dt, "获取商品标准单位"))
|
||
{
|
||
list = ConvertHelper<GoodsInfoModel>.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<MIStockModel>.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<MIStockModel>();
|
||
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<MIStockModel> newMIList = new List<MIStockModel>();//拣货后已占用容积为0的所有库位(只有这一种商品的库位)
|
||
|
||
if (byNull && GetMiStockByOnlyOne(ref newMIList))
|
||
{
|
||
|
||
}
|
||
else//少
|
||
{
|
||
GetMiStockBySurplus(ref newMIList);//取拣货后剩余容积大的
|
||
}
|
||
}
|
||
}
|
||
|
||
List<AreaRepOutModel> tempOutList = new List<AreaRepOutModel>();
|
||
foreach (var outModel in listOut)
|
||
{
|
||
decimal tempCount = outModel.PLAN_COUNT;
|
||
|
||
List<MIStockModel> 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<AreaRepOutModel> newOutList = new List<AreaRepOutModel>();
|
||
//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;
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 通过库区名称得到库区ID(仓库编号指定为发货仓库ID)
|
||
/// </summary>
|
||
/// <param name="areaName"></param>
|
||
/// <returns></returns>
|
||
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<StorageAreaModel>.ConvertToList(table)[0].STORAGE_AREA_ID;
|
||
}
|
||
else
|
||
{
|
||
areaID = ConvertHelper<StorageAreaModel>.ConvertToList(table)[0].STORAGE_AREA_ID;
|
||
//if (DataLogErrWrite(table, "获取发货仓库拣货区库区编号"))
|
||
//{
|
||
//}
|
||
//else
|
||
//{
|
||
// return string.Empty;
|
||
//}
|
||
}
|
||
return areaID;
|
||
}
|
||
|
||
#endregion
|
||
|
||
private void getAreaGoodsType(ref List<AreaGoodsTypeModel> 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<AreaGoodsTypeModel>.ConvertToList(table2);
|
||
|
||
if (areaGoodsTypeList == null || areaGoodsTypeList.Count == 0)
|
||
{
|
||
GoodsTypeModel goodsType = new GoodsTypeModel();
|
||
goodsType.GOODS_TYPE_ID = m.GOODS_TYPE_ID;
|
||
List<GoodsTypeModel> gtList = ConvertHelper<GoodsTypeModel>.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<AreaGoodsTypeModel>.ConvertToList(table2);
|
||
|
||
if (areaGoodsTypeList == null || areaGoodsTypeList.Count == 0)
|
||
{
|
||
goodsType = new GoodsTypeModel();
|
||
goodsType.GOODS_TYPE_ID = m.GOODS_TYPE_ID;
|
||
gtList = ConvertHelper<GoodsTypeModel>.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<AreaGoodsTypeModel>.ConvertToList(table2);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 仓库编号
|
||
/// </summary>
|
||
string storageID;
|
||
/// <summary>
|
||
/// 线上订单占用库存
|
||
/// </summary>
|
||
/// <param name="province"></param>
|
||
/// <param name="city"></param>
|
||
/// <param name="district"></param>
|
||
/// <param name="id"></param>
|
||
/// <param name="listD"></param>
|
||
/// <returns></returns>
|
||
public string OccupyMIStock(string province, string city, string district,string id, Dictionary<string, decimal> 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<StorageOrderModel> storOrderList = ConvertHelper<StorageOrderModel>.ConvertToList(table);
|
||
if (storOrderList == null || storOrderList.Count == 0) { return "找不到配送仓库"; }
|
||
storageID = storOrderList[0].STORAGE_ID;
|
||
List<AreaRepOutModel> listOut = new List<AreaRepOutModel>();
|
||
foreach (var item in listD)
|
||
{
|
||
AreaRepOutModel areaRepOut = new AreaRepOutModel();
|
||
areaRepOut.GOODS_ID = item.Key;
|
||
areaRepOut.PLAN_COUNT = item.Value;
|
||
listOut.Add(areaRepOut);
|
||
}
|
||
|
||
List<AreaRepOutModel> tempOut = new List<AreaRepOutModel>();//存放计划数量为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<OrderDetailModel>();
|
||
listMIStock = new List<MIStockModel>();
|
||
listPackingMIStock = new List<MIStockModel>();
|
||
num = 0;
|
||
numNew = 0;
|
||
byProduce = true;
|
||
byAdded = true;
|
||
byNull = true;
|
||
listPackingMIStock = new List<MIStockModel>();//有所需商品的库存->需要拣货的库存(某种商品的)
|
||
#endregion
|
||
listPackingMIStock = new List<MIStockModel>();//有所需商品的库存->需要拣货的库存(某种商品的)
|
||
|
||
DataTable downStrategy = DataProvider.Instance.DownStrategy.GetDownStrategyDTByStorage(storageID);
|
||
|
||
StorageAreaModel tempArea = new StorageAreaModel();
|
||
tempArea.STORAGE_ID = storageID;
|
||
List<StorageAreaModel> listJianHuo = ConvertHelper<StorageAreaModel>.ConvertToList(DataProvider.Instance.StorageArea.GetAreaInfoDS(tempArea, "拣配区"));
|
||
List<StorageAreaModel> listShangJia = ConvertHelper<StorageAreaModel>.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<MIStockModel>.ConvertToList(tableMIStock);//发货仓库的所有库存
|
||
if (!DataLogErrWrite(tableMIStock, "获取发货仓库的所有库存"))
|
||
{
|
||
return ErrText;
|
||
}
|
||
listMIStock.RemoveAll(p => p.ABLE_NUM == 0);//移除所有数量为0的
|
||
#endregion
|
||
|
||
#region 根据拣货策略记录需要的商品在拣货区的数量
|
||
int te = 0;
|
||
List<MIStockModel> areaList = new List<MIStockModel>();
|
||
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<AreaGoodsTypeModel> areaGoodsTypeList = new List<AreaGoodsTypeModel>();
|
||
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<OrderDetailModel> listAddGoods = new List<OrderDetailModel>();
|
||
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<AreaRepModel> listAreaRep = new List<AreaRepModel>();
|
||
List<AreaRepInModel> listInGoods = new List<AreaRepInModel>();
|
||
List<AreaRepOutModel> listOutGoods = new List<AreaRepOutModel>();
|
||
|
||
|
||
Transaction = DataProvider.Instance.TranOracle;
|
||
|
||
foreach (OrderDetailModel item in listAddGoods)
|
||
{
|
||
#region 通过商品找商品分类找存放该商品分类的捡货区、上架区
|
||
string inAreaID = string.Empty;
|
||
string outAreaID = string.Empty;
|
||
List<AreaGoodsTypeModel> areaGoodsTypeList = new List<AreaGoodsTypeModel>();
|
||
|
||
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<AreaRepOutModel> listO = listOutGoods.FindAll(p => p.AREA_REP_ID == areaRepModel.AREA_REP_ID);
|
||
//ErrText += IBussFactory<BussAreaRep>.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<MIStockModel>.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<MIStockModel>();
|
||
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<MIStockModel> newMIList = new List<MIStockModel>();//拣货后已占用容积为0的所有库位(只有这一种商品的库位)
|
||
|
||
if (byNull && GetMiStockByOnlyOne(ref newMIList))
|
||
{
|
||
|
||
}
|
||
else//少
|
||
{
|
||
GetMiStockBySurplus(ref newMIList);//取拣货后剩余容积大的
|
||
}
|
||
}
|
||
}
|
||
|
||
List<AreaRepOutModel> tempOutList = new List<AreaRepOutModel>();
|
||
foreach (var outModel in listOut)
|
||
{
|
||
decimal tempCount = outModel.PLAN_COUNT;
|
||
|
||
List<MIStockModel> 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<MIStockModel>.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;
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// ERP线上订单取消库存占用
|
||
/// </summary>
|
||
/// <param name="id"></param>
|
||
/// <returns></returns>
|
||
public string CancelOccupyMIStock(string id) {
|
||
|
||
MIStockOccupyModel queryOccupy = new MIStockOccupyModel();
|
||
queryOccupy.DOCCTNUMBER = id;
|
||
List<MIStockOccupyModel> occupy = ConvertHelper<MIStockOccupyModel>.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;
|
||
}
|
||
}
|
||
}
|