Forráskód Böngészése

中间计量申请部位排序

qianxb 1 éve
szülő
commit
27f7b1f58d

+ 50 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/NodeSortVO.java

@@ -0,0 +1,50 @@
+package org.springblade.meter.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param   计量节点按最底层排序VO
+ * @Author wangwl
+ * @Date 2023/12/26 15:38
+ **/
+@Data
+public class NodeSortVO implements INode<NodeSortVO> {
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<NodeSortVO> children;
+
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    @Override
+    public List<NodeSortVO> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+}

+ 4 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -215,7 +215,10 @@ public class MiddleMeterApplyController extends BladeController {
 		return R.data(middleMeterApplyService.getCurrentMeterMoney(middleMeterApply));
 	}
 
-
+	@GetMapping("/test")
+	public R<String> test() {
+		return R.data(middleMeterApplyService.test());
+	}
 
 	
 }

+ 3 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java

@@ -23,10 +23,7 @@ import org.springblade.meter.entity.ChangeTokenMeter;
 import org.springblade.meter.entity.MeterTreeContract;
 import org.springblade.meter.entity.MiddleMeterApply;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.meter.vo.MeterInventoryDetailVO;
-import org.springblade.meter.vo.MeterInventoryVO;
-import org.springblade.meter.vo.MiddleMeterApplyVO;
-import org.springblade.meter.vo.ResolveInventoryVO;
+import org.springblade.meter.vo.*;
 
 import java.math.BigDecimal;
 import java.util.List;
@@ -70,6 +67,7 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     Integer getAllAPPly(@Param("contractId") Long contractId,@Param("contractPeriodId") Long contractPeriodId);
 
-    List<Long> getLowestNodeBySort(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
+    List<NodeSortVO> getLowestNodeBySort(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
 
+    List<NodeSortVO> getAllNode(@Param("contractId") Long contractId);
 }

+ 15 - 7
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -76,6 +76,7 @@
                     WHERE contract_id = #{apply.contractId} and is_deleted = 0
                     and (mtc.id = #{apply.contractUnitId} or FIND_IN_SET(#{apply.contractUnitId}, ancestor))
                   )
+            order by mma.create_time desc
     </select>
     <select id="page3" resultType="org.springblade.meter.vo.MiddleMeterApplyVO">
         SELECT *,
@@ -146,16 +147,23 @@
         from s_middle_meter_apply
         where contract_id = #{contractId} and contract_period_id = #{contractPeriodId}
     </select>
-    <select id="getLowestNodeBySort" resultType="java.lang.Long">
-        SELECT id
+
+    <select id="getAllNode" resultType="org.springblade.meter.vo.NodeSortVO">
+        select id,parent_id
+        from s_meter_tree_contract where contract_id = #{contractId} and is_deleted = 0
+        ORDER BY sort,create_time
+    </select>
+    <select id="getLowestNodeBySort" resultType="org.springblade.meter.vo.NodeSortVO">
+        SELECT id,parent_id
         FROM s_meter_tree_contract mtc
         WHERE is_deleted = 0 and contract_id = #{contractId}
-          and (select COUNT(1) from s_meter_tree_contract mtc2 WHERE contract_id = #{contractId} and mtc2.parent_id=mtc.id)=0
-          and id in (SELECT id FROM s_meter_tree_contract mtc
-                                   WHERE contract_id = #{contractId} and is_deleted = 0
-                                     and (mtc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, ancestor))
+          and id in (SELECT id FROM s_meter_tree_contract mtc2
+                     WHERE mtc2.contract_id = #{contractId} and mtc2.is_deleted = 0
+                       and (mtc2.id = #{nodeId} or FIND_IN_SET(#{nodeId}, mtc2.ancestor))
         )
-        ORDER by sort
+        ORDER BY mtc.sort,mtc.create_time
+
+
     </select>
 
 

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java

@@ -61,4 +61,7 @@ public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply>
     String getMeterNumber(MiddleMeterApply middleMeterApply);
 
     BigDecimal getCurrentMeterMoney(MiddleMeterApply middleMeterApply);
+
+    String test();
+
 }

+ 33 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -30,10 +30,8 @@ import org.springblade.meter.entity.*;
 import org.springblade.meter.mapper.MiddleMeterApplyMapper;
 import org.springblade.meter.service.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
-import org.springblade.meter.vo.MeterInventoryDetailVO;
-import org.springblade.meter.vo.MeterInventoryVO;
-import org.springblade.meter.vo.MiddleMeterApplyVO;
-import org.springblade.meter.vo.ResolveInventoryVO;
+import org.springblade.meter.utils.ForestNodeMerger;
+import org.springblade.meter.vo.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -307,7 +305,12 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         IPage<MiddleMeterApplyVO> iPage = new Page<>(query.getCurrent(),query.getSize());
         if (type == 1){
             //根据部位分页,先查出部位
-            List<Long> ids = baseMapper.getLowestNodeBySort(middleMeterApply.getContractId(),middleMeterApply.getContractUnitId());
+            List<NodeSortVO> vos = baseMapper.getLowestNodeBySort(middleMeterApply.getContractId(),middleMeterApply.getContractUnitId());
+            //转换为树
+            List<NodeSortVO> list = ForestNodeMerger.merge(vos);
+            //递归循环树,存在子节点就深入,不存在子节点就add后返回上一层
+            List<Long> ids = new ArrayList<>();
+            gatherSortNode(list,ids);
             if (ids.size() != 0){
                 iPage = baseMapper.page3(iPage,middleMeterApply,ids);
             }
@@ -423,4 +426,29 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     public BigDecimal getCurrentMeterMoney(MiddleMeterApply middleMeterApply) {
         return baseMapper.getCurrentMeterMoney(middleMeterApply.getContractId(),middleMeterApply.getContractPeriodId());
     }
+
+    @Override
+    public String test() {
+        Long contractId = 1579773037233184770L;
+        //获取当前合同下所以计量单元
+        List<NodeSortVO> vos = baseMapper.getAllNode(contractId);
+        //转换为树
+        List<NodeSortVO> list = ForestNodeMerger.merge(vos);
+        //递归循环树,存在子节点就深入,不存在子节点就add后返回上一层
+        List<Long> ids = new ArrayList<>();
+        gatherSortNode(list,ids);
+        return "";
+    }
+
+    //递归方法
+    private void gatherSortNode(List<NodeSortVO> list,List<Long> ids){
+        for (NodeSortVO vo : list) {
+            if (vo.getChildren().size() == 0){
+                ids.add(vo.getId());
+                continue;
+            }else {
+                gatherSortNode(vo.getChildren(), ids);
+            }
+        }
+    }
 }