using HH.Redis.ReisModel;
|
using HH.WMS.BLL.Basic;
|
using HH.WMS.BLL.SysMgr;
|
using HH.WMS.Common;
|
using HH.WMS.DAL;
|
using HH.WMS.DAL.Algorithm;
|
using HH.WMS.DAL.Basic;
|
using HH.WMS.DAL.Check;
|
using HH.WMS.DAL.Common;
|
using HH.WMS.DAL.InStock;
|
using HH.WMS.DAL.OutStock;
|
using HH.WMS.Entitys;
|
using HH.WMS.Entitys.Algorithm;
|
using HH.WMS.Entitys.Basic;
|
using HH.WMS.Entitys.Check;
|
using HH.WMS.Entitys.Common;
|
using HH.WMS.Entitys.Entitys;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Data.Common;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace HH.WMS.BLL.Check
|
{
|
public class TN_WM_CHECK_MSTBLL : DapperBaseBLL
|
{
|
#region 获取分页列表
|
/// <summary>
|
/// 获取分页列表
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/7/3</history>
|
public DataTable GetDataTable(dynamic obj)
|
{
|
DataTable dt = CreateDAL<TN_WM_CHECK_MSTDAL>().GetDataTable(obj);
|
|
Dictionary<string, string> stockDic = new Dictionary<string, string>();
|
dt.Columns.Add("CN_S_STOCK_NAME");
|
foreach (DataRow dtrow in dt.Rows)
|
{
|
if (!string.IsNullOrEmpty(dtrow["CN_S_STOCK_CODE"].ToString())) //获取仓库名称
|
{
|
if (!stockDic.ContainsKey(dtrow["CN_S_STOCK_CODE"].ToString()))
|
{
|
TN_AB_STOCKEntity stockentity = CreateDAL<TN_WM_MONGODAL>().GetStockentity("CN_S_STOCK_CODE", dtrow["CN_S_STOCK_CODE"].ToString());//获取仓库名称
|
if (stockentity != null)
|
{
|
dtrow["CN_S_STOCK_NAME"] = stockentity.CN_S_STOCK_NAME;
|
stockDic.Add(dtrow["CN_S_STOCK_CODE"].ToString(), stockentity.CN_S_STOCK_NAME);
|
}
|
}
|
else
|
{
|
dtrow["CN_S_STOCK_NAME"] = stockDic[dtrow["CN_S_STOCK_CODE"].ToString()];
|
}
|
}
|
}
|
return dt;
|
}
|
|
/// <summary>
|
/// 获取分页列表
|
/// </summary>
|
/// <param name="obj"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/7/3</history>
|
public DataTable GetDataTable(string sqlWhere, string OrdeBy, int pageSize, int pageIndex)
|
{
|
return CreateDAL<TN_WM_CHECK_MSTDAL>().GetDataTable(sqlWhere, OrdeBy, pageSize, pageIndex);
|
}
|
#endregion
|
|
#region 修改
|
/// <summary>
|
/// 更新一条数据
|
/// </summary>
|
/// <history>[HanHe(lt)] CREATED 2018/7/3</history>
|
/// <history>[HanHe(dbs)] CREATED 2019/3/18</history>
|
public OperateResult Update(TN_WM_CHECK_MSTEntity entity)
|
{
|
return UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().Update(new
|
{
|
CN_S_MODIFY = entity.CN_S_MODIFY,
|
CN_S_MODIFY_BY = entity.CN_S_MODIFY_BY,
|
CN_T_MODIFY = entity.CN_T_MODIFY
|
}, new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans);
|
CreateDAL<DapperDAL<TN_WM_CHECK_DTLEntity>>().Delete(new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans);
|
CreateDAL<DapperDAL<TN_WM_CHECK_DTLEntity>>().AddRange(entity.dtls, trans);
|
});
|
}
|
|
#endregion
|
|
#region 查询盘点业务主表
|
/// <summary>
|
/// 查询盘点业务主表
|
/// </summary>
|
/// <param name="sqlwhere">查询条件</param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/7/3</history>
|
public DataTable Getentity(string sqlwhere)
|
{
|
DataTable dt = CreateDAL<TN_WM_CHECK_MSTDAL>().Getentity(sqlwhere);
|
Dictionary<string, string> stockDic = new Dictionary<string, string>();
|
dt.Columns.Add("CN_S_STOCK_NAME");
|
foreach (DataRow dtrow in dt.Rows)
|
{
|
if (!string.IsNullOrEmpty(dtrow["CN_S_STOCK_CODE"].ToString())) //获取仓库名称
|
{
|
if (!stockDic.ContainsKey(dtrow["CN_S_STOCK_CODE"].ToString()))
|
{
|
TN_AB_STOCKEntity stockentity = CreateDAL<TN_WM_MONGODAL>().GetStockentity("CN_S_STOCK_CODE", dtrow["CN_S_STOCK_CODE"].ToString());//获取仓库名称
|
if (stockentity != null)
|
{
|
dtrow["CN_S_STOCK_NAME"] = stockentity.CN_S_STOCK_NAME;
|
stockDic.Add(dtrow["CN_S_STOCK_CODE"].ToString(), stockentity.CN_S_STOCK_NAME);
|
}
|
}
|
else
|
{
|
dtrow["CN_S_STOCK_NAME"] = stockDic[dtrow["CN_S_STOCK_CODE"].ToString()];
|
}
|
}
|
}
|
return dt;
|
}
|
#endregion
|
|
#region 获取货位物料信息
|
/// <summary>
|
/// 获取货位物料信息
|
/// </summary>
|
/// <param name="sqlwhere">查询条件</param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/7/12</history>
|
/// <history>[HanHe(dbs)] CREATED 2019/3/14</history>
|
public OperateResult GetTrayLocation(SearchModel searchModel)
|
{
|
if (searchModel.SearchCondition.CN_S_TYPE == "货位盘点")
|
return CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().GetPagingResult(searchModel.PageIndex, searchModel.PageSize, new
|
{
|
CN_S_STOCK_CODE = searchModel.SearchCondition.CN_S_STOCK_CODE.ToString(),
|
CN_S_STOCK_AREA = searchModel.SearchCondition.CN_S_STOCK_AREA.ToString(),
|
CN_S_LOCATION_CODE = searchModel.SearchCondition.CN_S_LOCATION_CODE.ToString()
|
});
|
else if (searchModel.SearchCondition.CN_S_TYPE == "物料盘点")
|
{
|
if (searchModel.SearchCondition.CN_S_STOCK_AREA != "")
|
{
|
//库区
|
return CreateDAL<DapperDAL<TN_WM_B_AREA_QTYEntity>>().GetPagingResult(searchModel.PageIndex, searchModel.PageSize, new
|
{
|
CN_S_STOCK_CODE = searchModel.SearchCondition.CN_S_STOCK_CODE.ToString(),
|
CN_S_STOCK_AREA = searchModel.SearchCondition.CN_S_STOCK_AREA.ToString(),
|
CN_S_ITEM_CODE = searchModel.SearchCondition.CN_S_ITEM_CODE.ToString(),
|
CN_S_OWNER = searchModel.SearchCondition.CN_S_OWNER.ToString()
|
}, " ORDER BY CN_S_ITEM_CODE ");
|
}
|
else
|
{
|
//仓库
|
return CreateDAL<TN_WM_B_STOCK_QTYDAL>().GetEnableCheckQty(searchModel.PageIndex, searchModel.PageSize,
|
searchModel.SearchCondition.CN_S_STOCK_CODE.ToString(),
|
searchModel.SearchCondition.CN_S_STOCK_AREA.ToString(),
|
searchModel.SearchCondition.CN_S_ITEM_CODE.ToString(),
|
searchModel.SearchCondition.CN_S_OWNER.ToString());
|
}
|
}
|
return OperateResult.Error("请选择盘点类型!");
|
}
|
|
//public DataTable GetTrayItem(dynamic obj)
|
//{
|
// return CreateDAL<TN_WM_CHECK_MSTDAL>().GetTrayItem(obj);
|
//}
|
|
public List<TN_WM_CHECK_DTLEntity> Getlist(string sqlwhere, string type)
|
{
|
return CreateDAL<TN_WM_CHECK_MSTDAL>().Getlist(sqlwhere, type);
|
}
|
#endregion
|
|
#region 新增数据
|
/// <summary>
|
/// 新增数据
|
/// </summary>
|
/// <param name="entity">新增实体主表</param>
|
/// <param name="entity">新增子表</param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/7/12</history>
|
/// <history>[HanHe(dbs)] CREATED 2019/3/18</history>
|
public OperateResult Add(TN_WM_CHECK_MSTEntity mst)
|
{
|
return UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().Add(mst, trans);//主表
|
CreateDAL<DapperDAL<TN_WM_CHECK_DTLEntity>>().AddRange(mst.dtls, trans);//子表
|
});
|
}
|
#endregion
|
|
#region 盘点单提交
|
/// <summary>
|
///盘点单提交
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/8/24</history>
|
/// <history>[HanHe(dbs)] CREATED 2019/3/18</history>
|
public OperateResult Submit(string[] opNos, RedisUserEntity user)
|
{
|
List<OperateResult> errorOrs = new List<OperateResult>();
|
foreach (string opNo in opNos)
|
{
|
TN_WM_CHECK_MSTEntity model = CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().GetSingleEntity(new { CN_S_OP_NO = opNo });
|
List<TN_WM_CHECK_LISTEntity> checkList = CreateDAL<TN_WM_CHECK_MSTDAL>().GetCheckList(opNo, model.CN_S_TYPE);
|
if (model.CN_S_TYPE.Equals("物料盘点"))
|
{
|
//快速、简易的判断一下仓库库存和货位库存是否一致
|
List<TN_WM_CHECK_DTLEntity> checkDtl = CreateDAL<DapperDAL<TN_WM_CHECK_DTLEntity>>().GetList(new { CN_S_OP_NO = opNo });
|
if (checkList.Sum(x => x.CN_F_QUANTITY) != checkDtl.Sum(x => x.CN_F_QUANTITY))
|
return OperateResult.Error("仓库库存和货位库存不一致,请联系管理员!");
|
}
|
checkList.ForEach(x =>
|
{
|
x.CN_GUID = Guid.NewGuid().ToString();
|
x.CN_S_ISCHECK = "N";
|
x.CN_S_CREATOR = user.CN_S_LOGIN;
|
x.CN_S_CREATOR_BY = user.CN_S_NAME;
|
x.CN_T_CREATE = DateTime.Now;
|
x.CN_S_OP_NO = opNo;
|
x.CN_S_STOCK_CODE = model.CN_S_STOCK_CODE;
|
if (x.CN_S_PACKING_UNIT == null)
|
x.CN_S_PACKING_UNIT = "";
|
if (string.IsNullOrEmpty(x.CN_S_TRAY_GRID))
|
x.CN_S_TRAY_GRID = "1";
|
//不基于批次进行盘点,让数据库存储长度为0的字符串
|
x.CN_S_PRODUCTION_BATCH = "";
|
x.CN_S_LOT_NO = "";
|
});
|
OperateResult or = UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_CHECK_LISTEntity>>().AddRange(checkList, trans);
|
CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().Update(new { CN_S_STATE = "已提交" }, new { CN_S_OP_NO = opNo }, trans);
|
});
|
if (or.Status == ResultStatus.Error)
|
errorOrs.Add(or);
|
}
|
if (errorOrs.Count == 0)
|
return OperateResult.Succeed();
|
else if (errorOrs.Count == opNos.Length)
|
return OperateResult.Error(errorOrs[0].Msg);
|
else
|
return OperateResult.Warning(errorOrs[0].Msg);
|
}
|
#endregion
|
|
#region 根据盘点单号修改状态
|
/// <summary>
|
/// 根据盘点单号修改状态
|
/// </summary>
|
/// <param name="opNo">盘点单号</param>
|
/// <param name="state">状态</param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/8/24</history>
|
public SqlExecuteResult UpdateStateByNo(string opNo, string state)
|
{
|
SqlExecuteResult result = CreateDAL<TN_WM_CHECK_MSTDAL>().UpdateStateByNo(opNo, state, null);
|
return result;
|
}
|
#endregion
|
|
#region 删除主子表
|
/// <summary>
|
///删除主子表
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/8/24</history>
|
/// <history>[HanHe(dbs)] CREATED 2019/3/18</history>
|
public OperateResult Delete(string opNo)
|
{
|
return UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().Delete(new { CN_S_OP_NO = opNo }, trans);
|
CreateDAL<DapperDAL<TN_WM_CHECK_DTLEntity>>().Delete(new { CN_S_OP_NO = opNo }, trans);
|
});
|
}
|
#endregion
|
|
#region 判断是否全部都完成
|
/// <summary>
|
/// 查询盘点业务主表
|
/// </summary>
|
/// <param name="sqlwhere">查询条件</param>
|
/// <returns></returns>
|
/// <history>[HanHe(lt)] CREATED 2018/12/3</history>
|
public bool GetIsExist(string sqlwhere)
|
{
|
DataTable dt = CreateDAL<TN_WM_CHECK_MSTDAL>().Getentity(sqlwhere);
|
return dt.Rows.Count > 0;
|
}
|
#endregion
|
|
#region 删除货位托盘关联
|
///// <summary>
|
///// 删除货位托盘关联
|
///// </summary>
|
///// <returns></returns>
|
///// <history>[HanHe(lt)] CREATED 2018/12/20</history>
|
//public OperateResult DeleteTrayLocationAndUpdateLocationExt()
|
//{
|
// OperateResult operateResult = UseTransaction(trans =>
|
// {
|
// CreateDAL<TN_WM_CHECK_MSTDAL>().UpdateLocationExt(trans);
|
|
// CreateDAL<TN_WM_CHECK_MSTDAL>().DeleteTrayLocation(trans);
|
|
// });
|
|
// return operateResult;
|
//}
|
#endregion
|
|
|
#region 快速盘点
|
/// <summary>
|
/// 托盘盘点数据
|
/// </summary>
|
/// <param name="List"></param>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(dbs)] CREATED 2019/4/12</history>
|
public OperateResult FastCheck(List<TN_WM_CHECK_LISTEntity> check, RedisUserEntity user)
|
{
|
OperateResult or = new OperateResult();
|
//记录新增的Mst主表Guid
|
List<string> addMstGuid = new List<string>();
|
//记录新增的Dtl子表Guid
|
List<string> addDtlGuid = new List<string>();
|
//记录删除的Mst主表Guid
|
List<string> reduceMstGuid = new List<string>();
|
//记录删除的Dtl子表Guid
|
List<string> reduceDtlGuid = new List<string>();
|
//记录解除容器与货位关系的货位
|
List<string> clearRelLocation = new List<string>();
|
//虚拟托盘号
|
string vwTrayCode = "";
|
//组织的容器货位关联记录对象
|
TN_WM_B_TRAY_LOCATIONEntity trayLocation = null;
|
//记录原始货位中剩下的物料记录
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> sourseMst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
|
#region 组织盈亏记录
|
var trayGroup = check.GroupBy(x => x.CN_S_TRAY_CODE).ToArray();
|
if (trayGroup.Count() > 1)
|
return OperateResult.Error("PDA上传的数据异常!");//一次只会存在一个容器
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> sourse = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
|
if (!string.IsNullOrEmpty(trayGroup[0].Key))
|
sourse = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { CN_S_TRAY_CODE = trayGroup[0].Key });
|
else
|
{
|
#region 不存在盘点托盘时,生成虚拟托盘,及组织容易与货位关系
|
or = BLLCreator.Create<TN_WM_B_TRAY_INFOBLL>().CreateVirtualTray(user);
|
if (or.Status != ResultStatus.Success)
|
return or;
|
vwTrayCode = or.Data.ToString();
|
check.ForEach(x => { x.CN_S_TRAY_CODE = vwTrayCode; x.CN_S_TRAY_GRID = "1"; });
|
|
trayLocation = new TN_WM_B_TRAY_LOCATIONEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_N_INDEX = 1,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_LOCATION_CODE = check[0].CN_S_LOCATION_CODE,
|
CN_S_TRAY_CODE = vwTrayCode,
|
CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = check[0].CN_S_STOCK_AREA,
|
CN_T_CREATE = DateTime.Now
|
};
|
#endregion
|
}
|
sourseMst.AddRange(sourse);
|
#region 原始货位扣除盘点数据,得到盘亏量
|
sourse.ForEach(s =>
|
{
|
s.TrayItemDtlList = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().GetList(new { CN_PARENT_GUID = s.CN_GUID });
|
|
List<TN_WM_CHECK_LISTEntity> temp = check.FindAll(y => y.CN_S_TRAY_CODE.Equals(s.CN_S_TRAY_CODE) && y.CN_S_TRAY_GRID.Equals(s.CN_S_TRAY_GRID));
|
foreach (TN_WM_CHECK_LISTEntity c in temp)
|
{
|
if (c.CN_F_CHECK_QTY == 0)
|
{
|
reduceMstGuid.Add(s.CN_GUID);
|
continue;
|
}
|
if (s.CN_S_ITEM_CODE.Equals(c.CN_S_ITEM_CODE))
|
{
|
if (s.CN_F_QUANTITY >= c.CN_F_CHECK_QTY)
|
{
|
s.CN_F_QUANTITY -= c.CN_F_CHECK_QTY;
|
c.CN_F_CHECK_QTY = 0;
|
}
|
else
|
{
|
c.CN_F_CHECK_QTY = c.CN_F_CHECK_QTY - s.CN_F_QUANTITY;
|
s.CN_F_QUANTITY = 0;
|
|
c.CN_GUID = s.CN_GUID;
|
}
|
|
foreach (TN_WM_B_TRAY_ITEM_DTLEntity ss in s.TrayItemDtlList)
|
{
|
foreach (CHECK_DETAILD cc in c.checkDetaild)
|
{
|
if (ss.CN_S_PACKING_UNIT == cc.CN_S_PACKING_UNIT && ss.CN_F_PACKING_QTY == cc.CN_F_PACKING_QTY)
|
{
|
if (cc.CN_F_QUANTITY == 0)
|
{
|
reduceDtlGuid.Add(ss.CN_GUID);
|
continue;
|
}
|
if (ss.CN_F_QUANTITY >= cc.CN_F_QUANTITY)
|
{
|
ss.CN_F_QUANTITY -= cc.CN_F_QUANTITY;
|
cc.CN_F_QUANTITY = 0;
|
}
|
else
|
{
|
cc.CN_F_QUANTITY = cc.CN_F_QUANTITY - ss.CN_F_QUANTITY;
|
ss.CN_F_QUANTITY = 0;
|
|
cc.CN_GUID = ss.CN_GUID;
|
}
|
}
|
}
|
}
|
}
|
}
|
});
|
if (sourseMst.Count!=0 && sourseMst.FindAll(x=>x.CN_F_QUANTITY>0).Count == reduceMstGuid.Count)
|
{
|
//当移除的MstGUID长度等于原始容器中物料的数据长度时,则说明全部盘亏
|
clearRelLocation.Add(check[0].CN_S_LOCATION_CODE);
|
}
|
#endregion
|
#endregion
|
|
#region 生成批次信息
|
or = GetCode(user, Constants.BatchNo);
|
if (or.Status != ResultStatus.Success)
|
return or;
|
TN_WM_LOT_INFOEntity lotEntity = new TN_WM_LOT_INFOEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_LOT_CODE = or.Data.ToString(),
|
CN_T_CREATE = DateTime.Now
|
};
|
#endregion
|
|
#region 组织上架记录
|
List<TN_WM_UP_HISTORYEntity> upHis = new List<TN_WM_UP_HISTORYEntity>();
|
check.FindAll(x => x.CN_F_CHECK_QTY > 0).ForEach(x =>
|
{
|
x.checkDetaild.ForEach(y =>
|
{
|
upHis.Add(new TN_WM_UP_HISTORYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_PACKING_QTY = y.CN_F_PACKING_QTY,
|
CN_F_QUANTITY = y.CN_F_QUANTITY,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_LOT_NO = string.IsNullOrEmpty(y.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.CN_S_LOT_NO,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_PACKING_UNIT = y.CN_S_PACKING_UNIT,
|
CN_S_PRODUCTION_BATCH = y.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now
|
});
|
});
|
});
|
#endregion
|
|
#region 组织下架记录
|
List<TN_WM_DOWN_HISTORYEntity> downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
sourseMst.FindAll(x => x.CN_F_QUANTITY > 0).ForEach(x =>
|
{
|
x.TrayItemDtlList.ForEach(y =>
|
{
|
downHis.Add(new TN_WM_DOWN_HISTORYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_PACKING_QTY = y.CN_F_PACKING_QTY,
|
CN_F_QUANTITY = y.CN_F_QUANTITY,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_LOCATION_CODE = check[0].CN_S_LOCATION_CODE,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_LOT_NO = y.CN_S_LOT_NO,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_PACKING_UNIT = y.CN_S_PACKING_UNIT,
|
CN_S_PRODUCTION_BATCH = y.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = check[0].CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE,// x.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now
|
});
|
});
|
});
|
|
#endregion
|
|
#region 组织盘点单
|
or = GetCode(user, Constants.CheckCode);
|
if (or.Status != ResultStatus.Success)
|
return or;
|
string checkOpNo = or.Data.ToString();
|
TN_WM_CHECK_MSTEntity checkMst = new TN_WM_CHECK_MSTEntity()
|
{
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODE = "货位盘点",
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_NO = checkOpNo,
|
CN_S_STATE = Constants.State_Completed,
|
CN_S_TYPE = "快速盘点",
|
CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_T_OP_TIME = DateTime.Now
|
};
|
#endregion
|
|
#region 组织入库单
|
//or = GetCode(user, Constants.CheckCode);
|
//if (or.Status != ResultStatus.Success)
|
// return or;
|
//string inOpNp = or.Data.ToString();
|
//TN_WM_INCREASE_INVENTORY_MSTEntity inBuss = null;
|
//if (upHis.Any())
|
//{
|
// inBuss = new TN_WM_INCREASE_INVENTORY_MSTEntity();
|
// inBuss.CN_GUID = Guid.NewGuid().ToString();
|
// inBuss.CN_S_CREATOR = user.CN_S_LOGIN;
|
// inBuss.CN_S_CREATOR_BY = user.CN_S_NAME;
|
// inBuss.CN_S_FROM_NO = "";//盘点单
|
// inBuss.CN_S_LOT_NO = "";
|
// inBuss.CN_S_MODIFY = user.CN_S_LOGIN;
|
// inBuss.CN_S_MODIFY_BY = user.CN_S_NAME;
|
// inBuss.CN_S_OP_FROM = "";
|
// inBuss.CN_S_OP_NO = inOpNp;
|
// inBuss.CN_S_OP_TYPE = "盘盈入库";
|
// inBuss.CN_S_OWNER = Constants.DefaultOwner;
|
// inBuss.CN_S_STATE = Constants.State_Completed;
|
// inBuss.CN_S_STOCK_CODE = check[0].CN_S_STOCK_CODE;
|
// inBuss.CN_T_CREATE = DateTime.Now;
|
// inBuss.CN_T_MODIFY = DateTime.Now;
|
// upHis.GroupBy(x => new
|
// {
|
// CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
// CN_S_ITEM_NAME=x.CN_S_ITEM_NAME,
|
// CN_S_FIGURE_NO =x.CN_S_FIGURE_NO,
|
// CN_S_LOT_NO=x.CN_S_LOT_NO,
|
// CN_S_MEASURE_UNIT=x.CN_S_MEASURE_UNIT,
|
// CN_S_MODEL=x.CN_S_MODEL,
|
// CN_S_OWNER =x.CN_S_OWNER,
|
// CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
// CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
// }).Select(y => new
|
// {
|
// CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
// CN_S_ITEM_NAME=y.Key.CN_S_ITEM_NAME,
|
// CN_S_FIGURE_NO =y.Key.CN_S_FIGURE_NO,
|
// CN_S_LOT_NO=y.Key.CN_S_LOT_NO,
|
// CN_S_MEASURE_UNIT=y.Key.CN_S_MEASURE_UNIT,
|
// CN_S_MODEL=y.Key.CN_S_MODEL,
|
// CN_S_OWNER =y.Key.CN_S_OWNER,
|
// CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
// CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
// SUM = y.Sum(x => x.CN_F_QUANTITY)
|
// }).ToList().ForEach(x =>
|
// {
|
// inBuss.DTLEntity.Add(new TN_WM_INCREASE_INVENTORY_DTLEntity()
|
// {
|
// CN_F_QUANTITY = x.SUM,
|
// CN_GUID = Guid.NewGuid().ToString(),
|
// CN_S_CREATOR = user.CN_S_LOGIN,
|
// CN_S_CREATOR_BY = user.CN_S_NAME,
|
// CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
// CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
// CN_S_OP_NO = inOpNp,
|
// CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
// CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
// CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
// CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
// });
|
// });
|
//}
|
#endregion
|
|
#region 仓库库区量表影响
|
|
#region 仓库量表
|
List<TN_WM_B_STOCK_QTYEntity> addStockQty = upHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = string.IsNullOrEmpty(y.Key.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.Key.CN_S_LOT_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE,
|
};
|
}).ToList();
|
|
List<TN_WM_B_STOCK_QTYEntity> reduceStockQty = downHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
|
};
|
}).ToList();
|
|
#endregion
|
#region 先中和仓库出入库记录
|
int addL = addStockQty.Count;
|
for (int i = 0; i < addL; i++)
|
{
|
TN_WM_B_STOCK_QTYEntity x = addStockQty[i];
|
reduceStockQty.ForEach(y =>
|
{
|
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO)
|
&& x.CN_S_OWNER.Equals(y.CN_S_OWNER) && x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE)
|
&& x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
|
{
|
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
|
{
|
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
|
y.CN_F_QUANTITY = 0;
|
}
|
}
|
});
|
}
|
addStockQty = addStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
reduceStockQty = reduceStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
#endregion
|
|
#region 库区量表
|
List<TN_WM_B_AREA_QTYEntity> addAreaQty = upHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = string.IsNullOrEmpty(y.Key.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.Key.CN_S_LOT_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
|
};
|
}).ToList();
|
List<TN_WM_B_AREA_QTYEntity> reduceAreaQty = downHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
|
};
|
}).ToList();
|
#endregion
|
#region 先中和库区出入库记录
|
int addAreaL = addAreaQty.Count;
|
for (int i = 0; i < addL; i++)
|
{
|
TN_WM_B_AREA_QTYEntity x = addAreaQty[i];
|
reduceAreaQty.ForEach(y =>
|
{
|
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_STOCK_AREA.Equals(y.CN_S_STOCK_AREA)
|
&& x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO) && x.CN_S_OWNER.Equals(y.CN_S_OWNER)
|
&& x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE) && x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
|
{
|
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
|
{
|
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
|
y.CN_F_QUANTITY = 0;
|
}
|
}
|
});
|
}
|
addAreaQty = addAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
reduceAreaQty = reduceAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
#endregion
|
|
#endregion
|
|
#region 库存业务影响
|
#region 增加库存业务
|
TN_WM_INCREASE_INVENTORY_MSTEntity inBuss = null;
|
if (addAreaQty.Any())
|
{
|
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_In);
|
if (ruleOrOrder.Status == ResultStatus.Error)
|
return ruleOrOrder;
|
string guid = Guid.NewGuid().ToString();
|
inBuss = new TN_WM_INCREASE_INVENTORY_MSTEntity()
|
{
|
CN_GUID = guid,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_FROM = "盘点单",
|
CN_S_OP_TYPE = "盘盈入库",
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
CN_S_OPERATOR = user.CN_S_LOGIN,
|
CN_S_FROM_NO = checkOpNo,
|
CN_S_LOT_NO = lotEntity.CN_S_LOT_CODE,
|
CN_S_OWNER = upHis[0].CN_S_OWNER,
|
CN_S_STOCK_CODE = upHis[0].CN_S_STOCK_CODE,
|
CN_S_STATE = Constants.State_Audit,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_T_OPERATE = DateTime.Now,
|
DTLEntity = addAreaQty.GroupBy(x => new
|
{
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_MODEL = x.CN_S_MODEL
|
}).Select(y =>
|
{
|
return new TN_WM_INCREASE_INVENTORY_DTLEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_MSTGUID = guid,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_C_IS_BALANCE = "N",
|
CN_C_IS_SCRAP = "N"
|
};
|
}).ToList()
|
};
|
|
//upHis.Select(x => { x.CN_S_OP_FROM = "盘盈入库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
|
}
|
#endregion
|
|
#region 减少库存业务
|
TN_WM_REDUCE_INVENTORY_MSTEntity outBuss = null;
|
if (reduceAreaQty.Any())
|
{
|
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_Out);
|
if (ruleOrOrder.Status == ResultStatus.Error)
|
return ruleOrOrder;
|
string guid = Guid.NewGuid().ToString();
|
outBuss = new TN_WM_REDUCE_INVENTORY_MSTEntity()
|
{
|
CN_GUID = guid,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_FROM = "盘点单",
|
CN_S_OP_TYPE = "盘亏出库",
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
CN_S_FROM_NO = checkOpNo,
|
CN_S_STOCK_CODE = downHis[0].CN_S_STOCK_CODE,
|
CN_S_STATE = Constants.State_Audit,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_T_OPERATE = DateTime.Now,
|
CN_C_PRINT = "N",
|
DTLEntity = reduceAreaQty.GroupBy(x => new
|
{
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_OWNER = x.CN_S_OWNER
|
}).Select(y =>
|
{
|
return new TN_WM_REDUCE_INVENTORY_DTLEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_MSTGUID = guid,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_C_IS_BALANCE = "N",
|
CN_C_IS_SCRAP = "N",
|
//CN_S_CREATOR = user.CN_S_LOGIN,
|
//CN_S_CREATOR_BY = user.CN_S_NAME,
|
//CN_S_MODIFY = user.CN_S_LOGIN,
|
//CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
//CN_T_CREATE = DateTime.Now,
|
//CN_T_MODIFY = DateTime.Now
|
};
|
}).ToList()
|
};
|
//downHis.Select(x => { x.CN_S_OP_FROM = "盘亏出库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
|
}
|
#endregion
|
#endregion
|
|
#region 盘点盘赢对象转物料容器关联对象
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> newAddMst = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
check.FindAll(x => x.CN_F_CHECK_QTY > 0).ForEach(x =>
|
{
|
string guid = "";
|
if (string.IsNullOrEmpty(x.CN_GUID))
|
{
|
guid = Guid.NewGuid().ToString();
|
addMstGuid.Add(guid);
|
}
|
else
|
guid = x.CN_GUID;
|
TN_WM_B_TRAY_ITEM_MSTEntity mst = new TN_WM_B_TRAY_ITEM_MSTEntity()
|
{
|
CN_GUID = guid,
|
CN_F_QUANTITY = x.CN_F_CHECK_QTY,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
|
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO
|
};
|
x.checkDetaild.ForEach(y =>
|
{
|
mst.TrayItemDtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity()
|
{
|
CN_GUID = y.CN_GUID,
|
CN_PARENT_GUID = guid,
|
CN_S_PACKING_UNIT = y.CN_S_PACKING_UNIT,
|
CN_F_PACKING_QTY = y.CN_F_PACKING_QTY,
|
CN_S_PRODUCTION_BATCH = y.CN_S_PRODUCTION_BATCH,
|
CN_S_LOT_NO = string.IsNullOrEmpty(y.CN_S_LOT_NO) ? lotEntity.CN_S_LOT_CODE : y.CN_S_LOT_NO,
|
CN_F_QUANTITY = y.CN_F_QUANTITY,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_T_CREATE = DateTime.Now
|
});
|
});
|
newAddMst.Add(mst);
|
});
|
#endregion
|
|
return UseTransaction(trans =>
|
{
|
if (trayLocation != null)
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Add(trayLocation, trans);
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_NoFull },
|
new { CN_S_LOCATION_CODE = trayLocation.CN_S_LOCATION_CODE }, trans);
|
}
|
foreach (string location in clearRelLocation)
|
{
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_LOCATIONEntity>>().Delete(new { CN_S_LOCATION_CODE = location }, trans);
|
CreateDAL<DapperDAL<TN_WM_LOCATION_EXTEntity>>().Update(
|
new { CN_S_USE_STATE = Constants.Use_State_Empty },
|
new { CN_S_LOCATION_CODE = location }, trans);
|
}
|
CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().Add(checkMst, trans);
|
//更新仓库量表
|
if (addStockQty.Any())
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
if (reduceStockQty.Any())
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().ReduceStockQty(reduceStockQty, trans);
|
//更新库区量表
|
if (addAreaQty.Any())
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
if (reduceAreaQty.Any())
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(reduceAreaQty, trans);
|
//增加库存业务
|
if (inBuss != null)
|
{
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().Add(inBuss, trans);
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_DTLEntity>>().AddRange(inBuss.DTLEntity, trans);
|
}
|
//减少库存业务
|
if (outBuss != null)
|
{
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_MSTEntity>>().Add(outBuss, trans);
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_DTLEntity>>().AddRange(outBuss.DTLEntity, trans);
|
}
|
//上架记录
|
if (upHis.Any())
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
//下架记录
|
if (downHis.Any())
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
//更新容器量表
|
sourseMst.FindAll(x => x.CN_F_QUANTITY > 0).ForEach(x =>
|
{
|
if (reduceMstGuid.Exists(j => j.Equals(x.CN_GUID)))
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Delete(new { CN_GUID = x.CN_GUID }, trans);
|
else
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().ReduceMstQty(x, trans);
|
x.TrayItemDtlList.FindAll(k => k.CN_F_QUANTITY > 0).ForEach(y =>
|
{
|
if (reduceDtlGuid.Exists(j => j.Equals(y.CN_GUID)))
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Delete(new { CN_GUID = y.CN_GUID }, trans);
|
else
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().ReduceDtlQty(y, trans);
|
});
|
});
|
newAddMst.ForEach(x =>
|
{
|
if (addMstGuid.Exists(y => y.Equals(x.CN_GUID)))
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Add(x, trans);
|
else
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().AddMstQty(x, trans);
|
x.TrayItemDtlList.ForEach(k =>
|
{
|
if (string.IsNullOrEmpty(k.CN_GUID))
|
{
|
k.CN_GUID = Guid.NewGuid().ToString();
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Add(k, trans);
|
}
|
else
|
CreateDAL<TN_WM_B_TRAY_ITEM_RELDAL>().AddDtlQty(k, trans);
|
});
|
});
|
});
|
}
|
#endregion
|
|
#region 无单据盘点
|
/// <summary>
|
/// 无单据盘点
|
/// </summary>
|
/// <param name="list"></param>
|
/// <param name="user"></param>
|
/// <returns></returns>
|
/// <history>[HanHe(dbs)] CREATED 2019/4/16</history>
|
public OperateResult NoBillCheck(List<TN_WM_CHECK_LISTEntity> list, RedisUserEntity user)
|
{
|
//格式转换
|
list.ForEach(x =>
|
{
|
x.CN_S_STOCK_CODE = x.CN_S_STOCK_CODE.Trim();
|
x.CN_S_STOCK_AREA = x.CN_S_STOCK_AREA.Trim();
|
x.CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE.Trim();
|
|
if (string.IsNullOrEmpty(x.CN_S_OWNER))
|
x.CN_S_OWNER = Constants.DefaultOwner;
|
if (string.IsNullOrEmpty(x.CN_S_ITEM_STATE))
|
x.CN_S_ITEM_STATE = Constants.DefaultItemState;
|
if (string.IsNullOrEmpty(x.CN_S_TRAY_GRID))
|
x.CN_S_TRAY_GRID = "1";
|
|
if (x.CN_S_PRODUCTION_BATCH == null)
|
x.CN_S_PRODUCTION_BATCH = "";
|
if (x.checkDetaild == null)
|
{
|
x.checkDetaild = new List<CHECK_DETAILD>(){ new CHECK_DETAILD(){
|
CN_S_PACKING_UNIT="", CN_F_QUANTITY = x.CN_F_CHECK_QTY,
|
CN_S_PRODUCTION_BATCH=""
|
}};
|
}
|
});
|
return FastCheck(list, user);
|
}
|
#endregion
|
|
|
#region 盘点盈亏确认,结束单据
|
/// <summary>
|
/// 盘点盈亏确认,结束单据
|
/// </summary>
|
/// <param name="opNo">盘点单号</param>
|
/// <returns></returns>
|
/// <history>[HanHe(DBS)] CREATED 2019/3/22</history>
|
public OperateResult CheckConfirm(string opNo, RedisUserEntity user)
|
{
|
//获取盘点结果
|
List<TN_WM_CHECK_LISTEntity> checkResult = CreateDAL<DapperDAL<TN_WM_CHECK_LISTEntity>>().GetList(new { CN_S_OP_NO = opNo });
|
List<TN_WM_CHECK_LISTEntity> sourceCheckResult = new List<TN_WM_CHECK_LISTEntity>();
|
checkResult.ForEach(x =>
|
{
|
sourceCheckResult.Add(TransExpV2<TN_WM_CHECK_LISTEntity, TN_WM_CHECK_LISTEntity>.Trans(x));
|
});
|
sourceCheckResult.Select(x =>
|
{
|
x.CN_F_QUANTITY = x.CN_F_CHECK_QTY - x.CN_F_QUANTITY;
|
return x;
|
}).ToList();
|
List<TN_WM_B_TRAY_ITEM_MSTEntity> trayItems = new List<TN_WM_B_TRAY_ITEM_MSTEntity>();
|
sourceCheckResult.GroupBy(x => x.CN_S_TRAY_CODE).ToList().ForEach(x =>
|
{
|
trayItems.AddRange(CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { CN_S_TRAY_CODE = x.Key }));
|
});
|
trayItems.ForEach(x =>
|
{
|
x.TrayItemDtlList = CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().GetList(new { CN_PARENT_GUID = x.CN_GUID });
|
});
|
|
List<string> addMstGuid = new List<string>();//记录哪些是完全盘盈的新物料;
|
List<TN_WM_UP_HISTORYEntity> upHis = new List<TN_WM_UP_HISTORYEntity>();
|
List<TN_WM_DOWN_HISTORYEntity> downHis = new List<TN_WM_DOWN_HISTORYEntity>();
|
sourceCheckResult.ForEach(x =>
|
{
|
TN_WM_B_TRAY_ITEM_MSTEntity trayItemMst = trayItems.Find(y => y.CN_S_TRAY_CODE == x.CN_S_TRAY_CODE &&
|
y.CN_S_TRAY_GRID == x.CN_S_TRAY_GRID && y.CN_S_ITEM_CODE == x.CN_S_ITEM_CODE);
|
|
if (trayItemMst == null)
|
{
|
//完全盘盈的物料,需要添加
|
trayItemMst = new TN_WM_B_TRAY_ITEM_MSTEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = 0,
|
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(),
|
TrayItemDtlList = new List<TN_WM_B_TRAY_ITEM_DTLEntity>()
|
};
|
addMstGuid.Add(trayItemMst.CN_GUID);
|
trayItems.Add(trayItemMst);
|
}
|
trayItemMst.CN_F_QUANTITY += x.CN_F_QUANTITY;//主表数量
|
|
if (x.CN_F_QUANTITY < 0)
|
{
|
//亏
|
foreach (var j in trayItemMst.TrayItemDtlList.FindAll(k => k.CN_S_PACKING_UNIT == (x.CN_S_PACKING_UNIT) && k.CN_F_PACKING_QTY == x.CN_F_PACKING_QTY).
|
OrderByDescending(k => k.CN_S_PRODUCTION_BATCH))
|
{
|
TN_WM_DOWN_HISTORYEntity down = new TN_WM_DOWN_HISTORYEntity();
|
if (x.CN_F_QUANTITY == 0)
|
break;
|
if (j.CN_F_QUANTITY > -x.CN_F_QUANTITY)
|
{
|
j.CN_F_QUANTITY += x.CN_F_QUANTITY;
|
|
down.CN_F_QUANTITY = -x.CN_F_QUANTITY;//记录下架数量
|
|
x.CN_F_QUANTITY = 0;
|
|
|
}
|
else
|
{
|
x.CN_F_QUANTITY += j.CN_F_QUANTITY;
|
|
down.CN_F_QUANTITY = j.CN_F_QUANTITY;//记录下架数量
|
|
j.CN_F_QUANTITY = 0;
|
}
|
|
down.CN_GUID = Guid.NewGuid().ToString();
|
down.CN_S_CREATOR = user.CN_S_LOGIN;
|
down.CN_S_CREATOR_BY = user.CN_S_NAME;
|
down.CN_S_MODIFY = user.CN_S_LOGIN;
|
down.CN_S_MODIFY_BY = user.CN_S_NAME;
|
down.CN_F_PACKING_QTY = j.CN_F_PACKING_QTY;
|
down.CN_S_LOT_NO = j.CN_S_LOT_NO;
|
down.CN_S_FIGURE_NO = trayItemMst.CN_S_FIGURE_NO;
|
down.CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE;
|
down.CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME;
|
down.CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE;
|
down.CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE;
|
down.CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT;
|
down.CN_S_MODEL = trayItemMst.CN_S_MODEL;
|
down.CN_S_OWNER = trayItemMst.CN_S_OWNER;
|
down.CN_S_PACKING_UNIT = j.CN_S_PACKING_UNIT;
|
down.CN_S_PRODUCTION_BATCH = j.CN_S_PRODUCTION_BATCH;
|
down.CN_S_STOCK_AREA = x.CN_S_STOCK_AREA;
|
down.CN_S_STOCK_CODE = x.CN_S_STOCK_CODE;
|
down.CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE;
|
down.CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID;
|
down.CN_T_CREATE = down.CN_T_MODIFY = DateTime.Now;
|
|
downHis.Add(down);
|
}
|
}
|
else if (x.CN_F_QUANTITY > 0)
|
{
|
//赢
|
trayItemMst.TrayItemDtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity()
|
{
|
CN_F_PACKING_QTY = x.CN_F_PACKING_QTY,
|
CN_F_QUANTITY = x.CN_F_QUANTITY,
|
CN_PARENT_GUID = trayItemMst.CN_GUID,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_PACKING_UNIT = x.CN_S_PACKING_UNIT,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now
|
});
|
upHis.Add(new TN_WM_UP_HISTORYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_PACKING_QTY = x.CN_F_PACKING_QTY,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_F_QUANTITY = x.CN_F_QUANTITY,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_LOCATION_CODE = x.CN_S_LOCATION_CODE,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MODIFY = user.CN_S_NAME,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_PACKING_UNIT = x.CN_S_PACKING_UNIT,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_TRAY_CODE = x.CN_S_TRAY_CODE,
|
CN_S_TRAY_GRID = x.CN_S_TRAY_GRID,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
});
|
}
|
else
|
{
|
//平
|
}
|
});
|
|
#region 先中和上架记录和下架记录
|
int upL = upHis.Count;
|
for (int i = 0; i < upL; i++)
|
{
|
TN_WM_UP_HISTORYEntity x = upHis[i];
|
downHis.ForEach(y =>
|
{
|
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_STOCK_AREA.Equals(y.CN_S_STOCK_AREA)
|
&& x.CN_S_LOCATION_CODE.Equals(y.CN_S_LOCATION_CODE)
|
&& x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO) && x.CN_S_OWNER.Equals(y.CN_S_OWNER)
|
&& x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE) && x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
|
{
|
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
|
{
|
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
|
y.CN_F_QUANTITY = 0;
|
}
|
}
|
});
|
}
|
upHis = upHis.FindAll(x => x.CN_F_QUANTITY > 0);
|
downHis = downHis.FindAll(x => x.CN_F_QUANTITY > 0);
|
#endregion
|
|
#region 仓库库区量表影响
|
|
#region 仓库量表
|
List<TN_WM_B_STOCK_QTYEntity> addStockQty = upHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE,
|
};
|
}).ToList();
|
|
List<TN_WM_B_STOCK_QTYEntity> reduceStockQty = downHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_STOCK_QTYEntity()
|
{
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
|
};
|
}).ToList();
|
|
#endregion
|
#region 先中和仓库出入库记录
|
int addL = addStockQty.Count;
|
for (int i = 0; i < addL; i++)
|
{
|
TN_WM_B_STOCK_QTYEntity x = addStockQty[i];
|
reduceStockQty.ForEach(y =>
|
{
|
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO)
|
&& x.CN_S_OWNER.Equals(y.CN_S_OWNER) && x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE)
|
&& x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
|
{
|
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
|
{
|
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
|
y.CN_F_QUANTITY = 0;
|
}
|
}
|
});
|
}
|
addStockQty = addStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
reduceStockQty = reduceStockQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
#endregion
|
|
#region 库区量表
|
List<TN_WM_B_AREA_QTYEntity> addAreaQty = upHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
|
};
|
}).ToList();
|
List<TN_WM_B_AREA_QTYEntity> reduceAreaQty = downHis.GroupBy(x => new
|
{
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_OWNER = x.CN_S_OWNER,
|
CN_S_LOT_NO = x.CN_S_LOT_NO,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH
|
}).Select(y =>
|
{
|
return new TN_WM_B_AREA_QTYEntity()
|
{
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_LOT_NO = y.Key.CN_S_LOT_NO,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_STOCK_AREA = y.Key.CN_S_STOCK_AREA,
|
CN_S_STOCK_CODE = y.Key.CN_S_STOCK_CODE
|
};
|
}).ToList();
|
#endregion
|
#region 先中和库区出入库记录
|
int addAreaL = addAreaQty.Count;
|
for (int i = 0; i < addL; i++)
|
{
|
TN_WM_B_AREA_QTYEntity x = addAreaQty[i];
|
reduceAreaQty.ForEach(y =>
|
{
|
if (x.CN_S_STOCK_CODE.Equals(y.CN_S_STOCK_CODE) && x.CN_S_STOCK_AREA.Equals(y.CN_S_STOCK_AREA)
|
&& x.CN_S_ITEM_CODE.Equals(y.CN_S_ITEM_CODE) && x.CN_S_LOT_NO.Equals(y.CN_S_LOT_NO) && x.CN_S_OWNER.Equals(y.CN_S_OWNER)
|
&& x.CN_S_ITEM_STATE.Equals(y.CN_S_ITEM_STATE) && x.CN_S_PRODUCTION_BATCH.Equals(y.CN_S_PRODUCTION_BATCH))
|
{
|
if (x.CN_F_QUANTITY >= y.CN_F_QUANTITY)
|
{
|
x.CN_F_QUANTITY -= y.CN_F_QUANTITY;
|
y.CN_F_QUANTITY = 0;
|
}
|
}
|
});
|
}
|
addAreaQty = addAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
reduceAreaQty = reduceAreaQty.FindAll(x => x.CN_F_QUANTITY > 0);
|
#endregion
|
|
#endregion
|
|
#region 库存业务影响
|
#region 增加库存业务
|
TN_WM_INCREASE_INVENTORY_MSTEntity inBuss = null;
|
if (addAreaQty.Any())
|
{
|
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_In);
|
if (ruleOrOrder.Status == ResultStatus.Error)
|
return ruleOrOrder;
|
string guid = Guid.NewGuid().ToString();
|
inBuss = new TN_WM_INCREASE_INVENTORY_MSTEntity()
|
{
|
CN_GUID = guid,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_FROM = "盘点单",
|
CN_S_OP_TYPE = "盘盈入库",
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
CN_S_OPERATOR = user.CN_S_LOGIN,
|
CN_S_FROM_NO = opNo,
|
CN_S_LOT_NO = "",
|
CN_S_OWNER = upHis[0].CN_S_OWNER,
|
CN_S_STOCK_CODE = upHis[0].CN_S_STOCK_CODE,
|
CN_S_STATE = Constants.State_Audit,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_T_OPERATE = DateTime.Now,
|
DTLEntity = addAreaQty.GroupBy(x => new
|
{
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_MODEL = x.CN_S_MODEL
|
}).Select(y =>
|
{
|
return new TN_WM_INCREASE_INVENTORY_DTLEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_MSTGUID = guid,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_C_IS_BALANCE = "N",
|
CN_C_IS_SCRAP = "N"
|
};
|
}).ToList()
|
};
|
|
upHis.Select(x => { x.CN_S_OP_FROM = "盘盈入库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
|
}
|
#endregion
|
|
#region 减少库存业务
|
TN_WM_REDUCE_INVENTORY_MSTEntity outBuss = null;
|
if (reduceAreaQty.Any())
|
{
|
OperateResult ruleOrOrder = GetCode(user, Constants.Rule_Out);
|
if (ruleOrOrder.Status == ResultStatus.Error)
|
return ruleOrOrder;
|
string guid = Guid.NewGuid().ToString();
|
outBuss = new TN_WM_REDUCE_INVENTORY_MSTEntity()
|
{
|
CN_GUID = guid,
|
CN_S_CREATOR = user.CN_S_LOGIN,
|
CN_S_CREATOR_BY = user.CN_S_NAME,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_FROM = "盘点单",
|
CN_S_OP_TYPE = "盘亏出库",
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
CN_S_FROM_NO = opNo,
|
CN_S_STOCK_CODE = downHis[0].CN_S_STOCK_CODE,
|
CN_S_STATE = Constants.State_Audit,
|
CN_T_CREATE = DateTime.Now,
|
CN_T_MODIFY = DateTime.Now,
|
CN_T_OPERATE = DateTime.Now,
|
CN_C_PRINT = "N",
|
DTLEntity = reduceAreaQty.GroupBy(x => new
|
{
|
CN_S_STOCK_CODE = x.CN_S_STOCK_CODE,
|
CN_S_STOCK_AREA = x.CN_S_STOCK_AREA,
|
CN_S_PRODUCTION_BATCH = x.CN_S_PRODUCTION_BATCH,
|
CN_S_ITEM_CODE = x.CN_S_ITEM_CODE,
|
CN_S_ITEM_STATE = x.CN_S_ITEM_STATE,
|
CN_S_ITEM_NAME = x.CN_S_ITEM_NAME,
|
CN_S_FIGURE_NO = x.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = x.CN_S_MEASURE_UNIT,
|
CN_S_MODEL = x.CN_S_MODEL,
|
CN_S_OWNER = x.CN_S_OWNER
|
}).Select(y =>
|
{
|
return new TN_WM_REDUCE_INVENTORY_DTLEntity()
|
{
|
CN_GUID = Guid.NewGuid().ToString(),
|
CN_F_QUANTITY = y.Sum(k => k.CN_F_QUANTITY),
|
CN_S_ITEM_CODE = y.Key.CN_S_ITEM_CODE,
|
CN_S_ITEM_NAME = y.Key.CN_S_ITEM_NAME,
|
CN_S_ITEM_STATE = y.Key.CN_S_ITEM_STATE,
|
CN_S_PRODUCTION_BATCH = y.Key.CN_S_PRODUCTION_BATCH,
|
CN_S_FIGURE_NO = y.Key.CN_S_FIGURE_NO,
|
CN_S_MEASURE_UNIT = y.Key.CN_S_MEASURE_UNIT,
|
CN_S_MSTGUID = guid,
|
CN_S_MODEL = y.Key.CN_S_MODEL,
|
CN_S_OWNER = y.Key.CN_S_OWNER,
|
CN_C_IS_BALANCE = "N",
|
CN_C_IS_SCRAP = "N",
|
//CN_S_CREATOR = user.CN_S_LOGIN,
|
//CN_S_CREATOR_BY = user.CN_S_NAME,
|
//CN_S_MODIFY = user.CN_S_LOGIN,
|
//CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_S_OP_NO = ruleOrOrder.Data.ToString(),
|
//CN_T_CREATE = DateTime.Now,
|
//CN_T_MODIFY = DateTime.Now
|
};
|
}).ToList()
|
};
|
downHis.Select(x => { x.CN_S_OP_FROM = "盘亏出库"; x.CN_S_FROM_NO = ruleOrOrder.Data.ToString(); return x; });
|
}
|
#endregion
|
#endregion
|
|
return UseTransaction(trans =>
|
{
|
CreateDAL<DapperDAL<TN_WM_CHECK_MSTEntity>>().Update(new
|
{
|
CN_S_STATE = Constants.State_Completed,
|
CN_S_MODIFY = user.CN_S_LOGIN,
|
CN_S_MODIFY_BY = user.CN_S_NAME,
|
CN_T_MODIFY = DateTime.Now
|
}, new { CN_S_OP_NO = opNo }, trans);
|
//更新仓库量表
|
if (addStockQty.Any())
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().AddStockQty(addStockQty, trans);
|
if (reduceStockQty.Any())
|
CreateDAL<TN_WM_B_STOCK_QTYDAL>().ReduceStockQty(reduceStockQty, trans);
|
//更新库区量表
|
if (addAreaQty.Any())
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().AddAreaQty(addAreaQty, trans);
|
if (reduceAreaQty.Any())
|
CreateDAL<TN_WM_B_AREA_QTYDAL>().ReduceAreaQty(reduceAreaQty, trans);
|
//增加库存业务
|
if (inBuss != null)
|
{
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_MSTEntity>>().Add(inBuss, trans);
|
CreateDAL<DapperDAL<TN_WM_INCREASE_INVENTORY_DTLEntity>>().AddRange(inBuss.DTLEntity, trans);
|
}
|
//减少库存业务
|
if (outBuss != null)
|
{
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_MSTEntity>>().Add(outBuss, trans);
|
CreateDAL<DapperDAL<TN_WM_REDUCE_INVENTORY_DTLEntity>>().AddRange(outBuss.DTLEntity, trans);
|
}
|
//上架记录
|
if (upHis.Any())
|
CreateDAL<DapperDAL<TN_WM_UP_HISTORYEntity>>().AddRange(upHis, trans);
|
//下架记录
|
if (downHis.Any())
|
CreateDAL<DapperDAL<TN_WM_DOWN_HISTORYEntity>>().AddRange(downHis, trans);
|
//更新容器量表
|
|
trayItems.ForEach(x =>
|
{
|
if (addMstGuid.Exists(y => y.Equals(x.CN_GUID)))
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Add(x, trans);
|
else
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_MSTEntity>>().Update(new { CN_F_QUANTITY = x.CN_F_QUANTITY }, new { CN_GUID = x.CN_GUID }, trans);
|
x.TrayItemDtlList.ForEach(y =>
|
{
|
if (string.IsNullOrEmpty(y.CN_GUID))
|
{
|
y.CN_GUID = Guid.NewGuid().ToString();
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Add(y, trans);
|
}
|
else
|
{
|
if (y.CN_F_QUANTITY == 0)
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Delete(new { CN_GUID = y.CN_GUID }, trans);
|
else
|
CreateDAL<DapperDAL<TN_WM_B_TRAY_ITEM_DTLEntity>>().Update(new { CN_F_QUANTITY = y.CN_F_QUANTITY }, new { CN_GUID = y.CN_GUID }, trans);
|
}
|
});
|
});
|
});
|
}
|
#endregion
|
|
}
|
}
|