浏览代码

Merge remote-tracking branch 'origin/master' into master

yangyj 1 年之前
父节点
当前提交
6bddb79b01
共有 14 个文件被更改,包括 270 次插入121 次删除
  1. 2 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/MessageWarning.java
  2. 38 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java
  3. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApply.java
  4. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApplyTask.java
  5. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMeter.java
  6. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java
  7. 8 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java
  8. 70 13
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  9. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  10. 2 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.xml
  11. 13 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  12. 5 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java
  13. 103 100
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeContractServiceImpl.java
  14. 8 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

+ 2 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/MessageWarning.java

@@ -63,5 +63,7 @@ public class MessageWarning extends BaseEntity {
     @ApiModelProperty("创建人")
     private String createUserName;
 
+    @ApiModelProperty("任务id(超时绑定)")
+    private Long taskId;
 
 }

+ 38 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java

@@ -16,16 +16,26 @@
  */
 package org.springblade.meter.entity;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.core.tool.utils.Func;
 
 /**
  * 中期支付证书实体类
@@ -109,6 +119,34 @@ public class InterimPayCertificate extends BaseEntity {
     @ApiModelProperty(value = "审批状态,0未上报,1待审批,2已审批")
     private Integer approveStatus;
 
+    /**
+     * 原始PDF地址
+     */
+    @ApiModelProperty(value = "原始PDF地址")
+    private String rawUrl;
+
+    /**
+     * 每份表格独立的PDF地址
+     */
+    @ApiModelProperty(value = "每份表格独立的PDF地址")
+    private String fileUrlList;
 
+    @TableField(exist = false)
+    private List<Map<String,String>> urlListData = new ArrayList<>();
+    public List<Map<String,String>> getUrlListData() {
+        if(fileUrlList!=null && StringUtils.isNotEmpty(fileUrlList)){
+            JSONObject data = JSONObject.parseObject(this.fileUrlList);
+            for(String key:data.keySet()){
+                Map<String,String> dataV=new HashMap<String,String>();
+                dataV.put("title",key);
+                dataV.put("url",data.getString(key));
+                urlListData.add(dataV);
+            }
+        }
+        return urlListData;
+    }
 
+    public void setUrlListData(List<Map<String,String>> urlListData) {
+        this.urlListData = urlListData;
+    }
 }

+ 6 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApply.java

@@ -108,4 +108,10 @@ public class InventoryFormApply extends BaseEntity {
     @ApiModelProperty(value = "审批状态,0未上报,1待审批,2已审批,3已废除")
     private Integer approveStatus;
 
+    @ApiModelProperty(value = "最高支付比例")
+    private Integer upPayRatio;
+
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal PayMoney;
+
 }

+ 6 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApplyTask.java

@@ -91,4 +91,10 @@ public class InventoryFormApplyTask extends BaseEntity {
     @ApiModelProperty(value = "审批状态,0未上报,1待审批,2已审批,3已废除")
     private Integer approveStatus;
 
+    @ApiModelProperty(value = "最高支付比例")
+    private Integer upPayRatio;
+
+    @ApiModelProperty(value = "支付金额")
+    private BigDecimal PayMoney;
+
 }

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

@@ -81,4 +81,7 @@ public class InventoryFormMeter extends BaseEntity {
     @ApiModelProperty(value = "最高支付比例")
     private Integer upPayRatio;
 
+    @ApiModelProperty(value = "最高支付金额")
+    private BigDecimal upPayMoney;
+
 }

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

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

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

@@ -64,5 +64,13 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "清单合同变更后数量")
     private BigDecimal contractChangeAllTotal;
 
+    @ApiModelProperty(value = "最高支付比例")
+    private Integer upPayRatio;
+
+    @ApiModelProperty(value = "最高支付金额")
+    private BigDecimal upPayMoney;
+
+    @ApiModelProperty(value = "其他期支付金额")
+    private BigDecimal otherPayMoney;
 
 }

+ 70 - 13
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -23,6 +23,7 @@ import org.springblade.archive.feign.ArchiveExpertConclusionClient;
 import org.springblade.business.dto.*;
 import org.springblade.business.entity.*;
 import org.springblade.business.service.*;
+import org.springblade.business.service.impl.MessageWarningServiceImpl;
 import org.springblade.business.utils.StringSPUtils;
 import org.springblade.business.vo.*;
 import org.springblade.common.constant.ClientIdConstant;
@@ -52,6 +53,7 @@ import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.producer.bean.PushMessage;
 import org.springblade.resource.feign.CommonFileClient;
 import org.springblade.resource.feign.NewISmsClient;
+import org.springblade.system.cache.ParamCache;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.user.dto.UserDTO;
 import org.springblade.system.user.entity.User;
@@ -59,6 +61,7 @@ import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
@@ -96,6 +99,7 @@ public class TaskController extends BladeController {
     private final IUserClient userClient;
     private final ArchiveAutoClient archiveClient;
     private final ArchiveExpertConclusionClient conclusionClient;
+    private final MessageWarningServiceImpl messageWarningServiceImpl;
 
     /**
      * 记录短信验证码超时时间
@@ -669,10 +673,10 @@ public class TaskController extends BladeController {
                                     //如果当前账户已经存在,则代表账号已经注册,直接跳过当前
                                     R<User> r = userClient.userByAccount(AuthUtil.getTenantId(), dto.getAccount());
                                     if (r.getData() != null && r.getData().getId() != null) {
-                                        if (expertIds.length() == 0){
+                                        if (expertIds.length() == 0) {
                                             expertIds.append(r.getData().getId());
-                                        }else {
-                                            expertIds.append(","+r.getData().getId());
+                                        } else {
+                                            expertIds.append("," + r.getData().getId());
                                         }
                                         continue;
                                     }
@@ -706,10 +710,10 @@ public class TaskController extends BladeController {
                                     if (booleanR.getData() == null || !booleanR.isSuccess()) {
                                         throw new ServiceException(booleanR.getMsg());
                                     }
-                                    if (expertIds.length() == 0){
+                                    if (expertIds.length() == 0) {
                                         expertIds.append(id);
-                                    }else {
-                                        expertIds.append(","+id);
+                                    } else {
+                                        expertIds.append("," + id);
                                     }
                                 }
                                 //修改档案类型
@@ -722,11 +726,11 @@ public class TaskController extends BladeController {
                                     }
                                 }
                                 //创建报表基本信息,报表中会自动创建评分基础信息
-                                R r = conclusionClient.saveBaseTableInfo(Long.parseLong(task.getProjectId()), task.getAttachmentPdfUrl(),task.getId(),expertIds.toString());
-                                if (r == null ){
+                                R r = conclusionClient.saveBaseTableInfo(Long.parseLong(task.getProjectId()), task.getAttachmentPdfUrl(), task.getId(), expertIds.toString());
+                                if (r == null) {
                                     throw new ServiceException("调用档案服务失败");
                                 }
-                                if (!"保存成功".equals(r.getData())){
+                                if (!"保存成功".equals(r.getData())) {
                                     throw new ServiceException(r.getMsg());
                                 }
                             }
@@ -808,7 +812,7 @@ public class TaskController extends BladeController {
     @PostMapping("/getArchiveFileTaskPdfs")
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "批量审批-获取档案审批任务对应业务数据的pdf信息", notes = "传入任务id,封装成taskIds,字符串逗号分割拼接")
-    public R<List<ArchiveFileTaskPDFVO>> getArchiveFileTaskPdfs(@RequestParam String taskIds,@RequestParam Integer type) {
+    public R<List<ArchiveFileTaskPDFVO>> getArchiveFileTaskPdfs(@RequestParam String taskIds, @RequestParam Integer type) {
         //普通任务
         if (type == 1) {
             if (StringUtils.isNotEmpty(taskIds)) {
@@ -827,7 +831,7 @@ public class TaskController extends BladeController {
                     return R.data(collect);
                 }
             }
-        }else if (type == 2){
+        } else if (type == 2) {
             //验收任务
             List<ArchiveFileTaskPDFVO> vos = jdbcTemplate.query("select id,task_name as fileName,attachment_pdf_url as pdfUrl from u_task where approval_type = 4 and id in(" + taskIds + ")", new BeanPropertyRowMapper<>(ArchiveFileTaskPDFVO.class));
             return R.data(vos);
@@ -1587,14 +1591,67 @@ public class TaskController extends BladeController {
     @PostMapping("/reSigningEVisa")
     @ApiOperationSupport(order = 3)
     @ApiOperation(value = "任务管理-一键重签", notes = "传入taskIds、下拉框的contractId、projectId")
-    public R<Object> reSigningEVisa(@RequestBody reSigningEVisaDTO dto ,HttpServletRequest request) {
+    public R<Object> reSigningEVisa(@RequestBody reSigningEVisaDTO dto, HttpServletRequest request) {
         if (StringUtils.isBlank(dto.getTaskIds())) {
             return R.fail("请选择一条记录");
         }
         String header = request.getHeader("Blade-Auth");
-        taskService.reSigningEVisa(dto.getClassifyType(),dto.getTaskIds(), dto.getContractId(), dto.getProjectId(),dto.getType(), header);
+        taskService.reSigningEVisa(dto.getClassifyType(), dto.getTaskIds(), dto.getContractId(), dto.getProjectId(), dto.getType(), header);
         return R.success("任务已经成功提交重签,请耐心等待!");
     }
 
+    /**
+     * 任务超时提示信息
+     */
+    //@Scheduled(cron = "0 0 3 * * ?")
+    //@Scheduled(cron = "0 */1 * * * ?")
+    public void TaskTimeoutTips() {
+        String key = "task.time.out";
+        String value = ParamCache.getValue(key);
+        if (ObjectUtil.isNotEmpty(value) && value.equals("on")) {
+            String toDay = DateUtil.format(new Date(), "yyyy-MM-dd");
+            List<Task> taskList = taskService.getBaseMapper().selectList(Wrappers.<Task>lambdaQuery()
+                    .select(Task::getTaskName, Task::getContractId, Task::getProjectId, Task::getProcessInstanceId, Task::getId)
+                    .eq(Task::getStatus, 1)
+                    .ge(Task::getStartTime, "2024-02-01")
+                    .lt(Task::getEndTime, toDay)
+            );
+
+            List<MessageWarning> messageWarningList = new ArrayList<>();
+            if (taskList.size() > 0) {
+
+                List<String> processInstanceIds = taskList.stream().map(Task::getProcessInstanceId).collect(Collectors.toList());
+                Map<String, List<TaskParallel>> collect = taskParallelService.getBaseMapper().selectList(Wrappers.<TaskParallel>lambdaQuery()
+                        .select(TaskParallel::getTaskUser, TaskParallel::getProcessInstanceId)
+                        .in(TaskParallel::getProcessInstanceId, processInstanceIds)
+                        .eq(TaskParallel::getStatus, 1)
+                ).stream().collect(Collectors.groupingBy(TaskParallel::getProcessInstanceId));
+
+                for (Task task : taskList) {
+                    List<TaskParallel> orDefault = collect.getOrDefault(task.getProcessInstanceId(), null);
+                    if (orDefault != null) {
+                        for (TaskParallel taskParallel : orDefault) {
+                            MessageWarning messageWarning = new MessageWarning();
+                            messageWarning.setId(SnowFlakeUtil.getId());
+                            messageWarning.setProjectId(Long.parseLong(task.getProjectId()));
+                            messageWarning.setContractId(Long.parseLong(task.getContractId()));
+                            messageWarning.setType(1);
+                            messageWarning.setTime(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
+                            messageWarning.setContent("你有一条待办任务【" + task.getTaskName() + "】已超过规定审批时间,请尽快去审批签认");
+                            messageWarning.setPushUser(Long.parseLong(taskParallel.getTaskUser()));
+                            messageWarning.setTaskId(task.getId());
+                            messageWarningList.add(messageWarning);
+                        }
+                    }
+                }
+            }
+
+            if (messageWarningList.size() > 0) {
+                //TODO
+
+                messageWarningServiceImpl.saveBatch(messageWarningList, 1000);
+            }
+        }
+    }
 
 }

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

@@ -43,10 +43,12 @@ import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.feign.ArchiveFileTaskClient;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractRelationJlyz;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.feign.FormulaClient;
 import org.springblade.manager.vo.ReportResult;
 import org.springblade.meter.dto.*;
 import org.springblade.meter.entity.*;
+import org.springblade.meter.mapper.MaterialStartStatementMapper;
 import org.springblade.meter.mapper.MiddleMeterApplyMapper;
 import org.springblade.meter.service.IMaterialStartStatementService;
 import org.springblade.meter.service.impl.*;
@@ -2771,7 +2773,7 @@ public class TaskController extends BladeController {
                 }
             },(v1,v2)->v1,LinkedHashMap::new));
             String upSql = "update "+REPORT_TYPE[this.type]+" set raw_url=?,file_url_list=? where id="+this.id;
-            jdbcTemplate.update(upSql,this.pdfUrl ,JSON.toJSONString(fileListMap));
+            jdbcTemplate.update(upSql,this.pdfUrl , JSON.toJSONString(fileListMap));
             return  this.pdfUrl;
         }
 

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

@@ -23,6 +23,8 @@
         <result column="print_date" property="printDate"/>
         <result column="calculate_date" property="calculateDate"/>
         <result column="pay_money" property="payMoney"/>
+        <result column="raw_url" property="rawUrl"/>
+        <result column="file_url_list" property="fileUrlList" />
     </resultMap>
     <select id="getById" resultType="org.springblade.meter.vo.InterimPayCertificateVO">
         select * from s_interim_pay_certificate

+ 13 - 3
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -51,13 +51,19 @@
         select id,form_number,form_name,current_price,change_total as contractChangeAllTotal,
                IF (cif.build_change_total is null ,0,1) as isCreateDivide,
                (select is_over_meter from m_contract_info mci WHERE id = #{contractId}) as isContractOver,
+                (select up_pay_ratio from s_inventory_form_meter where is_deleted = 0
+                and contract_meter_id = #{nodeId} and contract_form_id = cif.id) as upPayRatio,
+                (select up_pay_money from s_inventory_form_meter where is_deleted = 0
+                and contract_meter_id = #{nodeId} and contract_form_id = cif.id) as upPayMoney,
                IFNULL((select sum(change_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 change_total,
                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_meter_id = #{nodeId} and contract_form_id = cif.id),0)) as allMeterTotal
+                            and contract_meter_id = #{nodeId} and contract_form_id = cif.id),0)) as allMeterTotal,
+                (IFNULL((select sum(pay_money) from s_inventory_form_apply where is_deleted = 0
+                and contract_meter_id = #{nodeId} and contract_form_id = cif.id),0)) as otherPayMoney
         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=")">
@@ -121,7 +127,7 @@
     </select>
     <select id="getForm" resultType="org.springblade.meter.vo.MeterInventoryVO">
         select ifa.id as taskDetailId,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.change_build_picture_total as changeTotal,ifa.up_pay_ratio as upPayRatio,
                ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
                ifa.current_meter_money as currentMeterMoney,
                (select cif.change_total  from s_contract_inventory_form cif where cif.id = ifa.contract_form_id ) as contractChangeAllTotal,
@@ -130,7 +136,11 @@
                (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 and id != ifa.id),0)) as otherMeterTotal,
                (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
+                      and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id),0)) as allMeterTotal,
+               (IFNULL((select sum(pay_money) from s_inventory_form_apply where is_deleted = 0
+                      and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id),0)) as otherPayMoney,
+               (select up_pay_money from s_inventory_form_meter ifm where ifm.is_deleted = 0
+                      and ifm.contract_meter_id = #{nodeId} and ifm.contract_form_id = ifa.contract_form_id) as upPayMoney
         from s_inventory_form_apply ifa
         where ifa.contract_id = #{contractId} and ifa.is_deleted = 0
         AND ifa.middle_meter_id = #{id}

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

@@ -101,6 +101,9 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
             if (vo.getBuildPictureTotal() == null){
                 throw new ServiceException("请填写施工图数量");
             }
+            if (vo.getUpPayRatio() == null){
+                throw new ServiceException("请填写最高支付比例");
+            }
             //校验当前节点下当前清单,是否在变更令中变更,或计量中计量
             if (vo.getCiteStatus() == 0 && formIsChange(meterId,vo.getContractFormId())){
                 throw new ServiceException("清单["+vo.getFormName()+"]已经变更或计量,请刷新页面");
@@ -108,6 +111,7 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
             //统计
             vo.setBuildPictureMoney(vo.getCurrentPrice().multiply(vo.getBuildPictureTotal()));
             vo.setChangeBuildPictureMoney(vo.getCurrentPrice().multiply(vo.getChangeBuildPictureTotal()));
+            vo.setUpPayMoney(vo.getChangeBuildPictureMoney().multiply(new BigDecimal(vo.getUpPayRatio()).divide(new BigDecimal(100))));
             b1 = b1.add(vo.getBuildPictureMoney());
             b2 = b2.add(vo.getChangeBuildPictureMoney());
             //修改,如果是已经被引用则跳过
@@ -119,6 +123,7 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
                        .set(InventoryFormMeter::getBuildPictureMoney,vo.getBuildPictureMoney())
                        .set(InventoryFormMeter::getChangeBuildPictureMoney,vo.getChangeBuildPictureMoney())
                        .set(InventoryFormMeter::getUpPayRatio,vo.getUpPayRatio())
+                       .set(InventoryFormMeter::getUpPayMoney,vo.getUpPayMoney())
                );
             }
         }

+ 103 - 100
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeContractServiceImpl.java

@@ -127,7 +127,10 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
         /*获取meterTreeProjects差集*/
         List<MeterTreeProject> difference = meterTreeProjects.stream()
                 .filter(project -> meterTreeContracts.stream()
-                        .noneMatch(contract -> contract.getSourceNodeId().equals(project.getId())))
+                        .noneMatch(contract -> contract != null
+                                && ObjectUtil.isNotEmpty(contract.getSourceNodeId())
+                                && ObjectUtil.isNotEmpty(project.getId())
+                                && contract.getSourceNodeId().equals(project.getId())))
                 .collect(Collectors.toList());
 
         /*原始数据类型*/
@@ -999,7 +1002,7 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
         Map<String, MeterTreeContract> rootNodeChildMap = new HashMap<>();
         try {
             rootNodeChildMap = rootNodeChild.stream().collect(Collectors.toMap(MeterTreeContract::getNodeCode, Function.identity()));
-        }catch (IllegalStateException e){
+        } catch (IllegalStateException e) {
             throw new ServiceException("树节点的工程编号存在重复,请检查后再重新导入");
         }
         //获取所有子节点id
@@ -1078,76 +1081,76 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                 for (Map<String, String> map : map6) {
                     MeterTreeContract node = map7.get(map.get("节点编号"));
                     //判断是否已经存在于合同段
-                    if (node == null){
-                        map.put("id",SnowFlakeUtil.getId()+"");
-                        map.put("status",0+"");
-                    }else {
-                        map.put("id",node.getId()+"");
-                        map.put("parentId",node.getParentId()+"");
-                        map.put("ancestors",node.getAncestor());
-                        map.put("status",1+"");
+                    if (node == null) {
+                        map.put("id", SnowFlakeUtil.getId() + "");
+                        map.put("status", 0 + "");
+                    } else {
+                        map.put("id", node.getId() + "");
+                        map.put("parentId", node.getParentId() + "");
+                        map.put("ancestors", node.getAncestor());
+                        map.put("status", 1 + "");
                     }
                     //保存每个首节点位置
-                    if (map.get("节点编号").split("-").length == 2){
+                    if (map.get("节点编号").split("-").length == 2) {
                         firstNode.add(map6.indexOf(map));
                     }
                 }
                 int size = firstNode.size();
-                if (size == 0){
+                if (size == 0) {
                     throw new ServiceException("未找到首节点,请检查后重新导入");
                 }
                 //根据首节点分成多个数组
                 List<List<Map<String, String>>> lists = new ArrayList<>();
                 //只有一个节点,直接单独处理
-                if (size == 1){
+                if (size == 1) {
                     lists.add(map6);
-                }else {
+                } else {
                     //规则是首节点下跟着子节点
-                    for (int i = 0; i < size-1; i++) {
-                        lists.add(map6.subList(firstNode.get(i),firstNode.get(i+1)));
+                    for (int i = 0; i < size - 1; i++) {
+                        lists.add(map6.subList(firstNode.get(i), firstNode.get(i + 1)));
                     }
-                    lists.add(map6.subList(firstNode.get(size-1),map6.size()));
+                    lists.add(map6.subList(firstNode.get(size - 1), map6.size()));
                 }
-                Map<String,Map<String, String>> lastMap = new HashMap<>();
-                Map<String,Map<String, String>> thisMap = new HashMap<>();
+                Map<String, Map<String, String>> lastMap = new HashMap<>();
+                Map<String, Map<String, String>> thisMap = new HashMap<>();
                 //循环保存
                 for (List<Map<String, String>> list : lists) {
                     Map<String, String> form = list.get(0);
                     String number = form.get("节点编号");
                     if (form.get("status").equals("0")) {
-                        form.put("parentId",treeContract.getId()+"");
-                        form.put("ancestors",treeContract.getAncestor()+","+treeContract.getId());
+                        form.put("parentId", treeContract.getId() + "");
+                        form.put("ancestors", treeContract.getAncestor() + "," + treeContract.getId());
                     }
-                    lastMap.put(number,form);
+                    lastMap.put(number, form);
                     //循环判断层级
                     for (Map<String, String> fo : list) {
                         String num = fo.get("节点编号");
                         int i = num.split("-").length - 2;
-                        fo.put("nodeTier",i+"");
+                        fo.put("nodeTier", i + "");
                         //设置父编号
                         if (i != 0) {
                             fo.put("parentNumber", num.substring(0, num.lastIndexOf("-")));
                         }
                     }
-                    Map<String, List<Map<String, String>>> listMap = list.parallelStream().collect(Collectors.groupingBy(l->l.get("nodeTier")));
+                    Map<String, List<Map<String, String>>> listMap = list.parallelStream().collect(Collectors.groupingBy(l -> l.get("nodeTier")));
                     //根据层级循环,为每一层设置数据
                     for (int i = 1; i < listMap.size(); i++) {
-                        List<Map<String, String>> forms = listMap.get(i+"");
+                        List<Map<String, String>> forms = listMap.get(i + "");
                         //如果当前层级不存在数据直接跳出
-                        if (forms == null || forms.size() == 0){
+                        if (forms == null || forms.size() == 0) {
                             break;
                         }
                         for (Map<String, String> f : forms) {
                             Map<String, String> fo = lastMap.get(f.get("parentNumber"));
-                            if (fo == null){
-                                throw new ServiceException("节点:"+f.get("工程名称")+",未找到上级节点");
+                            if (fo == null) {
+                                throw new ServiceException("节点:" + f.get("工程名称") + ",未找到上级节点");
                             }
                             if (f.get("status").equals("0")) {
                                 //设置父id和祖级id
-                                f.put("parentId",fo.get("id")+"");
-                                f.put("ancestors",fo.get("ancestors")+","+fo.get("id"));
+                                f.put("parentId", fo.get("id") + "");
+                                f.put("ancestors", fo.get("ancestors") + "," + fo.get("id"));
                             }
-                            thisMap.put(f.get("节点编号"),f);
+                            thisMap.put(f.get("节点编号"), f);
                         }
                         lastMap = thisMap;
                         thisMap = new HashMap<>();
@@ -1157,16 +1160,16 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                 //判断是否有节点没有找到上级节点
                 StringBuilder sb = new StringBuilder();
                 for (Map<String, String> excel : map6) {
-                    if (StringUtils.isBlank(excel.get("parentId"))){
-                        sb.append(excel.get("工程名称")+",");
+                    if (StringUtils.isBlank(excel.get("parentId"))) {
+                        sb.append(excel.get("工程名称") + ",");
                     }
                 }
-                if (sb.length() > 0){
-                    throw new ServiceException("以下工程名称:"+sb.deleteCharAt(sb.length()-1)+"。未找到上级节点,请修改excel后重新导入");
+                if (sb.length() > 0) {
+                    throw new ServiceException("以下工程名称:" + sb.deleteCharAt(sb.length() - 1) + "。未找到上级节点,请修改excel后重新导入");
                 }
 
                 List<Map<String, String>> map5 = projectCodeGroup.stream().filter(l -> StringUtils.isNotBlank(l.get("清单编号"))).collect(Collectors.toList());
-                map5.stream().forEach(l->l.put("id",SnowFlakeUtil.getId()+""));
+                map5.stream().forEach(l -> l.put("id", SnowFlakeUtil.getId() + ""));
                 map6.addAll(map5);
                 projectCodeGroup = map6;
 
@@ -1313,86 +1316,86 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                             }
                         }
 
-                            for (Map<String, String> map : rows) {
-                                String formCode = map.get("清单编号");
-                                if (formCode.isEmpty()) {
-                                    continue;
-                                }
-                                String buildPictureTotal = map.get("施工图数量");
+                        for (Map<String, String> map : rows) {
+                            String formCode = map.get("清单编号");
+                            if (formCode.isEmpty()) {
+                                continue;
+                            }
+                            String buildPictureTotal = map.get("施工图数量");
 
-                                /*获取原始清单详细详细*/
-                                ContractInventoryForm contractInventoryForm = ysContractInventoryFormMapsByFormNumber.getOrDefault(formCode, null);
-                                if (contractInventoryForm != null) {
-                                    //相同清单编号,则同步累加
-                                    if (contractInventoryForm.getFormNumber().equals(formCode)) {
-                                        /*获取到对应的中间关联清单信息*/
-                                        String key = contractInventoryForm.getId() + ":" + orDefault.getId();
-                                        InventoryFormMeter formUpdate = inventoryFormMeterMapsByFormIdAndMeterId.getOrDefault(key, null);
-                                        if (formUpdate != null) {
-
-                                            /*判断是否被引用、变更*/
-                                            ChangeTokenInventory orDefault1 = changeTokenInventoryMapsByFormIdAndMeterId.getOrDefault(key, null);
-                                            InventoryFormApply orDefault2 = inventoryFormApplyMapsByFormIdAndMeterId.getOrDefault(key, null);
-                                            if (orDefault1 != null || orDefault2 != null) {
-                                                continue;
-                                            }
+                            /*获取原始清单详细详细*/
+                            ContractInventoryForm contractInventoryForm = ysContractInventoryFormMapsByFormNumber.getOrDefault(formCode, null);
+                            if (contractInventoryForm != null) {
+                                //相同清单编号,则同步累加
+                                if (contractInventoryForm.getFormNumber().equals(formCode)) {
+                                    /*获取到对应的中间关联清单信息*/
+                                    String key = contractInventoryForm.getId() + ":" + orDefault.getId();
+                                    InventoryFormMeter formUpdate = inventoryFormMeterMapsByFormIdAndMeterId.getOrDefault(key, null);
+                                    if (formUpdate != null) {
 
-                                            //累加
-                                            BigDecimal bigDecimal = this.parseString(buildPictureTotal);
-                                            formUpdate.setBuildPictureTotal(formUpdate.getBuildPictureTotal().add(bigDecimal));
+                                        /*判断是否被引用、变更*/
+                                        ChangeTokenInventory orDefault1 = changeTokenInventoryMapsByFormIdAndMeterId.getOrDefault(key, null);
+                                        InventoryFormApply orDefault2 = inventoryFormApplyMapsByFormIdAndMeterId.getOrDefault(key, null);
+                                        if (orDefault1 != null || orDefault2 != null) {
+                                            continue;
+                                        }
 
-                                            formUpdate.setChangeBuildPictureTotal(formUpdate.getBuildPictureTotal());
+                                        //累加
+                                        BigDecimal bigDecimal = this.parseString(buildPictureTotal);
+                                        formUpdate.setBuildPictureTotal(formUpdate.getBuildPictureTotal().add(bigDecimal));
 
-                                            formUpdate.setBuildPictureMoney(formUpdate.getBuildPictureTotal().multiply(contractInventoryForm.getChangePrice())); //数量*变更后单价
+                                        formUpdate.setChangeBuildPictureTotal(formUpdate.getBuildPictureTotal());
 
-                                            formUpdate.setChangeBuildPictureMoney(formUpdate.getBuildPictureMoney());
+                                        formUpdate.setBuildPictureMoney(formUpdate.getBuildPictureTotal().multiply(contractInventoryForm.getChangePrice())); //数量*变更后单价
 
-                                            /*更改数量*/
-                                            resultFormListUpdate.add(formUpdate);
+                                        formUpdate.setChangeBuildPictureMoney(formUpdate.getBuildPictureMoney());
 
-                                            /*更新节点金额*/
-                                            updateNodeSet.add(orDefault.getId());
+                                        /*更改数量*/
+                                        resultFormListUpdate.add(formUpdate);
+
+                                        /*更新节点金额*/
+                                        updateNodeSet.add(orDefault.getId());
 
-                                        }
                                     }
+                                }
 
-                                } else {
+                            } else {
 
-                                    //没有获取到,那么证明是不相同清单编号,则获取对应的清单数据,进行新增清单
-                                    ContractInventoryForm contractInventoryFormAdd = contractInventoryFormMapsByFormNumber.getOrDefault(formCode, null);
-                                    if (contractInventoryFormAdd != null) {
-                                        InventoryFormMeter formAdd = new InventoryFormMeter();
-                                        formAdd.setId(SnowFlakeUtil.getId());
-                                        formAdd.setProjectId(orDefault.getProjectId());
-                                        formAdd.setContractId(orDefault.getContractId());
+                                //没有获取到,那么证明是不相同清单编号,则获取对应的清单数据,进行新增清单
+                                ContractInventoryForm contractInventoryFormAdd = contractInventoryFormMapsByFormNumber.getOrDefault(formCode, null);
+                                if (contractInventoryFormAdd != null) {
+                                    InventoryFormMeter formAdd = new InventoryFormMeter();
+                                    formAdd.setId(SnowFlakeUtil.getId());
+                                    formAdd.setProjectId(orDefault.getProjectId());
+                                    formAdd.setContractId(orDefault.getContractId());
 
-                                        if (ObjectUtil.isNotEmpty(SecureUtil.getUser())) {
-                                            formAdd.setCreateUser(SecureUtil.getUserId());
-                                            formAdd.setUpdateUser(SecureUtil.getUserId());
-                                            if (SecureUtil.getDeptId().contains(",")) {
-                                                formAdd.setCreateDept(Long.parseLong(SecureUtil.getDeptId().split(",")[0]));
-                                            } else {
-                                                formAdd.setCreateDept(Long.parseLong(SecureUtil.getDeptId()));
-                                            }
+                                    if (ObjectUtil.isNotEmpty(SecureUtil.getUser())) {
+                                        formAdd.setCreateUser(SecureUtil.getUserId());
+                                        formAdd.setUpdateUser(SecureUtil.getUserId());
+                                        if (SecureUtil.getDeptId().contains(",")) {
+                                            formAdd.setCreateDept(Long.parseLong(SecureUtil.getDeptId().split(",")[0]));
+                                        } else {
+                                            formAdd.setCreateDept(Long.parseLong(SecureUtil.getDeptId()));
                                         }
+                                    }
 
-                                        formAdd.setContractMeterId(orDefault.getId());
-                                        formAdd.setContractFormId(contractInventoryFormAdd.getId());
+                                    formAdd.setContractMeterId(orDefault.getId());
+                                    formAdd.setContractFormId(contractInventoryFormAdd.getId());
 
-                                        formAdd.setBuildPictureTotal(this.parseString(buildPictureTotal));
-                                        formAdd.setChangeBuildPictureTotal(formAdd.getBuildPictureTotal());
-                                        formAdd.setBuildPictureMoney(formAdd.getBuildPictureTotal().multiply(contractInventoryFormAdd.getChangePrice())); //数量*变更后单价
-                                        formAdd.setChangeBuildPictureMoney(formAdd.getBuildPictureMoney());
+                                    formAdd.setBuildPictureTotal(this.parseString(buildPictureTotal));
+                                    formAdd.setChangeBuildPictureTotal(formAdd.getBuildPictureTotal());
+                                    formAdd.setBuildPictureMoney(formAdd.getBuildPictureTotal().multiply(contractInventoryFormAdd.getChangePrice())); //数量*变更后单价
+                                    formAdd.setChangeBuildPictureMoney(formAdd.getBuildPictureMoney());
 
-                                        /*新增清单*/
-                                        resultFormListAdd.add(formAdd);
+                                    /*新增清单*/
+                                    resultFormListAdd.add(formAdd);
 
-                                        /*更新节点金额*/
-                                        updateNodeSet.add(orDefault.getId());
+                                    /*更新节点金额*/
+                                    updateNodeSet.add(orDefault.getId());
 
-                                    }
                                 }
                             }
+                        }
                     }
                 }
             }
@@ -1404,10 +1407,10 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
         if (resultNodeListAdd.size() > 0) {
             //判断要新增的数据中,清单编号是否已经存在
             List<String> collect = resultNodeListAdd.stream().map(l -> l.getNodeCode()).collect(Collectors.toList());
-            if (collect.size() > 0){
-                List<String> numbers = baseMapper.getAllEqualsNumber(meterTreeContract.getContractId(),collect);
-                if (numbers.size() > 0){
-                    throw new ServiceException("以下节点编号已经存在:["+StringUtils.join(numbers,",")+"],请修改excel后重新导入");
+            if (collect.size() > 0) {
+                List<String> numbers = baseMapper.getAllEqualsNumber(meterTreeContract.getContractId(), collect);
+                if (numbers.size() > 0) {
+                    throw new ServiceException("以下节点编号已经存在:[" + StringUtils.join(numbers, ",") + "],请修改excel后重新导入");
                 }
             }
             this.saveBatch(resultNodeListAdd, 1000);

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

@@ -198,12 +198,14 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
                 formApply.setCurrentPrice(l.getCurrentPrice());
                 formApply.setBuildPictureTotal(l.getResolveTotal());
                 formApply.setChangeBuildPictureTotal(l.getChangeTotal());
-                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
+                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null && l.getUpPayRatio() != null) {
                     formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
                     formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
+                    formApply.setPayMoney(formApply.getCurrentMeterMoney().multiply(new BigDecimal(l.getUpPayRatio()).divide(new BigDecimal(100))));
                 }else {
-                    throw new ServiceException("计量金额和计量数量不能为空");
+                    throw new ServiceException("单价和计量数量和支付比例不能为空");
                 }
+                formApply.setUpPayRatio(l.getUpPayRatio());
                 return formApply;
             }).collect(Collectors.toList());
              for (InventoryFormApply formApply : formApplies) {
@@ -345,12 +347,14 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
                 formApply.setCurrentPrice(l.getCurrentPrice());
                 formApply.setBuildPictureTotal(l.getResolveTotal());
                 formApply.setChangeBuildPictureTotal(l.getChangeTotal());
-                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
+                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null && l.getUpPayRatio() != null) {
                     formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
                     formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
+                    formApply.setPayMoney(formApply.getCurrentMeterMoney().multiply(new BigDecimal(l.getUpPayRatio()).divide(new BigDecimal(100))));
                 }else {
-                    throw new ServiceException("计量金额和计量数量不能为空");
+                    throw new ServiceException("单价和计量数量和支付比例不能为空");
                 }
+                formApply.setUpPayRatio(l.getUpPayRatio());
                 return formApply;
             }).collect(Collectors.toList());
             for (InventoryFormApply formApply : formApplies) {