Bläddra i källkod

后管首页优化

liuyc 1 år sedan
förälder
incheckning
b12802607a

+ 7 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClient.java

@@ -20,6 +20,7 @@ public interface SaveUserInfoByProjectClient {
      */
     String SEARCH_USER_INFO_AND_PROJECT = "/api/manager/searchUserInfoAndProject";
     String SEARCH_USER_INFO_AND_PROJECT2 = "/api/manager/searchUserInfoAndProject2";
+    String SEARCH_USER_INFO_AND_PROJECT_BY_USER_IDS = "/api/manager/searchUserInfoAndProjectByUserIds";
     String QUERY_USER_CONTRACT_ROLE = "/api/manager/queryUserContractRole";
     String SAVE_INFO_RELATION = "/api/manager/saveInfoRelation";
 
@@ -38,6 +39,12 @@ public interface SaveUserInfoByProjectClient {
     @GetMapping(SEARCH_USER_INFO_AND_PROJECT2)
     List<SaveUserInfoByProjectDTO> searchUserInfoAndProject2(@RequestParam("userId") String userId);
 
+    /**
+     * 获取用户引用项目合同角色信息
+     */
+    @PostMapping(SEARCH_USER_INFO_AND_PROJECT_BY_USER_IDS)
+    List<SaveUserInfoByProjectDTO> searchUserInfoAndProjectByUserIds(@RequestBody List<Long> userIds);
+
     /**
      * 保存用户项目角色关联信息
      */

+ 1 - 1
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -171,7 +171,7 @@ public interface IUserClient {
     @GetMapping(USER_INFO_ALL)
     List<User> selectUserAll();
 
-    @GetMapping(USER_LIST_INFO_BY_IDS)
+    @PostMapping(USER_LIST_INFO_BY_IDS)
     List<User> userInfoByIds(@RequestBody List<Long> userIds);
 
     @PostMapping(SAVE_USER_DTO)

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionFlowMapper.java

@@ -48,4 +48,6 @@ public interface UserOpinionFlowMapper extends BaseMapper<UserOpinionFlow> {
      */
     List<UserOpinionFlowVO> selectUserOpinionFlowPage(IPage page, UserOpinionFlowVO userOpinionFlow);
 
+    List<UserOpinionFlow> queryUserOpinionFlowsByConcatenatedIds(List<String> list);
+
 }

+ 26 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionFlowMapper.xml

@@ -123,7 +123,8 @@
                manage_time,
                reply_name,
                reply_content,
-               is_current
+               is_current,
+               number
         from u_user_opinion_flow
         where is_deleted = 0
           and user_opinion_id = #{key}
@@ -145,4 +146,28 @@
         select * from u_user_opinion_flow where is_deleted = 0
     </select>
 
+    <select id="queryUserOpinionFlowsByConcatenatedIds" resultMap="userOpinionFlowResultMap">
+        SELECT  id,
+                user_opinion_id,
+                evaluation,
+                manage_user,
+                manage_user_name,
+                manage_user_phone,
+                sort,
+                manage_time,
+                reply_name,
+                reply_content,
+                is_current,
+                number
+        FROM u_user_opinion_flow
+        WHERE is_deleted = 0
+        AND (
+                <foreach collection="list" item="item" separator=" OR " open="" close="">
+                    CONCAT(user_opinion_id, '___', number) = #{item}
+                </foreach>
+             )
+        ORDER BY sort ASC
+    </select>
+
+
 </mapper>

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionFlowService.java

@@ -53,4 +53,6 @@ public interface IUserOpinionFlowService extends BaseService<UserOpinionFlow> {
 
     Integer selectIsSolveByUserOpinionKey(Long userOpinionKey);
 
+    List<UserOpinionFlowVO> queryUserOpinionFlowsByConcatenatedIds(List<String> concatenatedList);
+
 }

+ 11 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionFlowServiceImpl.java

@@ -69,4 +69,15 @@ public class UserOpinionFlowServiceImpl extends BaseServiceImpl<UserOpinionFlowM
         return this.baseMapper.selectIsSolveByUserOpinionKey(userOpinionKey);
     }
 
+    @Override
+    public List<UserOpinionFlowVO> queryUserOpinionFlowsByConcatenatedIds(List<String> concatenatedList) {
+        List<UserOpinionFlow> result = this.baseMapper.queryUserOpinionFlowsByConcatenatedIds(concatenatedList);
+        List<UserOpinionFlowVO> resultVo = JSONArray.parseArray(JSONObject.toJSONString(result), UserOpinionFlowVO.class);
+        resultVo.forEach(vo -> {
+            vo.setCurrent(new Integer("1").equals(vo.getIsCurrent()));
+            vo.setCurrentBol(new Integer("2").equals(vo.getIsCurrent()));
+        });
+        return resultVo;
+    }
+
 }

+ 53 - 6
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java

@@ -1,6 +1,7 @@
 package org.springblade.business.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -23,13 +24,17 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.feign.SaveUserInfoByProjectClient;
+import org.springblade.system.entity.Role;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -56,6 +61,8 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
 
     private final SaveUserInfoByProjectClient saveUserInfoByProjectClient;
 
+    private final JdbcTemplate jdbcTemplate;
+
     @Override
     public Integer getOpinionNumber(String userId) {
         return this.baseMapper.getOpinionNumber(userId);
@@ -85,6 +92,34 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
             List<Long> userOpinionKeys = finalResult.stream().map(BusinessUserOpinionVO::getUserOpinionId).distinct().collect(Collectors.toList());
             List<UserOpinionFile> allFile = this.userOpinionFileService.selectUserOpinionFileByUserOpinionKeys(userOpinionKeys);
 
+            /*所有工单最新状态userOpinionFlowGroupMap*/
+            List<String> concatenatedList = finalResult.stream()
+                    .filter(obj -> ObjectUtil.isNotEmpty(obj.getUserOpinionId()) && ObjectUtil.isNotEmpty(obj.getNewNumber()))
+                    .map(obj -> obj.getUserOpinionId() + "___" + obj.getNewNumber())
+                    .map(String::valueOf)
+                    .collect(Collectors.toList());
+            List<UserOpinionFlowVO> UserOpinionFlowVOList = this.userOpinionFlowService.queryUserOpinionFlowsByConcatenatedIds(concatenatedList);
+            Map<String, List<UserOpinionFlowVO>> userOpinionFlowGroupMap = UserOpinionFlowVOList.stream()
+                    .filter(vo -> Objects.nonNull(vo.getUserOpinionId()) && Objects.nonNull(vo.getNumber()))
+                    .collect(Collectors.groupingBy(
+                            vo -> vo.getUserOpinionId() + vo.getNumber() + ""
+                    ));
+
+            /*获取所有提交人userOpinionMap*/
+            List<UserOpinion> userOpinionList = this.getBaseMapper().selectBatchIds(userOpinionKeys);
+            Map<Long, UserOpinion> userOpinionMap = userOpinionList.stream().collect(Collectors.toMap(UserOpinion::getId, Function.identity()));
+
+            /*获取创建人信息userMap*/
+            List<Long> createUserIds = userOpinionList.stream().map(UserOpinion::getCreateUser).collect(Collectors.toList());
+            List<User> userList = this.userClient.userInfoByIds(createUserIds);
+            Map<Long, User> userMap = userList.stream().distinct().collect(Collectors.toMap(User::getId, Function.identity()));
+
+            /*获取用户与项目关系信息saveUserInfoByProjectGroupMap*/
+            Map<String, List<SaveUserInfoByProjectDTO>> saveUserInfoByProjectGroupMap = this.saveUserInfoByProjectClient.searchUserInfoAndProjectByUserIds(createUserIds).stream().collect(Collectors.groupingBy(SaveUserInfoByProjectDTO::getUserId));
+
+            /*获取角色信息roleMap*/
+            Map<Long, Role> roleMap = jdbcTemplate.query("SELECT id,role_name FROM blade_role WHERE is_deleted = 0", new BeanPropertyRowMapper<>(Role.class)).stream().collect(Collectors.toMap(Role::getId, Function.identity()));
+
             //设置附件信息
             finalResult.forEach(vo -> {
                 List<String> imageUrls = new ArrayList<>();
@@ -103,7 +138,8 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
                 vo.setImageUrl(imageUrls);
 
                 //获取当前工单最新状态
-                List<UserOpinionFlowVO> newFlow = this.userOpinionFlowService.queryCurrentUserOpinionFlowByUserOpinionId(String.valueOf(vo.getUserOpinionId()), vo.getNewNumber());
+                /*List<UserOpinionFlowVO> newFlow = this.userOpinionFlowService.queryCurrentUserOpinionFlowByUserOpinionId(String.valueOf(vo.getUserOpinionId()), vo.getNewNumber());*/
+                List<UserOpinionFlowVO> newFlow = userOpinionFlowGroupMap.getOrDefault(vo.getUserOpinionId() + vo.getNewNumber() + "", null);
                 if (newFlow != null && newFlow.size() > 0) {
                     //获取退后阶段
                     UserOpinionFlowVO flow = newFlow.get(3);
@@ -156,13 +192,16 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
                 }
 
                 //获取提交人
-                UserOpinion opinion = this.getById(vo.getUserOpinionId());
+                //UserOpinion opinion = this.getById(vo.getUserOpinionId());
+                UserOpinion opinion = userOpinionMap.getOrDefault(vo.getUserOpinionId(), null);
                 if (opinion != null) {
                     vo.setSubmitUserName(opinion.getCreateUserName());
-                    User user = this.userClient.userInfoById(opinion.getCreateUser()).getData();
+                    //User user = this.userClient.userInfoById(opinion.getCreateUser()).getData();
+                    User user = userMap.getOrDefault(opinion.getCreateUser(), null);
                     if (user != null) {
                         vo.setSubmitPhone(user.getPhone());
-                        List<SaveUserInfoByProjectDTO> userRoleList = this.saveUserInfoByProjectClient.searchUserInfoAndProject2(opinion.getCreateUser().toString());
+                        //List<SaveUserInfoByProjectDTO> userRoleList = this.saveUserInfoByProjectClient.searchUserInfoAndProject2(opinion.getCreateUser().toString());
+                        List<SaveUserInfoByProjectDTO> userRoleList = saveUserInfoByProjectGroupMap.getOrDefault(opinion.getCreateUser().toString(), null);
                         //用户角色
                         String roleIds = user.getRoleId();
                         if (userRoleList != null && userRoleList.size() > 0) {
@@ -172,8 +211,16 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
                                 roleIds = userRoleList.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.joining(","));
                             }
                         }
-                        List<String> roleNames = this.sysClient.getRoleNames(roleIds).getData();
-                        if (roleNames != null && roleNames.size() > 0) {
+
+                        List<String> roleNames = new ArrayList<>();
+                        for (String roleId : roleIds.split(",")) {
+                            Role role = roleMap.getOrDefault(Long.parseLong(roleId), null);
+                            if (role != null) {
+                                roleNames.add(role.getRoleName());
+                            }
+                        }
+                        //List<String> roleNames = this.sysClient.getRoleNames(roleIds).getData();
+                        if (/*roleNames != null &&*/ roleNames.size() > 0) {
                             vo.setSubmitUserRole(String.join(",", roleNames));
                         }
                     }

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/SaveUserInfoByProjectClientImpl.java

@@ -45,6 +45,14 @@ public class SaveUserInfoByProjectClientImpl implements SaveUserInfoByProjectCli
         );
     }
 
+    @Override
+    public List<SaveUserInfoByProjectDTO> searchUserInfoAndProjectByUserIds(List<Long> userIds) {
+        return saveUserInfoByProjectService.list(
+                Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
+                        .in(SaveUserInfoByProjectDTO::getUserId, userIds)
+        );
+    }
+
     @Override
     public void saveInfoRelation(Long userId, Long projectId, Long contractId, Long roleId) {
         SaveUserInfoByProjectDTO obj = new SaveUserInfoByProjectDTO();

+ 20 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.xml

@@ -56,7 +56,7 @@
     </resultMap>
 
     <select id="queryProjectUserAmount" resultMap="projectUserAmount">
-        select mpi.project_alias,
+        /*select mpi.project_alias,
                (select COUNT(DISTINCT user_id) end
         from m_project_assignment_user
         where is_deleted = 0
@@ -87,7 +87,25 @@
            or parent_id =
             '1537246243393589249'))) as owner
         from
-            m_project_info as mpi
+            m_project_info as mpi*/
+
+        SELECT
+            mpi.project_alias,
+            mpi.create_time,
+            COUNT(DISTINCT CASE WHEN m.role_id = '1537247986361782274' OR r1.parent_id = '1537247986361782274' THEN m.user_id END) AS contractor,
+            COUNT(DISTINCT CASE WHEN m.role_id = '1537246384519335938' OR r2.parent_id = '1537246384519335938' THEN m.user_id END) AS supervision,
+            COUNT(DISTINCT CASE WHEN m.role_id = '1537246243393589249' OR r3.parent_id = '1537246243393589249' THEN m.user_id END) AS owner
+        FROM
+            m_project_info AS mpi
+                LEFT JOIN m_project_assignment_user AS m ON mpi.id = m.project_id AND m.is_deleted = 0
+                LEFT JOIN blade_role AS r1 ON m.role_id = r1.id AND r1.is_deleted = 0
+                LEFT JOIN blade_role AS r2 ON m.role_id = r2.id AND r2.is_deleted = 0
+                LEFT JOIN blade_role AS r3 ON m.role_id = r3.id AND r3.is_deleted = 0
+        GROUP BY
+            mpi.project_alias
+        ORDER BY
+            mpi.create_time;
+
     </select>
 
     <select id="singPfxManagementPage" resultMap="singPfxManagementResultMap">

+ 34 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectInfoServiceImpl.java

@@ -1,6 +1,9 @@
 package org.springblade.manager.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.Data;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.vo.*;
 import org.springblade.manager.entity.ProjectInfo;
@@ -9,11 +12,16 @@ import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.IProjectInfoService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, ProjectInfo> implements IProjectInfoService {
@@ -28,6 +36,9 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
     @Resource
     private SignPfxFileMapper signPfxFileMapper;
 
+    @Resource
+    private JdbcTemplate jdbcTemplate;
+
     public List<ProjectUserAmountVO> queryProjectUserAmount() {
         return this.baseMapper.queryProjectUserAmount();
     }
@@ -37,16 +48,35 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
         long current = (vo.getCurrent() - 1L) * vo.getSize();
         List<SingPfxManagementVO> result = this.baseMapper.singPfxManagementPage(current, vo.getSize(), vo, alias);
 
+        Set<Long> projectIds = result.stream().map(SingPfxManagementVO::getProjectId).collect(Collectors.toSet());
+
+        /*获取个人签章Map*/
+        String sql_1 = "select pau.project_id from m_sign_pfx_file AS spf left join m_project_assignment_user AS pau on spf.certificate_user_id = pau.user_id where spf.is_deleted = 0 and pau.is_deleted = 0 and pau.project_id in(" + StringUtils.join(projectIds, ",") + ") and spf.certificate_type = 1";
+        List<QueryPersonalOrEnterpriseCountResultVO> projectSelfCountList = jdbcTemplate.query(sql_1, new BeanPropertyRowMapper<>(QueryPersonalOrEnterpriseCountResultVO.class));
+        Map<Long, Long> projectSelfCountMap = projectSelfCountList.stream().collect(Collectors.groupingBy(QueryPersonalOrEnterpriseCountResultVO::getProjectId, Collectors.counting()));
+
+        /*获取企业签章Map*/
+        String sql_2 = "select spd.project_id from m_sign_pfx_file AS spf LEFT JOIN m_sign_pfx_deputy AS spd ON spf.id = spd.sign_pfx_file_id where spf.is_deleted = 0 and spd.is_deleted = 0 and spd.project_id in(" + StringUtils.join(projectIds, ",") + ") and spf.certificate_type = 2";
+        List<QueryPersonalOrEnterpriseCountResultVO> projectFirmCountList = jdbcTemplate.query(sql_2, new BeanPropertyRowMapper<>(QueryPersonalOrEnterpriseCountResultVO.class));
+        Map<Long, Long> projectFirmCountMap = projectFirmCountList.stream().collect(Collectors.groupingBy(QueryPersonalOrEnterpriseCountResultVO::getProjectId, Collectors.counting()));
+
         result.forEach(vos -> {
             //查询个人签章
-            vos.setPersonalCount(this.signPfxFileMapper.queryPersonalOrEnterpriseCount(vos.getProjectId(), 1).toString());
+            //vos.setPersonalCount(this.signPfxFileMapper.queryPersonalOrEnterpriseCount(vos.getProjectId(), 1).toString());
+            vos.setPersonalCount(ObjectUtil.isNotEmpty(projectSelfCountMap.get(vos.getProjectId())) ? projectSelfCountMap.get(vos.getProjectId()).toString() : null);
             //查询企业章
-            vos.setEnterpriseCount(this.signPfxFileMapper.queryPersonalOrEnterpriseCount(vos.getProjectId(), 2).toString());
+            //vos.setEnterpriseCount(this.signPfxFileMapper.queryPersonalOrEnterpriseCount(vos.getProjectId(), 2).toString());
+            vos.setEnterpriseCount(ObjectUtil.isNotEmpty(projectFirmCountMap.get(vos.getProjectId())) ? projectFirmCountMap.get(vos.getProjectId()).toString() : null);
         });
 
         return result;
     }
 
+    @Data
+    private static class QueryPersonalOrEnterpriseCountResultVO {
+        private Long projectId;
+    }
+
     @Override
     public List<ProjectInfo> selectProjectList(List<String> projectIds) {
         return this.baseMapper.selectProjectList(projectIds);
@@ -90,7 +120,7 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
     }
 
     @Override
-    public Long getContractIdbyName(String projectName,String contractName) {
+    public Long getContractIdbyName(String projectName, String contractName) {
         Long contractId = null;
         List<ProjectInfo> projectInfos = baseMapper.selectList(Wrappers.<ProjectInfo>query().lambda()
                 .eq(ProjectInfo::getIsDeleted, 0)
@@ -110,7 +140,7 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
             return contractId;
         }
 
-        return  contractInfos.get(0).getId();
+        return contractInfos.get(0).getId();
 
     }