diff --git a/klp-mes/src/main/java/com/klp/mes/qc/controller/QcQualityReviewController.java b/klp-mes/src/main/java/com/klp/mes/qc/controller/QcQualityReviewController.java index ef41a2813..39da2dbbf 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/controller/QcQualityReviewController.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/controller/QcQualityReviewController.java @@ -10,7 +10,6 @@ import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; -import com.klp.mes.qc.domain.bo.QcQualityReviewApproveBo; import com.klp.mes.qc.domain.bo.QcQualityReviewBo; import com.klp.mes.qc.domain.vo.QcQualityReviewCoilVo; import com.klp.mes.qc.domain.vo.QcQualityReviewLogVo; @@ -110,12 +109,13 @@ public class QcQualityReviewController extends BaseController { } /** - * 审批通过 + * 审批通过(创建时已填好领导意见和改判等级,领导仅确认) */ @Log(title = "质量评审单", businessType = BusinessType.UPDATE) - @PostMapping("/approve") - public R approve(@Validated @RequestBody QcQualityReviewApproveBo bo) { - return toAjax(iQcQualityReviewService.approve(bo)); + @PostMapping("/approve/{reviewId}") + public R approve(@NotNull(message = "主键不能为空") + @PathVariable Long reviewId) { + return toAjax(iQcQualityReviewService.approve(reviewId)); } /** diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/IQcQualityReviewService.java b/klp-mes/src/main/java/com/klp/mes/qc/service/IQcQualityReviewService.java index 695348139..0b958206c 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/IQcQualityReviewService.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/IQcQualityReviewService.java @@ -2,7 +2,6 @@ package com.klp.mes.qc.service; import com.klp.common.core.domain.PageQuery; import com.klp.common.core.page.TableDataInfo; -import com.klp.mes.qc.domain.bo.QcQualityReviewApproveBo; import com.klp.mes.qc.domain.bo.QcQualityReviewBo; import com.klp.mes.qc.domain.vo.QcQualityReviewVo; import com.klp.mes.qc.domain.vo.QcQualityReviewCoilVo; @@ -55,9 +54,9 @@ public interface IQcQualityReviewService { Boolean submit(Long reviewId); /** - * 审批通过(flowStatus: 2→3) + * 审批通过(flowStatus: 2→3,所有填写内容已在创建时完成,领导仅确认) */ - Boolean approve(QcQualityReviewApproveBo bo); + Boolean approve(Long reviewId); /** * 驳回(flowStatus: 2→4) diff --git a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java index 1325fc981..df9f7862c 100644 --- a/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/qc/service/impl/QcQualityReviewServiceImpl.java @@ -16,7 +16,6 @@ import com.klp.service.IWmsMaterialCoilService; import com.klp.mes.qc.domain.QcQualityReview; import com.klp.mes.qc.domain.QcQualityReviewCoil; import com.klp.mes.qc.domain.QcQualityReviewLog; -import com.klp.mes.qc.domain.bo.QcQualityReviewApproveBo; import com.klp.mes.qc.domain.bo.QcQualityReviewBo; import com.klp.mes.qc.domain.bo.QcQualityReviewCoilBo; import com.klp.mes.qc.domain.vo.QcQualityReviewCoilVo; @@ -32,7 +31,6 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; -import java.util.stream.Collectors; /** * 质量评审单Service业务层处理 @@ -189,6 +187,10 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService { if (StringUtils.isBlank(review.getDeptOpinion())) { throw new RuntimeException("请先填写品质部评审意见"); } + // 校验:必须有领导审批意见 + if (StringUtils.isBlank(review.getLeaderOpinion())) { + throw new RuntimeException("请先填写领导审批意见"); + } // 校验:至少有一个钢卷 Long coilCount = coilMapper.selectCount( Wrappers.lambdaQuery() @@ -197,6 +199,18 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService { if (coilCount == null || coilCount == 0) { throw new RuntimeException("请至少添加一个钢卷"); } + // 校验:每个钢卷必须指定改判后质量等级 + List submitCoilList = coilMapper.selectList( + Wrappers.lambdaQuery() + .eq(QcQualityReviewCoil::getReviewId, reviewId) + .eq(QcQualityReviewCoil::getDelFlag, 0)); + for (QcQualityReviewCoil coil : submitCoilList) { + if (StringUtils.isBlank(coil.getRegradeQuality())) { + String coilNo = StringUtils.isNotBlank(coil.getCurrentCoilNo()) + ? coil.getCurrentCoilNo() : "ID:" + coil.getDetailId(); + throw new RuntimeException("钢卷【" + coilNo + "】未指定改判后质量状态"); + } + } // 更新流程状态为待审批,清除驳回原因 baseMapper.update(null, Wrappers.lambdaUpdate() @@ -210,53 +224,30 @@ public class QcQualityReviewServiceImpl implements IQcQualityReviewService { } /** - * 审批通过 + * 审批通过并直接执行改判(创建时已填好所有内容,领导确认后立即生效) */ @Override @Transactional(rollbackFor = Exception.class) - public Boolean approve(QcQualityReviewApproveBo bo) { - QcQualityReview review = baseMapper.selectById(bo.getReviewId()); + public Boolean approve(Long reviewId) { + QcQualityReview review = baseMapper.selectById(reviewId); if (review == null) { throw new RuntimeException("评审单不存在"); } if (!Long.valueOf(2L).equals(review.getFlowStatus())) { throw new RuntimeException("只有待审批状态的评审单才能审批"); } - if (CollUtil.isEmpty(bo.getCoilRegradeList())) { - throw new RuntimeException("请为每个钢卷指定改判后质量状态"); - } - // 校验:coilRegradeList 是否覆盖了评审单中的所有有效钢卷 - List dbCoils = coilMapper.selectList( - Wrappers.lambdaQuery() - .eq(QcQualityReviewCoil::getReviewId, bo.getReviewId()) - .eq(QcQualityReviewCoil::getDelFlag, 0)); - Set regradedIds = bo.getCoilRegradeList().stream() - .map(QcQualityReviewApproveBo.CoilRegradeBo::getDetailId) - .collect(Collectors.toSet()); - for (QcQualityReviewCoil coil : dbCoils) { - if (!regradedIds.contains(coil.getDetailId())) { - throw new RuntimeException("钢卷【" + coil.getCurrentCoilNo() + "】未指定改判后质量状态"); - } - } - - // 1. 更新主表流程状态 + // 1. 更新主表流程状态为已通过 baseMapper.update(null, Wrappers.lambdaUpdate() - .eq(QcQualityReview::getReviewId, bo.getReviewId()) - .set(QcQualityReview::getFlowStatus, 3L) - .set(QcQualityReview::getLeaderOpinion, bo.getLeaderOpinion()) - .set(QcQualityReview::getLeaderSign, bo.getLeaderSign()) - .set(QcQualityReview::getLeaderSignDate, new java.sql.Date(System.currentTimeMillis()))); + .eq(QcQualityReview::getReviewId, reviewId) + .set(QcQualityReview::getFlowStatus, 3L)); - // 2. 更新每个钢卷的改判状态 - for (QcQualityReviewApproveBo.CoilRegradeBo regrade : bo.getCoilRegradeList()) { - coilMapper.update(null, Wrappers.lambdaUpdate() - .eq(QcQualityReviewCoil::getDetailId, regrade.getDetailId()) - .set(QcQualityReviewCoil::getRegradeQuality, regrade.getRegradeQuality())); - } + // 2. 记录审批日志 + addLog(reviewId, "approve", review.getLeaderOpinion()); + + // 3. 直接执行改判(无需单独点击执行改判按钮) + execute(reviewId); - // 3. 记录审批日志 - addLog(bo.getReviewId(), "approve", bo.getLeaderOpinion()); return true; } diff --git a/klp-ui/src/api/mes/qc/qualityReview.js b/klp-ui/src/api/mes/qc/qualityReview.js index 8f7667686..0d3b5d9f7 100644 --- a/klp-ui/src/api/mes/qc/qualityReview.js +++ b/klp-ui/src/api/mes/qc/qualityReview.js @@ -51,12 +51,11 @@ export function submitQualityReview(reviewId) { }) } -// 审批通过 -export function approveQualityReview(data) { +// 审批通过(创建时已填好内容,领导仅确认) +export function approveQualityReview(reviewId) { return request({ - url: '/qc/qualityReview/approve', - method: 'post', - data: data + url: '/qc/qualityReview/approve/' + reviewId, + method: 'post' }) } diff --git a/klp-ui/src/views/mes/qc/qualityReview/index.vue b/klp-ui/src/views/mes/qc/qualityReview/index.vue index 6bae8bcd8..7e5f634e0 100644 --- a/klp-ui/src/views/mes/qc/qualityReview/index.vue +++ b/klp-ui/src/views/mes/qc/qualityReview/index.vue @@ -70,9 +70,7 @@ 提交送审 - - 执行改判 + 重新提交 @@ -105,9 +103,6 @@ {{ currentRow.transmitDate }} - - {{ currentRow.prodDateRange }} - @@ -141,15 +136,7 @@
品质部评审意见
-
- -
- - -
- 保存意见 -
-
+
{{ currentRow.deptOpinion || '暂未填写' }}
{{ currentRow.leaderOpinion || '暂无审批意见' }}
@@ -224,8 +228,14 @@
- + + +
+
+ + 基本信息 +
@@ -239,23 +249,20 @@ - + - + - + - - - - - +
+
@@ -272,13 +279,23 @@ + + + -
请选择O级钢卷
+
+ + 点击选择O级钢卷 +
@@ -288,31 +305,63 @@ :filters="{ qualityStatusCsv: 'O', status: 0 }" @confirm="onDialogCoilConfirm" /> - + +
+
+ + 品质部评审意见 +
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+ + 领导审批意见 +
- - + + - + - + - + - + +
- - 取消 - 确定 + + 取消 + 确定
@@ -350,12 +399,6 @@ export default { // 钢卷选择 showCoilSelector: false, - // 品质部意见编辑(独立于editForm,避免串数据) - opinionForm: { - deptOpinion: '', - deptSign: '', - deptSignDate: undefined - }, // 编辑弹窗 dialogVisible: false, dialogTitle: '', @@ -370,6 +413,9 @@ export default { deptOpinion: '', deptSign: '', deptSignDate: undefined, + leaderOpinion: '', + leaderSign: '', + leaderSignDate: undefined, coilList: [] }, rules: { @@ -423,13 +469,6 @@ export default { map[c.detailId] = c.regradeQuality || '' }) this.approveCoilMap = map - // 初始化品质部意见编辑(独立于editForm) - this.opinionForm = { - deptOpinion: data.deptOpinion || '', - deptSign: data.deptSign || '', - deptSignDate: data.deptSignDate || undefined - } - this.approveForm.reviewId = reviewId this.approveForm.leaderOpinion = '' this.approveForm.leaderSign = '' this.rejectReason = '' @@ -456,6 +495,9 @@ export default { deptOpinion: '', deptSign: '', deptSignDate: undefined, + leaderOpinion: '', + leaderSign: '', + leaderSignDate: undefined, coilList: [] } this.editing = true @@ -473,6 +515,9 @@ export default { deptOpinion: row.deptOpinion, deptSign: row.deptSign, deptSignDate: row.deptSignDate, + leaderOpinion: row.leaderOpinion || '', + leaderSign: row.leaderSign || '', + leaderSignDate: row.leaderSignDate || undefined, coilList: this.coilList.map(c => ({ ...c })) } this.editing = true @@ -509,6 +554,7 @@ export default { spec: coil.specification, // CoilSelector返回的字段名为specification netWeight: coil.netWeight, defectDesc: '', + regradeQuality: '', // 改判后等级,由创建者填写 groupSeq: startIdx + idx + 1, beforeQuality: coil.qualityStatus || 'O' })) @@ -538,26 +584,8 @@ export default { // ===== 审批 ===== doApprove() { - if (!this.approveForm.leaderOpinion) { - this.$modal.msgError('请输入审批意见') - return - } - const coilRegradeList = this.coilList.map(c => ({ - detailId: c.detailId, - regradeQuality: this.approveCoilMap[c.detailId] - })) - const invalid = coilRegradeList.some(r => !r.regradeQuality) - if (invalid) { - this.$modal.msgError('请为每个钢卷指定改判后质量状态') - return - } - this.$confirm('确认审批通过?', '提示', { type: 'success' }).then(() => { - approveQualityReview({ - reviewId: this.currentRow.reviewId, - leaderOpinion: this.approveForm.leaderOpinion, - leaderSign: this.approveForm.leaderSign, - coilRegradeList - }).then(() => { + this.$confirm('确认审批通过?审批后将直接执行改判,钢卷质量状态将同步更新。', '提示', { type: 'success' }).then(() => { + approveQualityReview(this.currentRow.reviewId).then(() => { this.$modal.msgSuccess('审批通过') this.handleRefreshDetail() }) @@ -605,20 +633,8 @@ export default { hasPermi(permi) { return this.$store.getters.permissions && this.$store.getters.permissions.includes(permi) }, - saveOpinion() { - if (!this.currentRow) return - updateQualityReview({ - reviewId: this.currentRow.reviewId, - deptOpinion: this.opinionForm.deptOpinion, - deptSign: this.opinionForm.deptSign, - deptSignDate: this.opinionForm.deptSignDate - }).then(() => { - this.$modal.msgSuccess('保存成功') - this.handleRefreshDetail() - }) } } -}