From 52b61fce22f188e37a88c20740e005ff109637a7 Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期一, 17 八月 2026 15:02:27 +0800
Subject: [PATCH] dos: 新增表:mes_pro_task_pause_record
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/meteringcheck/MesDvMeteringCheckServiceImpl.java | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 165 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/meteringcheck/MesDvMeteringCheckServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/meteringcheck/MesDvMeteringCheckServiceImpl.java
new file mode 100644
index 0000000..b1e0f3c
--- /dev/null
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/dv/meteringcheck/MesDvMeteringCheckServiceImpl.java
@@ -0,0 +1,165 @@
+package cn.iocoder.yudao.module.mes.service.dv.meteringcheck;
+
+import cn.hutool.core.util.ObjUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.mes.controller.admin.dv.meteringcheck.vo.MesDvMeteringCheckPageReqVO;
+import cn.iocoder.yudao.module.mes.controller.admin.dv.meteringcheck.vo.MesDvMeteringCheckSaveReqVO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.dv.metering.MesDvMeteringDO;
+import cn.iocoder.yudao.module.mes.dal.dataobject.dv.meteringcheck.MesDvMeteringCheckDO;
+import cn.iocoder.yudao.module.mes.dal.mysql.dv.meteringcheck.MesDvMeteringCheckMapper;
+import cn.iocoder.yudao.module.mes.service.dv.metering.MesDvMeteringService;
+import jakarta.annotation.Resource;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import java.time.LocalDate;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.DV_METERING_CHECK_CODE_DUPLICATE;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.DV_METERING_CHECK_NOT_EXISTS;
+import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.DV_METERING_NOT_EXISTS;
+
+/**
+ * MES 璁¢噺妫�娴嬭褰� Service 瀹炵幇绫�
+ *
+ * @author 瓒呯骇绠$悊鍛�
+ */
+@Service
+@Validated
+public class MesDvMeteringCheckServiceImpl implements MesDvMeteringCheckService {
+
+ @Resource
+ private MesDvMeteringCheckMapper meteringCheckMapper;
+ @Resource
+ @Lazy // 寤惰繜鍔犺浇锛岄伩鍏嶄笌璁¢噺鍣ㄥ叿 Service 寰幆渚濊禆
+ private MesDvMeteringService meteringService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Long createMeteringCheck(MesDvMeteringCheckSaveReqVO createReqVO) {
+ // 鏍¢獙璁¢噺鍣ㄥ叿瀛樺湪
+ MesDvMeteringDO metering = validateMeteringExists(createReqVO.getMeteringId());
+ // 鏍¢獙妫�娴嬬紪鍙峰敮涓�
+ validateMeteringCheckCodeUnique(null, createReqVO.getCheckCode());
+
+ // 璁$畻涓嬫妫�娴嬫棩鏈燂紙涓虹┖鍒欐寜鏍″噯鍛ㄦ湡鑷姩璁$畻锛�
+ LocalDate nextCheckDate = computeNextCheckDate(createReqVO.getCheckDate(),
+ createReqVO.getNextCheckDate(), metering);
+ MesDvMeteringCheckDO check = BeanUtils.toBean(createReqVO, MesDvMeteringCheckDO.class);
+ check.setNextCheckDate(nextCheckDate);
+ meteringCheckMapper.insert(check);
+
+ // 鍥炲啓璁¢噺鍣ㄥ叿鐨勬渶杩戞娴嬩俊鎭�
+ refreshMeteringCheckInfo(createReqVO.getMeteringId());
+ return check.getId();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateMeteringCheck(MesDvMeteringCheckSaveReqVO updateReqVO) {
+ // 鏍¢獙瀛樺湪
+ validateMeteringCheckExists(updateReqVO.getId());
+ // 鏍¢獙璁¢噺鍣ㄥ叿瀛樺湪
+ MesDvMeteringDO metering = validateMeteringExists(updateReqVO.getMeteringId());
+ // 鏍¢獙妫�娴嬬紪鍙峰敮涓�
+ validateMeteringCheckCodeUnique(updateReqVO.getId(), updateReqVO.getCheckCode());
+
+ // 璁$畻涓嬫妫�娴嬫棩鏈燂紙涓虹┖鍒欐寜鏍″噯鍛ㄦ湡鑷姩璁$畻锛�
+ LocalDate nextCheckDate = computeNextCheckDate(updateReqVO.getCheckDate(),
+ updateReqVO.getNextCheckDate(), metering);
+ MesDvMeteringCheckDO updateObj = BeanUtils.toBean(updateReqVO, MesDvMeteringCheckDO.class);
+ updateObj.setNextCheckDate(nextCheckDate);
+ meteringCheckMapper.updateById(updateObj);
+
+ // 鍥炲啓璁¢噺鍣ㄥ叿鐨勬渶杩戞娴嬩俊鎭�
+ refreshMeteringCheckInfo(updateReqVO.getMeteringId());
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteMeteringCheck(Long id) {
+ // 鏍¢獙瀛樺湪
+ validateMeteringCheckExists(id);
+ MesDvMeteringCheckDO check = meteringCheckMapper.selectById(id);
+
+ // 鍒犻櫎
+ meteringCheckMapper.deleteById(id);
+
+ // 鍥炲啓璁¢噺鍣ㄥ叿鐨勬渶杩戞娴嬩俊鎭�
+ refreshMeteringCheckInfo(check.getMeteringId());
+ }
+
+ @Override
+ public MesDvMeteringCheckDO getMeteringCheck(Long id) {
+ return meteringCheckMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult<MesDvMeteringCheckDO> getMeteringCheckPage(MesDvMeteringCheckPageReqVO pageReqVO) {
+ return meteringCheckMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public Long getMeteringCheckCountByMeteringId(Long meteringId) {
+ return meteringCheckMapper.selectCountByMeteringId(meteringId);
+ }
+
+ @Override
+ public void validateMeteringCheckExists(Long id) {
+ if (meteringCheckMapper.selectById(id) == null) {
+ throw exception(DV_METERING_CHECK_NOT_EXISTS);
+ }
+ }
+
+ private MesDvMeteringDO validateMeteringExists(Long meteringId) {
+ MesDvMeteringDO metering = meteringService.getMetering(meteringId);
+ if (metering == null) {
+ throw exception(DV_METERING_NOT_EXISTS);
+ }
+ return metering;
+ }
+
+ private void validateMeteringCheckCodeUnique(Long id, String checkCode) {
+ if (StrUtil.isBlank(checkCode)) {
+ return;
+ }
+ MesDvMeteringCheckDO check = meteringCheckMapper.selectByCheckCode(checkCode);
+ if (check == null) {
+ return;
+ }
+ if (ObjUtil.notEqual(check.getId(), id)) {
+ throw exception(DV_METERING_CHECK_CODE_DUPLICATE);
+ }
+ }
+
+ /**
+ * 璁$畻涓嬫妫�娴嬫棩鏈燂細鎵嬪姩鎸囧畾浼樺厛锛屽惁鍒欐寜 妫�娴嬫棩鏈� + 鏍″噯鍛ㄦ湡锛堟湀锛夎嚜鍔ㄨ绠�
+ */
+ private LocalDate computeNextCheckDate(LocalDate checkDate, LocalDate nextCheckDate, MesDvMeteringDO metering) {
+ if (nextCheckDate != null) {
+ return nextCheckDate;
+ }
+ if (checkDate != null && metering.getCheckCycleCount() != null) {
+ return checkDate.plusMonths(metering.getCheckCycleCount());
+ }
+ return nextCheckDate;
+ }
+
+ /**
+ * 鎸�"鏈�鏂颁竴鏉℃娴嬭褰�"鏁翠綋閲嶇畻鍥炲啓璁¢噺鍣ㄥ叿锛屾纭鐩栫紪杈戦潪鏈�鏂拌褰�/鍒犻櫎涓棿璁板綍绛夎竟鐣�
+ */
+ private void refreshMeteringCheckInfo(Long meteringId) {
+ MesDvMeteringCheckDO latest = meteringCheckMapper.selectLatestByMeteringId(meteringId);
+ if (latest == null) {
+ meteringService.updateMeteringCheckInfo(meteringId, null, null);
+ } else {
+ meteringService.updateMeteringCheckInfo(meteringId,
+ latest.getCheckDate(), latest.getNextCheckDate());
+ }
+ }
+
+}
--
Gitblit v1.9.3