Kaynağa Gözat

Merge branch 'test-merge-02' of http://219.151.181.73:3000/zhuwei/bladex into test-merge-02

lvy 3 ay önce
ebeveyn
işleme
1ed61012e7

+ 46 - 15
blade-service/blade-archive/src/main/java/org/springblade/archive/service/impl/ArchivesAutoServiceImpl.java

@@ -75,6 +75,8 @@ import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
 import org.springblade.system.user.entity.User;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -137,6 +139,8 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 	private final IArchiveExpertConclusionService expertConclusionService;
 	private final ITraceLogService iTraceLogService;
 
+    private final JdbcTemplate jdbcTemplate;
+
 	//表格高度
 	private static int high = 20;
 	//表格宽度
@@ -4038,7 +4042,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
         String[] ids = archiveIds.split(",");
         for (String archiveId : ids) {
             ArchivesAuto auto = baseMapper.selectById(archiveId);
-            List<ArchiveFile> archiveFiles = archiveFileClient.getArchiveFileByArchiveID(Long.valueOf(archiveId));
+            String sql="select * from u_archive_file where archive_id = "+archiveId+" and is_deleted = 0 order by sort,sort_num,create_time";
+            //List<ArchiveFile> archiveFiles = archiveFileClient.getArchiveFileByArchiveID(Long.valueOf(archiveId));
+            List<ArchiveFile> archiveFiles= jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ArchiveFile.class));
             archiveAutoPdfService.buildArchiveFrontPdfs(projectId,auto,archiveFiles,true);
             baseMapper.updateById(auto);
         }
@@ -4047,30 +4053,50 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
 
     @Override
     public boolean findAndReplace(List<ArchivesAuto> archivesAutos, FindAndReplaceDto dto) {
+        List<ArchivesAuto>updates = new ArrayList<>();
         for (ArchivesAuto archivesAuto : archivesAutos) {
+            ArchivesAuto auto = new ArchivesAuto();
             if(dto.getType()==1){
                if(StringUtils.isNotEmpty(dto.getQuery())&&StringUtils.isNotEmpty(dto.getReplace())){
                    String name = archivesAuto.getName();
                    if (StringUtils.isNotEmpty(name)&&name.contains(dto.getQuery())) {
+                       StringBuilder sb = new StringBuilder();
+                       int lastIndex = 0;
+                       // 查找所有匹配的位置
                        int index = name.indexOf(dto.getQuery());
-                       if (index != -1) {
-                           StringBuilder sb = new StringBuilder(name);
+                       while (index != -1) {
+                           // 添加未处理部分(从上一个 lastIndex 到当前 index)
+                           sb.append(name, lastIndex, index);
+
+                           // 根据位置插入替换内容
                            if (dto.getPosition() != null) {
                                switch (dto.getPosition()) {
-                                   case 1: // 在查询内容前插入替换内容
-                                       sb.insert(index, dto.getReplace());
+                                   case 1: // 在查询内容前插入
+                                       sb.append(dto.getReplace());
+                                       sb.append(dto.getQuery());
                                        break;
-                                   case 2: // 在查询内容后插入替换内容
-                                       sb.insert(index + dto.getQuery().length(), dto.getReplace());
+                                   case 2: // 在查询内容后插入
+                                       sb.append(dto.getQuery());
+                                       sb.append(dto.getReplace());
                                        break;
                                    default:
                                        throw new ServiceException("请选择正确的定位条件");
                                }
+                           } else {
+                               sb.append(dto.getQuery()); // 没有指定位置时保留原内容
                            }
-                           archivesAuto.setName(sb.toString()); // 更新名称
+                           // 更新 lastIndex 到当前匹配结束位置
+                           lastIndex = index + dto.getQuery().length();
+                           // 继续查找下一个匹配项
+                           index = name.indexOf(dto.getQuery(), lastIndex);
                        }
-                   }else {
-                       throw new ServiceException("没有找到原内容");
+                        // 添加剩余的部分
+                       sb.append(name.substring(lastIndex));
+                        // 更新名称
+                       archivesAuto.setName(sb.toString());
+                       auto.setId(archivesAuto.getId());
+                       auto.setName(archivesAuto.getName());
+                       updates.add(auto);
                    }
                }
             } else if (dto.getType()==2) {
@@ -4079,8 +4105,9 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
                     if (StringUtils.isNotEmpty(name)&&name.contains(dto.getQuery())) {
                         String newName = name.replaceAll(dto.getQuery(), dto.getReplace());
                         archivesAuto.setName(newName);
-                    }else {
-                        throw new ServiceException("没有找到原内容");
+                        auto.setId(archivesAuto.getId());
+                        auto.setName(archivesAuto.getName());
+                        updates.add(auto);
                     }
                 }
             }else {
@@ -4089,13 +4116,17 @@ public class ArchivesAutoServiceImpl extends BaseServiceImpl<ArchivesAutoMapper,
                     if (StringUtils.isNotEmpty(name)&&name.contains(dto.getQuery())) {
                         String newName = name.replaceAll(dto.getQuery(), "");
                         archivesAuto.setName(newName);
-                    }else {
-                        throw new ServiceException("没有找到原内容");
+                        auto.setId(archivesAuto.getId());
+                        auto.setName(archivesAuto.getName());
+                        updates.add(auto);
                     }
                 }
             }
         }
-        return this.updateBatchById(archivesAutos);
+        if(!updates.isEmpty()){
+            return this.updateBatchById(archivesAutos);
+        }
+        return true;
     }
 
     public List<ArchivesAuto> setFileNumberByConfig(ArchiveProjectConfig config,List<ArchivesAutoVO4> value){

+ 46 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/TrialNumberRuleController.java

@@ -30,6 +30,7 @@ import org.springblade.business.dto.TrialNumberRuleDTO;
 import org.springblade.business.mapper.TrialNumberRuleMapper;
 import org.springblade.business.vo.TrialNumberRuleVO1;
 import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
@@ -50,6 +51,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 import java.io.FileNotFoundException;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -107,7 +109,24 @@ public class TrialNumberRuleController extends BladeController {
 	@ApiOperationSupport(order = 4)
 	@ApiOperation(value = "新增", notes = "传入trialNumberRule")
 	public R<String> save(@Valid @RequestBody TrialNumberRule trialNumberRule) {
+        if(trialNumberRule.getRule()==6){
+            if(StringUtils.isEmpty(trialNumberRule.getData())){
+                throw new ServiceException("数据填充不能为空");
+            }
+            String data = trialNumberRule.getData();
+            if (!data.matches("\\d+")) {
+                throw new ServiceException("数据填充只能为数字且不能有其他字符");
+            }
+        }
         Integer maxSort=trialNumberRuleMapper.selectMaxSort(trialNumberRule.getProjectId(),trialNumberRule.getContractId(),trialNumberRule.getType());
+        List<TrialNumberRule> rules = trialNumberRuleMapper.selectList(Wrappers.<TrialNumberRule>query().lambda().eq(TrialNumberRule::getProjectId, trialNumberRule.getProjectId()).eq(TrialNumberRule::getContractId, trialNumberRule.getContractId()).eq(TrialNumberRule::getType, trialNumberRule.getType()));
+        if(!rules.isEmpty()){
+            for (TrialNumberRule rule : rules) {
+                if(Objects.equals(rule.getRule(), trialNumberRule.getRule())){
+                    throw new ServiceException("已存在相同的编号规则");
+                }
+            }
+        }
         trialNumberRule.setSort(maxSort+1);
         if(trialNumberRule.getContractId()==null||trialNumberRule.getContractId()==0L){
             trialNumberRule.setStatus(1);
@@ -115,7 +134,9 @@ public class TrialNumberRuleController extends BladeController {
             trialNumberRule.setStatus(2);
         }
         trialNumberRuleService.save(trialNumberRule);
-        trialNumberRuleService.clearTrialNumber(trialNumberRule.getProjectId(),trialNumberRule.getContractId(),trialNumberRule.getType());
+        if(trialNumberRule.getContractId()!=0L){
+            trialNumberRuleService.clearTrialNumber(trialNumberRule.getProjectId(),trialNumberRule.getContractId(),trialNumberRule.getType());
+        }
         Map<String, String> map = trialNumberRuleService.getTrialNumber(trialNumberRule.getProjectId(),trialNumberRule.getContractId(), trialNumberRule.getType(), null, false);
 		return R.data(map.get("trialNumber"));
 	}
@@ -128,9 +149,30 @@ public class TrialNumberRuleController extends BladeController {
 	@ApiOperation(value = "修改", notes = "传入trialNumberRule")
 	public R<String> update(@Valid @RequestBody TrialNumberRule trialNumberRule) {
         if(trialNumberRule.getRule()==6){
+            if(StringUtils.isEmpty(trialNumberRule.getData())){
+                throw new ServiceException("数据填充不能为空");
+            }
+            String data = trialNumberRule.getData();
+            if (!data.matches("\\d+")) {
+                throw new ServiceException("数据填充只能为数字且不能有其他字符");
+            }
+        }
+        List<TrialNumberRule> rules = trialNumberRuleMapper.selectList(Wrappers.<TrialNumberRule>query().lambda().eq(TrialNumberRule::getProjectId, trialNumberRule.getProjectId()).eq(TrialNumberRule::getContractId, trialNumberRule.getContractId()).eq(TrialNumberRule::getType, trialNumberRule.getType()));
+        if(!rules.isEmpty()){
+            for (TrialNumberRule rule : rules) {
+                if(Objects.equals(rule.getRule(), trialNumberRule.getRule())&&!Objects.equals(rule.getId(), trialNumberRule.getId())){
+                    throw new ServiceException("已存在相同的编号规则");
+                }
+            }
+        }
+        if(trialNumberRule.getRule()==6){
+            //查出流水号规则
             TrialNumberRule trialNumberRule1 = trialNumberRuleService.getById(trialNumberRule.getId());
+            //如果是合同段的规则
             if(trialNumberRule.getContractId()!=null&&trialNumberRule.getContractId()!=0L){
+                //并且数据填充发生改变
                 if(!StringUtils.equals(trialNumberRule1.getData(),trialNumberRule.getData())){
+                    //将自增表的数据删除
                     trialNumberRuleMapper.updateAutoIncrement(trialNumberRule.getId());
                 }
             }
@@ -151,7 +193,9 @@ public class TrialNumberRuleController extends BladeController {
             trialNumberRules.get(i).setSort(i+1);
         }
         trialNumberRuleService.saveOrUpdateBatch(trialNumberRules);
-        trialNumberRuleService.clearTrialNumber(trialNumberRules.get(0).getProjectId(),trialNumberRules.get(0).getContractId(),trialNumberRules.get(0).getType());
+        if(trialNumberRules.get(0).getContractId()!=0L){
+            trialNumberRuleService.clearTrialNumber(trialNumberRules.get(0).getProjectId(),trialNumberRules.get(0).getContractId(),trialNumberRules.get(0).getType());
+        }
         Map<String, String> map = trialNumberRuleService.getTrialNumber(trialNumberRules.get(0).getProjectId(),trialNumberRules.get(0).getContractId(), trialNumberRules.get(0).getType(), null, false);
         return R.data(map.get("trialNumber"));
 	}

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/TrialNumberRuleMapper.xml

@@ -20,7 +20,7 @@
         <result column="is_auto_increment" property="isAutoIncrement"/>
     </resultMap>
     <update id="updateAutoIncrement">
-        update u_trial_number_rule set is_deleted=0 where number_rule_id = #{id}
+        update u_trial_auto_number set is_deleted=1 where number_rule_id = #{id}
     </update>
 
 

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TrialNumberRuleServiceImpl.java

@@ -171,7 +171,7 @@ public class TrialNumberRuleServiceImpl extends BaseServiceImpl<TrialNumberRuleM
                         }
                     }
                       if (isSaveRedis) {
-                        bladeRedis.setEx("trialAutoNumber:" + contractId + ":" + type + ":" + nodeId + ":" + "lock:" + autoIncrementNumber , autoIncrementNumber,30 * 60 * 1000L);
+                        bladeRedis.setEx("trialAutoNumber:" + contractId + ":" + type + ":" + nodeId + ":" + "lock:" + autoIncrementNumber , autoIncrementNumber,10 * 60 * 1000L);
                       }
                     map.put("autoIncrementNumber",autoIncrementNumber);
                     trialNumber.append(autoIncrementNumber);

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

@@ -2025,40 +2025,10 @@ public class ExcelTabController extends BladeController {
             return R.fail(result.getMsg());
         }
         executionTime.info("----数据合并前----");
-        List<String> errorPKeyIds = new ArrayList<>();
-        //单个pdf加载
-        if (tableInfoList != null) {
-            tableInfoList.parallelStream().forEach(tableInfo -> {
-                R bussPdfInfo = null;
-                try {
-                    bussPdfInfo = excelTabService.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-                if (ObjectUtil.isEmpty(bussPdfInfo) || bussPdfInfo.getCode() != 200) {
-                    //如果返回的单张pdfUrl为空,那么表示发生异常,返回异常信息
-                    errorPKeyIds.add(tableInfo.getPkeyId());
-                }
-            });
-        }
 
-        executionTime.info("----数据保存完毕 ----");
-        //发生异常后直接返回,不进行合并
-        if (errorPKeyIds.size() > 0) {
-            List<AppWbsTreeContractVO> errorTabs = new LinkedList<>();
-            for (AppWbsTreeContractVO appWbsTreeContractVO : tableAll) {
-                if (errorPKeyIds.contains(appWbsTreeContractVO.getPKeyId().toString())) {
-                    errorTabs.add(appWbsTreeContractVO);
-                }
-            }
-            if (errorTabs.size() > 0) {
-                List<String> names = errorTabs.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList());
-                return R.fail("以下的表在生成pdf文件时发生了异常【" + StringUtils.join(names, "、") + "】");
-            }
-        }
-        executionTime.info("----数据合并前 ----");
-        //合并pdf加载
-        excelTabService.getBussPdfs(nodeId, classify, contractId, projectId);
+        //异步生成pdf 和 合并pdf
+        excelTabService.synchronizedPdf(tableInfoList,nodeId, classify, contractId, projectId);
+
         executionTime.info("---PDF合并耗时---");
         //更新缓存
         informationQueryClient.delAsyncWbsTree(contractId);

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IExcelTabService.java

@@ -211,4 +211,6 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
      * @return
      */
     List<Map<String, Object>> getBussDataInfoTrialentrust(Long id, Long pkeyId, Long contractId, Long sampleId, JSONObject jsonObject,Boolean isremove,Boolean isCaneal);
+
+    void synchronizedPdf(List<TableInfo> tableInfoList, String nodeId, String classify, String contractId, String projectId) throws Exception;
 }

+ 44 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -78,6 +78,7 @@ import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.TransactionDefinition;
 import org.springframework.transaction.TransactionStatus;
@@ -1318,7 +1319,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 //保存操作记录
                 this.operationLogClient.saveUserOperationLog(1, "资料填报", "工序填报页面", json);
                 // 更新redis
-                informationQueryClient.AsyncWbsTree(wbsTreeContractByP.getParentId() + "", wbsTreeContractByP.getParentId() + "", wbsTreeContractByP.getContractId(), "", "1");
+//                informationQueryClient.AsyncWbsTree(wbsTreeContractByP.getParentId() + "", wbsTreeContractByP.getParentId() + "", wbsTreeContractByP.getContractId(), "", "1");
             } catch (Exception e) {
                 e.printStackTrace();
                 return R.fail("操作失败");
@@ -5005,4 +5006,46 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         }
     }
 
+    @Override
+    @Async("taskExecutor1")
+    public void synchronizedPdf(List<TableInfo> tableInfoList, String nodeId, String classify, String contractId, String projectId) {
+        try {
+            List<String> errorPKeyIds = new ArrayList<>();
+            //单个pdf加载
+            if (tableInfoList != null) {
+                tableInfoList.parallelStream().forEach(tableInfo -> {
+                    R bussPdfInfo = null;
+                    try {
+                        bussPdfInfo = this.getBussPdfInfo(Long.parseLong(tableInfo.getPkeyId()));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                    if (ObjectUtil.isEmpty(bussPdfInfo) || bussPdfInfo.getCode() != 200) {
+                        //如果返回的单张pdfUrl为空,那么表示发生异常,返回异常信息
+                        errorPKeyIds.add(tableInfo.getPkeyId());
+                    }
+                });
+            }
+
+            //发生异常后直接返回,不进行合并
+//        if (errorPKeyIds.size() > 0) {
+//            List<AppWbsTreeContractVO> errorTabs = new LinkedList<>();
+//            for (AppWbsTreeContractVO appWbsTreeContractVO : tableAll) {
+//                if (errorPKeyIds.contains(appWbsTreeContractVO.getPKeyId().toString())) {
+//                    errorTabs.add(appWbsTreeContractVO);
+//                }
+//            }
+//            if (errorTabs.size() > 0) {
+//                List<String> names = errorTabs.stream().map(WbsTreeContract::getNodeName).collect(Collectors.toList());
+//                return R.fail("以下的表在生成pdf文件时发生了异常【" + StringUtils.join(names, "、") + "】");
+//            }
+//        }
+
+            //合并pdf加载
+            this.getBussPdfs(nodeId, classify, contractId, projectId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ServiceException("问题");
+        }
+    }
 }

+ 12 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -402,6 +402,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             });
                         });
                         AtomicBoolean update = new AtomicBoolean(false);
+                        List<Long> ids = getNodeType46(tec).stream().map(CurrentNode::getPkId).collect(Collectors.toList());
                         itemsMap.values().stream().filter(Measurement::isMatching).forEach(t -> {
                             ElementBlock g = null;
                             FormData vfd = t.getValue();
@@ -423,7 +424,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             if (g != null) {
                                 /*手写部分的数据加载*/
                                 if (t.getPoint().contains("混凝土强度") && false) {
-                                    List<Long> ids = getNodeType46(tec).stream().map(CurrentNode::getPkId).collect(Collectors.toList());
+//                                    List<Long> ids = getNodeType46(tec).stream().map(CurrentNode::getPkId).collect(Collectors.toList());
                                     /*质检附表m_20230316104657_1636197331206406144*/
                                     List<Map<String, Object>> listMaps = this.jdbcTemplate.queryForList("select a.p_key_id,b.key_10 name,b.key_6 design,b.key_5 data from m_wbs_tree_contract a join m_20230316104657_1636197331206406144 b on a.p_key_id=b.p_key_id where  a.is_deleted=0 and a.parent_id =" + tec.getCurrentNode().getId());
                                     if (listMaps.size() > 0) {
@@ -463,7 +464,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
                                 List<ItemBlock> itemBlockList = g.getList();
                                 int originSize = itemBlockList.size();
-                                List<Long> ids = getNodeType46(tec).stream().map(CurrentNode::getPkId).collect(Collectors.toList());
+
                                 /*清除那些已经不存在的工序*/
                                 itemBlockList.removeIf(ik -> !ids.contains(ik.getPkeyId()));
                                 if (itemBlockList.size() > 0) {
@@ -575,6 +576,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             });
                         });
                         AtomicBoolean update = new AtomicBoolean(false);
+                        List<Long> ids = getNodeType46(tec).stream().map(CurrentNode::getPkId).collect(Collectors.toList());
                         itemsMap.values().stream().filter(Measurement::isMatching).forEach(t -> {
                             ElementBlock g = null;
                             FormData vfd = t.getValue();
@@ -596,7 +598,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                             if (g != null) {
                                 List<ItemBlock> itemBlockList = g.getList();
                                 int originSize = itemBlockList.size();
-                                List<Long> ids = getNodeType46(tec).stream().map(CurrentNode::getPkId).collect(Collectors.toList());
+
                                 /*清除那些已经不存在的工序*/
                                 itemBlockList.removeIf(ik -> !ids.contains(ik.getPkeyId()));
                                 if (itemBlockList.size() > 0) {
@@ -631,16 +633,17 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
     }
 
-    public void descendantType46(Object id, List<Map<String, Object>> listMaps) {
-        String sql = "select p_Key_id pkId,id,node_type nodeType,table_type tableType  from m_wbs_tree_contract where parent_id =? and is_deleted=0";
-        List<Map<String, Object>> tmp = this.jdbcTemplate.queryForList(sql, id);
+    public void descendantType46(Long id, Long contractId, List<Map<String, Object>> listMaps) {
+        String sql = "select p_Key_id pkId,id,node_type nodeType,table_type tableType  from m_wbs_tree_contract where  contract_id =  " + contractId + " and find_in_set( " + id + ",ancestors_p_id) and is_deleted=0";
+        List<Map<String, Object>> tmp = this.jdbcTemplate.queryForList(sql);
         if (tmp.size() > 0) {
             for (Map<String, Object> map : tmp) {
                 if (StringUtils.isEquals(map.get("nodeType"), 6)) {
                     listMaps.add(map);
-                } else {
-                    descendantType46(map.get("id"), listMaps);
                 }
+//                else {
+//                    descendantType46(map.get("id"), listMaps);
+//                }
             }
         }
     }
@@ -649,7 +652,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if (tec.getCurrentNode().getDivisional().size() == 0) {
             // List<Map<String,Object>> listMaps=this.jdbcTemplate.queryForList("select b.p_Key_id pkId,b.id from m_wbs_tree_contract a join m_wbs_tree_contract b on (a.contract_id=b.contract_id and b.ancestors like CONCAT(a.ancestors,'%')) where a.p_key_id="+tec.getCurrentNode().getPkId()+" and b.is_deleted=0 and b.node_type=6 ORDER BY b.sort");
             List<Map<String, Object>> listMaps = new ArrayList<>();
-            descendantType46(tec.getCurrentNode().getParentId(), listMaps);
+            descendantType46(tec.getCurrentNode().getPkId(),tec.getCurrentNode().getContractId(), listMaps);
             if (listMaps.size() > 0) {
                 tec.getCurrentNode().getDivisional().addAll(listMaps.stream().map(m -> BeanUtil.toBean(m, CurrentNode.class)).collect(Collectors.toList()));
             }

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

@@ -234,7 +234,7 @@ public class WbsTreeSynchronousRecordServiceImpl extends ServiceImpl<WbsTreeSync
      * 同步节点表单
      * 定时检查同步任务,状态为1的数据如果最后更新时间与当前时间超过10分钟,则修改状态为1
      */
-    //@Scheduled(fixedDelay = 10000)
+    @Scheduled(fixedDelay = 10000)
     public void syncInit() {
         // 本地环境跳过执行(可添加日志输出)
         if (!schedulerEnabled) return;

+ 83 - 47
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -192,43 +192,79 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             throw new ServiceException(StringUtil.format("当前用户 [{}] 已存在!", user.getAccount()));
         }
             //获取Role信息
-//        if (user.getProjectAndUserList().size() <= 0) {
-//            throw new ServiceException("请关联项目合同段用户类型信息");
-//        }
-//        StringBuffer stringBuffer = new StringBuffer();
-//        Set<String> set = new TreeSet<>();
-//        List<SaveUserInfoByProjectDTO> projectAndUserList = user.getProjectAndUserList();
-//        projectAndUserList.forEach(i -> {
-//            String roleId = i.getRoleId();
-//            set.add(roleId);
-//        });
-//        for (String s : set) {
-//            stringBuffer.append(s).append(",");
-//        }
-//        user.setRoleId(String.valueOf(stringBuffer.deleteCharAt(stringBuffer.length() - 1)));
-//        //user.setUserType(1); //用户平台-WEB
-//        user.setName(user.getRealName());
+        if (user.getProjectAndUserList().size() <= 0) {
+            throw new ServiceException("请关联项目合同段用户类型信息");
+        }
+        StringBuffer stringBuffer = new StringBuffer();
+        Set<String> set = new TreeSet<>();
+        List<SaveUserInfoByProjectDTO> projectAndUserList = user.getProjectAndUserList();
+            projectAndUserList.forEach(i -> {
+                String roleId = i.getRoleId();
+                set.add(roleId);
+            });
+            for (String s : set) {
+                stringBuffer.append(s).append(",");
+            }
+            user.setRoleId(String.valueOf(stringBuffer.deleteCharAt(stringBuffer.length() - 1)));
+
+       //user.setUserType(1); //用户平台-WEB
+        user.setName(user.getRealName());
         boolean b1 = save(user);
-        boolean b = submitUserDept(user);
-        return b1;
-//
-//        if (b1) {
-//            //绑定用户与部门关系
-//
-//            if (b) {
-//                //比较
-//                if (checkContractId(user.getProjectAndUserList())) {
-//                    throw new ServiceException("一个合同段只允许分配一个用户类型信息,请重新选择");
-//                }
-//                //新增用户绑定项目合同段
-//                user.getProjectAndUserList().forEach((i) -> {
-//                    i.setUserId(String.valueOf(user.getId()));
-//                });
-//                contractClient.saveUserInfoByProjectThree(user.getProjectAndUserList());
-//                return true;
-//            }
-//        }
-//        throw new ServiceException("操作失败");
+        if (b1) {
+            //绑定用户与部门关系
+             boolean b = submitUserDept(user);
+            if (b) {
+                //比较
+                if (checkContractId(user.getProjectAndUserList())) {
+                    throw new ServiceException("一个合同段只允许分配一个用户类型信息,请重新选择");
+                }
+                //新增用户绑定项目合同段
+                user.getProjectAndUserList().forEach((i) -> {
+                    i.setUserId(String.valueOf(user.getId()));
+                    ContractInfo contractInfo = contractClient.getContractById(Long.valueOf(i.getContractId()));
+                    //监理、业主、中西试验室合同段新增
+                    if (contractInfo!=null&&(contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4)) {
+                        //同步到对应关联的施工合同段中
+                        String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
+                        List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
+                        if (record_SG.size() > 0) {
+                           a: for (String sgId : record_SG) {
+                                //当前施工合同段所有用户角色信息
+                                String sql2 = "select * from m_project_assignment_user where contract_id = " + sgId + " and post_id is null and status = 1 and is_deleted = 0";
+                                List<SaveUserInfoByProjectDTO> userRoleInfoSG = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
+                                for (SaveUserInfoByProjectDTO sg : userRoleInfoSG) {
+                                    if (sg.getUserId().equals(i.getUserId())) {
+                                        //如果监理合同段与施工合同段中有相同的用户信息,就移除,一个用户只能存在一个合同段中
+                                        continue a;
+                                    }
+                                }
+                                //重构入参
+                                List<SaveUserInfoByProjectDTO> addList = new ArrayList<>();
+                                    SaveUserInfoByProjectDTO newObj = BeanUtil.copyProperties(i, SaveUserInfoByProjectDTO.class);
+                                    assert newObj != null;
+                                    newObj.setId(SnowFlakeUtil.getId());
+                                    newObj.setContractId(sgId);
+                                    newObj.setStatus(1);
+                                    if (ObjectUtil.isNotEmpty(SecureUtil.getUser())) {
+                                        newObj.setCreateUser(SecureUtil.getUser().getUserId());
+                                        newObj.setCreateDept(Long.parseLong(SecureUtil.getUser().getDeptId().split(",")[0]));
+                                    }
+                                    newObj.setCreateTime(new Date());
+                                    newObj.setIsRecordJlId(contractInfo.getId()); //从监理合同段关联的数据,用于删除关联时同步删除用户信息
+                                    addList.add(newObj);
+                                //保存监理数据时,同步到对应关联的施工合同段中去
+                                if (addList.size() > 0) {
+                                    contractClient.saveUserInfoByProjectThree(addList);
+                                }
+                            }
+                        }
+                    }
+                });
+                contractClient.saveUserInfoByProjectThree(user.getProjectAndUserList());
+                return true;
+            }
+        }
+        throw new ServiceException("操作失败");
     }
 
     /**
@@ -1266,6 +1302,17 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
         return informationQueryVO1s;
     }
 
+    @Override
+    public List<InformationQueryBIMVO> queryInformationByFileNumber(String contractId, String fileNumber) {
+        if (StringUtil.isEmpty(contractId)) {
+            throw new ServiceException("未获取到合同段id");
+        }
+
+        List<InformationQueryBIMVO> informationQueryVO1s = baseMapper.queryInformationByFileNumber(contractId, fileNumber);
+
+        return informationQueryVO1s;
+    }
+
 
     private List<PrivateTreeVO> buildTree(List<WbsTreePrivate> wbsTreePrivatesNodes, String projectId) {
         List<PrivateTreeVO> privateTreeVOS = BeanUtil.copyProperties(wbsTreePrivatesNodes, PrivateTreeVO.class);
@@ -2096,15 +2143,4 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
     }
 
 
-    @Override
-    public List<InformationQueryBIMVO> queryInformationByFileNumber(String contractId, String fileNumber) {
-        if (StringUtil.isEmpty(contractId)) {
-            throw new ServiceException("未获取到合同段id");
-        }
-
-        List<InformationQueryBIMVO> informationQueryVO1s = baseMapper.queryInformationByFileNumber(contractId, fileNumber);
-
-        return informationQueryVO1s;
-    }
-
 }