Parcourir la source

中间计量申请修改

qianxb il y a 1 an
Parent
commit
9caa99fb28
18 fichiers modifiés avec 185 ajouts et 71 suppressions
  1. 2 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractInventoryForm.java
  2. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractMaterial.java
  3. 26 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApply.java
  4. 13 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeNodeVO.java
  5. 5 5
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java
  6. 4 4
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ResolveInventoryVO.java
  7. 4 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ChangeTokenFormController.java
  8. 7 5
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java
  9. 4 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml
  10. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialMapper.xml
  11. 6 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java
  12. 17 7
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  13. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IChangeTokenFormService.java
  14. 2 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java
  15. 41 10
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  16. 9 9
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java
  17. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialServiceImpl.java
  18. 39 13
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

+ 2 - 2
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractInventoryForm.java

@@ -118,13 +118,13 @@ public class ContractInventoryForm extends BaseEntity {
      */
     @ApiModelProperty(value = "合同数量")
     @ExcelProperty("数量")
-    private Integer contractTotal;
+    private BigDecimal contractTotal;
     /**
      * 变更后数量
      */
     @ApiModelProperty(value = "变更后数量")
     @ExcelIgnore
-    private Integer changeTotal;
+    private BigDecimal changeTotal;
     /**
      * 合同金额
      */

+ 1 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ContractMaterial.java

@@ -78,7 +78,7 @@ public class ContractMaterial extends BaseEntity {
      * 数量
      */
     @ApiModelProperty(value = "数量")
-    private Integer amount;
+    private BigDecimal amount;
 
 
 }

+ 26 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApply.java

@@ -16,10 +16,13 @@
  */
 package org.springblade.meter.entity;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
@@ -59,16 +62,36 @@ public class InventoryFormApply extends BaseEntity {
      */
     @ApiModelProperty(value = "中间计量申请id")
     private Long middleMeterId;
+
+    @ApiModelProperty(value = "合同计量单元id")
+    private Long contractMeterId;
     /**
      * 计量单编号
      */
     @ApiModelProperty(value = "计量单编号")
     private String meterNumber;
+
+    @ApiModelProperty(value = "清单编号")
+    private String formNumber;
+
+    @ApiModelProperty(value = "清单名称")
+    private String formName;
+
+    @ApiModelProperty(value = "当前单价")
+    private BigDecimal currentPrice;
+
+    @ApiModelProperty(value = "施工图数量")
+    private BigDecimal buildPictureTotal;
+    /**
+     * 变更后施工图数量
+     */
+    @ApiModelProperty(value = "变更后施工图数量")
+    private BigDecimal changeBuildPictureTotal;
     /**
      * 本期计量数量
      */
     @ApiModelProperty(value = "本期计量数量")
-    private Integer currentMeterTotal;
+    private BigDecimal currentMeterTotal;
     /**
      * 本期计量金额
      */
@@ -80,5 +103,7 @@ public class InventoryFormApply extends BaseEntity {
     @ApiModelProperty(value = "合同计量期id")
     private Long contractPeriodId;
 
+    @ApiModelProperty(value = "业务日期")
+    private LocalDate businessDate;
 
 }

+ 13 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeNodeVO.java

@@ -5,6 +5,7 @@ import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @Param   变更部位视图类-变更令用
@@ -38,4 +39,16 @@ public class ChangeNodeVO {
     @ApiModelProperty(value = "清单集合")
     private List<ChangeFormVO2> formList;
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        ChangeNodeVO that = (ChangeNodeVO) o;
+        return id.equals(that.id);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id);
+    }
 }

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

@@ -29,21 +29,21 @@ public class MeterInventoryVO {
     private BigDecimal currentPrice;
 
     @ApiModelProperty(value = "分解数量")
-    private Integer resolveTotal;
+    private BigDecimal resolveTotal;
 
     @ApiModelProperty(value = "变更后数量")
-    private Integer changeTotal;
+    private BigDecimal changeTotal;
 
     @ApiModelProperty(value = "本期计量数量")
-    private Integer currentMeterTotal;
+    private BigDecimal currentMeterTotal;
 
     @ApiModelProperty(value = "含变更数量")
-    private Integer containChangeTotal;
+    private BigDecimal containChangeTotal;
 
     @ApiModelProperty(value = "本期计量金额")
     private BigDecimal currentMeterMoney;
 
     @ApiModelProperty(value = "累计计量数量")
-    private Integer allMeterTotal;
+    private BigDecimal allMeterTotal;
 
 }

+ 4 - 4
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ResolveInventoryVO.java

@@ -26,15 +26,15 @@ public class ResolveInventoryVO {
     private BigDecimal currentPrice;
 
     @ApiModelProperty(value = "合同数量")
-    private Integer contractTotal;
+    private BigDecimal contractTotal;
 
     @ApiModelProperty(value = "合同变更数量")
-    private Integer ChangeTotal;
+    private BigDecimal ChangeTotal;
 
     @ApiModelProperty(value = "施工图变更后数量")
-    private Integer buildChangeTotal;
+    private BigDecimal buildChangeTotal;
 
     @ApiModelProperty(value = "分解剩余量")
-    private Integer resolveResidueTotal;
+    private BigDecimal resolveResidueTotal;
 
 }

+ 4 - 3
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ChangeTokenFormController.java

@@ -88,10 +88,11 @@ public class ChangeTokenFormController extends BladeController {
 	@ApiOperation(value = "新增-获取变更申请部位", notes = "传入合同id和选中的节点id,返回变更申请部位集合")
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "ids", value = "选中的清单id,逗号拼接", required = true)
+			@ApiImplicitParam(name = "ids", value = "选中的节点id,逗号拼接", required = true),
+			@ApiImplicitParam(name = "changeIds", value = "已经存在的节点id,逗号拼接", required = true)
 	})
-	public R<List<ChangeNodeVO>> getChangeNode(Long contractId,String ids) {
-		List<ChangeNodeVO> vos = changeTokenFormService.getChangeNode(contractId,ids);
+	public R<List<ChangeNodeVO>> getChangeNode(Long contractId,String ids,String changeIds) {
+		List<ChangeNodeVO> vos = changeTokenFormService.getChangeNode(contractId,ids,changeIds);
 		return R.data(vos);
 	}
 

+ 7 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -63,10 +63,11 @@ public class MiddleMeterApplyController extends BladeController {
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
 			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
-			@ApiImplicitParam(name = "ids", value = "已经存在的清单id,逗号分隔", required = true)
+			@ApiImplicitParam(name = "ids", value = "已经存在的清单id,逗号分隔", required = true),
+			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
 	})
-	public R<List<ResolveInventoryVO>> addFormList(Long contractId , Long nodeId ,String ids) {
-		List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(contractId,nodeId,ids);
+	public R<List<ResolveInventoryVO>> addFormList(Long contractId ,Long contractPeriodId, Long nodeId ,String ids) {
+		List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(contractId,contractPeriodId,nodeId,ids);
 		return R.data(vos);
 	}
 
@@ -78,10 +79,11 @@ public class MiddleMeterApplyController extends BladeController {
 	@ApiOperation(value = "添加分解清单", notes = "传入选中的行的id,逗号分隔.返回计量清单列表")
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
 			@ApiImplicitParam(name = "ids", value = "传入选中的行的id,逗号分隔", required = true)
 	})
-	public R<List<MeterInventoryVO>> addResolveForm(Long contractId ,String ids) {
-		List<MeterInventoryVO> vos = middleMeterApplyService.addResolveForm(contractId,ids);
+	public R<List<MeterInventoryVO>> addResolveForm(Long contractId ,Long nodeId ,String ids) {
+		List<MeterInventoryVO> vos = middleMeterApplyService.addResolveForm(contractId,nodeId,ids);
 		return R.data(vos);
 	}
 

+ 4 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml

@@ -132,10 +132,10 @@
         where id = #{id}
     </select>
     <select id="getNodeList" resultType="org.springblade.meter.vo.ChangeNodeVO">
-        select mtc.id,mtc.node_name,mtc.change_money,
-               if(mtc.is_supplement = 1,'是','否') as isSupplementName,
-               ctm.contract_picture
-        from s_change_token_meter ctm left join s_meter_tree_contract mtc on ctm.contract_meter_id = mtc.id
+        select ctm.contract_meter_id as id,ctm.node_name,ctm.node_url,
+               if(ctm.is_supplement = 1,'是','否') as isSupplementName,
+               ctm.contract_picture,ctm.change_money
+        from s_change_token_meter ctm
         where ctm.contract_id = #{contractId} and ctm.is_deleted = 0
           AND ctm.change_token_id = #{id}
     </select>

+ 3 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractMaterialMapper.xml

@@ -22,7 +22,9 @@
         <result column="amount" property="amount"/>
     </resultMap>
     <select id="getALLMaterial" resultType="org.springblade.meter.vo.ContractMaterialVO">
-        select *,concat(material_name, '[',material_number,']') as nodeName,false as hasChild
+        select *,false as hasChild,
+            (case when material_number is null then material_name when material_number = '' then material_name
+                ELSE concat(material_name, '[',material_number,']') end) as nodeName
         from s_contract_material where is_deleted = 0 and contract_id = #{contractId}
     </select>
 

+ 6 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java

@@ -41,7 +41,7 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     List<ResolveInventoryVO> getFormList(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId,@Param("ids") List<Long> ids);
 
-    List<MeterInventoryVO> getResolveFormInfo(@Param("contractId") Long contractId,@Param("ids") List<Long> longs);
+    List<MeterInventoryVO> getResolveFormInfo(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId,@Param("ids") List<Long> longs);
 
     ChangeTokenMeter getNodeToken(@Param("nodeId") Long nodeId);
 
@@ -53,9 +53,13 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     MiddleMeterApplyVO getById(@Param("id") Long id);
 
-    List<MeterInventoryVO> getForm(@Param("id") Long id,@Param("contractId") Long contractId);
+    List<MeterInventoryVO> getForm(@Param("id") Long id,@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
 
     ChangeTokenForm getTokenById(@Param("id") Long id);
 
     String getContractInfo(@Param("contractId") Long contractId);
+
+    Integer getNodeChild(@Param("contractId") Long contractId,@Param("nodeId") Long contractUnitId);
+
+    List<Long> getNodeOtherFormId(@Param("contractId") Long contractId,@Param("contractPeriodId") Long contractPeriodId,@Param("nodeId") Long nodeId);
 }

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

@@ -39,9 +39,11 @@
     </select>
     <select id="getResolveFormInfo" resultType="org.springblade.meter.vo.MeterInventoryVO">
         select id,form_number,form_name,current_price,change_total,
-               IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0) as resolveTotal,
+               IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0
+                            and contract_meter_id = #{nodeId} and contract_form_id = cif.id),0) as resolveTotal,
                0 as currentMeterTotal,0 as containChangeTotal,0 as currentMeterMoney,
-               (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0 and contract_form_id = cif.id),0)) as allMeterTotal
+               (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
+                            and contract_meter_id = #{nodeId} and contract_form_id = cif.id),0)) as allMeterTotal
         from s_contract_inventory_form  cif where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
         AND id in
         <foreach collection="ids" item="id" open="(" separator="," close=")">
@@ -70,7 +72,7 @@
         WHERE contract_id = #{apply.contractId} and is_deleted = 0 and contract_period_id = #{apply.contractPeriodId}
               and contract_unit_id in (SELECT id FROM s_meter_tree_contract mtc
                     WHERE contract_id = #{apply.contractId} and is_deleted = 0
-                    and (mtc.id = #{apply.contractUnitId} or FIND_IN_SET(mtc.id = #{apply.contractUnitId}, ancestor) > 0)
+                    and (mtc.id = #{apply.contractUnitId} or FIND_IN_SET(#{apply.contractUnitId}, ancestor))
                   )
     </select>
     <select id="meterPeriodAllForm" resultType="org.springblade.meter.vo.MeterInventoryDetailVO">
@@ -87,12 +89,13 @@
         from s_middle_meter_apply where id = #{id}
     </select>
     <select id="getForm" resultType="org.springblade.meter.vo.MeterInventoryVO">
-        select cif.id,cif.form_number,cif.form_name,cif.current_price,cif.change_total,
-        IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0) as resolveTotal,
+        select ifa.contract_form_id as id,ifa.form_number,ifa.form_name,ifa.current_price,ifa.build_picture_total as resolveTotal,
+               ifa.change_build_picture_total as changeTotal,
                ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
                ifa.current_meter_money as currentMeterMoney,
-        (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0 and contract_form_id = cif.id),0)) as allMeterTotal
-        from s_inventory_form_apply ifa left join s_contract_inventory_form cif on ifa.contract_form_id = cif.id
+               (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
+                      and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id),0)) as allMeterTotal
+        from s_inventory_form_apply ifa
         where ifa.contract_id = #{contractId} and ifa.is_deleted = 0
         AND ifa.middle_meter_id = #{id}
     </select>
@@ -103,6 +106,13 @@
     <select id="getContractInfo" resultType="java.lang.String">
         select contract_number from m_contract_info where id = #{contractId}
     </select>
+    <select id="getNodeChild" resultType="java.lang.Integer">
+        select count(1) from s_meter_tree_contract where contract_id = #{contractId} and parent_id = #{nodeId} and is_deleted = 0
+    </select>
+    <select id="getNodeOtherFormId" resultType="java.lang.Long">
+        select contract_form_id from s_inventory_form_apply
+        where contract_id = #{contractId} and is_deleted = 0 and contract_period_id = #{contractPeriodId} and contract_meter_id = #{nodeId}
+    </select>
 
 
 </mapper>

+ 1 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IChangeTokenFormService.java

@@ -57,7 +57,7 @@ public interface IChangeTokenFormService extends BaseService<ChangeTokenForm> {
 
     List<ChangeFormVO2> selectForm(Long contractId,Long nodeId,String ids);
 
-    List<ChangeNodeVO> getChangeNode(Long contractId,String ids);
+    List<ChangeNodeVO> getChangeNode(Long contractId,String ids,String changeIds);
 
     void update2(ChangeTokenFormDTO dto);
 

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

@@ -37,9 +37,9 @@ import java.util.List;
 public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply> {
 
 
-    List<ResolveInventoryVO> addFormList(Long contractId,Long nodeId , String ids);
+    List<ResolveInventoryVO> addFormList(Long contractId,Long contractPeriodId ,Long nodeId , String ids);
 
-    List<MeterInventoryVO> addResolveForm(Long contractId ,String ids);
+    List<MeterInventoryVO> addResolveForm(Long contractId ,Long nodeId ,String ids);
 
     void add(MiddleMeterApplyDTO dto);
 

+ 41 - 10
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java

@@ -127,6 +127,11 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         List<ChangeFormVO2> formList = new ArrayList<>();
         Map<Long, ChangeNodeVO> voMap = new HashMap<>();
         if (nodeList.size() != 0){
+            //判断是否存在重复节点
+            long count = nodeList.stream().distinct().count();
+            if (nodeList.size() != count){
+                throw new ServiceException("当前变更节点中存在重复节点,请检查后再保存");
+            }
             voMap = nodeList.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
             List<ChangeTokenMeter> meterList = nodeList.stream().map(l -> {
                 ChangeTokenMeter meter = new ChangeTokenMeter();
@@ -141,22 +146,22 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 meter.setChangeMoney(new BigDecimal(0));
                 meter.setIsSupplement(l.getIsSupplement());
                 List<ChangeFormVO2> list = l.getFormList();
+                BigDecimal big = new BigDecimal(0);
                 if (list != null && list.size() != 0){
                     formList.addAll(list);
-                    BigDecimal big = new BigDecimal(0);
                     for (ChangeFormVO2 vo2 : list) {
                         big = big.add(vo2.getChangeMoney());
                     }
-                    meter.setChangeMoney(big);
                 }
+                meter.setChangeMoney(big);
                 return meter;
             }).collect(Collectors.toList());
             changeTokenMeterService.saveBatch(meterList);
         }
         //保存清单,并计算总变更金额设置进变更令
+        BigDecimal big = new BigDecimal(0);
         if (formList.size() != 0){
             List<ChangeTokenInventory> inventoryList = new ArrayList<>();
-            BigDecimal big = new BigDecimal(0);
             for (ChangeFormVO2 vo2 : formList) {
                 ChangeTokenInventory inventory = new ChangeTokenInventory();
                 inventory.setProjectId(dto.getProjectId());
@@ -196,9 +201,9 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(new BigDecimal(inventory.getChangeAfterTotal())));
                 inventoryList.add(inventory);
             }
-            form.setChangeMoney(big);
             changeTokenInventoryService.saveBatch(inventoryList);
         }
+        form.setChangeMoney(big);
         this.save(form);
         //保存附件
         List<AttachmentForm> fileList = dto.getFileList();
@@ -267,14 +272,18 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
      * 新增-获取变更申请部位
      */
     @Override
-    public List<ChangeNodeVO> getChangeNode(Long contractId,String ids) {
+    public List<ChangeNodeVO> getChangeNode(Long contractId,String ids,String changeIds) {
         List<ChangeNodeVO> vos = new ArrayList<>();
         if (StringUtils.isBlank(ids)){
             return vos;
         }
         List<Long> longs = Func.toLongList(ids);
-        //暂时使用循环单条查询
+        //获取所选节点下的最底层节点
         vos = baseMapper.getChangeNode(contractId,longs,ids);
+        //排除当前已经存在的节点
+        if (StringUtils.isNotBlank(changeIds)) {
+            vos = vos.stream().filter(l ->!changeIds.contains(l.getId()+"")).collect(Collectors.toList());
+        }
         for (ChangeNodeVO vo : vos) {
             vo.setNodeUrl(middleMeterApplyService.getNodeDivide(vo.getId()));
         }
@@ -285,6 +294,7 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
      * 修改 变更令表
      */
     @Override
+    @Transactional
     public void update2(ChangeTokenFormDTO dto) {
         //复制出基础数据
         ChangeTokenForm form = new ChangeTokenForm();
@@ -296,6 +306,11 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         List<ChangeFormVO2> formList = new ArrayList<>();
         Map<Long, ChangeNodeVO> voMap = new HashMap<>();
         if (nodeList.size() != 0){
+            //判断是否存在重复节点
+            long count = nodeList.stream().distinct().count();
+            if (nodeList.size() != count){
+                throw new ServiceException("当前变更节点中存在重复节点,请检查后再保存");
+            }
             voMap = nodeList.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
             List<ChangeTokenMeter> meterList = nodeList.stream().map(l -> {
                 ChangeTokenMeter meter = new ChangeTokenMeter();
@@ -304,6 +319,20 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 meter.setChangeTokenId(dto.getId());
                 meter.setContractMeterId(l.getId());
                 meter.setContractPicture(l.getContractPicture());
+                //设置部位基础信息,方便公式生成报表
+                meter.setNodeName(l.getNodeName());
+                meter.setNodeUrl(l.getNodeUrl());
+                meter.setChangeMoney(new BigDecimal(0));
+                meter.setIsSupplement(l.getIsSupplement());
+                List<ChangeFormVO2> list = l.getFormList();
+                BigDecimal big = new BigDecimal(0);
+                if (list != null && list.size() != 0){
+                    formList.addAll(list);
+                    for (ChangeFormVO2 vo2 : list) {
+                        big = big.add(vo2.getChangeMoney());
+                    }
+                }
+                meter.setChangeMoney(big);
                 return meter;
             }).collect(Collectors.toList());
             changeTokenMeterService.saveBatch(meterList);
@@ -311,9 +340,9 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         //保存清单,并计算总变更金额设置进变更令
         //删除当前变更令下的清单
         changeTokenInventoryService.deleteByTokenId(dto.getId());
+        BigDecimal big = new BigDecimal(0);
         if (formList.size() != 0){
             List<ChangeTokenInventory> inventoryList = new ArrayList<>();
-            BigDecimal big = new BigDecimal(0);
             for (ChangeFormVO2 vo2 : formList) {
                 ChangeTokenInventory inventory = new ChangeTokenInventory();
                 inventory.setProjectId(dto.getProjectId());
@@ -336,8 +365,10 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                             .eq(InventoryFormMeter::getContractFormId, vo2.getId())
                             .eq(InventoryFormMeter::getContractMeterId, vo2.getContractMeterId()));
                     if (meter == null || (meter.getBuildPictureTotal()+vo2.getCurrentChangeTotal() < 0)){
-                        throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,未找到清单("+vo2.getFormName()+")的分解信息,不能负变更");
+                        throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,未找到清单["+vo2.getFormName()+"]的分解信息,不能负变更");
                     }
+                }else if (vo2.getCurrentChangeTotal() == 0){
+                    throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,清单["+vo2.getFormName()+"]的变更数量为0,请确认后再提交");
                 }
                 //设置节点id
                 inventory.setContractMeterId(vo2.getContractMeterId());
@@ -351,9 +382,9 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(new BigDecimal(inventory.getChangeAfterTotal())));
                 inventoryList.add(inventory);
             }
-            form.setChangeMoney(big);
             changeTokenInventoryService.saveBatch(inventoryList);
         }
+        form.setChangeMoney(big);
         this.updateById(form);
         //删除附件信息
         attachmentFormService.deleteByMasterId(form.getId());
@@ -387,7 +418,7 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 for (ChangeNodeVO nodeVO : nodeList) {
                     List<ChangeFormVO2> vo2s = map.get(nodeVO.getId());
                     nodeVO.setFormList(vo2s);
-                    nodeVO.setNodeUrl(middleMeterApplyService.getNodeDivide(nodeVO.getId()));
+//                    nodeVO.setNodeUrl(middleMeterApplyService.getNodeDivide(nodeVO.getId()));
                 }
             }else {
                 for (ChangeNodeVO nodeVO : nodeList) {

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

@@ -177,7 +177,7 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
                                 fo.setChangePrice(fo.getBidPrice());
                             }
                             if (fo.getContractTotal() != null && fo.getBidPrice() != null) {
-                                fo.setContractMoney(new BigDecimal(fo.getContractTotal()).multiply(fo.getBidPrice()));
+                                fo.setContractMoney(fo.getContractTotal().multiply(fo.getBidPrice()));
                                 fo.setChangeMoney(fo.getContractMoney());
                             }
                         } else {
@@ -376,16 +376,16 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         if (form.getIsFormNode() == 1){
             if (form.getIsSupplement() == 1){
                 form.setChangePrice(form.getCurrentPrice());
-                form.setContractTotal(0);
-                form.setChangeTotal(0);
+                form.setContractTotal(new BigDecimal(0));
+                form.setChangeTotal(new BigDecimal(0));
                 form.setContractMoney(new BigDecimal(0));
                 form.setChangeMoney(new BigDecimal(0));
             }else {
                 form.setCurrentPrice(form.getBidPrice());
                 form.setChangePrice(form.getBidPrice());
                 form.setChangeTotal(form.getContractTotal());
-                form.setContractMoney(form.getBidPrice().multiply(new BigDecimal(form.getContractTotal())));
-                form.setChangeMoney(form.getChangePrice().multiply(new BigDecimal(form.getChangeTotal())));
+                form.setContractMoney(form.getBidPrice().multiply(form.getContractTotal()));
+                form.setChangeMoney(form.getChangePrice().multiply(form.getChangeTotal()));
             }
         }
         //设置层级
@@ -461,14 +461,14 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
             form.setCurrentPrice(form.getBidPrice());
             form.setChangePrice(form.getBidPrice());
             if (form.getIsSupplement() == 1){
-                form.setContractTotal(0);
-                form.setChangeTotal(0);
+                form.setContractTotal(new BigDecimal(0));
+                form.setChangeTotal(new BigDecimal(0));
                 form.setContractMoney(new BigDecimal(0));
                 form.setChangeMoney(new BigDecimal(0));
             }else {
                 form.setChangeTotal(form.getContractTotal());
-                form.setContractMoney(form.getBidPrice().multiply(new BigDecimal(form.getContractTotal())));
-                form.setChangeMoney(form.getChangePrice().multiply(new BigDecimal(form.getChangeTotal())));
+                form.setContractMoney(form.getBidPrice().multiply(form.getContractTotal()));
+                form.setChangeMoney(form.getChangePrice().multiply(form.getChangeTotal()));
             }
         }
         //当前节点的清单类型是否被修改了,

+ 1 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialServiceImpl.java

@@ -54,7 +54,7 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
         }else {
             for (ContractMaterialVO materialVO : voList) {
                 if (materialVO.getPrice() != null && materialVO.getAmount() != null){
-                    materialVO.setMeterMoney(materialVO.getPrice().multiply(new BigDecimal(materialVO.getAmount())));
+                    materialVO.setMeterMoney(materialVO.getPrice().multiply(materialVO.getAmount()));
                 }
             }
             vo.setHasChild(true);

+ 39 - 13
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -71,20 +71,25 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
      * 添加清单
      */
     @Override
-    public List<ResolveInventoryVO> addFormList(Long contractId, Long nodeId ,String ids) {
+    public List<ResolveInventoryVO> addFormList(Long contractId,Long contractPeriodId,Long nodeId ,String ids) {
         //获取当前节点下关联的清单,如果没有直接返回
         List<ResolveInventoryVO> vos = new ArrayList<>();
         List<Long> list = formMeterService.getNodeAllForm(nodeId);
         if (list.size() == 0) {
             return vos;
         }
+        //获取当前计量期,当前节点下其他申请所包含的清单
+        List<Long> formIds = baseMapper.getNodeOtherFormId(contractId,contractPeriodId,nodeId);
+        if (formIds.size() != 0){
+          list.removeAll(formIds);
+        }
         //去除已经存在的清单,如果去除之后集合为空,则直接返回
         if (StringUtils.isNotBlank(ids)) {
             //查询出还未添加的清单
             list = list.stream().filter(l -> !ids.contains(l.toString())).collect(Collectors.toList());
-            if (list.size() == 0) {
-                return vos;
-            }
+        }
+        if (list.size() == 0) {
+            return vos;
         }
         vos = baseMapper.getFormList(contractId, nodeId, list);
         return vos;
@@ -94,14 +99,14 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
      * 添加分解清单
      */
     @Override
-    public List<MeterInventoryVO> addResolveForm(Long contractId ,String ids) {
+    public List<MeterInventoryVO> addResolveForm(Long contractId ,Long nodeId ,String ids) {
         List<MeterInventoryVO> vos = new ArrayList<>();
-        if (StringUtils.isBlank(ids)){
+        if (StringUtils.isBlank(ids) || nodeId == null){
             return vos;
         }
         //获取清单和分解信息
         List<Long> longs = Func.toLongList(ids);
-        vos = baseMapper.getResolveFormInfo(contractId,longs);
+        vos = baseMapper.getResolveFormInfo(contractId,nodeId,longs);
         return vos;
     }
 
@@ -111,6 +116,11 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     @Override
     @Transactional
     public void add(MiddleMeterApplyDTO dto) {
+        //校验计量单元是否最底层节点
+        Integer count = baseMapper.getNodeChild(dto.getContractId(),dto.getContractUnitId());
+        if (count != 0){
+            throw new ServiceException("请在最底层节点新增中间计量申请");
+        }
         //保存中间计量申请,设置计量金额为0,如果存在计量清单,则统计计量清单总金额
         MiddleMeterApply apply = new MiddleMeterApply();
         Long id = SnowFlakeUtil.getId();
@@ -130,9 +140,16 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
                 formApply.setMiddleMeterId(id);
                 formApply.setContractPeriodId(dto.getContractPeriodId());
                 formApply.setMeterNumber(dto.getMeterNumber());
+                //设置清单基础信息
+                formApply.setContractMeterId(dto.getContractUnitId());
+                formApply.setFormNumber(l.getFormNumber());
+                formApply.setFormName(l.getFormName());
+                formApply.setCurrentPrice(l.getCurrentPrice());
+                formApply.setBuildPictureTotal(l.getResolveTotal());
+                formApply.setChangeBuildPictureTotal(l.getChangeTotal());
                 if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
                     formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
-                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(new BigDecimal(l.getCurrentMeterTotal())));
+                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
                 }else {
                     throw new ServiceException("计量金额和计量数量不能为空");
                 }
@@ -143,7 +160,9 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
              }
              apply.setMeterMoney(big);
             inventoryFormApplyService.saveBatch(formApplies);
-        }
+        }else {
+             throw new ServiceException("请添加需要计量的清单");
+         }
         this.save(apply);
         //保存附件
         List<AttachmentForm> fileList = dto.getFileList();
@@ -169,7 +188,7 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
             return null;
         }
         //获取变更令
-        ChangeTokenForm tokenForm = baseMapper.getTokenById(nodeToken.getId());
+        ChangeTokenForm tokenForm = baseMapper.getTokenById(nodeToken.getChangeTokenId());
         return tokenForm.getChangeNumber();
     }
 
@@ -224,9 +243,16 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
                 formApply.setMiddleMeterId(dto.getId());
                 formApply.setContractPeriodId(dto.getContractPeriodId());
                 formApply.setMeterNumber(dto.getMeterNumber());
+                //设置清单基础信息
+                formApply.setContractMeterId(dto.getContractUnitId());
+                formApply.setFormNumber(l.getFormNumber());
+                formApply.setFormName(l.getFormName());
+                formApply.setCurrentPrice(l.getCurrentPrice());
+                formApply.setBuildPictureTotal(l.getResolveTotal());
+                formApply.setChangeBuildPictureTotal(l.getChangeTotal());
                 if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
                     formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
-                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(new BigDecimal(l.getCurrentMeterTotal())));
+                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
                 }else {
                     throw new ServiceException("计量金额和计量数量不能为空");
                 }
@@ -323,7 +349,7 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         //获取中间计量申请
         MiddleMeterApplyVO vo = baseMapper.getById(id);
         //获取计量清单列表
-        List<MeterInventoryVO> formList = baseMapper.getForm(id,vo.getContractId());
+        List<MeterInventoryVO> formList = baseMapper.getForm(id,vo.getContractId(),vo.getContractUnitId());
         vo.setFormList(formList);
         //获取附件列表
         List<AttachmentForm> list = attachmentFormService.list(new LambdaQueryWrapper<AttachmentForm>()
@@ -351,7 +377,7 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
             throw new ServiceException("未获取到计量期期号信息");
         }
         str.append(contractMeterPeriod.getPeriodNumber()+"-");
-        //获取流水号:当前合同段存在的所有合同计量申请的数量+1
+        //获取流水号:当前合同段存在的当前计量期的申请单总数+1
         long count = this.count(new LambdaQueryWrapper<MiddleMeterApply>()
                 .eq(MiddleMeterApply::getContractId, apply.getContractId())
                 .eq(MiddleMeterApply::getContractPeriodId,apply.getContractPeriodId()));