From f50da3afc73bc458640677c198bb7c99de5b2fe5 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期一, 09 三月 2026 17:33:45 +0800
Subject: [PATCH] fix(mybatis): 修正createUser和updateUser填充值类型空值处理

---
 src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java |   99 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 99 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java b/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java
new file mode 100644
index 0000000..74c392d
--- /dev/null
+++ b/src/main/java/com/ruoyi/projectManagement/service/impl/handle/InfoHandleService.java
@@ -0,0 +1,99 @@
+package com.ruoyi.projectManagement.service.impl.handle;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.enums.PlanStageEnum;
+import com.ruoyi.common.enums.ReviewStatusEnum;
+import com.ruoyi.common.utils.EnumUtil;
+import com.ruoyi.projectManagement.dto.PlanStageDto;
+import com.ruoyi.projectManagement.dto.SaveInfoDto;
+import com.ruoyi.projectManagement.mapper.InfoMapper;
+import com.ruoyi.projectManagement.pojo.Info;
+import com.ruoyi.projectManagement.pojo.PlanNode;
+import com.ruoyi.projectManagement.service.PlanService;
+import com.ruoyi.projectManagement.service.impl.PlanServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.validation.constraints.NotNull;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+/**
+ * @author buhuazhen
+ * @date 2026/3/9
+ * @email 3038525872@qq.com
+ */
+@Component
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class,readOnly = true)
+public class InfoHandleService {
+
+    private static final String GENERATE_SERIAL_NUMBER_PREFIX = "XM";
+
+    private final InfoMapper infoMapper;
+
+    private final PlanService planService;
+
+    @Transactional(rollbackFor = Exception.class)
+    public Long save(@NotNull SaveInfoDto saveInfoDto){
+        Info info = BeanUtil.copyProperties(saveInfoDto, Info.class);
+
+        // 闄勪欢鐗规畩澶勭悊
+        String attachmentIds = StrUtil.join(",", Optional.ofNullable(saveInfoDto.getAttachmentIds()).orElse(Collections.emptyList()));
+        info.setAttachment(attachmentIds);
+
+        // 鐢熸垚搴忓彿 (濡傛灉闇�瑕佽嚜鍔ㄧ敓鎴愮殑璇�)
+        if(StrUtil.isBlank(info.getNo())){
+            info.setNo(generateSerialNumber());
+        }
+        info.setTeam(saveInfoDto.getTeamList());
+        if(info.getId() == null){
+            // 鐢熸垚瀵瑰簲鐨勯樁娈靛叧绯绘暟鎹�
+            info.setPlanStage(getPlanStageList(info.getProjectManagementPlanId()));
+            // 鎻掑叆榛樿鐘舵��
+            info.setStatus(PlanStageEnum.TO_BEGIN.getCode());
+            info.setReviewStatus(ReviewStatusEnum.PENDING_REVIEW.getCode());
+            infoMapper.insert(info);
+        }else {
+            infoMapper.updateById(info);
+        }
+        return info.getId();
+    }
+
+
+    private List<PlanStageDto> getPlanStageList(@NotNull Long planId) {
+        List<PlanNode> planNodeByPlanId = planService.getPlanNodeByPlanId(planId);
+        return planNodeByPlanId.stream().map(it-> new PlanStageDto(it.getId(), it.getName(), PlanStageEnum.TO_BEGIN)).collect(Collectors.toList());
+    }
+
+
+    /**
+     * 鐢熸垚椤圭洰缂栧彿
+     * @return
+     */
+    private String generateSerialNumber() {
+        // 鑾峰彇褰撳墠鏃ユ湡
+        String date = DateUtil.format(DateUtil.date(), "yyyyMMdd");
+
+        // 鏌ヨ浠婂ぉ宸茬粡鐢熸垚鐨勬暟閲�
+        LambdaQueryWrapper<Info> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.likeRight(Info::getNo, GENERATE_SERIAL_NUMBER_PREFIX + date);
+
+        Long count = infoMapper.selectCount(queryWrapper);
+
+        // 搴忓彿 +1
+        Long serial = count + 1;
+
+        // 3浣嶈ˉ0
+        String serialStr = String.format("%03d", serial);
+
+        return GENERATE_SERIAL_NUMBER_PREFIX + date + serialStr;
+    }
+
+}

--
Gitblit v1.9.3