فهرست منبع

合同计量单元

qianxb 1 سال پیش
والد
کامیت
09a01be526
18فایلهای تغییر یافته به همراه222 افزوده شده و 57 حذف شده
  1. 3 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenInventory.java
  2. 14 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMeter.java
  3. 3 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeFormVO2.java
  4. 35 12
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java
  5. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractInventoryFormController.java
  6. 3 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InventoryFormMeterController.java
  7. 11 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MeterTreeController.java
  8. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.java
  9. 24 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml
  10. 1 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterTreeContractMapper.java
  11. 6 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterTreeContractMapper.xml
  12. 5 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractInventoryFormService.java
  13. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInventoryFormMeterService.java
  14. 2 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/MeterTreeContractService.java
  15. 15 15
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  16. 19 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java
  17. 62 14
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java
  18. 12 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeContractServiceImpl.java

+ 3 - 3
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenInventory.java

@@ -85,17 +85,17 @@ public class ChangeTokenInventory extends BaseEntity {
      * 变更前数量
      */
     @ApiModelProperty(value = "变更前数量")
-    private Integer changeBeforeTotal;
+    private BigDecimal changeBeforeTotal;
     /**
      * 变更数量
      */
     @ApiModelProperty(value = "变更数量")
-    private Integer changeTotal;
+    private BigDecimal changeTotal;
     /**
      * 变更后数量
      */
     @ApiModelProperty(value = "变更后数量")
-    private Integer changeAfterTotal;
+    private BigDecimal changeAfterTotal;
     /**
      * 变更前金额
      */

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

@@ -22,6 +22,8 @@ import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+
 /**
  * 工程清单与合同计量单元	中间表实体类
  *
@@ -59,12 +61,22 @@ public class InventoryFormMeter extends BaseEntity {
      * 施工图数量
      */
     @ApiModelProperty(value = "施工图数量")
-    private Integer buildPictureTotal;
+    private BigDecimal buildPictureTotal;
     /**
      * 变更后施工图数量
      */
     @ApiModelProperty(value = "变更后施工图数量")
-    private Integer changeBuildPictureTotal;
+    private BigDecimal changeBuildPictureTotal;
+    /**
+     * 施工图金额
+     */
+    @ApiModelProperty(value = "施工图金额")
+    private BigDecimal buildPictureMoney;
+    /**
+     * 变更后施工图金额
+     */
+    @ApiModelProperty(value = "变更后施工图金额")
+    private BigDecimal changeBuildPictureMoney;
 
 
 }

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

@@ -30,13 +30,13 @@ public class ChangeFormVO2 {
     private BigDecimal currentPrice;
 
     @ApiModelProperty(value = "合同数量(变更前)")
-    private Integer contractTotal;
+    private BigDecimal contractTotal;
 
     @ApiModelProperty(value = "数量变更增减")
-    private Integer currentChangeTotal;
+    private BigDecimal currentChangeTotal;
 
     @ApiModelProperty(value = "合同变更后数量(变更后)")
-    private Integer changeTotal;
+    private BigDecimal changeTotal;
 
     @ApiModelProperty(value = "合同金额(变更前)")
     private BigDecimal contractMoney;

+ 35 - 12
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java

@@ -31,49 +31,69 @@ public class ContractFromVO {
      * 清单编号
      */
     @ApiModelProperty(value = "清单编号")
-    @ExcelProperty("清单编号")
     private String formNumber;
     /**
      * 清单名称
      */
     @ApiModelProperty(value = "清单名称")
-    @ExcelProperty("清单名称")
     private String formName;
 
     /**
      * 当前单价
      */
     @ApiModelProperty(value = "当前单价")
-    @ExcelIgnore
     private BigDecimal currentPrice;
 
     /**
      * 合同数量
      */
     @ApiModelProperty(value = "合同数量")
-    @ExcelProperty("数量")
-    private Integer contractTotal;
+    private BigDecimal contractTotal;
 
     /**
      * 变更后数量
      */
     @ApiModelProperty(value = "变更后数量")
-    @ExcelIgnore
-    private Integer changeTotal;
+    private BigDecimal changeTotal;
 
     /**
      * 已分解量
      */
-    @ApiModelProperty(value = "已分解量")
-    @ExcelIgnore
-    private Integer poseNum;
+    @ApiModelProperty(value = "已分解量 = 其他节点分解量+施工图数量")
+    private BigDecimal poseNum;
+
+    /**
+     * 已分解量
+     */
+    @ApiModelProperty(value = "其他节点分解量")
+    private BigDecimal otherPoseNum;
 
     /**
      * 剩余分解量
      */
     @ApiModelProperty(value = "剩余分解量")
-    @ExcelIgnore
-    private Integer residueNum;
+    private BigDecimal residueNum;
+
+    /**
+     * 施工图数量
+     */
+    @ApiModelProperty(value = "施工图数量")
+    private BigDecimal buildPictureTotal;
+    /**
+     * 变更后施工图数量
+     */
+    @ApiModelProperty(value = "变更后施工图数量")
+    private BigDecimal changeBuildPictureTotal;
+    /**
+     * 施工图金额
+     */
+    @ApiModelProperty(value = "施工图金额")
+    private BigDecimal buildPictureMoney;
+    /**
+     * 变更后施工图金额
+     */
+    @ApiModelProperty(value = "变更后施工图金额")
+    private BigDecimal changeBuildPictureMoney;
 
     /**
      * 是否增补
@@ -81,4 +101,7 @@ public class ContractFromVO {
     @ApiModelProperty(value = "是否增补")
     @ExcelIgnore
     private Integer isSupplement;
+
+    @ApiModelProperty(value = "引用状态,0未引用,1引用,被引用的施工图不允许修改删除")
+    private Integer citeStatus;
 }

+ 3 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractInventoryFormController.java

@@ -198,7 +198,9 @@ public class ContractInventoryFormController extends BladeController {
 		if(meterId!=null && ObjectUtil.isEmpty(meterId)){
 			return R.fail("meterId不能为空");
 		}
-		List<ContractFromVO> treeAll = contractInventoryFormService.getContrFormAllByContrId(contractId,formNum,1,meterId);
+//		List<ContractFromVO> treeAll = contractInventoryFormService.getContrFormAllByContrId(contractId,formNum,1,meterId);
+		//获取分解列表,排除当前节点已经分解的
+		List<ContractFromVO> treeAll = contractInventoryFormService.getNotResolveForm(contractId,formNum,meterId);
 		return R.data(treeAll);
 	}
 	

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

@@ -142,13 +142,13 @@ public class InventoryFormMeterController extends BladeController {
 	@ApiOperation(value = "删除同合计量", notes = "传入")
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "meterId", value = "合同计量单元id", required = true),
-			@ApiImplicitParam(name = "formIds", value = "合同工程清单ids,多个以,分割", required = true)
+			@ApiImplicitParam(name = "formIds", value = "单元-清单中间表id", required = true)
 	})
-	public R delInMeterInfo(String meterId,String formIds) {
+	public R delInMeterInfo(String meterId,Long formIds) {
 		if(meterId==null & StringUtils.isEmpty(meterId)){
 			R.fail("计量单元meterId不能为null");
 		}
-		if(formIds!=null & StringUtils.isNotEmpty(formIds)){
+		if(formIds!=null){
 			R.fail("合同工程清单formIds不能为null");
 		}
 		return inventoryFormMeterService.delInMeterInfo(meterId,formIds);

+ 11 - 3
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MeterTreeController.java

@@ -1,5 +1,6 @@
 package org.springblade.meter.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -671,9 +672,16 @@ public class MeterTreeController extends BladeController {
                     vo.setStakeTypeName(dict.getDictValue());
                 }
             }
-
-            List<ContractFromVO> contrFormAllByContrId = contractInventoryFormService.getContrFormAllByContrId(basicInfo.getContractId(), "", 2, basicInfo.getId());
-            vo.setDecompositionList(contrFormAllByContrId);
+            //判断是否为最底层节点,如果为最底层节点则直接查询清单,不为最底层节点则汇总子节点总和
+            long count = meterTreeContractService.count(new LambdaQueryWrapper<MeterTreeContract>()
+                    .eq(MeterTreeContract::getContractId, basicInfo.getContractId())
+                    .eq(MeterTreeContract::getParentId, basicInfo.getId()));
+            if (count == 0) {
+                List<ContractFromVO> contrFormAllByContrId = contractInventoryFormService.getNodeResolveForm(basicInfo.getContractId(), basicInfo.getId());
+                vo.setDecompositionList(contrFormAllByContrId);
+            }else {
+                meterTreeContractService.getAllChildNodeMoney(vo);
+            }
             return R.data(vo);
         }
         return R.data(null);

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

@@ -66,4 +66,7 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
 
     Integer getNodeChangeInfo(@Param("id") Long id,@Param("contractId") Long contractId);
 
+    List<ContractFromVO> getNotResolveForm(@Param("contractId") Long contractId, @Param("formNum") String formNum,@Param("meterId") Long meterId);
+
+    List<ContractFromVO> getNodeResolveForm(@Param("contractId") Long contractId,@Param("meterId") Long meterId);
 }

+ 24 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml

@@ -131,5 +131,29 @@
                       from s_contract_inventory_form
                       where contract_id = #{contractId} and is_deleted = 0 and is_lock=0 and (id = #{id} or FIND_IN_SET(#{id},ancestors) > 0))
     </select>
+    <select id="getNotResolveForm" resultType="org.springblade.meter.vo.ContractFromVO">
+        select cif.id, cif.form_number,cif.form_name,cif.current_price,cif.contract_total,cif.change_total,cif.is_supplement,
+               IFNULL((SELECT SUM(build_picture_total) from s_inventory_form_meter
+                       WHERE contract_id = #{contractId} and contract_form_id = cif.id),0)  as poseNum
+        from s_contract_inventory_form cif
+        WHERE cif.contract_id = #{contractId} and cif.is_deleted = 0 and cif.is_form_node = 1
+            <if test="formNum != null and formNum != '' and type==1">
+                and cif.form_number like concat('%',#{formNum},'%')
+            </if>
+          and cif.id not in (SELECT contract_form_id from s_inventory_form_meter WHERE contract_id = #{contractId} and contract_meter_id = #{meterId} and is_deleted = 0)
+    </select>
+    <select id="getNodeResolveForm" resultType="org.springblade.meter.vo.ContractFromVO">
+        select ifm.id, cif.form_number,cif.form_name,cif.current_price,cif.contract_total,cif.change_total,cif.is_supplement,
+               ifm.build_picture_total,ifm.change_build_picture_total,ifm.build_picture_money,ifm.change_build_picture_money,
+               if(ifm.build_picture_total=ifm.change_build_picture_total,(select count(1) from s_inventory_form_apply
+                where contract_id = #{contractId} and is_deleted = 0 and contract_form_id = ifm.contract_form_id),1) as citeStatus,
+            IFNULL((SELECT SUM(build_picture_total) from s_inventory_form_meter WHERE contract_id = #{contractId} and contract_form_id = cif.id
+                     and is_deleted = 0 and contract_meter_id and contract_meter_id != #{meterId}),0)  as otherPoseNum,
+            IFNULL((SELECT SUM(build_picture_total) from s_inventory_form_meter
+                WHERE contract_id = #{contractId} and is_deleted = 0 and contract_form_id = cif.id),0)  as poseNum
+        from s_inventory_form_meter ifm left join s_contract_inventory_form cif on ifm.contract_form_id = cif.id
+        WHERE ifm.contract_id = #{contractId} and ifm.is_deleted = 0
+        and ifm.contract_meter_id = #{meterId}
+    </select>
 
 </mapper>

+ 1 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterTreeContractMapper.java

@@ -10,4 +10,5 @@ public interface MeterTreeContractMapper extends BaseMapper<MeterTreeContract> {
     @Select("SELECT MAX(sort) FROM s_meter_tree_contract WHERE parent_id = #{parentId} AND status = 1 AND is_deleted = 0")
     Integer selectMaxSort(@Param("parentId") Long parentId);
 
+    MeterTreeContract getAllChildNodeMoney(@Param("contractId") Long contractId,@Param("id") Long id);
 }

+ 6 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterTreeContractMapper.xml

@@ -2,4 +2,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.springblade.meter.mapper.MeterTreeContractMapper">
 
+    <select id="getAllChildNodeMoney" resultType="org.springblade.meter.entity.MeterTreeContract">
+        select sum(build_picture_money) as build_picture_money,
+               sum(change_money) as change_money
+        from s_meter_tree_contract
+        where contract_id = #{contractId} and is_deleted = 0 and  FIND_IN_SET(#{id}, ancestor)
+    </select>
 </mapper>

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

@@ -54,4 +54,9 @@ public interface IContractInventoryFormService extends BaseService<ContractInven
     //获取合同工程清单表
     List<ContractFromVO> getContrFormAllByContrId(Long contractId, String formNum,int type,Long meterId);
 
+    //获取未在当前节点下分解的清单
+    List<ContractFromVO> getNotResolveForm(Long contractId, String formNum, Long meterId);
+
+    //获取节点下分解的清单
+    List<ContractFromVO> getNodeResolveForm(Long contractId, Long id);
 }

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

@@ -46,5 +46,5 @@ public interface IInventoryFormMeterService extends BaseService<InventoryFormMet
     /**
      * 删除 同合计量 清单
      */
-    R delInMeterInfo(String meterId, String formIds);
+    R delInMeterInfo(String meterId, Long formIds);
 }

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

@@ -4,6 +4,7 @@ import org.springblade.core.mp.base.BaseService;
 import org.springblade.meter.dto.MeterTreeContractSaveBatchDTO;
 import org.springblade.meter.entity.MeterTreeContract;
 import org.springblade.meter.entity.MeterTreeProject;
+import org.springblade.meter.vo.MeterTreeContractVO;
 
 import java.util.List;
 
@@ -17,4 +18,5 @@ public interface MeterTreeContractService extends BaseService<MeterTreeContract>
 
     boolean contractSave(MeterTreeContractSaveBatchDTO dto);
 
+    void getAllChildNodeMoney(MeterTreeContractVO vo);
 }

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

@@ -178,27 +178,27 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                     throw new ServiceException("未找到清单("+vo2.getFormName()+")的部位id");
                 }
                 //如果是负变更,判断当前节点下是否存在当前清单
-                if (vo2.getCurrentChangeTotal() < 0){
+                if (vo2.getCurrentChangeTotal().compareTo(BigDecimal.ZERO) == -1){
                     //获取当前节点下当前清单的分解信息
                     InventoryFormMeter meter = inventoryFormMeterService.getOne(new LambdaQueryWrapper<InventoryFormMeter>()
                             .eq(InventoryFormMeter::getContractFormId, vo2.getId())
                             .eq(InventoryFormMeter::getContractMeterId, vo2.getContractMeterId()));
-                    if (meter == null || (meter.getBuildPictureTotal()+vo2.getCurrentChangeTotal() < 0)){
+                    if (meter == null || (meter.getBuildPictureTotal().add(vo2.getCurrentChangeTotal()).compareTo(BigDecimal.ZERO) == -1)){
                         throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,未找到清单("+vo2.getFormName()+")的分解信息,不能负变更");
                     }
-                }else if (vo2.getCurrentChangeTotal() == 0){
+                }else if (vo2.getCurrentChangeTotal().compareTo(BigDecimal.ZERO) == 0){
                     throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,清单("+vo2.getFormName()+")的变更数量为0,请确认后再提交");
                 }
                 //设置节点id
                 inventory.setContractMeterId(vo2.getContractMeterId());
                 //计算变更后
-                inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal() + inventory.getChangeTotal());
+                inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal().add(inventory.getChangeTotal()));
                 inventory.setChangeBeforeMoney(vo2.getContractMoney());
                 //计算变更增减金额
-                inventory.setChangeMoney(vo2.getCurrentPrice().multiply(new BigDecimal(inventory.getChangeTotal())));
+                inventory.setChangeMoney(vo2.getCurrentPrice().multiply(inventory.getChangeTotal()));
                 big = big.add(inventory.getChangeMoney());
                 //计算变更后金额
-                inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(new BigDecimal(inventory.getChangeAfterTotal())));
+                inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(inventory.getChangeAfterTotal()));
                 inventoryList.add(inventory);
             }
             changeTokenInventoryService.saveBatch(inventoryList);
@@ -259,10 +259,10 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         vos = baseMapper.selectForm(contractId,longs,nodeId);
         for (ChangeFormVO2 vo : vos) {
             vo.setContractMeterId(nodeId);
-            vo.setCurrentChangeTotal(0);
+            vo.setCurrentChangeTotal(BigDecimal.ZERO);
             vo.setChangeTotal(vo.getContractTotal());
-            vo.setContractMoney(vo.getCurrentPrice().multiply(new BigDecimal(vo.getContractTotal())));
-            vo.setCurrentChangeMoney(new BigDecimal(0));
+            vo.setContractMoney(vo.getCurrentPrice().multiply(vo.getContractTotal()));
+            vo.setCurrentChangeMoney(BigDecimal.ZERO);
             vo.setChangeMoney(vo.getContractMoney());
         }
         return vos;
@@ -359,27 +359,27 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                     throw new ServiceException("未找到清单("+vo2.getFormName()+")的部位id");
                 }
                 //如果是负变更,判断当前节点下是否存在当前清单
-                if (vo2.getCurrentChangeTotal() < 0){
+                if (vo2.getCurrentChangeTotal().compareTo(BigDecimal.ZERO) == -1){
                     //获取当前节点下当前清单的分解信息
                     InventoryFormMeter meter = inventoryFormMeterService.getOne(new LambdaQueryWrapper<InventoryFormMeter>()
                             .eq(InventoryFormMeter::getContractFormId, vo2.getId())
                             .eq(InventoryFormMeter::getContractMeterId, vo2.getContractMeterId()));
-                    if (meter == null || (meter.getBuildPictureTotal()+vo2.getCurrentChangeTotal() < 0)){
+                    if (meter == null || (meter.getBuildPictureTotal().add(vo2.getCurrentChangeTotal()).compareTo(BigDecimal.ZERO) == -1)){
                         throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,未找到清单["+vo2.getFormName()+"]的分解信息,不能负变更");
                     }
-                }else if (vo2.getCurrentChangeTotal() == 0){
+                }else if (vo2.getCurrentChangeTotal().compareTo(BigDecimal.ZERO) == 0){
                     throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,清单["+vo2.getFormName()+"]的变更数量为0,请确认后再提交");
                 }
                 //设置节点id
                 inventory.setContractMeterId(vo2.getContractMeterId());
                 //计算变更后
-                inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal() + inventory.getChangeTotal());
+                inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal().add(inventory.getChangeTotal()));
                 inventory.setChangeBeforeMoney(vo2.getContractMoney());
                 //计算变更增减金额
-                inventory.setChangeMoney(vo2.getCurrentPrice().multiply(new BigDecimal(inventory.getChangeTotal())));
+                inventory.setChangeMoney(vo2.getCurrentPrice().multiply(inventory.getChangeTotal()));
                 big = big.add(inventory.getChangeMoney());
                 //计算变更后金额
-                inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(new BigDecimal(inventory.getChangeAfterTotal())));
+                inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(inventory.getChangeAfterTotal()));
                 inventoryList.add(inventory);
             }
             changeTokenInventoryService.saveBatch(inventoryList);

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

@@ -566,6 +566,25 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         return  baseMapper.getContrFormAllByContrId(contractId,formNum,type,meterId);
     }
 
+    //获取分解列表,排除当前节点已经分解的
+    @Override
+    public List<ContractFromVO> getNotResolveForm(Long contractId, String formNum, Long meterId) {
+        return baseMapper.getNotResolveForm(contractId,formNum,meterId);
+    }
+
+    /**
+     * 获取节点下分解的清单
+     * @return
+     */
+    @Override
+    public List<ContractFromVO> getNodeResolveForm(Long contractId, Long id) {
+        List<ContractFromVO> vos = baseMapper.getNodeResolveForm(contractId, id);
+        for (ContractFromVO vo : vos) {
+            vo.setResidueNum(vo.getChangeTotal().subtract(vo.getPoseNum()));
+        }
+        return vos;
+    }
+
     /**
      * 判断当前节点是否已经分解或变更过,变更过返回true
      */

+ 62 - 14
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java

@@ -16,20 +16,29 @@
  */
 package org.springblade.meter.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.meter.entity.ContractInventoryForm;
+import org.springblade.meter.entity.InventoryFormApply;
 import org.springblade.meter.entity.InventoryFormMeter;
+import org.springblade.meter.entity.MeterTreeContract;
 import org.springblade.meter.mapper.InventoryFormMeterMapper;
+import org.springblade.meter.service.IInventoryFormApplyService;
 import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.meter.service.MeterTreeContractService;
 import org.springblade.meter.vo.ContractFromVO;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -39,8 +48,12 @@ import java.util.List;
  * @since 2023-11-29
  */
 @Service
+@AllArgsConstructor
 public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryFormMeterMapper, InventoryFormMeter> implements IInventoryFormMeterService {
 
+    private final MeterTreeContractService meterTreeContractService;
+
+    private final IInventoryFormApplyService inventoryFormApplyService;
 
     @Override
     public List<Long> getNodeAllForm(Long nodeId) {
@@ -59,11 +72,14 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
             if(inventoryFormMeter==null && ObjectUtil.isEmpty(inventoryFormMeter)){
                 ContractInventoryForm inventoryForm = baseMapper.dadainfo(forid);
                 InventoryFormMeter data =new InventoryFormMeter();
-                data.setContractId(inventoryForm.getContractId());
                 data.setProjectId(inventoryForm.getProjectId());
+                data.setContractId(inventoryForm.getContractId());
                 data.setContractFormId(forid);
                 data.setContractMeterId(Func.toLong(meterId));
-                data.setBuildPictureTotal(0);
+                data.setBuildPictureTotal(BigDecimal.ZERO);
+                data.setChangeBuildPictureTotal(BigDecimal.ZERO);
+                data.setBuildPictureMoney(BigDecimal.ZERO);
+                data.setChangeBuildPictureMoney(BigDecimal.ZERO);
                 baseMapper.insert(data);
             }
         }
@@ -72,24 +88,56 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
 
     @Override
     public boolean updateInfo(List<ContractFromVO> dataInfo,Long meterId) {
-        for (ContractFromVO data:dataInfo){
-            LambdaUpdateWrapper<InventoryFormMeter> updateWrapper = new LambdaUpdateWrapper<InventoryFormMeter>();
-            updateWrapper.set(InventoryFormMeter::getBuildPictureTotal, data.getPoseNum());
-            updateWrapper.eq(InventoryFormMeter::getContractMeterId, meterId);
-            updateWrapper.eq(InventoryFormMeter::getContractFormId, data.getId());
-            baseMapper.update(null, updateWrapper);
+        //统计施工图金额和变更后施工图金额
+        BigDecimal b1 = BigDecimal.ZERO;
+        BigDecimal b2 = BigDecimal.ZERO;
+        for (ContractFromVO vo:dataInfo){
+            if (vo.getBuildPictureTotal() == null){
+                throw new ServiceException("请填写施工图数量");
+            }
+            //统计
+            vo.setBuildPictureMoney(vo.getCurrentPrice().multiply(vo.getBuildPictureTotal()));
+            vo.setChangeBuildPictureMoney(vo.getCurrentPrice().multiply(vo.getChangeBuildPictureTotal()));
+            b1 = b1.add(vo.getBuildPictureMoney());
+            b2 = b2.add(vo.getChangeBuildPictureMoney());
+            //修改,如果是已经被引用则跳过
+            if (vo.getCiteStatus() == 0){
+               this.update(new LambdaUpdateWrapper<InventoryFormMeter>()
+                       .eq(InventoryFormMeter::getId,vo.getId())
+                       .set(InventoryFormMeter::getBuildPictureTotal,vo.getBuildPictureTotal())
+                       .set(InventoryFormMeter::getChangeBuildPictureTotal,vo.getChangeBuildPictureTotal())
+                       .set(InventoryFormMeter::getBuildPictureMoney,vo.getBuildPictureMoney())
+                       .set(InventoryFormMeter::getChangeBuildPictureMoney,vo.getChangeBuildPictureMoney())
+               );
+            }
         }
+        //修改节点的统计值
+        meterTreeContractService.update(new LambdaUpdateWrapper<MeterTreeContract>()
+            .eq(MeterTreeContract::getId,meterId)
+            .set(MeterTreeContract::getBuildPictureMoney,b1)
+            .set(MeterTreeContract::getChangeMoney,b2));
         return true;
     }
 
+    /**
+     * 删除 同合计量 清单
+     */
     @Override
-    public R delInMeterInfo(String meterId, String formIds) {
-        List<Long> longList = Func.toLongList(formIds);
-        for(Long forid:longList) {
-            baseMapper.delete(Wrappers.<InventoryFormMeter>query().lambda()
-                    .eq(InventoryFormMeter::getContractMeterId, meterId)
-                    .eq(InventoryFormMeter::getContractFormId, forid));
+    public R delInMeterInfo(String meterId, Long formIds) {
+        //判断当前清单是否被变更
+        InventoryFormMeter meter = this.getById(formIds);
+        if (meter.getBuildPictureTotal().compareTo(meter.getChangeBuildPictureTotal()) != 0){
+            throw new ServiceException("当前清单已经变更,不能删除");
+        }
+        //判断当前清单是否被计量
+        List<InventoryFormApply> list = inventoryFormApplyService.list(new LambdaQueryWrapper<InventoryFormApply>()
+                .eq(InventoryFormApply::getContractId, meter.getContractId())
+                .eq(InventoryFormApply::getContractFormId, meter.getContractFormId()));
+        if (list.size() > 0){
+            throw new ServiceException("当前清单已经计量,不能删除");
         }
+        //删除
+        this.removeById(formIds);
         return R.success("成功");
     }
 }

+ 12 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeContractServiceImpl.java

@@ -15,6 +15,7 @@ import org.springblade.meter.entity.MeterTreeProject;
 import org.springblade.meter.mapper.MeterTreeContractMapper;
 import org.springblade.meter.mapper.MeterTreeProjectMapper;
 import org.springblade.meter.service.MeterTreeContractService;
+import org.springblade.meter.vo.MeterTreeContractVO;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -522,6 +523,17 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
         return true;
     }
 
+    /**
+     * 获取所有子节点金额
+     * @param vo
+     */
+    @Override
+    public void getAllChildNodeMoney(MeterTreeContractVO vo) {
+        MeterTreeContract m = baseMapper.getAllChildNodeMoney(vo.getContractId(),vo.getId());
+        vo.setBuildPictureMoney(m.getBuildPictureMoney());
+        vo.setChangeMoney(m.getChangeMoney());
+    }
+
     /**
      * 获取对应的父级的ancestor字段
      *