using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Newtonsoft.Json;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.BaseRepository;
|
using WIDESEAWCS_Core.BaseServices;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_Core.LogHelper;
|
using WIDESEAWCS_DTO.Stock;
|
using WIDESEAWCS_ITaskInfoService;
|
using WIDESEAWCS_Model.Models.System;
|
using WIDESEAWCS_Model.Models.TaskInfo;
|
|
namespace WIDESEAWCS_TaskInfoService
|
{
|
public class TaskService : ServiceBase<Dt_Task, IRepository<Dt_Task>>, ITaskService
|
{
|
|
private readonly IRepository<Dt_StationManger> _StationMangerRepository;
|
private readonly IRepository<Dt_Task_Hty> _Task_HtyRepository;
|
private readonly IUnitOfWorkManage _unitOfWorkManage;
|
|
public TaskService(IRepository<Dt_Task> BaseDal, IRepository<Dt_StationManger> StationMangerRepository, IRepository<Dt_Task_Hty> Task_HtyRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
|
{
|
_StationMangerRepository = StationMangerRepository;
|
_Task_HtyRepository = Task_HtyRepository;
|
_unitOfWorkManage = unitOfWorkManage;
|
}
|
|
public IRepository<Dt_Task> Repository => BaseDal;
|
|
//一入一出获取任务
|
public Dt_Task? TaskInorOut(string InorOuts)
|
{
|
Dt_Task task = new Dt_Task();
|
//判断是否为取放货完成任务
|
task = BaseDal.QueryFirst(v => v.TaskState == (int)TaskStatusEnum.Task_Put || v.TaskState == (int)TaskStatusEnum.Task_fetch);
|
if (task != null)
|
{
|
//优先返回执行到一半的任务继续执行
|
return task;
|
}
|
|
//获取任务
|
if (InorOuts.Equals("In"))
|
{
|
task = BaseDal.QueryData(v => ( v.TaskType == (int)TaskTypeEnum.InEmpty || v.TaskType == (int)TaskTypeEnum.Infull) && v.TaskState == (int)TaskStatusEnum.InNew).OrderByDescending(v => v.Grade).First();
|
}
|
else if (InorOuts.Equals("Out"))
|
{
|
task = BaseDal.QueryData(v => (v.TaskType == (int)TaskTypeEnum.OutDirect || v.TaskType == (int)TaskTypeEnum.OutEmpty || v.TaskType == (int)TaskTypeEnum.Outfull) && v.TaskState == (int)TaskStatusEnum.OutNew).OrderByDescending(v => v.Grade).First();
|
}
|
return task;
|
}
|
|
//接收WMS任务
|
public WebResponseContent WMSaddTask(Dt_Task task)
|
{
|
WebResponseContent content = new WebResponseContent();
|
BaseDal.AddData(task);
|
return content;
|
}
|
|
//接收多条WMS任务
|
public WebResponseContent WMSaddListTask(List<Dt_Task> tasks)
|
{
|
WebResponseContent content = new WebResponseContent();
|
BaseDal.AddData(tasks);
|
return content;
|
}
|
|
//堆垛机修改任务状态
|
public Dt_Task UpdateTaskStatus(int TaskNum, int R_TaskPhases)
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == TaskNum);
|
|
//入库
|
if (R_TaskPhases == 4 && (task.TaskType == (int)TaskTypeEnum.InEmpty|| task.TaskType == (int)TaskTypeEnum.Infull))
|
{
|
task.TaskState = (int)TaskStatusEnum.Task_Put;
|
}
|
//出库
|
else if (R_TaskPhases == 2 && (task.TaskType == (int)TaskTypeEnum.OutDirect || task.TaskType == (int)TaskTypeEnum.OutEmpty || task.TaskType == (int)TaskTypeEnum.Outfull))
|
{
|
task.TaskState = (int)TaskStatusEnum.Task_fetch;
|
}
|
//移动
|
else if (R_TaskPhases == 1 || R_TaskPhases == 3)
|
{
|
task.TaskState = (int)TaskStatusEnum.Task_Execute;
|
}
|
|
task.ModifyDate = DateTime.Now;
|
BaseDal.UpdateData(task);
|
return task;
|
}
|
|
//任务完成
|
public Stock TaskAccomplish(int TaskNum)
|
{
|
Stock content = new Stock();
|
try
|
{
|
//查询任务
|
Dt_Task task = SeletcTaskNum(TaskNum);
|
//入库
|
if (task.TaskType == (int)TaskTypeEnum.InEmpty || task.TaskType == (int)TaskTypeEnum.Infull)
|
{
|
Dt_StationManger StationManger = _StationMangerRepository.QueryFirst(x => x.StationName == "空桶入");
|
//空桶
|
if (task.SourceAddress.Equals(StationManger.location))
|
{
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
//修改货位状态和创建库存
|
string address = AppSettings.Get("WMSApiAddress");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WCSAccomplishIn/?TaskNum={TaskNum}", "");
|
}
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//满桶
|
else
|
{
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
//修改货位状态和创建库存
|
string address = AppSettings.Get("WMSApiAddress");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WCSAccomplishIn/?TaskNum={TaskNum}", "");
|
}
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
}
|
//出库
|
else if (task.TaskType == (int)TaskTypeEnum.OutEmpty || task.TaskType == (int)TaskTypeEnum.Outfull)
|
{
|
Dt_StationManger StationManger = _StationMangerRepository.QueryFirst(x => x.StationName == "空桶出");
|
//空桶
|
if (task.TargetAddress.Equals(StationManger.location))
|
{
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
//修改货位状态和创建库存
|
string address = AppSettings.Get("WMSApiAddress");
|
if (!string.IsNullOrEmpty(address))
|
{
|
HttpHelper.Post($"{address}/api/Task/WCSAccomplishIn/?TaskNum={TaskNum}", "");
|
}
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//满桶
|
else
|
{
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
//修改货位状态和创建库存
|
string address = AppSettings.Get("WMSApiAddress");
|
if (!string.IsNullOrEmpty(address))
|
{
|
Stock Stocks = JsonConvert.DeserializeObject<Stock>(HttpHelper.Post($"{address}/api/Task/WCSAccomplishIn/?TaskNum={TaskNum}", ""));
|
content.MaterialCode1 = Stocks.MaterialCode1;
|
content.MaterialCode2 = Stocks.MaterialCode2;
|
content.MaterialCode3 = Stocks.MaterialCode3;
|
content.MaterialCode4 = Stocks.MaterialCode4;
|
}
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
}
|
//直接出库
|
else if (task.TaskType == (int)TaskTypeEnum.OutDirect)
|
{
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
//修改货位状态和创建库存
|
string address = AppSettings.Get("WMSApiAddress");
|
if (!string.IsNullOrEmpty(address))
|
{
|
Stock Stocks = JsonConvert.DeserializeObject<Stock>(HttpHelper.Post($"{address}/api/Task/WCSAccomplishIn/?TaskNum={TaskNum}", ""));
|
content.MaterialCode1 = Stocks.MaterialCode1;
|
content.MaterialCode2 = Stocks.MaterialCode2;
|
content.MaterialCode3 = Stocks.MaterialCode3;
|
content.MaterialCode4 = Stocks.MaterialCode4;
|
}
|
_Task_HtyRepository.AddData(taskhty);
|
BaseDal.DeleteData(task);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
}
|
//content = WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
//content = WebResponseContent.Instance.Error($"任务完成异常,任务号:{TaskNum},{ex}");
|
LogLock.OutLogAOP("接口日志", new string[] { "任务完成异常,任务号:", TaskNum+"|"+ex.ToString() });
|
}
|
return content;
|
}
|
|
//根据任务号查询任务
|
public Dt_Task SeletcTaskNum(int TaskNum)
|
{
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == TaskNum);
|
return task;
|
}
|
|
//根据任务号删除任务
|
public WebResponseContent WCSTaskDelete(int tasknum)
|
{
|
WebResponseContent content = new WebResponseContent();
|
Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == tasknum);
|
//生成历史任务
|
Dt_Task_Hty taskhty = new Dt_Task_Hty();
|
taskhty.TaskNum = task.TaskNum;
|
taskhty.WMSId = task.WMSId;
|
taskhty.PalletCode = task.PalletCode;
|
taskhty.Roadway = task.Roadway;
|
taskhty.SourceAddress = task.SourceAddress;
|
taskhty.TargetAddress = task.TargetAddress;
|
taskhty.CurrentAddress = task.CurrentAddress;
|
taskhty.NextAddress = task.NextAddress;
|
taskhty.ExceptionMessage = task.ExceptionMessage;
|
taskhty.Grade = task.Grade;
|
taskhty.Remark = task.Remark;
|
taskhty.TaskType = task.TaskType;
|
taskhty.TaskState = (int)TaskStatusEnum.Task_Finish;
|
|
//开始数据库事务
|
_unitOfWorkManage.BeginTran();
|
BaseDal.DeleteData(task);
|
_Task_HtyRepository.AddData(taskhty);
|
//提交事务
|
_unitOfWorkManage.CommitTran();
|
return content;
|
}
|
}
|
}
|