home 2 years ago
parent
commit
8b282f42e2

+ 22 - 0
hx-common/service-flow/src/main/java/com/fjhx/controller/example/ExampleInfoController.java

@@ -1,5 +1,6 @@
 package com.fjhx.controller.example;
 
+import cn.hutool.core.convert.Convert;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.entity.example.ExampleInfo;
 import com.fjhx.service.example.ExampleInfoService;
@@ -55,4 +56,25 @@ public class ExampleInfoController {
         return R.data(result);
     }
 
+    /**
+     * 已办
+     */
+    @PostMapping("/getDone")
+    public R getDone(Map<String, String> condition) {
+        Page<Map<String, Object>> result = exampleInfoService.getDone(condition);
+        return R.data(result);
+    }
+
+    /**
+     * 撤销
+     */
+    @PostMapping("/revoke")
+    public R revoke(Map<String, String> condition) {
+        Long exampleInfoId = Convert.toLong(condition.get("id"));
+
+        exampleInfoService.revoke(exampleInfoId);
+        return R.success();
+    }
+
+
 }

+ 1 - 1
hx-common/service-flow/src/main/java/com/fjhx/feign/FlowClient.java

@@ -185,7 +185,7 @@ public class FlowClient implements IFlowClient {
         // 赋值按钮处理方法
         exampleResult.setHandleType(jumpVo.getNameType());
 
-        // 不通过
+        // 驳回
         if (ButtonNameEnum.REJECT.getType().equals(jumpVo.getNameType())) {
             exampleInfo.setHandleResult(HandleResultEnum.FAIL.getType());
         }

+ 2 - 1
hx-common/service-flow/src/main/java/com/fjhx/mapper/example/ExampleInfoMapper.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.entity.example.ExampleInfo;
 import org.apache.ibatis.annotations.Param;
 
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -21,4 +20,6 @@ public interface ExampleInfoMapper extends BaseMapper<ExampleInfo> {
 
     Page<Map<String, Object>> getWaitingProcessingPage(@Param("page") Page<ExampleInfo> page, @Param("ew") QueryWrapper<Object> wrapper);
 
+    Page<Map<String, Object>> getDone(@Param("page") Page<ExampleInfo> page, @Param("userId") Long userId, @Param("ew") QueryWrapper<Object> wrapper);
+
 }

+ 25 - 0
hx-common/service-flow/src/main/java/com/fjhx/mapper/example/ExampleInfoMapper.xml

@@ -16,4 +16,29 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getDone" resultType="java.util.LinkedHashMap">
+        select ei.id,
+               ei.title,
+               ei.flow_link_no      flowLinkNo,
+               pi.flow_name         name,
+               ei.create_time       createTime,
+               ei.create_user       createUser,
+               ei.update_user       updateUser,
+               ei.process_node_id   processNodeId,
+               ei.process_node_code processNodeCode,
+               ei.handle_result     handleResult,
+               ei.complete,
+               pi.code
+        from example_info ei
+                 inner join
+             (
+                 select distinct ed.example_info_id
+                 from example_details ed
+                 where ed.create_user = #{userId}
+                   and ed.del_flag = 0
+             ) t on ei.id = t.example_info_id
+                 inner join process_info pi on pt.process_info_id = pi.id
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 4 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/example/ExampleInfoService.java

@@ -23,4 +23,8 @@ public interface ExampleInfoService extends BaseService<ExampleInfo> {
 
     List<Map<String, Object>> showFlow(String code);
 
+    Page<Map<String, Object>> getDone(Map<String, String> condition);
+
+    void revoke(Long exampleInfoId);
+
 }

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

@@ -1,5 +1,7 @@
 package com.fjhx.service.example.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -13,6 +15,7 @@ import com.fjhx.entity.process.ProcessNode;
 import com.fjhx.entity.process.ProcessNodeButton;
 import com.fjhx.entity.process.ProcessTenant;
 import com.fjhx.enums.ButtonNameEnum;
+import com.fjhx.enums.HandleResultEnum;
 import com.fjhx.enums.ProcessNodeHandleObjectTypeEnum;
 import com.fjhx.enums.ProcessNodeTypeEnum;
 import com.fjhx.mapper.example.ExampleInfoMapper;
@@ -26,6 +29,7 @@ import com.fjhx.utils.UserClientUtil;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -45,15 +49,18 @@ import java.util.stream.Collectors;
 @Service
 public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, ExampleInfo> implements ExampleInfoService {
 
+    @Lazy
     @Autowired
     private ProcessNodeService processNodeService;
 
     @Autowired
     private ExampleDetailsService exampleDetailsService;
 
+    @Lazy
     @Autowired
     private ProcessNodeButtonService processNodeButtonService;
 
+    @Lazy
     @Autowired
     private ProcessTenantService processTenantService;
 
@@ -115,16 +122,25 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
         // 查询已处理节点
         List<Map<String, Object>> result = exampleDetailsService.listMaps(
                 Wrappers.<ExampleDetails>query()
-                        .select("handle_user_id userId", // 处理人id
+                        .select("example_info_id exampleInfoId",
+                                "handle_user_id userId", // 处理人id
                                 "remarks", // 审批意见
                                 "name_type type", // 处理类型
                                 "process_node_id nodeId", // 节点id
-                                "create_time createTime" // 创建时间
+                                "create_time createTime", // 创建时间
+                                "create_user createUser" // 创建人
                         )
                         .lambda()
                         .eq(ExampleDetails::getExampleInfoId, exampleInfo.getId())
                         .orderByAsc(BaseEntity::getId));
 
+        // 如果最后一个节点处理人是自己,可以撤回
+        Map<String, Object> lastNode = result.get(result.size() - 1);
+        if (result.size() > 1 && Convert.toLong(lastNode.get("userId")).equals(AuthUtil.getUserId())) {
+            lastNode.put("withdrawProcessNodeId", result.get(result.size() - 2).get("nodeId").toString());
+            lastNode.put("withdrawExampleInfoId", lastNode.get("exampleInfoId").toString());
+        }
+
         // 查询用户名称与岗位
         List<Long> userId = result.stream().map(item -> (Long) item.get("userId")).collect(Collectors.toList());
         Map<Long, Map<String, Object>> userNameAndPost = UserClientUtil.getNameByUserId(userId);
@@ -160,6 +176,12 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
             return result;
         }
 
+        // 如果下一个节点是开始节点,发起人是自己,可以撤销
+        if (FlowConstant.START_CODE.equals(nextNode.getCode()) &&
+                AuthUtil.getUserId().equals(Convert.toLong(result.get(0).get("createUser")))) {
+            lastNode.put("revokeExampleInfoId", lastNode.get("exampleInfoId").toString());
+        }
+
         next(result, nextNode, parentProcessNodeMap);
 
         return result;
@@ -189,6 +211,86 @@ public class ExampleInfoServiceImpl extends ServiceImpl<ExampleInfoMapper, Examp
         return result;
     }
 
+    @Override
+    public Page<Map<String, Object>> getDone(Map<String, String> condition) {
+        String title = condition.get("title");
+        String processInfoId = condition.get("processInfoId");
+        String status = condition.get("status");
+
+        QueryWrapper<Object> wrapper = Wrappers.query();
+        wrapper.eq("ei.del_flag", 0)
+                .like(ObjectUtil.isNotEmpty(title), "ei.title", title)
+                .eq(ObjectUtil.isNotEmpty(processInfoId), "pi.id", processInfoId)
+                .eq(ObjectUtil.isNotEmpty(status), "ei.handle_result", status)
+                .orderByDesc("ei.id");
+
+        Long userId = AuthUtil.getUserId();
+        Page<Map<String, Object>> page = baseMapper.getDone(createPage(condition), userId, wrapper);
+
+        List<Map<String, Object>> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 创建人id集合
+        List<Long> userIdList = new ArrayList<>();
+        ArrayList<Long> processNodeIdList = new ArrayList<>();
+
+        for (Map<String, Object> record : records) {
+
+            Long createUserId = Convert.toLong(record.get("createUser"));
+            Integer complete = Convert.toInt(record.get("complete"));
+            String processNodeCode = Convert.toStr(record.get("processNodeCode"));
+            Integer handleResult = Convert.toInt(record.get("handleResult"));
+            Long processNodeId = Convert.toLong(record.get("processNodeId"));
+
+            // 添加userId
+            userIdList.add(createUserId);
+
+            // 赋值当前节点
+            if (StatusConstant.YES.equals(complete)) {
+                record.put("currentNode", "结束");
+            } else if (FlowConstant.START_CODE.equals(processNodeCode)) {
+                record.put("currentNode", "开始");
+            } else {
+                processNodeIdList.add(processNodeId);
+            }
+
+            // 赋值流程状态
+            record.put("flowStatus", HandleResultEnum.getName(handleResult));
+        }
+
+        Map<Long, String> userNameMap = UserClientUtil.getUserNameMap(userIdList);
+
+        Map<Long, String> processNodeNameMap = new HashMap<>();
+        if (processNodeIdList.size() > 0) {
+            processNodeNameMap = processNodeService.list(Wrappers.<ProcessNode>lambdaQuery()
+                            .select(ProcessNode::getId, ProcessNode::getName)
+                            .in(ProcessNode::getId, processNodeIdList))
+                    .stream()
+                    .collect(Collectors.toMap(
+                            ProcessNode::getId,
+                            ProcessNode::getName,
+                            (v1, v2) -> v1
+                    ));
+        }
+
+        for (Map<String, Object> record : records) {
+            // 赋值用户id
+            record.put("createUserName", userNameMap.get(Convert.toLong(record.get("createUser"))));
+            // 赋值当前节点
+            record.putIfAbsent("currentNode", processNodeNameMap.get(Convert.toLong(record.get("processNodeId"))));
+        }
+
+        return page;
+    }
+
+    @Override
+    public void revoke(Long exampleInfoId) {
+
+    }
+
 
     /**
      * 寻找未开始节点

+ 2 - 0
hx-common/service-flow/src/main/java/com/fjhx/service/process/impl/ProcessTenantServiceImpl.java

@@ -21,6 +21,7 @@ import com.fjhx.utils.WrapperUtil;
 import org.springblade.common.constant.CommonConstant;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -39,6 +40,7 @@ import java.util.Map;
 @Service
 public class ProcessTenantServiceImpl extends ServiceImpl<ProcessTenantMapper, ProcessTenant> implements ProcessTenantService {
 
+    @Lazy
     @Autowired
     private ProcessNodeButtonService processNodeButtonService;
 

+ 7 - 6
hx-service-api/service-flow-api/src/main/java/com/fjhx/enums/HandleResultEnum.java

@@ -6,14 +6,15 @@ import java.util.HashMap;
 
 @Getter
 public enum HandleResultEnum {
-    IN_PROGRESS(1, "进行中"),
-    SUCCESS(2, "通过"),
-    FAIL(3, "不通过");
+    IN_PROGRESS(1, "审批中"),
+    SUCCESS(2, "已通过"),
+    FAIL(3, "不通过"),
+    revoke(4, "已撤销");
 
     private final Integer type;
     private final String name;
 
-    private static final HashMap<Integer, ButtonNameEnum> map = new HashMap<>();
+    private static final HashMap<Integer, HandleResultEnum> map = new HashMap<>();
 
     HandleResultEnum(Integer type, String name) {
         this.type = type;
@@ -21,7 +22,7 @@ public enum HandleResultEnum {
     }
 
     static {
-        for (ButtonNameEnum value : ButtonNameEnum.values()) {
+        for (HandleResultEnum value : HandleResultEnum.values()) {
             map.put(value.getType(), value);
         }
     }
@@ -29,7 +30,7 @@ public enum HandleResultEnum {
     /**
      * 根据type获取枚举
      */
-    public static ButtonNameEnum get(Integer type) {
+    public static HandleResultEnum get(Integer type) {
         return map.get(type);
     }
 

+ 10 - 3
hx-service/storage/src/main/java/com/fjhx/material/controller/MaterialController.java

@@ -1,9 +1,9 @@
 package com.fjhx.material.controller;
 
 import com.fjhx.base.ListPageMap;
-import org.springblade.core.tool.api.R;
 import com.fjhx.entity.material.Material;
 import com.fjhx.material.service.MaterialService;
+import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -29,7 +29,7 @@ public class MaterialController {
      * 下拉物料
      */
     @PostMapping("/selectList")
-    public R selectList(@RequestBody Map<String, Object> condition){
+    public R selectList(@RequestBody Map<String, Object> condition) {
         ListPageMap.getListPageMap(condition);
         List<Material> list = materialService.selectList(condition);
         return R.success(list);
@@ -39,9 +39,16 @@ public class MaterialController {
      * 下拉物料
      */
     @GetMapping("/selectPurposeList")
-    public R selectPurposeList(@RequestParam(required = false) String purpose){
+    public R selectPurposeList(@RequestParam(required = false) String purpose) {
         List<Material> list = materialService.selectPurpose(purpose);
         return R.success(list);
     }
+
+    @PostMapping("getMaterialPrice")
+    public R getMaterialPrice(@RequestBody Map<String, String> condition) {
+        List<Map<String, Object>> result = materialService.getMaterialPrice(condition.get("materialCode"));
+        return R.success(result);
+    }
+
 }
 

+ 30 - 10
hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialMapper.xml

@@ -4,23 +4,43 @@
 
     <select id="selectMaList" resultType="com.fjhx.entity.material.Material">
         SELECT
-            t1.*
+        t1.*
         FROM
-            material t1
+        material t1
         LEFT JOIN (
-            SELECT
-                materialcode,
-                sum( swd.ChangeNum ) AS sum
-            FROM
-                stock_waterdetial swd
-            WHERE
-                swd.StockChangeType IN ( 20, 23 )
-            GROUP BY MaterialCode
+        SELECT
+        materialcode,
+        sum( swd.ChangeNum ) AS sum
+        FROM
+        stock_waterdetial swd
+        WHERE
+        swd.StockChangeType IN ( 20, 23 )
+        GROUP BY MaterialCode
         ) AS t2 ON t1.`Code` = t2.materialcode
         <include refid="list_condition"/>
         ORDER BY t2.sum DESC
         <include refid="com.fjhx.supplier.mapper.SupplierMapper.sql_limit"/>
     </select>
+
+    <select id="getMaterialPrice" resultType="java.util.Map">
+        SELECT s.`Name`      name,
+               s.ID          id,
+               sp.Price      price,
+               max(sp.Price) maxPrice,
+               min(sp.Price) minPrice
+        FROM supplier_price sp
+                 LEFT JOIN supplier s ON sp.FactoryId = s.ID
+        WHERE sp.IsDelete != 1
+          AND sp.FactoryId != ''
+          AND sp.FactoryId IS NOT NULL
+          AND sp.MaterialCode = #{materialCode}
+          AND s.`Name` IS NOT NULL
+        GROUP BY sp.FactoryId,
+                 sp.MaterialCode
+        ORDER BY sp.CreatedTime
+    </select>
+
+
     <sql id="list_condition">
         <where>
             t1.IsDelete = 0

+ 3 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/MaterialSMapper.java

@@ -3,6 +3,7 @@ package com.fjhx.material.mapper;
 import com.fjhx.entity.material.Material;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fjhx.entity.supplier.Supplier;
+import org.apache.ibatis.annotations.Param;
 import org.springblade.core.tenant.annotation.TenantIgnore;
 
 import java.util.List;
@@ -27,4 +28,6 @@ public interface MaterialSMapper extends BaseMapper<Material> {
     @TenantIgnore
     List<Material> selectMaList(Map<String, Object> condition);
 
+    List<Map<String, Object>> getMaterialPrice(@Param("materialCode") String materialCode);
+
 }

+ 5 - 0
hx-service/storage/src/main/java/com/fjhx/material/mapper/impl/MaterialServiceImpl.java

@@ -48,4 +48,9 @@ public class MaterialServiceImpl extends ServiceImpl<MaterialSMapper, Material>
         }
         return this.list(queryWrapper);
     }
+
+    @Override
+    public List<Map<String, Object>> getMaterialPrice(String materialCode) {
+        return baseMapper.getMaterialPrice(materialCode);
+    }
 }

+ 3 - 0
hx-service/storage/src/main/java/com/fjhx/material/service/MaterialService.java

@@ -30,4 +30,7 @@ public interface MaterialService extends BaseService<Material> {
      * @return
      */
     List<Material> selectPurpose(String purpose);
+
+    List<Map<String, Object>> getMaterialPrice(String materialCode);
+
 }