using HH.Redis.ReisModel; using HH.TOOLS.LOG; using HH.WMS.Common; using HH.WMS.DAL; using HH.WMS.DAL.Basic; using HH.WMS.DAL.Check; using HH.WMS.DAL.InStock; using HH.WMS.Entitys; using HH.WMS.Entitys.Basic; using HH.WMS.Entitys.Check; using HH.WMS.Entitys.Entitys; using HH.WMS.Entitys.Enums; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HH.WMS.BLL.Check { /// /// 盘点单管理 无锡宇寿 /// public class TN_WM_CHECK_WXYSBLL : DapperBaseBLL { #region GET public OperateResult GetCheckDtl(string opNo) { var checkDtls = BLLCreator.Create>().GetList(new { CN_S_OP_NO = opNo }); foreach (var checkDtl in checkDtls) { // var item = CreateDAL().GetItemEntity(checkDtl.CN_S_ITEM_CODE); // checkDtl.CN_F_QUANTITY = (item.CN_F_NW == 0 ? 0 : Math.Round(checkDtl.CN_F_WEIGHT / item.CN_F_NW, 2));// Math.Round(checkDtl.CN_F_WEIGHT / item.CN_F_NW, 2); checkDtl.CN_S_AREA_NAME = GetAreaName(checkDtl.CN_S_STOCK_AREA); } return OperateResult.Succeed("", checkDtls); } public DataTable GetCheckList(dynamic obj) { DataTable dt = CreateDAL().GetCheckList(obj); dt.Columns.Add("CN_S_STOCK_NAME"); dt.Columns.Add("CN_S_AREA_NAME"); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { dt.Rows[i]["CN_S_STOCK_NAME"] = GetStockName(dt.Rows[i]["CN_S_STOCK_CODE"].ToString().Trim()); dt.Rows[i]["CN_S_AREA_NAME"] = GetAreaName(dt.Rows[i]["CN_S_STOCK_AREA"].ToString().Trim()); } } return dt; } public OperateResult GetCheckListByOpNo(string opNo) { var checkLists = CreateDAL>().GetList(new { CN_S_OP_NO = opNo }); var temp = checkLists.Select(e => new { CN_S_LOCATION_CODE = e.CN_S_LOCATION_CODE, CN_S_STOCK_CODE = e.CN_S_STOCK_CODE, CN_S_STOCK_AREA = e.CN_S_STOCK_AREA, CN_S_TRAY_CODE = e.CN_S_TRAY_CODE, CN_S_STOCK_NAME = GetStockName(e.CN_S_STOCK_CODE), CN_S_AREA_NAME = GetAreaName(e.CN_S_STOCK_AREA) }).Distinct().ToList(); return OperateResult.Succeed("", temp); } public OperateResult GetMstAndDtl(string opNo) { var checkMst = CreateDAL>().GetSingleEntity(new { CN_S_OP_NO = opNo }); if (checkMst == null) { return OperateResult.Error("未找到当前" + opNo + "盘点业务"); } checkMst.CN_S_STOCK_NAME = GetStockName(checkMst.CN_S_STOCK_CODE); var checkDtls = CreateDAL>().GetList(new { CN_S_OP_NO = opNo }); foreach (var checkDtl in checkDtls) { var item = CreateDAL().GetItemEntity(checkDtl.CN_S_ITEM_CODE); checkDtl.CN_F_QUANTITY = (item.CN_F_NW == 0 ? 0 : Math.Round(checkDtl.CN_F_WEIGHT / item.CN_F_NW, 2)); checkDtl.CN_S_AREA_NAME = GetAreaName(checkDtl.CN_S_STOCK_AREA); } checkMst.dtls = checkDtls; return OperateResult.Succeed("", checkMst); } #endregion #region ADD /// /// 新增盘点单 /// /// /// /// public OperateResult Add(List checkListDtos, RedisUserEntity loginer, LogPara logPara) { var checkLists = new List(); foreach (var checkListDto in checkListDtos) { var checkList = CreateDAL>().GetList(new { CN_S_STOCK_CODE = checkListDto.CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkListDto.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkListDto.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkListDto.CN_S_TRAY_CODE }); checkLists.AddRange(checkList); } var checkListsStr = JsonConvert.SerializeObject(checkLists); var checkMst = new TN_WM_CHECK_MSTEntity(); var checkDtls = new List(); string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.CheckCode + "\",\"orgId\":\"" + loginer.CN_S_ORGCODE + "\",\"orgFlag\":\"" + loginer.CN_S_ORGFLAG + "\"}"; var opNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); if (string.IsNullOrEmpty(opNo)) { return OperateResult.Error("未获取到autobom中盘点单号!"); } checkMst.CN_S_OP_NO = opNo; checkMst.CN_S_STOCK_CODE = checkLists.FirstOrDefault().CN_S_STOCK_CODE; checkMst.CN_T_OP_TIME = DateTime.Now; checkMst.CN_S_STATE = BillStateEnum.Create.GetDescription(); checkMst.CN_S_CREATOR = loginer.CN_S_LOGIN; checkMst.CN_S_CREATOR_BY = loginer.CN_S_NAME; checkMst.CN_T_CREATE = DateTime.Now; checkMst.CN_S_OPERATOER = checkLists.FirstOrDefault().CN_S_CREATOR; checkMst.CN_S_OPERATOER_NAME = checkLists.FirstOrDefault().CN_S_CREATOR_BY; var result = CreateCheckDtls(opNo, checkLists, checkDtls); if (!result.Success) return result; result = UseTransaction(trans => { var backResult = CreateDAL>().Add(checkMst, trans); logPara.Push("新增盘点单主表结果:" + (backResult.Success ? "成功" : "失败")); if (!backResult.Success) { trans.Rollback(); return; } backResult = CreateDAL>().AddRange(checkDtls, trans); logPara.Push("新增盘点单子表结果:" + (backResult.Success ? "成功" : "失败")); if (!backResult.Success) { trans.Rollback(); return; } //更新checklist的业务号 foreach (var checkList in checkLists) { CreateDAL>().Update(new { CN_S_OP_NO = opNo }, new { CN_S_STOCK_CODE = checkList.CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE }); } }); return result; } /// /// /// /// /// /// /// public OperateResult CreateCheckDtls(string opNo, List checkLists, List checkDtls) { var rowNo = 0; checkLists = checkLists.OrderBy(o => o.CN_S_CHECK_RESULT).ThenBy(o => o.CN_S_TRAY_CODE).ToList(); foreach (var checkList in checkLists) { rowNo = rowNo + 1; var checkDtl = new TN_WM_CHECK_DTLEntity(); var afterState = "盘点后"; #region 删除、新增、修改后、正确 var checkStateEnum = EnumExtensions.GetEnumByName(checkList.CN_S_CHECK_RESULT); if (checkStateEnum.Equals(CheckStateEnum.ERROR)) return OperateResult.Error("盘点状态" + checkList.CN_S_CHECK_RESULT + "存在异常!"); afterState = checkStateEnum.GetDescription(); checkDtl = new TN_WM_CHECK_DTLEntity { CN_S_OP_NO = opNo, CN_N_ROW_NO = rowNo, CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE, CN_S_ITEM_CODE = checkList.CN_S_ITEM_CODE, CN_S_ITEM_NAME = checkList.CN_S_ITEM_NAME, CN_S_ITEM_STATE = checkList.CN_S_ITEM_STATE, CN_S_OWNER = checkList.CN_S_OWNER, CN_S_LOT_NO = checkList.CN_S_LOT_NO, CN_S_MODEL = checkList.CN_S_MODEL, CN_S_FIGURE_NO = checkList.CN_S_FIGURE_NO, CN_S_MEASURE_UNIT = checkList.CN_S_MEASURE_UNIT, CN_F_QUANTITY = checkList.CN_F_QUANTITY, CN_S_PACK_CODE = checkList.CN_S_PACK_CODE, CN_S_TYPE = afterState, CN_F_WEIGHT = checkList.CN_F_WEIGHT, CN_F_PACKING_QTY = checkList.CN_F_PACKING_QTY, CN_S_CHECK_RESULT = checkList.CN_S_CHECK_RESULT }; checkDtls.Add(checkDtl); #endregion #region 修改前 if (checkList.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString())) { var trayItemDtl = BLLCreator.Create>().GetSingleEntity(new { // CN_PARENT_GUID = trayItemMst.CN_GUID, CN_S_UNIQUE_CODE = checkList.CN_S_PACK_CODE }); if (trayItemDtl == null) { return OperateResult.Error("未找到当前托盘" + checkList.CN_S_TRAY_CODE + "下料箱:" + checkList.CN_S_PACK_CODE + "的物料信息!"); } var trayItemMst = BLLCreator.Create>().GetSingleEntity(new { CN_GUID = trayItemDtl.CN_PARENT_GUID, CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE }); if (trayItemMst == null) { return OperateResult.Error("未找到托盘:" + checkList.CN_S_TRAY_CODE + "的物料托盘数据!"); } checkDtl = new TN_WM_CHECK_DTLEntity { CN_S_OP_NO = opNo, CN_N_ROW_NO = rowNo, CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE, CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME, CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE, CN_S_OWNER = checkList.CN_S_OWNER, CN_S_LOT_NO = trayItemDtl.CN_S_LOT_NO, CN_S_MODEL = trayItemMst.CN_S_MODEL, CN_S_FIGURE_NO = trayItemDtl.CN_S_EXT1, CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT, CN_F_QUANTITY = trayItemDtl.CN_F_QUANTITY, CN_S_PACK_CODE = checkList.CN_S_PACK_CODE, CN_S_TYPE = CheckStateEnum.EB.GetDescription(), CN_S_CHECK_RESULT = CheckStateEnum.EB.ToString(), CN_F_WEIGHT = Convert.ToDecimal(trayItemDtl.CN_S_SERIAL_NO), CN_F_PACKING_QTY = Convert.ToDecimal(trayItemDtl.CN_F_PACKING_QTY) }; checkDtls.Add(checkDtl); } #endregion } return OperateResult.Succeed(); } #endregion #region UPDATE public OperateResult Update(CheckAddDto checkAddDto, RedisUserEntity loginer) { var checkListDtos = checkAddDto.checkList; var checkLists = new List(); foreach (var checkListDto in checkListDtos) { var checkList = CreateDAL>().GetList(new { CN_S_STOCK_CODE = checkListDto.CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkListDto.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkListDto.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkListDto.CN_S_TRAY_CODE }); checkLists.AddRange(checkList); } var checkListsStr = JsonConvert.SerializeObject(checkLists); var checkMst = new TN_WM_CHECK_MSTEntity(); var checkDtls = new List(); checkMst.CN_S_OP_NO = checkAddDto.opNo; checkMst.CN_S_STOCK_CODE = checkLists.FirstOrDefault().CN_S_STOCK_CODE; checkMst.CN_T_OP_TIME = DateTime.Now; checkMst.CN_S_STATE = BillStateEnum.Create.GetDescription(); checkMst.CN_S_CREATOR = loginer.CN_S_LOGIN; checkMst.CN_S_CREATOR_BY = loginer.CN_S_NAME; checkMst.CN_T_CREATE = DateTime.Now; checkMst.CN_S_OPERATOER = checkLists.FirstOrDefault().CN_S_CREATOR; checkMst.CN_S_OPERATOER_NAME = checkLists.FirstOrDefault().CN_S_CREATOR_BY; var result = CreateCheckDtls(checkAddDto.opNo, checkLists, checkDtls); if (!result.Success) return result; result = UseTransaction(trans => { CreateDAL>().Delete(new { CN_S_OP_NO = checkAddDto.opNo }); CreateDAL>().Delete(new { CN_S_OP_NO = checkAddDto.opNo }); CreateDAL().UpdateCheckListOpNo(checkAddDto.opNo, "", trans); var backResult = CreateDAL>().Add(checkMst, trans); if (!backResult.Success) { trans.Rollback(); return; } backResult = CreateDAL>().AddRange(checkDtls, trans); if (!backResult.Success) { trans.Rollback(); return; } //更新checklist的业务号 foreach (var checkList in checkLists) { CreateDAL>().Update(new { CN_S_OP_NO = checkAddDto.opNo }, new { CN_S_STOCK_CODE = checkList.CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE }, trans); } }); return result; } public OperateResult Submit(CheckAuditDto checkAuditDto) { var checkMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = checkAuditDto.opNo }); if (checkMst == null) { return OperateResult.Error("未找到当前盘点单" + checkAuditDto.opNo); } var result = CreateDAL>().Update(new { CN_S_STATE = BillStateEnum.Submit.GetDescription(), CN_S_NOTE = checkAuditDto.note, CN_S_CURR_ORG_CODE = checkAuditDto.checkAuditOrgDto.currentOrgCode, CN_S_CURR_ORG_NAME = checkAuditDto.checkAuditOrgDto.currentOrgName, CN_S_NEXT_ORG_CODE = checkAuditDto.checkAuditOrgDto.nextOrgCode, CN_S_NEXT_ORG_NAME = checkAuditDto.checkAuditOrgDto.nextOrgName, }, new { CN_S_OP_NO = checkAuditDto.opNo }); return result; } /// /// 审核 /// /// /// public OperateResult Audit(CheckAuditPara checkAuditPara, LogPara logPara) { logPara.Push("接收参数:" + JsonConvert.SerializeObject(checkAuditPara.checkAuditDto)); checkAuditPara.state = BillStateEnum.Auditing.GetDescription(); checkAuditPara.isEnd = false; if (string.IsNullOrEmpty(checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgCode)) checkAuditPara.state = BillStateEnum.Audit.GetDescription(); checkAuditPara.checkMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }); if (checkAuditPara.checkMst == null) { return OperateResult.Error("未找到当前盘点单" + checkAuditPara.checkAuditDto.opNo); } //最终审核结束,释放货位 if (string.IsNullOrEmpty(checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgCode)) { var reuslt = AuditHandleParam(checkAuditPara, logPara); if (!reuslt.Success) return reuslt; logPara.Push("接收参数checkAuditPara:" + JsonConvert.SerializeObject(checkAuditPara)); AuditReduceQty(checkAuditPara, logPara); } #region 逻辑处理 //1、针对已经在货位上的料箱,需要在绑定之前,把先前的绑定给解绑,避免造成同一个料箱在不同货位上的情况 //2、新增时需要判断是否主表已存在,如果存在则累加数量,不存在的话,新增主表 List mstDeleteList = new List(); List dtlDeleteList = new List(); List mstAddList = new List(); List dtlAddList = new List(); List mstModAddQtyList = new List(); List mstModReduceQtyList = new List(); List trayLocationDeleteList = new List(); if (checkAuditPara.isEnd) { foreach (var checkDtl in checkAuditPara.checkMst.dtls) { if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.A.ToString())) //增加 { #region 是否位于其他货位 TN_WM_B_TRAY_ITEM_DTLEntity dtlDelete = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE }); if (dtlDelete != null) { TN_WM_B_TRAY_ITEM_MSTEntity mstDelete = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlDelete.CN_PARENT_GUID }); if (mstDelete != null) { TN_WM_B_TRAY_LOCATIONEntity traylocationDelete = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = mstDelete.CN_S_TRAY_CODE }); if (traylocationDelete != null) { dtlDeleteList.Add(dtlDelete); List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = mstDelete.CN_GUID }); var exi = dtlExistList.Where(x => x.CN_GUID != dtlDelete.CN_GUID); if (!exi.Any())//说明子表中只有一条,所以需要删除主表 { //主表能删的情况下,托盘货位关联才能解绑 trayLocationDeleteList.Add(traylocationDelete); mstDeleteList.Add(mstDelete); } } } } #endregion #region 主表新增或修改 var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = Guid.NewGuid().ToString(), CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE, CN_S_TRAY_GRID = "1", CN_S_OWNER = checkDtl.CN_S_OWNER, CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE, CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME, CN_S_FIGURE_NO = "",//checkDtl.CN_S_FIGURE_NO, CN_S_MODEL = checkDtl.CN_S_MODEL, CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE, CN_F_QUANTITY = 1, CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT }; List dtlList = new List(); dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity { CN_GUID = Guid.NewGuid().ToString(), CN_PARENT_GUID = trayItemMstExist.CN_GUID, CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE, CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, CN_F_QUANTITY = checkDtl.CN_F_QUANTITY, CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY, CN_T_PRODUCTION = DateTime.Now, CN_T_EXPIRATION = DateTime.Now, CN_S_NOTE = "盘点新增", CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, CN_T_CREATE = DateTime.Now, CN_T_MODIFY = DateTime.Now, CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(), CN_S_EXT1 = checkDtl.CN_S_FIGURE_NO, CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY }); trayItemMstExist.TrayItemDtlList = dtlList; var resultExist = CreateDAL().CheckExists(trayItemMstExist); if (resultExist.Count > 1) { logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist)); } //当后台查到有主表存在数据的时候,主表修改数量,字表新增 if (resultExist.Any()) { trayItemMstExist.CN_GUID = resultExist[0].CN_GUID; foreach (var item in trayItemMstExist.TrayItemDtlList) { item.CN_PARENT_GUID = trayItemMstExist.CN_GUID; } mstModAddQtyList.Add(trayItemMstExist); } else { mstAddList.Add(trayItemMstExist); //添加上架记录 checkAuditPara.upHis.Add(new TN_WM_UP_HISTORYEntity { CN_GUID = Guid.NewGuid().ToString(), CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE, CN_S_ITEM_STATE = trayItemMstExist.CN_S_ITEM_STATE, CN_S_TRAY_CODE = trayItemMstExist.CN_S_TRAY_CODE, CN_S_TRAY_GRID = trayItemMstExist.CN_S_TRAY_GRID == null ? "" : trayItemMstExist.CN_S_TRAY_GRID, CN_S_ITEM_CODE = trayItemMstExist.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMstExist.CN_S_ITEM_NAME, CN_S_PRODUCTION_BATCH = trayItemMstExist.CN_S_LOT_NO, CN_F_QUANTITY = checkDtl.CN_F_WEIGHT, CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY, CN_S_MODEL = trayItemMstExist.CN_S_MODEL, CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA, CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE, CN_T_CREATE = DateTime.Now, CN_T_MODIFY = DateTime.Now, CN_S_OWNER = "", CN_S_MEASURE_UNIT = trayItemMstExist.CN_S_MEASURE_UNIT, CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY, CN_S_MODIFY = "", CN_S_MODIFY_BY = "", CN_S_OP_FROM = "盘点审核-新增", CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE, CN_S_EXT2 = "其他入库", CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO }); } dtlAddList.AddRange(dtlList); #endregion } } foreach (var checkDtl in checkAuditPara.checkMst.dtls) { if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.D.ToString()))//删除 { #region 判断主表是否需要删除 var trayItemMst = checkDtl.trayItemMst; List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID }); if (dtlExistList.Count == 1) { mstDeleteList.Add(trayItemMst); dtlDeleteList.Add(dtlExistList[0]); } if (dtlExistList.Count > 1) { var findDtl = dtlExistList.Where(x => x.CN_S_UNIQUE_CODE == checkDtl.CN_S_PACK_CODE).ToList(); dtlDeleteList.AddRange(findDtl); var findMst = CreateDAL>().GetSingleEntity(new { CN_GUID = findDtl[0].CN_PARENT_GUID }); mstModReduceQtyList.Add(findMst); } //添加下架记录 checkAuditPara.downHis.Add(new TN_WM_DOWN_HISTORYEntity { CN_GUID = Guid.NewGuid().ToString(), CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE, CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE, CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE, CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID == null ? "" : trayItemMst.CN_S_TRAY_GRID, CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME, CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO, CN_F_QUANTITY = checkDtl.CN_F_WEIGHT, CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY, CN_S_MODEL = trayItemMst.CN_S_MODEL, CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA, CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE, CN_T_CREATE = DateTime.Now, CN_T_MODIFY = DateTime.Now, CN_S_OWNER = "", CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT, CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY, CN_S_MODIFY = "", CN_S_MODIFY_BY = "", CN_S_OP_FROM = "盘点审核-删除", CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE, CN_S_EXT2 = "其他出库", CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO }); #endregion } } foreach (var checkDtl in checkAuditPara.checkMst.dtls) { if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))//修改后 { #region 原数据删除,新增修改后的数据 TN_WM_B_TRAY_ITEM_DTLEntity dtlMod = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE }); TN_WM_B_TRAY_ITEM_MSTEntity mstMod = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlMod.CN_PARENT_GUID }); var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity { CN_GUID = System.Guid.NewGuid().ToString().ToUpper(), CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE, CN_S_TRAY_GRID = "1", CN_S_OWNER = checkDtl.CN_S_OWNER, CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE, CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME, CN_S_FIGURE_NO = "",//checkDtl.CN_S_FIGURE_NO, CN_S_MODEL = checkDtl.CN_S_MODEL, CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE, CN_F_QUANTITY = 1, CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT }; List dtlList = new List(); dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity { CN_GUID = Guid.NewGuid().ToString(), CN_PARENT_GUID = trayItemMstExist.CN_GUID, CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE, CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, CN_F_QUANTITY = checkDtl.CN_F_QUANTITY, CN_F_PACKING_QTY = checkDtl.CN_F_PACKING_QTY, CN_T_PRODUCTION = DateTime.Now, CN_T_EXPIRATION = DateTime.Now, CN_S_NOTE = "盘点新增", CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, CN_T_CREATE = DateTime.Now, CN_T_MODIFY = DateTime.Now, CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(), CN_S_EXT1 = checkDtl.CN_S_FIGURE_NO, CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY }); //主表判断是直接删除,还是减主表的数量 if (mstMod.CN_F_QUANTITY > 1) { mstModReduceQtyList.Add(mstMod); } else { mstDeleteList.Add(mstMod); } var resultExist = CreateDAL().CheckExistMsts(trayItemMstExist, checkDtl.CN_S_PACK_CODE); if (resultExist.Count > 1) { logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist)); return OperateResult.Error("此处有异常,根据条件获取到多条主表信息!"); } if (resultExist.Count == 1) { var haveExist = mstDeleteList.Where(x => x.CN_GUID == resultExist[0].CN_GUID); if (haveExist == null) { trayItemMstExist.CN_GUID = resultExist[0].CN_GUID; foreach (var item in dtlList) { item.CN_PARENT_GUID = trayItemMstExist.CN_GUID; } mstModAddQtyList.Add(trayItemMstExist); } else { mstAddList.Add(trayItemMstExist); } } if (resultExist.Count == 0) { mstAddList.Add(trayItemMstExist); } //子表:直接先删后增 dtlAddList.AddRange(dtlList); dtlDeleteList.Add(dtlMod); #endregion } } } if (checkAuditPara.isEnd) { #region 旧代码已注释 //foreach (var checkDtl in checkAuditPara.checkMst.dtls) //{ // if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.A.ToString())) //增加 // { // #region 是否位于其他货位 // TN_WM_B_TRAY_ITEM_DTLEntity dtlDelete = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE }); // if (dtlDelete != null) // { // TN_WM_B_TRAY_ITEM_MSTEntity mstDelete = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlDelete.CN_PARENT_GUID }); // if (mstDelete != null) // { // TN_WM_B_TRAY_LOCATIONEntity traylocationDelete = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = mstDelete.CN_S_TRAY_CODE }); // if (traylocationDelete != null) // { // trayLocationDeleteList.Add(traylocationDelete); // dtlDeleteList.Add(dtlDelete); // List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = mstDelete.CN_GUID }); // var exi = dtlExistList.Where(x => x.CN_GUID != dtlDelete.CN_GUID); // if (!exi.Any()) // { // mstDeleteList.Add(mstDelete); // } // } // } // } // #endregion // #region 主表新增或修改 // var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity // { // CN_GUID = Guid.NewGuid().ToString(), // CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE, // CN_S_TRAY_GRID = "1", // CN_S_OWNER = checkDtl.CN_S_OWNER, // CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE, // CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME, // CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO, // CN_S_MODEL = checkDtl.CN_S_MODEL, // CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE, // CN_F_QUANTITY = 1, // CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT // }; // List dtlList = new List(); // dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity // { // CN_GUID = Guid.NewGuid().ToString(), // CN_PARENT_GUID = trayItemMstExist.CN_GUID, // CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE, // CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, // CN_F_QUANTITY = checkDtl.CN_F_QUANTITY, // CN_T_PRODUCTION = DateTime.Now, // CN_T_EXPIRATION = DateTime.Now, // CN_S_NOTE = "盘点新增", // CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, // CN_T_CREATE = DateTime.Now, // CN_T_MODIFY = DateTime.Now, // CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(), // CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY // }); // trayItemMstExist.TrayItemDtlList = dtlList; // var resultExist = CreateDAL().CheckExists(trayItemMstExist); // if (resultExist.Count > 1) // { // logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist)); // } // if (resultExist.Any()) // { // trayItemMstExist.CN_GUID = resultExist[0].CN_GUID; // trayItemMstExist.CN_F_QUANTITY = resultExist[0].CN_F_QUANTITY + 1; // foreach (var item in trayItemMstExist.TrayItemDtlList) // { // item.CN_PARENT_GUID = trayItemMstExist.CN_GUID; // } // mstModList.Add(trayItemMstExist); // } // else // { // mstAddList.Add(trayItemMstExist); // //添加上架记录 // checkAuditPara.upHis.Add(new TN_WM_UP_HISTORYEntity // { // CN_GUID = Guid.NewGuid().ToString(), // CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE, // CN_S_ITEM_STATE = trayItemMstExist.CN_S_ITEM_STATE, // CN_S_TRAY_CODE = trayItemMstExist.CN_S_TRAY_CODE, // CN_S_TRAY_GRID = trayItemMstExist.CN_S_TRAY_GRID == null ? "" : trayItemMstExist.CN_S_TRAY_GRID, // CN_S_ITEM_CODE = trayItemMstExist.CN_S_ITEM_CODE, // CN_S_ITEM_NAME = trayItemMstExist.CN_S_ITEM_NAME, // CN_S_PRODUCTION_BATCH = trayItemMstExist.CN_S_LOT_NO, // CN_F_QUANTITY = checkDtl.CN_F_WEIGHT, // CN_S_MODEL = trayItemMstExist.CN_S_MODEL, // CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA, // CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE, // CN_T_CREATE = DateTime.Now, // CN_T_MODIFY = DateTime.Now, // CN_S_OWNER = "", // CN_S_MEASURE_UNIT = trayItemMstExist.CN_S_MEASURE_UNIT, // CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, // CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY, // CN_S_MODIFY = "", // CN_S_MODIFY_BY = "", // CN_S_OP_FROM = "盘点审核-新增", // CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE, // CN_S_EXT2 = "其他入库", // CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, // CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO // }); // } // #endregion // } // if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))//修改后 // { // #region 主表新增或修改 // var trayItemMstExist = new TN_WM_B_TRAY_ITEM_MSTEntity // { // CN_GUID = Guid.NewGuid().ToString(), // CN_S_TRAY_CODE = checkDtl.CN_S_TRAY_CODE, // CN_S_TRAY_GRID = "1", // CN_S_OWNER = checkDtl.CN_S_OWNER, // CN_S_ITEM_CODE = checkDtl.CN_S_ITEM_CODE, // CN_S_ITEM_NAME = checkDtl.CN_S_ITEM_NAME, // CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO, // CN_S_MODEL = checkDtl.CN_S_MODEL, // CN_S_ITEM_STATE = "合格",//CN_S_ITEM_STATE = checkDtl.CN_S_ITEM_STATE, // CN_F_QUANTITY = 1, // CN_S_MEASURE_UNIT = checkDtl.CN_S_MEASURE_UNIT // }; // List dtlList = new List(); // dtlList.Add(new TN_WM_B_TRAY_ITEM_DTLEntity // { // CN_GUID = Guid.NewGuid().ToString(), // CN_PARENT_GUID = trayItemMstExist.CN_GUID, // CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE, // CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, // CN_F_QUANTITY = checkDtl.CN_F_QUANTITY, // CN_T_PRODUCTION = DateTime.Now, // CN_T_EXPIRATION = DateTime.Now, // CN_S_NOTE = "盘点新增", // CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, // CN_T_CREATE = DateTime.Now, // CN_T_MODIFY = DateTime.Now, // CN_S_SERIAL_NO = checkDtl.CN_F_WEIGHT.ToString(), // CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY // }); // trayItemMstExist.TrayItemDtlList = dtlList; // var resultExist = CreateDAL().CheckExists(trayItemMstExist); // if (resultExist.Count > 1) // { // logPara.Push("此处有异常,根据条件获取到多条主表信息,Json条件:" + JsonConvert.SerializeObject(trayItemMstExist)); // } // if (resultExist.Any()) // { // trayItemMstExist.CN_GUID = resultExist[0].CN_GUID; // //trayItemMstExist.CN_F_QUANTITY = resultExist[0].CN_F_QUANTITY + 1; // foreach (var item in trayItemMstExist.TrayItemDtlList) // { // item.CN_PARENT_GUID = trayItemMstExist.CN_GUID; // } // //mstModList.Add(trayItemMstExist); // //mstDeleteList.Add(trayItemMstExist); // } // //else // //{ // mstAddList.Add(trayItemMstExist); // //添加上架记录 // //checkAuditPara.upHis.Add(new TN_WM_UP_HISTORYEntity // //{ // // CN_GUID = Guid.NewGuid().ToString(), // // CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE, // // CN_S_ITEM_STATE = trayItemMstExist.CN_S_ITEM_STATE, // // CN_S_TRAY_CODE = trayItemMstExist.CN_S_TRAY_CODE, // // CN_S_TRAY_GRID = trayItemMstExist.CN_S_TRAY_GRID == null ? "" : trayItemMstExist.CN_S_TRAY_GRID, // // CN_S_ITEM_CODE = trayItemMstExist.CN_S_ITEM_CODE, // // CN_S_ITEM_NAME = trayItemMstExist.CN_S_ITEM_NAME, // // CN_S_PRODUCTION_BATCH = trayItemMstExist.CN_S_LOT_NO, // // CN_F_QUANTITY = checkDtl.CN_F_WEIGHT, // // CN_S_MODEL = trayItemMstExist.CN_S_MODEL, // // CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA, // // CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE, // // CN_T_CREATE = DateTime.Now, // // CN_T_MODIFY = DateTime.Now, // // CN_S_OWNER = "", // // CN_S_MEASURE_UNIT = trayItemMstExist.CN_S_MEASURE_UNIT, // // CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, // // CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY, // // CN_S_MODIFY = "", // // CN_S_MODIFY_BY = "", // // CN_S_OP_FROM = "盘点审核-新增", // // CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE, // // CN_S_EXT2 = "其他入库", // // CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, // // CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO // //}); // // } // #endregion // } // if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.D.ToString()))//删除 // { // #region 判断主表是否需要删除 // var trayItemMst = checkDtl.trayItemMst; // List dtlExistList = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMst.CN_GUID }); // if (dtlExistList.Count == 1) // { // mstDeleteList.Add(trayItemMst); // dtlDeleteList.Add(dtlExistList[0]); // } // if (dtlExistList.Count > 1) // { // var findDtl = dtlExistList.Where(x => x.CN_S_UNIQUE_CODE == checkDtl.CN_S_PACK_CODE); // dtlDeleteList.AddRange(findDtl); // } // //添加下架记录 // checkAuditPara.downHis.Add(new TN_WM_DOWN_HISTORYEntity // { // CN_GUID = Guid.NewGuid().ToString(), // CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE, // CN_S_ITEM_STATE = trayItemMst.CN_S_ITEM_STATE, // CN_S_TRAY_CODE = trayItemMst.CN_S_TRAY_CODE, // CN_S_TRAY_GRID = trayItemMst.CN_S_TRAY_GRID == null ? "" : trayItemMst.CN_S_TRAY_GRID, // CN_S_ITEM_CODE = trayItemMst.CN_S_ITEM_CODE, // CN_S_ITEM_NAME = trayItemMst.CN_S_ITEM_NAME, // CN_S_PRODUCTION_BATCH = trayItemMst.CN_S_LOT_NO, // CN_F_QUANTITY = checkDtl.CN_F_WEIGHT, // CN_S_MODEL = trayItemMst.CN_S_MODEL, // CN_S_STOCK_AREA = checkDtl.CN_S_STOCK_AREA, // CN_S_STOCK_CODE = checkAuditPara.checkMst.CN_S_STOCK_CODE, // CN_T_CREATE = DateTime.Now, // CN_T_MODIFY = DateTime.Now, // CN_S_OWNER = "", // CN_S_MEASURE_UNIT = trayItemMst.CN_S_MEASURE_UNIT, // CN_S_CREATOR = checkAuditPara.checkMst.CN_S_CREATOR, // CN_S_CREATOR_BY = checkAuditPara.checkMst.CN_S_CREATOR_BY, // CN_S_MODIFY = "", // CN_S_MODIFY_BY = "", // CN_S_OP_FROM = "盘点审核-删除", // CN_S_EXT1 = checkDtl.CN_S_PACK_CODE,//trayItemMst.CN_S_UNIQUE_CODE, // CN_S_EXT2 = "其它出库", // CN_S_LOT_NO = checkDtl.CN_S_LOT_NO, // CN_S_FIGURE_NO = checkDtl.CN_S_FIGURE_NO // }); // #endregion // } // if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.EB.ToString()))//修改前 // { // TN_WM_B_TRAY_ITEM_DTLEntity dtlDelete = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = checkDtl.CN_S_PACK_CODE }); // TN_WM_B_TRAY_ITEM_MSTEntity mstDelete = CreateDAL>().GetSingleEntity(new { CN_GUID = dtlDelete.CN_PARENT_GUID }); // dtlDeleteList.Add(dtlDelete); // mstDeleteList.Add(mstDelete); // } //} #endregion } #endregion logPara.Push("删除料箱已绑定托盘mst:" + JsonConvert.SerializeObject(mstDeleteList)); logPara.Push("删除料箱已绑定托盘dtl:" + JsonConvert.SerializeObject(dtlDeleteList)); logPara.Push("新增托盘mst:" + JsonConvert.SerializeObject(mstAddList)); logPara.Push("新增托盘dtl:" + JsonConvert.SerializeObject(dtlAddList)); logPara.Push("修改托盘mst增:" + JsonConvert.SerializeObject(mstModAddQtyList)); logPara.Push("修改托盘mst减:" + JsonConvert.SerializeObject(mstModReduceQtyList)); #region 执行事务 var result = UseTransaction(trans => { logPara.Push("更新盘点单状态为:" + checkAuditPara.state); CreateDAL>().Update(new { CN_S_STATE = checkAuditPara.state, CN_S_AUDIT_CONTENT = "审核通过!" + checkAuditPara.checkAuditDto.auditContent, CN_S_CURR_ORG_CODE = checkAuditPara.checkAuditDto.checkAuditOrgDto.currentOrgCode, CN_S_CURR_ORG_NAME = checkAuditPara.checkAuditDto.checkAuditOrgDto.currentOrgName, CN_S_NEXT_ORG_CODE = checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgCode, CN_S_NEXT_ORG_NAME = checkAuditPara.checkAuditDto.checkAuditOrgDto.nextOrgName, }, new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }, trans); #region 最终审核 if (checkAuditPara.isEnd) { logPara.Push("降低仓库库存:" + JsonConvert.SerializeObject(checkAuditPara.stockQtys)); //降低仓库库存 CreateDAL().ReduceStockQty(checkAuditPara.stockQtys, trans); //降低库区库存 CreateDAL().ReduceAreaQty(checkAuditPara.areaQtys, trans); foreach (var item in trayLocationDeleteList) { //删除托盘货位关联 CreateDAL>().Delete(new { CN_S_TRAY_CODE = item.CN_S_TRAY_CODE, CN_S_LOCATION_CODE = item.CN_S_LOCATION_CODE }, trans); CreateDAL>().Update(new { CN_S_LOCATION_STATE = "正常", CN_S_USE_STATE = "空" }, new { CN_S_LOCATION_CODE = item.CN_S_LOCATION_CODE }, trans); } foreach (var mstEntity in mstDeleteList) { //删除前主表 CreateDAL>().Delete(new { CN_GUID = mstEntity.CN_GUID }, trans); } foreach (var dtlEntity in dtlDeleteList) { //删除前子表 CreateDAL>().Delete(new { CN_PARENT_GUID = dtlEntity.CN_PARENT_GUID, CN_S_UNIQUE_CODE = dtlEntity.CN_S_UNIQUE_CODE }, trans); } //新增主表 foreach (var item in mstAddList) { CreateDAL>().Add(item, trans); } //新增子表 foreach (var item in dtlAddList) { CreateDAL>().Add(item, trans); } //修改数量增 foreach (var item in mstModAddQtyList) { CreateDAL>().Update(new { CN_F_QUANTITY = item.CN_F_QUANTITY + 1 }, new { CN_GUID = item.CN_GUID }, trans); } //修改数量减 foreach (var item in mstModReduceQtyList) { CreateDAL>().Update(new { CN_F_QUANTITY = item.CN_F_QUANTITY - 1 }, new { CN_GUID = item.CN_GUID }, trans); } //释放被锁定货位 foreach (var checkDtl in checkAuditPara.checkMst.dtls) { logPara.Push("释放被锁定的货位" + checkDtl.CN_S_LOCATION_CODE); CreateDAL>().Update(new { CN_S_LOCATION_STATE = "正常" }, new { CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE }, trans); } //删除list记录,并往历史表中添加 AuditAddHistory(checkAuditPara, logPara, trans); //上下架记录 CreateDAL>().AddRange(checkAuditPara.upHis, trans); CreateDAL>().AddRange(checkAuditPara.downHis, trans); // throw new Exception("tedifanhui"); } #endregion }); #endregion if (result.Success && checkAuditPara.isEnd) { //升库存 AuditAddQty(checkAuditPara, logPara, null); //修改装箱数据 foreach (var checkDtl in checkAuditPara.checkMst.dtls) { if (checkDtl.CN_S_CHECK_RESULT.Equals(CheckStateEnum.E.ToString()))//修改后 { AutoBomItemEntity itemEntity = CreateDAL().GetItemEntity(checkDtl.CN_S_ITEM_CODE); bool execResult = CreateDAL().UpdateZX(checkDtl.CN_S_PACK_CODE, checkDtl.CN_F_WEIGHT.ToString(),checkDtl.CN_F_PACKING_QTY.ToString(), checkDtl.CN_S_LOT_NO, checkDtl.CN_S_FIGURE_NO, itemEntity); if (!execResult) { logPara.Push("更新装箱信息失败!" + JsonConvert.SerializeObject(checkDtl)); } } } } return result; } /// /// 盘点单审核 - 参数处理 /// /// public OperateResult AuditHandleParam(CheckAuditPara checkAuditPara, LogPara logPara) { logPara.Push("最终审核"); checkAuditPara.isEnd = true; checkAuditPara.checkMst.dtls = BLLCreator.Create>().GetList(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }); checkAuditPara.checkMst.dtls = checkAuditPara.checkMst.dtls.Where(e => !e.CN_S_CHECK_RESULT.Equals(CheckStateEnum.ERROR.ToString())).ToList(); if (checkAuditPara.checkMst.dtls.Count() == 0) { return OperateResult.Error("盘点单子表不存在数据!"); } else { checkAuditPara.stockCode = checkAuditPara.checkMst.CN_S_STOCK_CODE; checkAuditPara.areaCode = checkAuditPara.checkMst.dtls.FirstOrDefault().CN_S_STOCK_AREA; } foreach (var dtl in checkAuditPara.checkMst.dtls) { var trayItemDtl = CreateDAL>().GetSingleEntity(new { CN_S_UNIQUE_CODE = dtl.CN_S_PACK_CODE }); if (trayItemDtl != null) { var trayItemMst = CreateDAL>().GetSingleEntity(new { CN_GUID = trayItemDtl.CN_PARENT_GUID }); if (trayItemMst != null) { dtl.trayItemMst = trayItemMst; } } else { var trayItemMst = CreateDAL>().GetSingleEntity(new { CN_S_TRAY_CODE = dtl.CN_S_TRAY_CODE, CN_S_ITEM_CODE = dtl.CN_S_ITEM_CODE }); if (trayItemMst != null) { dtl.trayItemMst = trayItemMst; } } } checkAuditPara.checkLists = CreateDAL>().GetList(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }); checkAuditPara.upHis = new List(); checkAuditPara.downHis = new List(); return OperateResult.Succeed(); } /// /// 盘点单审核 - 降库存 /// /// public void AuditReduceQty(CheckAuditPara checkAuditPara, LogPara logPara) { foreach (var dtl in checkAuditPara.checkMst.dtls) { var trayItemMstData = dtl.trayItemMst; if (trayItemMstData == null) { logPara.Push("trayItemMstData异常为NULL:" + JsonConvert.SerializeObject(trayItemMstData)); continue; }; var trayItemDtls = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMstData.CN_GUID }); //decimal weight = 0; foreach (var trayItemDlt in trayItemDtls) { // var weight = Convert.ToDecimal(trayItemDlt.CN_S_SERIAL_NO); //var weight = Convert.ToDecimal(dtl.CN_F_QUANTITY); checkAuditPara.stockQtys.Add(new TN_WM_B_STOCK_QTYEntity() { CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME, CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE, CN_S_OWNER = trayItemMstData.CN_S_OWNER, CN_S_PRODUCTION_BATCH = string.IsNullOrEmpty(trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH) ? "" : trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH, CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO, CN_F_QUANTITY = Convert.ToDecimal(trayItemDlt.CN_F_PACKING_QTY), CN_S_STOCK_CODE = checkAuditPara.stockCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkAuditPara.areaCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_AREA, CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY, CN_S_MODEL = trayItemMstData.CN_S_MODEL, CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1, CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT }); checkAuditPara.areaQtys.Add(new TN_WM_B_AREA_QTYEntity() { CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME, CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE, CN_S_OWNER = trayItemMstData.CN_S_OWNER, CN_S_PRODUCTION_BATCH = string.IsNullOrEmpty(trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH) ? "" : trayItemDtls.FirstOrDefault().CN_S_PRODUCTION_BATCH, CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO, CN_F_QUANTITY = Convert.ToDecimal(trayItemDlt.CN_F_PACKING_QTY), CN_S_STOCK_CODE = checkAuditPara.stockCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkAuditPara.areaCode,//checkAuditPara.checkLists.FirstOrDefault().CN_S_STOCK_AREA, CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY, CN_S_MODEL = trayItemMstData.CN_S_MODEL, CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1, CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT }); } } } /// /// 盘点单审核 /// /// /// /// public void AuditAddHistory(CheckAuditPara checkAuditPara, LogPara logPara, IDbTransaction trans) { foreach (var checkList in checkAuditPara.checkLists) { checkAuditPara.checkListHistorys.Add(new TN_WM_CHECK_LIST_HISTORYEntity { CN_GUID = Guid.NewGuid().ToString(), CN_S_OP_NO = checkList.CN_S_OP_NO, CN_S_STOCK_CODE = checkList.CN_S_STOCK_CODE, CN_S_STOCK_AREA = checkList.CN_S_STOCK_AREA, CN_S_LOCATION_CODE = checkList.CN_S_LOCATION_CODE, CN_S_TRAY_CODE = checkList.CN_S_TRAY_CODE, CN_S_ITEM_CODE = checkList.CN_S_ITEM_CODE, CN_S_ITEM_NAME = checkList.CN_S_ITEM_NAME, CN_S_ITEM_STATE = checkList.CN_S_ITEM_STATE, CN_S_LOT_NO = checkList.CN_S_LOT_NO, CN_S_CHECK_RESULT = checkList.CN_S_CHECK_RESULT, CN_S_MODEL = checkList.CN_S_MODEL, CN_S_FIGURE_NO = checkList.CN_S_FIGURE_NO, CN_F_QUANTITY = checkList.CN_F_QUANTITY, CN_F_PACKING_QTY = checkList.CN_F_PACKING_QTY, CN_F_WEIGHT = checkList.CN_F_WEIGHT, CN_S_PACK_CODE = checkList.CN_S_PACK_CODE, CN_S_CREATOR = checkList.CN_S_CREATOR, CN_S_CREATOR_BY = checkList.CN_S_CREATOR_BY, CN_T_CREATE = checkList.CN_T_CREATE, CN_S_MODIFY = checkList.CN_S_MODIFY, CN_S_MODIFY_BY = checkList.CN_S_MODIFY_BY, CN_T_MODIFY = checkList.CN_T_MODIFY }); } logPara.Push("删除盘点列表记录,添加盘点历史表记录!"); if (checkAuditPara.checkListHistorys.Count() > 0) { checkAuditPara.checkListHistorys.ForEach(e => e.CN_GUID = Guid.NewGuid().ToString()); CreateDAL>().AddRange(checkAuditPara.checkListHistorys, trans); CreateDAL>().Delete(new { CN_S_OP_NO = checkAuditPara.checkAuditDto.opNo }, trans); } } /// /// 盘点单审核 - 升库存 /// /// /// /// public void AuditAddQty(CheckAuditPara checkAuditPara, LogPara logPara, IDbTransaction trans) { logPara.Push("统一升库存!"); var addStockQty = new List(); var addAreaQty = new List(); List trayItemList = new List(); List dtlList = checkAuditPara.checkMst.dtls; List disdtlList = dtlList.Select(x => x.CN_S_TRAY_CODE).Distinct().ToList(); logPara.Push("去重!" + JsonConvert.SerializeObject(disdtlList)); foreach (var item in disdtlList) { List mstList = CreateDAL>().GetList(new { CN_S_TRAY_CODE = item }); if (!mstList.Any()) { logPara.Push("trayItemList发生异常了!"); } trayItemList.AddRange(mstList); } logPara.Push("trayItemList!" + JsonConvert.SerializeObject(trayItemList)); trayItemList.ForEach(dtl => { var trayItemMstData = dtl; var trayItemDtls = CreateDAL>().GetList(new { CN_PARENT_GUID = trayItemMstData.CN_GUID }); //判断如果物料明细为空,则清空托盘物料表,货位置为空 if (trayItemDtls.Count() == 0) { CreateDAL>().Delete(new { CN_GUID = trayItemMstData.CN_GUID }); } //decimal weight = 0; foreach (var trayItemDlt in trayItemDtls) { var qty = Convert.ToDecimal(trayItemDlt.CN_F_PACKING_QTY); if (qty > 0) { addStockQty.Add(new TN_WM_B_STOCK_QTYEntity() { CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME, CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE, CN_S_OWNER = trayItemMstData.CN_S_OWNER, CN_S_PRODUCTION_BATCH = trayItemMstData.CN_S_PRODUCTION_BATCH, CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO, CN_F_QUANTITY = qty, CN_S_STOCK_CODE = checkAuditPara.stockCode, CN_S_STOCK_AREA = checkAuditPara.areaCode, CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY, CN_S_MODEL = trayItemMstData.CN_S_MODEL, CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1, CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT }); addAreaQty.Add(new TN_WM_B_AREA_QTYEntity() { CN_GUID = Guid.NewGuid().ToString(), CN_S_ITEM_CODE = trayItemMstData.CN_S_ITEM_CODE, CN_S_ITEM_NAME = trayItemMstData.CN_S_ITEM_NAME, CN_S_ITEM_STATE = trayItemMstData.CN_S_ITEM_STATE, CN_S_OWNER = trayItemMstData.CN_S_OWNER, CN_S_PRODUCTION_BATCH = trayItemMstData.CN_S_PRODUCTION_BATCH, CN_S_LOT_NO = trayItemDlt.CN_S_LOT_NO, CN_F_QUANTITY = qty, CN_S_STOCK_CODE = checkAuditPara.stockCode, CN_S_STOCK_AREA = checkAuditPara.areaCode, CN_F_PLANNED_QTY = trayItemMstData.CN_F_INQTY, CN_S_MODEL = trayItemMstData.CN_S_MODEL, CN_S_FIGURE_NO = trayItemDlt.CN_S_EXT1, CN_S_MEASURE_UNIT = trayItemMstData.CN_S_MEASURE_UNIT }); } } }); ////统一升库存 //foreach (var trayItemMstData in checkAuditPara.trayItemMsts) //{ //} //增加仓库库存 logPara.Push("升仓库库存:" + JsonConvert.SerializeObject(addStockQty)); var qtyResult = CreateDAL().AddStockQty(addStockQty, null);//ReduceStockQty(addStockQty, null); logPara.Push("升仓库库存结果:" + qtyResult.Describe()); qtyResult = CreateDAL().AddAreaQty(addAreaQty, null); logPara.Push("升库区库存结果:" + qtyResult.Describe()); } /// /// 盘点单反审 /// /// /// public OperateResult ReAudit(CheckAuditDto checkAuditDto, LogPara logPara) { var state = BillStateEnum.ReAudit.GetDescription(); var checkMst = BLLCreator.Create>().GetSingleEntity(new { CN_S_OP_NO = checkAuditDto.opNo }); if (checkMst == null) { return OperateResult.Error("未找到当前盘点单" + checkAuditDto.opNo); } var result = CreateDAL>().Update(new { CN_S_STATE = state, CN_S_AUDIT_CONTENT = checkAuditDto.auditContent, CN_S_CURR_ORG_CODE = "", CN_S_CURR_ORG_NAME = "", CN_S_NEXT_ORG_CODE = "", CN_S_NEXT_ORG_NAME = "", }, new { CN_S_OP_NO = checkAuditDto.opNo }); return result; } #endregion #region DELETE /// /// 删除盘点单 /// /// /// public OperateResult Delete(string opNo, LogPara logPara) { var checkDtls = BLLCreator.Create>().GetList(new { CN_S_OP_NO = opNo }); var reuslt = UseBasisTransaction(trans => { CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); CreateDAL>().Delete(new { CN_S_OP_NO = opNo }, trans); foreach (var checkDtl in checkDtls) { logPara.Push("更新货位" + checkDtl.CN_S_LOCATION_CODE + "状态为正常!"); CreateDAL>().Update(new { CN_S_LOCATION_STATE = "正常" }, new { CN_S_LOCATION_CODE = checkDtl.CN_S_LOCATION_CODE }, trans); } }); return OperateResult.Succeed(); } #endregion } }