yanghao 3 روز پیش
والد
کامیت
1fed8a354e

+ 12 - 0
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/controller/admin/expertpool/vo/ExpertPoolRespVO.java

@@ -23,6 +23,10 @@ public class ExpertPoolRespVO {
     @ExcelProperty("所属部门")
     private Long deptId;
 
+    @Schema(description = "所属部门名称", example = "技术部")
+    @ExcelProperty("所属部门名称")
+    private String deptName;
+
     @Schema(description = "专家姓名")
     @ExcelProperty("专家姓名")
     private String expertName;
@@ -79,6 +83,14 @@ public class ExpertPoolRespVO {
     @ExcelProperty("专业软件技能")
     private Set<Long> softwareSkills;
 
+    @Schema(description = "联系方式")
+    @ExcelProperty("联系方式")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    @ExcelProperty("邮箱")
+    private String email;
+
     @Schema(description = "排序值")
     @ExcelProperty("排序值")
     private Integer sort;

+ 6 - 0
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/controller/admin/expertpool/vo/ExpertPoolSaveReqVO.java

@@ -58,6 +58,12 @@ public class ExpertPoolSaveReqVO {
     @Schema(description = "专业软件技能")
     private Set<Long> softwareSkills;
 
+    @Schema(description = "联系方式")
+    private String phone;
+
+    @Schema(description = "邮箱")
+    private String email;
+
     @Schema(description = "排序值")
     private Integer sort;
 

+ 10 - 0
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/controller/admin/researchProject/vo/ProjectTaskRespVO.java

@@ -6,6 +6,7 @@ import lombok.Data;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
+import com.fasterxml.jackson.annotation.JsonFormat;
 
 @Schema(description = "管理后台 - 项目任务 Response VO")
 @Data
@@ -20,10 +21,19 @@ public class ProjectTaskRespVO {
     private Integer priority;
     private Long ownerId;
     private String ownerName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate planStartTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate planEndTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate actualStartTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private LocalDate actualEndTime;
+
     private Integer status;
     private Integer progress;
     private Integer sort;

+ 13 - 0
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/dal/dataobject/expertpool/ExpertPoolDO.java

@@ -35,6 +35,11 @@ public class ExpertPoolDO extends BaseDO {
      * 所属部门
      */
     private Long deptId;
+    /**
+     * 部门名称(非数据库字段)
+     */
+    @TableField(exist = false)
+    private String deptName;
     /**
      * 专家姓名
      */
@@ -95,6 +100,14 @@ public class ExpertPoolDO extends BaseDO {
      */
     @TableField(typeHandler = JacksonTypeHandler.class)
     private Set<Long> softwareSkills;
+    /**
+     * 联系电话
+     */
+    private String phone;
+    /**
+     * 邮箱
+     */
+    private String email;
     /**
      * 排序值
      */

+ 2 - 0
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/dal/dataobject/researchProject/ProjectDO.java

@@ -48,6 +48,8 @@ public class ProjectDO extends BaseDO {
      * 项目名称
      */
     private String projectName;
+
+    private LocalDate projectDate; // 立项时间
     /**
      * 项目负责人
      */

+ 34 - 1
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/service/expertpool/ExpertPoolServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.rd.service.expertpool;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.rd.controller.admin.expertpool.vo.ExpertPoolPageReqVO;
@@ -11,10 +12,18 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 
+import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
+
 import javax.annotation.Resource;
+import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.module.rd.enums.ErrorCodeConstant.EXPERT_POOL_NOT_EXISTS;
 
 
@@ -30,6 +39,9 @@ public class ExpertPoolServiceImpl implements ExpertPoolService {
     @Resource
     private ExpertPoolMapper expertPoolMapper;
 
+    @Resource
+    private DeptApi deptApi;
+
     @Override
     public Long createExpertPool(ExpertPoolSaveReqVO createReqVO) {
         // 插入
@@ -54,6 +66,25 @@ public class ExpertPoolServiceImpl implements ExpertPoolService {
         return maxSortObj == null || maxSortObj.getSort() == null ? 0 : maxSortObj.getSort();
     }
 
+    /**
+     * 填充部门名称
+     */
+    private void fillDeptName(List<ExpertPoolDO> list) {
+        if (CollUtil.isEmpty(list)) {
+            return;
+        }
+        // 收集所有 deptId
+        Set<Long> deptIds = convertSet(list, ExpertPoolDO::getDeptId, id -> id != null);
+        if (CollUtil.isEmpty(deptIds)) {
+            return;
+        }
+        // 批量查部门
+        List<DeptRespDTO> depts = deptApi.getDeptList(deptIds);
+        Map<Long, String> deptMap = convertMap(depts, DeptRespDTO::getId, DeptRespDTO::getName);
+        // 填充
+        list.forEach(item -> item.setDeptName(deptMap.get(item.getDeptId())));
+    }
+
     @Override
     public void updateExpertPool(ExpertPoolSaveReqVO updateReqVO) {
         // 校验存在
@@ -102,7 +133,9 @@ public class ExpertPoolServiceImpl implements ExpertPoolService {
 
     @Override
     public ExpertPoolDO getExpertPool(Long id) {
-        return expertPoolMapper.selectById(id);
+        ExpertPoolDO expertPool = expertPoolMapper.selectById(id);
+        fillDeptName(Collections.singletonList(expertPool));
+        return expertPool;
     }
 
     @Override

+ 3 - 0
yudao-module-rd/yudao-module-rd-biz/src/main/java/cn/iocoder/yudao/module/rd/service/researchProject/ResearchProjectServiceImpl.java

@@ -12,6 +12,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Objects;
@@ -375,12 +376,14 @@ public class ResearchProjectServiceImpl implements ResearchProjectService {
             update.setFormalAuditStatus(AUDIT_STATUS_REJECTED);
             update.setFormalCurrentNode(null);
             update.setFormalCurrentApproverId(null);
+            update.setProjectDate(null);   // ⭐ 驳回:清空立项时间
         } else {
             Integer nextNode = getNextFormalNode(project);
             if (nextNode == null) {
                 update.setFormalAuditStatus(AUDIT_STATUS_PASSED);
                 update.setFormalCurrentNode(null);
                 update.setFormalCurrentApproverId(null);
+                update.setProjectDate(LocalDate.now());   // ⭐ 立项时间
             } else {
                 Long nextApproverId = findApprover(nextNode, project.getDeptId());
                 if (nextApproverId == null) {