#region << 版 本 注 释 >> /*---------------------------------------------------------------- * 命名空间:WIDESEA_TaskInfoService * 创建者:胡童庆 * 创建时间:2024/8/2 16:13:36 * 版本:V1.0.0 * 描述: * * ---------------------------------------------------------------- * 修改人: * 修改时间: * 版本:V1.0.1 * 修改说明: * *----------------------------------------------------------------*/ #endregion << 版 本 注 释 >> using AutoMapper; using Microsoft.AspNetCore.Mvc.ApiExplorer; using Newtonsoft.Json; using SqlSugar; using System.Reflection.Emit; using System.Threading.Tasks; using WIDESEA_Common.CommonEnum; using WIDESEA_Common.LocationEnum; using WIDESEA_Common.OrderEnum; using WIDESEA_Common.StockEnum; using WIDESEA_Common.TaskEnum; using WIDESEA_Common.WareHouseEnum; using WIDESEA_Core; using WIDESEA_Core.BaseRepository; using WIDESEA_Core.BaseServices; using WIDESEA_Core.Enums; using WIDESEA_Core.Helper; using WIDESEA_DTO; using WIDESEA_DTO.Inbound; using WIDESEA_DTO.MES; using WIDESEA_DTO.Stock; using WIDESEA_DTO.Task; using WIDESEA_External.ERPService; using WIDESEA_External.Model; using WIDESEA_IBasicRepository; using WIDESEA_IBasicService; using WIDESEA_IRecordService; using WIDESEA_IStockRepository; using WIDESEA_IStockService; using WIDESEA_ITaskInfoRepository; using WIDESEA_ITaskInfoService; using WIDESEA_Model.Models; using WIDESEA_TaskInfoRepository; namespace WIDESEA_TaskInfoService { public partial class TaskService : ServiceBase, ITaskService { private readonly IMapper _mapper; private readonly IUnitOfWorkManage _unitOfWorkManage; private readonly IStockRepository _stockRepository; private readonly IBasicService _basicService; private readonly IRecordService _recordService; private readonly IStockService _stockService; private readonly IBasicRepository _basicRepository; private readonly IApiInfoRepository _apiInfoRepository; private readonly IInvokeERPService _invokeERPService; private readonly IPalletTypeInfoRepository _palletTypeInfoRepository; public ITaskRepository Repository => BaseDal; private Dictionary _taskOrderBy = new() { {nameof(Dt_Task.Grade),OrderByType.Desc }, {nameof(Dt_Task.CreateDate),OrderByType.Asc}, }; public List TaskTypes => typeof(TaskTypeEnum).GetEnumIndexList(); public List TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList(); public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal) { _mapper = mapper; _unitOfWorkManage = unitOfWorkManage; _stockRepository = stockRepository; _basicService = basicService; _recordService = recordService; _stockService = stockService; _basicRepository = basicRepository; _apiInfoRepository = apiInfoRepository; _invokeERPService = invokeERPService; _palletTypeInfoRepository = palletTypeInfoRepository; } /// /// 任务信息推送至WCS /// /// public WebResponseContent PushTasksToWCS(List tasks, string agvDescription = "") { try { List taskDTOs = _mapper.Map>(tasks); taskDTOs.ForEach(x => { x.AGVArea = agvDescription; }); string url = AppSettings.Get("WCS"); if (string.IsNullOrEmpty(url)) { return WebResponseContent.Instance.Error($"未找到WCSApi地址,请检查配置文件"); } string response = HttpHelper.Post($"{url}/api/Task/ReceiveTask", taskDTOs.Serialize()); return JsonConvert.DeserializeObject(response) ?? WebResponseContent.Instance.Error("返回错误"); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 放货完成 /// /// /// public WebResponseContent PutFinish(string code, string barCode = "", string taskNum = "") { try { string url = AppSettings.Get("WCS"); if (string.IsNullOrEmpty(url)) { return WebResponseContent.Instance.Error($"未找到WCSAApi地址,请检查配置文件"); } string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code={code}&barCode={barCode}&taskNum={taskNum}" ); return JsonConvert.DeserializeObject(response) ?? WebResponseContent.Instance.Error("返回错误"); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } /// /// 成品仓入库任务完成 /// public WebResponseContent InProductCompleted(Dt_Task task) { WebResponseContent content=new WebResponseContent(); try { switch (task.TaskType) { case (int)TaskTypeEnum.EmptyProductBack: content = EmptyProBackCompleted(task); break; case (int)TaskTypeEnum.InProductBack: content = InProBackCompleted(task); break; default: content.Error("未知任务类型"); break; } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } public WebResponseContent EmptyProBackCompleted(Dt_Task task) { WebResponseContent content = new WebResponseContent(); try { //更新入库状态 task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成); _unitOfWorkManage.CommitTran(); content.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } /// /// 成品余料退库任务完成 /// /// /// public WebResponseContent InProBackCompleted(Dt_Task task) { WebResponseContent content = new WebResponseContent(); try { //获取组盘信息 Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable().Where(x => x.PalletCode == task.PalletCode).Includes(x => x.proStockInfoDetails).First(); if (proStockInfo == null) { return content.Error($"未找到胶框为{task.PalletCode}组盘信息"); } Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); if (locationInfo == null) { return content.Error($"未找到目标货位信息"); } if (locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt()) { return content.Error($"货位状态不正确"); } if (proStockInfo.StockStatus!=StockStatusEmun.成品余料回库.ObjToInt()) { return content.Error($"胶框{proStockInfo.PalletCode}库存状态不正确"); } LocationStatusEnum lastStatus = (LocationStatusEnum)locationInfo.LocationStatus; locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt(); proStockInfo.LocationCode = locationInfo.LocationCode; proStockInfo.StockStatus = StockStatusEmun.入库完成.ObjToInt(); proStockInfo.proStockInfoDetails.ForEach(x => { x.ProOutDetailStatus = StockStatusEmun.入库完成.ObjToInt(); }); //更新入库状态 task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成); _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.InStock, locationInfo.WarehouseId); _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfo.proStockInfoDetails); _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted); _unitOfWorkManage.CommitTran(); content.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } } }