Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

liuyc před 1 rokem
rodič
revize
505ef5b1e8

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java

@@ -113,4 +113,7 @@ public class ContractFromVO {
 
     @ApiModelProperty(value = "最高支付比例金额")
     private BigDecimal upPayMoney;
+
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
 }

+ 52 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/FormNodeSortVO.java

@@ -0,0 +1,52 @@
+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 FormNodeSortVO implements INode<FormNodeSortVO> {
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 父节点ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    /**
+     * 子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private List<FormNodeSortVO> children;
+
+    /**
+     * 是否有子孙节点
+     */
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
+    private Boolean hasChildren;
+
+    @Override
+    public List<FormNodeSortVO> getChildren() {
+        if (this.children == null) {
+            this.children = new ArrayList<>();
+        }
+        return this.children;
+    }
+
+    private String formNumber;
+}

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java

@@ -79,4 +79,7 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "合同计量单元实际变更后施工图数量")
     private BigDecimal currentBuildChangeTotal;
 
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+
 }

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

@@ -19,11 +19,7 @@ package org.springblade.meter.mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.ContractInventoryForm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.springblade.meter.vo.ContractFromVO;
-import org.springblade.meter.vo.ContractInventoryFormVO;
-import org.springblade.meter.vo.ContractInventoryFormVO2;
-import org.springblade.meter.vo.FormTreeVO;
-import org.springblade.meter.vo.InventoryFormDetailVO;
+import org.springblade.meter.vo.*;
 
 import java.util.List;
 
@@ -71,4 +67,6 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
     List<ContractFromVO> getNodeResolveForm(@Param("contractId") Long contractId,@Param("meterId") Long meterId);
 
     List<String> getAllEqualsNumber(@Param("contractId") Long contractId,@Param("numbers") List<String> collect);
+
+    List<FormNodeSortVO> getAllForm(@Param("contractId") Long contractId);
 }

+ 7 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml

@@ -75,7 +75,7 @@
                         and (sci.id = scif.id or FIND_IN_SET(scif.id,ancestors) > 0)) as change_money
         from s_contract_inventory_form scif
         where is_deleted=0 and contract_id = #{contractId} and parent_id = #{id}
-        order by sort
+        order by -sort desc,create_time
     </select>
     <select id="getChildNode" resultType="org.springblade.meter.vo.ContractInventoryFormVO2">
         select *,
@@ -84,7 +84,7 @@
                 WHERE contract_id = #{contractId} and is_deleted=0 and parent_id = scif.id) as hasChild
         from s_contract_inventory_form scif
         where contract_id = #{contractId} and is_deleted = 0 and parent_id = #{parentId}
-        order by sort IS NOT NULL DESC,create_time
+        order by -sort desc,create_time
     </select>
 
     <select id="getContrFormAllByContrId" resultType="org.springblade.meter.vo.ContractFromVO">
@@ -167,5 +167,10 @@
             #{number}
         </foreach>
     </select>
+    <select id="getAllForm" resultType="org.springblade.meter.vo.FormNodeSortVO">
+        select id ,parent_id,form_number
+        from s_contract_inventory_form where contract_id = #{contractId} and is_deleted = 0
+        order by -sort desc,create_time
+    </select>
 
 </mapper>

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

@@ -59,4 +59,7 @@ public interface IContractInventoryFormService extends BaseService<ContractInven
 
     //获取节点下分解的清单
     List<ContractFromVO> getNodeResolveForm(Long contractId, Long id);
+
+    //清单公共方法,返回当前清单编号顺序集合
+    List<String> getAllFormNumberBySort(Long contractId);
 }

+ 38 - 9
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java

@@ -36,20 +36,13 @@ import org.springblade.meter.service.IContractInventoryFormService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.meter.utils.ForestNodeMerger;
-import org.springblade.meter.vo.ContractFromVO;
-import org.springblade.meter.vo.ContractInventoryFormVO;
-import org.springblade.meter.vo.ContractInventoryFormVO2;
-import org.springblade.meter.vo.FormTreeVO;
-import org.springblade.meter.vo.InventoryFormDetailVO;
+import org.springblade.meter.vo.*;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -616,12 +609,36 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
     @Override
     public List<ContractFromVO> getNodeResolveForm(Long contractId, Long id) {
         List<ContractFromVO> vos = baseMapper.getNodeResolveForm(contractId, id);
+        if (vos.size() > 1){
+            Map<String, ContractFromVO> map = vos.stream().collect(Collectors.toMap(ContractFromVO::getFormNumber, l -> l));
+            List<String> list = this.getAllFormNumberBySort(contractId);
+            for (String s : map.keySet()) {
+                ContractFromVO vo = map.get(s);
+                vo.setSort(list.indexOf(s));
+            }
+            vos = vos.stream().sorted(Comparator.comparingInt(ContractFromVO::getSort)).collect(Collectors.toList());
+        }
         for (ContractFromVO vo : vos) {
             vo.setResidueNum(vo.getChangeTotal().subtract(vo.getPoseNum()));
         }
         return vos;
     }
 
+    @Override
+    public List<String> getAllFormNumberBySort(Long contractId) {
+        List<FormNodeSortVO> vos = baseMapper.getAllForm(contractId);
+        Long l1 = System.currentTimeMillis();
+        List<FormNodeSortVO> list = ForestNodeMerger.merge(vos);
+        Long l2 = System.currentTimeMillis();
+        System.out.println(l2-l1);
+        List<String> forms = new ArrayList<>();
+        Long l3 = System.currentTimeMillis();
+        gatherSortNode(list,forms);
+        Long l4 = System.currentTimeMillis();
+        System.out.println(l4-l3);
+        return forms;
+    }
+
     /**
      * 判断当前清单是否已经分解或变更过,变更过返回true
      */
@@ -642,5 +659,17 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         return false;
     }
 
+    //递归方法
+    private void gatherSortNode(List<FormNodeSortVO> list, List<String> forms){
+        for (FormNodeSortVO vo : list) {
+            if (vo.getChildren().size() == 0 && StringUtils.isNotBlank(vo.getFormNumber())){
+                forms.add(vo.getFormNumber());
+                continue;
+            }else {
+                gatherSortNode(vo.getChildren(), forms);
+            }
+        }
+    }
+
 
 }

+ 15 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -76,6 +76,8 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     //合同计量期
     private final IContractMeterPeriodService contractMeterPeriodService;
 
+    private final IContractInventoryFormService inventoryFormService;
+
 
 
     /**
@@ -327,6 +329,10 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     @Override
     @Transactional
     public void update2(MiddleMeterApplyDTO dto) {
+        //先校验是否删除了所有清单
+        if (dto.getFormList().size() == 0){
+            throw new ServiceException("修改失败,不能删除所有计量清单");
+        }
         //删除附件
         attachmentFormService.deleteByMasterId(dto.getId());
         //先保存附件,因为要判断是否关联
@@ -699,6 +705,15 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         List<String> list = vos.stream().map(l -> l.getId()+"").collect(Collectors.toList());
         String join = String.join(",", list);
         voList = this.addResolveForm(apply.getContractId(), apply.getContractUnitId(), join);
+        if (voList.size() > 1){
+            Map<String, MeterInventoryVO> map = voList.stream().collect(Collectors.toMap(MeterInventoryVO::getFormNumber, l -> l));
+            List<String> list2 = inventoryFormService.getAllFormNumberBySort(apply.getContractId());
+            for (String s : map.keySet()) {
+                MeterInventoryVO vo = map.get(s);
+                vo.setSort(list2.indexOf(s));
+            }
+            voList = voList.stream().sorted(Comparator.comparingInt(MeterInventoryVO::getSort)).collect(Collectors.toList());
+        }
         return voList;
     }