diff --git a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java index d33b32ef..0e5a9614 100644 --- a/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java +++ b/hw-common/hw-common-core/src/main/java/com/hw/common/core/constant/MesConstants.java @@ -97,8 +97,22 @@ public class MesConstants { public static final String MES_PRODUCT_PLAN_DETAIL_STATUS_TO_START = "1";//未开始 public static final String MES_PRODUCT_PLAN_DETAIL_STATUS_STARTED = "2";//已开始 public static final String MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH = "3";//已完成 + + public static final String MES_PRODUCT_PLAN_DETAIL_STATUS_PAUSE = "4";//暂停 public static final String MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH = "9";// 异常完成(校验物料信息不完整) + public static final Map PLAN_DETAIL_STATUS_PROMPT_MAP = new HashMap<>(); + + static { + PLAN_DETAIL_STATUS_PROMPT_MAP.put(MES_PRODUCT_PLAN_DETAIL_STATUS_TO_START, "未开始"); + PLAN_DETAIL_STATUS_PROMPT_MAP.put(MES_PRODUCT_PLAN_DETAIL_STATUS_STARTED, "已开始"); + PLAN_DETAIL_STATUS_PROMPT_MAP.put(MES_PRODUCT_PLAN_DETAIL_STATUS_FINISH, "已完成"); + PLAN_DETAIL_STATUS_PROMPT_MAP.put(MES_PRODUCT_PLAN_DETAIL_STATUS_PAUSE, "已暂停"); + PLAN_DETAIL_STATUS_PROMPT_MAP.put(MES_PRODUCT_PLAN_DETAIL_STATUS_ABNORMAL_FINISH, "异常完成"); + // 初始化其他映射... + } + + /*生产计划状态*/ public static final String MES_PRODUCT_PLAN_STATUS_TO_DISPATCH = "0";//未派工 public static final String MES_PRODUCT_PLAN_STATUS_DISPATCHED = "1";//已派工 diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java index 5c53bdb3..544422d5 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/controller/MesApiController.java @@ -356,4 +356,24 @@ public class MesApiController extends BaseController { } + + + /** + * 暂停生产计划明细 + */ + @Log(title = "生产计划明细", businessType = BusinessType.PAUSE) + @PostMapping(("/productPlanDetailPause")) + public AjaxResult productPlanDetailPause(@Validated @RequestBody MesProductPlanDetailPauseVo mesProductPlanDetailPauseVo) { + return success(productPlanDetailService.productPlanDetailPause(mesProductPlanDetailPauseVo)); + } + + + /** + * 继续生产计划明细 + */ + @Log(title = "生产计划明细", businessType = BusinessType.CONTINUE) + @PostMapping(("/productPlanDetailContinue")) + public AjaxResult productPlanDetailContinue(@Validated @RequestBody MesProductPlanDetailPauseVo mesProductPlanDetailPauseVo) { + return success(productPlanDetailService.productPlanDetailContinue(mesProductPlanDetailPauseVo)); + } } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/vo/MesProductPlanDetailPauseVo.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/vo/MesProductPlanDetailPauseVo.java new file mode 100644 index 00000000..5be313f0 --- /dev/null +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/domain/vo/MesProductPlanDetailPauseVo.java @@ -0,0 +1,21 @@ +package com.hw.mes.domain.vo; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Description: 生产计划明细暂停VO对象 + * @ClassName: MesProductPlanDetailPauseVo + * @Author : xins + * @Date :2024-10-18 14:43 + * @Version :1.0 + */ +@Data +public class MesProductPlanDetailPauseVo { + + //生产计划明细ID + @NotNull(message = "生产计划明细ID必须输入") + private Long planDetailId; + +} diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductPlanDetailService.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductPlanDetailService.java index b64e07ec..4f346362 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductPlanDetailService.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/IMesProductPlanDetailService.java @@ -6,6 +6,7 @@ import com.hw.common.core.utils.DateUtils; import com.hw.mes.api.domain.vo.MesPdaProductPlanVo; import com.hw.mes.domain.MesProductPlan; import com.hw.mes.domain.MesProductPlanDetail; +import com.hw.mes.domain.vo.MesProductPlanDetailPauseVo; import com.hw.mes.domain.vo.MesProductPlanDetailVo; import org.springframework.transaction.annotation.Transactional; @@ -116,4 +117,19 @@ public interface IMesProductPlanDetailService { public MesProductPlanDetail startNextMesProductPlanDetail(MesProductPlanDetail mesProductPlanDetail,String startType); + /** + * 生产计划明细暂停 + * + * @param mesProductPlanDetailPauseVo 生产计划明细暂停VO对象 + * @return + */ + public int productPlanDetailPause(MesProductPlanDetailPauseVo mesProductPlanDetailPauseVo); + + /** + * 生产计划明细继续 + * + * @param mesProductPlanDetailPauseVo 生产计划明细暂停VO对象 + * @return + */ + public int productPlanDetailContinue(MesProductPlanDetailPauseVo mesProductPlanDetailPauseVo); } diff --git a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java index e3420d2c..cd3d843e 100644 --- a/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java +++ b/hw-modules/hw-mes/src/main/java/com/hw/mes/service/impl/MesProductPlanDetailServiceImpl.java @@ -10,6 +10,7 @@ import com.hw.mes.api.domain.MesBaseBarcodeInfo; import com.hw.mes.api.domain.vo.MesPdaProductPlanVo; import com.hw.mes.config.MesConfig; import com.hw.mes.domain.*; +import com.hw.mes.domain.vo.MesProductPlanDetailPauseVo; import com.hw.mes.domain.vo.MesProductPlanDetailVo; import com.hw.mes.mapper.*; import com.hw.mes.service.IMesProductPlanDetailService; @@ -753,4 +754,57 @@ public class MesProductPlanDetailServiceImpl implements IMesProductPlanDetailSer } + + /** + * 生产计划明细暂停 + * + * @param mesProductPlanDetailPauseVo 生产计划明细暂停VO对象 + * @return + */ + @Override + public int productPlanDetailPause(MesProductPlanDetailPauseVo mesProductPlanDetailPauseVo) { + MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailId(mesProductPlanDetailPauseVo.getPlanDetailId()) ; + + String planDetailStatus = mesProductPlanDetail.getPlanDetailStatus(); + + // 明细状态:1-未开始;2-已开始;3-已完成;4-暂停,9-异常完成(校验物料信息不完整) + //已开始的可以改为暂停 + if(!planDetailStatus.equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_STARTED)){ + String planDetailStatusPrompt = MesConstants.PLAN_DETAIL_STATUS_PROMPT_MAP.get(planDetailStatus); + throw new ServiceException(String.format("此生产计划明细已经%s,不能暂停!", planDetailStatusPrompt)); + } + + mesProductPlanDetail.setPlanDetailStatus(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_PAUSE); + mesProductPlanDetail.setUpdateTime(new Date()); + mesProductPlanDetail.setUpdateBy(SecurityUtils.getUsername()); + return mesProductPlanDetailMapper.updateMesProductPlanDetail(mesProductPlanDetail); + } + + + + /** + * 生产计划明细继续 + * + * @param mesProductPlanDetailPauseVo 生产计划明细暂停VO对象 + * @return + */ + @Override + public int productPlanDetailContinue(MesProductPlanDetailPauseVo mesProductPlanDetailPauseVo) { + MesProductPlanDetail mesProductPlanDetail = mesProductPlanDetailMapper.selectMesProductPlanDetailByPlanDetailId(mesProductPlanDetailPauseVo.getPlanDetailId()) ; + + String planDetailStatus = mesProductPlanDetail.getPlanDetailStatus(); + + // 明细状态:1-未开始;2-已开始;3-已完成;4-暂停,9-异常完成(校验物料信息不完整) + //已开始的可以改为暂停 + if(!planDetailStatus.equals(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_PAUSE)){ + String planDetailStatusPrompt = MesConstants.PLAN_DETAIL_STATUS_PROMPT_MAP.get(planDetailStatus); + throw new ServiceException(String.format("此生产计划明细已经%s,不能继续!", planDetailStatusPrompt)); + } + + mesProductPlanDetail.setPlanDetailStatus(MesConstants.MES_PRODUCT_PLAN_DETAIL_STATUS_STARTED); + mesProductPlanDetail.setUpdateTime(new Date()); + mesProductPlanDetail.setUpdateBy(SecurityUtils.getUsername()); + return mesProductPlanDetailMapper.updateMesProductPlanDetail(mesProductPlanDetail); + } + } diff --git a/hw-ui/src/api/board/index.js b/hw-ui/src/api/board/index.js index 40fdff14..4aa4bbfb 100644 --- a/hw-ui/src/api/board/index.js +++ b/hw-ui/src/api/board/index.js @@ -368,3 +368,20 @@ export function getMaterialInfoList(query) { }) } +// 暂停生产计划明细 +export function productPlanDetailPause(data) { + return request({ + url: '/mes/api/productPlanDetailPause', + method: 'post', + data: data + }) +} + +// 继续生产计划明细 +export function productPlanDetailContinue(data) { + return request({ + url: '/mes/api/productPlanDetailContinue', + method: 'post', + data: data + }) +} diff --git a/hw-ui/src/views/board/fifthFloor/index.vue b/hw-ui/src/views/board/fifthFloor/index.vue index 75ec0087..cde94817 100644 --- a/hw-ui/src/views/board/fifthFloor/index.vue +++ b/hw-ui/src/views/board/fifthFloor/index.vue @@ -85,10 +85,18 @@ 成品条码 - 完成 + 暂停 + + + 继续 + + { if (e === '3' || e === '9') { return '已完成' } + if (e === '4') { + return '暂停' + } } const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100 export default { @@ -1744,6 +1757,31 @@ export default { }, + /** 提交暂停按钮 */ + submitProductPlanDetailPause() { + let pauseForm = {planDetailId:this.form.planDetailId}; + this.$modal.confirm('确认要暂停么?').then(function () { + return productPlanDetailPause(pauseForm); + }).then(() => { + this.$modal.msgSuccess("暂停成功"); + this.form.planDetailStatus = setState("4"); + }).catch(() => { + }); + }, + + + /** 提交继续按钮 */ + submitProductPlanDetailContinue() { + let continueForm = {planDetailId:this.form.planDetailId}; + this.$modal.confirm('确认要继续么?').then(function () { + return productPlanDetailContinue(continueForm); + }).then(() => { + this.form.planDetailStatus = setState("2"); + this.$modal.msgSuccess("继续成功"); + }).catch(() => { + }); + }, + } } diff --git a/hw-ui/src/views/board/firstFloor/index.vue b/hw-ui/src/views/board/firstFloor/index.vue index 5a313cc1..7e8bfc2a 100644 --- a/hw-ui/src/views/board/firstFloor/index.vue +++ b/hw-ui/src/views/board/firstFloor/index.vue @@ -218,6 +218,25 @@ > {{ scope.row.planDetailStatus === '1' ? '开始' : '完成' }} + + + 暂停 + + + + 继续 + + { + this.$modal.msgSuccess("暂停成功"); + row.planDetailStatus = this.PLAN_DETAIL_STATUS.PAUSE; + }).catch(() => { + }); + }, + + + /** 提交继续按钮 */ + submitProductPlanDetailContinue(row) { + let continueForm = {planDetailId:row.planDetailId}; + this.$modal.confirm('确认要继续么?').then(function () { + return productPlanDetailContinue(continueForm); + }).then(() => { + row.planDetailStatus = this.PLAN_DETAIL_STATUS.STARTED; + this.$modal.msgSuccess("继续成功"); + }).catch(() => { + }); + }, + } } diff --git a/hw-ui/src/views/board/fourthFloor/assemble.vue b/hw-ui/src/views/board/fourthFloor/assemble.vue index 4c57fbef..f7d77f1a 100644 --- a/hw-ui/src/views/board/fourthFloor/assemble.vue +++ b/hw-ui/src/views/board/fourthFloor/assemble.vue @@ -166,6 +166,25 @@ > {{ scope.row.planDetailStatus === '1' ? '开始' : '完成' }} + + + 暂停 + + + + 继续 + + 退库 + + { + this.$modal.msgSuccess("暂停成功"); + row.planDetailStatus = this.PLAN_DETAIL_STATUS.PAUSE; + }).catch(() => { + }); + }, + + + /** 提交继续按钮 */ + submitProductPlanDetailContinue(row) { + let continueForm = {planDetailId:row.planDetailId}; + this.$modal.confirm('确认要继续么?').then(function () { + return productPlanDetailContinue(continueForm); + }).then(() => { + row.planDetailStatus = this.PLAN_DETAIL_STATUS.STARTED; + this.$modal.msgSuccess("继续成功"); + }).catch(() => { + }); + }, + } } diff --git a/hw-ui/src/views/board/fourthFloor/laserLight.vue b/hw-ui/src/views/board/fourthFloor/laserLight.vue index 7b2dc339..57660896 100644 --- a/hw-ui/src/views/board/fourthFloor/laserLight.vue +++ b/hw-ui/src/views/board/fourthFloor/laserLight.vue @@ -42,6 +42,15 @@ 完成 + + 暂停 + + + 继续 + + @@ -255,10 +264,10 @@ import { startNextProductPlanDetailAttach, getPlanDrawings, addRawInstock, - checkSuitableSaleOrderMaterial, directRawOutstock, directRawReturn, - get4thFloorRegularBarcode + get4thFloorRegularBarcode, + productPlanDetailPause,productPlanDetailContinue } from "@/api/board"; import {monitorSerialData} from "@/utils/serial" @@ -278,6 +287,9 @@ const setState = (e) => { if (e === '3' || e === '9') { return '已完成' } + if (e === '4') { + return '暂停' + } } const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100 export default { @@ -331,6 +343,7 @@ export default { NOT_STARTED: "1", STARTED: "2", COMPLETED: "3", + PAUSE: "4", ABNORMAL_COMPLETED: "9" }, @@ -338,6 +351,7 @@ export default { "1": "未开始", "2": "已开始", "3": "已完成", + "4": "暂停", "9": "异常完成" }, @@ -1231,7 +1245,35 @@ export default { this.$modal.msgWarning("此派工派工单号无SOP附件!"); } }) - } + }, + + + + /** 提交暂停按钮 */ + submitProductPlanDetailPause() { + let pauseForm = {planDetailId:this.form.planDetailId}; + this.$modal.confirm('确认要暂停么?').then(function () { + return productPlanDetailPause(pauseForm); + }).then(() => { + this.$modal.msgSuccess("暂停成功"); + this.form.planDetailStatus = setState("4"); + }).catch(() => { + }); + }, + + + /** 提交继续按钮 */ + submitProductPlanDetailContinue() { + let continueForm = {planDetailId:this.form.planDetailId}; + this.$modal.confirm('确认要继续么?').then(function () { + return productPlanDetailContinue(continueForm); + }).then(() => { + this.form.planDetailStatus = setState("2"); + this.$modal.msgSuccess("继续成功"); + }).catch(() => { + }); + }, + }, } diff --git a/hw-ui/src/views/board/fourthFloor/weld.vue b/hw-ui/src/views/board/fourthFloor/weld.vue index 2625dcd2..0def5869 100644 --- a/hw-ui/src/views/board/fourthFloor/weld.vue +++ b/hw-ui/src/views/board/fourthFloor/weld.vue @@ -25,6 +25,15 @@
完成 + + 暂停 + + + 继续 + +
@@ -239,11 +248,11 @@ import { completeProductPlanDetail, getNewestProductPlanDetail, getProductPlans, - startNextProductPlanDetail + startNextProductPlanDetail, + productPlanDetailPause,productPlanDetailContinue } from '@/api/board' import WorkshopNotice from "@/components/workshopNotice/index.vue"; import {noticeData} from "@/utils/notice" -import {monitorSerialData} from "@/utils/serial"; import ViewFile from "@/components/viewFile/index.vue"; import {getDispatchSOPAttachList} from "@/api/mes/productplan"; @@ -257,6 +266,9 @@ const setState = (e) => { if (e === '3' || e === '9') { return '已完成' } + if (e === '4') { + return '暂停' + } } const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100 export default { @@ -884,6 +896,32 @@ export default { } }) }, + + + /** 提交暂停按钮 */ + submitProductPlanDetailPause() { + let pauseForm = {planDetailId:this.form.planDetailId}; + this.$modal.confirm('确认要暂停么?').then(function () { + return productPlanDetailPause(pauseForm); + }).then(() => { + this.$modal.msgSuccess("暂停成功"); + this.form.planDetailStatus = setState("4"); + }).catch(() => { + }); + }, + + + /** 提交继续按钮 */ + submitProductPlanDetailContinue() { + let continueForm = {planDetailId:this.form.planDetailId}; + this.$modal.confirm('确认要继续么?').then(function () { + return productPlanDetailContinue(continueForm); + }).then(() => { + this.form.planDetailStatus = setState("2"); + this.$modal.msgSuccess("继续成功"); + }).catch(() => { + }); + }, } }