HuBingJie
昨天 ba998c70b77180668f295e65e07f3a62bf85e5ee
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -21,6 +21,7 @@
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using SqlSugar;
using System.Diagnostics;
using System.DirectoryServices.Protocols;
using System.Net;
using System.Reflection.Emit;
@@ -266,7 +267,7 @@
                BaseDal.DeleteData(task);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                WebResponseContent content=MES_TransferCompletionFeedback(task);
                WebResponseContent content = MES_TransferCompletionFeedback(task);
                //content.Status = true;
                if (!content.Status)
@@ -274,7 +275,7 @@
                    _unitOfWorkManage.RollbackTran();
                    return content;
                }
                _unitOfWorkManage.CommitTran();
                return webResponse.OK();
            }
@@ -319,6 +320,7 @@
                _locationInfoRepository.UpdateData(dt_LocationInfo);
                //修改库存状态
                _stockRepository.UpdateData(stockInfo);
                task.TaskStatus = (int)TaskInStatusEnum.InFinish;
                //删除任务添加历史
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
@@ -559,19 +561,121 @@
            try
            {
                // æŸ¥æ‰¾ä»»åŠ¡
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum && x.TaskStatus == TaskOutStatusEnum.OutFinish.ObjToInt());
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum &&(x.TaskStatus == TaskOutStatusEnum.OutNew.ObjToInt()|| x.TaskStatus == TaskRelocationStatusEnum.RelocationNew.ObjToInt()|| x.TaskStatus == TaskInStatusEnum.Line_InExecuting.ObjToInt()));
                if (task == null)
                {
                    return webResponse.Error($"未找到任务号为【{taskNum}】的任务信息");
                }
                // TODO: è¿™é‡ŒåŽç»­éœ€è¦æ·»åŠ å…·ä½“çš„å–æ¶ˆä»»åŠ¡ä¸šåŠ¡é€»è¾‘
                // ä¾‹å¦‚:更新任务状态、释放货位、通知WCS等
                bool res;
                switch (task.TaskType)
                {
                    case (int)TaskInboundTypeEnum.Inbound:
                        res = task.TaskStatus == TaskInStatusEnum.Line_InExecuting.ObjToInt();
                        break;
                    case (int)TaskOutboundTypeEnum.Outbound:
                        res = task.TaskStatus == TaskOutStatusEnum.OutNew.ObjToInt();
                        break;
                    case (int)TaskRelocationTypeEnum.Relocation:
                        res = task.TaskStatus == TaskRelocationStatusEnum.RelocationNew.ObjToInt();
                        break;
                    default:
                        res = false;
                        break;
                }
                if (!res) return WebResponseContent.Instance.Error("任务状态异常");
                Dt_StockInfo stockInfo = _stockRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
                _unitOfWorkManage.BeginTran();
                int stockmsseg;
                int locationmsseg;
                bool taskmsseg;
                if (task.TaskType == TaskOutboundTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
                {
                    stockmsseg = _stockRepository.Db.Updateable<Dt_StockInfo>()
                  .SetColumns(x => x.StockStatus == StockStatusEmun.入库完成.ObjToInt())
                  .Where(x => x.PalletCode == task.PalletCode)
                  .ExecuteCommand();
                    locationmsseg = _locationInfoRepository.Db.Updateable<Dt_LocationInfo>()
          .SetColumns(x => x.LocationStatus == LocationStatusEnum.InStock.ObjToInt())
          .Where(x => x.LocationCode == stockInfo.LocationCode)
          .ExecuteCommand();
                    taskmsseg = BaseDal.DeleteData(task);
                }
                else
                {
                    locationmsseg = _locationInfoRepository.Db.Updateable<Dt_LocationInfo>()
                    .SetColumns(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt())
                    .Where(x => x.LocationCode == stockInfo.LocationCode)
                    .ExecuteCommand();
                    stockmsseg = _stockRepository.DeleteData(stockInfo).ObjToInt();
                    taskmsseg = BaseDal.DeleteData(task);
                }
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                //获取接口进行调取
                var ConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_WCS_IPAddress, SysConfigConst.WCSCancelinventory);      //获取到wcs全部类型的接口
                string WCSReceiveTaskAPI = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
                if (WCSReceiveTaskAPI == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"任务手动取消失败,未配置WCS任务手动取消反馈接口");
                }
                var respon = HttpHelper.Get(WCSReceiveTaskAPI, JsonConvert.SerializeObject(task.TaskNum));
                if (respon == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数为空");
                }
                var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
                if (!response.Success)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数原因:{response.Message}");
                }
                if (stockmsseg <= 0 && locationmsseg <= 0 && taskmsseg)
                    {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error("任务取消失败");
                    }
                //获取接口进行调取
                var MESConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_MES_IPAddress, SysConfigConst.MEScancelTask);      //获取到MES全部类型的接口
                string MEScancelTask = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
                if (MEScancelTask == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"任务手动完成失败,未配置WCS任务手动完成反馈接口");
                }
                var MES = new
                {
                    businessId = task.MESbusinessId,
                    taskId = task.MEStaskId,
                    palletCode = task.PalletCode
                };
                var MESrespon = HttpHelper.Post(MEScancelTask, JsonConvert.SerializeObject(MES));
                if (respon == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数为空");
                }
                var MESresponse = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
                if (!response.Success)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数原因:{response.Message}");
                }
                _unitOfWorkManage.CommitTran();
                return webResponse.OK("任务取消成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return webResponse.Error($"取消任务失败,原因:{ex.Message}");
            }
        }
@@ -682,47 +786,50 @@
            try
            {
                int result = GetLastPart(locationCode).ObjToInt(); // è¿”回 "C03"
                Dt_StockInfo dt_StockInfo =  _stockRepository.QueryFirst(x => x.LocationCode.StartsWith("SC01") && x.StockStatus == 6);
                int result = GetLastPart(dt_StockInfo.LocationCode).ObjToInt(); // è¿”回 "C03"
                List<Dt_Task> dt_s = new List<Dt_Task>();
                //生成移动任务
                Dt_Task dt_Task = new()
                {
                    PalletCode = "1111",
                    TaskNum = 111,
                    PalletCode = dt_StockInfo.PalletCode,
                    TaskNum = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
                    Roadway = "SC01",
                    TaskType = TaskOutboundTypeEnum.Outbound.ObjToInt(),
                    TaskStatus = TaskOutStatusEnum.OutNew.ObjToInt(),
                    SourceAddress = locationCode,
                    TargetAddress = "1002",
                    CurrentAddress = locationCode,
                    NextAddress = "1002",
                    SourceAddress = dt_StockInfo.LocationCode,
                    TargetAddress = "1006",
                    CurrentAddress = dt_StockInfo.LocationCode,
                    NextAddress = "1006",
                    Grade = 1,
                    Creater = "MES",
                    Depth = result,
                    CreateDate = DateTime.Now,
                    MEStaskId = "111",
                    MESbusinessId = "123456",
                    MESsubPalletCode = "",
                    OutboundPlatform = "1001"
                    MEStaskId = "EXTASK20251020002",
                    MESbusinessId = "EXBUS20251020002",
                    MESsubPalletCode = dt_StockInfo.MESsubPalletCode,
                    OutboundPlatform = "1005"
                };
                //创建组盘信息
                var dt_Stock = new Dt_StockInfo
                {
                    PalletCode = dt_Task.PalletCode,
                    PalletType = 1,
                    LocationCode = locationCode,
                    StockStatus = 6,
                    Creater = "WMS",
                    CreateDate = DateTime.Now,
                    MESsubPalletCode = dt_Task.MESsubPalletCode,
                };
                ////创建组盘信息
                //var dt_Stock = new Dt_StockInfo
                //{
                //    PalletCode = dt_Task.PalletCode,
                //    PalletType = 1,
                //    LocationCode = locationCode,
                //    StockStatus = 6,
                //    Creater = "WMS",
                //    CreateDate = DateTime.Now,
                //    MESsubPalletCode = dt_Task.MESsubPalletCode,
                //};
                Dt_LocationInfo dt_LocationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == locationCode);
                Dt_LocationInfo dt_LocationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == dt_StockInfo.LocationCode);
                dt_LocationInfo.LocationStatus = (int)LocationStatusEnum.InStockLock;
                dt_StockInfo.StockStatus = 7;
                bool l = _locationInfoRepository.UpdateData(dt_LocationInfo);
                int s = _stockRepository.AddData(dt_Stock);
                bool s = _stockRepository.UpdateData(dt_StockInfo);
                int t = BaseDal.AddData(dt_Task);
                bool ss = s.ObjToBool();
                bool tt = t.ObjToBool();
@@ -749,5 +856,139 @@
            }
        }
        /// <summary>
        /// æ‰‹åŠ¨å®ŒæˆæŽ¥å£
        /// </summary>
        /// <param name="taskNum"></param>
        /// <returns></returns>
        /// <exception cref="NotImplementedException"></exception>
        public WebResponseContent ManualTaskCompleted(int taskNum)
        {
            WebResponseContent webResponse = new WebResponseContent();
            try
            {
                // æŸ¥æ‰¾ä»»åŠ¡
                Dt_Task task = BaseDal.QueryFirst(x => x.TaskNum == taskNum);
                if (task == null)
                {
                    return webResponse.Error($"未找到任务号为【{taskNum}】的任务信息");
                }
                Dt_StockInfo stockInfo = _stockRepository.QueryFirst(x => x.PalletCode == task.PalletCode);
                _unitOfWorkManage.BeginTran();
                Dt_StockInfo stockmsseg;
                Dt_LocationInfo locationmsseg1 = null;
                Dt_LocationInfo locationmsseg2 = null;
                bool taskmsseg;
                bool task_htymsseg;
                bool location1;
                bool location2 = false;
                bool resstock;
                if (task.TaskType == TaskInboundTypeEnum.Inbound.ObjToInt() || task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
                {
                    stockmsseg = _stockRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                    if (stockmsseg == null) { return webResponse.Error("未找到库存信息"); };
                    stockmsseg.StockStatus = StockStatusEmun.入库完成.ObjToInt();
                     resstock = _stockRepository.UpdateData(stockmsseg);
                    if (task.TaskType == TaskRelocationTypeEnum.Relocation.ObjToInt())
                    {
                        locationmsseg1 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                        locationmsseg2 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.CurrentAddress);
                        if (locationmsseg1 == null || locationmsseg2 == null) { webResponse.Error("未找到货位信息"); }
                        locationmsseg1.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                        locationmsseg2.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                        location1 = _locationInfoRepository.UpdateData(locationmsseg1);
                        location2 = _locationInfoRepository.UpdateData(locationmsseg2);
                    }
                    else
                    {
                        locationmsseg1 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
                        if (locationmsseg1 == null) { webResponse.Error("未找到货位信息"); }
                        locationmsseg1.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                        location1 = _locationInfoRepository.UpdateData(locationmsseg1);
                    }
                }
                else
                {
                    stockmsseg = _stockRepository.QueryFirst(x => x.LocationCode == task.CurrentAddress);
                    if (stockmsseg == null) { return webResponse.Error("未找到库存信息"); }
                    resstock = _stockRepository.DeleteData(stockmsseg);
                    locationmsseg1 = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.CurrentAddress);
                    if (locationmsseg1 == null) { webResponse.Error("未找到货位信息"); }
                    locationmsseg1.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
                    location1 = _locationInfoRepository.UpdateData(locationmsseg1);
                }
                taskmsseg = BaseDal.DeleteData(task);
                task_htymsseg = BaseDal.DeleteAndMoveIntoHty(task,OperateTypeEnum.人工完成);
                //获取接口进行调取
                var ConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_WCS_IPAddress, SysConfigConst.WCSManualTaskCompleted);      //获取到wcs全部类型的接口
                string WCSReceiveTaskAPI = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
                if (WCSReceiveTaskAPI == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"任务手动完成失败,未配置WCS任务手动完成反馈接口");
                }
                var respon = HttpHelper.Get(WCSReceiveTaskAPI, JsonConvert.SerializeObject(task.TaskNum));
                if (respon == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数为空");
                }
                var response = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
                if (!response.Success)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数原因:{response.Message}");
                }
                if (!(resstock && task_htymsseg && taskmsseg && task.TaskType ==TaskOutboundTypeEnum.Outbound.ObjToInt() ? location1 : (location1 && location2)))
                    {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"任务手动完成失败");
                }
                //获取接口进行调取
                var MESConfigsAPIInfo = _dt_ApiInfoService.GetConfigsByAPIInfo(CateGoryConst.CONFIG_MES_IPAddress, SysConfigConst.MESmockComplete);      //获取到wcs全部类型的接口
                string MESmockComplete = ConfigsAPIInfo.ApiAddress + ConfigsAPIInfo.ApiName;
                if (MESConfigsAPIInfo == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"任务手动完成失败,未配置WCS任务手动完成反馈接口");
                }
                var MES = new
                {
                    businessId = task.MESbusinessId,
                    taskId = task.MEStaskId,
                    palletCode = task.PalletCode
            };
                var MESrespon = HttpHelper.Post(MESmockComplete, JsonConvert.SerializeObject(MES));
                if (respon == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数为空");
                }
                var MESresponse = JsonConvert.DeserializeObject<ApiResponse<object>>(respon);
                if (!response.Success)
                {
                    _unitOfWorkManage.RollbackTran();
                    return webResponse.Error($"调取接口失败,反馈参数原因:{response.Message}");
                }
                _unitOfWorkManage.CommitTran();
                return webResponse.OK("任务手动完成成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return webResponse.Error($"任务手动完成失败,原因:{ex.Message}");
            }
        }
    }
}