using Apache.NMS.ActiveMQ.Commands;
using MailKit.Search;
using Newtonsoft.Json;
using Org.BouncyCastle.Crypto;
using Rhea.Common;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Tiger.Business.SqlSugarHepler;
using Tiger.IBusiness;
using Tiger.Model;
using Tiger.Model.DTO;
using Tiger.Model.Entitys.MES;
using Tiger.Model.Entitys.WMS.DTOS;
namespace Tiger.Business.WMS
{
///
///
///
public class MaterialInfoBusiness : BizSqlsugar, IMaterialInfoBusiness
{
///
/// 最大插入数
///
public const int MaxCount = 1000;
///
/// T100接口URL
///
public string t100Url { get; set; } = @"http://172.18.8.11/wstopprd/ws/r/awsp920";
///
///
///
public readonly ITrasferInfoBusiness _transferBus;
///
///
///
public readonly IOtherOutInfoBusiness _otherBus;
///
///
///
public readonly IProductInputBusiness _inputBus;
///
///
///
///
///
///
public MaterialInfoBusiness(ITrasferInfoBusiness transferBus, IOtherOutInfoBusiness otherBus, IProductInputBusiness inputBus)
{
_transferBus = transferBus;
_otherBus = otherBus;
_inputBus = inputBus;
}
///
/// 从T100获取物料信息数据
///
///
public int GetMaterialFromT100(InputDTO input)
{
Logger.Scheduler.Info("物料信息开始同步。。。数据检查进行中。。。");
CheckData(input);
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO(),
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterDTO()
{
site = input.site,
startdt = input.startdt?.ToString("yyyyMMdd"),
enddt = input.enddt?.ToString("yyyyMMdd")
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"物料信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
#endregion 发起请求
Logger.Scheduler.Info($"发起请求。。。{result.payload.std_data.parameter?.@return.Count()} 条数据正在等待同步。。。");
var dataModel = new List();
if (!result.payload.std_data.parameter.IsNullOrEmpty() && result.payload.std_data.parameter?.@return.Count() > 0)
{
foreach (var item in result.payload.std_data.parameter.@return)
{
dataModel.Add(new BAS_ITEM()
{
AUTH_ORG = input.site,
ITEM_CODE = item.imaf001,
ITEM_NAME = item.imaal003,
ITEM_VER = item.imaal004,
UNIT = item.imaf053,
ITEM_TYPE = item.imaa004,
SPEC = item.imaa004_desc,
IS_ACTIVE = "Y",
DLVY_TYPE = 1,
ENABLE_FIFO = "Y",
CTRL_MODE = "0",
REMARK = "WMS"
});
}
}
Logger.Scheduler.Info($"数据正在同步。。。");
int sql = 0;
if (dataModel.Any())
{
var db = Business.Biz.Db;
var lst = dataModel.Select(i => i.ITEM_CODE).Distinct().ToList();
#region 查询重复数据
var hostorydata = db.Queryable().Where(i => lst.Contains(i.ITEM_CODE)).ToList();// 获取旧数据
#endregion 查询重复数据
var res = hostorydata.Select(i => i.ITEM_CODE).Distinct().ToList();// 获取重复的物料编号
var needinsertCode = lst.Except(res);// 取差集
var needUpdate = dataModel.Where(i => res.Contains(i.ITEM_CODE)).ToList();// 需要更新的数据
var needInsert = dataModel.Where(i => needinsertCode.Contains(i.ITEM_CODE)).ToList();// 需要插入的数据
foreach (var item in needUpdate)
{
item.ID = hostorydata.Where(i => i.ITEM_CODE == item.ITEM_CODE).FirstOrDefault()?.ID;
}
if (needInsert is { Count: > 0 })
{
sql += InsertDataTable(needInsert, db);// 数据插入 数量超过1000时,自动切换为限量插入
}
if (needUpdate is { Count: > 0 })
{
sql += UpdateDataTable(needUpdate, db);
}
}
Logger.Scheduler.Info($"数据同步已完成。。。");
return sql;
}
///
/// 从T100获取送检单信息
///
///
public int GetInspectionNoFromT100()
{
var DB = Biz.Db;
var dataList = DB.Queryable().Where(i => i.QCSTATUS == 2 && !string.IsNullOrWhiteSpace(i.ERP_BILL_CODE)).ToList();
Logger.Scheduler.Info("送检单信息开始同步。。。数据检查进行中。。。");
if (!dataList.Any())
{
Logger.Scheduler.Info("未能查询到有效的送检单号,请确认!");
//throw new Exception($"未能查询到有效的送检单号,请确认!");
}
var dataLst = new List();// 返回数据集合
foreach (var item in dataList)
{
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
//CompanyId = "XCSJ"
CompanyId = item.AUTH_ORG
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getqc"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterInspectionDTO()
{
qcbadocno = item.ERP_BILL_CODE
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"送检单信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
//throw new Exception(ex.Message.ToString());
}
#endregion 发起请求
if (result.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var itemData in result.payload.std_data.parameter.@return)
{
var entity = item;
entity.QCRESULT = itemData.qcba022;
entity.RECEIVEQTY = itemData.qcba023;
entity.REJECTQTY = itemData.qcba027;
dataLst.Add(entity);
}
}
}
if (dataLst.Any())
{
DI.Resolve().GetQcReq(dataLst);
}
return dataLst.Count();
}
///
/// 其他出库单定时推送给T100过账
///
///
public int GetOtherOutInfoToT100(InputDTO input)
{
var DB = Biz.Db;
var dataList = DB.Queryable().Where(i => i.STATUS == BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue() && string.IsNullOrWhiteSpace(i.ERP_BILL_CODE) && i.AUTH_ORG == input.site).ToList();
Logger.Scheduler.Info("其他出库单信息开始推送。。。数据检查进行中。。。");
if (!dataList.Any())
{
Logger.Scheduler.Info("调未能查询到有效的其他出库单号,同步结束");
return 0;
}
var billcodeLst = dataList.Select(i => i.BILLCODE).Distinct().ToList();
var detailData = DB.Queryable().Where(i => billcodeLst.Contains(i.BILLCODE)).ToList();// 获取明细数据
Logger.Scheduler.Info("其他出库单信息开始推送。。。");
foreach (var data in dataList)
{
var detailLst = detailData.Where(i => i.BILLCODE == data.BILLCODE).ToList();
var details = new List();
foreach (var detail in detailLst)
{
details.Add(new OtheroutInfoDTO()
{
inbbseq = detail.BILLLINE,
inbb001 = detail.ITEM_CODE,
inbb011 = detail.QTY > detail.PRQTY ? detail.PRQTY : detail.QTY
});
}
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO() { name = "wms_gen_aint301" },
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new OtherOutInfoParameterDTO()
{
inbadocno = data.BILLCODE,
inba002 = data.BILLDATE.ToString("yyyy/MM/dd"),
detail = details
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"其他出库单推送T100并过账时提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
//throw new Exception(ex.Message.ToString());
}
#endregion 发起请求
if (!string.IsNullOrWhiteSpace(result.payload.std_data?.parameter?.docno))
{
data.ERP_BILL_CODE = result.payload.std_data?.parameter?.docno;// 更新单号
}
if (result.payload.std_data?.execution.code == "S" && string.IsNullOrWhiteSpace(data.ERP_BILL_CODE))
{
data.ERP_BILL_CODE = "T100返回信息已过账";
}
}
DB.Updateable(dataList).ExecuteCommand();// 数据更新
Logger.Scheduler.Info("其他出库单信息推送完成");
return dataList.Count();
}
///
/// 销售出库单定时推送给T100过账
///
///
public int PutSaleOutInfoToT100(InputDTO input)
{
var DB = Biz.Db;
var dataList = DB.Queryable().Where(i => i.STATUS == BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue() && string.IsNullOrWhiteSpace(i.ERP_BILL_CODE) && i.AUTH_ORG == input.site).ToList();// 获取符合条件的销售出库单数据
Logger.Scheduler.Info("销售出库单信息开始推送。。。数据检查进行中。。。");
if (!dataList.Any())
{
Logger.Scheduler.Info("调未能查询到有效的销售出库单号,同步结束");
return 0;
}
var billcodeLst = dataList.Select(i => i.BILLCODE).Distinct().ToList();
var detailData = DB.Queryable().Where(i => billcodeLst.Contains(i.BILLCODE)).ToList();// 获取明细数据
Logger.Scheduler.Info("销售出库单信息开始推送。。。");
foreach (var data in dataList)
{
var detailLst = detailData.Where(i => i.BILLCODE == data.BILLCODE).ToList();
var details = new List();
foreach (var detail in detailLst)
{
details.Add(new SaleoutInfoDTO()
{
xmdlseq = "1",
xmdl001 = detail.BILLCODE,
xmdl002 = detail.BILLLINE,
xmdl008 = detail.ITEM_CODE,
xmdl018 = detail.QTY,
xmdl014 = detail.WAREHOUSECODE,
xmdl015 = "",
xmdl016 = "",
xmdl051 = ""
});
}
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_gen_axmt540"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new SaleInfoDTO()
{
xmdkdocno = "2424",
xmdkdocdt = data.BILLDATE.ToString("yyyy/MM/dd"),
xmdk001 = DateTime.Now.ToString("yyyy/MM/dd"),
xmdk003 = data.CREATE_USER,
xmdk004 = "",
xmdk005 = data.BILLCODE,
xmdk007 = data.SUPPLIER_CODE,
detail = details
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"销售出库单推送T100并过账时提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info($"销售出库单同步失败,失败原因:{ex.Message.ToString()}");
return 0;
}
#endregion 发起请求
if (!string.IsNullOrWhiteSpace(result.payload.std_data?.parameter?.docno))
{
data.ERP_BILL_CODE = result.payload.std_data?.parameter?.docno;// 更新单号
}
if (result.payload.std_data?.execution.code == "S" && string.IsNullOrWhiteSpace(data.ERP_BILL_CODE))
{
data.ERP_BILL_CODE = "T100返回信息已过账";
}
}
DB.Updateable(dataList).ExecuteCommand();// 数据更新
Logger.Scheduler.Info("销售出库单信息推送完成");
return dataList.Count();
}
///
/// 过账调拨单定时推送给T100
///
///
public int GetTrasferInfoToT100(InputDTO input)
{
var DB = Biz.Db;
//var jobData = DB.Queryable().Where(i => i.JobName == "ProductInputInfoFromT100").First();// 获取定时任务内容
//if (!jobData.IsNullOrEmpty() && jobData.ISRUNNING == 1)
//{
// Logger.Scheduler.Info("调拨定时任务正在执行中,本次任务已主动终止!");
// return -1;
//}
//else
//{
// jobData.ISRUNNING = 1;
// DB.Updateable(jobData).ExecuteCommand();// 如果当前定时任务不在执行中的状态,则在开始执行前,设定为执行中
//}
var dataList = DB.Queryable().
Where(i => i.STATUS == BIZ_WMS_TRANSFER.STATUSs.FINISHED.GetValue() && string.IsNullOrWhiteSpace(i.ERP_BILL_CODE) && i.AUTH_ORG == input.site)
.ToList();
Logger.Scheduler.Info("调拨单信息开始推送。。。数据检查进行中。。。");
if (!dataList.Any())
{
Logger.Scheduler.Info("调未能查询到有效的调拨单号,同步结束");
return 0;
}
var billcodeLst = dataList.Select(i => i.BILLCODE).Distinct().ToList();
var detailData = DB.Queryable().Where(i => billcodeLst.Contains(i.BILLCODE)).ToList();// 获取明细数据
var returnData = DB.Queryable().Where(i => billcodeLst.Contains(i.BILLCODE)).ToList();// 获取退料表头数据
var returnDetailData = DB.Queryable().Where(i => billcodeLst.Contains(i.BILLCODE)).ToList();// 获取退料表头数据
Logger.Scheduler.Info("调拨单信息开始推送。。。");
foreach (var data in dataList)
{
var detailLst = detailData.Where(i => i.BILLCODE == data.BILLCODE).ToList();
var details = new List();
foreach (var detail in detailLst)
{
details.Add(new TrasferDetailDTO()
{
indd101 = detail.SOURCECODE,
inddseq = detail.BILLLINE,
indd002 = detail.ITEM_CODE,
indd022 = detail.OUTWAREHOUSECODE,
indd023 = "",
indd024 = detail.BATCH_NO_IN,
indd103 = detail.OUTQTY.ToString(),
indd032 = detail.INWAREHOUSECODE,
indd033 = ""
});
}
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO() { name = "wms_gen_aint330" },
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterTrasferInfoDTO()
{
indcdocno = "1201",
indcdocdt = DateTime.Now.ToString("yyyy/MM/dd"),
indc004 = "L16225", //detailLst[0].CREATE_USER,
indc008 = data.SOURCECODE,
detail = details
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"调拨单主动过账提交Json: {requestJson},返回Json: {response.Message}");
var orderType = "领料单";
if (model.payload.std_data.parameter.indc008.ToString().Substring(0, 2) == "TU")
{
orderType = "退料单";
}
if (result.payload.std_data?.execution.code != "0")
{
//大于5次就不发邮件
if (data.HANDLED < 6)
{
Work.DoAsync(() =>
{
MailServiceApi _IMailServiceApi = new MailServiceApi();
_IMailServiceApi.SendMail(new MailBodyEntity
{
MailTextBody = $"Hi All,
{orderType}[{model.payload.std_data.parameter.indc008}]调拨主动过账失败,
T100返回消息:{result.payload.std_data.execution.description}",
MailBodyType = "Html",
MailFilePath = null,
Recipients = Biz.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 = $"{orderType}[{model.payload.std_data.parameter.indc008}]调拨主动过账失败",
Body = ""
},
new SendServerConfigurationEntity
{
SmtpHost = "mail.sharetronic.com",
SmtpPort = 25,
SenderAccount = "xcerp@sharetronic.com",
SenderPassword = "sha66666",
MailEncoding = "utf-8",
IsSsl = false
});
//保存到数据库
var db = Biz.Db;
var dbTran = db.UseTran(() =>
{
data.HANDLED++;
data.HANDLED_DATE = DateTime.Now;
db.Updateable(data, "EmailUser").UpdateColumns(t => new { t.HANDLED, t.HANDLED_DATE }).ExecuteCommand();
});
if (!dbTran.IsSuccess)
{
Logger.Scheduler.Info($"调拨单异常状态保存出错,报错内容:{dbTran.ErrorException.Message}");
}
});
}
}
}
catch (Exception ex)
{
Logger.Scheduler.Info($"调拨单创单过账失败,
T100返回消息:{result.payload.std_data.execution.description}
报错内容:{ex.Message}");
//throw new Exception(ex.Message.ToString());
}
#endregion 发起请求
var res = returnData.Where(i => i.BILLCODE == data.BILLCODE).FirstOrDefault();
var retuendetailData = returnDetailData.Where(i => i.BILLCODE == data.BILLCODE).ToList();
if (!string.IsNullOrWhiteSpace(result.payload.std_data?.parameter?.docno))
{
data.ERP_BILL_CODE = result.payload.std_data?.parameter?.docno;// 更新单号
foreach (var item in detailLst)
{
item.ERP_BILL_CODE = result.payload.std_data?.parameter?.docno;
}
DB.Updateable(detailLst).ExecuteCommand();
foreach (var item in retuendetailData)
{
item.BILLCODE = result.payload.std_data?.parameter?.docno;
}
DB.Updateable(retuendetailData).ExecuteCommand();
if (!res.IsNullOrEmpty())
{
res.ERP_BILL_CODE = result.payload.std_data?.parameter?.docno;// 更新退料表单号
DB.Updateable(res).ExecuteCommand();// 数据更新
}
}
if (result.payload.std_data?.execution.code == "S" && string.IsNullOrWhiteSpace(data.ERP_BILL_CODE))
{
data.ERP_BILL_CODE = "T100返回信息已过账";// 更新单号
}
Logger.Scheduler.Info($"调拨单号: {data.BILLCODE},T100返回单号: {result.payload.std_data?.parameter?.docno}");
DB.Updateable(data).ExecuteCommand();// 数据更新
}
Logger.Scheduler.Info("调拨单信息推送完成");
var jobData = DB.Queryable().Where(i => i.JobName == "TrasferInfoToT100").First();// 获取定时任务内容
if (!jobData.IsNullOrEmpty())
{
jobData.ISRUNNING = 0;
jobData.LASTRUNTIME = DateTime.Now;
DB.Updateable(jobData).ExecuteCommand();// 如果当前定时任务不在执行中的状态,则在开始执行前,设定为执行中
}
return dataList.Count();
}
///
/// 过账调拨单定时推送给T100——直接过账
///
///
public int GetTrasferInfoToT100Plan2(InputDTO input)
{
var DB = Biz.Db;
var dataList = DB.Queryable().Where(i => i.STATUS == BIZ_WMS_TRANSFER.STATUSs.COMPLETE.GetValue() && string.IsNullOrWhiteSpace(i.ERP_BILL_CODE) && i.AUTH_ORG == input.site).ToList();
Logger.Scheduler.Info("直接过账调拨单信息开始推送。。。数据检查进行中。。。");
if (!dataList.Any())
{
Logger.Scheduler.Info("调未能查询到有效的调拨单号,同步结束");
return 0;
}
var billcodeLst = dataList.Select(i => i.BILLCODE).Distinct().ToList();
var detailData = DB.Queryable().Where(i => billcodeLst.Contains(i.BILLCODE)).ToList();// 获取明细数据
Logger.Scheduler.Info("调拨单信息开始推送。。。");
foreach (var data in dataList)
{
var detailLst = detailData.Where(i => i.BILLCODE == data.BILLCODE).ToList();
var details = new List();
foreach (var detail in detailLst)
{
details.Add(new TrasferDetailDTO()
{
inddseq = detail.BILLLINE,
indd103 = detail.OUTQTY.ToString(),
});
}
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO() { name = "wms_gen_aint330S" },
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterTrasferInfoDTO()
{
indcdocno = data.BILLCODE,
indc022 = DateTime.Now.ToString("yyyy/MM/dd"),
detail = details
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"调拨单过账提交Json: {requestJson},调拨单号:{data.BILLCODE},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info($"调拨单直接过账失败,
T100返回消息:{result.payload.std_data.execution.description}
报错内容:{ex.Message}");
//throw new Exception(ex.Message.ToString());
}
#endregion 发起请求
var Result = string.Empty;
if (!string.IsNullOrWhiteSpace(result.payload.std_data?.parameter?.docno))
{
Result = result.payload.std_data?.parameter?.docno;
data.ERP_BILL_CODE = result.payload.std_data?.parameter?.docno;// 更新单号
Logger.Scheduler.Info($"调拨单号:{data.BILLCODE}对应的T100返回单号:{result.payload.std_data?.parameter?.docno}已更新");
}
if (result.payload.std_data?.execution.code == "S" && string.IsNullOrWhiteSpace(data.ERP_BILL_CODE))
{
data.ERP_BILL_CODE = "T100返回信息已过账";
Result = "T100返回信息已过账";
Logger.Scheduler.Info($"调拨单号:{data.BILLCODE}对应的T100返回信息:{"T100返回信息已过账"}已更新");
}
if (!string.IsNullOrWhiteSpace(Result))
{
DB.Updateable(data).ExecuteCommand();// 数据更新
}
}
Logger.Scheduler.Info("调拨单信息推送完成");
return dataList.Count();
}
///
/// 从T100获取调拨单信息
///
///
public int GetTrasferInfoFromT100(InputDTO input)
{
Logger.Scheduler.Info("调拨单信息开始同步。。。数据检查进行中。。。");
CheckData(input);
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_gettransm"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterDTO()
{
site = input.site,
startdt = input.startdt?.ToString("yyyy-MM-dd"),
enddt = input.enddt?.ToString("yyyy-MM-dd")
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"调拨单头表信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
//throw new Exception(ex.Message.ToString());
}
#endregion 发起请求
Logger.Scheduler.Info($"发起请求。。。{result.payload.std_data.parameter?.@return.Count()} 条数据正在等待同步。。。");
var masterData = new List();
var detailData = new List();
if (result.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var item in result.payload.std_data.parameter.@return)
{
#region 循环调用T10调拨单信息明细数据接口
var detail = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_gettransd"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterTrasferInfoDetailDTO()
{
indddocno = item.indcdocno
}
}
}
};
#region 主数据填充
var transferData = new BIZ_WMS_TRANSFER()
{
ID = Guid.NewGuid().ToString("N"),
AUTH_ORG = input.site,
BILLCODE = item.indcdocno,
BILLDATE = item.indcdocdt.ToDateTime(),
CREATE_USER = "T100-" + item.indc004
};
#endregion 主数据填充
var detailResult = new T100ActionResult>();// 采购单明细数据
#endregion 循环调用T10调拨单信息明细数据接口
#region 从T100获取明细数据
try
{
var requestJson = JsonConvert.SerializeObject(detail);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
detailResult = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"调拨单明细表信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
//throw new Exception(ex.Message.ToString());
}
#endregion 从T100获取明细数据
#region 明细实体填充
if (detailResult.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var ser in detailResult.payload.std_data.parameter?.@return)
{
detailData.Add(new BIZ_WMS_TRANSFER_DTL()
{
BILLCODE = ser.indddocno,
BILLLINE = ser.inddseq.ToString(),
ITEM_CODE = ser.indd002,
UNITCODE = ser.indd006,
PRQTY = ser.indd103,
AUTH_ORG = input.site,
OUTWAREHOUSECODE = ser.indd022,
INWAREHOUSECODE = ser.indd032
});
transferData.INWAREHOUSECODE = ser.indd032;
transferData.OUTWAREHOUSECODE = ser.indd022;
}
}
#endregion 明细实体填充
masterData.Add(transferData);
}
}
var inputdto = new List();
#region 请求实体构建
foreach (var item in masterData)
{
var detaildatas = detailData.Where(i => i.BILLCODE == item.BILLCODE).ToList();
var detaildto = new List();
foreach (var detailitem in detaildatas)
{
detaildto.Add(new TrasferInfoDetailDTO()
{
BILLCODE = detailitem.BILLCODE,
BILLLINE = Convert.ToInt32(detailitem.BILLLINE),
LINESTATUS = detailitem.LINESTATUS.ToString(),
OUTQTY = detailitem.OUTQTY,
ITEM_CODE = detailitem.ITEM_CODE,
UNITCODE = detailitem.UNITCODE,
PRQTY = detailitem.PRQTY,
OUTWAREHOUSECODE = detailitem.OUTWAREHOUSECODE,
INWAREHOUSECODE = detailitem.INWAREHOUSECODE,
CREATE_TIME = DateTime.Now
});
}
inputdto.Add(new TrasferInfoDTO()
{
AUTH_ORG = input.site,
BILLCODE = item.BILLCODE,
BILLDATE = item.BILLDATE,
OUTWAREHOUSECODE = item.OUTWAREHOUSECODE,
INWAREHOUSECODE = item.INWAREHOUSECODE,
CREATE_TIME = item.CREATE_TIME,
details = detaildto
});
}
#endregion 请求实体构建
_transferBus.SaveTrasferInfo(inputdto);
Logger.Scheduler.Info($"{detailData.Count()} 条调拨单明细数据正在等待同步。。。");
return 0;
}
///
/// 从T100获取出库单信息
///
///
public int GetOtherOutInfoFromT100(InputDTO input)
{
Logger.Scheduler.Info("出库单信息开始同步。。。数据检查进行中。。。");
CheckData(input);
#region 创建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getmiscissm"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterDTO()
{
site = input.site,
startdt = input.startdt?.ToString("yyyy-MM-dd"),
enddt = input.enddt?.ToString("yyyy-MM-dd")
}
}
}
};
#endregion 创建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"出库单头表信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
#endregion 发起请求
Logger.Scheduler.Info($"发起请求。。。{result.payload.std_data.parameter?.@return.Count()} 条数据正在等待同步。。。");
var masterData = new List();
var detailData = new List();
if (result.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var item in result.payload.std_data.parameter.@return)
{
#region 循环调用T100出库单明细数据接口
var detail = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getmiscissd"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterOtherOutInfoDetailDTO()
{
inbbdocno = item.inbadocno
}
}
}
};
#region 主数据填充
var transferData = new BIZ_ERP_OTH_OUT()
{
ID = Guid.NewGuid().ToString("N"),
AUTH_ORG = input.site,
BILLCODE = item.inbadocno,
BILLDATE = item.inbadocdt.ToDateTime(),
CREATE_USER = "T100-" + item.inba003
};
#endregion 主数据填充
var detailResult = new T100ActionResult>();// 出库单明细数据
#endregion 循环调用T100出库单明细数据接口
#region 从T100获取明细数据
try
{
var requestJson = JsonConvert.SerializeObject(detail);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
detailResult = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"出库单明细信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
#endregion 从T100获取明细数据
#region 明细实体填充
if (detailResult.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var ser in detailResult.payload.std_data.parameter?.@return)
{
detailData.Add(new BIZ_ERP_OTH_OUT_DTL()
{
AUTH_ORG = input.site,
BILLCODE = ser.inbbdocno,
BILLLINE = ser.inbbseq.ToString(),
ITEM_CODE = ser.inbb001,
UNITCODE = ser.inbb010,
QTY = ser.inbb011,
PRQTY = ser.inbb011,
WAREHOUSECODE = ser.inbb007
});
}
}
#endregion 明细实体填充
masterData.Add(transferData);
}
}
var inputdto = new List();
#region 请求实体构建
foreach (var item in masterData)
{
var detaildatas = detailData.Where(i => i.BILLCODE == item.BILLCODE).ToList();
var detaildto = new List();
foreach (var detailitem in detaildatas)
{
detaildto.Add(new DetailDTO()
{
AUTH_ORG = input.site,
BILLCODE = detailitem.BILLCODE,
BILLLINE = Convert.ToInt32(detailitem.BILLLINE),
LINESTATUS = detailitem.LINESTATUS,
ITEM_CODE = detailitem.ITEM_CODE,
UNITCODE = detailitem.UNITCODE,
PRQTY = detailitem.PRQTY,
WAREHOUSECODE = detailitem.WAREHOUSECODE,
CREATE_TIME = DateTime.Now,
CREATE_USER = item.CREATE_USER
});
}
inputdto.Add(new otherOutInfoDTO()
{
AUTH_ORG = input.site,
BILLCODE = item.BILLCODE,
BILLDATE = item.BILLDATE,
CREATE_USER = item.CREATE_USER,
CREATE_TIME = item.CREATE_TIME,
Details = detaildto
});
}
#endregion 请求实体构建
Logger.Scheduler.Info($"{detailData.Count()} 条出库单明细数据正在等待同步。。。");
_otherBus.SaveOthOutInfo(inputdto);
Logger.Scheduler.Info($"数据同步已完成。。。");
return 0;
}
///
/// 数据检查
///
///
///
public void CheckData(InputDTO input)
{
if (string.IsNullOrWhiteSpace(input.site))
{
Logger.Scheduler.Info($"厂区不允许为空!");
//throw new Exception($"厂区不允许为空!");
}
//if (!input.startdt.HasValue || !input.enddt.HasValue)
//{
// throw new Exception($"起止时间不允许为空!");
//}
}
///
/// 从T100获取采购单信息
///
///
///
///
public int GetPurchaseInfoFromT100(InputDTO input)
{
Logger.Scheduler.Info("采购单信息开始同步。。。数据检查进行中。。。");
CheckData(input);
#region 获取采购单主数据DTO
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getpurd"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterDTO()
{
site = input.site,
startdt = input.startdt?.ToString("yyyyMMdd"),
enddt = input.enddt?.ToString("yyyyMMdd")
}
}
}
};
#endregion 获取采购单主数据DTO
var result = new T100ActionResult>();// 采购单主数据
#region 从T100获取主数据
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"采购单提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
Logger.Scheduler.Info($"发起请求。。。{result.payload.std_data.parameter?.@return.Count()} 条采购单数据正在等待同步。。。");
var masterData = new List();// 采购单主数据表
var detailData = new List();// 采购单明细数据表
#endregion 从T100获取主数据
if (result.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var item in result.payload.std_data.parameter.@return)
{
#region 循环调用T100采购单明细数据接口
var detail = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getpurd_d"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterPurchaseDTO()
{
pmdldocno = item.pmdldocno
}
}
}
};
#region 主数据填充
var uid = Guid.NewGuid().ToString("N");
masterData.Add(new BIZ_ERP_PO()
{
ID = uid,
AUTH_ORG = input.site,
BILLCODE = item.pmdldocno,
BILLDATE = item.pmdldocdt.ToDateTime(),
BILLTYPE = Convert.ToInt32(item.pmdldoctype),
//STATUS = Convert.ToInt32(item.pmdlstus), // 状态无法转换
CURRENCY = item.pmdl015,
EXCHANGERATE = item.pmdl016.ToDecimal(),
PURDEPTCODE = item.pmdl003,
PUREMPLOYEECODE = item.pmdl002,
SUPPLIERCODE = item.pmdl004,
REMARK = item.pmdl044
});
#endregion 主数据填充
var detailResult = new T100ActionResult>();// 采购单明细数据
#endregion 循环调用T100采购单明细数据接口
#region 从T100获取明细数据
try
{
var requestJson = JsonConvert.SerializeObject(detail);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
detailResult = JsonConvert.DeserializeObject>>(response.Message);
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
#endregion 从T100获取明细数据
#region 明细实体填充
if (detailResult.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var ser in detailResult.payload.std_data.parameter?.@return)
{
detailData.Add(new BIZ_ERP_PO_DTL()
{
BILLID = uid,
BILLCODE = ser.pmdndocno,
BILLLINE = ser.pmdnseq.ToString(),
MATERIALCODE = ser.pmdn001,
UNITCODE = ser.pmdn006,
//LINESTATUS = ser.pmdn007,
//PRQTY = ser.
QTY = ser.pmdn007,
PROMISEDATE = ser.pmdn012.ToDateTime(),
REMARK = ser.pmdn050,
AUTH_ORG = input.site
});
}
}
#endregion 明细实体填充
}
}
Logger.Scheduler.Info($"{detailData.Count()} 条采购单明细数据正在等待同步。。。");
#region 数据添加
int sql = 0;
//var db = Business.Biz.Db;
var db = Biz.DataSource["WMS57"].Client;
if (masterData.Any())
{
var lst = masterData.Select(i => new { i.BILLCODE, i.BILLDATE, i.BILLTYPE }).Distinct().ToList();
//var exp = Expressionable.Create();// 创建表达式树
//var expDetail = Expressionable.Create();// 创建表达式树
#region 主表数据同步
#region 查询重复数据
//foreach (var item in lst)
//{
// exp.Or(i => i.BILLCODE == item.BILLCODE && i.BILLDATE == item.BILLDATE && i.BILLTYPE == item.BILLTYPE);// 追加条件
// expDetail.Or(i => i.BILLCODE == item.BILLCODE);// 追加条件
//}
Logger.Scheduler.Info($"数据正在同步中。。。");
var oldbillcodes = masterData.Select(i => i.BILLCODE).Distinct().ToList();
var hostorydata = db.Queryable().Where(i => oldbillcodes.Contains(i.BILLCODE) && i.AUTH_ORG == input.site).ToList();// 获取旧数据
#endregion 查询重复数据
var masterLst = hostorydata.Select(i => i.BILLCODE).Distinct().ToList();
var needInsert = masterData.Where(i => !masterLst.Contains(i.BILLCODE)).ToList();// 需要插入的数据
//var needUpdate = hostorydata.Except(masterData).ToList();// 需要更新的数据
var needUpdate = masterData.Where(i => masterLst.Contains(i.BILLCODE)).ToList();// 需要更新的数据
foreach (var item in needUpdate)
{
item.ID = hostorydata.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.ID;
//item.AUTH_ORG = input.site;
//item.BILLCODE = masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.BILLCODE;
//item.BILLDATE = (masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.BILLDATE).ToDateTime();
//item.BILLTYPE = Convert.ToInt32(masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.BILLTYPE);
//item.CURRENCY = masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.CURRENCY;
//item.EXCHANGERATE = (masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.EXCHANGERATE).ToDecimal();
//item.PURDEPTCODE = masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.PURDEPTCODE;
//item.PUREMPLOYEECODE = masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.PUREMPLOYEECODE;
//item.SUPPLIERCODE = masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.SUPPLIERCODE;
//item.REMARK = masterData.Where(i => i.BILLCODE == item.BILLCODE).FirstOrDefault()?.REMARK;
}
if (needInsert is { Count: > 0 })
{
sql += BizSqlsugar.InsertDataTable(needInsert, db);
}
if (needUpdate is { Count: > 0 })
{
var needUpdate1 = needUpdate.Where(i => !string.IsNullOrWhiteSpace(i.BILLCODE)).ToList();
sql += BizSqlsugar.UpdateDataTable(needUpdate1, db);
}
#endregion 主表数据同步
#region 明细表数据同步
//var detailCode = needUpdate.Select(i => i.BILLCODE).Distinct().ToList();
var hostoryDetailData = db.Queryable().Where(i => masterLst.Contains(i.BILLCODE)).ToList();// 获取旧数据
if (hostoryDetailData is { Count: > 0 })
{
db.Deleteable(hostoryDetailData).ExecuteCommand();// 清理旧的明细数据,插入新的明细数据
}
if (detailData.Any())
{
//sql = db.Insertable(detailData).ExecuteCommand();
sql += BizSqlsugar.InsertDataTable(detailData, db);
}
#endregion 明细表数据同步
}
#endregion 数据添加
Logger.Scheduler.Info($"数据同步已完成。。。");
return sql;
}
///
/// 从T100获取客户信息
///
///
///
///
public int GetCustomerInfoFromT100(InputDTO input)
{
Logger.Scheduler.Info("客户信息开始同步。。。数据检查进行中。。。");
CheckData(input);
#region 构建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getcust"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterDTO()
{
site = input.site,
startdt = input.startdt?.ToString("yyyyMMdd"),
enddt = input.enddt?.ToString("yyyyMMdd")
}
}
}
};
#endregion 构建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"客户信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
Logger.Scheduler.Info($"发起请求。。。{result.payload.std_data.parameter?.@return.Count()} 条客户数据正在等待同步。。。");
#endregion 发起请求
#region 实体填充
var insertData = new List();
if (result.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var item in result.payload.std_data.parameter.@return)
{
insertData.Add(new BAS_CUSTOMER()
{
CUST_CODE = item.pmab001,
CUST_NAME_CN = item.pmaal003
});
}
}
#endregion 实体填充
Logger.Scheduler.Info($"数据正在同步中。。。");
int sql = 0;
if (insertData.Any())
{
var db = Business.Biz.Db;
//var lst = insertData.Select(i => new { i.CUST_CODE, i.CUST_NAME_CN }).Distinct().ToList();
//var exp = Expressionable.Create();// 创建表达式树
#region 查询重复数据
//foreach (var item in lst)
//{
// exp.Or(i => i.CUST_CODE == item.CUST_CODE && i.CUST_NAME_CN == item.CUST_NAME_CN);// 追加条件
//}
var hostorydata = db.Queryable().Where(i => i.CREATE_TIME >= input.startdt).ToList();// 获取旧数据
#endregion 查询重复数据
var res = hostorydata.Select(i => i.CUST_CODE).Distinct().ToList();
var needInsert = insertData.Where(i => !res.Contains(i.CUST_CODE)).ToList(); // 需要插入的数据
var needUpdate = insertData.Where(i => res.Contains(i.CUST_CODE)).ToList();// 需要更新的数据
foreach (var item in needUpdate)
{
item.ID = hostorydata.Where(i => i.CUST_CODE == item.CUST_CODE).FirstOrDefault()?.ID;
}
if (needInsert is { Count: > 0 })
{
sql += BizSqlsugar.InsertDataTable(needInsert, db);
}
if (needUpdate is { Count: > 0 })
{
sql += BizSqlsugar.UpdateDataTable(needUpdate, db);
}
}
Logger.Scheduler.Info($"数据同步已完成。。。");
return sql;
}
///
/// 从T100获取仓库代码信息
///
///
///
///
public int GetWarehouseCodeInfoFromT100(InputDTO input)
{
Logger.Scheduler.Info("仓库信息开始同步。。。数据检查进行中。。。");
CheckData(input);
#region 构建请求实体
var model = new BodyDTO>>()
{
host = new HostDTO(),
datakey = new DataKey()
{
EntId = "88",
CompanyId = input.site
},
service = new ServiceDTO()
{
name = "wms_erp_wms_getwh"
},
payload = new PayLoad>()
{
std_data = new Std_Data()
{
parameter = new ParameterDTO()
{
site = input.site,
startdt = input.startdt?.ToString("yyyyMMdd"),
enddt = input.enddt?.ToString("yyyyMMdd")
}
}
}
};
#endregion 构建请求实体
#region 发起请求
var result = new T100ActionResult>();
try
{
var requestJson = JsonConvert.SerializeObject(model);
var response = HttpHelper.PostAsync(t100Url, requestJson).Result;
result = JsonConvert.DeserializeObject>>(response.Message);
Logger.Scheduler.Info($"仓库信息同步提交Json: {requestJson},返回Json: {response.Message}");
}
catch (Exception ex)
{
Logger.Scheduler.Info(ex.Message.ToString());
}
Logger.Scheduler.Info($"发起请求。。。{result.payload.std_data.parameter?.@return.Count()} 条仓库信息正在等待同步。。。");
#endregion 发起请求
#region 实体填充
var insertData = new List();
if (result.payload.std_data.parameter != null && result.payload.std_data.parameter.@return.Any())
{
foreach (var item in result.payload.std_data.parameter.@return)
{
insertData.Add(new WMS_WAREHOUSE()
{
ORG_CODE = input.site,
WH_CODE = item.inaa001,
WH_NAME = item.inayl003,
AUTH_ORG = input.site
});
}
}
#endregion 实体填充
Logger.Scheduler.Info($"数据正在同步中。。。");
int sql = 0;
if (insertData.Any())
{
var db = Business.Biz.Db;
var codelst = insertData.Select(i => i.WH_CODE).Distinct().ToList();
#region 查询重复数据
var hostorydata = db.Queryable().Where(i => codelst.Contains(i.WH_CODE)).ToList();// 获取旧数据
#endregion 查询重复数据
var res = hostorydata.Select(i => i.WH_CODE).Distinct().ToList();
var needInsert = insertData.Where(i => !res.Contains(i.WH_CODE)).ToList(); // 需要插入的数据
var newwhcode = insertData.Select(i => i.WH_CODE).Distinct().ToList();
var needupdatecode = res.Intersect(newwhcode);// 需要更新的仓库代码
var needUpdate = hostorydata.Where(i => needupdatecode.Contains(i.WH_CODE)).ToList();// 需要更新的数据
foreach (var item in needUpdate)
{
var newdata = insertData.Where(i => i.WH_CODE == item.WH_CODE).FirstOrDefault();
var newOrg = newdata?.ORG_CODE;
if (item.ORG_CODE != newOrg)
{
item.ORG_CODE += "," + newOrg;
}
item.WH_NAME = newdata.WH_NAME;
item.AUTH_ORG = input.site;
}
if (needInsert is { Count: > 0 })
{
sql += BizSqlsugar.InsertDataTable(needInsert, db);
}
if (needUpdate is { Count: > 0 })
{
sql += BizSqlsugar.UpdateDataTable(needUpdate, db);
}
}
Logger.Scheduler.Info($"数据同步已完成。。。");
return sql;
}
///
/// 从MES获取成品入库信息
///
///
public int ProductInputInfoFromT100()
{
Logger.Scheduler.Info($"成品入库同步开始。。。");
var db = Biz.DataSource["MES"].Client;
var ytdb = Biz.DataSource["YTMES"].Client;
var DB = Biz.DataSource["WMS57"].Client;
var data = db.Queryable().Where(i => i.STOCK_NO.Contains("-")).ToList();// 所有的成品入库单
var ytdata = ytdb.Queryable().Where(i => i.STOCK_NO.Contains("-")).ToList();// 所有的成品入库单
data.AddRange(ytdata);
if (!data.Any())
{
Logger.Scheduler.Info($"未能查询到成品入库单号,同步结束。。。");
return -1;
}
//var data1 = data?.Where(i => i.UP_FLAG == 1).Select(i => i.STOCK_NO).Distinct().ToList();// 所有已经过账的单号
var data2 = data?.Where(i => i.UP_FLAG == 0).Select(i => i.STOCK_NO).Distinct().ToList();// 所有未过账的单号
var stocknoList = data2;//.Except(data1).ToList(); // 单号集合
var sourceData1 = db.Queryable().Where(i => stocknoList.Contains(i.STOCK_NO)).ToList();
var ytsourceData1 = ytdb.Queryable().Where(i => stocknoList.Contains(i.STOCK_NO)).ToList();
sourceData1.AddRange(ytsourceData1);
var sourceData2 = db.Queryable().Where(i => stocknoList.Contains(i.STOCK_NO))
.Select(i => new MESDTO()
{
Stock_No = i.STOCK_NO,
SERIAL_NUMBER = i.SERIAL_NUMBER,
CARTON_NO = i.CARTON_NO,
PALLET_NO = i.PALLET_NO,
IN_STATION_TIME = i.IN_STATION_TIME,
Model_Name = i.MODEL_NAME
}).ToList();
var ytsourceData2 = ytdb.Queryable().Where(i => stocknoList.Contains(i.STOCK_NO))
.Select(i => new MESDTO()
{
Stock_No = i.STOCK_NO,
SERIAL_NUMBER = i.SERIAL_NUMBER,
CARTON_NO = i.CARTON_NO,
PALLET_NO = i.PALLET_NO,
IN_STATION_TIME = i.IN_STATION_TIME,
Model_Name = i.MODEL_NAME
}).ToList();
sourceData2.AddRange(ytsourceData2);
var wmsstocknoData = DB.Queryable().Where(i => stocknoList.Contains(i.BILLCODE) && i.PRQTY != i.INSTOCKQTY).ToList();
var wmsstocknoList = wmsstocknoData.Select(i => i.BILLCODE).Distinct().ToList();
int sqn = 0;
foreach (var stockno in wmsstocknoList)
{
var palletnoList = sourceData2.Where(i => i.Stock_No == stockno).Select(i => i.PALLET_NO).Distinct().ToList();
foreach (var palletno in palletnoList)
{
var palletnoData = sourceData2.Where(i => i.Stock_No == stockno && i.PALLET_NO == palletno).ToList();
var detail = new List();
#region 明细数据
foreach (var item in palletnoData)
{
sqn++;
detail.Add(new ProductInputDetailDTO()
{
SN = item.SERIAL_NUMBER,
Unit = sourceData1.FirstOrDefault(i => i.STOCK_NO.ToLower() == stockno.ToLower())?.UNIT,
Carton = item.CARTON_NO,
Pallet = item.PALLET_NO,
Location = sourceData1.FirstOrDefault(i => i.STOCK_NO.ToLower() == stockno.ToLower())?.WMS_LOC.ToUpper().Replace(" ", ""),
ProdDate = item.IN_STATION_TIME
});
}
#endregion 明细数据
#region 构建请求实体
var WarehouseCode = sourceData1.Where(i => i.STOCK_NO == stockno && !string.IsNullOrWhiteSpace(i.AREA)).ToList()[0].AREA;
var model = new ProductInputDTO()
{
UserCode = sourceData1.Where(i => i.STOCK_NO == stockno && !string.IsNullOrWhiteSpace(i.EMP_NO)).ToList()[0].EMP_NO,
WorkOrder = stockno,
WarehouseCode = sourceData1.Where(i => i.STOCK_NO == stockno && !string.IsNullOrWhiteSpace(i.AREA)).ToList()[0].AREA,
ITEM_MODEL = sourceData2.Where(i => i.Stock_No == stockno && !string.IsNullOrWhiteSpace(i.Model_Name)).ToList()[0].Model_Name,
ItemCode = sourceData1.Where(i => i.STOCK_NO == stockno && !string.IsNullOrWhiteSpace(i.KP_NO)).ToList()[0].KP_NO,
details = detail
};
#endregion 构建请求实体
var updateData = data.Where(i => i.STOCK_NO == stockno && i.PALLET_NO == palletno).ToList();// 记录表中对应的数据记录
try
{
var msg = _inputBus.GetProductInputInfo(model);
}
catch (Exception ex)
{
foreach (var item in updateData)
{
item.UP_MSG = ex.Message.ToString();
item.UP_TIME = DateTime.Now;
}
db.Updateable(updateData).WhereColumns(i => new { i.PALLET_NO }).ExecuteCommand();
if (stockno.Contains("YT"))
{
ytdb.Updateable(updateData).WhereColumns(i => new { i.PALLET_NO }).ExecuteCommand();
}
Logger.Scheduler.Info($"数据同步失败,单号:{stockno}\t栈板号:{palletno},失败原因:{ex.Message.ToString()}。。。");
//UpdateDataTable(updateData, db);
continue;
}
foreach (var item in updateData)
{
item.UP_FLAG = 1;
item.UP_TIME = DateTime.Now;
}
if (updateData.Count > 0)
{
if (stockno.Contains("YT"))
{
ytdb.Updateable(updateData).WhereColumns(i => new { i.PALLET_NO }).ExecuteCommand();
}
else
{
db.Updateable(updateData).WhereColumns(i => new { i.PALLET_NO }).ExecuteCommand();
}
//UpdateDataTable(updateData, db);
}
Logger.Scheduler.Info($"数据同步成功,单号:{stockno}\t栈板号:{palletno}。。。");
}
}
var jobData = DB.Queryable().Where(i => i.JobName == "ProductInputInfoFromT100").First();// 获取定时任务内容
if (!jobData.IsNullOrEmpty())
{
jobData.ISRUNNING = 0;
jobData.LASTRUNTIME = DateTime.Now;
DB.Updateable(jobData).ExecuteCommand();// 如果当前定时任务不在执行中的状态,则在开始执行前,设定为执行中
}
return sqn;
}
///
/// 获取物料信息数据
///
///
///
///
public async Task> GetMaterialInfo(MaterialDTO input)
{
var db = Biz.DataSource["WMS57"].Client;
var data = await db.Queryable()
.WhereIF(!input.ITEM_CODE.IsNullOrEmpty(), i => i.ITEM_CODE.ToLower().Contains(input.ITEM_CODE.ToLower()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ITEM_NAME), i => i.ITEM_NAME.Contains(input.ITEM_NAME))
.Select().ToListAsync();
return data;
}
///
/// 更新有效期/预存期
///
///
///
public int UpdateTime(MaterialDTO input)
{
CheckTimeData(input);
var db = Biz.DataSource["WMS57"].Client;
var data = db.Queryable()
.WhereIF(!input.ITEM_CODE.IsNullOrEmpty(), i => i.ITEM_CODE.ToLower().Contains(input.ITEM_CODE.ToLower()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ITEM_NAME), i => i.ITEM_NAME.Contains(input.ITEM_NAME))
.Select(i => new MaterialDTO()
{
Id = i.ID.SelectAll()
}).ToList();
foreach (var item in data)
{
item.VALIDITY_DAYS = input.VALIDITY_DAYS;
item.DepositDays = input.DepositDays;
}
var ids = data.Select(i => i.Id).Distinct().ToList();
var res = db.Updateable(i => new BAS_ITEM() { VALIDITY_DAYS = input.VALIDITY_DAYS, DepositDays = input.DepositDays }).Where(i => ids.Contains(i.ID)).ExecuteCommand();
return res;
}
///
/// 数据检查
///
///
public void CheckTimeData(MaterialDTO input)
{
if (input.DepositDays.IsNullOrEmpty() || input.VALIDITY_DAYS.IsNullOrEmpty())
{
throw new Exception($"有效天数/预存天数不可为空!");
}
}
///
/// 物料超期预警
///
///
public int MaterialExtended()
{
var DB = Biz.DataSource["WMS57"].Client;
#region 获取所有的条码有效期信息
var data = DB.Queryable((a, b) => new object[]
{
JoinType.Left, a.ITEM_CODE == b.ITEM_CODE
}).Where((a, b) => b.VALIDITY_DAYS != 0 && a.STATUS <= 40)
.Select((a, b) => new MaterialInfoDTO()
{
AUTH_ORG = a.AUTH_ORG,
SN = a.SN,
Item_Code = a.ITEM_CODE,
PROD_DATE = a.PROD_DATE,
VALIDITY_DAYS = b.VALIDITY_DAYS,
DepositDays = b.DepositDays,
PostponeDays = a.PostponeDays
}).ToList();
#endregion 获取所有的条码有效期信息
//var sdaf = data.Where(i => i.PROD_DATE?.AddDays(i.VALIDITY_DAYS.ToDouble()).AddDays(-30).AddDays(i.PostponeDays.ToDouble()) <= DateTime.Now).ToList();
//var orgs = data.Select(i => i.AUTH_ORG).Distinct().ToList();
//foreach (var item in orgs)
//{
// var count = data.Where(i => i.AUTH_ORG == item).Count();// 每个据点的总数量
//}
var msg = new List();
//var dic = new List();
int sqn = 0;
foreach (var item in data)
{
// 生产日期 + 有效期 - 30(提前30天预警) + 延期时长 超过了当前日期,就表示需要预警
if (item.PROD_DATE?.AddDays(item.VALIDITY_DAYS.ToDouble()).AddDays(-30) <= DateTime.Now)
{
sqn++;
var days = 30 - ((DateTime.Now - item.PROD_DATE?.AddDays(item.VALIDITY_DAYS.ToDouble()).AddDays(-30)).Value.Days);// 计算剩余有效期天数
var ms = $"条码:{item.SN},物料编号:{item.Item_Code},生产日期:{item.PROD_DATE},有效期{item.VALIDITY_DAYS},有效天数还剩{days}
";
msg.Add(ms);
//dic.Add(item);
}
}
if (msg.Any())
{
Work.DoAsync(() =>
{
MailServiceApi _IMailServiceApi = new MailServiceApi();
_IMailServiceApi.SendMail(new MailBodyEntity
{
MailTextBody = "以下物料预超期,请及时处理!
" + string.Join(" ", msg),
MailBodyType = "Html",
MailFilePath = null,
Recipients = Biz.SysParam.Params.Where(q => q.PRMG_CODE == "MaterialExtended").Select(q => q.PARAM_VALUE).ToList(),
Cc = new List(),
Sender = "WMS Email Admin",
SenderAddress = "xcerp@sharetronic.com",
Subject = $"物料有效期剩余不足30天!",
Body = ""
},
new SendServerConfigurationEntity
{
SmtpHost = "mail.sharetronic.com",
SmtpPort = 25,
SenderAccount = "xcerp@sharetronic.com",
SenderPassword = "sha66666",
MailEncoding = "utf-8",
IsSsl = false
});
});
}
return sqn;
}
///
///
///
///
public List OverdueData(OverdueDTO input)
{
var DB = Biz.DataSource["WMS57"].Client;
var data = DB.Queryable((a, b) => new object[]
{
JoinType.Left, a.ITEM_CODE == b.ITEM_CODE
}).WhereIF(!string.IsNullOrWhiteSpace(input.Sn), (a, b) => a.SN.ToLower().Contains(input.Sn.ToLower()) || a.CARTON_NO.ToLower().Contains(input.Sn.ToLower()) || a.PALLET_NO.ToLower().Contains(input.Sn.ToLower()))
.WhereIF(!string.IsNullOrWhiteSpace(input.TransNo), (a, b) => a.TRANS_NO.ToLower().Contains(input.TransNo.ToLower()))
.WhereIF(!string.IsNullOrWhiteSpace(input.ItemCode), (a, b) => a.ITEM_CODE.ToLower().Contains(input.ItemCode.ToLower()))
.Where((a, b) => a.IsAllowOverdue == "N")
.Select((a, b) => new OverdueDTO()
{
Sn = a.SN,
TransNo = a.TRANS_NO,
ItemCode = a.ITEM_CODE,
VALIDITY_DAYS = b.VALIDITY_DAYS,
DepositDays = b.DepositDays
}).ToList();
return data;
}
///
/// 单号状态
///
///
///
public int GetOrderStatus(OrderStatusDTO input)
{
var DB = Biz.DataSource["WMS57"].Client;
if (input.Status.IsNullOrEmpty() || input.OrderNo.IsNullOrEmpty() || input.OrderType.IsNullOrEmpty())
{
return 0;
}
var num = 0;
if (input.Status == "S")
{
if (input.OrderType == "0")
{
var data = DB.Queryable().Where(i => i.BILLCODE == input.OrderNo).First();
if (data != null)
{
data.STATUS = BIZ_ERP_PROD_IN.STATUSs.COMPLETE.GetValue();
num = DB.Updateable(data).ExecuteCommand();
}
}
else if (input.OrderType == "1")
{
var data = DB.Queryable().Where(i => i.BILLCODE == input.OrderNo).First();
if (data != null)
{
data.STATUS = BIZ_ERP_PROD_OUT.STATUSs.COMPLETE.GetValue();
num = DB.Updateable(data).ExecuteCommand();
}
}
}
return num;
}
}
}