Ver código fonte

项目监控

haogh 9 meses atrás
pai
commit
16c22afca4

+ 7 - 0
sop-api/src/main/java/com/qmth/sop/server/api/ProjectMonitorController.java

@@ -2,6 +2,7 @@ package com.qmth.sop.server.api;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.result.ProjectMonitorCardResult;
 import com.qmth.sop.business.bean.result.ProjectMonitorResult;
 import com.qmth.sop.business.service.ProjectMonitorService;
 import com.qmth.sop.common.contant.SystemConstant;
@@ -43,5 +44,11 @@ public class ProjectMonitorController {
         return ResultUtil.ok(projectMonitorService.pageProjectMonitor(new Page<>(pageNumber, pageSize), serviceUnitId, customerId, process));
     }
 
+    @ApiOperation(value = "工作证")
+    @RequestMapping(value = "/detail", method = RequestMethod.POST)
+    @ApiResponses({ @ApiResponse(code = 200, message = "工作证", response = ProjectMonitorCardResult.class) })
+    public Result userCard(@ApiParam(value = "用户ID", required = true) @RequestParam(required = true) Long userId) {
+        return ResultUtil.ok(projectMonitorService.getUserCard(userId));
+    }
 
 }

+ 13 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/UserArchivesParam.java

@@ -2,6 +2,7 @@ package com.qmth.sop.business.bean.params;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.business.bean.result.UserArchivesProjectExperienceResult;
 import com.qmth.sop.common.annotation.EditKey;
 import com.qmth.sop.common.enums.EducationEnum;
 import com.qmth.sop.common.enums.GenderEnum;
@@ -11,6 +12,7 @@ import org.hibernate.validator.constraints.Range;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @Description: 人员档案编辑参数
@@ -105,6 +107,9 @@ public class UserArchivesParam {
     @ApiModelProperty(value = "备注")
     private String remark;
 
+    @ApiModelProperty(value = "项目经验")
+    private List<UserArchivesProjectExperienceResult> projectExperienceList;
+
     public Long getId() {
         return id;
     }
@@ -272,4 +277,12 @@ public class UserArchivesParam {
     public void setRemark(String remark) {
         this.remark = remark;
     }
+
+    public List<UserArchivesProjectExperienceResult> getProjectExperienceList() {
+        return projectExperienceList;
+    }
+
+    public void setProjectExperienceList(List<UserArchivesProjectExperienceResult> projectExperienceList) {
+        this.projectExperienceList = projectExperienceList;
+    }
 }

+ 68 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/ProjectMonitorCardResult.java

@@ -0,0 +1,68 @@
+package com.qmth.sop.business.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+/**
+ * @Description 项目监控-工作证
+ * @Author haoguanghui
+ * @date 2024/09/05
+ */
+public class ProjectMonitorCardResult {
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "认证编号")
+    private String code;
+
+    @ApiModelProperty(value = "头像地址")
+    private String photoPath;
+
+    @ApiModelProperty(value = "手机号码")
+    private String mobileNumber;
+
+    @ApiModelProperty(value = "项目经验")
+    private List<UserArchivesProjectExperienceResult> projectExperience;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getPhotoPath() {
+        return photoPath;
+    }
+
+    public void setPhotoPath(String photoPath) {
+        this.photoPath = photoPath;
+    }
+
+    public String getMobileNumber() {
+        return mobileNumber;
+    }
+
+    public void setMobileNumber(String mobileNumber) {
+        this.mobileNumber = mobileNumber;
+    }
+
+    public List<UserArchivesProjectExperienceResult> getProjectExperience() {
+        return projectExperience;
+    }
+
+    public void setProjectExperience(List<UserArchivesProjectExperienceResult> projectExperience) {
+        this.projectExperience = projectExperience;
+    }
+}

+ 33 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/UserArchivesProjectExperienceResult.java

@@ -0,0 +1,33 @@
+package com.qmth.sop.business.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description 人员归档-项目经验
+ * @Author haoguanghui
+ * @date 2024/09/06
+ */
+public class UserArchivesProjectExperienceResult {
+
+    @ApiModelProperty(value = "序号")
+    private Integer order;
+
+     @ApiModelProperty(value = "项目经验")
+    private String experience;
+
+    public Integer getOrder() {
+        return order;
+    }
+
+    public void setOrder(Integer order) {
+        this.order = order;
+    }
+
+    public String getExperience() {
+        return experience;
+    }
+
+    public void setExperience(String experience) {
+        this.experience = experience;
+    }
+}

+ 22 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/UserArchivesResult.java

@@ -99,6 +99,12 @@ public class UserArchivesResult {
     @ApiModelProperty(value = "被占用信息")
     private String occupiedInfo;
 
+    @ApiModelProperty(value = "项目经验")
+    private String projectExperience;
+
+    @ApiModelProperty(value = "项目经验列表")
+    private List<UserArchivesProjectExperienceResult> projectExperienceList;
+
     public Boolean getEnable() {
         return enable;
     }
@@ -314,4 +320,20 @@ public class UserArchivesResult {
     public void setOccupiedInfo(String occupiedInfo) {
         this.occupiedInfo = occupiedInfo;
     }
+
+    public String getProjectExperience() {
+        return projectExperience;
+    }
+
+    public void setProjectExperience(String projectExperience) {
+        this.projectExperience = projectExperience;
+    }
+
+    public List<UserArchivesProjectExperienceResult> getProjectExperienceList() {
+        return projectExperienceList;
+    }
+
+    public void setProjectExperienceList(List<UserArchivesProjectExperienceResult> projectExperienceList) {
+        this.projectExperienceList = projectExperienceList;
+    }
 }

+ 11 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBUserArchives.java

@@ -67,6 +67,9 @@ public class TBUserArchives extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "是否启用(1启用 0作废)")
     private Boolean enable;
 
+    @ApiModelProperty(value = "项目经验")
+    private String projectExperience;
+
     public String getCode() {
         return code;
     }
@@ -186,4 +189,12 @@ public class TBUserArchives extends BaseEntity implements Serializable {
     public void setEnable(Boolean enable) {
         this.enable = enable;
     }
+
+    public String getProjectExperience() {
+        return projectExperience;
+    }
+
+    public void setProjectExperience(String projectExperience) {
+        this.projectExperience = projectExperience;
+    }
 }

+ 3 - 0
sop-business/src/main/java/com/qmth/sop/business/service/ProjectMonitorService.java

@@ -3,6 +3,7 @@ package com.qmth.sop.business.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.result.ProjectMonitorCardResult;
 import com.qmth.sop.business.bean.result.ProjectMonitorResult;
 import com.qmth.sop.business.entity.TBSopInfo;
 import com.qmth.sop.common.enums.CrmProcessEnum;
@@ -15,4 +16,6 @@ import com.qmth.sop.common.enums.CrmProcessEnum;
 public interface ProjectMonitorService extends IService<TBSopInfo> {
 
     IPage<ProjectMonitorResult> pageProjectMonitor(Page<ProjectMonitorResult> page, Long serviceUnitId, Long customerId, CrmProcessEnum process);
+
+    ProjectMonitorCardResult getUserCard(Long userId);
 }

+ 47 - 8
sop-business/src/main/java/com/qmth/sop/business/service/impl/ProjectMonitorServiceImpl.java

@@ -1,38 +1,46 @@
 package com.qmth.sop.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.UserArchivesAllocationDto;
+import com.qmth.sop.business.bean.result.ProjectMonitorCardResult;
 import com.qmth.sop.business.bean.result.ProjectMonitorResult;
 import com.qmth.sop.business.bean.result.ProjectMonitorUserResult;
+import com.qmth.sop.business.bean.result.UserArchivesProjectExperienceResult;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBSopInfo;
+import com.qmth.sop.business.entity.TBUserArchives;
 import com.qmth.sop.business.mapper.TBSopInfoMapper;
-import com.qmth.sop.business.service.ProjectMonitorService;
-import com.qmth.sop.business.service.SysUserService;
-import com.qmth.sop.business.service.TBUserArchivesAllocationService;
+import com.qmth.sop.business.service.*;
 import com.qmth.sop.common.enums.CrmProcessEnum;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.SopRoleTypeEnum;
 import com.qmth.sop.common.util.ServletUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
 public class ProjectMonitorServiceImpl extends ServiceImpl<TBSopInfoMapper, TBSopInfo> implements ProjectMonitorService {
 
     @Resource
-    private SysUserService sysUserService;
+    SysUserService sysUserService;
 
     @Resource
-    private TBUserArchivesAllocationService tbUserArchivesAllocationService;
+    TBUserArchivesAllocationService tbUserArchivesAllocationService;
+
+    @Resource
+    TBUserArchivesService tbUserArchivesService;
+
+    @Resource
+    private BasicAttachmentService basicAttachmentService;
 
     @Override
     public IPage<ProjectMonitorResult> pageProjectMonitor(Page<ProjectMonitorResult> page, Long serviceUnitId, Long customerId, CrmProcessEnum process) {
@@ -60,6 +68,37 @@ public class ProjectMonitorServiceImpl extends ServiceImpl<TBSopInfoMapper, TBSo
         return pageProjectMonitor;
     }
 
+    @Override
+    public ProjectMonitorCardResult getUserCard(Long userId) {
+        TBUserArchives userArchives = tbUserArchivesService.getById(userId);
+        if (Objects.isNull(userArchives)) {
+            throw ExceptionResultEnum.ERROR.exception("人员不存在");
+        }
+
+        ProjectMonitorCardResult userCard = new ProjectMonitorCardResult();
+        userCard.setName(userArchives.getName());
+        userCard.setCode(userArchives.getCode());
+        userCard.setMobileNumber(userArchives.getMobileNumber());
+        try {
+            if (StringUtils.isNotBlank(userArchives.getBasePhotoPath())) {
+                userCard.setPhotoPath(basicAttachmentService.filePreviewPath(userArchives.getBasePhotoPath()));
+            }
+        } catch (Exception e) {
+            log.error("[项目监控-工作证]照片预览出错:" + e.getMessage());
+            userCard.setPhotoPath(null);
+        }
+        //项目经验
+        if (StringUtils.isNotBlank(userArchives.getProjectExperience())) {
+            List<UserArchivesProjectExperienceResult> resultList = JSONObject.parseArray(userArchives.getProjectExperience(),
+                    UserArchivesProjectExperienceResult.class);
+            List<UserArchivesProjectExperienceResult> sortedExperienceList = resultList.stream()
+                    .sorted(Comparator.comparingInt(UserArchivesProjectExperienceResult::getOrder)).collect(Collectors.toList());
+            userCard.setProjectExperience(sortedExperienceList);
+        }
+        return userCard;
+    }
+
+
     private List<ProjectMonitorUserResult> filterUserArchivesAllocation(List<UserArchivesAllocationDto> allocationDtoList, SopRoleTypeEnum roleType) {
         List<ProjectMonitorUserResult> monitorResultList = new ArrayList<>();
         List<UserArchivesAllocationDto> filterUserList = allocationDtoList.stream().filter(user -> user.getSopRoleType().equals(roleType)).collect(

+ 17 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java

@@ -1,5 +1,6 @@
 package com.qmth.sop.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -14,7 +15,9 @@ import com.qmth.sop.business.mapper.TBUserArchivesMapper;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.*;
+import com.qmth.sop.common.util.GsonUtil;
 import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -124,6 +127,15 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
                         .collect(Collectors.joining(";"));
                 record.setOccupiedInfo(occupiedInfo);
             }
+
+            //项目经验,按照order排序
+            if(StringUtils.isNotBlank(record.getProjectExperience())) {
+                List<UserArchivesProjectExperienceResult> experienceList = JSONObject.parseArray(record.getProjectExperience(),
+                        UserArchivesProjectExperienceResult.class);
+                List<UserArchivesProjectExperienceResult> experienceOrderList = experienceList.stream()
+                        .sorted(Comparator.comparingInt(UserArchivesProjectExperienceResult::getOrder)).collect(Collectors.toList());
+                record.setProjectExperienceList(experienceOrderList);
+            }
         }
         return page;
     }
@@ -202,6 +214,8 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         Double authenticationScore = userArchivesParam.getAuthenticationScore();
         Long authenticationValidTime = userArchivesParam.getAuthenticationValidTime();
         String remark = userArchivesParam.getRemark();
+        //项目经验
+        List<UserArchivesProjectExperienceResult> projectExperienceList = userArchivesParam.getProjectExperienceList();
 
         TBUserArchives tbUserArchives = new TBUserArchives();
         tbUserArchives.setName(name);
@@ -217,6 +231,9 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         tbUserArchives.setEmail(email);
         tbUserArchives.setEnable(true);
         tbUserArchives.setBasePhotoPath(basePhotoPath);
+        if(projectExperienceList != null && !projectExperienceList.isEmpty()) {
+            tbUserArchives.setProjectExperience(GsonUtil.toJson(projectExperienceList));
+        }
         // 档案表编辑
         Long userId = null;
         if (id == null || id == 0) {

+ 2 - 1
sop-business/src/main/resources/mapper/TBUserArchivesMapper.xml

@@ -23,7 +23,8 @@
             tbuas.authentication_score AS authenticationScore,
             tbuas.authentication_valid_time AS authenticationValidTime,
             tbuas.remark,
-            su.id AS userId
+            su.id AS userId,
+            tbua.project_experience projectExperience
         FROM
             t_b_user_archives tbua
                 LEFT JOIN