Jelajahi Sumber

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

yangyj 1 tahun lalu
induk
melakukan
b2d5657532
15 mengubah file dengan 344 tambahan dan 56 penghapusan
  1. 4 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/Task.java
  2. 2 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java
  3. 5 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeContract.java
  4. 2 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeProject.java
  5. 2 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeSystem.java
  6. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterMidPayItemContractVO.java
  7. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterMidPayItemProjectVO.java
  8. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterMidPayItemSystemVO.java
  9. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterTreeContractVO.java
  10. 1 1
      blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java
  11. 50 24
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  12. 25 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  13. 7 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  14. 102 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MeterTreeController.java
  15. 123 18
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MidPayItemController.java

+ 4 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/Task.java

@@ -141,4 +141,8 @@ public class Task extends BaseEntity {
     @ApiModelProperty("试验自检记录id")
     private Long trialSelfInspectionRecordId;
 
+    @ApiModelProperty("档案任务创建时间戳(解决顺序问题)")
+    private Long taskCreateTimestamp;
+
+
 }

+ 2 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ProjectInfo.java

@@ -186,9 +186,9 @@ public class ProjectInfo extends BaseEntity {
     private Long referenceWbsTemplateIdMeter;
 
     /**
-     * wbs私有树引用wbs模板类型-征拆
+     * wbs私有树引用wbs模板类型-计量
      */
-    @ApiModelProperty(value = "wbs私有树引用wbs模板类型-征拆")
+    @ApiModelProperty(value = "wbs私有树引用wbs模板类型-计量")
     private String referenceWbsTemplateTypeMeter;
 
 }

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

@@ -32,8 +32,8 @@ public class MeterTreeContract extends BaseEntity {
     @ApiModelProperty(value = "节点类型")
     private Integer nodeType;
 
-    @ApiModelProperty(value = "工程类型")
-    private Integer engineeringType;
+    @ApiModelProperty(value = "工程类型名称")
+    private String engineeringTypeName;
 
     @ApiModelProperty(value = "数据源类型 1=原始引用、2=新增、3=导入、4=复制")
     private Integer dataSourceType;
@@ -68,6 +68,9 @@ public class MeterTreeContract extends BaseEntity {
     @ApiModelProperty(value = "结束桩号")
     private String endStake;
 
+    @ApiModelProperty(value = "桩号类型")
+    private Integer stakeType;
+
     @ApiModelProperty(value = "施工图金额")
     private BigDecimal buildPictureMoney;
 

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

@@ -27,8 +27,8 @@ public class MeterTreeProject extends BaseEntity {
     @ApiModelProperty(value = "节点类型")
     private Integer nodeType;
 
-    @ApiModelProperty(value = "工程类型")
-    private Integer engineeringType;
+    @ApiModelProperty(value = "工程类型名称")
+    private String engineeringTypeName;
 
     @ApiModelProperty(value = "数据源类型 1=原始引用、2=新增、3=导入、4=复制")
     private Integer dataSourceType;

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

@@ -24,8 +24,8 @@ public class MeterTreeSystem extends BaseEntity {
     @ApiModelProperty(value = "节点类型")
     private Integer nodeType;
 
-    @ApiModelProperty(value = "工程类型")
-    private Integer engineeringType;
+    @ApiModelProperty(value = "工程类型名称")
+    private String engineeringTypeName;
 
     @ApiModelProperty(value = "父级id")
     private Long parentId;

+ 6 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterMidPayItemContractVO.java

@@ -15,4 +15,10 @@ public class MeterMidPayItemContractVO extends MeterMidPayItemContract {
     @ApiModelProperty(value = "汇总项列表信息")
     private List<MeterMidPayItemContract> summaryItemList;
 
+    @ApiModelProperty(value = "支付项类型名称")
+    private String payTypeName;
+
+    @ApiModelProperty(value = "支付适用类型名称")
+    private String payApplicableTypeName;
+
 }

+ 6 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterMidPayItemProjectVO.java

@@ -15,4 +15,10 @@ public class MeterMidPayItemProjectVO extends MeterMidPayItemProject {
     @ApiModelProperty(value = "汇总项列表信息")
     private List<MeterMidPayItemProject> summaryItemList;
 
+    @ApiModelProperty(value = "支付项类型名称")
+    private String payTypeName;
+
+    @ApiModelProperty(value = "支付适用类型名称")
+    private String payApplicableTypeName;
+
 }

+ 6 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterMidPayItemSystemVO.java

@@ -15,4 +15,10 @@ public class MeterMidPayItemSystemVO extends MeterMidPayItemSystem {
     @ApiModelProperty(value = "汇总项列表信息")
     private List<MeterMidPayItemSystem> summaryItemList;
 
+    @ApiModelProperty(value = "支付项类型名称")
+    private String payTypeName;
+
+    @ApiModelProperty(value = "支付适用类型名称")
+    private String payApplicableTypeName;
+
 }

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

@@ -15,4 +15,7 @@ public class MeterTreeContractVO extends MeterTreeContract {
     @ApiModelProperty(value = "分解清单列表详情")
     private List<ContractFromVO> decompositionList; //TODO 此处Obj替换为分解清单Bean对象
 
+    @ApiModelProperty(value = "桩号类型名称")
+    private String stakeTypeName;
+
 }

+ 1 - 1
blade-service/blade-archive/src/main/java/org/springblade/archive/controller/ArchiveFileTaskController.java

@@ -269,7 +269,7 @@ public class ArchiveFileTaskController extends BladeController {
         int totalCount = totalCountOptional.orElse(0);
 
         //分页
-        sqlString.append(" ORDER BY create_time DESC LIMIT ? OFFSET ?");
+        sqlString.append(" ORDER BY COALESCE(task_create_timestamp, create_time) ASC LIMIT ? OFFSET ?;"); //按照创建时间戳task_create_timestamp排序,如果task_create_timestamp为空,则按照create_time进行排序。
         params.add(size);
         params.add((current - 1) * size);
 

+ 50 - 24
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -457,9 +457,16 @@ public class TaskController extends BladeController {
 
         //创建上报任务
         Map<Long, String> nameMap = jdbcTemplate.query("select id,name from blade_user where is_deleted = 0", new BeanPropertyRowMapper<>(User.class)).stream().collect(Collectors.toMap(User::getId, User::getName, (key1, key2) -> key1));
-        List<ArchiveFile> archiveFiles = jdbcTemplate.query("select * from u_archive_file where id in (" + archiveTaskBatchReportDTO.getDataIds() + ")", new BeanPropertyRowMapper<>(ArchiveFile.class));
-        if (archiveFiles.size() > 0) {
-            for (ArchiveFile archive : archiveFiles) {
+
+        String[] dataArr = archiveTaskBatchReportDTO.getDataIds().split(",");
+        if (dataArr.length > 0) {
+            for (String id : dataArr) {
+                ArchiveFile archive = jdbcTemplate.query("SELECT * FROM u_archive_file WHERE id = " + id, new BeanPropertyRowMapper<>(ArchiveFile.class)).stream().findAny().orElse(null);
+
+                if (archive == null) {
+                    continue;
+                }
+
                 if (Arrays.asList(1, 2).contains(archive.getStatus())) {
                     throw new ServiceException("只有【未上报 或 已废除】状态的业务数据才能上报!");
                 }
@@ -467,6 +474,12 @@ public class TaskController extends BladeController {
                     throw new ServiceException("只有【未认证】状态的业务数据才能上报!");
                 }
 
+                /*新增的时候去重判断,status=1或2,有且只有一条*/
+                Task taskInfo = jdbcTemplate.query("select status from u_task where task_create_timestamp is not null and status in (1,2) and form_data_id = '" + id + "'", new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+                if (ObjectUtil.isNotEmpty(taskInfo)) {
+                    throw new ServiceException("文件【" + archive.getFileName() + "】已经上报,请重新选择左侧节点树文件数据进行上报");
+                }
+
                 //创建task审批任务
                 Long processInstanceId = SnowFlakeUtil.getId();
                 Task task = new Task();
@@ -501,6 +514,9 @@ public class TaskController extends BladeController {
                 task.setIsDeleted(0);
                 task.setTrialSelfInspectionRecordId(null);
 
+                /*记录当前时间戳*/
+                task.setTaskCreateTimestamp(System.currentTimeMillis());
+
                 taskService.save(task);
 
                 //创建任务相关信息
@@ -527,6 +543,13 @@ public class TaskController extends BladeController {
 
                 //修改档案业务数据任务状态为待审批
                 jdbcTemplate.execute("update u_archive_file set status = 1 where id = " + archive.getId());
+
+                //睡眠1毫秒,确保每个任务的创建时间不一样(时间如果相同,会导致任务查看待办列表的任务顺序不好判断)
+                try {
+                    Thread.sleep(1);
+                } catch (InterruptedException e) {
+                    Thread.currentThread().interrupt();
+                }
             }
 
             //WebSocket推送
@@ -546,6 +569,7 @@ public class TaskController extends BladeController {
                     }
                 }
             }
+
             return R.success("上报成功");
         }
         return R.fail("操作失败");
@@ -564,10 +588,11 @@ public class TaskController extends BladeController {
                 //判断现在的数据是否是待审批数据,只有上报状态、未认证状态的数据才能撤销
                 ArchiveFile archiveFile = jdbcTemplate.queryForObject("select * from u_archive_file where id = " + archiveId, new BeanPropertyRowMapper<>(ArchiveFile.class));
                 if (archiveFile != null) {
-                    //修改档案文件收集业务数据状态=已废除
-                    jdbcTemplate.execute("update u_archive_file set status = 3,is_certification = 0,e_visa_file = null where id = " + archiveId);
-                    Task task = jdbcTemplate.query("select id,status,process_instance_id from u_task where form_data_id = " + archiveId, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+                    /*此处任务会查询出多条,因为存在多次废除任务,那么form_data_id指向同一个id,所以在新增的时候去重判断,status=1或2,有且只有一条*/
+                    Task task = jdbcTemplate.query("select id,status,process_instance_id from u_task where task_create_timestamp is not null and status in (1,2) and form_data_id = '" + archiveId + "'", new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
                     if (task != null && task.getStatus().equals(1)) {
+                        //修改档案文件收集业务数据状态=已废除
+                        jdbcTemplate.execute("update u_archive_file set status = 3,is_certification = 0,e_visa_file = null where id = " + archiveId);
                         //待审批审批任务=已废除
                         jdbcTemplate.execute("update u_task set status = 3 where id = " + task.getId());
                         //审批任务详情=已废除
@@ -593,6 +618,7 @@ public class TaskController extends BladeController {
                 }
             }
             return R.success("操作成功");
+
         } else if (repealDTO.getType().equals(2)) { //任务审批废除
             String[] taskIds = repealDTO.getIds().split(",");
             for (String taskId : taskIds) {
@@ -657,19 +683,19 @@ public class TaskController extends BladeController {
                     Task task = jdbcTemplate.queryForObject("select id,contract_id,project_id,process_instance_id,form_data_id,type,archive_ids from u_task where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(Task.class));
                     if (task != null) {
                         //判断任务类型是否是验收任务,档案验收任务单独处理修改状态直接返回
-                        if (task.getType() == 2){
+                        if (task.getType() == 2) {
                             //是验收任务直接获取所有的副任务
                             List<TaskParallel> parallelList = taskParallelService.list(new LambdaQueryWrapper<TaskParallel>().eq(TaskParallel::getProcessInstanceId, task.getId()));
                             //修改当前用户的副任务状态,保存
                             for (TaskParallel taskParallel : parallelList) {
-                                if (taskParallel.getTaskUser().equals(AuthUtil.getUserId()+"")){
+                                if (taskParallel.getTaskUser().equals(AuthUtil.getUserId() + "")) {
                                     taskParallel.setStatus(2);
                                     taskParallel.setEVisaStatus(1);
                                     taskParallelService.updateById(taskParallel);
                                     break;
                                 }
                             }
-                            parallelList.removeIf(l->l.getStatus() == 2);
+                            parallelList.removeIf(l -> l.getStatus() == 2);
                             //判断是否所有副任务都是完成状态
                             if (parallelList.size() == 0) {
                                 //都是完成状态,则修改主任务的状态
@@ -683,9 +709,9 @@ public class TaskController extends BladeController {
                                     String phone = expertInfo.getPhone();
                                     String name = expertInfo.getName();
                                     dto.setTenantId(AuthUtil.getTenantId());
-                                    dto.setAccount("expert"+phone);
+                                    dto.setAccount("expert" + phone);
                                     StringSPUtils stringSPUtils = new StringSPUtils();
-                                    dto.setPassword(stringSPUtils.getStringSP(name).toLowerCase(Locale.ROOT)+phone);
+                                    dto.setPassword(stringSPUtils.getStringSP(name).toLowerCase(Locale.ROOT) + phone);
                                     dto.setUserType("3");
                                     dto.setRealName(name);
                                     dto.setPhone(phone);
@@ -697,30 +723,30 @@ public class TaskController extends BladeController {
                                     //专家合同段设置为指挥部
                                     projectDTO.setContractId(task.getContractId());
                                     //判断是否为组长
-                                    if (expertInfo.getIsLeader() == 0){
+                                    if (expertInfo.getIsLeader() == 0) {
                                         projectDTO.setRoleId("1656191770880864257");
-                                    }else {
+                                    } else {
                                         projectDTO.setRoleId("1656191696348082177");
                                     }
                                     list.add(projectDTO);
                                     dto.setProjectAndUserList(list);
                                     //单个保存专家信息
                                     R<Boolean> booleanR = userClient.saveUserDTO(dto);
-                                    if (booleanR.getData() == null ||  booleanR.isSuccess() != true){
+                                    if (booleanR.getData() == null || booleanR.isSuccess() != true) {
                                         throw new ServiceException(booleanR.getMsg());
                                     }
                                 }
                                 //修改档案类型
                                 String archiveIds = task.getArchiveIds();
-                                if (StringUtils.isNotBlank(archiveIds)){
+                                if (StringUtils.isNotBlank(archiveIds)) {
                                     List<Long> longs = Func.toLongList(archiveIds);
                                     R<Boolean> booleanR = archiveClient.batchUpdateIsApply(1, longs);
-                                    if (booleanR.getData() == null || booleanR.isSuccess() != true){
+                                    if (booleanR.getData() == null || booleanR.isSuccess() != true) {
                                         throw new ServiceException("修改档案类型失败");
                                     }
                                 }
                             }
-                           return R.data(true);
+                            return R.data(true);
                         }
                         org.springblade.evisa.vo.TaskArchiveDTO eVisaObj = new org.springblade.evisa.vo.TaskArchiveDTO();
                         BeanUtils.copyProperties(taskArchiveDTO, eVisaObj);
@@ -779,7 +805,7 @@ public class TaskController extends BladeController {
         } else {
             List<String> taskIds = taskArchiveOuterLayerDTO.getTaskArchiveDtoList().stream().map(TaskArchiveDTO::getTaskId).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
             //判断任务类型是否是验收任务,档案验收任务单独处理修改状态直接返回
-            if (taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0) == null || taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0).getTaskId() == null){
+            if (taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0) == null || taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0).getTaskId() == null) {
                 throw new ServiceException("参数错误,请传入任务id");
             }
             Task task = jdbcTemplate.queryForObject("select id,type from u_task where id = " + taskArchiveOuterLayerDTO.getTaskArchiveDtoList().get(0).getTaskId(), new BeanPropertyRowMapper<>(Task.class));
@@ -787,9 +813,9 @@ public class TaskController extends BladeController {
                 //判断任务类型是否是验收任务,档案验收任务单独处理修改状态直接返回
                 if (task.getType() == 2) {
                     //修改主任务表
-                    jdbcTemplate.execute("UPDATE u_task set status = 3 WHERE id in (" +StringUtils.join(taskIds, ",")+")");
+                    jdbcTemplate.execute("UPDATE u_task set status = 3 WHERE id in (" + StringUtils.join(taskIds, ",") + ")");
                     //修改副任务表
-                    jdbcTemplate.execute("UPDATE u_task_parallel set status = 3 WHERE process_instance_id in (\'"+ StringUtils.join(taskIds, "','")+"\')");
+                    jdbcTemplate.execute("UPDATE u_task_parallel set status = 3 WHERE process_instance_id in (\'" + StringUtils.join(taskIds, "','") + "\')");
                     return R.data(true);
                 }
             }
@@ -1575,15 +1601,15 @@ public class TaskController extends BladeController {
                 sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and task_user_name LIKE ? AND is_deleted=0) = 1");
                 params.add("%" + dto.getEVisaUserName() + "%");
             }
-                sqlString.append(" AND (SELECT COUNT(1) FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.e_visa_status = 99" +
-                        " AND u_task_parallel.status != 3 and is_deleted=0) > 0");
+            sqlString.append(" AND (SELECT COUNT(1) FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.e_visa_status = 99" +
+                    " AND u_task_parallel.status != 3 and is_deleted=0) > 0");
         } else {
             if (StringUtils.isNotBlank(dto.getEVisaUserName())) {
                 sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and task_user_name LIKE ? AND is_deleted=0) = 1");
                 params.add("%" + dto.getEVisaUserName() + "%");
             }
-                sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and is_deleted=0) =" +
-                        "(SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.e_visa_status = 1 AND u_task_parallel.status = 2 and is_deleted=0)");
+            sqlString.append(" AND (SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id and is_deleted=0) =" +
+                    "(SELECT COUNT(1)  FROM u_task_parallel WHERE u_task.process_instance_id = u_task_parallel.process_instance_id AND u_task_parallel.e_visa_status = 1 AND u_task_parallel.status = 2 and is_deleted=0)");
 
         }
 

+ 25 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -26,6 +26,7 @@ import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
 import org.springblade.manager.service.IWbsTreeContractService;
 import org.springblade.manager.service.SaveUserInfoByProjectService;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.MeterContractInfo;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.user.vo.UserContractInfoVO;
@@ -65,7 +66,16 @@ public class ContractInfoController extends BladeController {
     @ApiOperation(value = "详情", notes = "传入contractInfo")
     public R<ContractInfoVO> detail(ContractInfo contractInfo) {
         ContractInfo detail = contractInfoService.getOne(Condition.getQueryWrapper(contractInfo));
-        return R.data(ContractInfoWrapper.build().entityVO(detail));
+        if (detail != null) {
+            ContractInfoVO vo = new ContractInfoVO();
+            BeanUtil.copyProperties(detail, vo);
+            MeterContractInfo meterContractInfo = jdbcTemplate.query("SELECT * FROM s_meter_contract_info WHERE contract_id = " + contractInfo.getId(), new BeanPropertyRowMapper<>(MeterContractInfo.class)).stream().findAny().orElse(null);
+            if (meterContractInfo != null) {
+                vo.setMeterContractInfo(meterContractInfo);
+            }
+            return R.data(vo);
+        }
+        return R.data(null);
     }
 
     /**
@@ -85,9 +95,21 @@ public class ContractInfoController extends BladeController {
     @GetMapping("/get-contractInfo")
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "根据项目id查询当前所有合同", notes = "传入pid")
-    public R<List<ContractInfo>> findContractInfoByPid(String pid) {
+    public R<List<ContractInfoVO>> findContractInfoByPid(String pid) {
         List<ContractInfo> contractInfoVOS = contractInfoService.selectContractInfoPageByPid(pid);
-        return R.data(contractInfoVOS);
+        List<ContractInfoVO> resultAll = new ArrayList<>();
+        for (ContractInfo contractInfo : contractInfoVOS) {
+            ContractInfoVO vo = new ContractInfoVO();
+            BeanUtil.copyProperties(contractInfo, vo);
+            if (contractInfo.getContractType().equals(4)) {
+                MeterContractInfo meterContractInfo = jdbcTemplate.query("SELECT * FROM s_meter_contract_info WHERE contract_id = " + contractInfo.getId(), new BeanPropertyRowMapper<>(MeterContractInfo.class)).stream().findAny().orElse(null);
+                if (meterContractInfo != null) {
+                    vo.setMeterContractInfo(meterContractInfo);
+                }
+            }
+            resultAll.add(vo);
+        }
+        return R.data(resultAll);
     }
 
     /**

+ 7 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -26,6 +26,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.entity.MeterContractInfo;
 import org.springblade.meter.feign.MeterContractInfoClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -809,7 +810,9 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                 /*总承包合同段(计量合同段)*/
             } else if (contractInfo.getContractType().equals(4)) {
                 if (ObjectUtil.isNotEmpty(contractInfo.getMeterContractInfo())) {
-                    meterContractInfoClient.saveOrUpdate(contractInfo.getMeterContractInfo());
+                    MeterContractInfo meterContractInfo = contractInfo.getMeterContractInfo();
+                    meterContractInfo.setContractId(contractInfo.getId());
+                    meterContractInfoClient.saveOrUpdate(meterContractInfo);
                 }
             }
 
@@ -883,7 +886,9 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                 /*总承包合同段(计量合同段)*/
             } else if (contractInfo.getContractType().equals(4)) {
                 if (ObjectUtil.isNotEmpty(contractInfo.getMeterContractInfo())) {
-                    meterContractInfoClient.saveOrUpdate(contractInfo.getMeterContractInfo());
+                    MeterContractInfo meterContractInfo = contractInfo.getMeterContractInfo();
+                    meterContractInfo.setContractId(contractInfo.getId());
+                    meterContractInfoClient.saveOrUpdate(meterContractInfo);
                 }
             }
 

+ 102 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MeterTreeController.java

@@ -27,6 +27,7 @@ import org.springblade.meter.entity.MeterTreeSystem;
 import org.springblade.meter.entity.MeterTreeTemplateInfo;
 import org.springblade.meter.service.*;
 import org.springblade.meter.vo.*;
+import org.springblade.system.entity.Dict;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
@@ -161,6 +162,37 @@ public class MeterTreeController extends BladeController {
         return R.data(meterTreeSystemService.save(obj));
     }
 
+    @GetMapping("/system/getEngineeringTypeName")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "系统树节点新增获取工程类型名称", notes = "传入id")
+    public R<Object> getSystemEngineeringTypeName(@RequestParam String id) {
+        MeterTreeSystem node = meterTreeSystemService.getById(id);
+        if (node != null) {
+            String resultNodeName = getSystemTheParentRecursivelyInReverse(node);
+            return R.data(ObjectUtil.isNotEmpty(resultNodeName) ? resultNodeName : null);
+        }
+        return R.data(null);
+    }
+
+    /*获取系统第二层级节点名称*/
+    private String getSystemTheParentRecursivelyInReverse(MeterTreeSystem node) {
+        if (node != null) {
+            MeterTreeSystem parentNode = meterTreeSystemService.getOne(Wrappers.<MeterTreeSystem>lambdaQuery()
+                    .select(MeterTreeSystem::getNodeName, MeterTreeSystem::getParentId, MeterTreeSystem::getAncestor)
+                    .eq(MeterTreeSystem::getId, node.getParentId())
+                    .eq(MeterTreeSystem::getStatus, 1)
+            );
+            if (parentNode != null) {
+                if (parentNode.getAncestor().split(",").length == 2) {
+                    return parentNode.getNodeName();
+                } else if (parentNode.getAncestor().split(",").length > 2) {
+                    return getSystemTheParentRecursivelyInReverse(parentNode);
+                }
+            }
+        }
+        return null;
+    }
+
     @PostMapping("/system/update")
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "系统树节点修改", notes = "传入MeterTreeSystem")
@@ -331,6 +363,37 @@ public class MeterTreeController extends BladeController {
         return R.data(meterTreeProjectService.save(obj));
     }
 
+    @GetMapping("/project/getEngineeringTypeName")
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "项目树节点新增获取工程类型名称", notes = "传入id")
+    public R<Object> getProjectEngineeringTypeName(@RequestParam String id) {
+        MeterTreeProject node = meterTreeProjectService.getById(id);
+        if (node != null) {
+            String resultNodeName = getProjectTheParentRecursivelyInReverse(node);
+            return R.data(ObjectUtil.isNotEmpty(resultNodeName) ? resultNodeName : null);
+        }
+        return R.data(null);
+    }
+
+    /*获取项目第二层级节点名称*/
+    private String getProjectTheParentRecursivelyInReverse(MeterTreeProject node) {
+        if (node != null) {
+            MeterTreeProject parentNode = meterTreeProjectService.getOne(Wrappers.<MeterTreeProject>lambdaQuery()
+                    .select(MeterTreeProject::getNodeName, MeterTreeProject::getParentId, MeterTreeProject::getAncestor)
+                    .eq(MeterTreeProject::getId, node.getParentId())
+                    .eq(MeterTreeProject::getStatus, 1)
+            );
+            if (parentNode != null) {
+                if (parentNode.getAncestor().split(",").length == 2) {
+                    return parentNode.getNodeName();
+                } else if (parentNode.getAncestor().split(",").length > 2) {
+                    return getProjectTheParentRecursivelyInReverse(parentNode);
+                }
+            }
+        }
+        return null;
+    }
+
     @PostMapping("/project/update")
     @ApiOperationSupport(order = 16)
     @ApiOperation(value = "项目树节点修改", notes = "传入MeterTreeProject")
@@ -551,6 +614,37 @@ public class MeterTreeController extends BladeController {
         return R.fail("操作失败");
     }
 
+    @GetMapping("/contract/getEngineeringTypeName")
+    @ApiOperationSupport(order = 24)
+    @ApiOperation(value = "合同段节点新增获取工程类型名称", notes = "传入id")
+    public R<Object> getContractEngineeringTypeName(@RequestParam String id) {
+        MeterTreeContract node = meterTreeContractService.getById(id);
+        if (node != null) {
+            String resultNodeName = getContractTheParentRecursivelyInReverse(node);
+            return R.data(ObjectUtil.isNotEmpty(resultNodeName) ? resultNodeName : null);
+        }
+        return R.data(null);
+    }
+
+    /*获取合同段第二层级节点名称*/
+    private String getContractTheParentRecursivelyInReverse(MeterTreeContract node) {
+        if (node != null) {
+            MeterTreeContract parentNode = meterTreeContractService.getOne(Wrappers.<MeterTreeContract>lambdaQuery()
+                    .select(MeterTreeContract::getNodeName, MeterTreeContract::getParentId, MeterTreeContract::getAncestor)
+                    .eq(MeterTreeContract::getId, node.getParentId())
+                    .eq(MeterTreeContract::getStatus, 1)
+            );
+            if (parentNode != null) {
+                if (parentNode.getAncestor().split(",").length == 2) {
+                    return parentNode.getNodeName();
+                } else if (parentNode.getAncestor().split(",").length > 2) {
+                    return getContractTheParentRecursivelyInReverse(parentNode);
+                }
+            }
+        }
+        return null;
+    }
+
     @GetMapping("/contract/detail")
     @ApiOperationSupport(order = 25)
     @ApiOperation(value = "合同段树节点详情", notes = "传入id")
@@ -559,6 +653,14 @@ public class MeterTreeController extends BladeController {
         if (basicInfo != null) {
             MeterTreeContractVO vo = new MeterTreeContractVO();
             BeanUtil.copyProperties(basicInfo, vo);
+
+            if (ObjectUtil.isNotEmpty(basicInfo.getStakeType())) {
+                Dict dict = jdbcTemplate.query("SELECT dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_stake_type' AND dict_key = " + basicInfo.getStakeType(), new BeanPropertyRowMapper<>(Dict.class)).stream().findAny().orElse(null);
+                if (dict != null) {
+                    vo.setStakeTypeName(dict.getDictValue());
+                }
+            }
+
             //TODO 此处为分解列表信息,查询赋值
             List<ContractFromVO> contrFormAllByContrId = contractInventoryFormService.getContrFormAllByContrId(basicInfo.getContractId(), "");
 

+ 123 - 18
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MidPayItemController.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -24,14 +25,12 @@ import org.springblade.meter.service.MidPayItemSystemService;
 import org.springblade.meter.vo.MeterMidPayItemContractVO;
 import org.springblade.meter.vo.MeterMidPayItemProjectVO;
 import org.springblade.meter.vo.MeterMidPayItemSystemVO;
+import org.springblade.system.entity.Dict;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @RestController
@@ -50,9 +49,18 @@ public class MidPayItemController extends BladeController {
     @ApiOperation(value = "系统中期支付项详情", notes = "传入id")
     public R<MeterMidPayItemSystemVO> systemDetail(@RequestParam String id) {
         if (StringUtils.isNotEmpty(id)) {
+            Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+            Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
             MeterMidPayItemSystem obj = payItemSystemService.getById(id);
+
             MeterMidPayItemSystemVO vo = new MeterMidPayItemSystemVO();
             BeanUtil.copyProperties(obj, vo);
+            if (ObjectUtil.isNotEmpty(obj.getPayApplicableType())) {
+                vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(obj.getPayApplicableType().toString(), null));
+            }
+            if (ObjectUtil.isNotEmpty(obj.getPayType())) {
+                vo.setPayTypeName(meterPayTypeMap.getOrDefault(obj.getPayType().toString(), null));
+            }
             List<MeterMidPayItemRelation> recordInfos = jdbcTemplate.query("SELECT * FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + id, new BeanPropertyRowMapper<>(MeterMidPayItemRelation.class));
             if (recordInfos.size() > 0) {
                 Set<Long> ids = recordInfos.stream().map(MeterMidPayItemRelation::getMidPayIdRelation).collect(Collectors.toSet());
@@ -86,12 +94,33 @@ public class MidPayItemController extends BladeController {
     @PostMapping("/system/page")
     @ApiOperationSupport(order = 4)
     @ApiOperation(value = "系统中期支付项分页", notes = "传入MeterMidPayItemSystem、Query")
-    public R<IPage<MeterMidPayItemSystem>> systemPage(@RequestBody MeterMidPayItemSystem meterMidPayItemSystem, @RequestBody Query query) {
+    public R<IPage<MeterMidPayItemSystemVO>> systemPage(@RequestBody MeterMidPayItemSystem meterMidPayItemSystem, @RequestBody Query query) {
         IPage<MeterMidPayItemSystem> pages = payItemSystemService.page(Condition.getPage(query), Condition.getQueryWrapper(meterMidPayItemSystem));
-        List<MeterMidPayItemSystem> sortResult = pages.getRecords().stream()
-                .sorted(Comparator.comparing(MeterMidPayItemSystem::getCreateTime))
+
+        Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+        Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+
+        List<MeterMidPayItemSystemVO> sortResult = pages.getRecords().stream()
+                .map(system -> {
+                    MeterMidPayItemSystemVO vo = new MeterMidPayItemSystemVO();
+                    BeanUtil.copyProperties(system, vo);
+                    if (ObjectUtil.isNotEmpty(system.getPayApplicableType())) {
+                        vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(system.getPayApplicableType().toString(), null));
+                    }
+                    if (ObjectUtil.isNotEmpty(system.getPayType())) {
+                        vo.setPayTypeName(meterPayTypeMap.getOrDefault(system.getPayType().toString(), null));
+                    }
+                    return vo;
+                })
+                .sorted(Comparator.comparing(MeterMidPayItemSystemVO::getCreateTime))
                 .collect(Collectors.toList());
-        return R.data(pages.setRecords(sortResult));
+
+        IPage<MeterMidPayItemSystemVO> resultPage = new Page<>();
+        resultPage.setTotal(pages.getTotal());
+        resultPage.setCurrent(pages.getCurrent());
+        resultPage.setSize(pages.getSize());
+        resultPage.setRecords(sortResult);
+        return R.data(resultPage);
     }
 
     @PostMapping("/system/list")
@@ -111,9 +140,18 @@ public class MidPayItemController extends BladeController {
     @ApiOperation(value = "项目中期支付项详情", notes = "传入id")
     public R<MeterMidPayItemProjectVO> projectDetail(@RequestParam String id) {
         if (StringUtils.isNotEmpty(id)) {
+            Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+            Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
             MeterMidPayItemProject obj = payItemProjectService.getById(id);
+
             MeterMidPayItemProjectVO vo = new MeterMidPayItemProjectVO();
             BeanUtil.copyProperties(obj, vo);
+            if (ObjectUtil.isNotEmpty(obj.getPayApplicableType())) {
+                vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(obj.getPayApplicableType().toString(), null));
+            }
+            if (ObjectUtil.isNotEmpty(obj.getPayType())) {
+                vo.setPayTypeName(meterPayTypeMap.getOrDefault(obj.getPayType().toString(), null));
+            }
             List<MeterMidPayItemRelation> recordInfos = jdbcTemplate.query("SELECT * FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + id, new BeanPropertyRowMapper<>(MeterMidPayItemRelation.class));
             if (recordInfos.size() > 0) {
                 Set<Long> ids = recordInfos.stream().map(MeterMidPayItemRelation::getMidPayIdRelation).collect(Collectors.toSet());
@@ -185,25 +223,62 @@ public class MidPayItemController extends BladeController {
     @PostMapping("/project/page")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "项目中期支付项分页", notes = "传入MeterMidPayItemProject、Query")
-    public R<IPage<MeterMidPayItemProject>> projectPage(@RequestBody MeterMidPayItemProject meterMidPayItemProject, @RequestBody Query query) {
+    public R<IPage<MeterMidPayItemProjectVO>> projectPage(@RequestBody MeterMidPayItemProject meterMidPayItemProject, @RequestBody Query query) {
         IPage<MeterMidPayItemProject> pages = payItemProjectService.page(Condition.getPage(query), Condition.getQueryWrapper(meterMidPayItemProject));
-        List<MeterMidPayItemProject> sortResult = pages.getRecords().stream()
-                .sorted(Comparator.comparing(MeterMidPayItemProject::getCreateTime))
+
+        Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+        Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+
+        List<MeterMidPayItemProjectVO> sortResult = pages.getRecords().stream()
+                .map(project -> {
+                    MeterMidPayItemProjectVO vo = new MeterMidPayItemProjectVO();
+                    BeanUtil.copyProperties(project, vo);
+                    if (ObjectUtil.isNotEmpty(project.getPayApplicableType())) {
+                        vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(project.getPayApplicableType().toString(), null));
+                    }
+                    if (ObjectUtil.isNotEmpty(project.getPayType())) {
+                        vo.setPayTypeName(meterPayTypeMap.getOrDefault(project.getPayType().toString(), null));
+                    }
+                    return vo;
+                })
+                .sorted(Comparator.comparing(MeterMidPayItemProjectVO::getCreateTime))
                 .collect(Collectors.toList());
-        return R.data(pages.setRecords(sortResult));
+
+        IPage<MeterMidPayItemProjectVO> resultPage = new Page<>();
+        resultPage.setTotal(pages.getTotal());
+        resultPage.setCurrent(pages.getCurrent());
+        resultPage.setSize(pages.getSize());
+        resultPage.setRecords(sortResult);
+        return R.data(resultPage);
     }
 
     @PostMapping("/project/list")
     @ApiOperationSupport(order = 11)
     @ApiOperation(value = "项目中期支付项列表", notes = "传入type=0(未被引用),type=1(已引用),type=空(全部)、projectId")
-    public R<List<MeterMidPayItemProject>> projectList(@RequestParam String type, @RequestParam String projectId) {
+    public R<List<MeterMidPayItemProjectVO>> projectList(@RequestParam String type, @RequestParam String projectId) {
+        Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+        Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+
         LambdaQueryWrapper<MeterMidPayItemProject> queryWrapper = Wrappers.lambdaQuery();
         if (type != null) {
             queryWrapper.eq(MeterMidPayItemProject::getIsReferenced, type);
         }
         queryWrapper.eq(MeterMidPayItemProject::getProjectId, projectId);
         queryWrapper.orderByAsc(MeterMidPayItemProject::getCreateTime);
-        return R.data(payItemProjectService.getBaseMapper().selectList(queryWrapper));
+
+        List<MeterMidPayItemProject> meterMidPayItemProjects = payItemProjectService.getBaseMapper().selectList(queryWrapper);
+
+        List<MeterMidPayItemProjectVO> VOS = BeanUtil.copyProperties(meterMidPayItemProjects, MeterMidPayItemProjectVO.class);
+        for (MeterMidPayItemProjectVO vo : VOS) {
+            if (ObjectUtil.isNotEmpty(vo.getPayApplicableType())) {
+                vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(vo.getPayApplicableType().toString(), null));
+            }
+            if (ObjectUtil.isNotEmpty(vo.getPayType())) {
+                vo.setPayTypeName(meterPayTypeMap.getOrDefault(vo.getPayType().toString(), null));
+            }
+        }
+
+        return R.data(VOS);
     }
 
     @GetMapping("/contract/detail")
@@ -211,9 +286,18 @@ public class MidPayItemController extends BladeController {
     @ApiOperation(value = "合同段中期支付项详情", notes = "传入id")
     public R<MeterMidPayItemContractVO> contractDetail(@RequestParam String id) {
         if (StringUtils.isNotEmpty(id)) {
+            Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+            Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
             MeterMidPayItemContract obj = payItemContractService.getById(id);
+
             MeterMidPayItemContractVO vo = new MeterMidPayItemContractVO();
             BeanUtil.copyProperties(obj, vo);
+            if (ObjectUtil.isNotEmpty(obj.getPayApplicableType())) {
+                vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(obj.getPayApplicableType().toString(), null));
+            }
+            if (ObjectUtil.isNotEmpty(obj.getPayType())) {
+                vo.setPayTypeName(meterPayTypeMap.getOrDefault(obj.getPayType().toString(), null));
+            }
             List<MeterMidPayItemRelation> recordInfos = jdbcTemplate.query("SELECT * FROM s_meter_mid_pay_item_relation WHERE mid_pay_id = " + id, new BeanPropertyRowMapper<>(MeterMidPayItemRelation.class));
             if (recordInfos.size() > 0) {
                 Set<Long> ids = recordInfos.stream().map(MeterMidPayItemRelation::getMidPayIdRelation).collect(Collectors.toSet());
@@ -286,12 +370,33 @@ public class MidPayItemController extends BladeController {
     @PostMapping("/contract/page")
     @ApiOperationSupport(order = 16)
     @ApiOperation(value = "合同段中期支付项分页", notes = "传入MeterMidPayItemContract、Query")
-    public R<IPage<MeterMidPayItemContract>> contractPage(@RequestBody MeterMidPayItemContract meterMidPayItemContract, @RequestBody Query query) {
+    public R<IPage<MeterMidPayItemContractVO>> contractPage(@RequestBody MeterMidPayItemContract meterMidPayItemContract, @RequestBody Query query) {
         IPage<MeterMidPayItemContract> pages = payItemContractService.page(Condition.getPage(query), Condition.getQueryWrapper(meterMidPayItemContract));
-        List<MeterMidPayItemContract> sortResult = pages.getRecords().stream()
-                .sorted(Comparator.comparing(MeterMidPayItemContract::getCreateTime))
+
+        Map<String, String> meterPayTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+        Map<String, String> meterPayAppTypeMap = jdbcTemplate.query("SELECT dict_key,dict_value FROM blade_dict WHERE is_deleted = 0 AND code = 'meter_pay_applicable_type'", new BeanPropertyRowMapper<>(Dict.class)).stream().collect(Collectors.toMap(Dict::getDictKey, Dict::getDictValue));
+
+        List<MeterMidPayItemContractVO> sortResult = pages.getRecords().stream()
+                .map(contract -> {
+                    MeterMidPayItemContractVO vo = new MeterMidPayItemContractVO();
+                    BeanUtil.copyProperties(contract, vo);
+                    if (ObjectUtil.isNotEmpty(contract.getPayApplicableType())) {
+                        vo.setPayApplicableTypeName(meterPayAppTypeMap.getOrDefault(contract.getPayApplicableType().toString(), null));
+                    }
+                    if (ObjectUtil.isNotEmpty(contract.getPayType())) {
+                        vo.setPayTypeName(meterPayTypeMap.getOrDefault(contract.getPayType().toString(), null));
+                    }
+                    return vo;
+                })
+                .sorted(Comparator.comparing(MeterMidPayItemContractVO::getCreateTime))
                 .collect(Collectors.toList());
-        return R.data(pages.setRecords(sortResult));
+
+        IPage<MeterMidPayItemContractVO> resultPage = new Page<>();
+        resultPage.setTotal(pages.getTotal());
+        resultPage.setCurrent(pages.getCurrent());
+        resultPage.setSize(pages.getSize());
+        resultPage.setRecords(sortResult);
+        return R.data(resultPage);
     }
 
     @PostMapping("/contract/all-list")