Просмотр исходного кода

中间计量申请,变更令编号与附件2

qianxb 1 год назад
Родитель
Сommit
4890c8443a
13 измененных файлов с 183 добавлено и 15 удалено
  1. 38 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterApplyVO2.java
  2. 4 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java
  3. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/AttachmentFormMapper.java
  4. 7 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/AttachmentFormMapper.xml
  5. 2 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.java
  6. 6 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml
  7. 7 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java
  8. 29 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  9. 5 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IAttachmentFormService.java
  10. 5 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java
  11. 7 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/AttachmentFormServiceImpl.java
  12. 22 5
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  13. 47 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

+ 38 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterApplyVO2.java

@@ -0,0 +1,38 @@
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.meter.entity.AttachmentForm;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @Param   用于下达变更
+ * @Author wangwl
+ * @Date 2024/1/2 14:44
+ **/
+@Data
+public class MiddleMeterApplyVO2 {
+    @ApiModelProperty(value = "中间计量申请id")
+    private Long id;
+
+    @ApiModelProperty(value = "中间计量申请下的清单id,逗号分隔")
+    private String formIds;
+
+    @ApiModelProperty(value = "合同段id")
+    private Long contractId;
+
+    @ApiModelProperty(value = "合同计量单元id")
+    private Long contractUnitId;
+
+    @ApiModelProperty(value = "业务日期")
+    private LocalDate businessDate;
+
+    @ApiModelProperty(value = "变更令编号")
+    private String changeTokenNumber;
+
+    @ApiModelProperty(value = "变更令id,逗号拼接")
+    private String changeTokenIds;
+
+}

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

@@ -63,10 +63,11 @@ public class MiddleMeterApplyController extends BladeController {
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
 			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
 			@ApiImplicitParam(name = "ids", value = "已经存在的清单id,逗号分隔", required = true),
-			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
+			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true),
+			@ApiImplicitParam(name = "id", value = "中间计量申请的id", required = true)
 	})
-	public R<List<ResolveInventoryVO>> addFormList(Long contractId ,Long contractPeriodId, Long nodeId ,String ids) {
-		List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(contractId,contractPeriodId,nodeId,ids);
+	public R<List<ResolveInventoryVO>> addFormList(Long id,Long contractId ,Long contractPeriodId, Long nodeId ,String ids) {
+		List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(id,contractId,contractPeriodId,nodeId,ids);
 		return R.data(vos);
 	}
 

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/AttachmentFormMapper.java

@@ -20,6 +20,8 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.AttachmentForm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.Set;
+
 /**
  * 附件表 Mapper 接口
  *
@@ -30,4 +32,6 @@ public interface AttachmentFormMapper extends BaseMapper<AttachmentForm> {
 
 
     void deleteByMasterId(@Param("masterId") Long masterId);
+
+    void deleteByMasterIds(@Param("ids") Set<Long> ids);
 }

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

@@ -23,6 +23,13 @@
         DELETE FROM s_attachment_form
         where master_id = #{masterId}
     </delete>
+    <delete id="deleteByMasterIds">
+        DELETE FROM s_attachment_form
+        where file_type = 2 and master_id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
 
 
 </mapper>

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

@@ -81,4 +81,6 @@ public interface ChangeTokenFormMapper extends BaseMapper<ChangeTokenForm> {
     List<ChangeFormVO2> getAllCollectForm(@Param("tokenId") Long id);
 
     void deleteCollectForm(@Param("tokenId")Long id);
+
+    List<MiddleMeterApply> getChangeMiddleTotal(@Param("contractId") Long contractId,@Param("tokenId") Long id);
 }

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

@@ -269,6 +269,12 @@
         from s_change_token_inventory cti
         where is_deleted = 0 and is_collect_form = 1 and change_token_id = #{tokenId}
     </select>
+    <select id="getChangeMiddleTotal" resultType="org.springblade.meter.entity.MiddleMeterApply">
+        select *
+        from s_middle_meter_apply
+        where is_deleted = 0 and contract_id = #{contractId} and
+            FIND_IN_SET(#{tokenId}, change_token_ids)
+    </select>
 
 
 </mapper>

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

@@ -62,7 +62,7 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     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);
+    List<Long> getNodeOtherFormId(@Param("middleId") Long id,@Param("contractId") Long contractId,@Param("contractPeriodId") Long contractPeriodId,@Param("nodeId") Long nodeId);
 
     BigDecimal getCurrentMeterMoney(@Param("contractId") Long contractId,@Param("contractPeriodId") Long contractPeriodId);
 
@@ -73,4 +73,10 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
     List<NodeSortVO> getAllNode(@Param("contractId") Long contractId);
 
     Set<ChangeTokenForm> getNodeToken(@Param("contractId") Long contractId,@Param("ids") List<Long> ids,@Param("nodeId") Long nodeId,@Param("bDate") String businessDate);
+
+    Set<Long> getMiddleIds(@Param("ids") List<Long> ids);
+
+    List<MiddleMeterApplyVO2> getAllAPPlyAndForm(@Param("ids") Set<Long> middleIds);
+
+    void batchUpdateMiddle(@Param("list") List<MiddleMeterApplyVO2> vo2s);
 }

+ 29 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -27,6 +27,16 @@
         <result column="picture_url" property="pictureUrl"/>
         <result column="calculate_formula" property="calculateFormula"/>
     </resultMap>
+    <update id="batchUpdateMiddle">
+        <foreach item="item" collection="list" separator=";">
+            UPDATE s_middle_meter_apply
+            <set>
+                change_token_number = #{item.changeTokenNumber},
+                change_token_ids = #{item.changeTokenIds},
+            </set>
+            where id = #{item.id}
+        </foreach>
+    </update>
     <select id="getFormList" resultType="org.springblade.meter.vo.ResolveInventoryVO">
         select id,form_number,form_name,current_price,contract_total,change_total,
                change_total as buildChangeTotal,
@@ -133,6 +143,9 @@
     <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}
+        <if test="middleId != null and middleId != ''">
+            and middle_meter_id != #{middleId}
+        </if>
     </select>
     <select id="getCurrentMeterMoney" resultType="java.math.BigDecimal">
         select ifnull(sum(meter_money),0)
@@ -173,6 +186,22 @@
             limit 1)
         </foreach>
     </select>
+    <select id="getMiddleIds" resultType="java.lang.Long">
+        select middle_meter_id from s_inventory_form_apply
+        where id in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
+    <select id="getAllAPPlyAndForm" resultType="org.springblade.meter.vo.MiddleMeterApplyVO2">
+        select mma.id,mma.contract_id,mma.contract_unit_id,mma.business_date,
+               (select GROUP_CONCAT(ifa.contract_form_id) from s_inventory_form_apply ifa where mma.id = ifa.middle_meter_id and ifa.is_deleted = 0) as formIds
+        from s_middle_meter_apply mma
+        where mma.id in
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </select>
 
 
 </mapper>

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

@@ -19,6 +19,8 @@ package org.springblade.meter.service;
 import org.springblade.meter.entity.AttachmentForm;
 import org.springblade.core.mp.base.BaseService;
 
+import java.util.Set;
+
 /**
  * 附件表 服务类
  *
@@ -27,6 +29,8 @@ import org.springblade.core.mp.base.BaseService;
  */
 public interface IAttachmentFormService extends BaseService<AttachmentForm> {
 
-
+    //删除根据masterId
     void deleteByMasterId(Long masterId);
+    //删除中间计量申请下的变更附件
+    void deleteByMasterIds(Set<Long> ids);
 }

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

@@ -26,6 +26,7 @@ import org.springblade.meter.vo.*;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 中间计量申请表 服务类
@@ -36,7 +37,7 @@ import java.util.List;
 public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply> {
 
 
-    List<ResolveInventoryVO> addFormList(Long contractId,Long contractPeriodId ,Long nodeId , String ids);
+    List<ResolveInventoryVO> addFormList(Long id,Long contractId,Long contractPeriodId ,Long nodeId , String ids);
 
     List<MeterInventoryVO> addResolveForm(Long contractId ,Long nodeId ,String ids);
 
@@ -60,6 +61,9 @@ public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply>
 
     BigDecimal getCurrentMeterMoney(MiddleMeterApply middleMeterApply);
 
+    //异步重新计算受变更影响的中间计量申请附件,ids为中间计量申请和清单表的id,需要重新获取
+    void asyncCalculateMiddleMeter(List<Long> ids);
+
     String test();
 
 }

+ 7 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/AttachmentFormServiceImpl.java

@@ -22,6 +22,8 @@ import org.springblade.meter.service.IAttachmentFormService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.Set;
+
 /**
  * 附件表 服务实现类
  *
@@ -36,4 +38,9 @@ public class AttachmentFormServiceImpl extends BaseServiceImpl<AttachmentFormMap
     public void deleteByMasterId(Long masterId) {
         baseMapper.deleteByMasterId(masterId);
     }
+
+    @Override
+    public void deleteByMasterIds(Set<Long> ids) {
+        baseMapper.deleteByMasterIds(ids);
+    }
 }

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

@@ -41,10 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -599,6 +596,13 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         List<InventoryFormMeter> list5 = new ArrayList<>();
         //清单与中间计量申请中间表集合,用于批量修改
         List<InventoryFormApply> list6 = new ArrayList<>();
+        //获取清单中所有影响的中间计量
+        String middle = allForm.stream().filter(l -> StringUtils.isNotBlank(l.getApplyIds())).map(l -> l.getApplyIds()).collect(Collectors.joining(","));
+        //用于修改中间计量申请中的变更编号,变更id,变更附件
+        List<Long> list7 = new ArrayList<>();
+        if (StringUtils.isNotBlank(middle)){
+            list7 = Func.toLongList(middle).stream().distinct().collect(Collectors.toList());
+        }
         for (ChangeFormVO2 vo2 : allForm) {
             //判断是否存在分解信息,如果不存在新增
             if (vo2.getNewestChangeTotal() == null){
@@ -665,6 +669,10 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
             .set(ChangeTokenForm::getCommandDate, LocalDateTime.now()));
         //异步重新计算节点金额,和修改施工图号,此方法放到最后,待所有操作成功后再执行
         meterTreeContractService.asyncCalculateNodeMoney(allNode);
+        //异步重新计算受变更影响的中间计量申请附件
+        if (list7.size() > 0) {
+            middleMeterApplyService.asyncCalculateMiddleMeter(list7);
+        }
     }
 
     /**
@@ -689,6 +697,13 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
             throw new ServiceException("清单:"+s+"在当前变更之后又发生过变更,请先撤销上一次变更");
         }
 
+        //双重验证,中间计量申请存在先删除变更清单,又添加回来的操作
+        List<MiddleMeterApply> middles = baseMapper.getChangeMiddleTotal(form.getContractId(),id);
+        if (middles.size() > 0){
+            MiddleMeterApply apply = middles.get(0);
+            throw new ServiceException("当前变更令已经修改中间计量申请-"+apply.getPeriodNumber()+"-"+apply.getEngineerDivide()+"-的数据,不能撤销变更,删除计量清单之后允许撤销");
+        }
+
         //判断是否修改过中间计量申请,修改过则不能撤销
         //获取当前变更令所有修改的中间计量申请的id
         String ids = baseMapper.getUpdateMiddleForm(id);
@@ -698,10 +713,11 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
             List<InventoryFormApply> list = inventoryFormApplyService.listByIds(longs);
             if (list.size() != 0){
                 String s = list.stream().map(InventoryFormApply::getFormName).distinct().collect(Collectors.joining(",", "[", "]"));
-                throw new ServiceException("当前变更令已经修改中间计量申请的清单:"+s+"的数据,不能撤销变更,删除计量之后允许撤销");
+                throw new ServiceException("当前变更令已经修改中间计量申请的清单:"+s+"的数据,不能撤销变更,删除计量清单之后允许撤销");
             }
         }
 
+
         //通过汇总项修改合同清单
         List<ChangeFormVO2> vo3 = baseMapper.getAllCollectForm(id);
         if (vo3.size() == 0){
@@ -745,5 +761,6 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         this.update(new LambdaUpdateWrapper<ChangeTokenForm>()
                 .eq(ChangeTokenForm::getId,id)
                 .set(ChangeTokenForm::getCommandStatus,0));
+
     }
 }

+ 47 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -33,6 +33,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.utils.ForestNodeMerger;
 import org.springblade.meter.vo.*;
 import org.springframework.beans.BeanUtils;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -71,7 +72,7 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
      * 添加清单
      */
     @Override
-    public List<ResolveInventoryVO> addFormList(Long contractId,Long contractPeriodId,Long nodeId ,String ids) {
+    public List<ResolveInventoryVO> addFormList(Long id,Long contractId,Long contractPeriodId,Long nodeId ,String ids) {
         //获取当前节点下关联的清单,如果没有直接返回
         List<ResolveInventoryVO> vos = new ArrayList<>();
         List<Long> list = formMeterService.getNodeAllForm(nodeId);
@@ -79,7 +80,7 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
             return vos;
         }
         //获取当前计量期,当前节点下其他申请所包含的清单
-        List<Long> formIds = baseMapper.getNodeOtherFormId(contractId,contractPeriodId,nodeId);
+        List<Long> formIds = baseMapper.getNodeOtherFormId(id,contractId,contractPeriodId,nodeId);
         if (formIds.size() != 0){
           list.removeAll(formIds);
         }
@@ -195,8 +196,8 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
      */
     @Override
     public MiddleMeterTokenVO getNodeToken(Long contractId,Long nodeId, String formIds, String businessDate) {
-        if (nodeId == null || StringUtils.isBlank(formIds) || StringUtils.isBlank(businessDate)){
-            throw new ServiceException("请求参数错误,请检查是否有节点id,业务日期,和计量清单");
+        if (contractId == null || nodeId == null || StringUtils.isBlank(businessDate)){
+            throw new ServiceException("请求参数错误,请检查是否有节点id,业务日期");
         }
         MiddleMeterTokenVO vo = new MiddleMeterTokenVO();
         //当前没有清单就没有变更令
@@ -458,6 +459,48 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         return baseMapper.getCurrentMeterMoney(middleMeterApply.getContractId(),middleMeterApply.getContractPeriodId());
     }
 
+    /**
+     * 异步重新计算受变更影响的中间计量申请附件,ids为中间计量申请和清单表的id,需要重新获取
+     * @param ids
+     */
+    @Override
+    @Transactional
+    @Async
+    public void asyncCalculateMiddleMeter(List<Long> ids) {
+        //等待一秒
+        try {
+            Thread.sleep(1000L);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        //根据中间表id获取中间计量申请表id,并且去重
+        Set<Long> middleIds = baseMapper.getMiddleIds(ids);
+        //获取所有的中间计量申请,并且携带所有关联的中间表的清单ids
+        List<MiddleMeterApplyVO2> vo2s = baseMapper.getAllAPPlyAndForm(middleIds);
+        //删除所有id的变更附件
+        attachmentFormService.deleteByMasterIds(middleIds);
+        //调用方法获取最新的变更编号,变更令,附件信息
+        List<AttachmentForm> fs = new ArrayList<>();
+        for (MiddleMeterApplyVO2 vo2 : vo2s) {
+            MiddleMeterTokenVO vo = this.getNodeToken(vo2.getContractId(), vo2.getContractUnitId(), vo2.getFormIds(), vo2.getBusinessDate().toString());
+            vo2.setChangeTokenNumber(vo.getChangeTokenNumber());
+            vo2.setChangeTokenIds(vo.getChangeTokenIds());
+            if (vo.getFiles() != null){
+                List<AttachmentForm> files = vo.getFiles();
+                for (AttachmentForm file : files) {
+                    file.setMasterId(vo2.getId());
+                    fs.add(file);
+                }
+            }
+        }
+        //批量修改变更编号,变更令
+        baseMapper.batchUpdateMiddle(vo2s);
+        //批量新增附件信息
+        if (fs.size() > 0) {
+            attachmentFormService.saveBatch(fs);
+        }
+    }
+
     @Override
     public String test() {
         Long contractId = 1612329251049537537L;