Просмотр исходного кода

优化 SxController 和 SXService,新增接口

对 `SxController.cs` 文件进行了大量修改,移除了多个静态对象锁的定义,并对部分锁进行了重命名和重新定义。新增了 `SynchronizeBoxStatus` 接口及其请求类 `SynchronizeBoxStatusRequest`,并在 `SXService.cs` 中实现了该方法,处理箱号状态的同步逻辑。同时更新了多个方法的注释,细化和优化了部分方法的实现,确保了代码的可读性、维护性及业务逻辑的一致性。
林豪 左 2 недель назад
Родитель
Сommit
6a3a5c44d1

+ 149 - 101
wms.api/Controllers/SxController.cs

@@ -33,57 +33,58 @@ namespace wms.api.Controllers
         private readonly ISXService _sxService;
         private readonly ILogger<SxController> _logger;
         private readonly IMapper _mapper;
-        static object lockerCurtainProductionOrder = new object();
-        static object lockerSpoolMaterialInfoTrans = new object();
-        static object lockerCloseWorkOrder = new object();
-        static object lockerlockerStockChange = new object();
-        static object lockerManualBuildStockTrans = new object();
-        static object lockerBomInfoTrans = new object();
-        static object lockerCompleteTask = new object();
-        static object lockerApplyStockInLoc = new object();
-        static object lockerSKUInfoTrans = new object();
-        static object lockerPackInfoTrans = new object();
-        
-        static object lockerTorsChkComplete = new object();
-        static object lockerGetTunnelPriorityList = new object();
-        static object lockerApplyFloor = new object();
-        static object lockerTorsChkStockOut = new object();
-        static object lockerCancelOrComplet = new object();
-        static object lockerCarryTask = new object();
-        static object lockerPalletizingLayerPackStockOut = new object();
-        static object lockerTorsChkValue = new object();
-        static object lockerSrmPickOutCompleted = new object();
-        static object lockerTorsChkFloor = new object();
-        static object lockerPalletizingPatchWheel = new object();
-        static object lockerPalletizingForceknot = new object();
-        static object lockerPalletizinginfobinde = new object();
-        static object lockerCompletePalletizingTask = new object();
-        static object lockerSxMoveTask = new object();
-        static object lockerPalletizingSpcPackStockOut = new object();
-        static object lockerPalletizingSpcPackPreALL = new object();
-        
-        static object lockerPalletizingSpcNotPackStockOut = new object();
-        static object lockerTorsChkStationbinde = new object();
-        static object lockerTorsChkErrorinfo = new object();
-        static object lockerTorsChkinfo = new object();
-        static object lockerPalletizingPackBStockOut = new object();
-        static object lockerSolderErrorStockOut = new object();
-        static object lockerChongraoPackStockOut = new object();
-        static object lockerForceCancelTask = new object();
-        static object lockerDeleteStockInfo = new object();
-        static object lockerUpdateStockState = new object();
-        static object lockerUpdateCellState = new object();
-        static object lockerDataSwapCell = new object();
-        static object lockerDataBasePatch = new object();
-        static object lockerUpdatePuchState = new object();
-        static object lockerDataMoveCell = new object();
-        static object lockerTaskRepeatSend = new object();
-        static object lockerUpdateTaskState = new object();
-        static object lockerCancelPreStockinfo = new object();
-        static object lockerErrorDateclearJob = new object();
-        static object lockerFlowDataMoveJob = new object();
-
-        
+        private static object lockerCurtainProductionOrder = new object();
+        private static object lockerSpoolMaterialInfoTrans = new object();
+        private static object lockerCloseWorkOrder = new object();
+        private static object lockerSynchronizeBoxStatus = new object();
+
+        private static object lockerlockerStockChange = new object();
+        private static object lockerManualBuildStockTrans = new object();
+        private static object lockerBomInfoTrans = new object();
+        private static object lockerCompleteTask = new object();
+        private static object lockerApplyStockInLoc = new object();
+        private static object lockerSKUInfoTrans = new object();
+        private static object lockerPackInfoTrans = new object();
+
+        private static object lockerTorsChkComplete = new object();
+        private static object lockerGetTunnelPriorityList = new object();
+        private static object lockerApplyFloor = new object();
+        private static object lockerTorsChkStockOut = new object();
+        private static object lockerCancelOrComplet = new object();
+        private static object lockerCarryTask = new object();
+        private static object lockerPalletizingLayerPackStockOut = new object();
+        private static object lockerTorsChkValue = new object();
+        private static object lockerSrmPickOutCompleted = new object();
+        private static object lockerTorsChkFloor = new object();
+        private static object lockerPalletizingPatchWheel = new object();
+        private static object lockerPalletizingForceknot = new object();
+        private static object lockerPalletizinginfobinde = new object();
+        private static object lockerCompletePalletizingTask = new object();
+        private static object lockerSxMoveTask = new object();
+        private static object lockerPalletizingSpcPackStockOut = new object();
+        private static object lockerPalletizingSpcPackPreALL = new object();
+
+        private static object lockerPalletizingSpcNotPackStockOut = new object();
+        private static object lockerTorsChkStationbinde = new object();
+        private static object lockerTorsChkErrorinfo = new object();
+        private static object lockerTorsChkinfo = new object();
+        private static object lockerPalletizingPackBStockOut = new object();
+        private static object lockerSolderErrorStockOut = new object();
+        private static object lockerChongraoPackStockOut = new object();
+        private static object lockerForceCancelTask = new object();
+        private static object lockerDeleteStockInfo = new object();
+        private static object lockerUpdateStockState = new object();
+        private static object lockerUpdateCellState = new object();
+        private static object lockerDataSwapCell = new object();
+        private static object lockerDataBasePatch = new object();
+        private static object lockerUpdatePuchState = new object();
+        private static object lockerDataMoveCell = new object();
+        private static object lockerTaskRepeatSend = new object();
+        private static object lockerUpdateTaskState = new object();
+        private static object lockerCancelPreStockinfo = new object();
+        private static object lockerErrorDateclearJob = new object();
+        private static object lockerFlowDataMoveJob = new object();
+
         public SxController(ISXService sxService, ILogger<SxController> logger, IMapper mapper) : base(sxService, logger)
         {
             _sxService = sxService;
@@ -119,6 +120,7 @@ namespace wms.api.Controllers
 
             return res;
         }
+
         /// <summary>
         /// 帘线生产工单信息传输接口
         /// </summary>
@@ -144,7 +146,7 @@ namespace wms.api.Controllers
         {
             lock (lockerSpoolMaterialInfoTrans)
             {
-               return _sxService.SpoolMaterialInfoTrans(reqDto);
+                return _sxService.SpoolMaterialInfoTrans(reqDto);
             }
             //return ConcurrencyReqControl<SxSpoolMaterialInfoTransRequest, SRes>(lockerSpoolMaterialInfoTrans, "SxSpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _sxService.SpoolMaterialInfoTrans);
         }
@@ -164,6 +166,20 @@ namespace wms.api.Controllers
             //return ConcurrencyReqControl<SxSpoolMaterialInfoTransRequest, SRes>(lockerSpoolMaterialInfoTrans, "SxSpoolMaterialInfoTrans", reqDto.SpoolCode, reqDto, _sxService.SpoolMaterialInfoTrans);
         }
 
+        /// <summary>
+        /// 同步箱号状态
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
+        [HttpPost(Name = "SynchronizeBoxStatus")]
+        public SRes SynchronizeBoxStatus(SynchronizeBoxStatusRequest reqDto)
+        {
+            lock (lockerSynchronizeBoxStatus)
+            {
+                return _sxService.SynchronizeBoxStatus(reqDto);
+            }
+        }
+
         /// <summary>
         /// SKU信息传输接口
         /// </summary>
@@ -186,17 +202,17 @@ namespace wms.api.Controllers
             return ConcurrencyReqControl<PackInfoTrans, SRes>(lockerPackInfoTrans, "SKUInfoTrans", reqDto.PackCode, reqDto, _sxService.PackInfoTrans);
         }
 
-
         /// <summary>
         /// 扭转出库完成
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-        [HttpPost]  
+        [HttpPost]
         public SRes<int> TorsChkComplete(TorsChkCompleteRequest request)
         {
             return ConcurrencyReqControl<TorsChkCompleteRequest, SRes<int>>(lockerTorsChkComplete, "TorsChkComplete", request.TaskNo, request, _sxService.TorsChkComplete);
         }
+
         /// <summary>
         /// 扭转入库分配楼层接口
         /// </summary>
@@ -210,6 +226,7 @@ namespace wms.api.Controllers
                 return _sxService.TorsChkFloor(reqDto);
             }
         }
+
         /// <summary>
         /// 扭转出库申请
         /// </summary>
@@ -220,6 +237,7 @@ namespace wms.api.Controllers
         {
             return ConcurrencyReqControl<TorsChkStockOutRequest, SRes>(lockerTorsChkStockOut, "TorsChkStockOut", request.Equip, request, _sxService.TorsChkStockOut);
         }
+
         /// <summary>
         /// 接收扭转值
         /// </summary>
@@ -233,6 +251,7 @@ namespace wms.api.Controllers
                 return _sxService.TorsChkValue(request);
             }
         }
+
         /// <summary>
         /// 扭转工位产品绑定接口
         /// </summary>
@@ -246,6 +265,7 @@ namespace wms.api.Controllers
                 return _sxService.TorsChkStationbinde(request);
             }
         }
+
         /// <summary>
         /// 扭转异常信息上传
         /// </summary>
@@ -259,6 +279,7 @@ namespace wms.api.Controllers
                 return _sxService.TorsChkErrorinfo(request);
             }
         }
+
         /// <summary>
         /// 扭转获取基础信息
         /// </summary>
@@ -271,13 +292,14 @@ namespace wms.api.Controllers
             {
                 return _sxService.GetTorsChkinfo(request);
             }
-
         }
+
         [HttpPost]
         public SRes CellInfo(string code)
         {
             return _sxService.CellInfo(code);
         }
+
         /// <summary>
         /// 码垛层配装箱
         /// </summary>
@@ -288,7 +310,7 @@ namespace wms.api.Controllers
         {
             return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingLayerPackStockOut, "PalletizingLayerPackStockOut", request.Equip, request, _sxService.PalletizingLayerPackStockOut);
         }
-       
+
         /// <summary>
         /// 码垛SPC非控制装箱(缓存托盘)
         /// </summary>
@@ -303,7 +325,7 @@ namespace wms.api.Controllers
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcNotPackStockOut);
         }
-       
+
         /// <summary>
         /// 码垛SPC控制装箱(缓存托盘)
         /// </summary>
@@ -331,21 +353,18 @@ namespace wms.api.Controllers
             {
                 var timesign = IdFactory.NewId();
 
-                var temp3 =  _sxService.PalletizingPackBStockOut(request);
+                var temp3 = _sxService.PalletizingPackBStockOut(request);
 
                 //var temp1 = _sxService.PalletizingSpcPackStockOut3(request);//控制箱根据新逻辑已经合并到非控制箱中
-               
-                var temp2 = _sxService.PalletizingSpcNotPackStockOut3(request);
 
+                var temp2 = _sxService.PalletizingSpcNotPackStockOut3(request);
 
-                temp2.ResMsg = "非控制箱执行结果:" + temp2.ResMsg  + ";B质量码垛:"+ temp3.ResMsg;
+                temp2.ResMsg = "非控制箱执行结果:" + temp2.ResMsg + ";B质量码垛:" + temp3.ResMsg;
                 return temp2;
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
         }
 
-
-
         /// <summary>
         /// 码垛SPC装箱库存程序
         /// </summary>
@@ -375,9 +394,8 @@ namespace wms.api.Controllers
         {
             lock (lockerPalletizingSpcPackPreALL)
             {
-                
                 var temp2 = _sxService.PalletizingSpcNotPackRulePre2(request);
-                temp2.ResMsg = "非控制箱预占库存执行结果:" + temp2.ResMsg ;
+                temp2.ResMsg = "非控制箱预占库存执行结果:" + temp2.ResMsg;
                 return temp2;
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
@@ -398,6 +416,7 @@ namespace wms.api.Controllers
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
         }
+
         /// <summary>
         /// 码垛SPC装箱控制预占库存程序
         /// </summary>
@@ -414,7 +433,6 @@ namespace wms.api.Controllers
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
         }
 
-
         /// <summary>
         /// 码垛SPC非控制箱出预占库存
         /// </summary>
@@ -430,6 +448,7 @@ namespace wms.api.Controllers
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
         }
+
         /// <summary>
         /// 码垛SPC控制箱出预占库存
         /// </summary>
@@ -446,8 +465,6 @@ namespace wms.api.Controllers
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.PalletizingSpcPackStockOut);
         }
 
-
-
         /// <summary>
         /// B质量码垛装箱
         /// </summary>
@@ -462,6 +479,7 @@ namespace wms.api.Controllers
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingPackBStockOut, "PalletizingPackBStockOut", request.Equip, request, _sxService.PalletizingPackBStockOut);
         }
+
         /// <summary>
         /// 重绕盘超时装箱码垛
         /// </summary>
@@ -475,6 +493,7 @@ namespace wms.api.Controllers
                 return _sxService.ChongraoPackStockOut(request);
             }
         }
+
         /// <summary>
         /// 焊点不符合异常排出
         /// </summary>
@@ -485,6 +504,7 @@ namespace wms.api.Controllers
         {
             return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerSolderErrorStockOut, "SolderErrorStockOut", request.Equip, request, _sxService.SolderErrorStockOut);
         }
+
         /// <summary>
         /// 特殊码垛出库(超时)
         /// </summary>
@@ -495,10 +515,11 @@ namespace wms.api.Controllers
         {
             lock (lockerPalletizingSpcPackStockOut)
             {
-               return _sxService.SpecialStockOut(request);
+                return _sxService.SpecialStockOut(request);
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.SpecialStockOut);
         }
+
         /// <summary>
         /// 手动码垛
         /// </summary>
@@ -513,6 +534,7 @@ namespace wms.api.Controllers
             }
             //return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.SpecialStockOut);
         }
+
         /// <summary>
         /// C级品码垛出库
         /// </summary>
@@ -524,9 +546,9 @@ namespace wms.api.Controllers
             lock (lockerPalletizingSpcPackStockOut)
             {
                 return _sxService.CGrageStockOut(request);
-
             }
         }
+
         /// <summary>
         /// 清理库存 (码垛)
         /// </summary>
@@ -537,6 +559,7 @@ namespace wms.api.Controllers
         {
             return ConcurrencyReqControl<PalletizingPackStockOutRequest, SRes>(lockerPalletizingSpcPackStockOut, "PalletizingSpcPackStockOut", request.Equip, request, _sxService.OnePackStock);
         }
+
         /// <summary>
         /// 完成码垛任务(自动入库)
         /// </summary>
@@ -550,6 +573,7 @@ namespace wms.api.Controllers
                 return _sxService.CompletePalletizingTask(reqDto);
             }
         }
+
         /// <summary>
         /// 码垛补工字轮接口
         /// </summary>
@@ -560,6 +584,7 @@ namespace wms.api.Controllers
         {
             return ConcurrencyReqControl<PalletizingPatchWheelRequest, SRes>(lockerPalletizingPatchWheel, "PalletizingPatchWheel", request.Equip, request, _sxService.PalletizingPatchWheel);
         }
+
         /// <summary>
         /// 码垛强制结盘
         /// </summary>
@@ -573,6 +598,7 @@ namespace wms.api.Controllers
                 return _sxService.PalletizingForceknot(request);
             }
         }
+
         /// <summary>
         /// 码垛信息绑定(抓取完成)
         /// </summary>
@@ -586,6 +612,7 @@ namespace wms.api.Controllers
                 return _sxService.Palletizinginfobinde(request);
             }
         }
+
         /// <summary>
         /// 手动出库
         /// </summary>
@@ -628,6 +655,7 @@ namespace wms.api.Controllers
                 return _sxService.Manaler(newreq);
             }
         }
+
         /// <summary>
         /// CD级品自动出库
         /// </summary>
@@ -639,7 +667,7 @@ namespace wms.api.Controllers
             var list = _sxService.GetCGradeList();
             if (list.ResDataList.Any())
             {
-                return  ManualTask(new DetailCodeStrdtoRequest() { Location = new List<string>() {list.ResDataList.First() } , EndPoint = 5, User = "WMS自动触发CD排出" });
+                return ManualTask(new DetailCodeStrdtoRequest() { Location = new List<string>() { list.ResDataList.First() }, EndPoint = 5, User = "WMS自动触发CD排出" });
             }
             return null;
         }
@@ -711,11 +739,9 @@ namespace wms.api.Controllers
                     {
                         _logger.LogInformation("触发主动拉取工字轮信息异常" + reqDto.Code);
                     }
-                   
                 }
                 return res;
             }
-
         }
 
         /// <summary>
@@ -736,8 +762,8 @@ namespace wms.api.Controllers
                 //先判断有没有条码信息
                 return _sxService.GetTunnelPriorityList(reqEntity);
             }
-
         }
+
         /// <summary>
         /// 分配货位
         /// </summary>
@@ -748,6 +774,7 @@ namespace wms.api.Controllers
         {
             return ConcurrencyReqControl<SxApplyStockInLocRequest, SRes<List<dto.response.hj.ApplyStockInLocResponse>>>(lockerApplyStockInLoc, "SxApplyStockInLoc" + reqEntity.TunnelNum + reqEntity.Floor, "分配货位" + reqEntity.TunnelNum + reqEntity.Floor, reqEntity, _sxService.ApplyStockInLoc);
         }
+
         /// <summary>
         /// 完成出库任务
         /// </summary>
@@ -761,6 +788,7 @@ namespace wms.api.Controllers
                 return _sxService.CompleteTask(reqDto);
             }
         }
+
         /// <summary>
         /// 堆垛机完成
         /// </summary>
@@ -774,6 +802,7 @@ namespace wms.api.Controllers
                 return _sxService.SrmCompleted(reqDto);
             }
         }
+
         /// <summary>
         /// 取消/完成任务验证(只验证不做业务处理,开放wcs系统调用)
         /// </summary>
@@ -787,6 +816,7 @@ namespace wms.api.Controllers
                 return _sxService.CancelTaskVerify(request);
             }
         }
+
         /// <summary>
         /// 执行任务(开放wcs调用,前端不调用)
         /// </summary>
@@ -813,24 +843,21 @@ namespace wms.api.Controllers
                 }
                 foreach (var item in request.TaskNo)
                 {
-                    var calres = _sxService.CancelTask(new CompleteTaskRequest() { TaskNum = item, WCSUpdateName ="wms"  });
+                    var calres = _sxService.CancelTask(new CompleteTaskRequest() { TaskNum = item, WCSUpdateName = "wms" });
                     if (calres.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
                     {
                         return calres;
                     }
-                    var forres =  _sxService.ForceCancelTask(new ErrorTaskRequest() { TaskNo = item.ToString(), WareHouse = Const.SxWareHouse });
+                    var forres = _sxService.ForceCancelTask(new ErrorTaskRequest() { TaskNo = item.ToString(), WareHouse = Const.SxWareHouse });
                     if (forres.ResCode != ResponseStatusCodeEnum.Sucess.GetHashCode())
                     {
                         return calres;
                     }
                 }
-                return new SRes();              
+                return new SRes();
             }
         }
 
-
-
-
         /// <summary>
         /// 帘线工字轮入库反馈接口
         /// </summary>
@@ -897,11 +924,11 @@ namespace wms.api.Controllers
                 var ids = onefloor.Select(p => p.Id).ToList();
                 //if (resbody.success == true)
                 //{
-                    _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
-                    {
-                        Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
-                        WhereExpression = it => ids.Contains(it.Id)
-                    });
+                _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
+                {
+                    Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
+                    WhereExpression = it => ids.Contains(it.Id)
+                });
                 //}
                 //else
                 //{
@@ -913,7 +940,6 @@ namespace wms.api.Controllers
                 //}
             }
 
-
             request.Type = SxFackbeekType.InterfaceType_SX_ErrorStockOut.ToString();
             var list1 = _sxService.GetPushDatelistAuto(request);
             ////if (!list.Any())
@@ -934,11 +960,11 @@ namespace wms.api.Controllers
                 var ids = onefloor.Select(p => p.Id).ToList();
                 //if (resbody.success == true)
                 //{
-                    _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
-                    {
-                        Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
-                        WhereExpression = it => ids.Contains(it.Id)
-                    });
+                _sxService.UpdatePushModelColumns(new sqlsugar.model.UpdateModelColumns<BillPushinfo>()
+                {
+                    Columns = it => new BillPushinfo { PostResult = 1, PostQty = it.PostQty + 1, ResDesc = "自动推送", EditTime = DateTime.Now },
+                    WhereExpression = it => ids.Contains(it.Id)
+                });
                 //}
                 //else
                 //{
@@ -950,9 +976,9 @@ namespace wms.api.Controllers
                 //}
             }
 
-
             return res;
         }
+
         /// <summary>
         /// 工字轮装箱位置信息上传接口
         /// </summary>
@@ -983,6 +1009,7 @@ namespace wms.api.Controllers
             }
             //return ConcurrencyReqControl<SxStockChangeRequest, SRes>(lockerlockerStockChange, "SxStockChange", reqDto.BillCode, reqDto, _sxService.StockChange);
         }
+
         /// <summary>
         /// 改判反馈接口
         /// </summary>
@@ -998,6 +1025,7 @@ namespace wms.api.Controllers
             //return resbody;
             return null;
         }
+
         /// <summary>
         /// 实时库存查询接口
         /// </summary>
@@ -1008,6 +1036,7 @@ namespace wms.api.Controllers
         {
             return _sxService.GetCurStockList(request);
         }
+
         /// <summary>
         /// 移库货位上报MES接口
         /// </summary>
@@ -1048,6 +1077,7 @@ namespace wms.api.Controllers
             }
             return res;
         }
+
         [HttpPost]
         public SRes InitWareCell(int row, int col, int deot, int rowcount, int tun)
         {
@@ -1068,6 +1098,7 @@ namespace wms.api.Controllers
             JobScheduler.Start(sysjob.Code, Type.GetType("wms.api.Job.PostJob"), sysjob.CronExpression);
             return res.ToCamelCaseString();
         }
+
         [HttpPost]
         public string ExecuteJob(DetailCodeStrRequest reqEntity)
         {
@@ -1095,6 +1126,7 @@ namespace wms.api.Controllers
             }
             return res.ToCamelCaseString();
         }
+
         /// <summary>
         /// 分页Job列表
         /// </summary>
@@ -1115,6 +1147,7 @@ namespace wms.api.Controllers
             }
             return new List<dto.response.hj.SysJobDto>();
         }
+
         /// <summary>
         /// 获取执行状态
         /// </summary>
@@ -1142,6 +1175,7 @@ namespace wms.api.Controllers
                 return "Stop";
             }
         }
+
         /// <summary>
         /// 异常信息传输接口
         /// </summary>
@@ -1152,6 +1186,7 @@ namespace wms.api.Controllers
         {
             return _sxService.GetMesErrorInfo(request);
         }
+
         /// <summary>
         /// 更新箱号
         /// </summary>
@@ -1182,11 +1217,11 @@ namespace wms.api.Controllers
         [HttpPost]
         public SRes test(UpdateBoxNoRequest request)
         {
-   
-
             return null; ;
         }
+
         #region 异常处理
+
         /// <summary>
         /// 强制取消任务
         /// </summary>
@@ -1200,6 +1235,7 @@ namespace wms.api.Controllers
                 return _sxService.ForceCancelTask(request);
             }
         }
+
         /// <summary>
         /// 删除库存信息
         /// </summary>
@@ -1213,6 +1249,7 @@ namespace wms.api.Controllers
                 return _sxService.DeleteStockInfo(request);
             }
         }
+
         /// <summary>
         /// 修改库存状态
         /// </summary>
@@ -1226,6 +1263,7 @@ namespace wms.api.Controllers
                 return _sxService.UpdateStockState(request);
             }
         }
+
         /// <summary>
         /// 修改货位状态
         /// </summary>
@@ -1239,6 +1277,7 @@ namespace wms.api.Controllers
                 return _sxService.UpdateCellState(request);
             }
         }
+
         /// <summary>
         /// 货位数据互换
         /// </summary>
@@ -1252,6 +1291,7 @@ namespace wms.api.Controllers
                 return _sxService.DataSwapCell(request);
             }
         }
+
         /// <summary>
         /// 补数据
         /// </summary>
@@ -1265,6 +1305,7 @@ namespace wms.api.Controllers
                 return _sxService.DataBasePatch(request);
             }
         }
+
         /// <summary>
         /// 补数据(异常排出口回库使用)
         /// </summary>
@@ -1292,6 +1333,7 @@ namespace wms.api.Controllers
                 return null;
             }
         }
+
         /// <summary>
         /// 补数据
         /// </summary>
@@ -1305,6 +1347,7 @@ namespace wms.api.Controllers
                 return _sxService.DataBasePatch3(request);
             }
         }
+
         [HttpPost]
         public SRes UpdatePurchState(UpdatePurchStateRequestdto request)
         {
@@ -1313,6 +1356,7 @@ namespace wms.api.Controllers
                 return _sxService.UpdatePurchState(request);
             }
         }
+
         /// <summary>
         /// 货位数据转移
         /// </summary>
@@ -1326,6 +1370,7 @@ namespace wms.api.Controllers
                 return _sxService.DataMoveCell(request);
             }
         }
+
         /// <summary>
         /// 机器人任务重复下发
         /// </summary>
@@ -1339,6 +1384,7 @@ namespace wms.api.Controllers
                 return _sxService.TaskRepeatSend(request);
             }
         }
+
         /// <summary>
         /// 修改任务状态
         /// </summary>
@@ -1366,6 +1412,7 @@ namespace wms.api.Controllers
                 return _sxService.CancelPreStockinfo(request);
             }
         }
+
         /// <summary>
         /// 获取扭转值范围
         /// </summary>
@@ -1374,7 +1421,7 @@ namespace wms.api.Controllers
         [HttpPost]
         public SRes<GetTorsRangeRes> GetTorsRange(DetailCodeRequest request)
         {
-             return _sxService.GetTorsRange(request);
+            return _sxService.GetTorsRange(request);
         }
 
         /// <summary>
@@ -1390,6 +1437,7 @@ namespace wms.api.Controllers
                 return _sxService.DeleteTorsBind(request);
             }
         }
+
         /// <summary>
         /// 解锁工字轮锁定
         /// </summary>
@@ -1404,15 +1452,16 @@ namespace wms.api.Controllers
             }
         }
 
-
         [HttpPost]
         public SRes test1()
         {
             var sysconfcon = int.Parse(_sxService.GetSysConfigByCode("TaskRemoveHours").SContent) * (-1);
-                
+
             return new SRes() { ResMsg = sysconfcon.ToString() };
         }
-        #endregion
+
+        #endregion 异常处理
+
         [HttpPost]
         public SRes ErrorDateclearJob()
         {
@@ -1421,6 +1470,7 @@ namespace wms.api.Controllers
                 return _sxService.ErrorDateclearJob();
             }
         }
+
         /// <summary>
         /// 流水数据归档
         /// </summary>
@@ -1436,8 +1486,6 @@ namespace wms.api.Controllers
             }
         }
 
-
-
         //public SRes<List<SBoxInfoRes>> GetSBoxInfoResList()
         //{
         //    var res = new SRes<List<SBoxInfoRes>>() { ResDataList = new List<List<SBoxInfoRes>>() };
@@ -1445,4 +1493,4 @@ namespace wms.api.Controllers
         //    return res;
         //}
     }
-}
+}

+ 10 - 0
wms.dto/request/fj/CurtainProductionOrderRequest.cs

@@ -61,6 +61,16 @@ namespace wms.dto.request.fj
 
 
         public List<ListPackagelnfoItem> ListPackagelnfo { get; set; }
+
+        /// <summary>
+        /// 每箱最大焊点盘数
+        /// </summary>
+        public string SolderJointMax { get; set; }
+
+        /// <summary>
+        /// 每箱焊点总数
+        /// </summary>
+        public string HuSolderJointMax { get; set; }
     }
 
     public class ListBoxInfoItem

+ 22 - 0
wms.dto/request/sx/SynchronizeBoxStatusRequest.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace wms.dto.request.sx
+{
+    /// <summary>
+    /// 同步箱号状态
+    /// </summary>
+    public class SynchronizeBoxStatusRequest : BaseRequest
+    {
+        /// <summary>
+        /// 箱号
+        /// </summary>
+        public string HuNr { get; set; }
+
+        /// <summary>
+        /// 同步状态
+        /// </summary>
+        public string UseStatus { get; set; }
+    }
+}

+ 13 - 0
wms.service/IService/ISXService.cs

@@ -27,7 +27,20 @@ namespace wms.service.IService
 
         public bool UpdateSysConfigModelColumns(UpdateModelColumns<sxSysConfig> updateModel);
         public SRes SpoolMaterialInfoTrans(SxSpoolMaterialInfoTransRequest reqDto);
+
+        /// <summary>
+        /// 关闭工单
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
         public SRes CloseWorkOrder(CloseWorkOrderRequest reqDto);
+
+        /// <summary>
+        /// 同步箱号状态
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
+        public SRes SynchronizeBoxStatus(SynchronizeBoxStatusRequest reqDto);
         public SRes<ApplyFloorResponse> ApplyFloor(ApplyFloorRequest reqDto);
         public SRes SKUInfoTrans(SKUInfoTransRequest reqDto);
         public SRes PackInfoTrans(PackInfoTrans reqDto);

+ 68 - 23
wms.service/Service/SXService.cs

@@ -143,7 +143,6 @@ namespace wms.service.Service
         private Repository<BillPackInfo> _packInforepository => new Repository<BillPackInfo>();
         private Repository<BillPboxrule> _boxrulerepository => new Repository<BillPboxrule>();
         private Repository<BillBoxSerial> _boxserialrepository => new Repository<BillBoxSerial>();
-
         private Repository<PalletLayerMath> _palletlayerMathrepository => new Repository<PalletLayerMath>();
         private Repository<Palletizingdetail> _palletizdetailrepository => new Repository<Palletizingdetail>();
         private Repository<Palletizing> _palletizrepository => new Repository<Palletizing>();
@@ -323,21 +322,21 @@ namespace wms.service.Service
                         return res;
                     }
 
-                    int solrder = 0;
-                    int perSolderMaxCount = 0;
+                    int solrder = Convert.ToInt32(reqDto.SolderJointMax);
+                    int perSolderMaxCount = Convert.ToInt32(reqDto.HuSolderJointMax);
                     decimal torsion24Qty = 0;
                     decimal torsion48Qty = 0;
                     decimal torsionErrRange = 0;
                     decimal hold = 0;
 
-                    if (skuinfolist.Where(p => p.FieldCode == "QC_B02").Any())
-                    {
-                        solrder = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B02").First().FieldValue);
-                    }
-                    if (skuinfolist.Where(p => p.FieldCode == "QC_B03").Any())
-                    {
-                        perSolderMaxCount = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B03").First().FieldValue);
-                    }
+                    //if (skuinfolist.Where(p => p.FieldCode == "QC_B02").Any())
+                    //{
+                    //    solrder = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B02").First().FieldValue);
+                    //}
+                    //if (skuinfolist.Where(p => p.FieldCode == "QC_B03").Any())
+                    //{
+                    //    perSolderMaxCount = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B03").First().FieldValue);
+                    //}
                     if (skuinfolist.Where(p => p.FieldCode == "QC_C03").Any() && !string.IsNullOrEmpty(skuinfolist.Where(p => p.FieldCode == "QC_C03").First().FieldValue))
                     {
                         hold = decimal.Parse(skuinfolist.Where(p => p.FieldCode == "QC_C03").First().FieldValue);
@@ -402,21 +401,21 @@ namespace wms.service.Service
                 }
                 else
                 {
-                    int solrder = 0;
-                    int perSolderMaxCount = 0;
+                    int solrder = Convert.ToInt32(reqDto.SolderJointMax);
+                    int perSolderMaxCount = Convert.ToInt32(reqDto.HuSolderJointMax);
                     decimal torsion24Qty = 0;
                     decimal torsion48Qty = 0;
                     decimal torsionErrRange = 0;
                     decimal hold = 0;
 
-                    if (skuinfolist.Where(p => p.FieldCode == "QC_B02").Any())
-                    {
-                        solrder = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B02").First().FieldValue);
-                    }
-                    if (skuinfolist.Where(p => p.FieldCode == "QC_B03").Any())
-                    {
-                        perSolderMaxCount = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B03").First().FieldValue);
-                    }
+                    //if (skuinfolist.Where(p => p.FieldCode == "QC_B02").Any())
+                    //{
+                    //    solrder = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B02").First().FieldValue);
+                    //}
+                    //if (skuinfolist.Where(p => p.FieldCode == "QC_B03").Any())
+                    //{
+                    //    perSolderMaxCount = int.Parse(skuinfolist.Where(p => p.FieldCode == "QC_B03").First().FieldValue);
+                    //}
                     if (skuinfolist.Where(p => p.FieldCode == "QC_C03").Any() && !string.IsNullOrEmpty(skuinfolist.Where(p => p.FieldCode == "QC_C03").First().FieldValue))
                     {
                         hold = decimal.Parse(skuinfolist.Where(p => p.FieldCode == "QC_C03").First().FieldValue);
@@ -437,6 +436,7 @@ namespace wms.service.Service
                     {
                         SkuCode = reqDto.SkuCode,
                         PackRule = reqDto.PackRule,
+                        IsSolder = solrder > 0 ? 1 : 0,
                         SolderMaxCount = solrder,
                         PerSolderMaxCount = perSolderMaxCount,
                         Torsion24Qty = torsion24Qty,
@@ -783,7 +783,7 @@ namespace wms.service.Service
                         {
                             ZXStateCode = 2,
                             Memo = "工单终止,自动停用"
-                        }, x => boxruleId.Contains(x.Id));
+                        }, x => boxruleId.Contains(x.Id) && x.ZXStateCode == 0);
                         _db.CommitTran();
                     }
                 }
@@ -800,6 +800,47 @@ namespace wms.service.Service
             return res;
         }
 
+        /// <summary>
+        /// 同步箱号状态
+        /// </summary>
+        /// <param name="reqDto"></param>
+        /// <returns></returns>
+        public SRes SynchronizeBoxStatus(SynchronizeBoxStatusRequest reqDto)
+        {
+            var res = new SRes();
+            try
+            {
+                var boxrule = _boxrulerepository.AsQueryable().First(x => x.PBoxCode == reqDto.HuNr && x.ZXStateCode == 0);
+                if (boxrule != null)
+                {
+                    _db.BeginTran();
+                    var result = _boxrulerepository.UpdateSetColumnsTrue(p => new BillPboxrule()
+                    {
+                        ZXStateCode = 2,
+                        Memo = "MES通知停用此箱号"
+                    }, x => boxrule.Id == x.Id && x.ZXStateCode == 0);
+                    if (!result)
+                    {
+                        _db.RollbackTran();
+                        res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                        res.ResMsg = "箱号正在使用";
+                        return res;
+                    }
+                    _db.CommitTran();
+                }
+            }
+            catch (Exception e)
+            {
+                _db.RollbackTran();
+                res.ResCode = ResponseStatusCodeEnum.Fail.GetHashCode();
+                res.ResMsg = e.Message;
+                return res;
+            }
+            res.ResCode = ResponseStatusCodeEnum.Sucess.GetHashCode();
+            res.ResMsg = ResponseStatusCodeEnum.Sucess.GetDescription();
+            return res;
+        }
+
         /// <summary>
         /// 扭转出库申请
         /// </summary>
@@ -8163,7 +8204,8 @@ namespace wms.service.Service
                                 invlist2 = invlist2.Where(p => p.Wind == rule.Wind);
                             }
 
-                            //焊点属性筛选
+                            #region 焊点相关处理
+
                             var tempoutrecord = invlist2.ToList();
 
                             var solderinvlist = new List<StockTemp>();
@@ -8184,6 +8226,9 @@ namespace wms.service.Service
                                 //不允许焊点盘
                                 invlist2 = invlist2.Where(p => p.SolderCount == 0).OrderBy(p => p.ProductTime);
                             }
+
+                            #endregion 焊点相关处理
+
                             var returninvlist = new List<StockTemp>();
                             if (rule.ReturnCount > 0)
                             {