소스 검색

Merge branch 'dev' of http://219.151.181.73:3000/zhuwei/bladex into feature-lihb-20250926-syncInfo

LHB 2 주 전
부모
커밋
70a25fd26e

+ 11 - 2
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/RebateIncentiveAdvPay.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import org.springblade.common.utils.BaseUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 
 /**
  * @author yangyj
@@ -39,13 +40,21 @@ public class RebateIncentiveAdvPay implements  DataModel{
     public void calc(String contractAmount,String dyTotalAmount,String currentPeriodEndPay){
         double contractAmountD=BaseUtils.obj2DoubleZero(contractAmount);
         //2025/7/23  修改逻辑 将最后算出来的值需要减去上期末的扣回动员预付款 currentPeriodEndPay
-        double x=((2*(BaseUtils.obj2DoubleZero(subtotal) -0.3*contractAmountD)*BaseUtils.obj2DoubleZero(dyTotalAmount))/contractAmountD)-BaseUtils.obj2DoubleZero(currentPeriodEndPay);
+        double x=((2*(BaseUtils.obj2DoubleZero(subtotal) -0.3*contractAmountD)*BaseUtils.obj2DoubleZero(dyTotalAmount))/contractAmountD);
+        double y=BaseUtils.obj2DoubleZero(currentPeriodEndPay);
+        // 四舍五入后再相减
+        BigDecimal roundedX = new BigDecimal(x).setScale(0, BigDecimal.ROUND_HALF_UP);
+        BigDecimal roundedY = new BigDecimal(y).setScale(0, BigDecimal.ROUND_HALF_UP);
+        double result = roundedX.subtract(roundedY).doubleValue();
         if(x>0){
             /*扣回款本身就是负数*/
-            String s=new BigDecimal(x).setScale(5,BigDecimal.ROUND_HALF_UP).toPlainString();
+            String s=new BigDecimal(result).setScale(0,BigDecimal.ROUND_HALF_UP).toPlainString();
             this.retained =s ;
             this.currentPay=s;
         }
+        if(roundedX.compareTo(BigDecimal.ZERO)>0){
+            this.endPay=roundedX.toPlainString();
+        }
 
     }
 

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

@@ -1738,6 +1738,7 @@ public class ExcelTabController extends BladeController {
             nodeName = nodeName + "__" + 1;
         }
         wbsTreeContract.setNodeName(nodeName);
+        wbsTreeContract.setSort(wbsTreeContractList2.get(wbsTreeContractList2.size() - 1).getSort() + 1);
         wbsTreeContract.setIsCopeTab(2);
         wbsTreeContract.setIsTabPdf(1); // pdf 不能预览
         wbsTreeContract.setIsBussShow(1); // 是否隐藏表

+ 313 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.aspose.cells.LoadFormat;
 import com.aspose.cells.LoadOptions;
 import com.aspose.cells.SaveFormat;
@@ -11,6 +12,7 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.google.common.collect.Lists;
 import com.spire.xls.FileFormat;
 import com.spire.xls.Worksheet;
+import com.spire.xls.collections.WorksheetsCollection;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -35,6 +37,7 @@ import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.IoUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.ResourceUtil;
@@ -55,6 +58,7 @@ import org.springblade.manager.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.io.ByteArrayResource;
 import org.springframework.core.io.Resource;
+import org.springframework.dao.DataAccessException;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
@@ -640,6 +644,315 @@ public class WbsTreeContractController extends BladeController {
         return R.data(null, "没有获取到excel中的数据");
     }
 
+
+    /**
+     * 客户端-导入excel数据到对应元素表中(批量)
+     *
+     * @author liuyc
+     * @date 2023年8月29日
+     */
+    @PostMapping("/import-excel-list")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "客户端-导入excel数据到对应元素表中(批量)", notes = "传入表的pKeyId、excel文件file")
+    public R<Map<String, Object>> importExcelList(@RequestParam Long pKeyId,
+                                                  @RequestPart MultipartFile file) {
+        WbsTreeContract byId = wbsTreeContractServiceImpl.getById(pKeyId);
+        List<String> integers = new ArrayList<>();
+        integers.add("4");
+        integers.add("5");
+        integers.add("6");
+
+        Integer classify = 1;
+        if (byId.getTableOwner() != null && integers.contains(byId.getTableOwner())) {
+            classify = 2;
+        }
+        //查询与当前表及所有复制表
+        List<WbsTreeContract> list = wbsTreeContractServiceImpl.list(Wrappers.<WbsTreeContract>lambdaQuery()
+                .eq(WbsTreeContract::getPId, byId.getPId())
+                .eq(WbsTreeContract::getInitTableName, byId.getInitTableName())
+                .in(WbsTreeContract::getTableOwner, byId.getTableOwner())
+                .orderByAsc(WbsTreeContract::getSort)
+                .orderByAsc(WbsTreeContract::getFullName)
+                .orderByAsc(WbsTreeContract::getCreateTime)
+        );
+        // 查找目标ID的索引
+        int targetIndex = -1;
+
+        //只记录当前这个表及它排序下的表
+        for (int i = 0; i < list.size(); i++) {
+            if (Objects.equals(pKeyId, list.get(i).getPKeyId())) {
+                targetIndex = i;
+                break;
+            }
+        }
+        if (targetIndex != -1) {
+            list = list.subList(targetIndex, list.size());
+        }
+
+        ArrayList<Map<String, Object>> maps = new ArrayList<>();
+
+
+        //日期格式正则
+        String doubleSlashRegex_XG = ".*\\/[^\\/]*\\/.*"; //匹配包含两个斜杠且不相邻的字符串
+        String dateFormatRegex_yyyyMdd = "\\d{4}/\\d{1,2}/\\d{1,2}"; //yyyy/M/dd格式
+        String dateFormatRegex_yyyyMMdd = "\\d{4}/\\d{2}/\\d{2}";   //yyyy/MM/dd格式
+        String dateFormatRegex_chinese = "(\\d{4}年\\d{1,2}月\\d{1,2}日|\\d{4}年\\d{2}月\\d{2}日)"; //“2023年1月1日、2023年01月01日”这两种格式
+        SimpleDateFormat inputDateFormat = new SimpleDateFormat("yyyy/M/dd");
+        SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
+
+
+        //创建一个临时html路径
+        Long id = SnowFlakeUtil.getId();
+        String importExcelFilePath = FileUtils.getSysLocalFileUrl();
+        String importExcelTOHtmlPath = importExcelFilePath + "/pdf//" + id + ".html";
+
+        //解析匹配数据(rul_1为临时文件地址,接口执行后删除,用流读取会导致htmlString_2乱码,只能存储本地后再解析)
+        String url_1 = "";
+        //文件转workbook
+        com.spire.xls.Workbook workbook = null;
+
+        try {
+            workbook = new com.spire.xls.Workbook();
+            workbook.loadFromHtml(file.getInputStream());
+            WorksheetsCollection worksheets = workbook.getWorksheets();
+            workbook.saveToFile(importExcelTOHtmlPath, FileFormat.HTML);
+            int size = worksheets.size();
+
+            //获取第一张表的行和列,然后其他表与第一张表的行、列不匹配,就说明表格错误
+            Worksheet worksheet = worksheets.get(0);
+            int lastRow = worksheet.getLastRow();
+            int lastColumn = worksheet.getLastColumn();
+            //排除空表
+            for (int x = 0; x < size; x++) {
+                Worksheet sheet = worksheets.get(x);
+                if(lastRow != sheet.getLastRow() && lastColumn != sheet.getLastColumn()){
+                    worksheets.remove(x);
+                    size = worksheets.size();
+                }
+            }
+            //如果sheet比数据库中表多 则需要添加复制表
+            if (size > list.size()) {
+                //却几张复制几张 并且复制出来的排序要再最后
+                for (int i = 0; i < size - list.size(); i++) {
+                    excelTabController.copeBussTab(pKeyId);
+                }
+
+                list = wbsTreeContractServiceImpl.list(Wrappers.<WbsTreeContract>lambdaQuery()
+                        .eq(WbsTreeContract::getPId, byId.getPId())
+                        .eq(WbsTreeContract::getInitTableName, byId.getInitTableName())
+                        .in(WbsTreeContract::getTableOwner, byId.getTableOwner())
+                        .orderByAsc(WbsTreeContract::getSort)
+                        .orderByAsc(WbsTreeContract::getFullName)
+                        .orderByAsc(WbsTreeContract::getCreateTime)
+                );
+
+                //只记录当前这个表及它排序下的表
+                for (int i = 0; i < list.size(); i++) {
+                    if (Objects.equals(pKeyId, list.get(i).getPKeyId())) {
+                        targetIndex = i;
+                        break;
+                    }
+                }
+                if (targetIndex != -1) {
+                    list = list.subList(targetIndex, list.size());
+                }
+            }
+            if (size > list.size()) {
+                return R.fail("添加复制表失败");
+            }
+
+
+            //获取转换成功后的html路径
+            url_1 = importExcelTOHtmlPath.split("pdf//")[0];
+
+            for (int x = 0; x < size; x++) {
+                //结果集
+                Map<String, String> stringStringMap = new HashMap<>();
+
+
+                WbsTreeContract wbsTreeContract = list.get(x);
+
+                //获取当前表htmlString
+                String htmlString_1 = wbsTreeContractServiceImpl.getHtmlString(String.valueOf(wbsTreeContract.getPKeyId()));
+
+                Worksheet sheet = worksheets.get(x);
+                String excelToHtmlFileUrl = url_1 + "/pdf/" + id + "_files/" + sheet.getName() + ".html";
+                String htmlString_2 = IoUtil.readToString(new FileInputStream(ResourceUtil.getFile(excelToHtmlFileUrl)));
+                //循环遍历解析两张html的tr、td
+                Document doc_1 = Jsoup.parse(htmlString_1); //合同段表的html
+                Document doc_2 = Jsoup.parse(htmlString_2); //导入excel转换的html
+                Elements trElements1 = doc_1.select("table tbody tr");
+                Elements trElements2 = doc_2.select("table tbody tr");
+                for (int i = 0; i < trElements1.size(); i++) {
+                    Element tr1 = trElements1.get(i);
+                    Element tr2 = trElements2.get(i);
+                    //排除电签单元格
+                    Elements tdElements1 = tr1.select("td:not([dqid])");
+                    Elements tdElements2 = tr2.select("td");
+                    for (int j = 0; j < tdElements1.size(); j++) {
+                        Element td1 = tdElements1.get(j);
+                        Element td2 = tdElements2.get(j);
+                        String keyName = getKeyNameFromChildElement(td1);
+                        if (StringUtils.isNotEmpty(keyName)) {
+                            String[] split = keyName.split("__");
+
+                            String divValue = td2.text(); //获取文本值
+                            if (StringUtils.isNotEmpty(divValue)) {
+                                if (parseDateRange(divValue).size() == 2) {
+                                    //判断范围日期
+                                    List<String> dateArr = parseDateRange(divValue);
+                                    String value = stringStringMap.get(split[0]);
+
+                                    String dataValue = "[" + dateArr.get(0) + "," + dateArr.get(1) + "]" + "_^_" + split[1];
+                                    if (value != null) {
+                                        value = value + "☆" + dataValue;
+                                    } else {
+                                        value = dataValue;
+                                    }
+                                    // key_1  1_^_1_1
+                                    stringStringMap.put(split[0], value);
+                                    continue;
+                                }
+                                //判断是否存在两个斜杠,且不在一起,那么视为日期格式
+                                Pattern pattern_XG = Pattern.compile(doubleSlashRegex_XG);
+                                Matcher matcher_XG = pattern_XG.matcher(divValue);
+                                if (matcher_XG.matches()) {
+                                    //判断日期格式yyyy/M/dd、yyyy/MM/dd
+                                    Pattern pattern_yyyyMdd = Pattern.compile(dateFormatRegex_yyyyMdd);
+                                    Pattern pattern_yyyyMMdd = Pattern.compile(dateFormatRegex_yyyyMMdd);
+                                    Matcher matcher_yyyyMdd = pattern_yyyyMdd.matcher(divValue);
+                                    Matcher matcher_yyyyMMdd = pattern_yyyyMMdd.matcher(divValue);
+                                    if (matcher_yyyyMdd.matches()) {
+                                        Date date = inputDateFormat.parse(divValue);
+                                        divValue = outputDateFormat.format(date);
+                                    } else if (matcher_yyyyMMdd.matches()) {
+                                        Date date = inputDateFormat.parse(divValue);
+                                        divValue = outputDateFormat.format(date);
+                                    }
+
+                                } else if (divValue.contains("年") && divValue.contains("月") && divValue.contains("日")) {
+                                    //判断如:“2023年1月1日、2023年01月01日”这两种格式
+                                    Pattern pattern_chinese = Pattern.compile(dateFormatRegex_chinese);
+                                    Matcher matcher_chinese = pattern_chinese.matcher(divValue);
+                                    if (matcher_chinese.matches()) {
+                                        Date date = outputDateFormat.parse(divValue);
+                                        divValue = outputDateFormat.format(date);
+                                    }
+                                }
+                                String value = stringStringMap.get(split[0]);
+
+                                String dataValue = divValue + "_^_" + split[1];
+                                if (value != null) {
+                                    value = value + "☆" + dataValue;
+                                } else {
+                                    value = dataValue;
+                                }
+                                stringStringMap.put(split[0], value);
+                            }
+                        }
+                    }
+                }
+
+                //先查询 如果有 则修改数据
+
+                String selectSql = "select * from " + byId.getInitTableName() + " where p_key_id = " + wbsTreeContract.getPKeyId();
+
+                Map<String, Object> initId = null;
+                try {
+                    List<Map<String, Object>> hashMaps = jdbcTemplate.queryForList(selectSql);
+                    if(CollectionUtil.isNotEmpty(hashMaps)){
+                        initId = hashMaps.get(0);
+                    }
+                } catch (DataAccessException e) {
+                    initId = null;
+                }
+                String sql = null;
+                if (initId != null) {
+                    sql = "update " + byId.getInitTableName() + " set ";
+                    //导入的数据
+                    Set<Map.Entry<String, String>> entries = stringStringMap.entrySet();
+                    StringBuilder sb = new StringBuilder();
+                    Map<String, Object> finalInitId = initId;
+                    entries.forEach(f -> {
+                        //原先是否存在值 是否为☆拼接的多数据
+                        String oldValue = (String) finalInitId.get(f.getKey());
+                        if (StringUtils.isNotEmpty(oldValue)) {
+                            //当前keu坐标与数据的对应关系
+                            HashMap<String, String> newCoordinate = new HashMap<>();
+                            //旧数据中需要保留的数据
+                            List<String> oldRetainData = new ArrayList<>();
+                            //导入的数据
+                            String[] newSp = f.getValue().split("☆");
+                            for (String s : newSp) {
+                                //单个单元格的数据
+                                String[] split1 = s.split("_\\^_");
+                                newCoordinate.put(split1[1], split1[0]);
+                            }
+                            //旧数据
+                            String[] oldSp = oldValue.split("☆");
+                            for (String s : oldSp) {
+                                //单个单元格的数据
+                                String[] split1 = s.split("_\\^_");
+                                //根据旧数据的坐标去新数据中查询
+                                String s1 = newCoordinate.get(split1[1]);
+                                //如果没有查询到就需要当前坐标数据
+                                if (s1 == null) {
+                                    oldRetainData.add(s);
+                                }
+                            }
+                            if (CollectionUtil.isNotEmpty(oldRetainData)) {
+                                f.setValue(f.getValue() + "☆" + StringUtils.join(oldRetainData, "☆"));
+                            }
+                        }
+                        if (StringUtils.isNotEmpty(sb.toString())) {
+                            sb.append(",");
+                        }
+                        sb.append(f.getKey()).append("=").append("'").append(f.getValue()).append("'");
+                    });
+                    sql = sql + sb + "where id = " + initId.get("id");
+                } else {
+                    Set<String> strings = stringStringMap.keySet();
+                    Collection<String> values = stringStringMap.values();
+                    //转换成sql能够使用的字符串
+                    ArrayList<String> strings1 = new ArrayList<>();
+                    values.forEach(f -> {
+                        f = "'" + f + "'";
+                        strings1.add(f);
+                    });
+                    long newPkId = SnowFlakeUtil.getId();
+                    sql = "insert into " + byId.getInitTableName() + " (id,p_key_id," + StringUtils.join(strings, ",") + ") VALUES (" + newPkId + ", " + wbsTreeContract.getPKeyId() + ", " + StringUtils.join(strings1, ",") + ")";
+                }
+
+
+                jdbcTemplate.execute(sql);
+            }
+
+
+            //删除临时文件信息
+            if (deleteFolder(Paths.get(importExcelTOHtmlPath))) {
+                logger.info("执行方法【importExcel】结束,删除临时文件成功!");
+            } else {
+                logger.info("执行方法【importExcel】结束,删除临时文件失败!");
+            }
+            if (StringUtils.isNotEmpty(url_1)) {
+                //删除临时文件夹
+                if (deleteFolderAndContents(Paths.get(url_1 + "/pdf/" + id + "_files"))) {
+                    logger.info("执行方法【importExcel】结束,删除临时文件夹成功!");
+                } else {
+                    logger.info("执行方法【importExcel】结束,删除临时文件夹失败!");
+                }
+            }
+            return R.success("ok");
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        } finally {
+            if (workbook != null) {
+                workbook.dispose();
+            }
+        }
+
+    }
+
     /**
      * 判断日期范围格式数据,以下12种格式
      * 2023-01-01-2023-01-30 或 2023-01-01~2023-01-30

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

@@ -860,8 +860,8 @@ public class WbsTreePrivateController extends BladeController {
     @GetMapping("/getTitleRange")
     @ApiOperationSupport(order = 33)
     @ApiOperation(value = "获取题名范围",notes = "获取题名范围")
-    public R<List<TitleRangeVo>> getTitleRange(@RequestParam String projectId,@RequestParam(required = false) Long nameId){
-        List<WbsTreePrivate>list=wbsTreeService.getTitleRange(projectId);
+    public R<List<TitleRangeVo>> getTitleRange(@RequestParam String projectId,@RequestParam(required = false) Long nameId,@RequestParam(required = false) Integer wbsType){
+        List<WbsTreePrivate>list=wbsTreeService.getTitleRange(projectId,wbsType);
         List<WbsParam> list1 = iWbsParamService.getBaseMapper().selectList(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getK, "FILE_TITLE").eq(WbsParam::getProjectId, projectId));
         if(list1.size()>0){
                 //修改
@@ -920,7 +920,7 @@ public class WbsTreePrivateController extends BladeController {
                     iWbsParamService.getBaseMapper().delete(new QueryWrapper<WbsParam>().eq("name_id",dto.getNameId()));
                 }
                 if(dto.getType()==1){
-                    List<WbsTreePrivate>list=wbsTreeService.getTitleRange(dto.getProjectId()+"");
+                    List<WbsTreePrivate>list=wbsTreeService.getTitleRange(dto.getProjectId()+"",null);
                     if(list.size()>0){
                         dto.setNodeId(list.stream()
                             .map(item -> String.valueOf(item.getId()))

+ 11 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorMeter.java

@@ -1347,15 +1347,25 @@ public class ExecutorMeter extends FormulaExecutor {
                                      if(preSubTotal!=null) {
                                          rebateIncentiveAdvPay.setCurrentPay(subtractFc.apply(dyTotalAmount, preSubTotal.getCurrentPeriodEndPay()));
                                      }
+                                     // 计量支付扣回开工预付款
                                      rebateIncentiveAdvPay.setRetained(rebateIncentiveAdvPay.getCurrentPay());
                                  } else {
                                      rebateIncentiveAdvPay.calc(baseInfo.getContractAmount().toPlainString(), dyTotalAmount,preSubTotal.getCurrentPeriodEndPay());
                                  }
                                  if (preSubTotal != null) {
-                                     rebateIncentiveAdvPay.setEndPay(addFc.apply(rebateIncentiveAdvPay.getCurrentPay(), preSubTotal.getCurrentPeriodEndPay()));
+//                                     // 对两个参数进行四舍五入后再计算
+//                                     String currentPayRounded = BaseUtils.str2BigDecimal(rebateIncentiveAdvPay.getCurrentPay()).setScale(0, RoundingMode.HALF_UP).toPlainString();
+//                                     String previousPayRounded = BaseUtils.str2BigDecimal(preSubTotal.getCurrentPeriodEndPay()).setScale(0, RoundingMode.HALF_UP).toPlainString();
+//                                     String endapply = addFc.apply(currentPayRounded, previousPayRounded);
+//                                    // rebateIncentiveAdvPay.setEndPay("0");
+//                                     rebateIncentiveAdvPay.setEndPay(endapply);
+//                                     //rebateIncentiveAdvPay.setEndPay(rebateIncentiveAdvPay.getEndPay());
                                  } else {
+                                     //累计扣回开工预付款金额
                                      rebateIncentiveAdvPay.setEndPay(rebateIncentiveAdvPay.getCurrentPay());
                                  }
+
+                                 //扣除金额-上期末累计扣回金额
                                  if(preSubTotal!=null){
                                      rebateIncentiveAdvPay.setPreviousPay(preSubTotal.getCurrentPeriodEndPay());
                                  }

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -100,5 +100,6 @@ public interface WbsTreeMapper extends EasyBaseMapper<WbsTree> {
 
     int isThereAField(@Param("initTableName") String initTableName, @Param("keyId") String keyId);
 
-    List<WbsTreePrivate> getTitleRange(@Param("projectId")Long projectId);
+    List<WbsTreePrivate> getTitleRange(@Param("projectId")Long projectId,
+                                       @Param("wbsType")Integer wbsType);
 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -568,6 +568,9 @@
     <select id="getTitleRange" resultType="org.springblade.manager.entity.WbsTreePrivate">
         SELECT id,node_name,status From m_wbs_tree_private where project_id = #{projectId} and node_type=1 and is_deleted=0 and type=1
         and parent_id !=0
+        <if test="wbsType != null">
+            and wbs_type = #{wbsType}
+        </if>
     </select>
 
 </mapper>

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreeService.java

@@ -78,7 +78,7 @@ public interface IWbsTreeService extends BaseService<WbsTree> {
 
     Object getQueryValueByType(String queryValue, String wbsId, String projectId, String type);
 
-    List<WbsTreePrivate> getTitleRange(String projectId);
+    List<WbsTreePrivate> getTitleRange(String projectId,Integer wbsType);
 
     Object getQueryValueByNodeType(String wbsId, String projectId, String queryValue, Integer nodeType, Integer majorDataType);
 }

+ 6 - 6
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsSynchronousServiceImpl.java

@@ -521,7 +521,6 @@ public class WbsSynchronousServiceImpl {
                         case 3:
                             //公式配置
                         case 5:
-                            editData.addAll(addPrivateNodes);
                             editData.addAll(editPrivateNodes);
                             wbsSynchronousEViSaService.saveFormula(wbsTreeSynchronousRecord, editData);
                             //现在电签使用的是模糊匹配 如果电签匹配方式改为精确匹配 则需要使用该功能
@@ -1021,10 +1020,9 @@ public class WbsSynchronousServiceImpl {
             Set<Long> longs = collect.keySet();
 
             List<Long> pIds = new ArrayList<>(longs);
-            List<WbsTreePrivate> saveData = new ArrayList<>();
             //按最小节点批量新增
             List<List<Long>> partition = Lists.partition(pIds, 100);
-
+            int sum = 0;
             for (List<Long> data : partition) {
                 for (Long pId : data) {
                     List<WbsTreePrivate> list = collect.get(pId);
@@ -1051,10 +1049,8 @@ public class WbsSynchronousServiceImpl {
                         }
                     }
 
-                    boolean b = saveData.addAll(list);
-
                     //单个批次一个事务,只会回滚当前批次数据
-                    Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(saveData);
+                    Integer i = wbsTreePrivateMapper.insertBatchSomeColumn(list);
                     //如果失败  -- - - - - 继续执行   或者把当前节点的p_key_id 记录到某个地方 方便后续处理
                     if (i == 0) {
                         List<Long> collect1 = addData.stream().map(WbsTreePrivate::getPKeyId).collect(Collectors.toList());
@@ -1077,6 +1073,10 @@ public class WbsSynchronousServiceImpl {
                                 wbsTreePrivateMapper.updateSortBatchByPKeyId(resourceData);
                             }
                         }
+                        synchronousRecordMapper.update(null, Wrappers.<WbsTreeSynchronousRecord>lambdaUpdate()
+                                .set(WbsTreeSynchronousRecord::getNodeNumEnd, sum++)
+                                .set(WbsTreeSynchronousRecord::getUpdateTime, DateTime.now())
+                                .eq(WbsTreeSynchronousRecord::getId, wbsTreeSynchronousRecord.getId()));
                     }
                 }
             }

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

@@ -563,8 +563,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
 
     @Override
-    public List<WbsTreePrivate> getTitleRange(String projectId) {
-        return this.baseMapper.getTitleRange(Long.valueOf(projectId));
+    public List<WbsTreePrivate> getTitleRange(String projectId,Integer wbsType) {
+        return this.baseMapper.getTitleRange(Long.valueOf(projectId),wbsType);
     }
 
     @Override