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
|
{
|
/// <summary>
|
/// 发料单取消审核
|
/// </summary>
|
/// <param name="sn"></param>
|
/// <returns></returns>
|
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<Model.Minsun.WMS_PRDPICK_D> 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<ApiAction>(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<ApiAction>(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<ApiAction>(response.Message);
|
}
|
}
|
}
|
else
|
{
|
//测试
|
db = Biz.DataSource["Test"].Client;
|
}
|
entity_h = db.Queryable<Model.Minsun.WMS_PRDPICK_H>().Where(q => q.BILLCODE == parameter.BILLCODE).First();
|
entity_d = db.Queryable<Model.Minsun.WMS_PRDPICK_D>().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, $"发料单取消审核异常");
|
}
|
}
|
|
/// <summary>
|
/// 领料单过账到T100
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
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<Model.Minsun.WMS_PRDPICK_H>().Where(x => x.BILLCODE == param.BillCode && x.ERP_BILL_CODE == null).First();
|
List<Model.Minsun.WMS_PRDPICK_D> entity_d = Biz.Db.Queryable<Model.Minsun.WMS_PRDPICK_D>().Where(x => x.BILLCODE == param.BillCode && Convert.ToInt32(x.PRQTY) != 0).ToList();
|
List<Detail5> details = new List<Detail5>();
|
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;
|
}
|
/// <summary>
|
/// 新框架-领料单过账到T100
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
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<BIZ_ERP_PROD_OUT>().Where(x => x.BILLCODE == param.BillCode && SqlFunc.IsNullOrEmpty(x.ERP_BILL_CODE)).First();
|
List<BIZ_ERP_PROD_OUT_DTL> entity_d = Biz.Db.Queryable<BIZ_ERP_PROD_OUT_DTL>().Where(x => x.BILLCODE == param.BillCode && Convert.ToInt32(x.PRQTY) > 0).ToList();
|
List<Detail5> details = new List<Detail5>();
|
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,<br/><br/> 领料单[{entity_h.BILLCODE}]过账失败,<br/> T100返回消息:{ret.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<string> { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
|
Cc = new List<string>(),
|
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;
|
}
|
|
/// <summary>
|
/// 领料单过账到T100
|
/// </summary>
|
/// <param name="param"></param>
|
/// <returns></returns>
|
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<BIZ_ERP_PROD_OUT>().Where(x => x.BILLCODE == param.BillCode && SqlFunc.IsNullOrEmpty(x.ERP_BILL_CODE)).First();
|
List<BIZ_ERP_PROD_OUT_DTL> entity_d = db.Queryable<BIZ_ERP_PROD_OUT_DTL>().Where(x => x.BILLCODE == param.BillCode && Convert.ToInt32(x.PRQTY) > 0).ToList();
|
List<Detail5> details = new List<Detail5>();
|
|
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,<br/><br/> 领料单[{entity_h.BILLCODE}]过账失败,<br/> T100返回消息:{ret.payload.std_data.execution.description}",
|
MailBodyType = "Html",
|
MailFilePath = null,
|
Recipients = Biz.SysParamOld.Params.Where(q => q.PRMG_CODE == "PickingEmailGroup").Select(q => q.PARAM_VALUE).ToList(), // new List<string> { "ben.lin@tigerclouds.com", "dyfang@sharetronic.com", "dianzicang@sharetronic.com" },
|
Cc = new List<string>(),
|
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;
|
}
|
|
/// <summary>
|
/// 获取所有仓库机构列表
|
/// </summary>
|
/// <param name="billcode"></param>
|
/// <returns></returns>
|
public static async Task<string> GetHouseModel(string name, string status)
|
{
|
var data = new List<OrgItemH>();
|
V_WH_TREE func = null;
|
if (!string.IsNullOrEmpty(name))
|
{
|
func = Biz.Db.Queryable<V_WH_TREE>().Where(x => x.NAME == name).First();
|
}
|
var items = await Biz.Db.Queryable<V_WH_TREE>()
|
.Where(q => q.TYPE != "Location")
|
.OrderBy(x => x.NAME)
|
.Distinct().ToListAsync();
|
//没有查询的时候
|
if (func == null)
|
{
|
List<V_WH_TREE> 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;
|
}
|
|
/// <summary>
|
/// 递归返回组织机构
|
/// </summary>
|
/// <param name="data"></param>
|
/// <param name="parent"></param>
|
/// <param name="pOrgItem"></param>
|
private static void GetOrgItem(List<V_WH_TREE> data, string parent, ref OrgItemH pOrgItem)
|
{
|
List<V_WH_TREE> 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);
|
}
|
}
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="serverId"></param>
|
/// <returns></returns>
|
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<Model.Minsun.WMS_RECEIPT_H>().Where(x => x.STATUS == 2 && x.ERP_BILL_CODE == null).ToList();
|
List<Model.Minsun.WMS_RECEIPT_H> receiptList = new List<Model.Minsun.WMS_RECEIPT_H>();
|
foreach (var h in entity_h)
|
{
|
List<Detail> details = new List<Detail>();
|
var userid = db.Queryable<Model.Minsun.Sys_Users>().Where(c => c.Id.Equals(h.CreatorUserId)).ToList();
|
var CreatorUserId = userid[0].UserName == "admin" ? "00000" : userid[0].UserName;
|
List<Model.Minsun.WMS_RECEIPT_D> entity_d = db.Queryable<Model.Minsun.WMS_RECEIPT_D>().Where(x => x.BILLCODE == h.BILLCODE).ToList();
|
foreach (var item in entity_d)
|
{
|
var line = db.Queryable<Model.Minsun.WMS_SRM_ASN_LINES>().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<Model.Minsun.WMS_SRM_ASN_LINES>().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<Detail>
|
{
|
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;
|
}
|
/// <summary>
|
/// 根据仓库代码和类型删除仓库机构列表
|
/// </summary>
|
/// <param name="billcode"></param>
|
/// <returns></returns>
|
public static ApiAction DelWareHouseModel(DelWareHouseModelEntity wareHouse)
|
{
|
var action = new ApiAction();
|
List<string> locaIds = new();
|
List<string> shelfIds = new();
|
List<string> regIds = new();
|
List<string> wareIds = new();
|
var db = Biz.Db;
|
List<V_WH_UNIT> uNITs = new List<V_WH_UNIT>();
|
if (wareHouse.Type == "Warehouse")
|
{
|
var res = db.Queryable<WMS_ITEM>().Where(q => q.STATUS > 2 && q.WH_ID == wareHouse.ID).ToList();
|
if (res.IsNullOrEmpty())
|
{
|
var unit = db.Queryable<V_WH_UNIT>().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<WMS_ITEM>().Where(q => q.STATUS > 2 && q.REGION_ID == wareHouse.ID).ToList();
|
if (res.IsNullOrEmpty())
|
{
|
var unit = db.Queryable<V_WH_UNIT>().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<WMS_ITEM>().Where(q => q.STATUS > 2 && q.SHELF_ID == wareHouse.ID).ToList();
|
if (res.IsNullOrEmpty())
|
{
|
var unit = db.Queryable<V_WH_UNIT>().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<Model.WMS_LOCATION>().Where(it => locaIds.Contains(it.ID)).ExecuteCommand();
|
}
|
//删货架
|
if (shelfIds.Any())
|
{
|
db.Deleteable<Model.WMS_SHELF>().Where(it => shelfIds.Contains(it.ID)).ExecuteCommand();
|
}
|
//删储区
|
if (regIds.Any())
|
{
|
db.Deleteable<Model.WMS_REGION>().Where(it => regIds.Contains(it.ID)).ExecuteCommand();
|
}
|
//删仓库
|
if (wareIds.Any())
|
{
|
db.Deleteable<Model.WMS_WAREHOUSE>().Where(it => wareIds.Contains(it.ID)).ExecuteCommand();
|
}
|
return action;
|
}
|
/// <summary>
|
/// 根据仓库代码和类型删除仓库机构列表
|
/// </summary>
|
/// <param name="billcode"></param>
|
/// <returns></returns>
|
public static ApiAction AddLocationModel(List<AddLocationModelEntity> locations)
|
{
|
var action = new ApiAction();
|
List<Model.WMS_LOCATION> Locations = new List<Model.WMS_LOCATION>();
|
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<Model.WMS_LOCATION>(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;
|
}
|
/// <summary>
|
/// 查询货架是否有东西
|
/// </summary>
|
/// <param name="billcode"></param>
|
/// <returns></returns>
|
public static ApiAction CheckLocation(DelWareHouseModelEntity shelf)
|
{
|
var action = new ApiAction();
|
var db = Biz.Db;
|
if (shelf.Type == "shelf")
|
{
|
var res = db.Queryable<WMS_ITEM>().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;
|
}
|
|
/// <summary>
|
/// 获取T100检验单数据2023.07.23,by weikaiyong
|
/// </summary>
|
/// <param name="iqcs"></param>
|
/// <returns></returns>
|
public ApiAction GetQcReq(List<BIZ_ERP_IQC> iqcs)
|
{
|
var action = new ApiAction();
|
try
|
{
|
List<BIZ_ERP_IQC> iqcs_new = new List<BIZ_ERP_IQC>();
|
List<WMS_ITEM> saveItems = new();
|
List<BIZ_ERP_OTH_IN_SN> othSns = new();
|
List<BIZ_ERP_RECEIPT_SN> reqSns = new();
|
List<WMS_ITEM_HIS> saveHis = new();
|
DbClient db = Biz.DataSource["WMS57"].Client;
|
var iqcEntitys = db.Queryable<BIZ_ERP_IQC>().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<WMS_ITEM>().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<BIZ_ERP_OTH_IN_SN>().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<BIZ_ERP_RECEIPT_SN>().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<WMS_ITEM>().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<WMS_ITEM_HIS>().BulkCopy(saveHis);
|
}
|
else
|
{
|
db.Insertable(saveHis, "Interface").ExecuteCommand();
|
}
|
if (othSns.Count > 100)
|
{
|
db.Fastest<BIZ_ERP_OTH_IN_SN>().BulkUpdate(othSns);
|
}
|
else
|
{
|
db.Updateable(othSns, "Interface").ExecuteCommand();
|
}
|
if (reqSns.Count > 100)
|
{
|
db.Fastest<BIZ_ERP_RECEIPT_SN>().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;
|
}
|
|
/// <summary>
|
/// 获取销售出库列表
|
/// </summary>
|
/// <returns></returns>
|
public ApiAction<PageAble<BIZ_ERP_SALE_OUT>> GetOutSaleList(int pageIndex, int pageSize, string orgcode, string billcode)
|
{
|
var action = new ApiAction<PageAble<BIZ_ERP_SALE_OUT>>();
|
var query = Biz.Db.Queryable<BIZ_ERP_SALE_OUT>().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;
|
}
|
}
|
}
|