first commit
This commit is contained in:
@@ -0,0 +1,344 @@
|
||||
using JSMachine.WMS.App.Dto;
|
||||
using JSMachine.WMS.App.Dto.Enum;
|
||||
using JSMachine.WMS.App.IService;
|
||||
using JSMachine.WMS.Common;
|
||||
using JSMachine.WMS.Infrastructure;
|
||||
using JSMachine.WMS.Infrastructure.Helper;
|
||||
using JSMachine.WMS.Job.Enum;
|
||||
using JSMachine.WMS.Job.JobAttributes;
|
||||
using JSMachine.WMS.RPC.ErpRPC.Dto.In;
|
||||
using JSMachine.WMS.RPC.ErpRPC.Dto.In.XRBusinessResult;
|
||||
using JSMachine.WMS.RPC.ErpRPC.Dto.Out.XRBusinessResult;
|
||||
using JSMachine.WMS.RPC.ErpRPC.IService;
|
||||
using Quartz;
|
||||
using SqlSugar;
|
||||
|
||||
|
||||
namespace JSMachine.WMS.Job.Job
|
||||
{
|
||||
[DisallowConcurrentExecution]
|
||||
[PersistJobDataAfterExecution]
|
||||
[Job(Name = nameof(XinRongErpJob)
|
||||
, Group = nameof(XinRongErpJob) + "_Group"
|
||||
, Description = "新荣Erp数据上传作业"
|
||||
, ScheduleType = ScheduleType.Simple
|
||||
, IntervalMilliSeconds = 2000
|
||||
, RepeatCount = 0
|
||||
, StartTimeStr = null)]
|
||||
public class XinRongErpJob : IJob
|
||||
{
|
||||
private static readonly IERPTaskService ErpTaskService = GlobalServericeProvidor.GetService<IERPTaskService>();
|
||||
private static readonly IAGVTaskService AGVTaskService = GlobalServericeProvidor.GetService<IAGVTaskService>();
|
||||
private static readonly IPaperStorageService ErpService = GlobalServericeProvidor.GetService<IPaperStorageService>();
|
||||
protected static readonly int erpUploadBefore = Global.AppSettings.ErpConfig.ErpUploadBefore;
|
||||
protected static readonly int retryNum = Global.AppSettings.ErpConfig.RetryNum;
|
||||
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
List<AGVTaskDto> agvTaskList = await AGVTaskService.GetListByExpression(p =>
|
||||
p.CreationTime >= DateTime.Now.AddDays(erpUploadBefore) &&
|
||||
(p.TaskType == TaskTypeEnum.PdaIn || p.TaskType == TaskTypeEnum.TransferStockIn || p.TaskType == TaskTypeEnum.SaleOut || p.TaskType == TaskTypeEnum.ProductionOut) &&
|
||||
(p.ErpUploadStatus == ErpUploadStatusEnum.WaittingToUpload || p.ErpUploadStatus == ErpUploadStatusEnum.UploadFailed) &&
|
||||
p.TaskStatus == TaskStatusEnum.Completed &&
|
||||
p.RetryNum < retryNum);
|
||||
|
||||
if (agvTaskList.Count <= 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
agvTaskList = agvTaskList.OrderBy(p => p.CreationTime).ToList();
|
||||
|
||||
foreach (AGVTaskDto agvTask in agvTaskList)
|
||||
{
|
||||
ERPTaskDto erpTask = await ErpTaskService.GetSingalByExpression(p => p.Id == agvTask.ErpTaskId);
|
||||
if (erpTask == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
//已上传给Erp的数量
|
||||
var alreadyUploadNum = erpTask.AlreadyUploadNum;
|
||||
|
||||
switch (agvTask.TaskType)
|
||||
{
|
||||
case TaskTypeEnum.MachineHandIn:
|
||||
break;
|
||||
|
||||
case TaskTypeEnum.PdaIn:
|
||||
await UploadDataIn(agvTask, erpTask);
|
||||
break;
|
||||
|
||||
case TaskTypeEnum.TransferStockIn:
|
||||
await UploadDataIn(agvTask, erpTask);
|
||||
break;
|
||||
|
||||
case TaskTypeEnum.SaleOut:
|
||||
|
||||
await UploadDataSaleOut(agvTask, erpTask, alreadyUploadNum);
|
||||
break;
|
||||
|
||||
case TaskTypeEnum.ProductionOut:
|
||||
|
||||
await UploadDataProductionOut(agvTask, erpTask, alreadyUploadNum);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生产退库数据上传
|
||||
/// </summary>
|
||||
/// <param name="agvTask"></param>
|
||||
/// <param name="erpTask"></param>
|
||||
/// <param name="alreadyUploadNum"></param>
|
||||
/// <returns></returns>
|
||||
private static async Task UploadDataProductionOut(AGVTaskDto agvTask, ERPTaskDto erpTask, int alreadyUploadNum)
|
||||
{
|
||||
//if (alreadyUploadNum < (erpTask.ErpOrderNum - erpTask.ErpCancelNum))
|
||||
//{
|
||||
// if (alreadyUploadNum + agvTask.MateriaNum <= (erpTask.ErpOrderNum - erpTask.ErpCancelNum))
|
||||
// {
|
||||
// var param = new ErpProduceOutParam
|
||||
// {
|
||||
// produceReturnCode = erpTask.ProduceReturnCode,
|
||||
// barCode = erpTask.BarCode,
|
||||
// materiaName = erpTask.MateriaName,
|
||||
// materiaBatch = erpTask.MateriaBatch,
|
||||
// materiaCode = erpTask.MateriaCode,
|
||||
// num = agvTask.MateriaNum
|
||||
// };
|
||||
// XRResultDto erpReulst = await ErpService.AddProduceOut(param);
|
||||
// await HandErpUploadResult(agvTask, erpTask, erpReulst, param.num);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var param = new ErpProduceOutParam
|
||||
// {
|
||||
// produceReturnCode = erpTask.ProduceReturnCode,
|
||||
// barCode = erpTask.BarCode,
|
||||
// materiaName = erpTask.MateriaName,
|
||||
// materiaBatch = erpTask.MateriaBatch,
|
||||
// materiaCode = erpTask.MateriaCode,
|
||||
// num = erpTask.ErpOrderNum - alreadyUploadNum
|
||||
// };
|
||||
// XRResultDto erpReulst = await ErpService.AddProduceOut(param);
|
||||
// await HandErpUploadResult(agvTask, erpTask, erpReulst, param.num);
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadSuccess;
|
||||
// agvTask.LastModifiedTime = DateTime.Now;
|
||||
// agvTask.ErpReturnMsg = "已上传数量等于订单数";
|
||||
// agvTask.RetryNum = retryNum;
|
||||
// await AGVTaskService.EditSingal(agvTask);
|
||||
|
||||
// erpTask.AlreadyUploadNum = erpTask.ErpOrderNum;
|
||||
// erpTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
// await ErpTaskService.EditSingal(erpTask);
|
||||
//}
|
||||
|
||||
if (alreadyUploadNum < (erpTask.ErpOrderNum - erpTask.ErpCancelNum))
|
||||
{
|
||||
var param = new ErpProduceOutParam
|
||||
{
|
||||
produceReturnCode = erpTask.ProduceReturnCode,
|
||||
barCode = agvTask.BarCode,
|
||||
materiaName = agvTask.MateriaName,
|
||||
materiaBatch = agvTask.MateriaBatch,
|
||||
materiaCode = agvTask.MateriaCode,
|
||||
num = agvTask.MateriaNum
|
||||
};
|
||||
XRResultDto erpReulst = await ErpService.AddProduceOut(param);
|
||||
await HandErpUploadResult(agvTask, erpTask, erpReulst, param.num);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (alreadyUploadNum > erpTask.ErpOrderNum - erpTask.ErpCancelNum)
|
||||
{
|
||||
agvTask.ErpReturnMsg = "请注意:已上传数量大于订单数";
|
||||
}
|
||||
agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadSuccess;
|
||||
agvTask.LastModifiedTime = DateTime.Now;
|
||||
agvTask.RetryNum = retryNum;
|
||||
await AGVTaskService.EditSingal(agvTask);
|
||||
|
||||
erpTask.AlreadyUploadNum = alreadyUploadNum;
|
||||
erpTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
await ErpTaskService.EditSingal(erpTask);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 销售出库数据上传
|
||||
/// </summary>
|
||||
/// <param name="agvTask"></param>
|
||||
/// <param name="erpTask"></param>
|
||||
/// <param name="alreadyUploadNum"></param>
|
||||
/// <returns></returns>
|
||||
private static async Task UploadDataSaleOut(AGVTaskDto agvTask, ERPTaskDto erpTask, int alreadyUploadNum)
|
||||
{
|
||||
//if (alreadyUploadNum < (erpTask.ErpOrderNum - erpTask.ErpCancelNum))
|
||||
//{
|
||||
// if (alreadyUploadNum + agvTask.MateriaNum <= (erpTask.ErpOrderNum - erpTask.ErpCancelNum))
|
||||
// {
|
||||
// var param = new ErpSaleOutParam
|
||||
// {
|
||||
// saleNo = erpTask.SaleNo,
|
||||
// barCode = agvTask.BarCode,
|
||||
// materiaCode = agvTask.MateriaCode,
|
||||
// materiaBatch = agvTask.MateriaBatch,
|
||||
// num = agvTask.MateriaNum
|
||||
// };
|
||||
// XRResultDto erpReulst = await ErpService.AddSaleOut(param);
|
||||
// await HandErpUploadResult(agvTask, erpTask, erpReulst, param.num);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// var param = new ErpSaleOutParam
|
||||
// {
|
||||
// saleNo = erpTask.SaleNo,
|
||||
// barCode = agvTask.BarCode,
|
||||
// materiaCode = agvTask.MateriaCode,
|
||||
// materiaBatch = agvTask.MateriaBatch,
|
||||
// num = erpTask.ErpOrderNum - alreadyUploadNum
|
||||
// };
|
||||
// XRResultDto erpReulst = await ErpService.AddSaleOut(param);
|
||||
// await HandErpUploadResult(agvTask, erpTask, erpReulst, param.num);
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadSuccess;
|
||||
// agvTask.LastModifiedTime = DateTime.Now;
|
||||
// agvTask.ErpReturnMsg = "已上传数量等于订单数";
|
||||
// agvTask.RetryNum = retryNum;
|
||||
// await AGVTaskService.EditSingal(agvTask);
|
||||
|
||||
|
||||
// erpTask.AlreadyUploadNum = erpTask.ErpOrderNum;
|
||||
// erpTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
// await ErpTaskService.EditSingal(erpTask);
|
||||
//}
|
||||
|
||||
if (alreadyUploadNum < (erpTask.ErpOrderNum - erpTask.ErpCancelNum))
|
||||
{
|
||||
var param = new StockOutParam
|
||||
{
|
||||
saleNo = erpTask.SaleNo,
|
||||
barCode = agvTask.BarCode,
|
||||
materiaCode = agvTask.MateriaCode,
|
||||
materiaBatch = agvTask.MateriaBatch,
|
||||
num = agvTask.MateriaNum
|
||||
};
|
||||
XRResultDto erpReulst = await ErpService.AddSaleOut(param);
|
||||
await HandErpUploadResult(agvTask, erpTask, erpReulst, param.num);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (alreadyUploadNum > erpTask.ErpOrderNum - erpTask.ErpCancelNum)
|
||||
{
|
||||
agvTask.ErpReturnMsg = "请注意:已上传数量大于订单数";
|
||||
}
|
||||
agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadSuccess;
|
||||
agvTask.LastModifiedTime = DateTime.Now;
|
||||
agvTask.RetryNum = retryNum;
|
||||
await AGVTaskService.EditSingal(agvTask);
|
||||
|
||||
erpTask.AlreadyUploadNum = alreadyUploadNum;
|
||||
erpTask.TaskStatus = TaskStatusEnum.Completed;
|
||||
await ErpTaskService.EditSingal(erpTask);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pda入库数据上传
|
||||
/// </summary>
|
||||
/// <param name="agvTask"></param>
|
||||
/// <returns></returns>
|
||||
private static async Task UploadDataIn(AGVTaskDto agvTask, ERPTaskDto erpTask)
|
||||
{
|
||||
//入库:一个合格证号,只能成功上传一次Erp
|
||||
//var agvTaskList = await AGVTaskService.GetListByExpression(p => p.BarCode == agvTask.BarCode && p.ErpUploadStatus == ErpUploadStatusEnum.UploadSuccess);
|
||||
//if (!agvTaskList.IsNullOrEmpty())
|
||||
//{
|
||||
// LogHelper.Error($"合格证:{agvTask.BarCode},AgvTask任务Id:{agvTask.Id} 入库信息,已经上传到Erp,不能重复上传!");
|
||||
//}
|
||||
//else
|
||||
{
|
||||
var param = new ErpProduceInParam
|
||||
{
|
||||
barCode = agvTask.BarCode,
|
||||
materiaName = agvTask.MateriaName,
|
||||
materiaBatch = agvTask.MateriaBatch,
|
||||
materiaCode = agvTask.MateriaCode,
|
||||
materiaNum = agvTask.MateriaNum
|
||||
};
|
||||
XRResultDto erpReulst = await ErpService.AddProduceIn(param);
|
||||
await HandErpUploadResult(agvTask, erpTask, erpReulst, param.materiaNum);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 处理调用Erp接口,后Wms后续业务
|
||||
/// </summary>
|
||||
/// <param name="agvTask"></param>
|
||||
/// <param name="erpTask"></param>
|
||||
/// <param name="erpReulst"></param>
|
||||
/// <param name="num"></param>
|
||||
/// <returns></returns>
|
||||
private static async Task HandErpUploadResult(AGVTaskDto agvTask, ERPTaskDto erpTask, XRResultDto erpReulst, int num)
|
||||
{
|
||||
if (erpReulst.success)
|
||||
{
|
||||
agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadSuccess;
|
||||
agvTask.LastModifiedTime = DateTime.Now;
|
||||
agvTask.ErpReturnMsg = erpReulst.message;
|
||||
agvTask.RetryNum += 1;
|
||||
|
||||
bool bRet = await AGVTaskService.EditSingal(agvTask);
|
||||
if (!bRet)
|
||||
{
|
||||
agvTask.RetryNum++;
|
||||
LogHelper.Error($"更新ID为{agvTask.Id}的agvTask的Erp上传状态失败");
|
||||
}
|
||||
else
|
||||
{
|
||||
erpTask.AlreadyUploadNum += num;
|
||||
erpTask.LastModifiedTime = DateTime.Now;
|
||||
await ErpTaskService.EditSingalWithSpecificCols(erpTask, ["AlreadyUploadNum", "LastModifiedTime"]);
|
||||
}
|
||||
}
|
||||
//处理网络不通或超时
|
||||
else if (erpReulst == null)
|
||||
{
|
||||
agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadFailed;
|
||||
agvTask.LastModifiedTime = DateTime.Now;
|
||||
agvTask.ErpReturnMsg = "访问Erp连接超时";
|
||||
agvTask.RetryNum = 0;
|
||||
|
||||
bool bRet = await AGVTaskService.EditSingal(agvTask);
|
||||
if (!bRet)
|
||||
{
|
||||
LogHelper.Error($"更新ID为{agvTask.Id}的agvTask的Erp上传状态失败");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
agvTask.ErpUploadStatus = ErpUploadStatusEnum.UploadFailed;
|
||||
agvTask.LastModifiedTime = DateTime.Now;
|
||||
agvTask.ErpReturnMsg = erpReulst.errors;
|
||||
agvTask.RetryNum += 1;
|
||||
|
||||
bool bRet = await AGVTaskService.EditSingal(agvTask);
|
||||
if (!bRet)
|
||||
{
|
||||
agvTask.RetryNum++;
|
||||
LogHelper.Error($"更新ID为{agvTask.Id}的agvTask的Erp上传状态失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user