using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Common; using WIDESEAWCS_Common.APIEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; <<<<<<< HEAD ======= using WIDESEAWCS_DTO.TaskInfo; >>>>>>> main using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_IPackInfoRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; namespace WIDESEAWCS_TaskInfoService { public class PackaxisTaskService : ServiceBase, IPackaxisTaskService { private readonly IPackinfoRepository _packinfoRepository; private readonly IStationPackInfoRepository _stationPackInfoRepository; private readonly IStationPackDetailRepository _stationPackDetailRepository; private readonly IPackaxisRepository _packaxisRepository; private readonly IStationMangerRepository _stationMangerRepository; private readonly IUnitOfWorkManage _unitOfWorkManage; public PackaxisTaskService(IPackaxisTaskRepository BaseDal,IPackinfoRepository packinfoRepository, IStationPackInfoRepository stationPackInfoRepository, IStationPackDetailRepository stationPackDetailRepository, IPackaxisRepository packaxisRepository, IStationMangerRepository stationMangerRepository, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) { _packinfoRepository = packinfoRepository; _stationPackInfoRepository = stationPackInfoRepository; _stationPackDetailRepository = stationPackDetailRepository; _packaxisRepository = packaxisRepository; _stationMangerRepository = stationMangerRepository; _unitOfWorkManage = unitOfWorkManage; } /// /// 分配码垛任务 /// /// /// /// public WebResponseContent ReqPackTask(string barCode,string deviceCode) { WebResponseContent content= new WebResponseContent(); try { Dt_Packinfo packinfo = _packinfoRepository.QueryFirst(x=>x.BarCode==barCode && x.PackStatus==StationOccupiedEnum.None.ObjToInt()); if (packinfo==null) { return content.Error($"未找到条码{barCode}"); } List stationPackInfos = _stationPackInfoRepository.QueryData(); Dt_StationPackInfo? stationPackInfo=stationPackInfos.FirstOrDefault(x=>x.PackType==packinfo.PackType && x.OrderNo==packinfo.OrderNo && x.AssignNum stations = _stationMangerRepository.QueryData(x => x.StationDeviceCode == "CLC_CP" && x.IsOccupied == StationOccupiedEnum.None.ObjToInt()).Select(x => x.StationCode).ToList(); //获取码垛配置表查询有配置的码垛工位 List packaxes = _packaxisRepository.QueryData(x => x.PackType == packinfo.PackType); if (packaxes.Count==0) { return content.Error("未找到码垛坐标配置"); } List packStations = packaxes.Select(x => x.StationCode).ToList(); Dt_StationPackInfo? packInfoAssign = stationPackInfos.Where(x => x.PackType == 0 && x.AssignNum == 0 && stations.Contains(x.StationCode) && packStations.Contains(x.StationCode)).OrderByDescending(x => x.StationCode).FirstOrDefault(); if (packInfoAssign == null) { return content.Error("未找到可分配垛位"); } packInfoAssign.PackType = packinfo.PackType; packInfoAssign.OrderNo = packinfo.OrderNo; packInfoAssign.MakeCode = packinfo.MakeCode; packInfoAssign.MaterielCode = packInfoAssign.MaterielCode; packInfoAssign.PackNum = packaxes.FirstOrDefault(x=>x.StationCode== packInfoAssign.StationCode).PackNum; Dt_PackaxisTask packaxisTask = new Dt_PackaxisTask() { DeviceCode = deviceCode, SourceAddress = "2421", BarCode = barCode, CurrentAddress = "2421", TargetAddress = packInfoAssign.StationCode, NextAddress = packInfoAssign.LineCode, TaskState = TaskStatusEnum.Line_Executing.ObjToInt(), PackLength = packinfo.Length, PackWidth = packinfo.Width, PackHeight = packinfo.Height, PackType = packinfo.PackType, Dispatchertime = DateTime.Now, }; packInfoAssign.AssignNum += 1; packInfoAssign.ExecutingNum += 1; packinfo.PackStatus = StationOccupiedEnum.Sure.ObjToInt(); _unitOfWorkManage.BeginTran(); //更新码垛执行工位 _stationPackInfoRepository.UpdateData(packInfoAssign); //更新待码垛信息表 _packinfoRepository.UpdateData(packinfo); //添加码垛任务 BaseDal.AddData(packaxisTask); _unitOfWorkManage.CommitTran(); return content.OK(barCode, packaxisTask); } } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } /// /// 码垛结托并上传码垛工位码垛明细数据 /// /// /// public WebResponseContent BoxingInBound(string stationCode) { WebResponseContent content = new WebResponseContent(); try { Dt_StationPackInfo stationPackInfo = _stationPackInfoRepository.QueryFirst(x => x.StationCode == stationCode); if (stationPackInfo.OverNum != stationPackInfo.AssignNum) { throw new Exception($"分配数量{stationPackInfo.AssignNum},完成数量{stationPackInfo.OverNum}数量不符"); } List stationPackDetails = _stationPackDetailRepository.QueryData(x => x.StationPackId == stationPackInfo.id); if (stationPackDetails.Count <= 0) { throw new Exception($"{stationCode}未找到码垛明细"); } List barCodes = stationPackDetails.Select(x => x.BoxCode).ToList(); List packinfos = _packinfoRepository.QueryData(x => barCodes.Contains(x.BarCode)).ToList(); stationPackInfo.PackType = 0; stationPackInfo.OrderNo = ""; stationPackInfo.MakeCode = ""; stationPackInfo.MaterielCode = ""; stationPackInfo.PackNum = 0; stationPackInfo.OverNum = 0; stationPackInfo.AssignNum = 0; stationPackInfo.ExecutingNum = 0; _unitOfWorkManage.BeginTran(); _stationPackInfoRepository.UpdateData(stationPackInfo); _stationPackDetailRepository.DeleteData(stationPackDetails); _packinfoRepository.DeleteAndMoveIntoHty(packinfos, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成); //同步到WMS string address = AppSettings.Get("WMSApiAddress"); string response = HttpHelper.Post($"{address}/api/Task/BoxingInBound?stationCode=" + stationCode, barCodes.Serialize()); WebResponseContent? responseContent = JsonConvert.DeserializeObject(response) ?? throw new Exception($"未收到返回结果"); if (!responseContent.Status) { throw new Exception(responseContent.Message); } _unitOfWorkManage.CommitTran(); content.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; } /// /// 码垛任务完成 /// /// /// /// public WebResponseContent TaskCompleted(int taskNum=0,Dt_PackaxisTask? packaxisTask=null) { try { Dt_PackaxisTask? packaxisTaskFinish = null; if (packaxisTask!=null) { packaxisTaskFinish= packaxisTask; } else { packaxisTaskFinish = BaseDal.QueryFirst(x => x.PackTaskNum == taskNum); packaxisTaskFinish.TaskState = TaskStatusEnum.Finish.ObjToInt(); } if (packaxisTaskFinish != null) { Dt_StationPackInfo stationPackInfo = _stationPackInfoRepository.QueryFirst(x => x.StationCode == packaxisTaskFinish.TargetAddress); stationPackInfo.ExecutingNum -= 1; stationPackInfo.OverNum += 1; Dt_StationPackDetail stationPackDetail = new Dt_StationPackDetail() { StationPackId = stationPackInfo.id, BoxCode = packaxisTaskFinish.BarCode }; _unitOfWorkManage.BeginTran(); _stationPackInfoRepository.UpdateData(stationPackInfo); _stationPackDetailRepository.AddData(stationPackDetail); BaseDal.DeleteAndMoveIntoHty(packaxisTaskFinish, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成); _unitOfWorkManage.CommitTran(); } else { return WebResponseContent.Instance.Error("未找到任务"); } return WebResponseContent.Instance.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } <<<<<<< HEAD ======= /// /// 删除码垛任务信息 /// /// /// /// public WebResponseContent PickaixsTaskDele(int PackTaskNum) { WebResponseContent content = new WebResponseContent(); try { Dt_PackaxisTask packaxisTask = BaseDal.QueryFirst(x => x.PackTaskNum == PackTaskNum); if(packaxisTask == null) { return WebResponseContent.Instance.Error("未找到任务"); } else { Dt_Packinfo packinfo = _packinfoRepository.QueryFirst(x => x.BarCode == packaxisTask.BarCode); packinfo.PackStatus = 0; _packinfoRepository.UpdateData(packinfo); BaseDal.DeleteAndMoveIntoHty(packaxisTask, App.User?.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工删除); content.Status = true; } } catch (Exception e) { return WebResponseContent.Instance.Error(e.Message); } return content; } >>>>>>> main } }