using HH.Redis.ReisModel; using HH.WMS.BLL.Algorithm; using HH.WMS.BLL.Basic; using HH.WMS.BLL.Interface; using HH.WMS.Common; using HH.WMS.Common.Algorithm; using HH.WMS.Common.External; using HH.WMS.DAL; using HH.WMS.DAL.Algorithm; using HH.WMS.DAL.Basic; using HH.WMS.DAL.InStock; using HH.WMS.DAL.SysMgr; using HH.WMS.Entitys; using HH.WMS.Entitys.Algorithm; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Entitys; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WMS.BLL.InStock { public class TN_WM_B_TRAY_ITEM_RELBLL : DapperBaseBLL { #region GET /// /// 根据托盘号获取主子表 /// /// /// public List GetByTrayCode(string trayCode) { var trayItemMsts = BLLCreator.Create>().GetList(new { CN_S_TRAY_CODE = trayCode }); foreach (var trayItemMst in trayItemMsts) { trayItemMst.TrayItemDtlList = BLLCreator.Create>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID }); } return trayItemMsts; } /// /// 货位内托盘本物料汇总 /// /// 物料编码 /// 条件 /// /// [HANHE(XDL)] CREATED BY 2018-11-16 public TN_WM_B_TRAY_ITEM_MSTEntity GetInStockQty(string itemCode, string strWhere) { return CreateDAL().GetInStockQty(itemCode, strWhere); } public DataTable GetTrayDetail(string trayCode) { return CreateDAL().GetTrayDetail(trayCode); } public DataTable GetTrayDetailCheck(string trayCode) { return CreateDAL().GetTrayDetailCheck(trayCode); } public DataTable GetTrayDetailManual(string trayCode, string itemCode, string lotNo) { return CreateDAL().GetTrayDetailManual(trayCode, itemCode, lotNo); } public DataTable GetTrayItemDetail(string trayCode) { return CreateDAL().GetTrayItemDetail(trayCode); } public DataTable GetTrayDetailYS(string trayCode) { return CreateDAL().GetTrayDetailYS(trayCode); } public int GetGoodTypeInTray(string trayCode) { return CreateDAL().GetGoodTypeInTray(trayCode); } public DataTable GetTrayInfoYS(string trayCode) { return CreateDAL().GetTrayInfoYS(trayCode); } /// /// 获取货位托盘中物料的信息,按批次汇总 /// /// 托盘号 /// /// [Hanhe(DBS)] CREATED BY 2018/12/8 public DataTable GetTrayItem(string locationCode) { var dt = CreateDAL().GetTrayItem(locationCode); dt.Columns.Add("CN_S_WEIGHT", typeof(string)); foreach (DataRow dr in dt.Rows) { var item = CreateDAL().GetItemEntity(dr["CN_S_ITEM_CODE"].ToString()); if (item != null) { dr["CN_S_WEIGHT"] = item.CN_F_NW.ToString(); } else { dr["CN_S_WEIGHT"] = "0"; } } return dt; } public DataTable GetTrayItemYS(string locationCode) { var dt = CreateDAL().GetTrayItemYS(locationCode); dt.Columns.Add("CN_S_WEIGHT", typeof(string)); foreach (DataRow dr in dt.Rows) { var item = CreateDAL().GetItemEntity(dr["CN_S_ITEM_CODE"].ToString()); if (item != null) { dr["CN_S_WEIGHT"] = item.CN_F_NW.ToString(); } else { dr["CN_S_WEIGHT"] = "0"; } } return dt; } public DataTable GetTrayItemJx(string locationCode) { TN_WM_LOCATION_EXTEntity locationModel = CreateDAL().GetModel(" WHERE CN_S_LOCATION_CODE = '" + locationCode + "'").FirstOrDefault(); DataTable dt = new DataTable(); if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_Normal) { dt = CreateDAL().GetTrayItemJx(locationCode); } else if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_InLock) { dt = CreateDAL().GetTrayItemJxInLock(locationCode); } else if (locationModel.CN_S_LOCATION_STATE == Constants.Location_State_OutLock) { dt = CreateDAL().GetTrayItemJxOutLock(locationCode); } return dt; } /// /// 获取货位托盘中物料的信息,按批次汇总 /// /// 托盘号 /// /// [Hanhe(DBS)] CREATED BY 2018/12/8 public DataTable GetTrayItemLJ(string locationCode) { var dt = CreateDAL().GetTrayItemLJ(locationCode); dt.Columns.Add("CN_S_WEIGHT", typeof(string)); foreach (DataRow dr in dt.Rows) { var item = CreateDAL().GetItemEntity(dr["CN_S_ITEM_CODE"].ToString()); if (item != null) { dr["CN_S_WEIGHT"] = item.CN_F_NW.ToString(); } else { dr["CN_S_WEIGHT"] = "0"; } } return dt; } /// /// 根据托盘码里面物料获取库区 /// /// 托盘码 /// [HanHe(XDL)] CREATED 2019/04/11 public OperateResult GetTrayItemByArea(string trayCode) { TN_WM_B_TRAY_ITEM_MSTEntity mstEntity = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = trayCode }); var CN_S_AREA_CODE = ""; var CN_S_AREA_NAME = ""; if (mstEntity != null) { AutoBomItemEntity itementity = CreateDAL().GetItemEntity(mstEntity.CN_S_ITEM_CODE);//获取物料判断物料类型 List list = new List(); List listr = new List(); if (string.IsNullOrEmpty(itementity.CN_S_STORE_TYPE))//判断物料存储类别是否为空 { list = CreateDAL().GetPartitionItem(mstEntity.CN_S_ITEM_CODE, 2); } else { list = CreateDAL().GetPartitionItem(itementity.CN_S_STORE_TYPE, 1); } if (list.Count > 0) { listr = CreateDAL().GetAreaLocationByGuid(list[0].CN_S_AREA_GUID);//获取逻辑分区表数据 } if (listr.Count > 0) { AutoBomStockAreaEntity entityarea = CreateDAL().GetStockAreaEntity(listr[0].CN_S_STOCK_AREA); CN_S_AREA_NAME = entityarea.CN_S_AREA_NAME == null ? "" : entityarea.CN_S_AREA_NAME; CN_S_AREA_CODE = entityarea.CN_S_AREA_CODE == null ? "" : entityarea.CN_S_AREA_CODE; } } var Area = new { CN_S_AREA_CODE = CN_S_AREA_CODE, CN_S_AREA_NAME = CN_S_AREA_NAME }; return OperateResult.Succeed("", Area); } /// /// 通过托盘码和排除已在的料箱码之后改托盘码是否还有其他料箱码 /// /// 托盘码 /// 已存在的料箱码 /// public List GetTrayUniqueCode(string trayCode, string UniqueCodes) { return CreateDAL().GetTrayUniqueCode(trayCode, UniqueCodes); } /// /// 根据托盘码获取子表 /// /// /// public List GetTrayItemDtlByTrayCode(string trayCode) { return CreateDAL().GetDtlByTrayCode(trayCode); } public decimal GetWeightByLocationCode(string locationCode) { decimal weight = 0; try { var trayLocations = DALCreator.Create().GetListByLocationCode(locationCode); foreach (var trayLocation in trayLocations) { var trayItemDtls = DALCreator.Create().GetDtlByTrayCode(trayLocation.CN_S_TRAY_CODE); foreach (var trayItemDtl in trayItemDtls) { weight += Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO); } } } catch (Exception) { } return weight; } #endregion #region DELETE /// /// 删除托盘物料的主子表 /// /// /// /// /// public OperateResult Delete(string sqlWhere, IDbTransaction trans = null, LogPara logPara = null) { var result = CreateDAL().DeleteTrayItem(sqlWhere, trans); if (logPara != null) Log.Detail(logPara, "删除托盘物料关联(主表、子表)!条件:" + sqlWhere + result.Describe()); return result; } #endregion #region 码盘(PDA接口) /// /// 码盘 /// /// 数据Json /// 登陆信息实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-17 public OperateResult SavePalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity) { OperateResult operateResult = new OperateResult(); string trayNo = entity.CN_S_TRAY_CODE; try { List trayInfoList = new List(); if (string.IsNullOrEmpty(entity.CN_S_TRAY_CODE))//托盘号为空需要生成虚拟托盘 { #region 生成虚拟托盘实体 TN_WM_B_TRAY_INFOEntity trayInfo = new TN_WM_B_TRAY_INFOEntity(); string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"" + userEntity.CN_S_ORG_GUID + "\",\"orgFlag\":\"" + userEntity.CN_S_ORGFLAG + "\"}"; trayNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); if (string.IsNullOrEmpty(trayNo)) { return OperateResult.Error("生成虚拟托盘编码失败!"); } trayInfo.CN_S_TRAY_CODE = trayNo; trayInfo.CN_S_TRAY_TYPE = Constants.VirtualTray; trayInfo.CN_S_TRAY_CODE_EXT = ""; trayInfo.CN_S_SPEC = ""; trayInfo.CN_S_SORTING_CODE = ""; trayInfo.CN_S_STATE = "使用中"; trayInfo.CN_S_USE_STATE = "满"; trayInfo.CN_N_COLUMN_NUM = 1; trayInfo.CN_F_GROSSWEIGHT = 0; trayInfo.CN_F_LOADBEARING = 0; trayInfo.CN_F_WEIGHT = 0; trayInfo.CN_N_LATTICE_NUM = 1; trayInfo.CN_N_ROW_NUM = 1; trayInfo.CN_S_COLLECT_CODE = ""; trayInfo.CN_S_COLLECT_LOCATION = ""; trayInfo.CN_S_CREATOR = userEntity.CN_S_LOGIN; trayInfo.CN_S_CREATOR_BY = userEntity.CN_S_NAME; trayInfo.CN_T_CREATE = DateTime.Now; trayInfo.CN_S_MODIFY = userEntity.CN_S_LOGIN; trayInfo.CN_S_MODIFY_BY = userEntity.CN_S_NAME; trayInfo.CN_T_MODIFY = DateTime.Now; trayInfo.CN_S_DESC = "码盘生成虚拟托盘"; trayInfoList.Add(trayInfo); #endregion //主子结构赋值 entity.CN_S_TRAY_CODE = trayNo; foreach (var item in entity.row) { item.CN_S_TRAY_CODE = trayNo; } } //拼接托盘物料关联主子表 List TrayItemMstlst = new List(); List TrayItemUpdateMstlst = new List(); List TrayItemDtllst = new List(); decimal fweight = 0;//托盘实际重量 Log.Info("===>传参:====>", JsonConvert.SerializeObject(entity)); //托盘安放位置 AutoBomLocationEntity location = new AutoBomLocationEntity(); List TrayLocationlst = new List(); if (!string.IsNullOrEmpty(entity.CN_S_LOCATION_CODE)) { location = BLLCreator.Create().GetLocationModel(entity.CN_S_LOCATION_CODE); if (location == null) { return OperateResult.Error("货位 " + entity.CN_S_LOCATION_CODE + " 没获取到实体信息!"); } TrayLocationlst.Add(new TN_WM_B_TRAY_LOCATIONEntity() { CN_N_INDEX = 1, CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE, CN_S_STOCK_AREA = location.CN_S_AREA_CODE.Trim(), CN_S_STOCK_CODE = location.CN_S_STOCK_CODE, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_CREATOR = userEntity.CN_S_LOGIN, CN_S_CREATOR_BY = userEntity.CN_S_NAME, CN_T_CREATE = DateTime.Now }); } var Group_List = entity.row.GroupBy(x => new { x.CN_S_TRAY_CODE, x.CN_S_TRAY_GRID, x.CN_S_ITEM_CODE, x.CN_S_ITEM_STATE, x.CN_S_LOT_NO, x.CN_S_OWNER }).Select(g => new TrayItemRow { CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(), CN_S_LOT_NO = g.FirstOrDefault().CN_S_LOT_NO.Trim(), CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(), CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY) }).ToList(); Log.Info("===>Group_List:====>", JsonConvert.SerializeObject(Group_List)); for (int i = 0; i < Group_List.Count; i++) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString()); // fweight = fweight + (Convert.ToInt32(Group_List[i].CN_F_QUANTITY)) * itemenity.CN_F_TW; //拼接托盘物料关联主表实体 #region 拼接托盘物料关联主表实体 var mstGuid = Guid.NewGuid().ToString().ToUpper(); var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(), CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(), CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(), CN_S_LOT_NO = Group_List[i].CN_S_LOT_NO.ToString(), CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MODEL = itemenity.CN_S_MODEL, CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(), CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_F_ALLOC_QTY = 0, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), }; #endregion Log.Info("===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity)); #region 拼接托盘物料关联子表实体 //判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行 var result = CreateDAL().CheckExists(trayItemMstEntity); var parentGuid = ""; if (result.Any()) { trayItemMstEntity.CN_GUID = result[0].CN_GUID; TrayItemUpdateMstlst.Add(trayItemMstEntity); parentGuid = result[0].CN_GUID; } else { TrayItemMstlst.Add(trayItemMstEntity); parentGuid = trayItemMstEntity.CN_GUID; } Log.Info("===>TrayItemUpdateMstlst:====>", JsonConvert.SerializeObject(TrayItemUpdateMstlst)); var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_LOT_NO.Trim() == Group_List[i].CN_S_LOT_NO.Trim() && o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList(); Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List)); for (int j = 0; j < dtl_List.Count; j++) { var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity(); dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_PARENT_GUID = parentGuid; dtlentity.CN_S_UNIQUE_CODE = "";// entity.row[i].CN_S_UNIQUE_CODE.ToString(); dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString(); dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_S_PACKING_UNIT = string.IsNullOrEmpty(dtl_List[j].CN_S_PACKING_UNIT) ? "" : dtl_List[j].CN_S_PACKING_UNIT; dtlentity.CN_F_PACKING_QTY = Convert.ToDecimal(dtl_List[j].CN_F_PACKING_QTY); dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY); dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString(); dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString(); dtlentity.CN_F_PURCHASE_PRICE = dtl_List[j].CN_F_PURCHASE_PRICE; dtlentity.CN_F_RETAIL_PRICE = dtl_List[j].CN_F_RETAIL_PRICE; dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION; dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION; dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString(); dtlentity.CN_S_NOTE = ""; dtlentity.CN_S_EXT1 = ""; dtlentity.CN_S_EXT2 = ""; dtlentity.CN_S_EXT3 = ""; dtlentity.CN_S_EXT4 = ""; dtlentity.CN_S_EXT5 = ""; dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlentity.CN_T_MODIFY = DateTime.Now; TrayItemDtllst.Add(dtlentity); Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst)); } #endregion } //策略配置:是否直接生成入库单 TN_WM_LOT_INFOEntity lotInfo = new TN_WM_LOT_INFOEntity(); TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = new TN_WM_INCREASE_INVENTORY_MSTEntity(); string codeDiscWithIncrease = GetStrategy(location.CN_S_STOCK_CODE, StrategyKey.CodeDiscWithIncrease); if (codeDiscWithIncrease.Equals("Y")) { #region 拼接批次信息 string postDataLot = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.BatchNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}"; string lotCode = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postDataLot); if (string.IsNullOrEmpty(lotCode)) { return OperateResult.Error("生成批次号失败!"); } lotInfo.CN_GUID = System.Guid.NewGuid().ToString().ToUpper(); lotInfo.CN_S_LOT_CODE = lotCode; lotInfo.CN_S_VENDOR_NO = ""; lotInfo.CN_S_CREATOR = userEntity.CN_S_LOGIN; lotInfo.CN_S_CREATOR_BY = userEntity.CN_S_NAME; lotInfo.CN_T_CREATE = DateTime.Now; #endregion #region 生成入库单主表 string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}"; string inOpNo = WebApiManager.HttpAutoBom_Post("Api/BillRule/GenBillNo", postData); //生成入库单号 if (string.IsNullOrEmpty(inOpNo)) { return OperateResult.Error("生成入库单号失败!"); } inMstEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper(); inMstEntity.CN_S_OP_NO = inOpNo; inMstEntity.CN_T_OPERATE = DateTime.Now; inMstEntity.CN_T_MODIFY = DateTime.Now; inMstEntity.CN_T_CREATE = DateTime.Now; inMstEntity.CN_S_VENDOR_NO = ""; inMstEntity.CN_S_VENDOR_NAME = ""; inMstEntity.CN_S_STOCK_CODE = location.CN_S_STOCK_CODE; inMstEntity.CN_S_STATE = Constants.State_New; inMstEntity.CN_S_OWNER = Constants.DefaultOwner; inMstEntity.CN_S_OPERATOR = userEntity.CN_S_NAME; inMstEntity.CN_S_OP_TYPE = Constants.DefaultOpType; inMstEntity.CN_S_OP_FROM = ""; inMstEntity.CN_S_FROM_NO = ""; inMstEntity.CN_S_MODIFY = userEntity.CN_S_LOGIN; inMstEntity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; inMstEntity.CN_S_LOT_NO = lotCode; inMstEntity.CN_S_CREATOR = userEntity.CN_S_LOGIN; inMstEntity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; inMstEntity.CN_S_NOTE = "码盘自动生成"; #endregion #region 生成入库单子表 List dtlEntityList = new List(); var rowNo = 1; foreach (var item in Group_List) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(item.CN_S_ITEM_CODE); TN_WM_INCREASE_INVENTORY_DTLEntity dtlEntity = new TN_WM_INCREASE_INVENTORY_DTLEntity(); dtlEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper(); dtlEntity.CN_T_PRODUCTION = item.CN_T_PRODUCTION; dtlEntity.CN_T_MODIFY = DateTime.Now; dtlEntity.CN_T_CREATE = DateTime.Now; dtlEntity.CN_T_EXPIRATION = item.CN_T_EXPIRATION; dtlEntity.CN_S_STATE = Constants.State_New; dtlEntity.CN_S_SERIAL_NO = item.CN_S_SERIAL_NO; dtlEntity.CN_S_PRODUCTION_BATCH = item.CN_S_PRODUCTION_BATCH; dtlEntity.CN_S_OP_NO = inOpNo; dtlEntity.CN_S_MSTGUID = inMstEntity.CN_GUID; dtlEntity.CN_S_SERIAL_NO = ""; dtlEntity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlEntity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlEntity.CN_S_MODEL = item.CN_S_MODEL; dtlEntity.CN_S_MEASURE_UNIT = item.CN_S_MEASURE_UNIT; dtlEntity.CN_S_ITEM_STATE = string.IsNullOrEmpty(item.CN_S_ITEM_STATE) ? Constants.ItemState_Qualified : item.CN_S_ITEM_STATE; dtlEntity.CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME; dtlEntity.CN_S_ITEM_CODE = item.CN_S_ITEM_CODE; dtlEntity.CN_S_FIGURE_NO = item.CN_S_FIGURE_NO; dtlEntity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlEntity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlEntity.CN_S_ARRIVAL_QTY = item.CN_F_QUANTITY == null ? "" : item.CN_F_QUANTITY.ToString(); dtlEntity.CN_N_ROW_NO = rowNo; dtlEntity.CN_F_WARRNTY_PARTS = itemenity.CN_F_WARRNTY_PARTS; dtlEntity.CN_F_UPSHELF_QTY = 0; dtlEntity.CN_F_QUANTITY = item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString()); dtlEntity.CN_F_PRINTING_QTY = 0; dtlEntity.CN_F_PLAN_PRICE = 0; dtlEntity.CN_F_PLAN_MONEY = 0; dtlEntity.CN_F_ALLOT_QTY = 0; dtlEntity.CN_F_ADD_ONTRAY_QTY = 0; dtlEntity.CN_S_NOTE = "码盘自动生成"; dtlEntity.CN_F_ACTUAL_PRICE = item.CN_F_PURCHASE_PRICE; dtlEntity.CN_F_ACTUAL_MONEY = (item.CN_F_PURCHASE_PRICE == null ? 0 : item.CN_F_PURCHASE_PRICE) * item.CN_F_QUANTITY == null ? 0 : Convert.ToDecimal(item.CN_F_QUANTITY.ToString()); dtlEntity.CN_C_IS_SCRAP = Constants.N; dtlEntity.CN_C_IS_BALANCE = Constants.N; dtlEntityList.Add(dtlEntity); rowNo++; } inMstEntity.DTLEntity = dtlEntityList; #endregion } #region 拼接入库上架记录实体 var increaseEntity = CreateDAL>().GetSingleEntity(new { CN_S_LOT_NO = entity.row[0].CN_S_LOT_NO }); if (increaseEntity == null) { return OperateResult.Error("根据批次号未获取到入库单实体!"); } List upHistoryList = new List(); List TrayItemMst = new List(); if (TrayItemMstlst.Any()) { var entity1 = (from left in TrayItemMstlst join right in TrayItemDtllst on left.CN_GUID equals right.CN_PARENT_GUID select new TN_WM_UP_HISTORYEntity { CN_GUID = System.Guid.NewGuid().ToString(), CN_S_LOCATION_CODE = "", CN_S_TRAY_CODE = left.CN_S_TRAY_CODE, CN_S_TRAY_GRID = left.CN_S_TRAY_GRID, CN_S_OWNER = left.CN_S_OWNER, CN_S_ITEM_CODE = left.CN_S_ITEM_CODE, CN_S_ITEM_NAME = left.CN_S_ITEM_NAME, CN_S_FIGURE_NO = left.CN_S_FIGURE_NO, CN_S_MODEL = left.CN_S_MODEL, CN_S_ITEM_STATE = left.CN_S_ITEM_STATE, CN_F_QUANTITY = right.CN_F_QUANTITY, CN_S_MEASURE_UNIT = left.CN_S_MEASURE_UNIT, CN_S_LOT_NO = right.CN_S_LOT_NO, CN_S_PACKING_UNIT = right.CN_S_PACKING_UNIT, CN_F_PACKING_QTY =decimal.Parse(right.CN_F_PACKING_QTY.ToString()), CN_S_PRODUCTION_BATCH = right.CN_S_PRODUCTION_BATCH, CN_S_CREATOR = userEntity.CN_S_LOGIN, CN_S_CREATOR_BY = userEntity.CN_S_NAME, CN_T_CREATE = DateTime.Now, CN_S_MODIFY = userEntity.CN_S_LOGIN, CN_S_MODIFY_BY = userEntity.CN_S_NAME, CN_T_MODIFY = DateTime.Now, CN_S_OP_FROM = "入库单", CN_S_FROM_NO = increaseEntity.CN_S_OP_NO, CN_S_STOCK_CODE = "", CN_S_STOCK_AREA = "" }).ToList(); upHistoryList.AddRange(entity1); } if (TrayItemUpdateMstlst.Any()) { var entity2 = (from left in TrayItemUpdateMstlst join right in TrayItemDtllst on left.CN_GUID equals right.CN_PARENT_GUID select new TN_WM_UP_HISTORYEntity { CN_GUID = System.Guid.NewGuid().ToString(), CN_S_LOCATION_CODE = "", CN_S_TRAY_CODE = left.CN_S_TRAY_CODE, CN_S_TRAY_GRID = left.CN_S_TRAY_GRID, CN_S_OWNER = left.CN_S_OWNER, CN_S_ITEM_CODE = left.CN_S_ITEM_CODE, CN_S_ITEM_NAME = left.CN_S_ITEM_NAME, CN_S_FIGURE_NO = left.CN_S_FIGURE_NO, CN_S_MODEL = left.CN_S_MODEL, CN_S_ITEM_STATE = left.CN_S_ITEM_STATE, CN_F_QUANTITY = right.CN_F_QUANTITY, CN_S_MEASURE_UNIT = left.CN_S_MEASURE_UNIT, CN_S_LOT_NO = right.CN_S_LOT_NO, CN_S_PACKING_UNIT = right.CN_S_PACKING_UNIT, CN_F_PACKING_QTY = right.CN_F_PACKING_QTY, CN_S_PRODUCTION_BATCH = right.CN_S_PRODUCTION_BATCH, CN_S_CREATOR = userEntity.CN_S_LOGIN, CN_S_CREATOR_BY = userEntity.CN_S_NAME, CN_T_CREATE = DateTime.Now, CN_S_MODIFY = userEntity.CN_S_LOGIN, CN_S_MODIFY_BY = userEntity.CN_S_NAME, CN_T_MODIFY = DateTime.Now, CN_S_OP_FROM = "入库单", CN_S_FROM_NO = increaseEntity.CN_S_OP_NO, CN_S_STOCK_CODE = "", CN_S_STOCK_AREA = "" }).ToList(); upHistoryList.AddRange(entity2); } Log.Info("===>upHistoryList", JsonConvert.SerializeObject(upHistoryList)); #endregion operateResult = UseTransaction(trans => { if (TrayLocationlst.Any()) { //新增托盘货位关联表 CreateDAL>().AddRange(TrayLocationlst, trans); } if (TrayItemMstlst.Any()) { //新增托盘物料关联主表 CreateDAL>().AddRange(TrayItemMstlst, trans); } if (!string.IsNullOrEmpty(inMstEntity.CN_S_OP_NO)) { //新增入库单主表 CreateDAL>().Add(inMstEntity, trans); //新增入库单子表 CreateDAL>().AddRange(inMstEntity.DTLEntity, trans); } //新增批次信息表 if (string.IsNullOrEmpty(lotInfo.CN_S_LOT_CODE)) { CreateDAL>().Add(lotInfo, trans); } if (TrayItemUpdateMstlst.Any()) { //更新托盘物料关联主表 var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans); Log.Info("===>更新托盘物料关联主表", ""); Log.Info("===>影响行数", aa.AffectedRows.ToString()); } if (TrayItemDtllst.Any()) { for (int i = 0; i < TrayItemDtllst.Count; i++) { Log.Info("===>根据条件更新子表实体", JsonConvert.SerializeObject(TrayItemDtllst[i])); var aa = CreateDAL().UpdateByCondition(TrayItemDtllst[i], trans); Log.Info("===>影响行数", aa.AffectedRows.ToString()); if (aa.AffectedRows == 0) { CreateDAL>().Add(TrayItemDtllst[i], trans); Log.Info("===>新增托盘物料关联子表", ""); } } } //根据单号和物料编码更新累积码盘数 CreateDAL().updateOntrayQty(entity.row, trans); Log.Info("===>根据单号和物料编码更新累积码盘数", ""); //更新托盘使用状态、贮存状态、实时重量 CreateDAL().updateTrayCodeWeight(entity.CN_S_TRAY_CODE, fweight, trans); //更新托盘贮存状态 if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE)) { CreateDAL>().Update(new { CN_S_USE_STATE = entity.CN_S_USE_STATE }, new { CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE }, trans); } //新增入库记录 if (upHistoryList.Any()) { //新增入库记录 CreateDAL>().AddRange(upHistoryList, trans); } }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } //成功后,赋值托盘编码 if (operateResult.Success) { operateResult.Data = trayNo; } return operateResult; } #endregion #region 简易码盘(PDA接口) /// /// 码盘 /// /// 数据Json /// 登陆信息实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-17 public OperateResult SaveSimPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity) { OperateResult operateResult = new OperateResult(); string trayNo = entity.CN_S_TRAY_CODE; try { List trayInfoList = new List(); //删除托盘物料关联主子表 //拼接托盘物料关联主子表 List TrayItemMstlst = new List(); List TrayItemDtllst = new List(); Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity)); var Group_List = entity.row.GroupBy(x => new { x.CN_S_TRAY_CODE, x.CN_S_TRAY_GRID, x.CN_S_ITEM_CODE, x.CN_S_ITEM_STATE, x.CN_S_LOT_NO, x.CN_S_OWNER }).Select(g => new TrayItemRow { CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(), CN_S_LOT_NO = g.FirstOrDefault().CN_S_LOT_NO.Trim(), CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(), CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY) }).ToList(); Log.Info("SaveSimPalletItemRelation===>Group_List:====>", JsonConvert.SerializeObject(Group_List)); for (int i = 0; i < Group_List.Count; i++) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString()); //拼接托盘物料关联主表实体 #region 拼接托盘物料关联主表实体 var mstGuid = Guid.NewGuid().ToString().ToUpper(); var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(), CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(), CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(), CN_S_LOT_NO = Group_List[i].CN_S_LOT_NO.ToString(), CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MODEL = itemenity.CN_S_MODEL, CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(), CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_F_ALLOC_QTY = 0, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), }; #endregion Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity)); #region 拼接托盘物料关联子表实体 TrayItemMstlst.Add(trayItemMstEntity); var parentGuid = trayItemMstEntity.CN_GUID; var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_LOT_NO.Trim() == Group_List[i].CN_S_LOT_NO.Trim() && o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList(); Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List)); for (int j = 0; j < dtl_List.Count; j++) { var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity(); dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_PARENT_GUID = parentGuid; dtlentity.CN_S_UNIQUE_CODE = "";// entity.row[i].CN_S_UNIQUE_CODE.ToString(); dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString(); dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY); dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString(); dtlentity.CN_S_NOTE = ""; dtlentity.CN_S_EXT1 = ""; dtlentity.CN_S_EXT2 = ""; dtlentity.CN_S_EXT3 = ""; dtlentity.CN_S_EXT4 = ""; dtlentity.CN_S_EXT5 = ""; dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlentity.CN_T_MODIFY = DateTime.Now; TrayItemDtllst.Add(dtlentity); Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst)); } #endregion } //获取原托盘中的数据 List lstOriginalMST = BLLCreator.Create>().GetList(new { CN_S_TRAY_CODE = trayNo }); operateResult = UseTransaction(trans => { //删除主表 CreateDAL>().Delete(new { CN_S_TRAY_CODE = trayNo }, trans); //删除子表 foreach (TN_WM_B_TRAY_ITEM_MSTEntity mEntity in lstOriginalMST) { CreateDAL>().Delete(new { CN_PARENT_GUID = mEntity.CN_GUID }, trans); } if (TrayItemMstlst.Any()) { //新增托盘物料关联主表 CreateDAL>().AddRange(TrayItemMstlst, trans); } if (TrayItemDtllst.Any()) { CreateDAL>().AddRange(TrayItemDtllst, trans); } }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } //成功后,赋值托盘编码 if (operateResult.Success) { operateResult.Data = trayNo; } return operateResult; } #endregion #region 唯一码码盘(PDA接口) /// /// 码盘 /// /// 数据Json /// 登陆信息实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-17 public OperateResult SaveUniPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity) { OperateResult operateResult = new OperateResult(); string trayNo = entity.CN_S_TRAY_CODE; try { List trayInfoList = new List(); //删除托盘物料关联主子表 //拼接托盘物料关联主子表 List TrayItemMstlst = new List(); List TrayItemUpdateMstlst = new List(); List TrayItemDtllst = new List(); Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity)); var Group_List = entity.row.GroupBy(x => new { x.CN_S_TRAY_CODE, x.CN_S_TRAY_GRID, x.CN_S_ITEM_CODE, x.CN_S_ITEM_STATE, x.CN_S_OWNER }).Select(g => new TrayItemRow { CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(), CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(), CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY) }).ToList(); Log.Info("SaveSimPalletItemRelation===>Group_List:====>", JsonConvert.SerializeObject(Group_List)); for (int i = 0; i < Group_List.Count; i++) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString()); //拼接托盘物料关联主表实体 #region 拼接托盘物料关联主表实体 var mstGuid = Guid.NewGuid().ToString().ToUpper(); var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(), CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(), CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(), CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MODEL = itemenity.CN_S_MODEL, CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(), CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_F_ALLOC_QTY = 0, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), }; #endregion //判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行 var result = CreateDAL().CheckExists(trayItemMstEntity); var parentGuid = ""; if (result.Any()) { trayItemMstEntity.CN_GUID = result[0].CN_GUID; TrayItemUpdateMstlst.Add(trayItemMstEntity); parentGuid = result[0].CN_GUID; } else { TrayItemMstlst.Add(trayItemMstEntity); parentGuid = trayItemMstEntity.CN_GUID; } Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity)); #region 拼接托盘物料关联子表实体 var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim() && o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList(); Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List)); for (int j = 0; j < dtl_List.Count; j++) { var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity(); dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_PARENT_GUID = parentGuid; dtlentity.CN_S_UNIQUE_CODE = entity.row[i].CN_S_UNIQUE_CODE.ToString(); dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString(); dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY); dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString(); dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString(); dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION; dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION; dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString(); dtlentity.CN_S_NOTE = ""; dtlentity.CN_S_EXT1 = ""; dtlentity.CN_S_EXT2 = ""; dtlentity.CN_S_EXT3 = ""; dtlentity.CN_S_EXT4 = ""; dtlentity.CN_S_EXT5 = ""; dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlentity.CN_T_MODIFY = DateTime.Now; TrayItemDtllst.Add(dtlentity); Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst)); } #endregion } operateResult = UseTransaction(trans => { if (TrayItemMstlst.Any()) { //新增托盘物料关联主表 CreateDAL>().AddRange(TrayItemMstlst, trans); } if (TrayItemUpdateMstlst.Any()) { //更新托盘物料关联主表 var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans); Log.Info("===>更新托盘物料关联主表", ""); Log.Info("===>影响行数", aa.AffectedRows.ToString()); } if (TrayItemDtllst.Any()) { CreateDAL>().AddRange(TrayItemDtllst, trans); } }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } //成功后,赋值托盘编码 if (operateResult.Success) { operateResult.Data = trayNo; } return operateResult; } #endregion #region 根据入库单码盘(PDA接口) /// /// 码盘 /// /// 数据Json /// 登陆信息实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-17 public OperateResult SaveRkdPalletItemRelation(ItemOnTrayEntity entity, RedisUserEntity userEntity) { OperateResult operateResult = new OperateResult(); string trayNo = entity.CN_S_TRAY_CODE; try { List trayInfoList = new List(); //删除托盘物料关联主子表 //拼接托盘物料关联主子表 List TrayItemMstlst = new List(); List TrayItemUpdateMstlst = new List(); List TrayItemDtllst = new List(); Log.Info("SaveRkdPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity)); var Group_List = entity.row.GroupBy(x => new { x.CN_S_TRAY_CODE, x.CN_S_TRAY_GRID, x.CN_S_ITEM_CODE, x.CN_S_ITEM_STATE, x.CN_S_OWNER }).Select(g => new TrayItemRow { CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(), CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(), CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY) }).ToList(); Log.Info("SaveRkdPalletItemRelation===>Group_List:====>", JsonConvert.SerializeObject(Group_List)); for (int i = 0; i < Group_List.Count; i++) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString()); //拼接托盘物料关联主表实体 #region 拼接托盘物料关联主表实体 var mstGuid = Guid.NewGuid().ToString().ToUpper(); var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(), CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(), CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(), CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MODEL = itemenity.CN_S_MODEL, CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(), CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_F_ALLOC_QTY = 0, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), }; #endregion //判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行 var result = CreateDAL().CheckExists(trayItemMstEntity); var parentGuid = ""; if (result.Any()) { trayItemMstEntity.CN_GUID = result[0].CN_GUID; TrayItemUpdateMstlst.Add(trayItemMstEntity); parentGuid = result[0].CN_GUID; } else { TrayItemMstlst.Add(trayItemMstEntity); parentGuid = trayItemMstEntity.CN_GUID; } Log.Info("SaveRkdPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity)); #region 拼接托盘物料关联子表实体 var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim() && o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList(); Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List)); for (int j = 0; j < dtl_List.Count; j++) { var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity(); dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_PARENT_GUID = parentGuid; dtlentity.CN_S_UNIQUE_CODE = ""; dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString(); dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY); dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString(); dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString(); dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION; dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION; dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString(); dtlentity.CN_S_NOTE = ""; dtlentity.CN_S_EXT1 = ""; dtlentity.CN_S_EXT2 = ""; dtlentity.CN_S_EXT3 = ""; dtlentity.CN_S_EXT4 = ""; dtlentity.CN_S_EXT5 = ""; dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlentity.CN_T_MODIFY = DateTime.Now; TrayItemDtllst.Add(dtlentity); Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst)); } #endregion } operateResult = UseTransaction(trans => { if (TrayItemMstlst.Any()) { //新增托盘物料关联主表 CreateDAL>().AddRange(TrayItemMstlst, trans); } if (TrayItemUpdateMstlst.Any()) { //更新托盘物料关联主表 var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans); Log.Info("===>更新托盘物料关联主表", ""); Log.Info("===>影响行数", aa.AffectedRows.ToString()); } if (TrayItemDtllst.Any()) { CreateDAL>().AddRange(TrayItemDtllst, trans); } //根据单号和物料编码更新累积码盘数 CreateDAL().updateOntrayQty(entity.row, trans); Log.Info("===>根据单号和物料编码更新累积码盘数", ""); }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } //成功后,赋值托盘编码 if (operateResult.Success) { operateResult.Data = trayNo; } return operateResult; } #endregion #region 唯一码码盘宇寿(PDA接口) /// /// 码盘 /// /// 数据Json /// 登陆信息实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-17 public OperateResult SaveUniPalletItemRelationYS(ItemOnTrayEntity entity, RedisUserEntity userEntity) { OperateResult operateResult = new OperateResult(); string trayNo = entity.CN_S_TRAY_CODE; try { List trayInfoList = new List(); //拼接托盘物料关联主子表 List TrayItemMstlst = new List(); List TrayItemUpdateMstlst = new List(); List TrayItemDtllst = new List(); List upHis = new List(); Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity)); //List GetModel = BLLCreator.Create(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'"); //AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity(); // areaModel = CreateDAL().GetAreaModelByLocation(entity.CN_S_LOCATION_CODE); var Group_List = entity.row.GroupBy(x => new { x.CN_S_TRAY_CODE, x.CN_S_TRAY_GRID, x.CN_S_ITEM_CODE, x.CN_S_ITEM_STATE, x.CN_S_OWNER }).Select(g => new TrayItemRow { CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(), CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(), CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY) }).ToList(); Log.Info("SaveUniPalletItemRelationYS===>Group_List:====>", JsonConvert.SerializeObject(Group_List)); for (int i = 0; i < Group_List.Count; i++) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString()); //拼接托盘物料关联主表实体 #region 拼接托盘物料关联主表实体 var mstGuid = Guid.NewGuid().ToString().ToUpper(); var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(), CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(), CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(), CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MODEL = itemenity.CN_S_MODEL, CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(), CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()) }; #endregion //判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行 var result = CreateDAL().CheckExists(trayItemMstEntity); var parentGuid = ""; if (result.Any()) { trayItemMstEntity.CN_GUID = result[0].CN_GUID; TrayItemUpdateMstlst.Add(trayItemMstEntity); parentGuid = result[0].CN_GUID; } else { TrayItemMstlst.Add(trayItemMstEntity); parentGuid = trayItemMstEntity.CN_GUID; } Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity)); #region 拼接托盘物料关联子表实体 var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim() && o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList(); Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List)); for (int j = 0; j < dtl_List.Count; j++) { var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity(); dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_PARENT_GUID = parentGuid; dtlentity.CN_S_UNIQUE_CODE = dtl_List[j].CN_S_UNIQUE_CODE.ToString(); //宇寿项目存放指令批次号 if (dtl_List[j].CN_S_LOT_NO == null) { dtlentity.CN_S_LOT_NO = ""; } else { dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString(); } dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString();//保存重量 dtlentity.CN_S_PACKING_UNIT = dtl_List[j].CN_S_PACKING_UNIT.ToString();//保存每公斤支数 dtlentity.CN_F_PACKING_QTY = dtl_List[j].CN_F_PACKING_QTY;//保存计算后的数量 dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY); dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString(); dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString(); dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION; dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION; dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString(); dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_S_NOTE = ""; //宇寿项目存放工单号 if (dtl_List[j].CN_S_EXT1 != null) { dtlentity.CN_S_EXT1 = dtl_List[j].CN_S_EXT1.ToString(); } else { dtlentity.CN_S_EXT1 = ""; } dtlentity.CN_S_EXT2 = ""; dtlentity.CN_S_EXT3 = ""; dtlentity.CN_S_EXT4 = ""; dtlentity.CN_S_EXT5 = ""; dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlentity.CN_T_MODIFY = DateTime.Now; TrayItemDtllst.Add(dtlentity); Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst)); } #endregion } operateResult = UseTransaction(trans => { if (TrayItemMstlst.Any()) { //新增托盘物料关联主表 CreateDAL>().AddRange(TrayItemMstlst, trans); } if (TrayItemUpdateMstlst.Any()) { //更新托盘物料关联主表 var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans); Log.Info("===>更新托盘物料关联主表", ""); Log.Info("===>影响行数", aa.AffectedRows.ToString()); } if (TrayItemDtllst.Any()) { CreateDAL>().AddRange(TrayItemDtllst, trans); } //更新托盘贮存状态 if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE)) { CreateDAL>().Update(new { CN_S_USE_STATE = entity.CN_S_USE_STATE }, new { CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE }, trans); } }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } return operateResult; } /// /// 码盘 /// /// 数据Json /// 登陆信息实体 /// /// [HANHE(XDL)] CREATED BY 2018-11-17 public OperateResult SaveBackPalletItemRelationYS(ItemOnTrayEntity entity, RedisUserEntity userEntity) { OperateResult operateResult = new OperateResult(); string trayNo = entity.CN_S_TRAY_CODE; try { List trayInfoList = new List(); //拼接托盘物料关联主子表 List TrayItemMstlst = new List(); List TrayItemUpdateMstlst = new List(); List TrayItemDtllst = new List(); List upHis = new List(); Log.Info("SaveSimPalletItemRelation===>传参:====>", JsonConvert.SerializeObject(entity)); List GetModel = BLLCreator.Create(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'"); AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity(); areaModel = CreateDAL().GetAreaModelByLocation(entity.CN_S_LOCATION_CODE); var Group_List = entity.row.GroupBy(x => new { x.CN_S_TRAY_CODE, x.CN_S_TRAY_GRID, x.CN_S_ITEM_CODE, x.CN_S_ITEM_STATE, x.CN_S_OWNER }).Select(g => new TrayItemRow { CN_S_TRAY_CODE = g.FirstOrDefault().CN_S_TRAY_CODE.Trim(), CN_S_TRAY_GRID = string.IsNullOrEmpty(g.FirstOrDefault().CN_S_TRAY_GRID.Trim()) ? "1" : g.FirstOrDefault().CN_S_TRAY_GRID.Trim(), CN_S_ITEM_CODE = g.FirstOrDefault().CN_S_ITEM_CODE.Trim(), CN_S_ITEM_STATE = g.FirstOrDefault().CN_S_ITEM_STATE.Trim(), CN_S_OWNER = g.FirstOrDefault().CN_S_OWNER.Trim(), CN_F_QUANTITY = g.Sum(p => p.CN_F_QUANTITY) }).ToList(); Log.Info("SaveUniPalletItemRelationYS===>Group_List:====>", JsonConvert.SerializeObject(Group_List)); for (int i = 0; i < Group_List.Count; i++) { AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(Group_List[i].CN_S_ITEM_CODE.ToString()); //拼接托盘物料关联主表实体 #region 拼接托盘物料关联主表实体 var mstGuid = Guid.NewGuid().ToString().ToUpper(); var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = Group_List[i].CN_S_TRAY_GRID.ToString(), CN_S_OWNER = string.IsNullOrEmpty(Group_List[i].CN_S_OWNER.ToString()) ? Constants.DefaultOwner : Group_List[i].CN_S_OWNER.ToString(), CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.ToString(), CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_FIGURE_NO = itemenity.CN_S_FIGURE_NO, CN_S_MODEL = itemenity.CN_S_MODEL, CN_S_ITEM_STATE = string.IsNullOrEmpty(Group_List[i].CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : Group_List[i].CN_S_ITEM_STATE.ToString(), CN_F_QUANTITY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(Group_List[i].CN_F_QUANTITY.ToString()) }; #endregion //判断是否在数据库中已存在,存在的话,主表递增数量,不存在的话,主表追加行 var result = CreateDAL().CheckExists(trayItemMstEntity); var parentGuid = ""; if (result.Any()) { trayItemMstEntity.CN_GUID = result[0].CN_GUID; TrayItemUpdateMstlst.Add(trayItemMstEntity); parentGuid = result[0].CN_GUID; } else { TrayItemMstlst.Add(trayItemMstEntity); parentGuid = trayItemMstEntity.CN_GUID; } Log.Info("SaveSimPalletItemRelation===>trayItemMstEntity:====>", JsonConvert.SerializeObject(trayItemMstEntity)); #region 拼接托盘物料关联子表实体 var dtl_List = entity.row.Where(o => o.CN_S_OWNER.Trim() == Group_List[i].CN_S_OWNER.Trim() && o.CN_S_ITEM_STATE.Trim() == Group_List[i].CN_S_ITEM_STATE.Trim() && o.CN_S_ITEM_CODE.Trim() == Group_List[i].CN_S_ITEM_CODE.Trim()).ToList(); Log.Info("===>dtl_List:====>", JsonConvert.SerializeObject(dtl_List)); for (int j = 0; j < dtl_List.Count; j++) { var dtlentity = new TN_WM_B_TRAY_ITEM_DTLEntity(); dtlentity.CN_GUID = Guid.NewGuid().ToString().ToUpper(); dtlentity.CN_PARENT_GUID = parentGuid; dtlentity.CN_S_UNIQUE_CODE = dtl_List[j].CN_S_UNIQUE_CODE.ToString(); dtlentity.CN_S_LOT_NO = dtl_List[j].CN_S_LOT_NO.ToString(); dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_F_QUANTITY = Convert.ToDecimal(dtl_List[j].CN_F_QUANTITY); dtlentity.CN_S_VENDOR_NO = dtl_List[j].CN_S_VENDOR_NO.ToString(); dtlentity.CN_S_VENDOR_NAME = dtl_List[j].CN_S_VENDOR_NAME.ToString(); dtlentity.CN_T_PRODUCTION = dtl_List[j].CN_T_PRODUCTION; dtlentity.CN_T_EXPIRATION = dtl_List[j].CN_T_EXPIRATION; dtlentity.CN_S_PRODUCTION_BATCH = dtl_List[j].CN_S_PRODUCTION_BATCH.ToString(); dtlentity.CN_S_SERIAL_NO = dtl_List[j].CN_S_SERIAL_NO.ToString(); dtlentity.CN_S_NOTE = ""; dtlentity.CN_S_EXT1 = dtl_List[j].CN_S_EXT1.ToString(); ; dtlentity.CN_S_EXT2 = ""; dtlentity.CN_S_EXT3 = ""; dtlentity.CN_S_EXT4 = ""; dtlentity.CN_S_EXT5 = ""; dtlentity.CN_S_CREATOR = userEntity.CN_S_LOGIN; dtlentity.CN_S_CREATOR_BY = userEntity.CN_S_NAME; dtlentity.CN_T_CREATE = DateTime.Now; dtlentity.CN_S_MODIFY = userEntity.CN_S_LOGIN; dtlentity.CN_S_MODIFY_BY = userEntity.CN_S_NAME; dtlentity.CN_T_MODIFY = DateTime.Now; TrayItemDtllst.Add(dtlentity); Log.Info("===>TrayItemDtllst:" + j + "==>", JsonConvert.SerializeObject(TrayItemDtllst)); #region 拼接上架记录表 upHis.Add(new TN_WM_UP_HISTORYEntity() { CN_GUID = Guid.NewGuid().ToString(), CN_F_PACKING_QTY = 0, CN_S_CREATOR = userEntity.CN_S_LOGIN, CN_S_CREATOR_BY = userEntity.CN_S_NAME, CN_S_ITEM_CODE = Group_List[i].CN_S_ITEM_CODE.Trim(), CN_F_QUANTITY = Convert.ToDecimal(dtlentity.CN_S_SERIAL_NO), CN_S_OWNER = "", CN_S_ITEM_STATE = "", CN_S_LOT_NO = "", CN_S_PRODUCTION_BATCH = dtlentity.CN_S_PRODUCTION_BATCH, CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME, CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE, CN_S_MEASURE_UNIT = "kg", CN_S_MODIFY = userEntity.CN_S_NAME, CN_S_MODIFY_BY = userEntity.CN_S_NAME, CN_S_PACKING_UNIT = "", CN_S_STOCK_AREA = GetModel[0].CN_S_AREA_CODE, CN_S_STOCK_CODE = GetModel[0].CN_S_STOCK_CODE, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = "1", CN_T_CREATE = DateTime.Now, CN_T_MODIFY = DateTime.Now, CN_S_OP_FROM = "PDA码盘后绑定入缓存区" }); #endregion } #endregion } //拼接托盘货位实体 List trayLocationList = new List(); TN_WM_B_TRAY_LOCATIONEntity trayLocation = new TN_WM_B_TRAY_LOCATIONEntity() { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_STOCK_CODE = GetModel[0].CN_S_STOCK_CODE, CN_S_STOCK_AREA = GetModel[0].CN_S_AREA_CODE, CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE, CN_N_INDEX = 1, CN_S_CREATOR = userEntity.CN_S_LOGIN, CN_S_CREATOR_BY = userEntity.CN_S_NAME, CN_T_CREATE = DateTime.Now }; trayLocationList.Add(trayLocation); operateResult = UseTransaction(trans => { if (TrayItemMstlst.Any()) { //新增托盘物料关联主表 CreateDAL>().AddRange(TrayItemMstlst, trans); } if (TrayItemUpdateMstlst.Any()) { //更新托盘物料关联主表 var aa = CreateDAL().UpdateMstQty(TrayItemUpdateMstlst, trans); Log.Info("===>更新托盘物料关联主表", ""); Log.Info("===>影响行数", aa.AffectedRows.ToString()); } if (TrayItemDtllst.Any()) { CreateDAL>().AddRange(TrayItemDtllst, trans); } //写入托盘货位关联表 if (trayLocationList.Any()) { CreateDAL>().AddRange(trayLocationList, trans); } if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y")) { //更新货位贮存状态及货位状态 operateResult = CreateDAL>().Update( new { CN_S_USE_STATE = Constants.Use_State_Full, CN_S_MODIFY = userEntity.CN_S_LOGIN, CN_S_MODIFY_BY = userEntity.CN_S_NAME, CN_T_MODIFY = DateTime.Now }, new { CN_S_LOCATION_CODE = entity.CN_S_LOCATION_CODE, CN_S_LOCATION_STATE = Constants.Location_State_Normal }, trans); if (operateResult.AffectedRows == 0) { throw new Exception("更新货位存储状态并发冲突,该货位状态可能已经发生变化"); } } //更新托盘贮存状态 if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE)) { CreateDAL>().Update(new { CN_S_USE_STATE = entity.CN_S_USE_STATE }, new { CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE }, trans); } //上架记录 if (upHis.Any()) CreateDAL>().AddRange(upHis, trans); }); } catch (Exception ex) { return OperateResult.Error(ex.Message.ToString()); } return operateResult; } #endregion #region 呼叫补料托盘 /// /// 呼叫补料托盘 /// /// 物料编码 /// 库区 /// 结束位置 /// 用户实体 /// /// [HANHE(XDL)] CREATED BY 2019-03-18 public OperateResult CallFeedingTray(string itemCode, string areaCode, string endLocation, RedisUserEntity useEntity) { Log.Info("===>开始呼叫补料托盘", itemCode + "$" + areaCode + "$" + endLocation + "$"); //目的位置货位实体 AutoBomLocationEntity endLocationEntity = BLLCreator.Create().GetLocationModel(endLocation); if (endLocationEntity == null) { Log.Info("===>目的位置货位实体获取失败!", endLocation); } //计算托盘 List listItemClass = new List(); itemInClass itemEntity = new itemInClass()//需要补料的物料 { itemCode = itemCode }; listItemClass.Add(itemEntity); OutFeedResultEntity feedResult = BLLCreator.Create().Feed(new FeedAlgorEntity() { stockArea = areaCode, lstItem = listItemClass, lockLocation = false }); Log.Info("===>拼接调用补料算法参数", JsonConvert.SerializeObject(feedResult)); if (!feedResult.Success) { return OperateResult.Error("算法异常:" + feedResult.Msg); } List taskEntityList = new List(); foreach (FeedItemEntity m in feedResult.lstFeedItem) { //生成出库任务 TN_WM_TASKEntity taskEntity = new TN_WM_TASKEntity(); string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.TaskNo_Out + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}"; string taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); if (string.IsNullOrEmpty(taskNo)) { return OperateResult.Error("出库任务号生成失败!"); } taskEntity.CN_S_TASK_NO = taskNo; taskEntity.CN_S_TASK_TYPE = "呼叫出"; taskEntity.CN_S_FROM_OP = "出库"; taskEntity.CN_S_START_BIT = m.locationCode; taskEntity.CN_S_END_AREA = endLocationEntity.CN_S_AREA_CODE; taskEntity.CN_S_END_BIT = endLocationEntity.CN_S_LOCATION_CODE; taskEntity.CN_S_STATE = Constants.TaskState_NoExecuted; taskEntity.CN_S_TRAY_CODE = m.trayCode; taskEntity.CN_S_CREATOR = useEntity.CN_S_LOGIN; taskEntity.CN_S_CREATOR_BY = useEntity.CN_S_NAME; taskEntity.CN_T_CREATE = DateTime.Now; taskEntity.CN_S_MODIFY = useEntity.CN_S_LOGIN; taskEntity.CN_S_MODIFY_BY = useEntity.CN_S_NAME; taskEntity.CN_T_MODIFY = DateTime.Now; taskEntityList.Add(taskEntity); } Log.Info("===>拼接出库任务实体", JsonConvert.SerializeObject(taskEntityList)); OperateResult operateResult = UseTransaction(trans => { //下推任务给AMS foreach (var taskEntity in taskEntityList) { OperateResult re = new OtherSysApi().SendAmsTask(taskEntity); if (!re.Success) { throw new Exception(re.Msg); } Log.Info("===>DoTransaction1", ""); //锁定起始货位 CreateDAL>().Update( new { CN_S_LOCATION_STATE = Constants.Location_State_OutLock }, new { CN_S_LOCATION_CODE = taskEntity.CN_S_START_BIT }, trans); Log.Info("===>DoTransaction2", ""); } //新增出库任务 if (taskEntityList.Any()) { CreateDAL>().AddRange(taskEntityList, trans); } Log.Info("===>DoTransaction3", ""); }); return operateResult; } #endregion #region 新增托盘物料主子表 /// /// 新增托盘物料主子表 /// /// 托盘物料实体 /// public OperateResult CommitTrayItem(List trayItemEntityList, RedisUserEntity userEntity) { OperateResult operateResult = UseTransaction(trans => { foreach (var trayItemEntity in trayItemEntityList) { if (!string.IsNullOrEmpty(trayItemEntity.CN_GUID)) { trayItemEntity.CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(); //新增托盘物料关联主表 CreateDAL>().Add(trayItemEntity, trans); foreach (var item in trayItemEntity.TrayItemDtlList) { item.CN_GUID = System.Guid.NewGuid().ToString(); item.CN_S_CREATOR = userEntity.CN_S_LOGIN; item.CN_S_CREATOR_BY = userEntity.CN_S_NAME; item.CN_T_CREATE = DateTime.Now; item.CN_S_MODIFY = userEntity.CN_S_LOGIN; item.CN_S_MODIFY_BY = userEntity.CN_S_NAME; item.CN_T_MODIFY = DateTime.Now; } //新增托盘物料关联子表 CreateDAL>().AddRange(trayItemEntity.TrayItemDtlList, trans); } } }); return operateResult; } #endregion public List GetTrayItemMst(string sql) { return CreateDAL().GetTrayItemMst(sql); } public List GetTrayItemDtl(string sql) { return CreateDAL().GetDtl(sql); } #region 验证料箱码是否属于当前托盘 public bool CheckUniqueIsCurTray(string tryaCode, string uniqueCode) { return CreateDAL().CheckUniqueIsCurTray(tryaCode, uniqueCode); } #endregion #region 宇寿组盘托盘物料主子表 /// /// 宇寿组盘托盘物料主子表 /// /// /// /// public OperateResult SaveGroupPlateYS(ItemOnTrayEntity entity, RedisUserEntity userEntity) { Log.Info("===>宇寿组盘开始:", ""); OperateResult operateResult = new OperateResult(); List TrayItemMstlst_a = new List(); List TrayItemMstlst_u = new List(); List TrayItemMstlst_d = new List(); List TrayItemDtllst_u = new List(); List lstFromTray = new List(); //所有被组盘的料箱码集合 string UniqueCode = string.Empty; //所有被组合的托盘码信息 List TrayMstlst_All = new List(); List lstRemoveFromTray = new List(); #region 检查托盘与货位是否满足绑定条件 //List trayLocationList = new List(); //List GetModel = BLLCreator.Create(this.userInfo).GetModel("where CN_S_LOCATION_CODE='" + entity.CN_S_LOCATION_CODE + "'"); //if (GetModel.Count == 0) //{ // return OperateResult.Error("在表TN_WM_LOCATION_EXT中未查询到该货位!"); //} //AutoBomStockAreaEntity areaModel = new AutoBomStockAreaEntity(); //areaModel = CreateDAL().GetAreaModelByLocation(entity.CN_S_LOCATION_CODE); //if (areaModel == null) //{ // //非法的目的货位 // return OperateResult.Error(string.Format("在mongo(TN_AB_B_STOCK_AREA或TN_AB_STOCK_LOCATION表)中未查询到该货位信息!", entity.CN_S_LOCATION_CODE)); //} //if (areaModel.CN_C_IS_CONTROL_QTY.Equals("Y")) //{ // //货位存储状态:非空 // if (GetModel[0].CN_S_USE_STATE != Constants.Use_State_Empty) // { // return OperateResult.Error(string.Format("当前货位存储状态为{0},不允许继续放置托盘!", GetModel[0].CN_S_USE_STATE)); // } //} ////货位状态:正常 //if (GetModel[0].CN_S_LOCATION_STATE != Constants.Location_State_Normal) //{ // return OperateResult.Error(string.Format("当前货位状态为{0},不允许继续放置托盘!", GetModel[0].CN_S_LOCATION_STATE)); //} ////检查该托盘是否在(未执行或执行中的)任务中 //List lstInTask = CreateDAL().GetTaskByTray(entity.CN_S_TRAY_CODE); //if (lstInTask.Count > 0) //{ // return OperateResult.Error(string.Format("当前托盘已在搬运任务{0}中,不允许绑定未执行或执行中的任务!", lstInTask[0].CN_S_TASK_NO)); //} ////检查该托盘是否绑定了其他货位 //List lstEntity = CreateDAL().GetListByTrayCode(entity.CN_S_TRAY_CODE); //if (lstEntity.Count > 0) //{ // return OperateResult.Error(string.Format("当前托盘已绑定货位{0},不允许重复绑定!", lstEntity[0].CN_S_LOCATION_CODE)); //} //lstEntity = CreateDAL().GetListByLocationCode(entity.CN_S_LOCATION_CODE); //if (lstEntity.Count > 0) //{ // return OperateResult.Error(string.Format("当前货位已绑定托盘{0},不允许重复绑定!", lstEntity[0].CN_S_TRAY_CODE)); //} #endregion // string NewGuid = MST_NEW.CN_GUID; bool checkMstExist = false; entity.row.ForEach(e => { checkMstExist = false; //开始集合被组盘的料箱码 UniqueCode += "'" + e.CN_S_UNIQUE_CODE.Trim() + "'" + ","; var dtl = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = e.CN_S_UNIQUE_CODE }); //如果新增NEW一个GUID var mstGuid = Guid.NewGuid().ToString().ToUpper(); //调用AUTOBOM接口获取物料信息 AutoBomItemEntity itemenity = CreateDAL().GetItemEntity(e.CN_S_ITEM_CODE.ToString().Trim()); //判断目的托盘码+物料编码主编是否已经存在 var trayItemMstEntity = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = mstGuid, CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_TRAY_GRID = "1", CN_S_OWNER = "", CN_S_ITEM_CODE = e.CN_S_ITEM_CODE.Trim(), CN_S_ITEM_NAME = e.CN_S_ITEM_NAME.Trim(), CN_S_MODEL = itemenity.CN_S_MODEL, //CN_S_ITEM_STATE = string.IsNullOrEmpty(e.CN_S_ITEM_STATE.ToString()) ? Constants.ItemState_Qualified : e.CN_S_ITEM_STATE.ToString(), CN_S_ITEM_STATE = "合格", CN_F_QUANTITY = Convert.ToDecimal(e.CN_F_QUANTITY.ToString()), CN_S_MEASURE_UNIT = itemenity.CN_S_MEASURE_UNIT, CN_S_TIMESTAMP = (DateTime.Now - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1))).TotalMilliseconds.ToString(), CN_F_INQTY = Convert.ToDecimal(e.CN_F_QUANTITY.ToString()) }; //判断是否在数据库中已存在,存在的话,主表增加数据,不存在则增加一条数据 if (TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == e.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).Count() > 0) { // 内存中已存在主表数据(托盘号+物料编码) checkMstExist = true; } else { var result = CreateDAL().CheckExists(trayItemMstEntity); if (result.Any()) { // 数据库存在主表数据(托盘号+物料编码) checkMstExist = true; } else { // 数据库中不存在主表数据(托盘号+物料编码) checkMstExist = false; } } if (checkMstExist) { if (TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).Count() > 0) { var MST_NEW = TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).FirstOrDefault(); MST_NEW.CN_F_QUANTITY += e.CN_F_QUANTITY; dtl.WAIT_UPDATE_GUID = MST_NEW.CN_GUID; } else { var MST_NEW = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE, CN_S_ITEM_CODE = e.CN_S_ITEM_CODE }); MST_NEW.CN_F_QUANTITY += e.CN_F_QUANTITY; TrayItemMstlst_u.Add(MST_NEW); dtl.WAIT_UPDATE_GUID = MST_NEW.CN_GUID; } } else { if (TrayItemMstlst_a.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).Count() > 0) { var MST_NEW = TrayItemMstlst_a.Where(o => o.CN_S_TRAY_CODE == entity.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == e.CN_S_ITEM_CODE).FirstOrDefault(); MST_NEW.CN_F_QUANTITY += e.CN_F_QUANTITY; dtl.WAIT_UPDATE_GUID = MST_NEW.CN_GUID; } else { dtl.WAIT_UPDATE_GUID = mstGuid; TrayItemMstlst_a.Add(trayItemMstEntity); } } TrayItemDtllst_u.Add(dtl); //处理移出该料箱码的托盘数据 var mst = CreateDAL>().GetSingleEntity(new { CN_GUID = dtl.CN_PARENT_GUID }); if (TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == mst.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == mst.CN_S_ITEM_CODE).Count() > 0) { var MST_NEW = TrayItemMstlst_u.Where(o => o.CN_S_TRAY_CODE == mst.CN_S_TRAY_CODE && o.CN_S_ITEM_CODE == mst.CN_S_ITEM_CODE).FirstOrDefault(); if (MST_NEW.CN_F_QUANTITY > e.CN_F_QUANTITY) { MST_NEW.CN_F_QUANTITY = MST_NEW.CN_F_QUANTITY - e.CN_F_QUANTITY; } else { TrayItemMstlst_u.Remove(MST_NEW); TrayItemMstlst_d.Add(MST_NEW); } } else { if (mst.CN_F_QUANTITY > e.CN_F_QUANTITY) { mst.CN_F_QUANTITY = mst.CN_F_QUANTITY - e.CN_F_QUANTITY; TrayItemMstlst_u.Add(mst); } else { TrayItemMstlst_d.Add(mst); } TrayMstlst_All.Add(mst); } }); Log.Info("===>宇寿组盘主表更新记录:", JsonConvert.SerializeObject(TrayItemMstlst_a)); Log.Info("===>宇寿组盘主表更新记录:", JsonConvert.SerializeObject(TrayItemMstlst_u)); Log.Info("===>宇寿组盘主表删除记录:", JsonConvert.SerializeObject(TrayItemMstlst_d)); Log.Info("===>宇寿组盘明细更新记录:", JsonConvert.SerializeObject(TrayItemDtllst_u)); //Log.Info("===>库区量表更新信息记录:", JsonConvert.SerializeObject(addAreaQty)); //循环被组盘的托盘码应该置为空还是不满 List TrayInfoEntityList = new List(); if (TrayMstlst_All.Count > 0) { foreach (TN_WM_B_TRAY_ITEM_MSTEntity model in TrayMstlst_All) { ItemOnTrayEntity TrayInfoEntity = new ItemOnTrayEntity(); TrayInfoEntity.CN_S_TRAY_CODE = model.CN_S_TRAY_CODE; List UniqueList = this.GetTrayUniqueCode(model.CN_S_TRAY_CODE, UniqueCode); if (UniqueList.Count > 0) { TrayInfoEntity.CN_S_USE_STATE = "不满"; } else { TrayInfoEntity.CN_S_USE_STATE = "空"; } TrayInfoEntityList.Add(TrayInfoEntity); } } operateResult = UseTransaction(trans => { CreateDAL>().AddRange(TrayItemMstlst_a, trans); TrayItemDtllst_u.ForEach(e => { CreateDAL>().Update(new { CN_PARENT_GUID = e.WAIT_UPDATE_GUID }, new { CN_GUID = e.CN_GUID }, trans); }); TrayItemMstlst_u.ForEach(e => { CreateDAL>().Update(new { CN_F_QUANTITY = e.CN_F_QUANTITY }, new { CN_GUID = e.CN_GUID }, trans); }); TrayItemMstlst_d.ForEach(e => { CreateDAL>().Delete(new { CN_GUID = e.CN_GUID }, trans); }); TrayInfoEntityList.ForEach(e => { CreateDAL>().Update(new { CN_S_USE_STATE = e.CN_S_USE_STATE }, new { CN_S_TRAY_CODE = e.CN_S_TRAY_CODE }, trans); }); if (!string.IsNullOrEmpty(entity.CN_S_USE_STATE)) { CreateDAL>().Update(new { CN_S_USE_STATE = entity.CN_S_USE_STATE }, new { CN_S_TRAY_CODE = entity.CN_S_TRAY_CODE }, trans); } }); if (!operateResult.Success) { return operateResult; } else { TN_WM_B_TRAY_LOCATIONBLL bll = new TN_WM_B_TRAY_LOCATIONBLL(); operateResult = bll.AddTrayLocationRelationYS(entity.CN_S_TRAY_CODE, entity.CN_S_LOCATION_CODE, "", userEntity, "ys001"); if (!operateResult.Success) { operateResult = OperateResult.Error("组盘成功,货位绑定失败!原因为:" + operateResult.Msg); } return operateResult; } } #endregion } }