From f38538be335002c9c4548f6e4026ac260239cf6c Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Wed, 10 Sep 2025 00:15:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=9B=E5=BA=A6=E7=AE=A1?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PgsProgressPlanDetailController.java | 4 +- .../IPgsProgressPlanDetailService.java | 7 +- .../impl/PgsProgressCategoryServiceImpl.java | 8 +- .../PgsProgressPlanDetailServiceImpl.java | 96 ++++++++++++------- 4 files changed, 74 insertions(+), 41 deletions(-) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java index 08ecc565..8d8c4876 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java @@ -62,12 +62,12 @@ public class PgsProgressPlanDetailController extends BaseController { /** * 新增进度计划详情(数量设施) */ - @SaCheckPermission("progress:progressPlanDetail:insertNumber") +/* @SaCheckPermission("progress:progressPlanDetail:insertNumber") @RepeatSubmit() @PostMapping("/insert/number") public R insertNumberDetail(@Validated @RequestBody PgsProgressPlanDetailNumberCreateReq req) { return toAjax(pgsProgressPlanDetailService.insertNumberDetail(req)); - } + }*/ /** * 获取进度计划详情已完成设施详细信息 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java index a4045ead..ff287a2c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressPlanDetailService.java @@ -6,7 +6,10 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.progress.domain.PgsProgressPlanDetail; -import org.dromara.progress.domain.dto.progressplandetail.*; +import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailFinishedCreateReq; +import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailPercentageCreateReq; +import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailQueryReq; +import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailRemoveReq; import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailFinishedVo; import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailNumVo; import org.dromara.progress.domain.vo.progressplandetail.PgsProgressPlanDetailUnFinishVo; @@ -54,7 +57,7 @@ public interface IPgsProgressPlanDetailService extends IService 0) { - throw new ServiceException("完成百分比不能大于100", HttpStatus.BAD_REQUEST); + throw new ServiceException("完成值不能小于0", HttpStatus.BAD_REQUEST); } Long id = req.getId(); PgsProgressPlanDetail progressPlanDetail = this.getById(id); if (progressPlanDetail == null) { throw new ServiceException("进度计划详情信息不存在", HttpStatus.NOT_FOUND); } - // 判断总进度不能大于 100 - if (progressPlanDetail.getFinishedNumber().add(finishedNumber).compareTo(BigDecimal.valueOf(100)) > 0) { - throw new ServiceException("总进度不能大于100", HttpStatus.BAD_REQUEST); + // 判断完成时间是否大于当前时间 + LocalDate date = progressPlanDetail.getDate(); + if (date.isAfter(LocalDate.now())) { + throw new ServiceException("完成时间不能大于当前时间", HttpStatus.BAD_REQUEST); } Long progressPlanId = progressPlanDetail.getProgressPlanId(); PgsProgressPlan progressPlan = progressPlanService.getById(progressPlanId); @@ -334,35 +335,64 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl 0) { + throw new ServiceException("总进度不能大于100", HttpStatus.BAD_REQUEST); + } + // 判断是否大于 100 + if (unitType.equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue()) && finishedNumber.compareTo(BigDecimal.valueOf(100)) > 0) { + throw new ServiceException("完成百分比不能大于100", HttpStatus.BAD_REQUEST); + } + + // ---------- 更新 detail ---------- progressPlanDetail.setFinishedNumber(finishedNumber); - // 更新 - boolean update = this.updateById(progressPlanDetail); - if (!update) { + if (!this.updateById(progressPlanDetail)) { throw new ServiceException("更新进度计划详情异常", HttpStatus.ERROR); } - progressPlan.setFinishedNumber(oldFinishedNumberTotal.subtract(number).add(finishedNumber)); - boolean result = progressPlanService.updateById(progressPlan); - if (!result) { + + // ---------- 更新 plan ---------- + progressPlan.setFinishedNumber(newPlanFinished); + if (!progressPlanService.updateById(progressPlan)) { throw new ServiceException("更新进度计划异常", HttpStatus.ERROR); } + + // ---------- 更新 category ---------- BigDecimal completed = progressCategory.getCompleted(); - BigDecimal completedTotal = completed.subtract(number).add(finishedNumber); - progressCategory.setCompleted(completedTotal); - if (completedTotal.compareTo(BigDecimal.valueOf(100)) == 0) { - progressCategory.setStatus(PgsFinishStatusEnum.FINISH.getValue()); + BigDecimal completedTotal = completed.subtract(oldDetailNumber).add(finishedNumber); + if (unitType.equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue()) && completedTotal.compareTo(BigDecimal.valueOf(100)) > 0) { + throw new ServiceException("完成百分比不能大于100", HttpStatus.BAD_REQUEST); } - // 判断当前是否已完成计划数量 - BigDecimal nowFinishedNumber = progressPlan.getFinishedNumber(); - if (oldFinishedNumberTotal.compareTo(progressPlan.getPlanNumber()) < 0 - && nowFinishedNumber.compareTo(progressPlan.getPlanNumber()) >= 0) { + if (unitType.equals(PgsProgressUnitTypeEnum.NUMBER.getValue()) && completedTotal.compareTo(progressCategory.getTotal()) > 0) { + throw new ServiceException("完成数量不能超过总数量", HttpStatus.BAD_REQUEST); + } + progressCategory.setCompleted(completedTotal); + + // 完成判定 + if (unitType.equals(PgsProgressUnitTypeEnum.PERCENTAGE.getValue())) { + if (completedTotal.compareTo(BigDecimal.valueOf(100)) == 0) { + progressCategory.setStatus(PgsFinishStatusEnum.FINISH.getValue()); + } + } else { // NUMBER + if (completedTotal.compareTo(progressCategory.getTotal()) >= 0) { + progressCategory.setStatus(PgsFinishStatusEnum.FINISH.getValue()); + } + } + + // 判断是否跨过计划数量阈值 + if (oldPlanFinished.compareTo(progressPlan.getPlanNumber()) < 0 + && newPlanFinished.compareTo(progressPlan.getPlanNumber()) >= 0) { progressCategory.setPlanTotal(progressCategory.getPlanTotal().subtract(progressPlan.getPlanNumber())); } - boolean updateCategory = progressCategoryService.updateById(progressCategory); - if (!updateCategory) { + + if (!progressCategoryService.updateById(progressCategory)) { throw new ServiceException("更新进度分类异常", HttpStatus.ERROR); } + return true; } @@ -372,7 +402,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl