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>, ITaskService { private readonly IRepository _StationMangerRepository; private readonly IRepository _Task_HtyRepository; private readonly IUnitOfWorkManage _unitOfWorkManage; public TaskService(IRepository BaseDal, IRepository StationMangerRepository, IRepository Task_HtyRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _StationMangerRepository = StationMangerRepository; _Task_HtyRepository = Task_HtyRepository; _unitOfWorkManage = unitOfWorkManage; } public IRepository 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 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 (task==null) { return null; } //入库 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(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(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; } } }