home il y a 2 ans
Parent
commit
cba5d9040d

+ 10 - 0
bladex/blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserSearchClient.java

@@ -43,6 +43,7 @@ public interface IUserSearchClient {
     String LIST_BY_POST = API_PREFIX + "/user/list-by-post";
     String LIST_BY_ROLE = API_PREFIX + "/user/list-by-role";
     String MAP_BY_USER = API_PREFIX + "/user/map-by-role";
+    String GET_USER_NAME_AND_POST_BY_USER_ID = API_PREFIX + "/user/get-user-name-and-post-by-user-id";
 
     /**
      * 根据用户ID查询用户列表
@@ -89,4 +90,13 @@ public interface IUserSearchClient {
     @GetMapping(MAP_BY_USER)
     R<Map<Long, String>> mapByUser(@RequestParam("userIdList") List<Long> userIdList);
 
+    /**
+     * 通过用户id获取用户名称以及岗位名称
+     *
+     * @param userIdList 用户id
+     * @return MAP<用户id, 用户名称和岗位Map>
+     */
+    @GetMapping(GET_USER_NAME_AND_POST_BY_USER_ID)
+    R<Map<Long, Map<String, Object>>> getUserNameAndPostByUserId(@RequestParam("userIdList") List<Long> userIdList);
+
 }

+ 5 - 0
bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserSearchClient.java

@@ -69,4 +69,9 @@ public class UserSearchClient implements IUserSearchClient {
     public R<Map<Long, String>> mapByUser(List<Long> userIdList) {
         return R.data(service.mapByUser(userIdList));
     }
+
+    @Override
+    public R<Map<Long, Map<String, Object>>> getUserNameAndPostByUserId(List<Long> userIdList) {
+        return R.data(service.getUserNameAndPostByUserId(userIdList));
+    }
 }

+ 31 - 27
bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java

@@ -17,6 +17,7 @@
 package org.springblade.system.user.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
@@ -24,6 +25,7 @@ import org.springblade.system.user.entity.User;
 import org.springblade.system.user.excel.UserExcel;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * Mapper 接口
@@ -32,32 +34,34 @@ import java.util.List;
  */
 public interface UserMapper extends BaseMapper<User> {
 
-	/**
-	 * 自定义分页
-	 *
-	 * @param page
-	 * @param user
-	 * @param deptIdList
-	 * @param tenantId
-	 * @return
-	 */
-	List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
-
-	/**
-	 * 获取用户
-	 *
-	 * @param tenantId
-	 * @param account
-	 * @return
-	 */
-	User getUser(String tenantId, String account);
-
-	/**
-	 * 获取导出用户数据
-	 *
-	 * @param queryWrapper
-	 * @return
-	 */
-	List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
+    /**
+     * 自定义分页
+     *
+     * @param page
+     * @param user
+     * @param deptIdList
+     * @param tenantId
+     * @return
+     */
+    List<User> selectUserPage(IPage<User> page, @Param("user") User user, @Param("deptIdList") List<Long> deptIdList, @Param("tenantId") String tenantId);
+
+    /**
+     * 获取用户
+     *
+     * @param tenantId
+     * @param account
+     * @return
+     */
+    User getUser(String tenantId, String account);
+
+    /**
+     * 获取导出用户数据
+     *
+     * @param queryWrapper
+     * @return
+     */
+    List<UserExcel> exportUser(@Param("ew") Wrapper<User> queryWrapper);
+
+    List<Map<String, Object>> getUserNameAndPostByUserId(@Param("ew") QueryWrapper<Object> wrapper);
 
 }

+ 27 - 7
bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -62,16 +62,36 @@
     </select>
 
     <select id="getUser" resultMap="userResultMap">
-        SELECT
-            *
-        FROM
-            blade_user
-        WHERE
-            tenant_id = #{param1} and account = #{param2} and is_deleted = 0
+        SELECT *
+        FROM blade_user
+        WHERE tenant_id = #{param1}
+          and account = #{param2}
+          and is_deleted = 0
     </select>
 
     <select id="exportUser" resultType="org.springblade.system.user.excel.UserExcel">
-        SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM blade_user ${ew.customSqlSegment}
+        SELECT id,
+               tenant_id,
+               user_type,
+               account,
+               name,
+               real_name,
+               email,
+               phone,
+               birthday,
+               role_id,
+               dept_id,
+               post_id
+        FROM blade_user ${ew.customSqlSegment}
+    </select>
+
+    <select id="getUserNameAndPostByUserId" resultType="java.util.Map">
+        select bu.id                      userId,
+               bu.real_name               userName,
+               group_concat(bp.post_name) postName
+        from blade_user bu
+                 left join blade_post bp on bu.post_id like bp.id
+            ${ew.customSqlSegment}
     </select>
 
 </mapper>

+ 8 - 0
bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserSearchService.java

@@ -71,4 +71,12 @@ public interface IUserSearchService extends BaseService<User> {
      */
     Map<Long, String> mapByUser(List<Long> idList);
 
+    /**
+     * 通过用户id获取用户名称以及岗位名称
+     *
+     * @param userIdList 用户id
+     * @return MAP<用户id, 用户名称和岗位Map>
+     */
+    Map<Long, Map<String, Object>> getUserNameAndPostByUserId(List<Long> userIdList);
+
 }

+ 11 - 0
bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserSearchServiceImpl.java

@@ -77,4 +77,15 @@ public class UserSearchServiceImpl extends BaseServiceImpl<UserMapper, User> imp
         return list.stream().collect(Collectors.toMap(User::getId, User::getName));
     }
 
+    @Override
+    public Map<Long, Map<String, Object>> getUserNameAndPostByUserId(List<Long> userIdList) {
+        List<Map<String, Object>> list = baseMapper.getUserNameAndPostByUserId(
+                Wrappers.query().in("bu.id", userIdList).groupBy("bu.id"));
+
+        return list.stream().collect(Collectors.toMap(
+                item -> (Long) item.get("userId"),
+                item -> item
+        ));
+    }
+
 }

+ 17 - 0
hx-common/common-client-util/src/main/java/com/fjhx/utils/UserClientUtil.java

@@ -16,6 +16,11 @@ public class UserClientUtil {
      */
     private static IUserSearchClient userSearchClient = null;
 
+    /**
+     * 懒汉式单例
+     *
+     * @Remarks 直接注入似乎有的问题。。
+     */
     private synchronized static IUserSearchClient getUserSearchClient() {
         if (userSearchClient == null) {
             userSearchClient = SpringUtil.getBean(IUserSearchClient.class);
@@ -75,4 +80,16 @@ public class UserClientUtil {
         return getUserNameMap(userIdList);
     }
 
+
+    /**
+     * 通过用户id获取用户名称以及岗位名称
+     */
+    public static Map<Long, Map<String, Object>> getUserNameAndPostByUserId(List<Long> userIdList) {
+        R<Map<Long, Map<String, Object>>> r = getUserSearchClient().getUserNameAndPostByUserId(userIdList);
+        if (r.getCode() == ResultCode.SUCCESS.getCode()) {
+            return r.getData();
+        }
+        return new HashMap<>();
+    }
+
 }

+ 0 - 38
hx-common/library-storage/src/main/java/com/fjhx/constants/WarehouseTypeConstant.java

@@ -1,38 +0,0 @@
-package com.fjhx.constants;
-
-/**
- * 仓库类型
- */
-public interface WarehouseTypeConstant {
-
-    /**
-     * 普通仓库
-     */
-    Integer ORDINARY = 1;
-
-    /**
-     * 成品仓库
-     */
-    Integer FINISHED_PRODUCT = 2;
-
-    /**
-     * 原料仓库
-     */
-    Integer RAW_MATERIAL = 3;
-
-    /**
-     * 辅助料仓库
-     */
-    Integer ACCESSORIES = 4;
-
-    /**
-     * 配件仓库
-     */
-    Integer PARTS = 5;
-
-    /**
-     * 处置仓库
-     */
-    Integer MANAGEMENT = 6;
-
-}

+ 51 - 0
hx-common/library-storage/src/main/java/com/fjhx/enums/WarehouseTypeEnum.java

@@ -0,0 +1,51 @@
+package com.fjhx.enums;
+
+import lombok.Getter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 仓库类型
+ */
+@Getter
+public enum WarehouseTypeEnum {
+    ORDINARY(1, "普通仓库"),
+    FINISHED_PRODUCT(2, "成品仓库"),
+    RAW_MATERIAL(3, "原料仓库"),
+    AUXILIARY(4, "辅助料仓库"),
+    ACCESSORIES(5, "配件仓库"),
+    MANAGEMENT(6, "处置仓库");
+
+    WarehouseTypeEnum(Integer type, String name) {
+        this.type = type;
+        this.name = name;
+    }
+
+    private final Integer type;
+    private final String name;
+
+    private static final Map<Integer, String> map = new HashMap<>();
+
+    static {
+        for (WarehouseTypeEnum value : WarehouseTypeEnum.values()) {
+            map.put(value.type, value.name);
+        }
+    }
+
+    /**
+     * 根据type值获取name
+     */
+    public static String getName(Integer value) {
+        return map.get(value);
+    }
+
+    /**
+     * 获取键值对
+     */
+    public static Map<Integer, String> getMap() {
+        return map;
+    }
+
+
+}

+ 2 - 2
hx-common/library-storage/src/main/java/com/fjhx/service/impl/WarehouseServiceImpl.java

@@ -4,7 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.BaseEntity;
-import com.fjhx.constants.WarehouseTypeConstant;
+import com.fjhx.enums.WarehouseTypeEnum;
 import com.fjhx.entity.Warehouse;
 import com.fjhx.mapper.WarehouseMapper;
 import com.fjhx.service.WarehouseService;
@@ -43,7 +43,7 @@ public class WarehouseServiceImpl extends ServiceImpl<WarehouseMapper, Warehouse
         // 如果是添加,且未选仓库类型,默认赋值普通仓库
         Integer type = warehouse.getType();
         if (ObjectUtil.isAllEmpty(id, type)) {
-            warehouse.setType(WarehouseTypeConstant.ORDINARY);
+            warehouse.setType(WarehouseTypeEnum.ORDINARY.getType());
         }
 
         saveOrUpdate(warehouse);

+ 70 - 13
hx-common/service-flow/src/main/java/com/fjhx/service/example/impl/ExampleInfoServiceImpl.java

@@ -5,18 +5,21 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.BaseEntity;
 import com.fjhx.entity.example.ExampleDetails;
 import com.fjhx.entity.example.ExampleInfo;
+import com.fjhx.entity.process.ProcessNode;
+import com.fjhx.enums.ButtonNameEnum;
 import com.fjhx.mapper.example.ExampleInfoMapper;
 import com.fjhx.service.example.ExampleDetailsService;
 import com.fjhx.service.example.ExampleInfoService;
-import com.fjhx.service.process.ProcessInfoService;
-import com.fjhx.service.process.ProcessNodeButtonService;
-import com.fjhx.service.process.ProcessTenantService;
+import com.fjhx.service.process.ProcessNodeService;
 import com.fjhx.utils.Assert;
+import com.fjhx.utils.UserClientUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -30,13 +33,7 @@ import java.util.Map;
 public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, ExampleInfo> implements ExampleInfoService {
 
     @Autowired
-    private ProcessTenantService processTenantService;
-
-    @Autowired
-    private ProcessInfoService processInfoService;
-
-    @Autowired
-    private ProcessNodeButtonService processNodeButtonService;
+    private ProcessNodeService processNodeService;
 
     @Autowired
     private ExampleDetailsService exampleDetailsService;
@@ -48,20 +45,80 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
         ExampleInfo exampleInfo = getOne(ExampleInfo::getFlowLinkNo, flowLinkNo);
 
         // 查询已处理节点
-        List<Map<String, Object>> list = exampleDetailsService.listMaps(
+        List<Map<String, Object>> result = exampleDetailsService.listMaps(
                 Wrappers.<ExampleDetails>query()
                         .select("handle_user_id userId", // 处理人id
                                 "remarks", // 审批意见
+                                "name_type type", // 处理类型
                                 "process_node_id nodeId", // 节点id
-                                "name_type type" // 处理类型
+                                "create_"
                         )
                         .lambda()
                         .eq(ExampleDetails::getExampleInfoId, exampleInfo.getId())
                         .orderByAsc(BaseEntity::getId)
         );
 
-        // 查询为处理节点
+        // 查询用户名称与岗位
+        List<Long> userId = result.stream().map(item -> (Long) item.get("userId")).collect(Collectors.toList());
+        Map<Long, Map<String, Object>> userNameAndPost = UserClientUtil.getUserNameAndPostByUserId(userId);
+
+
+        // 查询所有节点
+        List<ProcessNode> processNodeList = processNodeService.list(ProcessNode::getProcessTenantId, exampleInfo.getProcessTenantId());
+
+        // 根据节点id封装为map
+        Map<Long, ProcessNode> processNodeMap = processNodeList.stream().collect(Collectors.toMap(ProcessNode::getId, item -> item));
+        // 根据父节点id封装为map
+        Map<Long, List<ProcessNode>> parentProcessNodeMap = processNodeList.stream().collect(Collectors.groupingBy(ProcessNode::getParentId));
+
+        // 下一节点id
+        ProcessNode nextNode = null;
+
+        if (result.size() > 0) {
+
+            for (Map<String, Object> map : result) {
+
+                // 赋值节点名称
+                String nodeName = processNodeMap.get((Long) map.get("nodeId")).getName();
+                map.put("nodeName", nodeName);
+
+                // 处理类型名称
+                String typeName = ButtonNameEnum.get((Integer) map.get("type")).getName();
+                map.put("typeName", typeName);
+
+                // 赋值用户名称与岗位
+                Map<String, Object> userNameAndPostMap = userNameAndPost.get((Long) map.get("userId"));
+                if (userNameAndPostMap != null) {
+                    map.putAll(userNameAndPostMap);
+                }
+
+            }
+
+            Map<String, Object> map = result.get(result.size() - 1);
+            List<ProcessNode> processNodes = parentProcessNodeMap.get((Long) map.get("nodeId"));
+            if (processNodes != null && processNodes.size() == 1) {
+                nextNode = processNodes.get(0);
+            }
+
+        } else {
+            nextNode = processNodeList.get(0);
+        }
+
+        // 寻找之后未处理的节点
+        while (nextNode != null) {
+            HashMap<String, Object> map = new HashMap<>();
+            map.put("type", 0);
+            map.put("typeName", "未开始");
+            map.put("nodeName", nextNode.getName());
+            map.put("nodeId", nextNode.getId());
+            result.add(map);
+
+            List<ProcessNode> processNodes = parentProcessNodeMap.get(nextNode.getId());
+            if (processNodes != null && processNodes.size() == 1) {
+                nextNode = processNodes.get(0);
+            }
 
+        }
 
         return null;
     }

+ 3 - 0
hx-service-api/service-flow-api/src/main/java/com/fjhx/enums/ButtonNameEnum.java

@@ -21,6 +21,9 @@ public enum ButtonNameEnum {
     COMPLETE(6, "完成"),
     // 执行分支逻辑
     BRANCH(7, "分支"),
+
+    // 流程未开始
+    NotStarted(97, "未开始"),
     // 流程进行中
     HAVE_IN_HAND(98, "进行中"),
     // 结束流程