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 获取分页列表 /// /// 获取分页列表 /// /// /// /// [HanHe(lt)] CREATED 2018/7/3 public DataTable GetDataTable(dynamic obj) { DataTable dt = CreateDAL().GetDataTable(obj); Dictionary stockDic = new Dictionary(); 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().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; } /// /// 获取分页列表 /// /// /// /// [HanHe(lt)] CREATED 2018/7/3 public DataTable GetDataTable(string sqlWhere, string OrdeBy, int pageSize, int pageIndex) { return CreateDAL().GetDataTable(sqlWhere, OrdeBy, pageSize, pageIndex); } #endregion #region 修改 /// /// 更新一条数据 /// /// [HanHe(lt)] CREATED 2018/7/3 /// [HanHe(dbs)] CREATED 2019/3/18 public OperateResult Update(TN_WM_CHECK_MSTEntity entity) { return UseTransaction(trans => { CreateDAL>().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>().Delete(new { CN_S_OP_NO = entity.CN_S_OP_NO }, trans); CreateDAL>().AddRange(entity.dtls, trans); }); } #endregion #region 查询盘点业务主表 /// /// 查询盘点业务主表 /// /// 查询条件 /// /// [HanHe(lt)] CREATED 2018/7/3 public DataTable Getentity(string sqlwhere) { DataTable dt = CreateDAL().Getentity(sqlwhere); Dictionary stockDic = new Dictionary(); 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().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 获取货位物料信息 /// /// 获取货位物料信息 /// /// 查询条件 /// /// [HanHe(lt)] CREATED 2018/7/12 /// [HanHe(dbs)] CREATED 2019/3/14 public OperateResult GetTrayLocation(SearchModel searchModel) { if (searchModel.SearchCondition.CN_S_TYPE == "货位盘点") return CreateDAL>().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>().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().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().GetTrayItem(obj); //} public List Getlist(string sqlwhere, string type) { return CreateDAL().Getlist(sqlwhere, type); } #endregion #region 新增数据 /// /// 新增数据 /// /// 新增实体主表 /// 新增子表 /// /// [HanHe(lt)] CREATED 2018/7/12 /// [HanHe(dbs)] CREATED 2019/3/18 public OperateResult Add(TN_WM_CHECK_MSTEntity mst) { return UseTransaction(trans => { CreateDAL>().Add(mst, trans);//主表 CreateDAL>().AddRange(mst.dtls, trans);//子表 }); } #endregion #region 盘点单提交 /// ///盘点单提交 /// /// /// /// [HanHe(lt)] CREATED 2018/8/24 /// [HanHe(dbs)] CREATED 2019/3/18 public OperateResult Submit(string[] opNos, RedisUserEntity user) { List errorOrs = new List(); foreach (string opNo in opNos) { TN_WM_CHECK_MSTEntity model = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = opNo }); List checkList = CreateDAL().GetCheckList(opNo, model.CN_S_TYPE); if (model.CN_S_TYPE.Equals("物料盘点")) { //快速、简易的判断一下仓库库存和货位库存是否一致 List checkDtl = CreateDAL>().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>().AddRange(checkList, trans); CreateDAL>().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 根据盘点单号修改状态 /// /// 根据盘点单号修改状态 /// /// 盘点单号 /// 状态 /// /// [HanHe(lt)] CREATED 2018/8/24 public SqlExecuteResult UpdateStateByNo(string opNo, string state) { SqlExecuteResult result = CreateDAL().UpdateStateByNo(opNo, state, null); return result; } #endregion #region 删除主子表 /// ///删除主子表 /// /// /// /// [HanHe(lt)] CREATED 2018/8/24 /// [HanHe(dbs)] CREATED 2019/3/18 public OperateResult Delete(string opNo) { return UseTransaction(trans => { CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); }); } #endregion #region 判断是否全部都完成 /// /// 查询盘点业务主表 /// /// 查询条件 /// /// [HanHe(lt)] CREATED 2018/12/3 public bool GetIsExist(string sqlwhere) { DataTable dt = CreateDAL().Getentity(sqlwhere); return dt.Rows.Count > 0; } #endregion #region 删除货位托盘关联 ///// ///// 删除货位托盘关联 ///// ///// ///// [HanHe(lt)] CREATED 2018/12/20 //public OperateResult DeleteTrayLocationAndUpdateLocationExt() //{ // OperateResult operateResult = UseTransaction(trans => // { // CreateDAL().UpdateLocationExt(trans); // CreateDAL().DeleteTrayLocation(trans); // }); // return operateResult; //} #endregion #region 快速盘点 /// /// 托盘盘点数据 /// /// /// /// /// [HanHe(dbs)] CREATED 2019/4/12 public OperateResult FastCheck(List check, RedisUserEntity user) { OperateResult or = new OperateResult(); //记录新增的Mst主表Guid List addMstGuid = new List(); //记录新增的Dtl子表Guid List addDtlGuid = new List(); //记录删除的Mst主表Guid List reduceMstGuid = new List(); //记录删除的Dtl子表Guid List reduceDtlGuid = new List(); //记录解除容器与货位关系的货位 List clearRelLocation = new List(); //虚拟托盘号 string vwTrayCode = ""; //组织的容器货位关联记录对象 TN_WM_B_TRAY_LOCATIONEntity trayLocation = null; //记录原始货位中剩下的物料记录 List sourseMst = new List(); #region 组织盈亏记录 var trayGroup = check.GroupBy(x => x.CN_S_TRAY_CODE).ToArray(); if (trayGroup.Count() > 1) return OperateResult.Error("PDA上传的数据异常!");//一次只会存在一个容器 List sourse = new List(); if (!string.IsNullOrEmpty(trayGroup[0].Key)) sourse = CreateDAL>().GetList(new { CN_S_TRAY_CODE = trayGroup[0].Key }); else { #region 不存在盘点托盘时,生成虚拟托盘,及组织容易与货位关系 or = BLLCreator.Create().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>().GetList(new { CN_PARENT_GUID = s.CN_GUID }); List 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 upHis = new List(); 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 downHis = new List(); 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 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 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 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 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 newAddMst = new List(); 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>().Add(trayLocation, trans); CreateDAL>().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>().Delete(new { CN_S_LOCATION_CODE = location }, trans); CreateDAL>().Update( new { CN_S_USE_STATE = Constants.Use_State_Empty }, new { CN_S_LOCATION_CODE = location }, trans); } CreateDAL>().Add(checkMst, trans); //更新仓库量表 if (addStockQty.Any()) CreateDAL().AddStockQty(addStockQty, trans); if (reduceStockQty.Any()) CreateDAL().ReduceStockQty(reduceStockQty, trans); //更新库区量表 if (addAreaQty.Any()) CreateDAL().AddAreaQty(addAreaQty, trans); if (reduceAreaQty.Any()) CreateDAL().ReduceAreaQty(reduceAreaQty, trans); //增加库存业务 if (inBuss != null) { CreateDAL>().Add(inBuss, trans); CreateDAL>().AddRange(inBuss.DTLEntity, trans); } //减少库存业务 if (outBuss != null) { CreateDAL>().Add(outBuss, trans); CreateDAL>().AddRange(outBuss.DTLEntity, trans); } //上架记录 if (upHis.Any()) CreateDAL>().AddRange(upHis, trans); //下架记录 if (downHis.Any()) CreateDAL>().AddRange(downHis, trans); //更新容器量表 sourseMst.FindAll(x => x.CN_F_QUANTITY > 0).ForEach(x => { if (reduceMstGuid.Exists(j => j.Equals(x.CN_GUID))) CreateDAL>().Delete(new { CN_GUID = x.CN_GUID }, trans); else CreateDAL().ReduceMstQty(x, trans); x.TrayItemDtlList.FindAll(k => k.CN_F_QUANTITY > 0).ForEach(y => { if (reduceDtlGuid.Exists(j => j.Equals(y.CN_GUID))) CreateDAL>().Delete(new { CN_GUID = y.CN_GUID }, trans); else CreateDAL().ReduceDtlQty(y, trans); }); }); newAddMst.ForEach(x => { if (addMstGuid.Exists(y => y.Equals(x.CN_GUID))) CreateDAL>().Add(x, trans); else CreateDAL().AddMstQty(x, trans); x.TrayItemDtlList.ForEach(k => { if (string.IsNullOrEmpty(k.CN_GUID)) { k.CN_GUID = Guid.NewGuid().ToString(); CreateDAL>().Add(k, trans); } else CreateDAL().AddDtlQty(k, trans); }); }); }); } #endregion #region 无单据盘点 /// /// 无单据盘点 /// /// /// /// /// [HanHe(dbs)] CREATED 2019/4/16 public OperateResult NoBillCheck(List 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(){ 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 盘点盈亏确认,结束单据 /// /// 盘点盈亏确认,结束单据 /// /// 盘点单号 /// /// [HanHe(DBS)] CREATED 2019/3/22 public OperateResult CheckConfirm(string opNo, RedisUserEntity user) { //获取盘点结果 List checkResult = CreateDAL>().GetList(new { CN_S_OP_NO = opNo }); List sourceCheckResult = new List(); checkResult.ForEach(x => { sourceCheckResult.Add(TransExpV2.Trans(x)); }); sourceCheckResult.Select(x => { x.CN_F_QUANTITY = x.CN_F_CHECK_QTY - x.CN_F_QUANTITY; return x; }).ToList(); List trayItems = new List(); sourceCheckResult.GroupBy(x => x.CN_S_TRAY_CODE).ToList().ForEach(x => { trayItems.AddRange(CreateDAL>().GetList(new { CN_S_TRAY_CODE = x.Key })); }); trayItems.ForEach(x => { x.TrayItemDtlList = CreateDAL>().GetList(new { CN_PARENT_GUID = x.CN_GUID }); }); List addMstGuid = new List();//记录哪些是完全盘盈的新物料; List upHis = new List(); List downHis = new List(); 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() }; 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 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 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 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 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>().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().AddStockQty(addStockQty, trans); if (reduceStockQty.Any()) CreateDAL().ReduceStockQty(reduceStockQty, trans); //更新库区量表 if (addAreaQty.Any()) CreateDAL().AddAreaQty(addAreaQty, trans); if (reduceAreaQty.Any()) CreateDAL().ReduceAreaQty(reduceAreaQty, trans); //增加库存业务 if (inBuss != null) { CreateDAL>().Add(inBuss, trans); CreateDAL>().AddRange(inBuss.DTLEntity, trans); } //减少库存业务 if (outBuss != null) { CreateDAL>().Add(outBuss, trans); CreateDAL>().AddRange(outBuss.DTLEntity, trans); } //上架记录 if (upHis.Any()) CreateDAL>().AddRange(upHis, trans); //下架记录 if (downHis.Any()) CreateDAL>().AddRange(downHis, trans); //更新容器量表 trayItems.ForEach(x => { if (addMstGuid.Exists(y => y.Equals(x.CN_GUID))) CreateDAL>().Add(x, trans); else CreateDAL>().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>().Add(y, trans); } else { if (y.CN_F_QUANTITY == 0) CreateDAL>().Delete(new { CN_GUID = y.CN_GUID }, trans); else CreateDAL>().Update(new { CN_F_QUANTITY = y.CN_F_QUANTITY }, new { CN_GUID = y.CN_GUID }, trans); } }); }); }); } #endregion } }