ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AGVBoxApplyPassDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvCTUCancelDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvCallbackBoxNoDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvPodBerthAndMatDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvScheduleTaskDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvSecureReplyDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_DTO/Agv/AgvTaskDTO.cs
ÎļþÒÑɾ³ý ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -225,12 +225,6 @@ /// <returns></returns> WebResponseContent AGVFinish(AgvFinishDTO agvFinishDTO); /// <summary> /// å®å ¨ä¿¡å·åå¤ WCS-AGV /// </summary> /// <param name="secureModel"></param> /// <returns></returns> WebResponseContent AgvSecureReply(AgvSecureReplyDTO secureReplyModel, APIEnum SecureReply = APIEnum.Agv_CSJSecureReply); /// <summary> /// AGVä»»å¡ç¶æå·æ° /// </summary> /// <param name="agvUpdateModel"></param> @@ -248,31 +242,10 @@ /// <param name="currentAddress">ä¿®æ¹åçå½åå°å</param> /// <param name="nextAddress">ä¿®æ¹åçä¸ä¸å°å</param> void UpdateTask(Dt_Task task, TaskStatusEnum taskStatus, string deviceCode = "", string sourceAddress = "", string targetAddress = "", string currentAddress = "", string nextAddress = "", string roadwayNo = "", int heightType = 0); /// <summary> /// /// </summary> /// <param name="agvPodModel"></param> /// <param name="PodBerthAndMat"></param> /// <returns></returns> WebResponseContent AgvPodBerthAndMat(AgvPodBerthAndMatDTO agvPodModel, APIEnum PodBerthAndMat = APIEnum.Agv_CSJPodBerthAndMat); /// <summary> /// //å¤æç§»åºè´§ä½ä»»å¡æ¯å¦å·²åå¨ï¼å¦åå¨å æ§è¡ /// </summary> Dt_Task QueryStackerExistTask(string PalletCode,string locationCode); /// <summary> /// AGVæååæ¾è´§éç¥ /// </summary> WebResponseContent AgvBoxApplyPass(AGVBoxApplyPassDTO applyPassDTO, APIEnum SecureReply = APIEnum.AGV_CPBoxApplyPass); /// <summary> /// CTUåæ¶ä»»å¡ /// </summary> /// <returns></returns> WebResponseContent AgvBoxApplyPass(AgvCTUCancelDTO applyPassDTO, APIEnum SecureReply = APIEnum.AGV_CTUCancelTask); /// <summary> /// é¢è°åº¦æä»¤ /// </summary> WebResponseContent AgvPreScheduleTask(AgvScheduleTaskDTO scheduleTaskDTO, APIEnum ScheduleTask = APIEnum.AGV_CTUScheduleTaskTask); /// <summary> /// æ¥åWMSæå¨å®æä»»å¡ ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/InvokeAGVService.cs
@@ -70,117 +70,7 @@ } return content; } /// <summary> /// å®å ¨ä¿¡å·åå¤ WCS-AGV //AGVä»»å¡ç»§ç»æ§è¡ /// </summary> /// <param name="secureModel"></param> /// <returns></returns> public WebResponseContent AgvSecureReply(AgvSecureReplyDTO secureReplyModel, APIEnum SecureReply = APIEnum.Agv_CSJSecureReply) { WebResponseContent content = new WebResponseContent(); try { string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == SecureReply.ToString())?.ApiAddress; if (string.IsNullOrEmpty(apiAddress)) return WebResponseContent.Instance.Error($"æªæ¾å°åéAGV任塿¥å£,è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiAddress, secureReplyModel.Serialize()); AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>(); if (agvContent.Code == "0") { content.OK(agvContent.Message); } else { content.Error(agvContent.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// <summary> /// CTUåæ¶ä»»å¡ /// </summary> public WebResponseContent AgvBoxApplyPass(AgvCTUCancelDTO applyPassDTO, APIEnum SecureReply = APIEnum.AGV_CTUCancelTask) { WebResponseContent content = new WebResponseContent(); try { string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == SecureReply.ToString())?.ApiAddress; if (string.IsNullOrEmpty(apiAddress)) return WebResponseContent.Instance.Error($"æªæ¾å°AGV忶任塿¥å£,è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiAddress, applyPassDTO.Serialize()); AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>(); if (agvContent.Code == "0") { content.OK(agvContent.Message); } else { content.Error(agvContent.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// <summary> /// AGVæååæ¾è´§éç¥ /// </summary> public WebResponseContent AgvBoxApplyPass(AGVBoxApplyPassDTO applyPassDTO, APIEnum SecureReply = APIEnum.AGV_CPBoxApplyPass) { WebResponseContent content = new WebResponseContent(); try { string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == SecureReply.ToString())?.ApiAddress; if (string.IsNullOrEmpty(apiAddress)) return WebResponseContent.Instance.Error($"æªæ¾å°åéAGV任塿¥å£,è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiAddress, applyPassDTO.Serialize()); AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>(); if (agvContent.Code == "0") { content.OK(agvContent.Message); } else { content.Error(agvContent.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } public WebResponseContent AgvPreScheduleTask(AgvScheduleTaskDTO scheduleTaskDTO, APIEnum ScheduleTask = APIEnum.AGV_CTUScheduleTaskTask) { WebResponseContent content = new WebResponseContent(); try { string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == ScheduleTask.ToString())?.ApiAddress; if (string.IsNullOrEmpty(apiAddress)) return WebResponseContent.Instance.Error($"æªæ¾å°åéAGV任塿¥å£,è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiAddress, scheduleTaskDTO.Serialize()); AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>(); if (agvContent.Code == "0") { content.OK(agvContent.Message); } else { content.Error(agvContent.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } /// <summary> /// AGVä»»å¡ç¶æå·æ°/AGVä»»å¡å®æ /// </summary> @@ -189,31 +79,6 @@ public AgvResponseContent AgvUpdateTask(AgvUpdateDTO agvUpdateModel) { return new AgvResponseContent(); } public WebResponseContent AgvPodBerthAndMat(AgvPodBerthAndMatDTO agvPodModel, APIEnum PodBerthAndMat = APIEnum.Agv_CSJPodBerthAndMat) { WebResponseContent content = new WebResponseContent(); try { string? apiAddress = apiInfos.FirstOrDefault(x => x.ApiCode == PodBerthAndMat.ToString())?.ApiAddress; if (string.IsNullOrEmpty(apiAddress)) return WebResponseContent.Instance.Error($"æªæ¾å°åéAGV任塿¥å£,è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiAddress, agvPodModel.Serialize()); AgvResponseContent agvContent = response.DeserializeObject<AgvResponseContent>(); if (agvContent.Code == "1") { content.OK(agvContent.Message); } else { content.Error(agvContent.Message); } } catch (Exception ex) { content.Error(ex.Message); } return content; } } } ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -942,6 +942,11 @@ nextStatus = TaskStatusEnum.SC_Executing; } } else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.RelocationGroup) { task.TaskState = (int)TaskStatusEnum.SC_Executing; nextStatus = TaskStatusEnum.SC_Executing; } else { throw new Exception($"ä»»å¡ç±»åé误,æªæ¾å°è¯¥ä»»å¡ç±»å,ä»»å¡å·:ã{task.TaskNum}ã,ä»»å¡ç±»å:ã{task.TaskType}ã"); ÏîÄ¿´úÂë/WCS/WCSServices/WIDESEAWCS_Tasks/ÔÁÏ¿â/StackerCraneJob_YLSC3.cs
@@ -398,7 +398,7 @@ YLStackerCraneTaskCommand stackerCraneTaskCommand = new YLStackerCraneTaskCommand(); stackerCraneTaskCommand.PalletType = Convert.ToInt16(task.PalletType); if (task.TaskLength>=1200 && task.TaskLength<1630) if (task.TaskLength>=1160 && task.TaskLength<1630) { stackerCraneTaskCommand.PalletType = 3; } ÏîÄ¿´úÂë/WMS/WMSClient/config/buttons.js
@@ -208,6 +208,15 @@ type: 'success', onClick: function () { } }, { name: "æå¨ç§»åº", icon: '', class: '', value: 'Relocation', type: 'success', onClick: function () { } } ] ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/taskinfo/extend/relocationTask.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,194 @@ <template> <div> <vol-box v-model="showDetialBox" :lazy="true" width="600px" :padding="15" title="æå¨ç§»åº" > <div> <el-form> <el-form-item label="è¯·éæ©å··éï¼"> <el-select v-model="relocationInfo.roadWay" filterable placeholder="è¯·éæ©" > <el-option v-for="item in Roadways" :key="item.key" :label="item.value" :value="item.key" > <span style="float: left">{{ item.value }}</span> <span style="float: right; color: #8492a6; font-size: 13px">{{ item.key }}</span> </el-option> </el-select> </el-form-item> <el-form-item label="请è¾èµ·å§è¡ï¼" ><el-input v-model="relocationInfo.startRow" style="width: 180px" label="请è¾èµ·å§è¡" ></el-input> </el-form-item> <el-form-item label="请è¾èµ·å§åï¼" ><el-input v-model="relocationInfo.startColumn" style="width: 180px" label="请è¾èµ·å§å" ></el-input> </el-form-item> <el-form-item label="请è¾èµ·å§å±ï¼" ><el-input v-model="relocationInfo.startLayer" style="width: 180px" label="请è¾èµ·å§å±" ></el-input> </el-form-item> <el-form-item label="请è¾ç®æ è¡ï¼" ><el-input v-model="relocationInfo.targetRow" style="width: 180px" label="请è¾ç®æ è¡" ></el-input> </el-form-item> <el-form-item label="请è¾ç®æ åï¼" ><el-input v-model="relocationInfo.targetColumn" style="width: 180px" label="请è¾ç®æ å" ></el-input> </el-form-item> <el-form-item label="请è¾ç®æ å±ï¼" ><el-input v-model="relocationInfo.targetLayer" style="width: 180px" label="请è¾ç®æ å±" ></el-input> </el-form-item> </el-form> </div> <template #footer> <el-button type="primary" size="small" @click="submit">确认</el-button> <el-button type="danger" size="small" @click="close">å ³é</el-button> </template> </vol-box> </div> </template> <script> import VolBox from "@/components/basic/VolBox.vue"; export default { components: { VolBox }, data() { return { showDetialBox: false, Roadways: [ { key: "SC01_CP", value: "1å·å åæº-æååº" }, { key: "SC02_CP", value: "2å·å åæº-æååº" }, { key: "SC03_CP", value: "3å·å åæº-æååº" }, { key: "SC04_CP", value: "4å·å åæº-æååº" }, { key: "SC05_CP", value: "5å·å åæº-æååº" }, { key: "SC01_YL", value: "1å·å åæº-åæåº" }, { key: "SC02_YL", value: "2å·å åæº-åæåº" }, { key: "SC03_YLDual", value: "3å·å åæº-åæåº" }, { key: "SC04_YLDual", value: "4å·å åæº-åæåº" }, { key: "SC05_YLDual", value: "5å·å åæº-åæåº" }, ], relocationInfo: { startRow: null, startColumn: null, startLayer: null, targetRow: null, targetColumn: null, targetLayer: null, roadWay: "" }, }; }, methods: { open() { this.showDetialBox = true; }, close() { this.showDetialBox = false; this.relocationInfo = { startRow: null, startColumn: null, startLayer: null, targetRow: null, targetColumn: null, targetLayer: null, roadWay: "" } }, submit() { if (this.relocationInfo.roadWay == "") return this.$message.error("è¯·éæ©å··é"); if (this.relocationInfo.startRow == null) return this.$message.error("请è¾å ¥èµ·å§è¡"); if (this.relocationInfo.startColumn == null) return this.$message.error("请è¾å ¥èµ·å§å"); if (this.relocationInfo.startLayer == null) return this.$message.error("请è¾å ¥èµ·å§å±"); if (this.relocationInfo.targetRow == null) return this.$message.error("请è¾å ¥ç®æ è¡"); if (this.relocationInfo.targetColumn == null) return this.$message.error("请è¾å ¥ç®æ å"); if (this.relocationInfo.targetLayer == null) return this.$message.error("请è¾å ¥ç®æ å±"); this.http .post( "api/Task/Relocation", this.relocationInfo, "æ°æ®å¤çä¸" ) .then((x) => { if (!x.status) return this.$message.error(x.message); this.$message.success("æä½æå"); this.$parent.refresh(); this.close(); }); }, }, created() {}, }; </script> <style scoped> .el-col { border-radius: 4px; } .grid-content { border-radius: 4px; min-height: 36px; } .content-text { display: flex; align-items: center; justify-content: center; } .right-text { display: flex; align-items: center; justify-content: flex-end; } </style> <style> .el-table .warning-row { background: #e6a23c; } .el-table .success-row { background: #f0f9eb; } .el-table .error-row { background: #f56c6c; } canvas { display: block; margin: auto; } </style> ÏîÄ¿´úÂë/WMS/WMSClient/src/extension/taskinfo/task.js
@@ -1,10 +1,10 @@ //æ¤jsæä»¶æ¯ç¨æ¥èªå®ä¹æ©å±ä¸å¡ä»£ç ï¼å¯ä»¥æ©å±ä¸äºèªå®ä¹é¡µé¢æè éæ°é ç½®çæç代ç import gridHeader from './extend/relocationTask.vue' let extension = { components: { //æ¥è¯¢ç颿©å±ç»ä»¶ gridHeader: '', gridHeader: gridHeader, gridBody: '', gridFooter: '', //æ°å»ºãç¼è¾å¼¹åºæ¡æ©å±ç»ä»¶ @@ -88,6 +88,12 @@ }); } } let relocationBtn = this.buttons.find(x => x.value == 'Relocation'); if (relocationBtn) { relocationBtn.onClick = function () { this.$refs.gridHeader.open(); } } }, onInited() { //æ¡æ¶åå§åé ç½®å ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_BasicService/Service/LocationInfoService_Common.cs
@@ -125,7 +125,7 @@ } //æ¥è¯¢ç©ºè´§ä½ä¿¡æ¯å¹¶æé¤5åéå åé çè´§ä½,æ ¹æ®å±ãåãæ·±åº¦ãè¡æåº List<Dt_LocationInfo> locationInfosMedium = BaseDal.QueryData(x => x.LocationType == LocationTypeEnum.MediumPallet.ObjToInt() && x.RoadwayNo == roadwayNo && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && !lockLocations.Contains(x.LocationCode), orderBy); Dt_LocationInfo locationInfo = new Dt_LocationInfo(); Dt_LocationInfo? locationInfo = null; foreach (var item in locationInfosMedium) { if (LayerLimit && (item.Layer == 7 || item.Layer == 8)) @@ -133,6 +133,11 @@ locationInfo = item; break; } if (!LayerLimit && item.Columns<=6 && item.Layer != 7 && item.Layer != 8) { locationInfo = item; break; } //è·åæ´æ¹åºä½ Dt_LocationInfo? nearLocation1; Dt_LocationInfo? nearLocation2; ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_Common/OrderEnum/OutboundOrderMenu.cs
@@ -55,6 +55,11 @@ /// äºæMES颿 /// </summary> [Description("äºæMES颿")] OutMESPick = 2 OutMESPick = 2, /// <summary> /// äºææåéå®é¢æ /// </summary> [Description("äºææåéå®é¢æ")] OutProSalePick = 3 } } ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_DTO/Task/WMSTaskDTO.cs
@@ -95,4 +95,38 @@ public string WorkCentreCode { get; set; } } /// <summary> /// ç§»åºæä»¤ /// </summary> public class RelocationDTO { /// <summary> /// èµ·å§è¡ /// </summary> public int StartRow { get; set; } /// <summary> /// èµ·å§å /// </summary> public int StartColumn { get; set; } /// <summary> /// èµ·å§å /// </summary> public int StartLayer { get; set; } /// <summary> /// ç®æ è¡ /// </summary> public int TargetRow { get; set; } /// <summary> /// ç®æ å /// </summary> public int TargetColumn { get; set; } /// <summary> /// ç®æ å± /// </summary> public int TargetLayer { get; set; } /// <summary> /// ç§»åºå··é /// </summary> public string RoadWay { get; set; } } } ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -180,13 +180,13 @@ WebResponseContent RequestYLWMSTaskOut(YLWMSTaskOutDTO yLWMSTaskOutDTO); /// <summary> /// åæç§»åº /// ç§»åº /// </summary> /// <param name="startAddress"></param> /// <param name="endAddress"></param> /// <param name="roadWay"></param> /// <returns></returns> WebResponseContent IsRelocation(string startAddress, string endAddress, string roadWay); WebResponseContent IsRelocation(RelocationDTO relocationDTO); /// <summary> /// åæå··éé´ç§»åºä»»å¡ /// </summary> ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_StockService/StockInfoService.cs
@@ -117,7 +117,7 @@ MaterielCode = materielInfo.MaterielCode, MaterielName=materielInfo.MaterielName, }; if (wide>1200) if (wide>=1160) { stockInfo.PalletType = 2; } ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/MesTaskService.cs
@@ -282,7 +282,7 @@ IsPick = returnMaterial.Whether == 0 ? WhetherEnum.True.ObjToInt() : WhetherEnum.False.ObjToInt(), Remark = StockStatusEmun.MES使éåº.ToString() }; if (stockInfo.MaterielWide > 1200) if (stockInfo.MaterielWide >= 1160) { stockInfo.PalletType = 2; } ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Completed.cs
@@ -13,6 +13,7 @@ using WIDESEA_Core; using WIDESEA_Core.Helper; using WIDESEA_DTO.Task; using WIDESEA_External.Model; using WIDESEA_Model.Models; namespace WIDESEA_TaskInfoService @@ -107,6 +108,24 @@ wmsTask.TaskType = task.TaskType; wmsTask.TargetAddress = task.TargetAddress; BaseDal.UpdateData(wmsTask); if (wmsTask.TaskType>=TaskTypeEnum.WFBYLInbound.ObjToInt() && wmsTask.TaskType <= TaskTypeEnum.PrintYLInbound.ObjToInt() && wmsTask.TaskStatus==TaskStatusEnum.AGV_TakeFinish.ObjToInt()) { Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x=>x.PalletCode== wmsTask.PalletCode); string request = _invokeERPService.ERPSemiProInUp( new ERPProInUpModel() { PB_INV_PRODUCT_IN = new List<PB_INV_PRODUCT_INItem>() { new PB_INV_PRODUCT_INItem() { WP_ID = 0, INV_BARCODE = wmsTask.PalletCode, REMARK = "åæåå ¥åº", QTY=(int)stockInfo.StockLength } } }) ?? throw new Exception("åæåå ¥åºæ¥å£è¯·æ±å¤±è´¥"); } } return WebResponseContent.Instance.OK(); } ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Inbound.cs
@@ -459,9 +459,9 @@ { throw new Exception($"æªæ¾å°å ¥åºåå·ä¸º{inboundOrder.PurchaseOrderNo}æ¡ç {palletCode}åæ®ä¿¡æ¯"); } if (inboundOrderDetail.PurchaseDetailWide < 690) if (inboundOrderDetail.PurchaseDetailWide < 690 || inboundOrderDetail.PurchaseDetailWide > 2500) { return content.Error("æ°åç©æå¹ å®½éå¶ä¸º690-2700mm"); return content.Error($"ç©æå¹ å®½éå¶ä¸º690-2500mm,å½å纸å·å¹ 宽{inboundOrderDetail.PurchaseDetailWide}"); } if (inboundOrderDetail.PurchaseDetailThickness <= 0) { @@ -509,7 +509,7 @@ BatchNo = inboundOrderDetail.MaterialLot, StockLength = inboundOrderDetail.PurchaseDetailQuantity }; if (inboundOrderDetail.PurchaseDetailWide > 1200) if (inboundOrderDetail.PurchaseDetailWide >= 1160) { stockInfo.PalletType = 2; } @@ -554,9 +554,9 @@ { throw new Exception($"æªæ¾å°å ¥åºåå·ä¸º{inboundOrder.UpperOrderNo}æ¡ç {palletCode}åæ®ä¿¡æ¯"); } if (inboundOrderDetail.MaterialWide < 690) if (inboundOrderDetail.MaterialWide < 690 || inboundOrderDetail.MaterialWide > 2500) { return content.Error("æ°åç©æå¹ å®½éå¶ä¸º690-2700mm"); return content.Error($"ç©æå¹ å®½éå¶ä¸º690-2500mm,å½å纸å·å¹ 宽{inboundOrderDetail.MaterialWide}"); } if (inboundOrderDetail.MaterialThick <= 0) { @@ -604,7 +604,7 @@ BatchNo = inboundOrderDetail.MaterialLot, StockLength = inboundOrderDetail.OrderQuantity }; if (inboundOrderDetail.MaterialWide > 1200) if (inboundOrderDetail.MaterialWide >= 1160) { stockInfo.PalletType = 2; } @@ -651,9 +651,11 @@ } BSTStockInfoDTO bSTStockInfoDTO = bSTResponse.Data ?? throw new Exception($"䏿ERPæªè¿å{palletCode}çåºåä¿¡æ¯"); if (bSTStockInfoDTO.W < 690 || bSTStockInfoDTO.W > 2500) { return content.Error($"ç©æå¹ å®½éå¶ä¸º690-2500mm,å½å纸å·å¹ 宽{bSTStockInfoDTO.W}"); } Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x => x.MaterialSourceId == bSTStockInfoDTO.MaterialId) ?? throw new Exception($"æªæ¾å°æ¡ç {palletCode}ç©æä¿¡æ¯{bSTStockInfoDTO.MaterialNo}"); //çæåºåç»çä¿¡æ¯ Dt_StockInfo stockInfo = new Dt_StockInfo() { @@ -675,7 +677,7 @@ StockLength = bSTStockInfoDTO.StockMeter, MaterielId = materielInfo.MaterialSourceId }; if (bSTStockInfoDTO.W > 1200) if (bSTStockInfoDTO.W >= 1160) { stockInfo.PalletType = 2; } @@ -729,6 +731,10 @@ } else if (yLInboundCache.BarCode != palletCode && yLInboundCache.BindStatus == WhetherEnum.True.ObjToInt()) { if (purchaseBSTOrderDetail.MaterialWide < 690 || purchaseBSTOrderDetail.MaterialWide > 2500) { return content.Error($"ç©æå¹ å®½éå¶ä¸º690-2500mm,å½å纸å·å¹ 宽{purchaseBSTOrderDetail.MaterialWide}"); } yLInboundCache = _mapper.Map<Dt_YLInboundCache>(purchaseBSTOrderDetail); yLInboundCache.Id = Id; //è·åéè´ä¸»å @@ -756,7 +762,7 @@ StockLength = purchaseBSTOrderDetail.ProcurementLength, MaterielId = purchaseBSTOrderDetail.MaterialId }; if (purchaseBSTOrderDetail.MaterialWide > 1200) if (purchaseBSTOrderDetail.MaterialWide >= 1160) { stockInfo.PalletType = 2; } @@ -1051,6 +1057,21 @@ _unitOfWorkManage.CommitTran(); //è®°å½åºååå¨ _recordService.StockQuantityChangeRecordService.AddStockChangeRecord(stockInfo, stockInfo.StockLength, 0, StockChangeTypeEnum.Inbound,taskNum:task.TaskNum); //䏿¥æ°åERP if (stockInfo.MaterielInvOrgId==MaterielInvOrgEnum.æ°å.ObjToInt() && task.TaskType == TaskTypeEnum.Inbound.ObjToInt()) { string request = _invokeERPService.ERPPurchaseUp(new ERPPurchaseUpModel() { INV_BARCODE_RFID = new List<INV_BARCODE_RFIDItem>() { new INV_BARCODE_RFIDItem() { INV_BARCODE=stockInfo.PalletCode, RFID_BARCODE=stockInfo.RfidCode } } }); } //䏿¥èåERP if (stockInfo.MaterielInvOrgId == MaterielInvOrgEnum.èå.ObjToInt() && task.TaskType == TaskTypeEnum.Inbound.ObjToInt()) { @@ -1631,7 +1652,7 @@ MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, }; if (wide > 1200) if (wide >= 1160) { stockInfo.PalletType = 2; } @@ -1717,7 +1738,7 @@ MaterielCode = materielInfo.MaterielCode, MaterielName = materielInfo.MaterielName, }; if (wide > 1200) if (wide >= 1160) { stockInfo.PalletType = 2; } @@ -1895,7 +1916,7 @@ MaterielName = materielInfo.MaterielName, StockLength=item.ProQuantity }; if (item.Wide > 1200) if (item.Wide >= 1160) { stockInfo.PalletType = 2; } ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Outbound.cs
@@ -136,12 +136,32 @@ if (proStockInfo != null && proStockInfo.StockStatus==StockStatusEmun.åºåºéå®.ObjToInt()) { task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); //è·åææåºåºè¯¦æ æ°æ® List<Dt_OutStockLockInfo>? outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x => x.TaskNum == task.TaskNum); _unitOfWorkManage.BeginTran(); proStockInfo.StockStatus = StockStatusEmun.åºåºå®æ.ObjToInt(); _stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo,App.User.UserId > 0 ? OperateTypeEnum.äººå·¥å®æ : OperateTypeEnum.èªå¨å®æ); if (proStockInfo.proStockInfoDetails!=null && proStockInfo.proStockInfoDetails.Count>0) { _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(proStockInfo.proStockInfoDetails, App.User.UserId > 0 ? OperateTypeEnum.äººå·¥å®æ : OperateTypeEnum.èªå¨å®æ); } if (outStockLockInfos != null && outStockLockInfos.Count > 0) { outStockLockInfos.ForEach(x => { x.Status = OutLockStockStatusEnum.åºåºå®æ.ObjToInt(); }); List<Dt_OutStockLockInfo> outStockLockInfosMES = outStockLockInfos.Where(x => x.OrderType == OutOrderTypeEnum.OutMESPick.ObjToInt()).ToList(); if (outStockLockInfosMES != null && outStockLockInfosMES.Count() > 0) { Dt_AGVStationInfo aGVStationInfo = _basicRepository.AGVStationInfoRepository.QueryFirst(x => x.AGVStationCode == task.TargetAddress); MESDeliveryModel mESDeliveryModel = MESDeliveryUp(outStockLockInfosMES, aGVStationInfo.MESPointCode); MESResponse response = _invokeMESService.MESDelivery(mESDeliveryModel).DeserializeObject<MESResponse>() ?? throw new Exception("æªè·åå°è¿åä¿¡æ¯"); if (!response.Result) { throw new Exception($"MESé éåºåæ¥å£è°ç¨æ¥é,MESè¿åä¿¡æ¯{DecodeUnicode(response.Msg)}"); } } } _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.äººå·¥å®æ : OperateTypeEnum.èªå¨å®æ); @@ -1049,6 +1069,7 @@ } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); content.Error(ex.Message); } return content; ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService_Reloaction.cs
@@ -132,84 +132,185 @@ //} public WebResponseContent RelocationTaskCompleted(Dt_Task task) { WebResponseContent content = new WebResponseContent(); try { Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (stockInfo == null) Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId); if (warehouse.WarehouseCode == WarehouseEnum.LLDCP.ToString() || warehouse.WarehouseCode == WarehouseEnum.LLDFL.ToString()) //æå/è¾ æå®æ { return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºè´§ä½çåºåä¿¡æ¯"); Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x => x.PalletCode == task.PalletCode && x.LocationCode == task.SourceAddress).Includes(x => x.proStockInfoDetails).First(); if (proStockInfo == null) { return content.Error($"æªæ¾å°å¯¹åºçåºåä¿¡æ¯"); } Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (locationInfoStart == null) { return content.Error($"æªæ¾å°å¯¹åºçèµ·ç¹è´§ä½ä¿¡æ¯"); } Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); if (locationInfoEnd == null) { return content.Error($"æªæ¾å°å¯¹åºçç»ç¹è´§ä½ä¿¡æ¯"); } task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); proStockInfo.LocationCode = locationInfoEnd.LocationCode; proStockInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo); _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId); _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, proStockInfo.PalletType, LocationStatusEnum.InStock, proStockInfo.WarehouseId); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.äººå·¥å®æ : WIDESEA_Core.Enums.OperateTypeEnum.èªå¨å®æ); _unitOfWorkManage.CommitTran(); } else { Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.PalletCode == task.PalletCode && x.LocationCode == task.SourceAddress); if (stockInfo == null) { return content.Error($"æªæ¾å°å¯¹åºçåºåä¿¡æ¯"); } Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (locationInfoStart == null) { return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçèµ·ç¹è´§ä½ä¿¡æ¯"); } Dt_LocationInfo locationInfoStart = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress); if (locationInfoStart == null) { return content.Error($"æªæ¾å°å¯¹åºçèµ·ç¹è´§ä½ä¿¡æ¯"); } Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); if (locationInfoEnd == null) { return WebResponseContent.Instance.Error($"æªæ¾å°å¯¹åºçç»ç¹è´§ä½ä¿¡æ¯"); Dt_LocationInfo locationInfoEnd = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.TargetAddress); if (locationInfoEnd == null) { return content.Error($"æªæ¾å°å¯¹åºçç»ç¹è´§ä½ä¿¡æ¯"); } task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); stockInfo.LocationCode = locationInfoEnd.LocationCode; stockInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); _stockService.StockInfoService.Repository.UpdateData(stockInfo); _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.äººå·¥å®æ : WIDESEA_Core.Enums.OperateTypeEnum.èªå¨å®æ); _unitOfWorkManage.CommitTran(); } task.TaskStatus = TaskStatusEnum.Finish.ObjToInt(); _unitOfWorkManage.BeginTran(); stockInfo.LocationCode = locationInfoEnd.LocationCode; stockInfo.StockStatus = StockStatusEmun.å ¥åºå®æ.ObjToInt(); _stockService.StockInfoService.Repository.UpdateData(stockInfo); _basicService.LocationInfoService.UpdateLocationStatus(locationInfoStart, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId); _basicService.LocationInfoService.UpdateLocationStatus(locationInfoEnd, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId); BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? WIDESEA_Core.Enums.OperateTypeEnum.äººå·¥å®æ : WIDESEA_Core.Enums.OperateTypeEnum.èªå¨å®æ); _unitOfWorkManage.CommitTran(); return WebResponseContent.Instance.OK(); content.OK(); } catch (Exception ex) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); return content.Error(ex.Message); } return content; } public WebResponseContent IsRelocation(string startAddress,string endAddress,string roadWay) /// <summary> /// ç§»åº /// </summary> /// <param name="startAddress"></param> /// <param name="endAddress"></param> /// <param name="roadWay"></param> /// <returns></returns> public WebResponseContent IsRelocation(RelocationDTO relocation) { WebResponseContent content = new WebResponseContent(); try { //è·åè´§ä½ Dt_LocationInfo startLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == startAddress); Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.LocationCode == startAddress); Dt_LocationInfo endLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == endAddress); Dt_LocationInfo startLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.Row == relocation.StartRow && x.Columns == relocation.StartColumn && x.Layer == relocation.StartLayer && x.RoadwayNo == relocation.RoadWay); Dt_LocationInfo endLocationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.Row == relocation.TargetRow && x.Columns == relocation.TargetColumn && x.Layer == relocation.TargetLayer && x.RoadwayNo == relocation.RoadWay); //夿æ¡ä»¶ if (startLocationInfo != null && startLocationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt() && endLocationInfo != null && endLocationInfo.LocationStatus==LocationStatusEnum.Free.ObjToInt() && endLocationInfo.EnableStatus==EnableStatusEnum.Normal.ObjToInt() && stockInfo!=null) if (startLocationInfo != null && startLocationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && startLocationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && endLocationInfo != null && endLocationInfo.LocationStatus == LocationStatusEnum.Free.ObjToInt() && endLocationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) { Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x => x.LocationCode == startLocationInfo.LocationCode); Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.LocationCode == startLocationInfo.LocationCode); bool IsCPRoadway = relocation.RoadWay.Contains("CP"); bool IsYLRoadway = relocation.RoadWay.Contains("YL"); if ((IsCPRoadway && proStockInfo==null) || (IsYLRoadway && stockInfo == null)) { throw new Exception($"æªæ¾å°{relocation.RoadWay}ç§»åºåºå"); } Dt_StockInfo stockInfoEnd = _stockRepository.StockInfoRepository.QueryFirst(x => x.LocationCode == endLocationInfo.LocationCode); Dt_ProStockInfo proStockEnd = _stockRepository.ProStockInfoRepository.QueryFirst(x => x.LocationCode == endLocationInfo.LocationCode); if ((IsCPRoadway && proStockEnd != null) || (IsYLRoadway && stockInfoEnd != null)) { throw new Exception($"{relocation.RoadWay}ç®æ åºåå·²åå¨"); } if (relocation.RoadWay.Contains("YLDual")) { if (startLocationInfo.LocationType != endLocationInfo.LocationType) { throw new Exception($"æ··åå··é{relocation.RoadWay}èµ·å§ä¸ç®æ è´§ä½ç±»åä¸ç¬¦,请æ¥çè´§ä½ç¶æ"); } if (stockInfo.PalletType != endLocationInfo.LocationType) { throw new Exception($"æ··åå··é{relocation.RoadWay}ç§»åºåºåä¸ç®æ è´§ä½ç±»åä¸ç¬¦,请æ¥çè´§ä½ç¶æ"); } if ((relocation.TargetLayer == 7 || relocation.TargetLayer == 8) && stockInfo.CheckThickness>700) { throw new Exception($"ç®æ è´§ä½éé«700,ç§»åºåºåé«åº¦{stockInfo.CheckThickness}è¶ åº"); } if (relocation.TargetColumn >= 7 && relocation.TargetLayer != 7 && relocation.TargetLayer != 8 && endLocationInfo.LocationType==LocationTypeEnum.MediumPallet.ObjToInt()) { ////è·åæ´æ¹åºä½ Dt_LocationInfo? nearLocation1; Dt_LocationInfo? nearLocation2; nearLocation1 = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && x.Row == endLocationInfo.Row && x.Layer == endLocationInfo.Layer && x.Columns == endLocationInfo.Columns - 1); nearLocation2 = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationType == LocationTypeEnum.SmallPallet.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus != EnableStatusEnum.Disable.ObjToInt() && x.Row == endLocationInfo.Row && x.Layer == endLocationInfo.Layer && x.Columns == endLocationInfo.Columns + 1); if (nearLocation1 == null || nearLocation2 == null) { throw new Exception($"ç®æ è´§ä½{endLocationInfo.LocationCode}为大货类å,两侧å°è´§ä½åå¨å ç¨æç¦ç¨ç¶æ,请æ¥çè´§ä½ç¶æ"); } } } else if (relocation.RoadWay.Contains("YL")) { if ((endLocationInfo.Columns < 56 && startLocationInfo.Columns>=56) && stockInfo.CheckThickness > 1300) { throw new Exception($"ç§»åºè´§ä½ç©æé«åº¦{stockInfo.CheckThickness}è¶ åº1300,ç®æ è´§ä½åæ¾è§åè¶ åº"); } } //çæä»»å¡ Dt_Task newTask = new Dt_Task() { Roadway = roadWay, WarehouseId = stockInfo.WarehouseId, Roadway = relocation.RoadWay, WarehouseId = IsCPRoadway ? proStockInfo.WarehouseId:stockInfo.WarehouseId, CurrentAddress = startLocationInfo.LocationCode, Grade = 99, NextAddress = endLocationInfo.LocationCode, OrderNo = "", PalletCode = stockInfo.PalletCode, PalletType = stockInfo.PalletType, PalletCode = IsCPRoadway ? proStockInfo.PalletCode : stockInfo.PalletCode, PalletType = IsCPRoadway ? proStockInfo.PalletType : stockInfo.PalletType, SourceAddress = startLocationInfo.LocationCode, TargetAddress = endLocationInfo.LocationCode, TaskNum = Repository.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), TaskStatus = TaskStatusEnum.SC_Execute.ObjToInt(), TaskType = TaskTypeEnum.Relocation.ObjToInt() }; stockInfo.StockStatus = StockStatusEmun.ç§»åºéå®.ObjToInt(); _unitOfWorkManage.BeginTran(); Repository.AddData(newTask); _basicService.LocationInfoService.UpdateLocationStatus(startLocationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); _basicService.LocationInfoService.UpdateLocationStatus(endLocationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); _stockService.StockInfoService.Repository.UpdateData(stockInfo); if (!IsCPRoadway) { stockInfo.StockStatus = StockStatusEmun.ç§»åºéå®.ObjToInt(); _basicService.LocationInfoService.UpdateLocationStatus(startLocationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); _basicService.LocationInfoService.UpdateLocationStatus(endLocationInfo, stockInfo.PalletType, LocationStatusEnum.Lock, stockInfo.WarehouseId); _stockService.StockInfoService.Repository.UpdateData(stockInfo); } else { proStockInfo.StockStatus = StockStatusEmun.ç§»åºéå®.ObjToInt(); _basicService.LocationInfoService.UpdateLocationStatus(startLocationInfo, proStockInfo.PalletType, LocationStatusEnum.Lock, proStockInfo.WarehouseId); _basicService.LocationInfoService.UpdateLocationStatus(endLocationInfo, proStockInfo.PalletType, LocationStatusEnum.Lock, proStockInfo.WarehouseId); _stockService.ProStockInfoService.Repository.UpdateData(proStockInfo); } _unitOfWorkManage.CommitTran(); PushTasksToWCS(new List<Dt_Task> { newTask }); content.OK("æå"); } else { content.Error("åºåè´§ä½ä¿¡æ¯ä¸ºç©º"); content.Error("ç§»åºæç®æ è´§ä½ä¸æ»¡è¶³ç§»åºæ¡ä»¶,请æ¥ç两货ä½ç¶æ"); } } catch (Exception ex) ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/ERP/ErpBSTController.cs
@@ -81,7 +81,7 @@ /// æ¥æ¶ä¸æç管æç¨ä¿¡æ¯ /// </summary> /// <returns></returns> [HttpPost, HttpGet, Route("ReceiveOutOrder"), AllowAnonymous] [HttpPost, HttpGet, Route("ReceiveOutOrder")] public WebResponseContent AddOutSGOrder([FromBody] List<SGOutOrderDTO> outOrderDTOs) { return _taskService.AddOutSGOrder(outOrderDTOs); ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -251,13 +251,13 @@ } /// <summary> /// åæç§»åºä»»å¡ /// ç§»åºä»»å¡ /// </summary> /// <returns></returns> [HttpPost, HttpGet, Route("Relocation"), AllowAnonymous] public WebResponseContent IsRelocation(string startAddress, string endAddress, string roadWay) public WebResponseContent IsRelocation([FromBody] RelocationDTO relocationDTO) { return Service.IsRelocation(startAddress, endAddress, roadWay); return Service.IsRelocation(relocationDTO); } /// <summary> /// åæå··éé´ç§»åºä»»å¡