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;
}
}
}