Jelajahi Sumber

计量变更令相关bug,更改短信模版

chenr 2 bulan lalu
induk
melakukan
b5acd27616
22 mengubah file dengan 349 tambahan dan 163 penghapusan
  1. 5 2
      blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java
  2. 2 2
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java
  3. 4 3
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClientFallBack.java
  4. 5 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterApprovalDTO.java
  5. 0 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/OperationLogController.java
  6. 2 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  7. 0 88
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  8. 4 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java
  9. 24 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  10. 17 6
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  11. 8 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.java
  12. 29 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml
  13. 2 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenInventoryMapper.java
  14. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenInventoryMapper.xml
  15. 2 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.java
  16. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.xml
  17. 1 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IChangeTokenInventoryService.java
  18. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInventoryFormMeterService.java
  19. 91 37
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  20. 5 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenInventoryServiceImpl.java
  21. 5 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java
  22. 133 11
      blade-service/blade-repair/src/main/java/org/springblade/repair/controller/CheckAndRepairController.java

+ 5 - 2
blade-ops/blade-resource/src/main/java/org/springblade/resource/endpoint/SmsEndpoint.java

@@ -19,6 +19,7 @@ package org.springblade.resource.endpoint;
 import io.swagger.annotations.Api;
 import lombok.AllArgsConstructor;
 import lombok.SneakyThrows;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.sms.model.SmsCode;
 import org.springblade.core.sms.model.SmsData;
 import org.springblade.core.sms.model.SmsResponse;
@@ -91,8 +92,10 @@ public class SmsEndpoint {
      */
     @SneakyThrows
     @PostMapping("/send-message")
-    public R sendMessage(@RequestParam String code, @RequestParam String params, @RequestParam String phones) {
-        SmsData smsData = new SmsData(JsonUtil.readMap(params, String.class, String.class));
+    public R sendMessage(BladeUser user, @RequestParam String code, @RequestParam String params, @RequestParam String phones) {
+        Map<String, String> paramss = JsonUtil.readMap(params, String.class, String.class);
+        paramss.put("name",user.getNickName());
+        SmsData smsData = new SmsData(paramss);
         return send(code, smsData, phones);
     }
 

+ 2 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClient.java

@@ -77,11 +77,11 @@ public interface ExcelTabClient {
     R getPdfS(@RequestParam String nodeId, @RequestParam String classify, @RequestParam String contractId) throws IOException;
 
     @PostMapping(API_PREFIX + "/saveOrUpdate")
-    void saveOrUpdate(@RequestBody ExcelTab detail);
+    boolean saveOrUpdate(@RequestBody ExcelTab detail);
 
     @PostMapping(API_PREFIX + "/expailHtmlInfo")
     void expailHtmlInfo(@RequestParam String thmlUrl, @RequestParam Long id, @RequestParam String s) throws Exception;
 
     @PostMapping(API_PREFIX + "/excelInfo")
-    void excelInfo(@RequestParam InputStream inputStream, @RequestParam String exceUrl, @RequestParam String thmlUrl, @RequestParam String number);
+    void excelInfo(@RequestPart("file") MultipartFile file, @RequestParam String exceUrl, @RequestParam String thmlUrl, @RequestParam String number) throws IOException;
 }

+ 4 - 3
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ExcelTabClientFallBack.java

@@ -77,8 +77,8 @@ public class ExcelTabClientFallBack implements ExcelTabClient {
     }
 
     @Override
-    public void saveOrUpdate(ExcelTab detail) {
-
+    public boolean saveOrUpdate(ExcelTab detail) {
+        return true;
     }
 
     @Override
@@ -87,9 +87,10 @@ public class ExcelTabClientFallBack implements ExcelTabClient {
     }
 
     @Override
-    public void excelInfo(InputStream inputStream, String exceUrl, String thmlUrl, String number) {
+    public void excelInfo(MultipartFile file, String exceUrl, String thmlUrl, String number) throws IOException {
 
     }
 
 
+
 }

+ 5 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterApprovalDTO.java

@@ -5,6 +5,8 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
 
 @Data
 public class MeterApprovalDTO implements Serializable {
@@ -45,5 +47,8 @@ public class MeterApprovalDTO implements Serializable {
     @ApiModelProperty("施工单位送审金额")
     private BigDecimal submitApprovalMoney;
 
+    @ApiModelProperty("变更令批量上报ids")
+    private String ids;
+
 
 }

+ 0 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/OperationLogController.java

@@ -158,8 +158,6 @@ public class OperationLogController extends BladeController {
         if (StringUtils.isNotEmpty(operationLog.getQueryValue())) {
             wrapper.lambda().like(OperationLog::getOperationContent, operationLog.getQueryValue());
         }
-
-
         IPage<OperationLog> pages = new Page<>(query.getCurrent(),query.getSize());
 //        IPage<OperationLog> pages = operationLogService.page(Condition.getPage(query), wrapper.lambda().orderBy(true, false, OperationLog::getCreateTime));
         pages = logMapper.getPage(pages,operationLog);

+ 2 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -190,11 +190,12 @@ public class TaskController extends BladeController {
     @PostMapping("/send-notice")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "短信验证")
-    public R<Boolean> sendNotice(@RequestParam String phone) {
+    public R<Boolean> sendNotice(BladeUser user,@RequestParam String phone) {
 //        String code = CommonUtil.getCharAndNumber(4);
         String code = String.valueOf((int) (Math.random() * 9000 + 1000));
         Map<String, String> params = new HashMap<>(3);
         params.put("code", code);
+        params.put("name", user.getNickName());
         R<SmsResponse> result = this.newSmsClient.sendMessage("test_code", JsonUtil.toJson(params), phone);
         if (result.getData().isSuccess()) {
             //记录当前验证码

+ 0 - 88
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -4424,96 +4424,8 @@ public class ExcelTabController extends BladeController {
         }
     }
 
-    //@Scheduled(cron = "0 01 15 * * ?")
-    //检查excel路径有错的
-    public void cheackExcel() throws IOException {
-        StringBuilder result=new StringBuilder("");
-        String sql = "Select * from m_excel_tab where parent_id=0 and is_deleted=0";
-        List<ExcelTab> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ExcelTab.class));
-        for (ExcelTab excelTab : query) {
-            String sql1 = "Select * from m_excel_tab where parent_id=" + excelTab.getId() + " and is_deleted=0";
-            List<ExcelTab> query1 = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(ExcelTab.class));
-            for (ExcelTab tab : query1) {
-                String sql2 = "Select * from m_excel_tab where parent_id=" + tab.getId() + " and is_deleted=0";
-                List<ExcelTab> query2 = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(ExcelTab.class));
-                List<String> names = new ArrayList<>();
-                for (ExcelTab excelTab1 : query2) {
-                    if (excelTab1.getFileUrl() != null) {
-                        if (excelTab1.getFileUrl().endsWith(".xlsx") || excelTab1.getFileUrl().endsWith(".xls")) {
-                            long resourceLength = CommonUtil.getResourceLength(excelTab1.getFileUrl());
-                            if (resourceLength <= 500) {
-                                names.add(excelTab1.getName());
-                                result.append(excelTab.getName() + "--" + tab.getName() + "--" + excelTab1.getName()+"\n");
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
 
-    /**
-     * 检查清表html是否存在,不存在就下载重新上传
-     * 如果excel都不存在,就输出出来
-     * @throws Exception
-     */
-    //@Scheduled(cron = "00 13 10 * * ?")
-    public void checkHtmlIsExist() throws Exception {
-        StringBuilder result=new StringBuilder("");
-        StringBuilder result1=new StringBuilder("");
-        String sql = "Select * from m_excel_tab where parent_id=0 and is_deleted=0";
-        List<ExcelTab> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ExcelTab.class));
-        String excelPath="E:\\excel\\";
-        try {
-            for (ExcelTab excelTab : query) {
-                String sql1 = "Select * from m_excel_tab where parent_id=" + excelTab.getId() + " and is_deleted=0";
-                List<ExcelTab> query1 = jdbcTemplate.query(sql1, new BeanPropertyRowMapper<>(ExcelTab.class));
-                for (ExcelTab tab : query1) {
-                    String sql2 = "Select * from m_excel_tab where parent_id=" + tab.getId() + " and is_deleted=0 and file_url is not null ";
-                    List<ExcelTab> query2 = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(ExcelTab.class));
-                    for (ExcelTab excelTab1 : query2) {
-                        if(!signFtpUtil.isExist(excelTab1.getHtmlUrl())){
-                            if(excelTab1.getFileUrl() != null&&excelTab1.getFileUrl().endsWith(".xlsx") || excelTab1.getFileUrl().endsWith(".xls")){
-                                long resourceLength = CommonUtil.getResourceLength(excelTab1.getFileUrl());
-                                if(resourceLength>=500){
-                                    //先下载这个文件,再上传
-                                    String fileUrl = excelTab1.getFileUrl();
-                                    String localPath=excelPath+excelTab1.getId()+".xlsx";
-                                    InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(fileUrl);
-                                    FileUtils.saveFile(inputStreamByUrl,localPath);
-                                    File file = new File(localPath);
-                                    if(file.exists()){
-                                        Map<String, Object> paramMap = new HashMap<>();
-                                        paramMap.put("nodeId", excelTab1.getId());
-                                        paramMap.put("type",2);
-                                        HashMap<String,String> headers=new HashMap<>();
-                                        headers.put("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary4tcP4daRPIFDBRvm");
-                                        headers.put("Authorization","Basic c2FiZXI6c2FiZXJfc2VjcmV0");
-                                        headers.put("Blade-auth","bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJ1c2VyX25hbWUiOiJjciIsInJlYWxfbmFtZSI6IumZiOeEtiIsImF2YXRhciI6IiIsImF1dGhvcml0aWVzIjpbImFkbWluaXN0cmF0b3IiXSwiY2xpZW50X2lkIjoiY2xpZW50Iiwicm9sZV9uYW1lIjoiYWRtaW5pc3RyYXRvciIsImxpY2Vuc2UiOiJwb3dlcmVkIGJ5IGJsYWRleCIsInBvc3RfaWQiOiIiLCJ1c2VyX2lkIjoiMTkxMjcwMTM4Mzk4MjQyNDA2NSIsInJvbGVfaWQiOiIxMTIzNTk4ODE2NzM4Njc1MjAxIiwicGhvbmUiOiIxNTIxNTA1Mjc4NiIsInNjb3BlIjpbImFsbCJdLCJuaWNrX25hbWUiOiLpmYjnhLYiLCJvYXV0aF9pZCI6IiIsImRldGFpbCI6eyJ0eXBlIjoid2ViIn0sImV4cCI6MTc0NjY4ODQxOCwiZGVwdF9pZCI6IjE1MzY5ODMwNTYzNjIzODEzMTMiLCJqdGkiOiI3ZjEwY2U0NC1lOWE2LTRlYjMtYjBjYi1iYTJlY2U2MDk3ZjAiLCJhY2NvdW50IjoiY3IifQ.2v68wLgQvCUXanrNdXE6WPnXSrnjjW6mmepPgeWbAMo");
-                                        headers.put("Tenant-Id","000000");
-                                        String url="http://testmanger.hcxxy.com/api/blade-manager/exceltab/put-file-attach";
-                                        String body = HttpUtil.createPost(url).addHeaders(headers).form(paramMap).form("file", file).execute().body();
-                                        Map map = JSON.parseObject(body, Map.class);
-                                        if((int)map.get("code")!=200){
-                                            result1.append(excelTab.getName() + "--" + tab.getName() + "--" + excelTab1.getName()+"\n");
-                                        }
-                                    }
-                                }else {
-                                    result.append(excelTab.getName() + "--" + tab.getName() + "--" + excelTab1.getName()+"\n");
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
 
-        System.out.println("完成");
-        System.out.println(result);
-        System.out.println(result1);
-    }
     @GetMapping("/checkParamElement")
     @ApiOperationSupport(order = 30)
     @ApiOperation(value = "检查参数元素", notes = "检查参数元素")

+ 4 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ExcelTabClientImpl.java

@@ -481,8 +481,8 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     }
 
     @Override
-    public void saveOrUpdate(ExcelTab detail) {
-        excelTabService.saveOrUpdate(detail);
+    public boolean saveOrUpdate(ExcelTab detail) {
+      return   excelTabService.saveOrUpdate(detail);
     }
 
     @Override
@@ -491,8 +491,8 @@ public class ExcelTabClientImpl implements ExcelTabClient {
     }
 
     @Override
-    public void excelInfo(InputStream inputStream, String exceUrl, String thmlUrl, String number) {
-        ExcelInfoUtils.excelInfo(inputStream, exceUrl, thmlUrl, number);
+    public void excelInfo(MultipartFile file, String exceUrl, String thmlUrl, String number) throws IOException {
+        ExcelInfoUtils.excelInfo(file.getInputStream(), exceUrl, thmlUrl, number);
     }
 
 

+ 24 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -1181,9 +1181,12 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             checkTable = op.get().getInitTableName();
         }
         for (FormData fd : tec.formDataList) {
+            if(fd.getCode().equals("m_20220928153039_1575025176213454848:key_17")){
+                System.out.println("111");
+            }
             if (fd.verify()) {
-                if(fd.getCode().equals("m_20220928143955_1575012411126054912:key_2")){
-                    System.out.println("111");
+                if(fd.getAddPages()!=0){
+                    System.out.println("");
                 }
                 Formula formula = fd.getFormula();
                 System.out.println(formula.getId() + ":" + fd.getEName());
@@ -1231,9 +1234,24 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                             List<Object> e1 = (List<Object>) ((HashMap<?, ?>) e).get(ele.get(0).getCode());
                                             List<Object> values = (List<Object>) data;
                                             if (e1.size() != values.size()) {
-                                                for (int i = 0; i < e1.size(); i++) {
-                                                    if (e1.get(i).equals("")) {
-                                                        values.add(i, "");
+                                                //JL815获取CL10 JL815只有6行,CL10有8行导致生成空表
+                                                if(fd.getCode().equals("m_20220928153039_1575025176213454848:key_17")){
+                                                    for (int i = 0; i < e1.size(); i++) {
+                                                        if(i>=fd.getValues().size()){
+                                                            if(!e1.get(i).equals("")){
+                                                                values.add(i,e1.get(i));
+                                                            }
+                                                        }else {
+                                                            if (e1.get(i).equals("")) {
+                                                                values.add(i, "");
+                                                            }
+                                                        }
+                                                    }
+                                                }else {
+                                                    for (int i = 0; i < e1.size(); i++) {
+                                                        if (e1.get(i).equals("")) {
+                                                            values.add(i, "");
+                                                        }
                                                     }
                                                 }
                                             }
@@ -1288,6 +1306,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                         }
                                     }
                                 }
+
                                 write(tec, fd, data);
                             }
                             /*错位计算偏移量重置*/

+ 17 - 6
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -177,6 +177,7 @@ public class TaskController extends BladeController {
     @ApiOperation(value = "获取任务名称", notes = "传入合同段contractId、期数id(变更令传勾选的id字符串英文逗号拼接)、type=1(中间计量申请)、=2(材料计量单)、3=(开工预付款计量单)、=4(变更令)")
     public R<Object> name(@RequestParam String contractId, @RequestParam String id, @RequestParam String type) {
         String name = null;
+        String ids=null;
         BigDecimal bigDecimal=BigDecimal.ZERO;
         if (ObjectUtil.isNotEmpty(contractId) && ObjectUtil.isNotEmpty(id)) {
             ContractInfo contractInfo = jdbcTemplate.query("SELECT contract_name FROM m_contract_info WHERE id = " + contractId, new BeanPropertyRowMapper<>(ContractInfo.class)).stream().findAny().orElse(null);
@@ -200,10 +201,14 @@ public class TaskController extends BladeController {
                 List<Long> longs = Func.toLongList(id);
                 if (contractInfo != null && longs.size() > 0) {
                     List<ChangeTokenForm> changeTokenForms = changeTokenFormService.getBaseMapper().selectBatchIds(longs);
-                    if (changeTokenForms.size() > 0) {
-                        List<String> collect = changeTokenForms.stream().map(ChangeTokenForm::getChangeNumber).collect(Collectors.toList());
-                        name = "【" + contractInfo.getContractName() + "】" + date + " 变更令【" + StringUtils.join(collect, "、") + "】";
+                    StringBuilder s=new StringBuilder("");
+                    StringBuilder s1=new StringBuilder("");
+                    for (ChangeTokenForm form : changeTokenForms) {
+                        s=s.append("【" + contractInfo.getContractName() + "】" + date + " 变更令【"+form.getChangeNumber()+"】"+",");
+                        s1=s1.append(form.getId()+",");
                     }
+                    name=s.substring(0,s.length()-1);
+                    ids=s1.substring(0,s1.length()-1);
                 }
             }
             List<Long> longs = Func.toLongList(id);
@@ -216,8 +221,9 @@ public class TaskController extends BladeController {
 
         }
         Map<String,Object> map=new HashMap<>();
-        map.put("name",name);
+        map.put("name", name);
         map.put("submitApprovalMoney",bigDecimal);
+        map.put("ids", ids);
         return R.data(200, map, "操作成功");
     }
 
@@ -641,6 +647,7 @@ public class TaskController extends BladeController {
         if (!objectR.isSuccess()) {
             throw new ServiceException(objectR.getMsg());
         }
+        List<String> taskNameList =Arrays.asList(approvalDTO.getTaskName().split(","));
 
         String[] formDataIds = approvalDTO.getPeriodId().split(",");
         String[] taskIdList = taskId.split(",");
@@ -664,7 +671,9 @@ public class TaskController extends BladeController {
             task.setTaskContent(ObjectUtil.isNotEmpty(approvalDTO.getTaskDesc()) ? approvalDTO.getTaskDesc() : null);
             task.setTaskUser(null);
             task.setFormDataId(formDataIds[i]); //数据指向,指向期数id(变更令为id英文逗号拼接)
-            task.setTaskName(approvalDTO.getTaskName());
+            if(i<=taskNameList.size()-1){
+                task.setTaskName(taskNameList.get(i));
+            }
             task.setContractId(approvalDTO.getContractId().toString());
             task.setProjectId(approvalDTO.getProjectId().toString());
             task.setBatch(approvalDTO.getBatch());
@@ -1423,8 +1432,10 @@ public class TaskController extends BladeController {
                             Task::getId,
                             task -> task));
         }
+
         //所有满足条件的日志 转map
-        String logQuery = "select business_id,create_user_name ,create_time, operation_type  from u_operation_log where  operation_content like '%废除%'";
+        //String logQuery = "select business_id,create_user_name ,create_time, operation_type  from u_operation_log where  operation_content like '%废除%'";
+        String logQuery="select business_id,create_user_name ,create_time, operation_type  from u_operation_log where  operation_type IN (6,9,26,61,62)";
         List<OperationLog> operationLogs = jdbcTemplate.query(logQuery, new BeanPropertyRowMapper<>(OperationLog.class));
         if(ObjectUtil.isNotEmpty(operationLogs)){
             operationLogMap = operationLogs.stream().collect(Collectors.groupingBy(OperationLog::getBusinessId));

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

@@ -94,4 +94,12 @@ public interface ChangeTokenFormMapper extends BaseMapper<ChangeTokenForm> {
     void deleteCollectForm(@Param("tokenId")Long id);
 
     List<MiddleMeterApply> getChangeMiddleTotal(@Param("contractId") Long contractId,@Param("tokenId") Long id);
+
+    List<ChangeTokenInventory> getAllContractFormByTokenId(@Param("id") Long id);
+
+    List<ChangeTokenInventory> getInventoryByMeterIdAndFormId(@Param("contractMeterId") Long contractMeterId, @Param("contractFormId") Long contractFormId);
+
+    List<ChangeTokenForm> getChangeTokenFormByCommandDate(@Param("tokenIds") List<Long> tokenIds,@Param("id") Long id);
+
+    List<ChangeFormVO2> getFormList4(@Param("id") Long id, @Param("contractId") Long contractId);
 }

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

@@ -328,6 +328,33 @@
         where is_deleted = 0 and contract_id = #{contractId} and
             FIND_IN_SET(#{tokenId}, change_token_ids)
     </select>
-
-
+    <select id="getAllContractFormByTokenId" resultType="org.springblade.meter.entity.ChangeTokenInventory">
+        select * from s_change_token_inventory where change_token_id = #{id} and is_deleted = 0 and is_collect_form = 0
+    </select>
+    <select id="getInventoryByMeterIdAndFormId" resultType="org.springblade.meter.entity.ChangeTokenInventory">
+        select * from s_change_token_inventory where contract_meter_id=#{contractMeterId} and contract_form_id=#{contractFormId} and is_deleted = 0
+    </select>
+    <select id="getChangeTokenFormByCommandDate" resultType="org.springblade.meter.entity.ChangeTokenForm">
+        SELECT *
+        FROM s_change_token_form
+        WHERE id IN
+        <foreach collection="tokenIds" item="id" open="(" separator=", " close=")">
+            #{id}
+        </foreach>
+        AND command_status = 1
+        AND update_time > (
+        SELECT update_time
+        FROM s_change_token_form
+        WHERE id = #{id}
+        )
+        ORDER BY update_time ASC
+    </select>
+    <select id="getFormList4" resultType="org.springblade.meter.vo.ChangeFormVO2">
+        select cti.contract_form_id as id,cti.contract_meter_id as contractMeterId,
+               cti.change_total as changeTotal,
+               cti.current_price as currentPrice
+        from s_change_token_inventory as cti
+        where cti.contract_id = #{contractId} and cti.is_deleted = 0
+          AND cti.change_token_id = #{id} and is_collect_form = 0
+    </select>
 </mapper>

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

@@ -30,4 +30,6 @@ public interface ChangeTokenInventoryMapper extends BaseMapper<ChangeTokenInvent
 
 
     void deleteByTokenId(@Param("id") Long id);
+
+    ChangeTokenInventory getCollectForm(@Param("changeTokenId")Long changeTokenId,@Param("contractFormId")Long contractFormId);
 }

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

@@ -24,6 +24,9 @@
         DELETE FROM s_change_token_inventory
         where change_token_id = #{id}
     </delete>
+    <select id="getCollectForm" resultType="org.springblade.meter.entity.ChangeTokenInventory">
+        SELECT * FROM s_change_token_inventory where  change_token_id=#{changeTokenId} and contract_form_id=#{contractFormId} and is_collect_form=1 and is_deleted=0
+    </select>
 
 
 </mapper>

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

@@ -43,4 +43,6 @@ public interface InventoryFormMeterMapper extends BaseMapper<InventoryFormMeter>
 
     //根据计量单元id,删除当前节点以及下层节点,关联的所有清单
     void deleteByNodeId(@Param("meterId") Long meterId,@Param("contractId") Long contractId);
+
+    InventoryFormMeter getifm(@Param("id") Long id, @Param("contractMeterId") Long contractMeterId);
 }

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

@@ -54,5 +54,9 @@
             #{id}
         </foreach>
     </select>
+    <select id="getifm" resultType="org.springblade.meter.entity.InventoryFormMeter">
+        select * from s_inventory_form_meter
+        where contract_form_id = #{id} and contract_meter_id = #{contractMeterId}  and is_deleted = 0
+    </select>
 
 </mapper>

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

@@ -33,4 +33,5 @@ public interface IChangeTokenInventoryService extends BaseService<ChangeTokenInv
     //删除当前变更令下的清单
     void deleteByTokenId(Long tokenId);
 
+    ChangeTokenInventory getCollectForm(Long changeTokenId,Long contractFormId);
 }

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

@@ -16,6 +16,7 @@
  */
 package org.springblade.meter.service;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.core.tool.api.R;
 import org.springblade.meter.dto.MeterTreeContractDTO;
 import org.springblade.meter.entity.InventoryFormMeter;
@@ -49,4 +50,6 @@ public interface IInventoryFormMeterService extends BaseService<InventoryFormMet
      * 删除 同合计量 清单
      */
     R delInMeterInfo(String meterId, Long formIds);
+
+    InventoryFormMeter getifm(@Param("id") Long id, @Param("contractMeterId") Long contractMeterId);
 }

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

@@ -25,6 +25,7 @@ import org.apache.commons.lang.StringUtils;
 import org.springblade.business.entity.Task;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.base.BaseEntity;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -48,6 +49,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * 变更令表 服务实现类
@@ -715,12 +717,45 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         }
 
         //判断是否有清单执行过二次变更,执行过则不能撤销
-        List<ChangeFormVO2> vo2 = baseMapper.getMultipleChange(id);
-        if (vo2.size() != 0){
-            String s = vo2.stream().map(ChangeFormVO2::getFormName).distinct().collect(Collectors.joining(",", "[", "]"));
-            throw new ServiceException("清单:"+s+"在当前变更之后又发生过变更,请先撤销上一次变更");
-        }
-
+//        List<ChangeFormVO2> vo2 = baseMapper.getMultipleChange(id);
+//        if (vo2.size() != 0){
+//            String s = vo2.stream().map(ChangeFormVO2::getFormName).distinct().collect(Collectors.joining(",", "[", "]"));
+//            throw new ServiceException("清单:"+s+"在当前变更之后又发生过变更,请先撤销上一次变更");
+//        }
+        //取消上面的限制,允许跳过第二次变更去撤销第一次的变更,根据增减量,所有相关的全部都要改变  2025-05-14 王博念
+        boolean flag=false;
+          List<ChangeFormVO2> vo2 = baseMapper.getMultipleChange(id);
+           if(vo2.size()!=0){
+               flag=true;
+            //查出当前变更令所有的清单
+             List<ChangeTokenInventory> list=baseMapper.getAllContractFormByTokenId(id);
+               //根据清单查出当前部位用了当前清单的所有的变更令
+               for (ChangeTokenInventory inventory : list) {
+                   List<ChangeTokenInventory> list1=baseMapper.getInventoryByMeterIdAndFormId(inventory.getContractMeterId(),inventory.getContractFormId());
+                   //查出当前变更令的下达时间,根据时间排序
+                   List<Long> tokenIds = list1.stream().map(o -> o.getChangeTokenId()).collect(Collectors.toList());
+                   List<ChangeTokenForm> list2 = baseMapper.getChangeTokenFormByCommandDate(tokenIds, inventory.getChangeTokenId());
+//                   for (ChangeTokenForm tokenForm : list2) {
+//                       tokenForm.setChangeMoney(tokenForm.getChangeMoney().subtract(inventory.getChangeMoney()));
+//                       baseMapper.updateById(tokenForm);
+//                   }
+                   List<Long> changeTokenIds = list2.stream().map(O -> O.getId()).collect(Collectors.toList());
+                   List<ChangeTokenInventory> updateInventory = list1.stream().filter(o -> changeTokenIds.contains(o.getChangeTokenId())).collect(Collectors.toList());
+                   for (ChangeTokenInventory tokenInventory : updateInventory) {
+                       tokenInventory.setChangeBeforeTotal(tokenInventory.getChangeBeforeTotal().subtract(inventory.getChangeTotal()));
+                       tokenInventory.setChangeAfterTotal(tokenInventory.getChangeAfterTotal().subtract(inventory.getChangeTotal()));
+                       tokenInventory.setChangeBeforeMoney(tokenInventory.getChangeBeforeTotal().multiply(tokenInventory.getCurrentPrice()));
+                       tokenInventory.setChangeAfterMoney(tokenInventory.getChangeAfterTotal().multiply(tokenInventory.getCurrentPrice()));
+                       changeTokenInventoryService.getBaseMapper().updateById(tokenInventory);
+                       ChangeTokenInventory cti=changeTokenInventoryService.getCollectForm(tokenInventory.getChangeTokenId(),tokenInventory.getContractFormId());
+                       cti.setChangeBeforeTotal(cti.getChangeBeforeTotal().subtract(inventory.getChangeTotal()));
+                       cti.setChangeAfterTotal(cti.getChangeAfterTotal().subtract(inventory.getChangeTotal()));
+                       cti.setChangeBeforeMoney(cti.getChangeBeforeTotal().multiply(inventory.getCurrentPrice()));
+                       cti.setChangeAfterMoney(cti.getChangeAfterTotal().multiply(inventory.getCurrentPrice()));
+                       changeTokenInventoryService.getBaseMapper().updateById(cti);
+                   }
+               }
+          }
         //双重验证,中间计量申请存在先删除变更清单,又添加回来的操作
         List<MiddleMeterApply> middles = baseMapper.getChangeMiddleTotal(form.getContractId(),id);
         if (middles.size() > 0){
@@ -740,41 +775,60 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
                 throw new ServiceException("当前变更令已经修改中间计量申请的清单:"+s+"的数据,不能撤销变更,删除计量清单之后允许撤销");
             }
         }
+        //取消限制后的
+        if(flag){
+            //修改合同清单
+            List<ChangeTokenInventory> list=baseMapper.getAllContractFormByTokenId(id);
+            for (ChangeTokenInventory inventory : list) {
+                ContractInventoryForm form1 = contractInventoryFormService.getById(inventory.getContractFormId());
+                form1.setChangeTotal(form1.getChangeTotal().subtract(inventory.getChangeTotal()));
+                form1.setChangeMoney(form1.getChangeTotal().multiply(form1.getCurrentPrice()));
+                contractInventoryFormService.updateById(form1);
+            }
+            //修改清单与合同计量单元中间表
+            List<ChangeFormVO2> allForm = baseMapper.getFormList4(id,form.getContractId());
+            for (ChangeFormVO2 cf2 : allForm) {
+             InventoryFormMeter ifm=inventoryFormMeterService.getifm(cf2.getId(),cf2.getContractMeterId());
+                ifm.setChangeBuildPictureTotal(ifm.getChangeBuildPictureTotal().subtract(cf2.getChangeTotal()));
+                ifm.setBuildPictureMoney(ifm.getChangeBuildPictureTotal().multiply(cf2.getCurrentPrice()));
+                inventoryFormMeterService.getBaseMapper().updateById(ifm);
+            }
+        }else {
+            //通过汇总项修改合同清单
+            List<ChangeFormVO2> vo3 = baseMapper.getAllCollectForm(id);
+            if (vo3.size() == 0){
+                throw new ServiceException("当前变更令的变更清单为空,撤销失败");
+            }
+            List<ContractInventoryForm> list2 = new ArrayList<>();
+            for (ChangeFormVO2 vo : vo3) {
+                // 修改清单数量与金额
+                ContractInventoryForm fo = new ContractInventoryForm();
+                fo.setId(vo.getId());
+                fo.setChangeTotal(vo.getContractTotal());
+                fo.setChangeMoney(vo.getContractMoney());
+                list2.add(fo);
+            }
+            //批量修改合同工程清单,因为mybatis的修改是伪批量,所以手动拼接
+            baseMapper.batchUpdateForm(list2);
+            //修改清单与合同计量单元中间表
+            //清单与合同计量单元中间表集合,用于批量修改
+            List<InventoryFormMeter> list4 = new ArrayList<>();
+            //获取当前变更令的所有变更清单
+            List<ChangeFormVO2> allForm = baseMapper.getFormList3(id,form.getContractId());
+            for (ChangeFormVO2 v : allForm) {
+                InventoryFormMeter meter = new InventoryFormMeter();
+                meter.setContractFormId(v.getId());
+                meter.setContractMeterId(v.getContractMeterId());
+                meter.setChangeBuildPictureTotal(v.getChangeTotal());
+                meter.setChangeBuildPictureMoney(v.getChangeMoney());
+                list4.add(meter);
+            }
+            baseMapper.batchUpdateMeterForm(list4);
+        }
 
 
-        //通过汇总项修改合同清单
-        List<ChangeFormVO2> vo3 = baseMapper.getAllCollectForm(id);
-        if (vo3.size() == 0){
-            throw new ServiceException("当前变更令的变更清单为空,撤销失败");
-        }
-        List<ContractInventoryForm> list2 = new ArrayList<>();
-        for (ChangeFormVO2 vo : vo3) {
-            // 修改清单数量与金额
-            ContractInventoryForm fo = new ContractInventoryForm();
-            fo.setId(vo.getId());
-            fo.setChangeTotal(vo.getContractTotal());
-            fo.setChangeMoney(vo.getContractMoney());
-            list2.add(fo);
-        }
-        //批量修改合同工程清单,因为mybatis的修改是伪批量,所以手动拼接
-        baseMapper.batchUpdateForm(list2);
         //批量删除汇总项,因为撤销变更后,是可以下达的状态,下达时会重新生成最新的清单数据
         baseMapper.deleteCollectForm(id);
-
-        //修改清单与合同计量单元中间表
-        //清单与合同计量单元中间表集合,用于批量修改
-        List<InventoryFormMeter> list4 = new ArrayList<>();
-        //获取当前变更令的所有变更清单
-        List<ChangeFormVO2> allForm = baseMapper.getFormList3(id,form.getContractId());
-        for (ChangeFormVO2 v : allForm) {
-            InventoryFormMeter meter = new InventoryFormMeter();
-            meter.setContractFormId(v.getId());
-            meter.setContractMeterId(v.getContractMeterId());
-            meter.setChangeBuildPictureTotal(v.getChangeTotal());
-            meter.setChangeBuildPictureMoney(v.getChangeMoney());
-            list4.add(meter);
-        }
-        baseMapper.batchUpdateMeterForm(list4);
         //获取当前变更令的变更节点
         List<ChangeNodeVO> allNode = baseMapper.getNodeList3(id, form.getContractId());
         if (allNode.size() == 0){

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

@@ -36,4 +36,9 @@ public class ChangeTokenInventoryServiceImpl extends BaseServiceImpl<ChangeToken
     public void deleteByTokenId(Long id) {
         baseMapper.deleteByTokenId(id);
     }
+
+    @Override
+    public ChangeTokenInventory getCollectForm(Long changeTokenId,Long contractFormId) {
+        return baseMapper.getCollectForm(changeTokenId,contractFormId);
+    }
 }

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

@@ -171,6 +171,11 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
         return R.success("成功");
     }
 
+    @Override
+    public InventoryFormMeter getifm(Long id, Long contractMeterId) {
+        return baseMapper.getifm(id,contractMeterId);
+    }
+
     /**
      * 判断当前节点下当前清单是否已经分解或变更过,变更过返回true
      */

+ 133 - 11
blade-service/blade-repair/src/main/java/org/springblade/repair/controller/CheckAndRepairController.java

@@ -16,8 +16,10 @@ import org.springblade.repair.util.FileUtils;
 import org.springblade.resource.feign.NewIOSSClient;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.SingleColumnRowMapper;
 import org.springframework.mock.web.MockMultipartFile;
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -28,7 +30,10 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Files;
+import java.time.chrono.JapaneseDate;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @RestController
@@ -45,7 +50,7 @@ public class CheckAndRepairController {
      */
     @RequestMapping("/checkAndRepairExcelHtml")
     @ApiOperation("定时检测修复ExcelHtml")
-    @Scheduled(cron = "00 22 10 * * ?")
+    @Scheduled(cron = "00 00 00 * * ?")
     public void checkAndRepairExcelHtml() {
         StringBuilder result=new StringBuilder("清表损坏:");
         String sql = "Select * from m_excel_tab where parent_id=0 and is_deleted=0";
@@ -66,7 +71,7 @@ public class CheckAndRepairController {
                         File html = new File(excelTab1.getHtmlUrl());
                         if(!html.exists()){
                             System.out.println(excelTab.getName() + "--" + tab.getName() + "--" + excelTab1.getName()+"html不存在 id:"+excelTab1.getId());
-                            if(excelTab1.getFileUrl() != null&&excelTab1.getFileUrl().endsWith(".xlsx") || excelTab1.getFileUrl().endsWith(".xls")){
+                            if(excelTab1.getFileUrl() != null&&(excelTab1.getFileUrl().endsWith(".xlsx") || excelTab1.getFileUrl().endsWith(".xls"))){
                                 long resourceLength = CommonUtil.getFileContentLength(excelTab1.getFileUrl());
                                 System.out.println("文件大小:"+resourceLength);
                                 if(resourceLength!=415L&&resourceLength!=0L&&resourceLength!=234L){
@@ -140,17 +145,11 @@ public class CheckAndRepairController {
 
     }
 
-    /**
-     * 定时更新private的htmUrl 保证url格式为 /mnt/sdc/Users/hongchuangyanfa/Desktop/privateUrlCopy/
-     */
-    private void checkAndRepairPrivateAndContractPrivateCopyUrl() {
-
-    }
 
     /**
      * 定时更新private和contract的html,通过is_private_type_id;保证一样
      */
-    @Scheduled(cron = "0 0 1 * * ?")
+    @Scheduled(cron = "0 0  1 * * ?")
     public void checkAndRepairPrivateAndContractHtml() {
         System.out.println("开始扫描private和contract的html");
         StringBuilder result=new StringBuilder("");
@@ -172,9 +171,132 @@ public class CheckAndRepairController {
     }
 
     /**
-     * 定时更新private和contract的initTable 通过excelID,保证一样
+     * 定时更新private initTable 通过excelID,保证一样
      */
-    public void checkAndRepairPrivateAndContractInitTable() {}
+    @GetMapping("/checkAndRepairPrivateInitTableAndExcelId")
+    @Scheduled(cron = "0 57  16 * * ?")
+    public void checkAndRepairPrivateInitTableAndExcelId() {
+        System.out.println("开始扫描private initTable和ExcelId");
+        String privateSql="select p_key_id,init_table_name,excel_id,html_url from m_wbs_tree_private where type=2 AND is_deleted=0 AND (excel_id IS NULL OR init_table_name IS NULL OR html_url IS NULL)";
+        List<WbsTreePrivate> list = jdbcTemplate.query(privateSql, new BeanPropertyRowMapper<>(WbsTreePrivate.class));
+        list = list.stream()
+            .filter(item ->
+                !ObjectUtil.isEmpty(item.getHtmlUrl()) ||
+                    !ObjectUtil.isEmpty(item.getExcelId()) ||
+                    !ObjectUtil.isEmpty(item.getInitTableName())
+            )
+            .collect(Collectors.toList());
+        //excelId不为空 但是initTableName为空
+        List<WbsTreePrivate> list1 = list.stream()
+            .filter(item ->
+                !ObjectUtil.isEmpty(item.getExcelId()) &&
+                    ObjectUtil.isEmpty(item.getInitTableName())
+            )
+            .collect(Collectors.toList());
+
+        //excelId为空 但是initTableName不为空
+        List<WbsTreePrivate> list2 = list.stream()
+            .filter(item ->
+                ObjectUtil.isEmpty(item.getExcelId()) &&
+                    !ObjectUtil.isEmpty(item.getInitTableName())
+            )
+            .collect(Collectors.toList());
+        if(!list1.isEmpty()){
+            for (WbsTreePrivate w : list1) {
+                String sql="select a.tab_en_name,b.html_url from m_table_info a left join m_excel_tab b on a.id=b.tab_id where b.id="+w.getExcelId()+" and a.is_deleted=0 and b.is_deleted=0";
+                Map<String, Object> map = jdbcTemplate.queryForMap(sql);
+                if(map.get("tab_en_name")!=null){
+                    String update="update m_wbs_tree_private set init_table_name="+map.get("tab_en_name")+" where p_key_id="+w.getPKeyId();
+                    jdbcTemplate.update(update);
+                }
+                if(w.getHtmlUrl()==null){
+                    String update="update m_wbs_tree_private set html_url="+map.get("html_url")+" where p_key_id="+w.getPKeyId();
+                    jdbcTemplate.update(update);
+                }
+            }
+        }
+        if(!list2.isEmpty()){
+            for (WbsTreePrivate w : list2) {
+                String sql=" select a.id,a.html_url from m_excel_tab a left join m_table_info b on b.id=a.tab_id where b.tab_en_name= '"+w.getInitTableName()+"' and a.is_deleted=0 and b.is_deleted=0";
+                Map<String, Object> map = jdbcTemplate.queryForMap(sql);
+                if(map.get("id")!=null){
+                    String update="update m_wbs_tree_private set excel_id="+map.get("id")+" where p_key_id="+w.getPKeyId();
+                    jdbcTemplate.update(update);
+                }
+                if(w.getHtmlUrl()==null){
+                    if(map.get("html_url")!=null){
+                        String update="update m_wbs_tree_private set html_url='"+map.get("html_url")+"' where p_key_id ="+w.getPKeyId();
+                        jdbcTemplate.update(update);
+                    }
+                }
+            }
+        }
+        System.out.println("更新完毕private initTable和ExcelId");
+    }
+
+    /**
+     * 定时更新contract initTable 通过excelID,保证一样
+     */
+    @GetMapping("/checkAndRepairContractInitTableAndExcelId")
+    @Scheduled(cron = "0  00  2 * * ?")
+    public void checkAndRepairContractInitTableAndExcelId() {
+        System.out.println("定时更新contract initTable和ExcelId");
+        String contractSql="select p_key_id,init_table_name,excel_id,html_url from m_wbs_tree_contract where type=2 AND is_deleted=0 AND (excel_id IS NULL OR init_table_name IS NULL OR html_url IS NULL)";
+        List<WbsTreeContract> list = jdbcTemplate.query(contractSql, new BeanPropertyRowMapper<>(WbsTreeContract.class));
+        list = list.stream()
+            .filter(item ->
+                !ObjectUtil.isEmpty(item.getHtmlUrl()) ||
+                    !ObjectUtil.isEmpty(item.getExcelId()) ||
+                    !ObjectUtil.isEmpty(item.getInitTableName())
+            )
+            .collect(Collectors.toList());
+        //excelId不为空 但是initTableName为空
+        List<WbsTreeContract> list1 = list.stream()
+            .filter(item ->
+                !ObjectUtil.isEmpty(item.getExcelId()) &&
+                    ObjectUtil.isEmpty(item.getInitTableName())
+            )
+            .collect(Collectors.toList());
+
+        //excelId为空 但是initTableName不为空
+        List<WbsTreeContract> list2 = list.stream()
+            .filter(item ->
+                ObjectUtil.isEmpty(item.getExcelId()) &&
+                    !ObjectUtil.isEmpty(item.getInitTableName())
+            )
+            .collect(Collectors.toList());
+        if(!list1.isEmpty()){
+            for (WbsTreeContract w : list1) {
+                String sql="select a.tab_en_name,b.html_url from m_table_info a left join m_excel_tab b on a.id=b.tab_id where b.id="+w.getExcelId()+" and a.is_deleted=0 and b.is_deleted=0";
+                Map<String, Object> map = jdbcTemplate.queryForMap(sql);
+                if(map.get("tab_en_name")!=null){
+                    String update="update m_wbs_tree_contract set init_table_name="+map.get("tab_en_name")+" where p_key_id="+w.getPKeyId();
+                    jdbcTemplate.update(update);
+                }
+                if(w.getHtmlUrl()==null){
+                    String update="update m_wbs_tree_contract set html_url="+map.get("html_url")+" where p_key_id="+w.getPKeyId();
+                    jdbcTemplate.update(update);
+                }
+            }
+        }
+        if(!list2.isEmpty()){
+            for (WbsTreeContract w : list2) {
+                String sql=" select a.id,a.html_url from m_excel_tab a left join m_table_info b on b.id=a.tab_id where b.tab_en_name= '"+w.getInitTableName()+"' and a.is_deleted=0 and b.is_deleted=0";
+                Map<String, Object> map = jdbcTemplate.queryForMap(sql);
+                if(map.get("id")!=null){
+                    String update="update m_wbs_tree_contract set excel_id="+map.get("id")+" where p_key_id="+w.getPKeyId();
+                    jdbcTemplate.update(update);
+                }
+                if(w.getHtmlUrl()==null){
+                    if(map.get("html_url")!=null){
+                        String update="update m_wbs_tree_contract set html_url='"+map.get("html_url")+"' where p_key_id ="+w.getPKeyId();
+                        jdbcTemplate.update(update);
+                    }
+                }
+            }
+        }
+        System.out.println("更新完毕contract initTable和ExcelId");
+    }
 
 
 }