Bladeren bron

计量系统修改1

qianxb 1 jaar geleden
bovenliggende
commit
de3d5659ad
17 gewijzigde bestanden met toevoegingen van 205 en 43 verwijderingen
  1. 0 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/ChangeTokenFormDTO.java
  2. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenForm.java
  3. 5 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenInventory.java
  4. 5 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMeter.java
  5. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeFormVO2.java
  6. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeNodeVO.java
  7. 0 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeTokenFormVO.java
  8. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeTokenPageVO.java
  9. 3 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ChangeTokenFormController.java
  10. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/StartPayMeterFormController.java
  11. 2 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.java
  12. 13 6
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml
  13. 7 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.java
  14. 21 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml
  15. 1 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IChangeTokenFormService.java
  16. 73 10
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  17. 64 14
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java

+ 0 - 3
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/ChangeTokenFormDTO.java

@@ -40,9 +40,6 @@ public class ChangeTokenFormDTO extends ChangeTokenForm {
 	@ApiModelProperty(value = "部位集合")
 	private List<ChangeNodeVO> nodeList;
 
-	@ApiModelProperty(value = "清单集合")
-	private List<ChangeFormVO2> formList;
-
 	@ApiModelProperty(value = "附件集合")
 	private List<AttachmentForm> fileList;
 }

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

@@ -118,7 +118,7 @@ public class ChangeTokenForm extends BaseEntity {
     /**
      * 审批状态
      */
-    @ApiModelProperty(value = "审批状态")
+    @ApiModelProperty(value = "审批状态,0未上报,1待审批,2已审批,3已废除")
     private Integer approveStatus;
     /**
      * 下达状态

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

@@ -54,6 +54,11 @@ public class ChangeTokenInventory extends BaseEntity {
      */
     @ApiModelProperty(value = "变更令id")
     private Long changeTokenId;
+    /**
+     * 合同计量单元id
+     */
+    @ApiModelProperty(value = "合同计量单元id(部位)")
+    private Long contractMeterId;
     /**
      * 合同工程清单id
      */

+ 5 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMeter.java

@@ -60,6 +60,11 @@ public class InventoryFormMeter extends BaseEntity {
      */
     @ApiModelProperty(value = "施工图数量")
     private Integer buildPictureTotal;
+    /**
+     * 变更后施工图数量
+     */
+    @ApiModelProperty(value = "变更后施工图数量")
+    private Integer changeBuildPictureTotal;
 
 
 }

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

@@ -14,6 +14,9 @@ import java.math.BigDecimal;
 @Data
 public class ChangeFormVO2 {
 
+    @ApiModelProperty(value = "合同计量单元id(部位)")
+    private Long contractMeterId;
+
     @ApiModelProperty(value = "id")
     private Long id;
 

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

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * @Param   变更部位视图类-变更令用
@@ -31,5 +32,7 @@ public class ChangeNodeVO {
     @ApiModelProperty(value = "是否增补")
     private String isSupplementName;
 
+    @ApiModelProperty(value = "清单集合")
+    private List<ChangeFormVO2> formList;
 
 }

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

@@ -44,9 +44,6 @@ public class ChangeTokenFormVO extends ChangeTokenForm {
 	@ApiModelProperty(value = "部位集合")
 	private List<ChangeNodeVO> nodeList;
 
-	@ApiModelProperty(value = "清单集合")
-	private List<ChangeFormVO2> formList;
-
 	@ApiModelProperty(value = "附件集合")
 	private List<AttachmentForm> fileList;
 

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

@@ -21,5 +21,8 @@ public class ChangeTokenPageVO extends ChangeTokenForm {
     @ApiModelProperty(value = "审批状态名称")
     private String approveStatusName;
 
+    @ApiModelProperty(value = "引用状态,0未引用,1引用")
+    private Integer citeStatus;
+
 
 }

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

@@ -121,10 +121,11 @@ public class ChangeTokenFormController 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<ChangeFormVO2>> selectForm(Long contractId,String ids) {
-		List<ChangeFormVO2> vos = changeTokenFormService.selectForm(contractId,ids);
+	public R<List<ChangeFormVO2>> selectForm(Long contractId,Long nodeId,String ids) {
+		List<ChangeFormVO2> vos = changeTokenFormService.selectForm(contractId,nodeId,ids);
 		return R.data(vos);
 	}
 

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

@@ -62,7 +62,7 @@ public class StartPayMeterFormController extends BladeController {
 	public R<BigDecimal> getStartAmount(Long contractId) {
 		List<MeterContractInfo> list = jdbcTemplate.queryForList("select dy_total_amount from s_meter_contract_info where contract_id = " + contractId, MeterContractInfo.class);
 		if (list.size() == 0){
-			return R.data(null);
+			return R.data(new BigDecimal(0));
 		}else {
 			return R.data(list.get(0).getDyTotalAmount());
 		}

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

@@ -44,9 +44,9 @@ public interface ChangeTokenFormMapper extends BaseMapper<ChangeTokenForm> {
 
     List<Long> getNodeForm(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
 
-    List<ChangeNodeVO> getChangeNode(@Param("contractId") Long contractId,@Param("ids") List<Long> longs);
+    List<ChangeNodeVO> getChangeNode(@Param("contractId") Long contractId,@Param("ids") List<Long> longs,@Param("id") String ids);
 
-    List<ChangeFormVO2> selectForm(@Param("contractId") Long contractId,@Param("ids") List<Long> longs);
+    List<ChangeFormVO2> selectForm(@Param("contractId") Long contractId,@Param("ids") List<Long> longs,@Param("nodeId") Long nodeId);
 
     ChangeTokenFormVO detail(@Param("id") Long id);
 

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

@@ -92,16 +92,22 @@
         GROUP BY contract_form_id
     </select>
     <select id="getChangeNode" resultType="org.springblade.meter.vo.ChangeNodeVO">
-        select id,node_name,contract_picture,change_money,
+        select id,node_name,change_picture as contractPicture,change_money,
                 if(is_supplement = 1,'是','否') as isSupplementName
-        from s_meter_tree_contract where id in
+        from s_meter_tree_contract mtc
+        WHERE mtc.contract_id = #{contractId} and mtc.is_deleted = 0
+        and (select COUNT(1) from s_meter_tree_contract mtc2 WHERE contract_id = #{contractId} and mtc2.parent_id=mtc.id)=0
+        and (mtc.id in
         <foreach collection="ids" item="id" open="(" separator="," close=")">
             #{id}
         </foreach>
+         or FIND_IN_SET(mtc.parent_id , #{id}))
     </select>
     <select id="selectForm" resultType="org.springblade.meter.vo.ChangeFormVO2">
-        select id,form_number,form_name,current_price,contract_total,0 as currentChangeTotal,contract_total as change_total,
-                change_money as contractMoney, 0 as currentChangeMoney,change_money as changeMoney
+        select id,form_number,form_name,current_price,
+                IFNULL((select build_picture_total
+        from s_inventory_form_meter ifm
+        WHERE contract_id = #{contractId} and is_deleted = 0 and ifm.contract_form_id = cif.id and ifm.contract_meter_id = #{nodeId}),0) as contractTotal
         from s_contract_inventory_form cif
         where contract_id = #{contractId}
         and id in
@@ -125,7 +131,7 @@
           AND ctm.change_token_id = #{id}
     </select>
     <select id="getFormList" resultType="org.springblade.meter.vo.ChangeFormVO2">
-        select cif.id,cif.form_number,cif.form_name,cif.current_price,
+        select cif.id,cif.form_number,cif.form_name,cif.current_price,cti.contract_meter_id,
                cti.change_before_total as contractTotal,cti.change_total as currentChangeTotal,
                cti.change_after_total as changeTotal,cti.change_before_money as contractMoney,
                cti.change_money as currentChangeMoney,cti.change_after_money as changeMoney
@@ -137,7 +143,8 @@
         select *,
                (select dict_value from blade_dict where is_deleted = 0 and code = 'meter_change_type' and dict_key = ctf.change_type) as changeTypeName,
                CASE when approve_status = 0 then '未上报' when approve_status = 1 then '待审批' when approve_status = 2 then '已审批'
-                    else '已废除' end as approveStatusName
+                    else '已废除' end as approveStatusName,
+               0 as citeStatus
         from s_change_token_form ctf
         where contract_id = #{contractId}
         order by change_approval_date desc

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

@@ -59,4 +59,11 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
     void updateAllChildType(@Param("id") Long id,@Param("contractId") Long contractId,@Param("formType") Integer formType);
 
     void updateAllChildChapterNumber(@Param("id") Long id,@Param("contractId") Long contractId,@Param("chapterNumber") String chapterNumber);
+
+    Integer getNodeLockInfo(@Param("id") Long id,@Param("contractId") Long contractId);
+
+    Integer getNodeCiteInfo(@Param("id") Long id,@Param("contractId") Long contractId);
+
+    Integer getNodeChangeInfo(@Param("id") Long id,@Param("contractId") Long contractId);
+
 }

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

@@ -110,5 +110,26 @@
            order by sort
         ) x
     </select>
+    <select id="getNodeLockInfo" resultType="java.lang.Integer">
+        select count(1)
+        from s_contract_inventory_form
+        where contract_id = #{contractId} and is_deleted = 0 and is_lock=1 and (id = #{id} or FIND_IN_SET(#{id},ancestors) > 0)
+    </select>
+    <select id="getNodeCiteInfo" resultType="java.lang.Integer">
+        select count(1)
+        from s_inventory_form_meter
+        where contract_id = #{contractId} and is_deleted = 0
+          and contract_form_id in ( select id
+                      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="getNodeChangeInfo" resultType="java.lang.Integer">
+        select count(1)
+        from s_change_token_inventory
+        where contract_id = #{contractId} and is_deleted = 0
+          and contract_form_id in ( select id
+                      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>
 
 </mapper>

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

@@ -55,7 +55,7 @@ public interface IChangeTokenFormService extends BaseService<ChangeTokenForm> {
      */
     List<ChangeFormVO> addForm(ChangeTokenAddFormDTO dto);
 
-    List<ChangeFormVO2> selectForm(Long contractId,String ids);
+    List<ChangeFormVO2> selectForm(Long contractId,Long nodeId,String ids);
 
     List<ChangeNodeVO> getChangeNode(Long contractId,String ids);
 

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

@@ -38,7 +38,9 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -66,6 +68,10 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
     //变更令与合同清单中间表
     private final IChangeTokenInventoryService changeTokenInventoryService;
 
+    //合同计量单元与清单中间表
+
+    private final IInventoryFormMeterService inventoryFormMeterService;
+
 
     /**
      * 一键生成零号变更  统计每个清单节点当前分解量,设置进清单的划分数量
@@ -118,7 +124,10 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         BeanUtils.copyProperties(dto,form);
         //保存部位
         List<ChangeNodeVO> nodeList = dto.getNodeList();
+        List<ChangeFormVO2> formList = new ArrayList<>();
+        Map<Long, ChangeNodeVO> voMap = new HashMap<>();
         if (nodeList.size() != 0){
+            voMap = nodeList.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
             List<ChangeTokenMeter> meterList = nodeList.stream().map(l -> {
                 ChangeTokenMeter meter = new ChangeTokenMeter();
                 meter.setProjectId(dto.getProjectId());
@@ -126,12 +135,15 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 meter.setChangeTokenId(id);
                 meter.setContractMeterId(l.getId());
                 meter.setContractPicture(l.getContractPicture());
+                List<ChangeFormVO2> list = l.getFormList();
+                if (list != null && list.size() != 0){
+                    formList.addAll(list);
+                }
                 return meter;
             }).collect(Collectors.toList());
             changeTokenMeterService.saveBatch(meterList);
         }
         //保存清单,并计算总变更金额设置进变更令
-        List<ChangeFormVO2> formList = dto.getFormList();
         if (formList.size() != 0){
             List<ChangeTokenInventory> inventoryList = new ArrayList<>();
             BigDecimal big = new BigDecimal(0);
@@ -143,6 +155,23 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 inventory.setContractFormId(vo2.getId());
                 inventory.setChangeBeforeTotal(vo2.getContractTotal());
                 inventory.setChangeTotal(vo2.getCurrentChangeTotal());
+                if (vo2.getContractMeterId() == null){
+                    throw new ServiceException("未找到清单("+vo2.getFormName()+")的部位id");
+                }
+                //如果是负变更,判断当前节点下是否存在当前清单
+                if (vo2.getCurrentChangeTotal() < 0){
+                    //获取当前节点下当前清单的分解信息
+                    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)){
+                        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());
                 //计算变更后
                 inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal() + inventory.getChangeTotal());
                 inventory.setChangeBeforeMoney(vo2.getContractMoney());
@@ -202,13 +231,21 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
      * 新增-确认选择清单
      */
     @Override
-    public List<ChangeFormVO2> selectForm(Long contractId,String ids) {
+    public List<ChangeFormVO2> selectForm(Long contractId,Long nodeId,String ids) {
         List<ChangeFormVO2> vos = new ArrayList<>();
         if (StringUtils.isBlank(ids)){
             return vos;
         }
         List<Long> longs = Func.toLongList(ids);
-        vos = baseMapper.selectForm(contractId,longs);
+        vos = baseMapper.selectForm(contractId,longs,nodeId);
+        for (ChangeFormVO2 vo : vos) {
+            vo.setContractMeterId(nodeId);
+            vo.setCurrentChangeTotal(0);
+            vo.setChangeTotal(vo.getContractTotal());
+            vo.setContractMoney(vo.getCurrentPrice().multiply(new BigDecimal(vo.getContractTotal())));
+            vo.setCurrentChangeMoney(new BigDecimal(0));
+            vo.setChangeMoney(vo.getContractMoney());
+        }
         return vos;
     }
 
@@ -223,7 +260,7 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         }
         List<Long> longs = Func.toLongList(ids);
         //暂时使用循环单条查询
-        vos = baseMapper.getChangeNode(contractId,longs);
+        vos = baseMapper.getChangeNode(contractId,longs,ids);
         for (ChangeNodeVO vo : vos) {
             vo.setNodeUrl(middleMeterApplyService.getNodeDivide(vo.getId()));
         }
@@ -242,7 +279,10 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         List<ChangeNodeVO> nodeList = dto.getNodeList();
         //删除当前变更令下的部位
         changeTokenMeterService.deleteByTokenId(dto.getId());
+        List<ChangeFormVO2> formList = new ArrayList<>();
+        Map<Long, ChangeNodeVO> voMap = new HashMap<>();
         if (nodeList.size() != 0){
+            voMap = nodeList.stream().collect(Collectors.toMap(l -> l.getId(), l -> l));
             List<ChangeTokenMeter> meterList = nodeList.stream().map(l -> {
                 ChangeTokenMeter meter = new ChangeTokenMeter();
                 meter.setProjectId(dto.getProjectId());
@@ -255,7 +295,6 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
             changeTokenMeterService.saveBatch(meterList);
         }
         //保存清单,并计算总变更金额设置进变更令
-        List<ChangeFormVO2> formList = dto.getFormList();
         //删除当前变更令下的清单
         changeTokenInventoryService.deleteByTokenId(dto.getId());
         if (formList.size() != 0){
@@ -269,6 +308,21 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 inventory.setContractFormId(vo2.getId());
                 inventory.setChangeBeforeTotal(vo2.getContractTotal());
                 inventory.setChangeTotal(vo2.getCurrentChangeTotal());
+                if (vo2.getContractMeterId() == null){
+                    throw new ServiceException("未找到清单("+vo2.getFormName()+")的部位id");
+                }
+                //如果是负变更,判断当前节点下是否存在当前清单
+                if (vo2.getCurrentChangeTotal() < 0){
+                    //获取当前节点下当前清单的分解信息
+                    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)){
+                        throw new ServiceException(voMap.get(vo2.getContractMeterId()).getNodeName()+"部位下,未找到清单("+vo2.getFormName()+")的分解信息,不能负变更");
+                    }
+                }
+                //设置节点id
+                inventory.setContractMeterId(vo2.getContractMeterId());
                 //计算变更后
                 inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal() + inventory.getChangeTotal());
                 inventory.setChangeBeforeMoney(vo2.getContractMoney());
@@ -307,14 +361,23 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         //查询节点信息
         List<ChangeNodeVO> nodeList = baseMapper.getNodeList(vo.getContractId(),vo.getId());
         if (nodeList.size() != 0) {
-            for (ChangeNodeVO nodeVO : nodeList) {
-                nodeVO.setNodeUrl(middleMeterApplyService.getNodeDivide(nodeVO.getId()));
+            //查询出当前变更令下所有清单信息
+            List<ChangeFormVO2> formList = baseMapper.getFormList(vo.getContractId(),vo.getId());
+            if (formList.size() != 0) {
+                //按照部位分组
+                Map<Long, List<ChangeFormVO2>> map = formList.stream().collect(Collectors.groupingBy(ChangeFormVO2::getContractMeterId));
+                for (ChangeNodeVO nodeVO : nodeList) {
+                    List<ChangeFormVO2> vo2s = map.get(nodeVO.getId());
+                    nodeVO.setFormList(vo2s);
+                    nodeVO.setNodeUrl(middleMeterApplyService.getNodeDivide(nodeVO.getId()));
+                }
+            }else {
+                for (ChangeNodeVO nodeVO : nodeList) {
+                    nodeVO.setNodeUrl(middleMeterApplyService.getNodeDivide(nodeVO.getId()));
+                }
             }
             vo.setNodeList(nodeList);
         }
-        //查询清单信息
-        List<ChangeFormVO2> formList = baseMapper.getFormList(vo.getContractId(),vo.getId());
-        vo.setFormList(formList);
         //查询附件信息
         List<AttachmentForm> list = attachmentFormService.list(new LambdaQueryWrapper<AttachmentForm>()
                 .eq(AttachmentForm::getContractId, vo.getContractId())

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

@@ -336,11 +336,16 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
                 throw new ServiceException("增补清单必须为清单节点");
             }
         }
-        if (form.getIsFormNode() == 1) {
+        if (form.getIsFormNode() == 1 && form.getIsSupplement() == 0) {
             if (form.getBidPrice() == null || form.getContractTotal() == null) {
                 throw new ServiceException("清单节点必须填写:中标单价和合同数量");
             }
         }
+        if (form.getIsFormNode() == 1 && form.getIsSupplement() == 1) {
+            if (form.getCurrentPrice() == null) {
+                throw new ServiceException("增补节点必须填写:现行单价");
+            }
+        }
         if (StringUtils.isBlank(form.getFormNumber())){
             throw new ServiceException("清单编号不能为空");
         }
@@ -367,17 +372,26 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
                 throw new ServiceException("子节点的清单类型,必须与父节点的清单类型相同");
             }
         }
+        //如果为清单节点则统一设置变更后数据
+        if (form.getIsFormNode() == 1){
+            if (form.getIsSupplement() == 1){
+                form.setChangePrice(form.getCurrentPrice());
+                form.setContractTotal(0);
+                form.setChangeTotal(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.setNodeTier(parentNode.getNodeTier() + 1);
         //设置祖级节点
         form.setAncestors(parentNode.getAncestors()+","+parentNode.getId());
-        //如果不是根节点则设置层级
-//        if (parentNode.getNodeTier() != null) {
-//            int i = form.getFormNumber().split("-").length - 1;
-//            if (i != (parentNode.getNodeTier() + 1)){
-//                throw new ServiceException("清单编号规则错误,请修改后保存");
-//            }
-//            form.setNodeTier(i);
-//        }
         this.save(form);
     }
 
@@ -393,17 +407,25 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         if (nodeInfo.getIsLock() == 1){
             throw new ServiceException("当前节点已经被锁定不能修改");
         }
+        if (form.getIsFormNode() == 1){
+            if (form.getBidPrice() == null || form.getContractTotal() == null){
+                throw new ServiceException("清单节点必须填写中标单价和合同数量");
+            }
+        }
+        //判断是否已经被分解或者被变更,包括零号变更
+        Boolean isChange = this.nodeIsChange(nodeInfo);
+        if (isChange){
+            throw new ServiceException("当前节点已经被分解或者变更,不允许修改");
+        }
         //如果当前节点类型和修改后的节点类型相同,则不校验
         if (nodeInfo.getIsFormNode().equals(form.getIsFormNode())) {
             //相同则先判断修改后节点类型是否为清单类型
             if (form.getIsFormNode().equals(1)){
-                //判断是否已经被分解或者被变更,包括零号变更
-                Boolean isChange = this.nodeIsChange(nodeInfo);
                 //发生过变更,就去判断单价和数量。没被变更或者修改过,就不去判断单价和数量是否发生改变
                 if (isChange) {
                     //判断单价和数量是否发生改变
                     if (nodeInfo.getBidPrice() != null) {
-                        if (!nodeInfo.getBidPrice().equals(form.getBidPrice())) {
+                        if (nodeInfo.getBidPrice().compareTo(form.getBidPrice()) != 0) {
                             throw new ServiceException("当前节点已经做过分解或变更,不能修改中标单价");
                         }
                     }
@@ -427,8 +449,6 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
                     throw new ServiceException("当前节点下存在节点,不能修改为清单节点");
                 }
             }else {
-                //不为清单节点:判断当前节点是否被分解或者被变更,包括零号变更
-                Boolean isChange = this.nodeIsChange(nodeInfo);
                 if (isChange){
                     throw new ServiceException("当前节点已被分解或变更,不能修改为非清单节点");
                 }
@@ -436,6 +456,21 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
                 form.setChangeMoney(null);
             }
         }
+        //如果是清单节点,又没被引用,则重新计算变更相关字段
+        if (form.getIsFormNode() == 1 && !isChange){
+            form.setCurrentPrice(form.getBidPrice());
+            form.setChangePrice(form.getBidPrice());
+            if (form.getIsSupplement() == 1){
+                form.setContractTotal(0);
+                form.setChangeTotal(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())));
+            }
+        }
         //当前节点的清单类型是否被修改了,
         if (nodeInfo.getFormType() != form.getFormType()){
             //校验是否为二级节点,
@@ -476,6 +511,21 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
      */
     @Override
     public void delete(Long id,Long contractId) {
+        //判断当前节点和子节点是否被锁定
+        Integer total = baseMapper.getNodeLockInfo(id,contractId);
+        if (total > 0) {
+            throw new ServiceException("当前节点下有子节点已经被锁定,不能删除");
+        }
+        //判断当前节点和子节点是否被分解
+        total = baseMapper.getNodeCiteInfo(id,contractId);
+        if (total > 0) {
+            throw new ServiceException("当前节点下有子节点已经被分解,不能删除");
+        }
+        //判断当前节点和子节点是否被变更
+        total = baseMapper.getNodeChangeInfo(id,contractId);
+        if (total > 0) {
+            throw new ServiceException("当前节点下有子节点已经被变更,不能删除");
+        }
         baseMapper.updateNode(id,contractId);
     }