using Autofac; using Newtonsoft.Json; using Rhea.Common; using SqlSugar; using Swifter.Tools; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Tiger.IBusiness; using Tiger.Model; namespace Tiger.Business.WMS { public partial class iWMS : IiWMS { /// /// 发料单取消审核 /// /// /// public ApiAction MaterialRem(Model.Minsun.MaterialRem parameter) { var action = new ApiAction(); try { if (!parameter.IsNullOrEmpty()) { var judian = BizConfig.Configuration["JuDian"]; Model.Minsun.WMS_PRDPICK_H entity_h = new(); List entity_d = new(); DbClient db = Business.Biz.Db; if (parameter.ENTERPRISECODE == 88) { //判断是不是本据点s if (parameter.STRONGHOID != judian) { if (parameter.STRONGHOID == "AHXC") { var requestJson = JsonConvert.SerializeObject(parameter); var response = HttpHelper.PostAsync("http://172.18.8.56:9529/api/WMS/parameterRem", requestJson).Result; action = JsonConvert.DeserializeObject(response.Message); } if (parameter.STRONGHOID == "DGXC") { var requestJson = JsonConvert.SerializeObject(parameter); var response = HttpHelper.PostAsync("http://172.18.8.56:9528/api/WMS/parameterRem", requestJson).Result; action = JsonConvert.DeserializeObject(response.Message); } if (parameter.STRONGHOID == "XCSJ") { var requestJson = JsonConvert.SerializeObject(parameter); var response = HttpHelper.PostAsync("http://172.18.8.56:9527/api/WMS/parameterRem/", requestJson).Result; action = JsonConvert.DeserializeObject(response.Message); } } } else { //测试 db = Biz.DataSource["Test"].Client; } entity_h = db.Queryable().Where(q => q.BILLCODE == parameter.BILLCODE).First(); entity_d = db.Queryable().Where(q => q.BILLCODE == parameter.BILLCODE).ToList(); if (!entity_h.IsNullOrEmpty()) { if (entity_h.STATUS == "COMPLETE") { action.Message = $"领料单{entity_h.BILLCODE}已经发料,不能取消"; action.IsSuccessed = false; Logger.Interface.Info("单头:" + action.Message); } else { entity_h.STATUS = "DELETE"; } if (entity_d.Count > 0) { foreach (var item in entity_d) { if (item.LINESTATUS == "COMPLETE" || item.QTY > 0) { action.Message = $"领料单{item.BILLCODE}已经发料,不能取消"; action.IsSuccessed = false; Logger.Interface.Info("单身:" + action.Message); } else { item.LINESTATUS = "DELETE"; } } } } //数据库处理操作 if (action.IsSuccessed) { action.Message = $"领料单{entity_h.BILLCODE}取消审核成功"; var dbTran = db.UseTran(() => { db.Updateable(entity_h).ExecuteCommand(); db.Updateable(entity_d).ExecuteCommand(); //db.Storageable(entity_h, "system").ExecuteCommand(); //db.Storageable(entity_d, "system").ExecuteCommand(); }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败"); } } Logger.Interface.Info(action.Message); } return action; } catch (Exception ex) { return action.GetResponse().CatchExceptionWithLog(ex, $"发料单取消审核异常"); } } /// /// 领料单过账到T100 /// /// /// public ApiAction MaterialReqToErp(MReqPostParam param) { var action = new ApiAction(); Work.DoAsync(() => { Thread.Sleep(3000); try { Model.Minsun.WMS_PRDPICK_H entity_h = Biz.Db.Queryable().Where(x => x.BILLCODE == param.BillCode && x.ERP_BILL_CODE == null).First(); List entity_d = Biz.Db.Queryable().Where(x => x.BILLCODE == param.BillCode && Convert.ToInt32(x.PRQTY) != 0).ToList(); List details = new List(); foreach (var item in entity_d) { //计算数量 var qty = item.QTY > item.PRQTY ? item.PRQTY.ToString() : item.QTY.ToString(); details.Add(new Detail5 { sfdcseq = item.BILLLINE.ToString(), sfdc001 = item.SOURCECODE, sfdc002 = item.SOURCELINE.ToString(), sfdc003 = item.SOURCETYPE.ToString(), sfdc007 = qty, }); } var ret = ErpT100.MaterialReqToErp(new ReqErpInputParameter { parameter = new Parameter4 { sfdatype = entity_h.SOURCETYPE.ToString(), sfdadocno = entity_h.BILLCODE, detail = details }, datakey = new Datakey { EntId = ApiConfig.IsTestServer ? "108" : "88", CompanyId = param.CompanyId } }); if (ret.payload.std_data.execution.code == "0") //成功 { entity_h.ERP_BILL_CODE = ret.payload.std_data.parameter.docno; entity_h.LastModificationTime = DateTime.Now; action.Message += $"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},返回的ERP_BILL_CODE:[{ret.payload.std_data.parameter.docno}]"; Logger.Interface.Info(action.Message); } else //失败 { action.IsSuccessed = false; action.Message += $",领料单{entity_h.BILLCODE}过账失败,返回的信息:{ret.payload.std_data.execution.description}"; Logger.Interface.Error(action.Message); //return action; } //数据库处理操作 DbClient db = Business.Biz.Db; if (action.IsSuccessed) { action.Message += $",领料单{entity_h.BILLCODE}过账成功"; var dbTran = db.UseTran(() => { db.Updateable(entity_h).ExecuteCommand(); db.Updateable(entity_d).ExecuteCommand(); }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败"); Logger.Interface.Error(action.Message); } } Logger.Interface.Info(action.Message); //return action; } catch (Exception ex) { action.GetResponse().CatchExceptionWithLog(ex, $"发料单过账异常"); Logger.Interface.Error(action.Message); } }); return action; } /// /// 新框架-领料单过账到T100 /// /// /// public ApiAction MaterialReqToErpNew(MReqPostParam param) { var action = new ApiAction(); Work.DoAsync(() => { Thread.Sleep(3000); Logger.Interface.Info($"领料单过账到T100 =>开始过账,单号:[{param.BillCode},{param.CompanyId}]"); try { BIZ_ERP_PROD_OUT entity_h = Biz.Db.Queryable().Where(x => x.BILLCODE == param.BillCode && SqlFunc.IsNullOrEmpty(x.ERP_BILL_CODE)).First(); List entity_d = Biz.Db.Queryable().Where(x => x.BILLCODE == param.BillCode && Convert.ToInt32(x.PRQTY) > 0).ToList(); List details = new List(); if (entity_h != null) { foreach (var item in entity_d) { //计算数量 var qty = item.QTY > item.PRQTY ? item.PRQTY.ToString() : item.QTY.ToString(); details.Add(new Detail5 { sfdcseq = item.BILLLINE, sfdc001 = item.SOURCECODE, sfdc002 = item.SOURCELINE.ToString(), sfdc003 = item.SOURCETYPE.ToString(), sfdc007 = qty, }); } var ret = ErpT100.MaterialReqToErp(new ReqErpInputParameter { parameter = new Parameter4 { sfdatype = entity_h.SOURCETYPE.ToString(), sfdadocno = entity_h.BILLCODE, detail = details }, datakey = new Datakey { EntId = "88", // ApiConfig.IsTestServer ? "108" : "88", CompanyId = param.CompanyId } }); if (ret.payload.std_data.execution.code == "0") //成功 { entity_h.ERP_BILL_CODE = ret.payload.std_data.parameter.docno; entity_h.UPDATE_TIME = DateTime.Now; entity_h.HANDLED = 0; entity_h.HANDLED_DATE = DateTime.Now; action.Message += $"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},返回的ERP_BILL_CODE:[{ret.payload.std_data.parameter.docno}]"; } else if (ret.payload.std_data.execution.code == "S" || ret.payload.std_data.execution.code == "ain-00222") { entity_h.ERP_BILL_CODE = "此笔资料已过账-system"; entity_h.UPDATE_TIME = DateTime.Now; entity_h.HANDLED = 0; entity_h.HANDLED_DATE = DateTime.Now; action.IsSuccessed = false; action.Message = $"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},返回的ERP_BILL_CODE:[{ret.payload.std_data.parameter?.docno}]"; } else //失败 { action.IsSuccessed = false; action.Message = $"领料单{entity_h.BILLCODE}过账失败,返回的信息:{ret.payload.std_data.execution.description}"; //大于5次就不发邮件 if (entity_h.HANDLED < 6) { Work.DoAsync(() => { MailServiceApi _IMailServiceApi = new MailServiceApi(); _IMailServiceApi.SendMail(new MailBodyEntity { MailTextBody = $"Hi All,

    领料单[{entity_h.BILLCODE}]过账失败,
T100返回消息:{ret.payload.std_data.execution.description}", MailBodyType = "Html", MailFilePath = null, Recipients = Cache.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" }, Cc = new List(), Sender = "WMS Email Admin", SenderAddress = "xcerp@sharetronic.com", Subject = $"领料单[{entity_h.BILLCODE}]过账失败", Body = "" }, new SendServerConfigurationEntity { SmtpHost = "mail.sharetronic.com", SmtpPort = 25, SenderAccount = "xcerp@sharetronic.com", SenderPassword = "sha66666", MailEncoding = "utf-8", IsSsl = false }); }); } entity_h.HANDLED++; entity_h.HANDLED_DATE = DateTime.Now; } //数据库处理操作 DbClient db = Business.Biz.Db; action.Message += action.IsSuccessed ? $",领料单{entity_h.BILLCODE}过账成功" : ""; var dbTran = db.UseTran(() => { db.Updateable(entity_h).UpdateColumns(q => new { q.ERP_BILL_CODE, q.UPDATE_TIME, q.HANDLED, q.HANDLED_DATE }).ExecuteCommand(); //db.Updateable(entity_d).ExecuteCommand(); }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败"); Logger.Interface.Error(action.Message); Logger.Scheduler.Error(action.Message); } Logger.Interface.Info(action.Message); Logger.Scheduler.Info(action.Message); } else { action.IsSuccessed = false; action.Message = $"查不到符合条件的领料需要过账"; Logger.Interface.Error(action.Message); Logger.Scheduler.Error(action.Message); } } catch (Exception ex) { action.GetResponse().CatchExceptionWithLog(ex, $"发料单过账异常"); Logger.Interface.Error(action.Message); Logger.Scheduler.Error(action.Message); } }); return action; } /// /// 领料单过账到T100 /// /// /// public static ApiAction MaterialReqOldToErpNew(MReqPostParam param) { var action = new ApiAction(); Work.DoAsync(() => { Thread.Sleep(3000); Logger.Interface.Info($"领料单过账到T100 =>开始过账,单号:[{param.BillCode},{param.CompanyId}]"); DbClient db = Biz.DataSource["WMS57"].Client; try { BIZ_ERP_PROD_OUT entity_h = db.Queryable().Where(x => x.BILLCODE == param.BillCode && SqlFunc.IsNullOrEmpty(x.ERP_BILL_CODE)).First(); List entity_d = db.Queryable().Where(x => x.BILLCODE == param.BillCode && Convert.ToInt32(x.PRQTY) > 0).ToList(); List details = new List(); if (entity_h != null) { foreach (var item in entity_d) { //计算数量 var qty = item.QTY > item.PRQTY ? item.PRQTY.ToString() : item.QTY.ToString(); details.Add(new Detail5 { sfdcseq = item.BILLLINE, sfdc001 = item.SOURCECODE, sfdc002 = item.SOURCELINE.ToString(), sfdc003 = item.SOURCETYPE.ToString(), sfdc007 = qty, }); } var ret = ErpT100.MaterialReqToErp(new ReqErpInputParameter { parameter = new Parameter4 { sfdatype = entity_h.SOURCETYPE.ToString(), sfdadocno = entity_h.BILLCODE, detail = details }, datakey = new Datakey { EntId = "88", // ApiConfig.IsTestServer ? "108" : "88", CompanyId = param.CompanyId } }); if (ret.payload.std_data.execution.code == "0") //成功 { entity_h.ERP_BILL_CODE = ret.payload.std_data.parameter.docno; entity_h.UPDATE_TIME = DateTime.Now; entity_h.HANDLED = 0; entity_h.HANDLED_DATE = DateTime.Now; action.Message += $"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},返回的ERP_BILL_CODE:[{ret.payload.std_data.parameter.docno}]"; Logger.Interface.Info(action.Message); } else if (ret.payload.std_data.execution.code == "S" || ret.payload.std_data.execution.code == "ain-00222") { entity_h.ERP_BILL_CODE = "此笔资料已过账-system"; entity_h.UPDATE_TIME = DateTime.Now; entity_h.HANDLED = 0; entity_h.HANDLED_DATE = DateTime.Now; action.IsSuccessed = false; action.Message = $"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},返回的ERP_BILL_CODE:[{ret.payload.std_data.parameter.docno}]"; Logger.Interface.Info(action.Message); } else //失败 { action.IsSuccessed = false; action.Message = $"领料单{entity_h.BILLCODE}过账失败,返回的信息:{ret.payload.std_data.execution.description}"; Logger.Interface.Error(action.Message); //大于5次就不发邮件 if (entity_h.HANDLED < 6) { Work.DoAsync(() => { MailServiceApi _IMailServiceApi = new MailServiceApi(); _IMailServiceApi.SendMail(new MailBodyEntity { MailTextBody = $"Hi All,

    领料单[{entity_h.BILLCODE}]过账失败,
T100返回消息:{ret.payload.std_data.execution.description}", MailBodyType = "Html", MailFilePath = null, Recipients = Cache.SysParam.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" }, Cc = new List(), Sender = "WMS Email Admin", SenderAddress = "xcerp@sharetronic.com", Subject = $"领料单[{entity_h.BILLCODE}]过账失败", Body = "" }, new SendServerConfigurationEntity { SmtpHost = "mail.sharetronic.com", SmtpPort = 25, SenderAccount = "xcerp@sharetronic.com", SenderPassword = "sha66666", MailEncoding = "utf-8", IsSsl = false }); }); } entity_h.HANDLED++; entity_h.HANDLED_DATE = DateTime.Now; //return action; } //数据库处理操作 db = Biz.DataSource["WMS57"].Client; action.Message += action.IsSuccessed ? $",领料单{entity_h.BILLCODE}过账成功" : ""; var dbTran = db.UseTran(() => { db.Updateable(entity_h).UpdateColumns(q => new { q.ERP_BILL_CODE, q.UPDATE_TIME, q.HANDLED, q.HANDLED_DATE }).ExecuteCommand(); //db.Updateable(entity_d).ExecuteCommand(); }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败"); Logger.Interface.Error(action.Message); } Logger.Interface.Info(action.Message); } else { action.IsSuccessed = false; action.Message = $"查不到符合条件的领料需要过账"; Logger.Interface.Error(action.Message); } } catch (Exception ex) { action.GetResponse().CatchExceptionWithLog(ex, $"发料单过账异常"); Logger.Interface.Error(action.Message); } }); return action; } /// /// 获取所有仓库机构列表 /// /// /// public static async Task GetHouseModel(string name, string status) { var data = new List(); V_WH_TREE func = null; if (!string.IsNullOrEmpty(name)) { func = Biz.Db.Queryable().Where(x => x.NAME == name).First(); } var items = await Biz.Db.Queryable() .Where(q => q.TYPE != "Location") .OrderBy(x => x.NAME) .Distinct().ToListAsync(); //没有查询的时候 if (func == null) { List entities = items.OrderBy(x => x.NAME).ToList().FindAll(t => t.PARENT_ID.IsNullOrEmpty()); foreach (var item in entities) { OrgItemH houseItem = new(); houseItem.id = item.ID; houseItem.houseCode = item.CODE; houseItem.houseName = item.NAME; houseItem.PARENT_HOUSE = item.PARENT_ID; houseItem.createTime = DateTime.Now.ToString("yyyy-MM-dd mm:dd:ss"); houseItem.houseType = item.TYPE; //hosueItem.remark = item.REMARK; //hosueItem.orderNo = item.SEQ_NO; houseItem.children = new(); if (item.TYPE != "Shelf") GetOrgItem(items, item.CODE, ref houseItem); data.Add(houseItem); } } //有查询条件的时候 else { } //转换Json时,去除值为null的属性 var jsonSetting = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; var json = JsonConvert.SerializeObject(data, Formatting.Indented, jsonSetting); return json; } /// /// 递归返回组织机构 /// /// /// /// private static void GetOrgItem(List data, string parent, ref OrgItemH pOrgItem) { List entities = data.OrderBy(x => x.NAME).ToList().FindAll(t => t.PARENT_ID == parent).Distinct().ToList(); if (entities.Count > 0) { foreach (var item in entities) { OrgItemH houseItem = new(); houseItem.id = item.ID; houseItem.houseCode = item.CODE; houseItem.houseName = item.NAME; houseItem.PARENT_HOUSE = item.PARENT_ID; houseItem.createTime = DateTime.Now.ToString("yyyy-MM-dd mm:dd:ss"); houseItem.houseType = item.TYPE; //houseItem.remark = item.REMARK; //houseItem.orderNo = item.SEQ_NO; houseItem.children = new(); if (item.TYPE != "Shelf") GetOrgItem(data, item.CODE, ref houseItem); pOrgItem.children.Add(houseItem); } } } /// /// /// /// /// public static ApiAction ReceiptHToErp(string serverId, string triggerDetail) { var action = new ApiAction(); try { Logger.Scheduler.Info(triggerDetail); DbClient db = Business.Biz.Db; var CompanyId = ""; switch (serverId) { case "55": db = Biz.DataSource["Test"].Client; CompanyId = "XCSJ"; break; case "XCSJ": db = Biz.DataSource["XCSJ"].Client; CompanyId = "XCSJ"; break; case "DGXC": db = Biz.DataSource["DGXC"].Client; CompanyId = "DGXC"; break; case "AHXC": db = Biz.DataSource["AHXC"].Client; CompanyId = "AHXC"; break; } var entity_h = db.Queryable().Where(x => x.STATUS == 2 && x.ERP_BILL_CODE == null).ToList(); List receiptList = new List(); foreach (var h in entity_h) { List details = new List(); var userid = db.Queryable().Where(c => c.Id.Equals(h.CreatorUserId)).ToList(); var CreatorUserId = userid[0].UserName == "admin" ? "00000" : userid[0].UserName; List entity_d = db.Queryable().Where(x => x.BILLCODE == h.BILLCODE).ToList(); foreach (var item in entity_d) { var line = db.Queryable().Where(c => c.DeliveryNo.Equals(item.SOURCECODE.ToString()) && c.extendN01 == item.SOURCELINE.ToString() && c.productCode == item.MATERIALCODE).First(); //新SRM if (line == null) { line = db.Queryable().Where(c => c.DeliveryNo.Equals(item.SOURCECODE.ToString()) && c.lineNo == item.SOURCELINE && c.productCode == item.MATERIALCODE).First(); } //旧SRM var pmdt004 = line != null ? ((line.poLineNo ?? "1").Split('-').Length > 2 ? (line.poLineNo ?? "1").Split('-')[2] : (line.poLineNo ?? "1")) : "1"; details.Add(new Detail { pmdtseq = item.BILLLINE.ToString(), pmdt001 = string.IsNullOrEmpty(item.PONO) ? item.SOURCECODE : item.PONO, pmdt002 = string.IsNullOrEmpty(item.PONO) ? $"{item.SOURCELINE}" : $"{item.POLINE}", pmdt003 = "1", pmdt004 = pmdt004, pmdt006 = item.MATERIALCODE, //pmdt018 = "创米科技", pmdt020 = $"{item.QTY}", pmdtud011 = "0" }); } var XSOURCECODE = entity_d[0].SOURCECODE.ToString(); //调用T100接口生成到货单 var ret = ErpT100.GenerateCustReceipt(new CustReceiptInputParameter { parameter = new Parameter { pmds000 = "1", pmdsdocno = "3438", pmdsdocdt = DateTime.Now.ToString("yyyy-MM-dd"), //"2023-04-26", //当天时间 pmds002 = CreatorUserId, //用户ID pmds003 = "", pmds007 = h.SUPPLIERCODE, //"C0006", //供应商代码 pmds010 = XSOURCECODE, //送货单号 //pmdsud001 = SecondVenderCode, //"CM017", //二级供应编号 detail = details }, datakey = new Datakey { EntId = ApiConfig.IsTestServer ? "108" : "88", CompanyId = CompanyId } }); if (ret.payload.std_data.execution.code == "0") //成功 { Logger.Scheduler.Info($"{action.Message.IsNullOrEmpty("", ";")}{ret.payload.std_data.execution.description},据点[{CompanyId}],收货单号[{h.BILLCODE}],当前用户[{CreatorUserId}],供应商编号[{h.SUPPLIERCODE}],返回的收货单号:[{ret.payload.std_data.parameter.docno}]"); h.ERP_BILL_CODE = ret.payload.std_data.parameter.docno; h.STATUS = 3; h.LastModificationTime = DateTime.Now; receiptList.Add(h); } else //失败 { Logger.Scheduler.Info($"失败信息:据点[{CompanyId}],收货单号[{h.BILLCODE}],当前用户[{CreatorUserId}],供应商编号[{h.SUPPLIERCODE}],返回的信息:{ret.payload.std_data.execution.description}"); //return action; } } //数据库处理操作 action.Message = $",到货单推T100完成"; var dbTran = db.UseTran(() => { if (receiptList.Any()) { db.Updateable(receiptList).ExecuteCommand(); } }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败"); Logger.Scheduler.Error(action.Message); } Logger.Scheduler.Info(action.Message); //return action; } catch (Exception ex) { action.GetResponse().CatchExceptionWithLog(ex, $"生成到货单异常"); Logger.Scheduler.Error(action.Message); } return action; } /// /// 根据仓库代码和类型删除仓库机构列表 /// /// /// public static ApiAction DelWareHouseModel(DelWareHouseModelEntity wareHouse) { var action = new ApiAction(); List locaIds = new(); List shelfIds = new(); List regIds = new(); List wareIds = new(); var db = Biz.Db; List uNITs = new List(); if (wareHouse.Type == "Warehouse") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.WH_ID == wareHouse.ID).ToList(); if (res.IsNullOrEmpty()) { var unit = db.Queryable().Where(q => q.WH_CODE == wareHouse.ID).ToList(); locaIds.AddRange(unit.Where(q => !q.LOCATION_ID.IsNullOrEmpty()).Select(s => s.LOCATION_ID).Distinct()); shelfIds.AddRange(unit.Where(q => !q.SHELF_ID.IsNullOrEmpty()).Select(s => s.SHELF_ID).Distinct()); regIds.AddRange(unit.Where(q => !q.REGION_ID.IsNullOrEmpty()).Select(s => s.REGION_ID).Distinct()); wareIds.AddRange(unit.Where(q => !q.WH_ID.IsNullOrEmpty()).Select(s => s.WH_ID).Distinct()); } else { action.IsSuccessed = false; action.Message = "仓库里面有东西,不能删除!"; } } else if (wareHouse.Type == "Region") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.REGION_ID == wareHouse.ID).ToList(); if (res.IsNullOrEmpty()) { var unit = db.Queryable().Where(q => q.REGION_CODE == wareHouse.ID).ToList(); locaIds.AddRange(unit.Where(q => !q.LOCATION_ID.IsNullOrEmpty()).Select(s => s.LOCATION_ID).Distinct()); shelfIds.AddRange(unit.Where(q => !q.SHELF_ID.IsNullOrEmpty()).Select(s => s.SHELF_ID).Distinct()); regIds.AddRange(unit.Where(q => !q.REGION_ID.IsNullOrEmpty()).Select(s => s.REGION_ID).Distinct()); } else { action.IsSuccessed = false; action.Message = "储区里面有东西,不能删除!"; } } else if (wareHouse.Type == "Shelf") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.SHELF_ID == wareHouse.ID).ToList(); if (res.IsNullOrEmpty()) { var unit = db.Queryable().Where(q => q.SHELF_CODE == wareHouse.ID).ToList(); locaIds.AddRange(unit.Where(q => !q.LOCATION_ID.IsNullOrEmpty()).Select(s => s.LOCATION_ID).Distinct()); shelfIds.AddRange(unit.Where(q => !q.SHELF_ID.IsNullOrEmpty()).Select(s => s.SHELF_ID).Distinct()); } else { action.IsSuccessed = false; action.Message = "货架里面有东西,不能删除!"; } } else { } //删储位 if (locaIds.Any()) { db.Deleteable().Where(it => locaIds.Contains(it.ID)).ExecuteCommand(); } //删货架 if (shelfIds.Any()) { db.Deleteable().Where(it => shelfIds.Contains(it.ID)).ExecuteCommand(); } //删储区 if (regIds.Any()) { db.Deleteable().Where(it => regIds.Contains(it.ID)).ExecuteCommand(); } //删仓库 if (wareIds.Any()) { db.Deleteable().Where(it => wareIds.Contains(it.ID)).ExecuteCommand(); } return action; } /// /// 根据仓库代码和类型删除仓库机构列表 /// /// /// public static ApiAction AddLocationModel(List locations) { var action = new ApiAction(); List Locations = new List(); foreach (var item in locations) { Model.WMS_LOCATION location = new Model.WMS_LOCATION() { LOCATION_CODE = item.LOCATION_CODE, LOCATION_NAME = item.LOCATION_CODE, IS_ACTIVE = "Y", ORG_CODE = item.ORG_CODE, SHELF_ID = item.SHELF_ID, IS_MIX = item.ISMIX, FLOOR_NO = item.FLOOR_NO, SEQ_NO = item.SEQ_NO, LEDID = item.SEQ_NO }; Locations.Add(location); } var db = Biz.Db; var dbTran = db.UseTran(() => { db.Deleteable(Locations.Select(it => it.ID)).ExecuteCommand(); db.Insertable(Locations).ExecuteCommand(); }); if (!dbTran.IsSuccess) { action.GetResponse().CatchExceptionWithLog(dbTran.ErrorException, $"新增储位异常"); } action.LocaleMsg = Biz.L("WMS.WareHouse.VerifyException", Locations[0].ORG_CODE); return action; } /// /// 查询货架是否有东西 /// /// /// public static ApiAction CheckLocation(DelWareHouseModelEntity shelf) { var action = new ApiAction(); var db = Biz.Db; if (shelf.Type == "shelf") { var res = db.Queryable().Where(q => q.STATUS > 2 && q.SHELF_ID == shelf.ID).ToList(); if (res.IsNullOrEmpty()) { action.IsSuccessed = true; } else { action.IsSuccessed = false; action.LocaleMsg = Biz.L("WMS.WareHouse.检查储位初始化", shelf.ID); } } return action; } /// /// 获取T100检验单数据2023.07.23,by weikaiyong /// /// /// public ApiAction GetQcReq(List iqcs) { var action = new ApiAction(); try { List iqcs_new = new List(); List saveItems = new(); List othSns = new(); List reqSns = new(); List saveHis = new(); DbClient db = Biz.DataSource["WMS57"].Client; var iqcEntitys = db.Queryable().Where(x => iqcs.Select(q => q.ERP_BILL_CODE).Contains(x.ERP_BILL_CODE)).ToList(); foreach (var iqc in iqcs) { var entity = iqcEntitys.Where(x => x.ERP_BILL_CODE == iqc.ERP_BILL_CODE).FirstOrDefault(); if (!entity.IsNullOrEmpty()) { entity.QCRESULT = iqc.QCRESULT; entity.QCSTATUS = 3; entity.RECEIVEQTY = iqc.RECEIVEQTY; entity.REJECTQTY = iqc.REJECTQTY; entity.UPDATE_TIME = DateTime.Now; iqcs_new.Add(entity); var items = db.Queryable().Where(q => (q.TRANS_CODE == nameof(BIZ_ERP_OTH_IN) || q.TRANS_CODE == nameof(BIZ_ERP_RECEIPT)) && q.TRANS_NO == entity.SOURCECODE && q.STATUS < WMS_ITEM.STATUSs.WaitIn.GetValue()).ToList(); //if (items.Count>0) { foreach (var item in items) { item.UPDATE_TIME = DateTime.Now; item.UPDATE_USER = "Interface"; item.STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(); saveItems.Add(item); saveHis.Add(new WMS_ITEM_HIS(item, $"检验单T100审单通过,条码待入库[{WMS_ITEM.STATUSs.WaitIn.GetDesc()}]")); } othSns = db.Queryable().Where(q => q.BUSINESSCODE == entity.SOURCECODE && q.STATUS < WMS_ITEM.STATUSs.WaitIn.GetValue()).ToList(); foreach (var item in othSns) { item.UPDATE_TIME = DateTime.Now; item.UPDATE_USER = "Interface"; item.STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(); } reqSns = db.Queryable().Where(q => q.BILLCODE == entity.SOURCECODE && q.STATUS < WMS_ITEM.STATUSs.WaitIn.GetValue()).ToList(); foreach (var item in reqSns) { item.UPDATE_TIME = DateTime.Now; item.UPDATE_USER = "Interface"; item.STATUS = WMS_ITEM.STATUSs.WaitIn.GetValue(); } } } else { action.Message += $"找不到对应的WMS检验单{iqc.ERP_BILL_CODE}"; action.IsSuccessed = false; } } //数据库处理操作 if (action.IsSuccessed) { action.Message = $"送检单[{string.Join(",", iqcEntitys.Select(q => $"{q.ERP_BILL_CODE}"))}]回写WMS成功"; var _db = Biz.DataSource["WMS57"].Client; var dbTran = _db.UseTran(() => { _db.Updateable(iqcs_new, "Interface").ExecuteCommand(); if (saveItems.Count > 100) { db.Fastest().BulkUpdate(saveItems, new string[] { "ID" }, new string[] { "STATUS", "UPDATE_TIME", "UPDATE_USER" }); Logger.Interface.Info($"库存[{string.Join(",", saveItems.Select(q => $"{q.TRANS_NO}"))}]Fastest回写WMS成功"); } else { _db.Updateable(saveItems, "Interface").UpdateColumns(q => new { q.STATUS, q.UPDATE_TIME, q.UPDATE_USER }).ExecuteCommand(); Logger.Interface.Info($"库存[{string.Join(",", saveItems.Select(q => $"{q.TRANS_NO}"))}]Updateable回写WMS成功"); } if (saveHis.Count > 100) { db.Fastest().BulkCopy(saveHis); } else { db.Insertable(saveHis, "Interface").ExecuteCommand(); } if (othSns.Count > 100) { db.Fastest().BulkUpdate(othSns); } else { db.Updateable(othSns, "Interface").ExecuteCommand(); } if (reqSns.Count > 100) { db.Fastest().BulkUpdate(reqSns); } else { db.Updateable(reqSns, "Interface").ExecuteCommand(); } }); if (!dbTran.IsSuccess) { action.CatchExceptionWithLog(dbTran.ErrorException, $"数据处理失败"); } Logger.Interface.Info($"送检单[{string.Join(",", iqcEntitys.Select(q => $"{q.ERP_BILL_CODE}"))}]回写WMS成功"); } action.IsSuccessed = true; } catch (Exception ex) { action.CatchExceptionWithLog(ex, $"数据处理失败"); } return action; } /// /// 获取销售出库列表 /// /// public ApiAction> GetOutSaleList(int pageIndex, int pageSize, string orgcode, string billcode) { var action = new ApiAction>(); var query = Biz.Db.Queryable().Where(x => (x.STATUS == BIZ_ERP_SALE_OUT.STATUSs.INIT.GetValue() || x.STATUS == BIZ_ERP_SALE_OUT.STATUSs.WORKING.GetValue()) && x.AUTH_ORG == orgcode) .WhereIF(!billcode.IsNullOrEmpty(), x => x.BILLCODE.Contains(billcode)) .OrderByDescending(x => x.UPDATE_TIME.ToString("yyyy-MM-dd")) .OrderBy(x => x.REMARK == "L40774" ? 0 : 1) .OrderBy(x => x.SOURCECODE == null ? 1 : 0) .OrderBy(x => x.CREATE_TIME) .ToPage(pageIndex, pageSize); action.Data = query; return action; } } }