Bladeren bron

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

yangyj 3 jaren geleden
bovenliggende
commit
5554c49c8e
30 gewijzigde bestanden met toevoegingen van 792 en 492 verwijderingen
  1. 1 0
      blade-common/pom.xml
  2. 3 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/MessageWarningVO.java
  3. 4 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/QueryProcessDataVO.java
  4. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ManagerHomePageVO.java
  5. 30 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/BusinessUserOpinionController.java
  6. 70 19
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  7. 1 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/MaterialProgressController.java
  8. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiWaiYeProgressController.java
  9. 54 50
      blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiYeController.java
  10. 33 2
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml
  11. 9 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ManagerHomePageController.java
  12. 6 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  13. 41 24
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  14. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreePrivateClientImpl.java
  15. 14 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/injector/EasyBaseMapper.java
  16. 22 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/injector/EasysqlInjector.java
  17. 18 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/injector/MybatisPlusConfig.java
  18. 8 9
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java
  19. 6 11
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml
  20. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java
  21. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.java
  22. 50 45
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml
  23. 112 84
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  24. 49 46
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  25. 188 155
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  26. 0 6
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  27. 2 3
      blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java
  28. 2 2
      blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel2.java
  29. 41 15
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
  30. 15 8
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 1 - 0
blade-common/pom.xml

@@ -42,6 +42,7 @@
             <groupId>com.aliyun.oss</groupId>
             <artifactId>aliyun-sdk-oss</artifactId>
         </dependency>
+
     </dependencies>
 
     <build>

+ 3 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/MessageWarningVO.java

@@ -23,6 +23,7 @@ import org.apache.http.client.utils.DateUtils;
 import org.springblade.business.entity.MessageWarning;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.DateUtil;
 
 import java.util.Date;
 import java.util.List;
@@ -78,7 +79,8 @@ public class MessageWarningVO extends MessageWarning {
 		this.setCreateUser(AuthUtil.getUserId());
 		Date nowDate = new Date();
 		this.setCreateTime(nowDate);
-		this.setTime(DateUtils.formatDate(nowDate, "yyyy-MM-dd HH:mm:ss"));
+		String dateStr = DateUtil.format(nowDate, "yyyy-MM-dd HH:mm:ss");
+		this.setTime(dateStr);
 	}
 
 	public MessageWarningVO(){}

+ 4 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/QueryProcessDataVO.java

@@ -21,6 +21,10 @@ public class QueryProcessDataVO {
 
     private Integer majorDataType;
 
+    private Integer nodeType;
+
+    private String evaluate;
+
     private String firstId;
 
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ManagerHomePageVO.java

@@ -29,6 +29,12 @@ public class ManagerHomePageVO {
     @ApiModelProperty("证书总数")
     private Long pfxAmount;
 
+    @ApiModelProperty("个人待办工单数量")
+    private Integer personToDoNumber = 0;
+
+    @ApiModelProperty("所有待办工单数量")
+    private Integer allToDoNumber = 0;
+
     /**
      * 当前用户待办工单
      */

+ 30 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/BusinessUserOpinionController.java

@@ -13,11 +13,13 @@ import org.apache.http.client.utils.DateUtils;
 import org.springblade.business.entity.UserOpinion;
 import org.springblade.business.entity.UserOpinionFile;
 import org.springblade.business.entity.UserOpinionFlow;
+import org.springblade.business.feign.MessageWarningClient;
 import org.springblade.business.service.IUserOpinionFileService;
 import org.springblade.business.service.IUserOpinionFlowService;
 import org.springblade.business.service.IUserOpinionService;
 import org.springblade.business.vo.AssessmentUserVOS;
 import org.springblade.business.vo.BusinessUserOpinionVO;
+import org.springblade.business.vo.MessageWarningVO;
 import org.springblade.business.vo.UserOpinionFlowVO;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -42,6 +44,8 @@ public class BusinessUserOpinionController {
 
     private final IUserOpinionFileService userOpinionFileService;
 
+    private final MessageWarningClient messageWarningClient;
+
     /**
      * isIgnore
      */
@@ -122,6 +126,10 @@ public class BusinessUserOpinionController {
         }
         //获取当前操作用户
         BladeUser user = AuthUtil.getUser();
+
+        //获取工单
+        UserOpinion userOpinion = this.userOpinionService.getById(userOpinionId);
+
         //获取当前最新流程
         List<UserOpinionFlowVO> flowVOS = this.userOpinionFlowService.queryCurrentUserOpinionFlowByUserOpinionId(userOpinionId, newNumber);
 
@@ -162,15 +170,37 @@ public class BusinessUserOpinionController {
                 List<Long> ids = flowVOS.stream().map(UserOpinionFlowVO::getId).distinct().collect(Collectors.toList());
                 this.userOpinionFlowService.update(Wrappers.<UserOpinionFlow>lambdaUpdate().set(UserOpinionFlow::getManageTime, manageTime).in(UserOpinionFlow::getId, ids));
             }
+            //内容
+            String content = "";
 
             if(nextLink != null && StringUtils.isNotEmpty(String.valueOf(nextLink))){
+                content = "用户" + userOpinion.getCreateUserName() + ",您好,您所提交的【" + userOpinion.getProblemType() + ":" + userOpinion.getOpinionContent() + "】工单服务已经进入人工处理环节,处理人:" + AuthUtil.getNickName();
+
                 //提交"进入人工处理环节"操作
                 result = this.userOpinionFlowService.update(Wrappers.<UserOpinionFlow>lambdaUpdate().set(UserOpinionFlow::getReplyContent, "预计" + manageTime + "之前完成").set(UserOpinionFlow::getUpdateTime, new Date()).set(UserOpinionFlow::getIsCurrent, new Integer("3").equals(currentLink) ? 2 : 1).eq(UserOpinionFlow::getId, nextLink));
             }
             if(nextLinkEnd != null && StringUtils.isNotEmpty(String.valueOf(nextLinkEnd))){
+                content = "用户" + userOpinion.getCreateUserName() + ",您好,您所提交的【" + userOpinion.getProblemType() + ":" + userOpinion.getOpinionContent() + "】工单服务已解决,请及时查看,处理人:" + AuthUtil.getNickName();
+
                 //提交"已解决"操作
                 result = this.userOpinionFlowService.update(Wrappers.<UserOpinionFlow>lambdaUpdate().set(UserOpinionFlow::getUpdateTime, new Date()).set(UserOpinionFlow::getIsCurrent, 2).eq(UserOpinionFlow::getId, nextLinkEnd));
             }
+
+            try{
+                if(StringUtils.isNotEmpty(content)){
+                    this.messageWarningClient.savePushUserMessageWarning(new MessageWarningVO(
+                            null,
+                            null,
+                            4,
+                            content,
+                            userOpinion.getCreateUser(),
+                            0
+                    ));
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+
             return R.data(result);
         }
         return R.data(false);

+ 70 - 19
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -731,6 +731,27 @@ public class InformationWriteQueryController extends BladeController {
 		WbsTreeContract needCopyNode = this.wbsTreeContractClient.getContractNodeByPrimaryKeyId(vo.getNeedCopyPrimaryKeyId());
 
 		//获取当前合同段所有节点
+		List<WbsTreeContract> allContractNodeList = this.wbsTreeContractClient.searchContractTree(needCopyNode.getContractId());
+
+		//设置父子节点关系
+		Map<String, List<WbsTreeContract>> contractAllNodeMap = new HashMap<>();
+		if(allContractNodeList != null && allContractNodeList.size() > 0){
+			allContractNodeList.forEach(contractTree -> {
+				List<WbsTreeContract> parentList;
+				if(contractAllNodeMap.containsKey(contractTree.getParentId().toString())){
+					parentList = contractAllNodeMap.get(contractTree.getParentId().toString());
+				} else {
+					parentList = new ArrayList<>();
+				}
+				parentList.add(contractTree);
+				contractAllNodeMap.put(contractTree.getParentId().toString(), parentList);
+
+				if(!contractAllNodeMap.containsKey(contractTree.getId().toString())){
+					contractAllNodeMap.put(contractTree.getId().toString(), new ArrayList<>());
+				}
+
+			});
+		}
 
 		List<WbsTreeContract> parentList = new ArrayList<>(), childList = new ArrayList<>(), allList = new ArrayList<>(), saveList = new ArrayList<>();
 		//新增施工台账
@@ -738,10 +759,8 @@ public class InformationWriteQueryController extends BladeController {
 
 		parentList.add(needCopyNode);
 
-//		this.wbsTreeContractClient.searchContractTree(needCopyNode.getContractId());
-
 		//查询所有有效子节点
-		this.foreachQueryChildContract(parentList, childList);
+		this.foreachQueryChildContract(parentList, childList, contractAllNodeMap);
 		allList.addAll(parentList);
 		allList.addAll(childList);
 
@@ -956,26 +975,32 @@ public class InformationWriteQueryController extends BladeController {
 	 * @param parentList 父节点集合
 	 * @param childList 保存集合
 	 */
-	private void foreachQueryChildContract(List<WbsTreeContract> parentList, List<WbsTreeContract> childList){
+	private void foreachQueryChildContract(List<WbsTreeContract> parentList, List<WbsTreeContract> childList, Map<String, List<WbsTreeContract>> contractAllNodeMap){
 		parentList.forEach(parent -> {
-			if(!new Integer("6").equals(parent.getDeptCategory())){
-				//查询子节点
-				List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "notQueryTable", "");
-				if(childs != null && childs.size() > 0){
-					//添加入结果集
-					childList.addAll(childs);
-					//还有子级,继续向下
-					this.foreachQueryChildContract(childs, childList);
-				}
+			List<WbsTreeContract> childs;
+			if(contractAllNodeMap.containsKey(parent.getId().toString())){
+				childs = contractAllNodeMap.get(parent.getId().toString());
 			} else {
-				//工序,则查询对应的表格数据
-				List<WbsTreeContract> childs = this.wbsTreeContractClient.queryChildByParentId(parent, "queryTable", "");
-				if(childs != null && childs.size() > 0){
-					//添加入结果集
-					childList.addAll(childs);
+				childs = new ArrayList<>();
+			}
+			if(childs.size() <= 0){
+				if(!Arrays.asList("1,2,3,4".split(",")).contains(parent.getMajorDataType().toString())){
+					childs = this.wbsTreeContractClient.queryChildByParentId(parent, "notQueryTable", "");
+				} else {
+					childs = this.wbsTreeContractClient.queryChildByParentId(parent, "queryTable", "");
 				}
 			}
+
+			if(childs != null && childs.size() > 0){
+				//添加入结果集
+				childList.addAll(childs);
+
+				//还有子级,继续向下
+				this.foreachQueryChildContract(childs, childList, contractAllNodeMap);
+			}
+
 		});
+
 	}
 
 	/**
@@ -1038,6 +1063,11 @@ public class InformationWriteQueryController extends BladeController {
 			} else {
 				queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(parentId, 1, contractId);
 			}
+
+			//删除掉首件工程
+			result.removeIf(vos -> vos.getDeptCategory() != null && vos.getDeptCategory() == 111);
+
+
 			result.forEach(vos -> {
 				if(StringUtils.isEmpty(parentId) || "0".equals(parentId)){
 					vos.setTitle(contractInfo.getContractName());
@@ -1653,6 +1683,27 @@ public class InformationWriteQueryController extends BladeController {
 		return R.data(this.informationQueryService.selectInformationQueryPage(Condition.getPage(query), vo));
 	}
 
+	/**
+	 * 获取当前合同段的划分树
+	 * @return 结果
+	 */
+	@GetMapping("/queryStandingBookContractWbsTree")
+	@ApiOperationSupport(order = 29)
+	@ApiOperation(value = "获取当前合同段的划分树")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "parentId", value = "父节点,为空则查询第一级节点"),
+			@ApiImplicitParam(name = "contractId", value = "合同段ID", required = true)
+	})
+	public R<List<WbsTreeContractTreeVOS>> queryStandingBookContractWbsTree(@RequestParam String primaryKeyId,@RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation){
+		if (StringUtils.isNotEmpty(primaryKeyId)){
+			parentId = primaryKeyId;
+		}
+		List<WbsTreeContractTreeVOS> rootTreeNode = this.queryContractTree(parentId, contractId, contractIdRelation);
+		rootTreeNode.removeIf(vos -> (vos.getMajorDataType() != null && Arrays.asList("1,2,3,111".split(",")).contains(vos.getMajorDataType().toString())) || (vos.getDeptCategory() != null && vos.getDeptCategory() == 111));
+
+		return R.data(rootTreeNode);
+	}
+
 	/**
 	 * 获取当前合同段的划分树
 	 * @return 结果
@@ -1789,7 +1840,7 @@ public class InformationWriteQueryController extends BladeController {
 	 * @return 结果
 	 */
 	@GetMapping("/queryContractWbsTreeByFirstInfo")
-	@ApiOperationSupport(order = 10)
+	@ApiOperationSupport(order = 28)
 	@ApiOperation(value = "首件wbs树")
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "parentId", value = "父节点,为空则查询第一级节点"),

+ 1 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/MaterialProgressController.java

@@ -82,6 +82,7 @@ public class MaterialProgressController extends BladeController {
                 if(nodeResult != null && nodeResult.size() > 0){
                     //找到当前节点下的所有填报节点
                     List<QueryProcessDataVO> queryDataResult = this.informationQueryService.queryProcessDataByParentIdAndContractId(nodeResult.get(0).getId().toString(), 1, sgContractId);
+
                     //统计
                     this.countAmount(nodeResult, queryDataResult, sgContractId, reVO);
                 }

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

@@ -59,6 +59,8 @@ public class NeiWaiYeProgressController {
 
             //获取当前节点的子节点
             List<WbsTreeContract> childList = this.wbsTreeContractClient.queryChildByParentId(node, "noeQueryTable", "");
+            //删除掉首件的
+            childList.removeIf(child -> child.getDeptCategory() != null && child.getDeptCategory() == 111);
 
             //获取当前节点下的所有填报节点
             List<QueryProcessDataVO> queryProcessDataVOList;

+ 54 - 50
blade-service/blade-business/src/main/java/org/springblade/business/controller/NeiYeController.java

@@ -78,60 +78,62 @@ public class NeiYeController {
                 //删除非工序节点
                 queryDataResult.removeIf(vo -> !new Integer("4").equals(vo.getMajorDataType()));
 
-                //分组
-                List<List<QueryProcessDataVO>> groupList = CommonUtil.getBatchSize(queryDataResult, queryVO.getSize());
-                List<QueryProcessDataVO> groupQueryList = groupList.get(queryVO.getCurrent() == 0 ? 0 : queryVO.getCurrent() - 1);
-
-                //获取所有施工日志记录
-                List<String> primaryKeyIds = groupQueryList.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList());
-                List<ConstructionLedger> ledgers = this.constructionLedgerService.list(Wrappers.<ConstructionLedger>lambdaQuery().in(ConstructionLedger::getWbsId, primaryKeyIds));
-
-                for (QueryProcessDataVO vo : groupQueryList) {
-                    //处理父节点信息
-                    Map<String, String> map = new HashMap<>();
-                    this.foreachGetParent(map, idToNodeMap, vo.getParentId(), queryVO.getContractId());
-
-                    //获取当前工序的施工台账信息
-                    if (ledgers != null && ledgers.size() > 0) {
-                        Iterator<ConstructionLedger> iterator = ledgers.iterator();
-                        while (iterator.hasNext()) {
-                            ConstructionLedger ledger = iterator.next();
-                            if (vo.getPrimaryKeyId().equals(ledger.getWbsId().toString())) {
-                                if (ledger.getSiteStartTime() != null && ledger.getSiteEndTime() != null) {
-                                    //获取施工起止时间
-                                    map.put("siteStartToEndTime", DateUtil.format(ledger.getSiteStartTime(), "yyyy-MM-dd") + " ~ " + DateUtil.format(ledger.getSiteEndTime(), "yyyy-MM-dd"));
+                if(queryDataResult.size() > 0){
+                    //分组
+                    List<List<QueryProcessDataVO>> groupList = CommonUtil.getBatchSize(queryDataResult, queryVO.getSize());
+                    List<QueryProcessDataVO> groupQueryList = groupList.get(queryVO.getCurrent() == 0 ? 0 : queryVO.getCurrent() - 1);
+
+                    //获取所有施工日志记录
+                    List<String> primaryKeyIds = groupQueryList.stream().map(QueryProcessDataVO::getPrimaryKeyId).distinct().collect(Collectors.toList());
+                    List<ConstructionLedger> ledgers = this.constructionLedgerService.list(Wrappers.<ConstructionLedger>lambdaQuery().in(ConstructionLedger::getWbsId, primaryKeyIds));
+
+                    for (QueryProcessDataVO vo : groupQueryList) {
+                        //处理父节点信息
+                        Map<String, String> map = new HashMap<>();
+                        this.foreachGetParent(map, idToNodeMap, vo.getParentId(), queryVO.getContractId());
+
+                        //获取当前工序的施工台账信息
+                        if (ledgers != null && ledgers.size() > 0) {
+                            Iterator<ConstructionLedger> iterator = ledgers.iterator();
+                            while (iterator.hasNext()) {
+                                ConstructionLedger ledger = iterator.next();
+                                if (vo.getPrimaryKeyId().equals(ledger.getWbsId().toString())) {
+                                    if (ledger.getSiteStartTime() != null && ledger.getSiteEndTime() != null) {
+                                        //获取施工起止时间
+                                        map.put("siteStartToEndTime", DateUtil.format(ledger.getSiteStartTime(), "yyyy-MM-dd") + " ~ " + DateUtil.format(ledger.getSiteEndTime(), "yyyy-MM-dd"));
+                                    }
+                                    if (ledger.getDetectionStartTime() != null && ledger.getDetectionEndTime() != null) {
+                                        //获取检测起止时间
+                                        map.put("detectionStartToEndTime", DateUtil.format(ledger.getDetectionStartTime(), "yyyy-MM-dd") + " ~ " + DateUtil.format(ledger.getDetectionEndTime(), "yyyy-MM-dd"));
+                                    }
+                                    iterator.remove();
+                                    break;
                                 }
-                                if (ledger.getDetectionStartTime() != null && ledger.getDetectionEndTime() != null) {
-                                    //获取检测起止时间
-                                    map.put("detectionStartToEndTime", DateUtil.format(ledger.getDetectionStartTime(), "yyyy-MM-dd") + " ~ " + DateUtil.format(ledger.getDetectionEndTime(), "yyyy-MM-dd"));
-                                }
-                                iterator.remove();
-                                break;
                             }
                         }
+                        //todo 当前缺少是否关联评定、是否关联试验 =================================
+                        //新增列表数据
+                        neiYeLedgerVOList.add(new NeiYeLedgerVO(map.get("unitProject"),
+                                map.get("partProject"),
+                                map.get("partChildProject"),
+                                map.get("subentryProject"),
+                                map.get("subentryChildProject"),
+                                vo.getTitle(),
+                                map.get("siteStartToEndTime"),
+                                map.get("detectionStartToEndTime"),
+                                new Integer("1").equals(vo.getStatus()) ? "待审批" : new Integer("2").equals(vo.getStatus()) ? "已审批" : "未上报",
+                                vo.getEvaluate(),
+                                "false"));
                     }
-                    //todo 当前缺少是否关联评定、是否关联试验 =================================
-                    //新增列表数据
-                    neiYeLedgerVOList.add(new NeiYeLedgerVO(map.get("unitProject"),
-                            map.get("partProject"),
-                            map.get("partChildProject"),
-                            map.get("subentryProject"),
-                            map.get("subentryChildProject"),
-                            vo.getTitle(),
-                            map.get("siteStartToEndTime"),
-                            map.get("detectionStartToEndTime"),
-                            new Integer("1").equals(vo.getStatus()) ? "待审批" : new Integer("2").equals(vo.getStatus()) ? "已审批" : "未上报",
-                            "false",
-                            "false"));
+                    //转换为page信息
+                    Query query = new Query();
+                    query.setCurrent(queryVO.getCurrent());
+                    query.setSize(queryVO.getSize());
+                    IPage<NeiYeLedgerVO> page = Condition.getPage(query);
+                    page.setTotal(queryDataResult.size());
+                    page.setRecords(neiYeLedgerVOList);
+                    return R.data(page);
                 }
-                //转换为page信息
-                Query query = new Query();
-                query.setCurrent(queryVO.getCurrent());
-                query.setSize(queryVO.getSize());
-                IPage<NeiYeLedgerVO> page = Condition.getPage(query);
-                page.setTotal(queryDataResult.size());
-                page.setRecords(neiYeLedgerVOList);
-                return R.data(page);
             }
         }
 
@@ -150,7 +152,9 @@ public class NeiYeController {
             WbsTreeContractTreeVOS vos = vosMap.get(parentId);
             if(new Integer("1").equals(vos.getDeptCategory())){
                 //类型属于1则为单位工程
-                resultMap.put("unitProject", this.contractClient.getContractById(Long.parseLong(contractId)).getContractName());
+                if(!resultMap.containsKey("unitProject")){
+                    resultMap.put("unitProject", vos.getTitle());
+                }
 
             } else if(new Integer("2").equals(vos.getDeptCategory())){
                 //类型属于2则为分部工程

+ 33 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/InformationQueryMapper.xml

@@ -42,6 +42,8 @@
         <result column="parentId" property="parentId"/>
         <result column="title" property="title"/>
         <result column="firstId" property="firstId"/>
+        <result column="nodeType" property="nodeType"/>
+        <result column="evaluate" property="evaluate"/>
     </resultMap>
 
     <resultMap id="intResultMap" type="java.lang.Integer"/>
@@ -55,7 +57,21 @@
             wtc.dept_name AS title,
             wtc.parent_id AS parentId,
             uiq.id AS informationQueryId,
-            uiq.status
+            uiq.status,
+            (
+                select
+                    case iq.status
+                    WHEN 2 then 'true'
+                    ELSE 'false' end AS evaluate
+                from
+                    m_wbs_tree_contract AS tc
+                left join u_information_query AS iq on tc.p_key_id = iq.wbs_id
+                where
+                    tc.major_data_type = 2
+                and tc.parent_id = wtc.parent_id
+                and tc.contract_id = wtc.contract_id
+                and NOT EXISTS (select 1 from u_information_query as q where iq.id = q.id and q.status > iq.status) LIMIT 1
+            ) AS evaluate
         FROM
             m_wbs_tree_contract AS wtc
         LEFT JOIN u_information_query AS uiq ON wtc.p_key_id = uiq.wbs_id AND uiq.classify = #{classify} and uiq.is_deleted = 0
@@ -70,11 +86,26 @@
             wtc.p_key_id,
             wtc.ancestors,
             wtc.major_data_type,
+            wtc.dept_category AS nodeType,
             wtc.dept_name AS title,
             wtc.parent_id AS parentId,
             uiq.id AS informationQueryId,
             uiq.status,
-            tcf.id AS firstId
+            tcf.id AS firstId,
+            (
+                select
+                    case iq.status
+                    WHEN 2 then 'true'
+                    ELSE 'false' end AS evaluate
+                from
+                    m_wbs_tree_contract AS tc
+                left join u_information_query AS iq on tc.p_key_id = iq.wbs_id
+                where
+                    tc.major_data_type = 2
+                and tc.parent_id = wtc.parent_id
+                and tc.contract_id = wtc.contract_id
+                and NOT EXISTS (select 1 from u_information_query as q where iq.id = q.id and q.status > iq.status) LIMIT 1
+            ) AS evaluate
         FROM
             m_wbs_tree_contract AS wtc
         LEFT JOIN u_information_query AS uiq ON wtc.p_key_id = uiq.wbs_id AND uiq.classify = #{classify} and uiq.is_deleted = 0

+ 9 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ManagerHomePageController.java

@@ -35,6 +35,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
 
 @RestController
 @AllArgsConstructor
@@ -251,6 +252,8 @@ public class ManagerHomePageController extends BladeController {
             List<BusinessUserOpinionVO> result = this.opinionUserClient.queryBusinessUserOpinionList(current, size);
             //删除掉已经办结的
             result.removeIf(BusinessUserOpinionVO::getIsCurrent);
+
+            AtomicInteger count = new AtomicInteger();
             //拼接数据
             result.forEach(vo -> {
                 if(!new Integer("1").equals(vo.getIsIgnore())){
@@ -258,8 +261,12 @@ public class ManagerHomePageController extends BladeController {
                             "的【" + vo.getSubmitUserRole() + vo.getSubmitUserName() + "】" + "向您反馈" + "\"" + vo.getProblemType() + "\"";
 
                     resultVO.setUserOpinionFlowList(vo.getUserOpinionId().toString(), title, vo.getCurrentLink(), vo.getNewNumber(), vo.getCurrentLinkId().toString(), vo.getOperation());
+                    count.getAndIncrement();
                 }
             });
+
+            resultVO.setPersonToDoNumber(count.get());
+
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -300,6 +307,8 @@ public class ManagerHomePageController extends BladeController {
                 }
             });
 
+            resultVO.setAllToDoNumber(result.size());
+
         }catch (Exception e){
             e.printStackTrace();
         }

+ 6 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -125,7 +125,7 @@ public class WbsTreeController extends BladeController {
                     .set("deptCategoryName", DictCache.getValue(DictEnum.ORG_CATEGORY, WbsTreeDTO.getDeptCategory()));
             return R.data(kv);
         }
-        return R.fail(200,"操作失败");
+        return R.fail("操作失败");
     }
 
 
@@ -176,20 +176,19 @@ public class WbsTreeController extends BladeController {
         if (StringUtils.isNotEmpty(id)) {
             List<WbsFormElementVO> wbsFormElements = wbsTreeService.selectFormElements(id);
             if (wbsFormElements.size() > 0) {
-                return R.fail(200,"该表单中的存在元素,删除失败");
+                throw new ServiceException("该表单中的存在元素,删除失败");
             }
             List<WbsTreePrivate> wbsTreePrivates = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
                     .eq(WbsTreePrivate::getStatus, 1)
                     .eq(WbsTreePrivate::getId, id));
             if (wbsTreePrivates.size() > 0) {
-                return R.fail("该表单已被项目引用,删除失败");
+                throw new ServiceException("该表单已被项目引用,删除失败");
             }
-            boolean result = wbsTreeService.removeTableById(id);
-            if (result) {
+            if (wbsTreeService.removeTableById(id)) {
                 return R.success("删除成功");
             }
         }
-        return R.fail(200,"删除失败");
+        return R.fail("删除失败");
     }
 
     /**
@@ -259,7 +258,7 @@ public class WbsTreeController extends BladeController {
         if (result) {
             return R.success("新增导入成功");
         } else {
-            return R.fail(200,"请选择正确模板导入");
+            return R.fail(200, "请选择正确模板导入");
         }
     }
 

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

@@ -84,6 +84,9 @@ public class WbsTreePrivateController extends BladeController {
                 }
             }
 
+            //记录需要修改的对象(只改名称)
+            List<WbsTreePrivate> updateList = new ArrayList<>();
+
             //检查一下原本节点的表是否有新增的(只处理新增)
             if(oldDataList != null && oldDataList.size() > 0){
                 for(WbsTreePrivate treePrivate : oldDataList){
@@ -96,33 +99,42 @@ public class WbsTreePrivateController extends BladeController {
                     //校验数量
                     if(wbsTreeTableList != null && wbsTreeTableList.size() > 0){
                         if(treePrivateTableList != null){
-                            if(treePrivateTableList.size() < wbsTreeTableList.size()){
-                                //小于,说明模板节点存在新增,检查哪些是新增的
-                                Iterator<WbsTree> iterator = wbsTreeTableList.iterator();
-                                while (iterator.hasNext()){
-                                    WbsTree tree = iterator.next();
-                                    for(WbsTreePrivate privateNode : treePrivateTableList){
-                                        if(privateNode.getId().equals(tree.getId())){
-                                            //存在,删除
-                                            iterator.remove();
-                                            break;
+                            //小于,说明模板节点存在新增,检查哪些是新增的
+                            Iterator<WbsTree> iterator = wbsTreeTableList.iterator();
+                            while (iterator.hasNext()){
+                                WbsTree tree = iterator.next();
+
+                                for(WbsTreePrivate privateNode : treePrivateTableList){
+                                    if(privateNode.getId().equals(tree.getId())){
+                                        if(
+                                                (StringUtils.isNotEmpty(privateNode.getFullName(), tree.getFullName()) && !privateNode.getFullName().equals(tree.getFullName()))
+                                                ||
+                                                (StringUtils.isNotEmpty(privateNode.getDeptName(), tree.getDeptName()) && !privateNode.getDeptName().equals(tree.getDeptName()))
+                                        ){
+                                            //名字不同,需要修改
+                                            privateNode.setFullName(tree.getFullName());
+                                            privateNode.setDeptName(tree.getDeptName());
+                                            updateList.add(privateNode);
                                         }
+
+                                        //存在,删除
+                                        iterator.remove();
+                                        break;
                                     }
                                 }
-                                //多出来的,新增
-                                if(wbsTreeTableList.size() > 0){
-                                    for(WbsTree wbsTree : wbsTreeTableList){
-                                        WbsTreePrivate newTreePrivate = new WbsTreePrivate();
-                                        BeanUtils.copyProperties(wbsTree, newTreePrivate);
-                                        newTreePrivate.setWbsType("4");
-                                        newTreePrivate.setProjectId(vo.getProjectId());
-                                        newTreePrivate.setCreateTime(now);
-                                        newTreePrivate.setPKeyId(SnowFlakeUtil.getId());
-
-                                        saveTreePrivateList.add(newTreePrivate);
-                                    }
+                            }
+                            //多出来的,新增
+                            if(wbsTreeTableList.size() > 0){
+                                for(WbsTree wbsTree : wbsTreeTableList){
+                                    WbsTreePrivate newTreePrivate = new WbsTreePrivate();
+                                    BeanUtils.copyProperties(wbsTree, newTreePrivate);
+                                    newTreePrivate.setWbsType("4");
+                                    newTreePrivate.setProjectId(vo.getProjectId());
+                                    newTreePrivate.setCreateTime(now);
+                                    newTreePrivate.setPKeyId(SnowFlakeUtil.getId());
+
+                                    saveTreePrivateList.add(newTreePrivate);
                                 }
-
                             }
                         }
                     }
@@ -156,7 +168,12 @@ public class WbsTreePrivateController extends BladeController {
                 this.projectInfoService.update(Wrappers.<ProjectInfo>lambdaUpdate().set(ProjectInfo::getReferenceLogWbsTemplateId, vo.getWbsId()).eq(ProjectInfo::getId, vo.getProjectId()));
 
                 //保存数据
-                return R.data(this.wbsTreePrivateService.saveBatch(saveTreePrivateList));
+                this.wbsTreePrivateService.saveBatch(saveTreePrivateList);
+            }
+            if(updateList.size() > 0){
+                for(WbsTreePrivate treePrivate : updateList){
+                    this.wbsTreePrivateService.update(Wrappers.<WbsTreePrivate>lambdaUpdate().set(WbsTreePrivate::getDeptName, treePrivate.getDeptName()).set(WbsTreePrivate::getFullName, treePrivate.getFullName()).eq(WbsTreePrivate::getPKeyId, treePrivate.getPKeyId()));
+                }
             }
 
             return R.data(200, true, "保存成功");

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

@@ -42,7 +42,7 @@ public class WbsTreePrivateClientImpl implements WbsTreePrivateClient {
 
     @Override
     public List<WbsTreeContractTreeVOS> queryWbsTreePrivateByProjectIdAndId(String projectId, Long id) {
-        List<WbsTreePrivate> result = this.wbsTreePrivateService.list(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getType, 1).like(WbsTreePrivate::getAncestors, id).eq(WbsTreePrivate::getIsDeleted, 0));
+        List<WbsTreePrivate> result = this.wbsTreePrivateService.list(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getProjectId, projectId).eq(WbsTreePrivate::getType, 1).like(WbsTreePrivate::getAncestors, id));
         if(result != null && result.size() > 0){
             //转换实体
             List<WbsTreePrivateVO> voList = ForestNodeMerger.merge(JSONArray.parseArray(JSONObject.toJSONString(result), WbsTreePrivateVO.class));

+ 14 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/injector/EasyBaseMapper.java

@@ -0,0 +1,14 @@
+package org.springblade.manager.injector;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+
+public interface EasyBaseMapper<T> extends BaseMapper<T> {
+    /**
+     * 批量插入注射器方式 仅适用于MySqL
+     * @param entityList 实体列表
+     * @return 影响行数
+     */
+    Integer insertBatchSomeColumn(List<T> entityList);
+
+}

+ 22 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/injector/EasysqlInjector.java

@@ -0,0 +1,22 @@
+package org.springblade.manager.injector;
+
+import com.baomidou.mybatisplus.core.injector.AbstractMethod;
+import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
+
+import java.util.List;
+
+/**
+ * mybatis-plus 注入器
+ */
+public class EasysqlInjector extends DefaultSqlInjector {
+
+    @Override
+    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
+        List<AbstractMethod> methodList = super.getMethodList(mapperClass,tableInfo);
+        methodList.add(new InsertBatchSomeColumn());
+        return methodList;
+    }
+
+}

+ 18 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/injector/MybatisPlusConfig.java

@@ -0,0 +1,18 @@
+package org.springblade.manager.injector;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@EnableTransactionManagement
+@Configuration
+@MapperScan("org.springblade.manager.mapper*")
+public class MybatisPlusConfig {
+
+    @Bean
+    public EasysqlInjector easysqlInjector() {
+        return new EasysqlInjector();
+    }
+    
+}

+ 8 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.java

@@ -1,23 +1,22 @@
 package org.springblade.manager.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.business.entity.InformationQuery;
 import org.springblade.manager.entity.*;
+import org.springblade.manager.injector.EasyBaseMapper;
 import org.springblade.manager.vo.*;
 
-import java.util.ArrayList;
 import java.util.List;
 
-public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
+public interface WbsTreeContractMapper extends EasyBaseMapper<WbsTreeContract> {
 
     List<WbsTreeContract> selectQueryCurrentNodeByAncestors(@Param("ids") List<String> ids, @Param("contractId") String contractId);
 
-    List<WbsTreeContract> selectQueryValueLikeNodeName(@Param("queryValue") String queryValue,@Param("contractId") String contractId);
+    List<WbsTreeContract> selectQueryValueLikeNodeName(@Param("queryValue") String queryValue, @Param("contractId") String contractId);
 
     Boolean regainRemoveTreeByPrimaryKeyIds(@Param("primaryKeyIds") List<String> primaryKeyIds);
 
-    List<WbsTreeContract> queryContractSubmitWbsTreeByContractId(@Param("contractId")String contractId);
+    List<WbsTreeContract> queryContractSubmitWbsTreeByContractId(@Param("contractId") String contractId);
 
     List<WbsTreeContract> queryCurrentContractLogList(@Param("projectId") String projectId);
 
@@ -71,13 +70,13 @@ public interface WbsTreeContractMapper extends BaseMapper<WbsTreeContract> {
 
     List<WbsTreeContract> selectTableListInfo(List<Long> ids, String wbsId, String projectId, String contractId);
 
-    List<WbsTreeContract> selectContractList(String wbsId, String projectId,@Param("ids") List<Long> ids);
+    List<WbsTreeContract> selectContractList(String wbsId, String projectId, @Param("ids") List<Long> ids);
 
-    void updateBatchByIds(@Param("wbsTree") WbsTree wbsTree,@Param("id") Long id);
+    void updateBatchByIds(@Param("wbsTree") WbsTree wbsTree, @Param("id") Long id);
 
-    void updateBatchByIds2(@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate,@Param("id")  Long id);
+    void updateBatchByIds2(@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate, @Param("id") Long id);
 
-    void updateContractTablesInfo(@Param("contractInfoId") Long contractInfoId,@Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate);
+    void updateContractTablesInfo(@Param("contractInfoId") Long contractInfoId, @Param("wbsTreePrivate") WbsTreePrivate wbsTreePrivate);
 
     void updateBatchWbsContract(@Param("listContract") List<WbsTreeContract> listContract);
 

+ 6 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeContractMapper.xml

@@ -95,19 +95,15 @@
 
     <update id="deleteBatch">
         DELETE FROM m_wbs_tree_contract
-        WHERE ( id IN
-        <foreach item="ids" collection="ids" open="(" close=")" separator=",">
-            #{ids}
-        </foreach>
-        OR (parent_id IN
+        WHERE ( id OR parent_id ) IN
         <foreach item="ids" collection="ids" open="(" close=")" separator=",">
             #{ids}
         </foreach>
-        ) )
+
         AND wbs_id = #{wbsId}
         AND project_id = #{projectId}
         AND contract_id = #{contractId}
-        AND contract_type = 1
+        /*AND contract_type = 1*/
     </update>
 
     <update id="updateByCondition">
@@ -400,7 +396,7 @@
     </select>
 
     <select id="queryContractSubmitWbsTreeByContractId" resultMap="ResultMap">
-        select p_key_id, contract_id, major_data_type from m_wbs_tree_contract where is_deleted = 0 and dept_category = 6 and contract_id = #{contractId}
+        select p_key_id, contract_id, major_data_type from m_wbs_tree_contract where is_deleted = 0 and major_data_type in(1,2,3,4) and contract_id = #{contractId}
     </select>
 
     <select id="selectInformationQueryInfo" resultType="org.springblade.business.entity.InformationQuery">
@@ -426,7 +422,7 @@
         AND wbs_id = #{wbsId}
         AND project_id = #{projectId}
         AND contract_id = #{contractId}
-        AND contract_type = 1
+        /*AND contract_type = 1*/
     </select>
 
     <update id="regainRemoveTreeByPrimaryKeyIds">
@@ -486,10 +482,9 @@
             <if test="wbsTreePrivate.sort != null and wbsTreePrivate.sort != ''">
                 , sort = #{wbsTreePrivate.sort}
             </if>
-        WHERE id = #{wbsTreePrivate.id}
+        WHERE (id = #{wbsTreePrivate.id} OR old_id = #{wbsTreePrivate.id})
         AND project_id = #{wbsTreePrivate.projectId}
         AND contract_id = #{contractInfoId}
-        AND old_id is null
         AND type = 2
         AND status = 1
         AND is_deleted = 0

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

@@ -1,16 +1,16 @@
 package org.springblade.manager.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.dto.WbsTreeDTO2;
 import org.springblade.manager.entity.WbsFormElement;
 import org.springblade.manager.entity.WbsTree;
+import org.springblade.manager.injector.EasyBaseMapper;
 import org.springblade.manager.vo.*;
 
 import java.util.List;
 
-public interface WbsTreeMapper extends BaseMapper<WbsTree> {
+public interface WbsTreeMapper extends EasyBaseMapper<WbsTree> {
 
     List<WbsTreeVO> selectWbsTreePage(IPage page, WbsTreeVO wbsTree);
 

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

@@ -1,17 +1,17 @@
 package org.springblade.manager.mapper;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
 import org.springblade.manager.dto.WbsTreePrivateDTO3;
 import org.springblade.manager.entity.WbsTree;
 import org.springblade.manager.entity.WbsTreePrivate;
+import org.springblade.manager.injector.EasyBaseMapper;
 import org.springblade.manager.vo.WbsNodeTableVO;
 import org.springblade.manager.vo.WbsTreePrivateVO;
 
 import java.util.List;
 
-public interface WbsTreePrivateMapper extends BaseMapper<WbsTreePrivate> {
+public interface WbsTreePrivateMapper extends EasyBaseMapper<WbsTreePrivate> {
     List<WbsTreePrivate> selectAll(Integer wbsType);
 
     List<WbsTreePrivateVO> tree(@Param("wbsId") String wbsId, @Param("projectId") String projectId, @Param("wbsType") Integer wbsType);

+ 50 - 45
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -10,11 +10,11 @@
         <result column="w_id" property="wbsId"/>
         <result column="is_deleted" property="isDeleted"/>
         <result column="status" property="status"/>
-        <result column="create_time" property="createTime"/>
+        <result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
         <result column="create_user" property="createUser"/>
         <result column="create_dept" property="createDept"/>
         <result column="update_user" property="updateUser"/>
-        <result column="update_time" property="updateTime"/>
+        <result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
         <result column="type" property="type"/>
         <result column="table_type" property="tableType"/>
         <result column="tenant_id" property="tenantId"/>
@@ -92,7 +92,6 @@
                 #{wbsTree.tableOwner}, #{wbsTree.majorDataType}, #{wbsTree.initTableName}, #{wbsTree.isLinkTable})
     </insert>
 
-
     <update id="deleteByCondition">
         UPDATE m_wbs_tree_private
         SET is_deleted = 1
@@ -192,8 +191,8 @@
 
     <update id="updateBatchByPid">
         UPDATE m_wbs_tree_private
-        SET dept_name = #{wbsTreePrivates.deptName},
-            full_name =#{wbsTreePrivates.deptName},
+        SET dept_name   = #{wbsTreePrivates.deptName},
+            full_name   =#{wbsTreePrivates.deptName},
             table_type  = #{wbsTreePrivates.tableType},
             table_owner = #{wbsTreePrivates.tableOwner}
         WHERE p_key_id = #{wbsTreePrivates.pKeyId}
@@ -202,16 +201,16 @@
     <update id="updateBatchByIds">
         UPDATE m_wbs_tree_private
         SET dept_name = #{wbsTree.deptName},
-            full_name =#{wbsTree.deptName},
-            dept_category = #{wbsTree.deptCategory},
-            major_data_type = #{wbsTree.majorDataType},
-            unique_code = #{wbsTree.uniqueCode},
-            partition_code = #{wbsTree.partitionCode},
-            table_type = #{wbsTree.tableType},
-            table_owner = #{wbsTree.tableOwner}
-            <if test="wbsTree.sort != null and wbsTree.sort != ''">
-                , sort = #{wbsTree.sort}
-            </if>
+        full_name =#{wbsTree.deptName},
+        dept_category = #{wbsTree.deptCategory},
+        major_data_type = #{wbsTree.majorDataType},
+        unique_code = #{wbsTree.uniqueCode},
+        partition_code = #{wbsTree.partitionCode},
+        table_type = #{wbsTree.tableType},
+        table_owner = #{wbsTree.tableOwner}
+        <if test="wbsTree.sort != null and wbsTree.sort != ''">
+            , sort = #{wbsTree.sort}
+        </if>
         WHERE id = #{wbsTree.id}
         AND project_id = #{projectId}
         AND status = 1
@@ -221,25 +220,25 @@
     <update id="updateBatchByIds2">
         UPDATE m_wbs_tree_private
         SET dept_name = #{wbsTreePrivate.deptName},
-            full_name = #{wbsTreePrivate.deptName},
-            dept_category = #{wbsTreePrivate.deptCategory},
-            major_data_type = #{wbsTreePrivate.majorDataType},
-            unique_code = #{wbsTreePrivate.uniqueCode},
-            partition_code = #{wbsTreePrivate.partitionCode},
-            table_type = #{wbsTreePrivate.tableType},
-            table_owner = #{wbsTreePrivate.tableOwner}
-            <if test="wbsTreePrivate.sort != null and wbsTreePrivate.sort != ''">
-                , sort = #{wbsTreePrivate.sort}
-            </if>
+        full_name = #{wbsTreePrivate.deptName},
+        dept_category = #{wbsTreePrivate.deptCategory},
+        major_data_type = #{wbsTreePrivate.majorDataType},
+        unique_code = #{wbsTreePrivate.uniqueCode},
+        partition_code = #{wbsTreePrivate.partitionCode},
+        table_type = #{wbsTreePrivate.tableType},
+        table_owner = #{wbsTreePrivate.tableOwner}
+        <if test="wbsTreePrivate.sort != null and wbsTreePrivate.sort != ''">
+            , sort = #{wbsTreePrivate.sort}
+        </if>
         WHERE id = #{wbsTreePrivate.id}
-          AND project_id = #{projectId}
-          AND wbs_id = #{wbsId}
-          AND status = 1
-          AND is_deleted = 0
+        AND project_id = #{projectId}
+        AND wbs_id = #{wbsId}
+        AND status = 1
+        AND is_deleted = 0
     </update>
 
     <update id="updateBatchWbsPrivate" parameterType="java.util.List">
-        <foreach  collection="listPrivate" item="item" index="index" separator=";">
+        <foreach collection="listPrivate" item="item" index="index" separator=";">
             UPDATE m_wbs_tree_private
             <set>
                 dept_name = #{item.deptName},
@@ -313,7 +312,7 @@
         GROUP BY
         project_id
         ORDER BY
-        create_time
+        ( SELECT create_time FROM m_project_info pi WHERE wtp.project_id = pi.id )
     </select>
 
     <select id="tree" resultMap="treeNodeResultMap">
@@ -339,7 +338,8 @@
     </select>
 
     <select id="selectByCondition" resultType="org.springblade.manager.entity.WbsTreePrivate">
-        SELECT * FROM m_wbs_tree_private
+        SELECT *
+        FROM m_wbs_tree_private
         WHERE (id = #{id}
             AND type = 1
             AND project_id = #{projectId}
@@ -365,7 +365,8 @@
     </select>
 
     <select id="selectIsTable" resultType="org.springblade.manager.entity.WbsTree">
-        SELECT * FROM m_wbs_tree_private
+        SELECT *
+        FROM m_wbs_tree_private
         WHERE type = 2
           AND is_deleted = 0
           AND `status` = 1
@@ -373,15 +374,15 @@
           AND project_id = #{projectId}
     </select>
     <select id="selectByNodeTable" resultType="org.springblade.manager.vo.WbsNodeTableVO">
-        SELECT wt.p_key_id AS "pKeyId",
-               wt.id AS id,
-               wt.dept_name AS tableName,
-               wt.table_type AS tableType,
-               wt.`status` AS isCreateTable,
-               wt.table_owner as tableOwner,
+        SELECT wt.p_key_id                                                  AS "pKeyId",
+               wt.id                                                        AS id,
+               wt.dept_name                                                 AS tableName,
+               wt.table_type                                                AS tableType,
+               wt.`status`                                                  AS isCreateTable,
+               wt.table_owner                                               as tableOwner,
                wt.is_link_table,
                wt.init_table_name,
-               wt.excel_id as excelId,
+               wt.excel_id                                                  as excelId,
                wt.sort,
                wt.status,
                (SELECT count(1) FROM m_wbs_form_element WHERE f_id = wt.id) AS "elementTotal"
@@ -391,10 +392,11 @@
           AND wt.parent_id = #{id}
           AND wt.wbs_id = #{wbsId}
           AND wt.project_id = #{projectId}
-        ORDER BY wt.sort,wt.dept_name,wt.create_time
+        ORDER BY wt.sort, wt.dept_name, wt.create_time
     </select>
     <select id="getByCondition" resultType="org.springblade.manager.entity.WbsTreePrivate">
-        SELECT * FROM m_wbs_tree_private
+        SELECT *
+        FROM m_wbs_tree_private
         WHERE project_id = #{projectId}
           AND id = #{parentId}
           AND wbs_id = #{wbsId}
@@ -403,7 +405,8 @@
           AND type = 1
     </select>
     <select id="getByPKeyId" resultType="org.springblade.manager.entity.WbsTreePrivate">
-        SELECT * FROM m_wbs_tree_private
+        SELECT *
+        FROM m_wbs_tree_private
         WHERE p_key_id = #{pKeyId}
     </select>
 
@@ -419,7 +422,8 @@
           AND parent_id = 0
     </select>
     <select id="selectByPKeyId" resultType="org.springblade.manager.entity.WbsTreePrivate">
-        SELECT * FROM m_wbs_tree_private
+        SELECT *
+        FROM m_wbs_tree_private
         WHERE p_key_id = #{referenceWbsTemplateId}
     </select>
 
@@ -458,7 +462,8 @@
     </select>
 
     <select id="selectNodeAndTable2" resultType="org.springblade.manager.entity.WbsTreePrivate">
-        SELECT * FROM m_wbs_tree_private
+        SELECT *
+        FROM m_wbs_tree_private
         WHERE project_id = #{referencePrivateWbsProjectId}
           AND wbs_id = #{wbsId}
           AND STATUS = 1

+ 112 - 84
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -135,6 +135,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                         }
                     });
                 });
+
+                //baseMapper.insertBatchSomeColumn(wbsTreeContracts);
                 this.saveBatch(wbsTreeContracts, 10000);
             }
         } else {
@@ -173,8 +175,8 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
             //新增
             if (saveIds.size() > 0) {
-                List<WbsTreeContract> wbsTreeContractList = new ArrayList<>();
                 List<WbsTreePrivate> wbsTreePrivatesList = new ArrayList<>();
+                List<WbsTreeContract> wbsTreeContractList = new ArrayList<>();
                 ArrayList<ConstructionLedger> constructionLedgerList = new ArrayList<>();
 
                 //获取wbs私有树下节点、表
@@ -211,59 +213,39 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 });
 
                 //新增合同段节点、表
-                this.saveBatch(wbsTreeContractList, 10000);
+                //baseMapper.insertBatchSomeColumn(wbsTreeContractList);
+                insertBatch(wbsTreeContractList,100);
 
                 //新增施工台账
                 constructionLedgerFeign.initConstructionLedger(constructionLedgerList);
             }
         }
-
         return true;
     }
 
-    private WbsTreeContract getWbsTreeContract(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
-        WbsTreeContract wbsTreeContract = new WbsTreeContract();
-        //数据初始化-施工合同
-        Long snowId = SnowFlakeUtil.getId();
-        wbsTreeContract.setPKeyId(snowId);
-        wbsTreeContract.setId(wbsTree.getId());
-        wbsTreeContract.setWbsId(pawDTO.getWbsId());
-        wbsTreeContract.setWbsType(wbsTree.getType());
-        wbsTreeContract.setProjectId(pawDTO.getProjectId());
-        wbsTreeContract.setContractId(pawDTO.getContractId());
-        wbsTreeContract.setContractType(pawDTO.getContractType());
-        wbsTreeContract.setTenantId(wbsTree.getTenantId());
-        wbsTreeContract.setParentId(wbsTree.getParentId());
-        wbsTreeContract.setAncestors(wbsTree.getAncestors());
-        wbsTreeContract.setDeptName(wbsTree.getDeptName());
-        wbsTreeContract.setDeptCategory(wbsTree.getDeptCategory());
-        wbsTreeContract.setFullName(wbsTree.getDeptName());
-        wbsTreeContract.setSort(wbsTree.getSort());
-        wbsTreeContract.setRemark(wbsTree.getRemark());
-        wbsTreeContract.setType(wbsTree.getType());
-        wbsTreeContract.setTableType(wbsTree.getTableType());
-        wbsTreeContract.setStatus(wbsTree.getStatus());
-        wbsTreeContract.setIsDeleted(wbsTree.getIsDeleted());
-        wbsTreeContract.setUniqueCode(wbsTree.getUniqueCode());
-        wbsTreeContract.setPartitionCode(wbsTree.getPartitionCode());
-        wbsTreeContract.setIsConcrete(wbsTree.getIsConcrete());
-        wbsTreeContract.setIsExpernode(wbsTree.getIsExpernode());
-        wbsTreeContract.setTableOwner(wbsTree.getTableOwner());
-        wbsTreeContract.setMajorDataType(wbsTree.getMajorDataType());
-        wbsTreeContract.setInitTableName(wbsTree.getInitTableName());
-        wbsTreeContract.setIsLinkTable(wbsTree.getIsLinkTable());
-        wbsTreeContract.setExcelId(wbsTree.getExcelId());
-        wbsTreeContract.setHtmlUrl(wbsTree.getHtmlUrl());
-        wbsTreeContract.setIsBussShow(1);
-        wbsTreeContract.setCreateTime(wbsTree.getCreateTime());
-        wbsTreeContract.setUpdateTime(wbsTree.getUpdateTime());
-        wbsTreeContract.setUpdateUser(wbsTree.getUpdateUser());
-        wbsTreeContract.setCreateUser(wbsTree.getCreateUser());
-        wbsTreeContract.setCreateDept(wbsTree.getCreateDept());
-        if (wbsTree.getType() == 2) {
-            wbsTreeContract.setIsTypePrivatePid(wbsTree.getPKeyId());
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertBatch(Collection<WbsTreeContract> entityList, int batchSize) {
+        try {
+            int size = entityList.size();
+            int idxLimit = Math.min(batchSize, size);
+            int i = 1;
+            //保存单批提交的数据集合
+            List<WbsTreeContract> oneBatchList = new ArrayList<>();
+            for (Iterator<WbsTreeContract> var1 = entityList.iterator(); var1.hasNext(); ++i) {
+                WbsTreeContract element = var1.next();
+                oneBatchList.add(element);
+                if (i == idxLimit) {
+                    baseMapper.insertBatchSomeColumn(oneBatchList);
+                    //每次提交后清空集合数据
+                    oneBatchList.clear();
+                    idxLimit = Math.min(idxLimit + batchSize, size);
+                }
+            }
+        } catch (Exception e) {
+            log.error("保存失败", e);
+            return false;
         }
-        return wbsTreeContract;
+        return true;
     }
 
     @Override
@@ -271,45 +253,6 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return baseMapper.selectList(Wrappers.<WbsTreeContract>query().lambda().eq(WbsTreeContract::getContractId, ids));
     }
 
-    public static List<String> getDiffrent(List<String> list1, List<String> list2) {
-        List<String> diff = new ArrayList<String>();
-        List<String> maxList = list1;
-        List<String> minList = list2;
-        if (list2.size() > list1.size()) {
-            maxList = list2;
-            minList = list1;
-        }
-        Map<String, Integer> map = new HashMap<String, Integer>(maxList.size());
-        for (String string : maxList) {
-            map.put(string, 1);
-        }
-        for (String string : minList) {
-            if (map.get(string) != null) {
-                map.put(string, 2);
-                continue;
-            }
-            diff.add(string);
-        }
-        for (Map.Entry<String, Integer> entry : map.entrySet()) {
-            if (entry.getValue() == 1) {
-                diff.add(entry.getKey());
-            }
-        }
-        return diff;
-    }
-
-    private List<WbsTreeContract> findAllNodeList(String wbsTreeIds, String projectId, String contractId, String wbsId) {
-        String[] ids = wbsTreeIds.split(",");
-        List<Long> idList = new ArrayList<>();
-        List<WbsTreeContract> list = new ArrayList<>();
-        for (String id : ids) {
-            idList.add(Long.valueOf(id));
-            WbsTreeContract contract = baseMapper.selectByCondition(id, projectId, contractId, wbsId);
-            list.add(contract);
-        }
-        return list;
-    }
-
     @Override
     public List<WbsTreeContract> queryCurrentContractLogList(String projectId) {
         return this.baseMapper.queryCurrentContractLogList(projectId);
@@ -395,4 +338,89 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     public List<WbsTreeContract> updateAllNodeTabById(WbsTreePrivate aPrivate) {
         return baseMapper.updateAllNodeTabById(aPrivate);
     }
+
+    private List<WbsTreeContract> findAllNodeList(String wbsTreeIds, String projectId, String contractId, String wbsId) {
+        String[] ids = wbsTreeIds.split(",");
+        List<Long> idList = new ArrayList<>();
+        List<WbsTreeContract> list = new ArrayList<>();
+        for (String id : ids) {
+            idList.add(Long.valueOf(id));
+            WbsTreeContract contract = baseMapper.selectByCondition(id, projectId, contractId, wbsId);
+            list.add(contract);
+        }
+        return list;
+    }
+
+    private WbsTreeContract getWbsTreeContract(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
+        WbsTreeContract wbsTreeContract = new WbsTreeContract();
+        //数据初始化-施工合同
+        Long snowId = SnowFlakeUtil.getId();
+        wbsTreeContract.setPKeyId(snowId);
+        wbsTreeContract.setId(wbsTree.getId());
+        wbsTreeContract.setWbsId(pawDTO.getWbsId());
+        wbsTreeContract.setWbsType(wbsTree.getType());
+        wbsTreeContract.setProjectId(pawDTO.getProjectId());
+        wbsTreeContract.setContractId(pawDTO.getContractId());
+        wbsTreeContract.setContractType(pawDTO.getContractType());
+        wbsTreeContract.setTenantId(wbsTree.getTenantId());
+        wbsTreeContract.setParentId(wbsTree.getParentId());
+        wbsTreeContract.setAncestors(wbsTree.getAncestors());
+        wbsTreeContract.setDeptName(wbsTree.getDeptName());
+        wbsTreeContract.setDeptCategory(wbsTree.getDeptCategory());
+        wbsTreeContract.setFullName(wbsTree.getFullName());
+        wbsTreeContract.setSort(wbsTree.getSort());
+        wbsTreeContract.setRemark(wbsTree.getRemark());
+        wbsTreeContract.setType(wbsTree.getType());
+        wbsTreeContract.setTableType(wbsTree.getTableType());
+        wbsTreeContract.setStatus(wbsTree.getStatus());
+        wbsTreeContract.setIsDeleted(wbsTree.getIsDeleted());
+        wbsTreeContract.setUniqueCode(wbsTree.getUniqueCode());
+        wbsTreeContract.setPartitionCode(wbsTree.getPartitionCode());
+        wbsTreeContract.setIsConcrete(wbsTree.getIsConcrete());
+        wbsTreeContract.setIsExpernode(wbsTree.getIsExpernode());
+        wbsTreeContract.setTableOwner(wbsTree.getTableOwner());
+        wbsTreeContract.setMajorDataType(wbsTree.getMajorDataType());
+        wbsTreeContract.setInitTableName(wbsTree.getInitTableName());
+        wbsTreeContract.setIsLinkTable(wbsTree.getIsLinkTable());
+        wbsTreeContract.setExcelId(wbsTree.getExcelId());
+        wbsTreeContract.setHtmlUrl(wbsTree.getHtmlUrl());
+        wbsTreeContract.setIsBussShow(1);
+        wbsTreeContract.setCreateTime(wbsTree.getCreateTime());
+        wbsTreeContract.setUpdateTime(wbsTree.getUpdateTime());
+        wbsTreeContract.setUpdateUser(wbsTree.getUpdateUser());
+        wbsTreeContract.setCreateUser(wbsTree.getCreateUser());
+        wbsTreeContract.setCreateDept(wbsTree.getCreateDept());
+        if (wbsTree.getType() == 2) {
+            wbsTreeContract.setIsTypePrivatePid(wbsTree.getPKeyId());
+        }
+        return wbsTreeContract;
+    }
+
+    public static List<String> getDiffrent(List<String> list1, List<String> list2) {
+        List<String> diff = new ArrayList<String>();
+        List<String> maxList = list1;
+        List<String> minList = list2;
+        if (list2.size() > list1.size()) {
+            maxList = list2;
+            minList = list1;
+        }
+        Map<String, Integer> map = new HashMap<String, Integer>(maxList.size());
+        for (String string : maxList) {
+            map.put(string, 1);
+        }
+        for (String string : minList) {
+            if (map.get(string) != null) {
+                map.put(string, 2);
+                continue;
+            }
+            diff.add(string);
+        }
+        for (Map.Entry<String, Integer> entry : map.entrySet()) {
+            if (entry.getValue() == 1) {
+                diff.add(entry.getKey());
+            }
+        }
+        return diff;
+    }
+
 }

+ 49 - 46
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -210,52 +210,55 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean updateBatchByPid(List<WbsTreePrivateDTO3> wbsTreePrivates) {
-        try {
-            //修改当前私有项目元素表基础信息
-            wbsTreePrivates.forEach(list -> {
-                baseMapper.updateBatchByPid(list);
-            });
-
-            //修改当前项目下所有合同段中的元素表基础信息
-            String projectId = "";
-            String parentId = "";
-            List<WbsTreePrivate> wbsTreePrivateList = new ArrayList<>();
-            int number = 0;
-            for (WbsTreePrivateDTO3 wbsTreePrivate : wbsTreePrivates) {
-                WbsTreePrivate wbsTreePrivate1 = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getPKeyId()));
-                wbsTreePrivateList.add(wbsTreePrivate1);
-                if (number == 0) {
-                    projectId = wbsTreePrivate1.getProjectId();
-                    parentId = String.valueOf(wbsTreePrivate1.getParentId());
-                    number = 1;
-                }
+        //try {
+        //修改当前私有项目元素表基础信息
+        wbsTreePrivates.forEach(list -> {
+            baseMapper.updateBatchByPid(list);
+        });
+
+        //修改当前项目下所有合同段中的元素表基础信息
+        String projectId = "";
+        String parentId = "";
+        List<WbsTreePrivate> wbsTreePrivateList = new ArrayList<>();
+        int number = 0;
+        for (WbsTreePrivateDTO3 wbsTreePrivate : wbsTreePrivates) {
+            WbsTreePrivate wbsTreePrivate1 = baseMapper.selectOne(Wrappers.<WbsTreePrivate>query().lambda().eq(WbsTreePrivate::getPKeyId, wbsTreePrivate.getPKeyId()));
+            wbsTreePrivateList.add(wbsTreePrivate1);
+            if (number == 0) {
+                projectId = wbsTreePrivate1.getProjectId();
+                parentId = String.valueOf(wbsTreePrivate1.getParentId());
+                number = 1;
             }
-            if (StringUtils.isNotEmpty(projectId) && StringUtils.isNotEmpty(parentId) && wbsTreePrivateList.size() > 0) {
-                //获取所有合同段ids
-                List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().eq(ContractInfo::getPId, projectId));
-                if (contractInfos.size() > 0) {
-                    List<Long> contractInfoIds = contractInfos.stream().map(ContractInfo::getId).collect(Collectors.toList());
-                    for (Long contractInfoId : contractInfoIds) {
-                        for (WbsTreePrivate wbsTreePrivate : wbsTreePrivateList) {
-                            //判断当前合同段是否存在该元素表
-                            WbsTreeContract wbsTreeContract = wbsTreeContractMapper.selectOne(Wrappers.<WbsTreeContract>query().lambda()
-                                    .eq(WbsTreeContract::getContractId, contractInfoId)
-                                    .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
-                                    .eq(WbsTreeContract::getId, wbsTreePrivate.getId())
-                                    .eq(WbsTreeContract::getStatus, 1)
-                                    .isNull(WbsTreeContract::getOldId) //不是客户端的复制或新增的节点
-                            );
-                            if (wbsTreeContract != null) {
-                                wbsTreeContractMapper.updateContractTablesInfo(contractInfoId, wbsTreePrivate);
-                            }
+        }
+        if (StringUtils.isNotEmpty(projectId) && StringUtils.isNotEmpty(parentId) && wbsTreePrivateList.size() > 0) {
+            //获取所有合同段ids
+            List<ContractInfo> contractInfos = contractInfoMapper.selectList(Wrappers.<ContractInfo>query().lambda().eq(ContractInfo::getPId, projectId));
+            if (contractInfos.size() > 0) {
+                List<Long> contractInfoIds = contractInfos.stream().map(ContractInfo::getId).collect(Collectors.toList());
+                for (Long contractInfoId : contractInfoIds) {
+                    for (WbsTreePrivate wbsTreePrivate : wbsTreePrivateList) {
+                        //判断当前合同段是否存在该元素表、以及该元素表父级节点(包括新增、复制节点)
+                        List<WbsTreeContract> wbsTreeContract = wbsTreeContractMapper.selectList(Wrappers.<WbsTreeContract>query().lambda()
+                                .eq(WbsTreeContract::getContractId, contractInfoId)
+                                .eq(WbsTreeContract::getProjectId, wbsTreePrivate.getProjectId())
+                                .eq(WbsTreeContract::getStatus, 1)
+                                .eq(WbsTreeContract::getId, wbsTreePrivate.getId())
+                                .or()
+                                .eq(WbsTreeContract::getParentId, wbsTreePrivate.getId())
+                                .or()
+                                .eq(WbsTreeContract::getOldId, wbsTreePrivate.getId())
+                        );
+                        //修改原始、复制、新增节点下的元素表
+                        if (wbsTreeContract.size() > 0) {
+                            wbsTreeContractMapper.updateContractTablesInfo(contractInfoId, wbsTreePrivate);
                         }
                     }
                 }
             }
-
-        } catch (Exception e) {
-            throw new ServiceException("操作失败");
         }
+        /*} catch (Exception e) {
+            throw new ServiceException("操作失败");
+        }*/
         return true;
     }
 
@@ -314,7 +317,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     //修改项目wbs信息
                     //baseMapper.updateBatchByIds(wbsTree, projectId);
                     WbsTreePrivate wbsPrivate = new WbsTreePrivate();
-                    BeanUtil.copyProperties(wbsTree,wbsPrivate);
+                    BeanUtil.copyProperties(wbsTree, wbsPrivate);
                     wbsPrivate.setProjectId(projectId);
                     listPrivate.add(wbsPrivate);
 
@@ -322,7 +325,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         //修改合同段wbs信息
                         //wbsTreeContractMapper.updateBatchByIds(wbsTree, contractInfo.getId());
                         WbsTreeContract wbsContract = new WbsTreeContract();
-                        BeanUtil.copyProperties(wbsTree,wbsContract);
+                        BeanUtil.copyProperties(wbsTree, wbsContract);
                         wbsContract.setContractId(String.valueOf(contractInfo.getId()));
                         wbsContract.setProjectId(projectId);
                         listContract.add(wbsContract);
@@ -333,7 +336,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         try {
             baseMapper.updateBatchWbsPrivate(listPrivate);
             wbsTreeContractMapper.updateBatchWbsContract(listContract);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             //throw new ServiceException("节点基础信息同步修改失败");
         }
@@ -362,7 +365,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     //修改项目wbs信息
                     //baseMapper.updateBatchByIds2(wbsTreePrivate, projectId, wbsId);
                     WbsTreePrivate wbsPrivate = new WbsTreePrivate();
-                    BeanUtil.copyProperties(wbsTreePrivate,wbsPrivate);
+                    BeanUtil.copyProperties(wbsTreePrivate, wbsPrivate);
                     wbsPrivate.setWbsId(wbsId);
                     wbsPrivate.setProjectId(projectId);
                     listPrivate.add(wbsPrivate);
@@ -371,7 +374,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                         //修改合同段wbs信息
                         //wbsTreeContractMapper.updateBatchByIds2(wbsTreePrivate, contractInfo.getId());
                         WbsTreeContract wbsContract = new WbsTreeContract();
-                        BeanUtil.copyProperties(wbsTreePrivate,wbsContract);
+                        BeanUtil.copyProperties(wbsTreePrivate, wbsContract);
                         wbsContract.setContractId(String.valueOf(contractInfo.getId()));
                         wbsContract.setProjectId(projectId);
                         listContract.add(wbsContract);
@@ -382,7 +385,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         try {
             baseMapper.updateBatchWbsPrivate(listPrivate);
             wbsTreeContractMapper.updateBatchWbsContract(listContract);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             //throw new ServiceException("节点基础信息同步修改失败");
         }

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

@@ -33,15 +33,20 @@ import org.springblade.manager.service.IWbsTreeService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.manager.unit.RedisUtil;
 import org.springblade.manager.vo.*;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.support.JdbcUtils;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.sql.DataSource;
 import java.io.File;
 import java.io.IOException;
+import java.sql.*;
 import java.util.*;
+import java.util.concurrent.Executor;
 import java.util.stream.Collectors;
 
 @Service
@@ -391,8 +396,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
     }
 
     @Override
-    public List<WbsNodeTableVO> selectByNodeTableByExcel(String id, String projectid,String liunxId) {
-        return wbsTreeMapper.selectByNodeTableByExcel(id, projectid,liunxId);
+    public List<WbsNodeTableVO> selectByNodeTableByExcel(String id, String projectid, String liunxId) {
+        return wbsTreeMapper.selectByNodeTableByExcel(id, projectid, liunxId);
     }
 
     @Override
@@ -490,12 +495,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     //内页资料
                     if (wbsTreeZi.getDeptCategory() == 6 && !(("中间交工证书").equals(wbsTreeZi.getDeptName()) || ("分项工程质量检验评定表").equals(wbsTreeZi.getDeptName()) || ("分项工程开工报告").equals(wbsTreeZi.getDeptName()))) {
                         wbsTreeZi.setMajorDataType(4);
-                    }else if (wbsTreeZi.getDeptCategory() == 5 || wbsTreeZi.getDeptCategory() == 4 || wbsTreeZi.getDeptCategory() == 3 || wbsTreeZi.getDeptCategory() == 2) {
-                        if (getContains(wbsTreeZi.getDeptName(),"开工报告")) {
+                    } else if (wbsTreeZi.getDeptCategory() == 5 || wbsTreeZi.getDeptCategory() == 4 || wbsTreeZi.getDeptCategory() == 3 || wbsTreeZi.getDeptCategory() == 2) {
+                        if (getContains(wbsTreeZi.getDeptName(), "开工报告")) {
                             wbsTreeZi.setMajorDataType(1);
-                        } else if (getContains(wbsTreeZi.getDeptName(),"质量评定")) {
+                        } else if (getContains(wbsTreeZi.getDeptName(), "质量评定")) {
                             wbsTreeZi.setMajorDataType(2);
-                        } else if (getContains(wbsTreeZi.getDeptName(),"中间交工")) {
+                        } else if (getContains(wbsTreeZi.getDeptName(), "中间交工")) {
                             wbsTreeZi.setMajorDataType(3);
                         }
                     }
@@ -582,20 +587,20 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return wbsTree;
     }
 
-    private boolean getContains(String A,String B){
+    private boolean getContains(String A, String B) {
         boolean result = false;
         char[] arrayA = A.toCharArray();
         char[] arrayB = B.toCharArray();
         int intLen = 0;
-        for(int i = 0;i < arrayB.length;i++){
-            for(int j = 0;j < arrayA.length;j++){
-                if(arrayB[i] == arrayA[j]){
+        for (int i = 0; i < arrayB.length; i++) {
+            for (int j = 0; j < arrayA.length; j++) {
+                if (arrayB[i] == arrayA[j]) {
                     intLen++;
                     break;
                 }
             }
         }
-        if(intLen == arrayB.length)
+        if (intLen == arrayB.length)
             result = true;
         return result;
     }
@@ -899,7 +904,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                                     .eq(WbsTreePrivate::getId, list.getParentId())
                                     .eq(WbsTreePrivate::getWbsId, pawDTO.getPrimaryKeyId())
                                     .eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId())
-                                    .eq(WbsTreePrivate::getStatus,1)
+                                    .eq(WbsTreePrivate::getStatus, 1)
                             );
 
                             if (wbsTreePrivate1 != null) {
@@ -958,7 +963,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                                 }
                             }
                         });
-
                     }
                 }
             }
@@ -1017,7 +1021,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             //2.新增
             if (saveIds.size() > 0) {
                 if (saveIds.size() >= 1000) { //新增1000个以上节点时,防止响应过慢重复提交
-                    //获取Redis的Value
                     String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
                     if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
                         throw new ServiceException("请勿重复提交,请60秒后再次尝试!");
@@ -1082,33 +1085,49 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
                 //新增
                 if (pawDTO.getReferenceType().equals("public")) {
-                    wbsTreePrivateService.saveBatch(insertData, 10000);
+                    //wbsTreePrivateMapper.insertBatchSomeColumn(insertData);
+                    insertBatch(insertData, 100);
+
                     projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
+
                 } else if (pawDTO.getReferenceType().equals("private")) {
-                    wbsTreePrivateService.saveBatch(insertData2, 10000);
+                    //wbsTreePrivateMapper.insertBatchSomeColumn(insertData2);
+                    insertBatch(insertData2, 100);
+
                     projectInfoMapper.updateTemplateIdById(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                 }
 
-                //设置Redis的Key、value
+                //Redis
                 bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
-                //设置过期时间
                 bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
             }
         }
         return true;
     }
 
-    public List<WbsTree> findAllNodeList(String wbsTreeIds) {
-        if (StringUtils.isNotEmpty(wbsTreeIds)) {
-            String[] ids = wbsTreeIds.split(",");
-            List<Long> idList = new ArrayList<>();
-            for (String id : ids) {
-                idList.add(Long.valueOf(id));
+    @Transactional(rollbackFor = Exception.class)
+    public boolean insertBatch(Collection<WbsTreePrivate> entityList, int batchSize) {
+        try {
+            int size = entityList.size();
+            int idxLimit = Math.min(batchSize, size);
+            int i = 1;
+            //保存单批提交的数据集合
+            List<WbsTreePrivate> oneBatchList = new ArrayList<>();
+            for (Iterator<WbsTreePrivate> var1 = entityList.iterator(); var1.hasNext(); ++i) {
+                WbsTreePrivate element = var1.next();
+                oneBatchList.add(element);
+                if (i == idxLimit) {
+                    wbsTreePrivateMapper.insertBatchSomeColumn(oneBatchList);
+                    //每次提交后清空集合数据
+                    oneBatchList.clear();
+                    idxLimit = Math.min(idxLimit + batchSize, size);
+                }
             }
-            return baseMapper.selectBatchIds(idList);
-        } else {
-            return null;
+        } catch (Exception e) {
+            log.error("保存失败", e);
+            return false;
         }
+        return true;
     }
 
     @Async
@@ -1121,132 +1140,6 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return wbsTreePrivateService.updateBatchByIds2(wbsTreePrivates, wbsTreePrivatesAllNow, projectId, primaryKeyId);
     }
 
-    private WbsTreePrivate getWbsTreePrivate1(WbsTree wbsTree, WbsTreeContractDTO pawDTO) {
-        WbsTreePrivate wbsTreePrivate = new WbsTreePrivate();
-        Long snowId = SnowFlakeUtil.getId();
-        wbsTreePrivate.setPKeyId(snowId);
-        wbsTreePrivate.setId(wbsTree.getId());
-        wbsTreePrivate.setWbsId(wbsTree.getWbsId());
-        wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
-        wbsTreePrivate.setProjectId(pawDTO.getProjectId());
-        wbsTreePrivate.setTenantId(wbsTree.getTenantId());
-        wbsTreePrivate.setParentId(wbsTree.getParentId());
-        wbsTreePrivate.setAncestors(wbsTree.getAncestors());
-        wbsTreePrivate.setDeptCategory(wbsTree.getDeptCategory());
-        wbsTreePrivate.setDeptName(wbsTree.getDeptName());
-        wbsTreePrivate.setFullName(wbsTree.getFullName());
-        wbsTreePrivate.setSort(wbsTree.getSort());
-        wbsTreePrivate.setRemark(wbsTree.getRemark());
-        wbsTreePrivate.setType(wbsTree.getType());
-        wbsTreePrivate.setTableType(wbsTree.getTableType());
-        wbsTreePrivate.setStatus(wbsTree.getStatus());
-        wbsTreePrivate.setIsDeleted(wbsTree.getIsDeleted());
-        wbsTreePrivate.setUniqueCode(wbsTree.getUniqueCode());
-        wbsTreePrivate.setPartitionCode(wbsTree.getPartitionCode());
-        wbsTreePrivate.setIsConcrete(wbsTree.getIsConcrete());
-        wbsTreePrivate.setIsExpernode(wbsTree.getIsExpernode());
-        wbsTreePrivate.setTableOwner(wbsTree.getTableOwner());
-        wbsTreePrivate.setMajorDataType(wbsTree.getMajorDataType());
-        wbsTreePrivate.setInitTableName(wbsTree.getInitTableName());
-        wbsTreePrivate.setIsLinkTable(wbsTree.getIsLinkTable());
-        wbsTreePrivate.setIsExistForm(wbsTree.getIsExistForm());
-
-        wbsTreePrivate.setCreateTime(wbsTree.getCreateTime());
-        wbsTreePrivate.setUpdateTime(wbsTree.getUpdateTime());
-        wbsTreePrivate.setUpdateUser(wbsTree.getUpdateUser());
-        wbsTreePrivate.setCreateUser(wbsTree.getCreateUser());
-        wbsTreePrivate.setCreateDept(wbsTree.getCreateDept());
-
-        return wbsTreePrivate;
-    }
-
-    private WbsTreePrivate getWbsTreePrivate2(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
-        WbsTreePrivate wbsTreePrivate = new WbsTreePrivate();
-        Long snowId = SnowFlakeUtil.getId();
-        wbsTreePrivate.setPKeyId(snowId);
-        wbsTreePrivate.setId(wbsTree.getId());
-        wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
-        wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
-        wbsTreePrivate.setProjectId(pawDTO.getProjectId());
-        wbsTreePrivate.setTenantId(wbsTree.getTenantId());
-        wbsTreePrivate.setParentId(wbsTree.getParentId());
-        wbsTreePrivate.setAncestors(wbsTree.getAncestors());
-        wbsTreePrivate.setDeptCategory(wbsTree.getDeptCategory());
-        wbsTreePrivate.setDeptName(wbsTree.getDeptName());
-        wbsTreePrivate.setFullName(wbsTree.getFullName());
-        wbsTreePrivate.setSort(wbsTree.getSort());
-        wbsTreePrivate.setRemark(wbsTree.getRemark());
-        wbsTreePrivate.setType(wbsTree.getType());
-        wbsTreePrivate.setTableType(wbsTree.getTableType());
-        wbsTreePrivate.setStatus(wbsTree.getStatus());
-        wbsTreePrivate.setIsDeleted(wbsTree.getIsDeleted());
-        wbsTreePrivate.setUniqueCode(wbsTree.getUniqueCode());
-        wbsTreePrivate.setPartitionCode(wbsTree.getPartitionCode());
-        wbsTreePrivate.setIsConcrete(wbsTree.getIsConcrete());
-        wbsTreePrivate.setIsExpernode(wbsTree.getIsExpernode());
-        wbsTreePrivate.setTableOwner(wbsTree.getTableOwner());
-        wbsTreePrivate.setMajorDataType(wbsTree.getMajorDataType());
-        wbsTreePrivate.setInitTableName(wbsTree.getInitTableName());
-        wbsTreePrivate.setIsLinkTable(wbsTree.getIsLinkTable());
-        wbsTreePrivate.setIsExistForm(wbsTree.getIsExistForm());
-        wbsTreePrivate.setHtmlUrl(wbsTree.getHtmlUrl());
-
-        wbsTreePrivate.setCreateTime(wbsTree.getCreateTime());
-        wbsTreePrivate.setUpdateTime(wbsTree.getUpdateTime());
-        wbsTreePrivate.setUpdateUser(wbsTree.getUpdateUser());
-        wbsTreePrivate.setCreateUser(wbsTree.getCreateUser());
-        wbsTreePrivate.setCreateDept(wbsTree.getCreateDept());
-        //引用私有wbs,同步清表id
-        wbsTreePrivate.setExcelId(wbsTree.getExcelId());
-
-        return wbsTreePrivate;
-    }
-
-    private WbsTreeContract getWbsTreeContract(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
-        WbsTreeContract wbsTreeContract = new WbsTreeContract();
-        Long snowId = SnowFlakeUtil.getId();
-        wbsTreeContract.setPKeyId(snowId);
-        wbsTreeContract.setId(wbsTree.getId());
-        wbsTreeContract.setWbsId(pawDTO.getWbsId());
-        wbsTreeContract.setWbsType(wbsTree.getType());
-        wbsTreeContract.setProjectId(pawDTO.getProjectId());
-        wbsTreeContract.setContractType(pawDTO.getContractType());
-        wbsTreeContract.setTenantId(wbsTree.getTenantId());
-        wbsTreeContract.setParentId(wbsTree.getParentId());
-        wbsTreeContract.setAncestors(wbsTree.getAncestors());
-        wbsTreeContract.setDeptName(wbsTree.getDeptName());
-        wbsTreeContract.setDeptCategory(wbsTree.getDeptCategory());
-        wbsTreeContract.setFullName(wbsTree.getDeptName());
-        wbsTreeContract.setSort(wbsTree.getSort());
-        wbsTreeContract.setRemark(wbsTree.getRemark());
-        wbsTreeContract.setType(wbsTree.getType());
-        wbsTreeContract.setTableType(wbsTree.getTableType());
-        wbsTreeContract.setStatus(wbsTree.getStatus());
-        wbsTreeContract.setIsDeleted(wbsTree.getIsDeleted());
-        wbsTreeContract.setUniqueCode(wbsTree.getUniqueCode());
-        wbsTreeContract.setPartitionCode(wbsTree.getPartitionCode());
-        wbsTreeContract.setIsConcrete(wbsTree.getIsConcrete());
-        wbsTreeContract.setIsExpernode(wbsTree.getIsExpernode());
-        wbsTreeContract.setTableOwner(wbsTree.getTableOwner());
-        wbsTreeContract.setMajorDataType(wbsTree.getMajorDataType());
-        wbsTreeContract.setInitTableName(wbsTree.getInitTableName());
-        wbsTreeContract.setIsLinkTable(wbsTree.getIsLinkTable());
-        wbsTreeContract.setExcelId(wbsTree.getExcelId());
-        wbsTreeContract.setHtmlUrl(wbsTree.getHtmlUrl());
-        wbsTreeContract.setIsBussShow(1);
-
-        wbsTreeContract.setCreateTime(wbsTree.getCreateTime());
-        wbsTreeContract.setUpdateTime(wbsTree.getUpdateTime());
-        wbsTreeContract.setUpdateUser(wbsTree.getUpdateUser());
-        wbsTreeContract.setCreateUser(wbsTree.getCreateUser());
-        wbsTreeContract.setCreateDept(wbsTree.getCreateDept());
-
-        if (wbsTree.getType() == 2) {
-            wbsTreeContract.setIsTypePrivatePid(wbsTree.getPKeyId());
-        }
-        return wbsTreeContract;
-    }
-
     @Override
     public WbsTreeAllListVO findWbsTreeList(Integer type) {
         WbsTreeAllListVO wbsTreeAllListVO = new WbsTreeAllListVO();
@@ -1327,6 +1220,23 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
     }
 
+    public int updateByCondition(Long id, String wbsName, Integer status) {
+        return baseMapper.updateByCondition(id, wbsName, status);
+    }
+
+    public List<WbsTree> findAllNodeList(String wbsTreeIds) {
+        if (StringUtils.isNotEmpty(wbsTreeIds)) {
+            String[] ids = wbsTreeIds.split(",");
+            List<Long> idList = new ArrayList<>();
+            for (String id : ids) {
+                idList.add(Long.valueOf(id));
+            }
+            return baseMapper.selectBatchIds(idList);
+        } else {
+            return null;
+        }
+    }
+
     public static String getFirstSpell(String chinese) {
         StringBuilder stringBuilder = new StringBuilder();
         char[] arr = chinese.toCharArray();
@@ -1391,7 +1301,130 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         return rs;
     }
 
-    public int updateByCondition(Long id, String wbsName, Integer status) {
-        return baseMapper.updateByCondition(id, wbsName, status);
+    private WbsTreePrivate getWbsTreePrivate1(WbsTree wbsTree, WbsTreeContractDTO pawDTO) {
+        WbsTreePrivate wbsTreePrivate = new WbsTreePrivate();
+        Long snowId = SnowFlakeUtil.getId();
+        wbsTreePrivate.setPKeyId(snowId);
+        wbsTreePrivate.setId(wbsTree.getId());
+        wbsTreePrivate.setWbsId(wbsTree.getWbsId());
+        wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
+        wbsTreePrivate.setProjectId(pawDTO.getProjectId());
+        wbsTreePrivate.setTenantId(wbsTree.getTenantId());
+        wbsTreePrivate.setParentId(wbsTree.getParentId());
+        wbsTreePrivate.setAncestors(wbsTree.getAncestors());
+        wbsTreePrivate.setDeptCategory(wbsTree.getDeptCategory());
+        wbsTreePrivate.setDeptName(wbsTree.getDeptName());
+        wbsTreePrivate.setFullName(wbsTree.getFullName());
+        wbsTreePrivate.setSort(wbsTree.getSort());
+        wbsTreePrivate.setRemark(wbsTree.getRemark());
+        wbsTreePrivate.setType(wbsTree.getType());
+        wbsTreePrivate.setTableType(wbsTree.getTableType());
+        wbsTreePrivate.setStatus(wbsTree.getStatus());
+        wbsTreePrivate.setIsDeleted(wbsTree.getIsDeleted());
+        wbsTreePrivate.setUniqueCode(wbsTree.getUniqueCode());
+        wbsTreePrivate.setPartitionCode(wbsTree.getPartitionCode());
+        wbsTreePrivate.setIsConcrete(wbsTree.getIsConcrete());
+        wbsTreePrivate.setIsExpernode(wbsTree.getIsExpernode());
+        wbsTreePrivate.setTableOwner(wbsTree.getTableOwner());
+        wbsTreePrivate.setMajorDataType(wbsTree.getMajorDataType());
+        wbsTreePrivate.setInitTableName(wbsTree.getInitTableName());
+        wbsTreePrivate.setIsLinkTable(wbsTree.getIsLinkTable());
+        wbsTreePrivate.setIsExistForm(wbsTree.getIsExistForm());
+
+        wbsTreePrivate.setCreateTime(wbsTree.getCreateTime());
+        wbsTreePrivate.setUpdateTime(wbsTree.getUpdateTime());
+        wbsTreePrivate.setUpdateUser(wbsTree.getUpdateUser());
+        wbsTreePrivate.setCreateUser(wbsTree.getCreateUser());
+        wbsTreePrivate.setCreateDept(wbsTree.getCreateDept());
+
+        return wbsTreePrivate;
     }
+
+    private WbsTreePrivate getWbsTreePrivate2(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
+        WbsTreePrivate wbsTreePrivate = new WbsTreePrivate();
+        Long snowId = SnowFlakeUtil.getId();
+        wbsTreePrivate.setPKeyId(snowId);
+        wbsTreePrivate.setId(wbsTree.getId());
+        wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
+        wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));
+        wbsTreePrivate.setProjectId(pawDTO.getProjectId());
+        wbsTreePrivate.setTenantId(wbsTree.getTenantId());
+        wbsTreePrivate.setParentId(wbsTree.getParentId());
+        wbsTreePrivate.setAncestors(wbsTree.getAncestors());
+        wbsTreePrivate.setDeptCategory(wbsTree.getDeptCategory());
+        wbsTreePrivate.setDeptName(wbsTree.getDeptName());
+        wbsTreePrivate.setFullName(wbsTree.getFullName());
+        wbsTreePrivate.setSort(wbsTree.getSort());
+        wbsTreePrivate.setRemark(wbsTree.getRemark());
+        wbsTreePrivate.setType(wbsTree.getType());
+        wbsTreePrivate.setTableType(wbsTree.getTableType());
+        wbsTreePrivate.setStatus(wbsTree.getStatus());
+        wbsTreePrivate.setIsDeleted(wbsTree.getIsDeleted());
+        wbsTreePrivate.setUniqueCode(wbsTree.getUniqueCode());
+        wbsTreePrivate.setPartitionCode(wbsTree.getPartitionCode());
+        wbsTreePrivate.setIsConcrete(wbsTree.getIsConcrete());
+        wbsTreePrivate.setIsExpernode(wbsTree.getIsExpernode());
+        wbsTreePrivate.setTableOwner(wbsTree.getTableOwner());
+        wbsTreePrivate.setMajorDataType(wbsTree.getMajorDataType());
+        wbsTreePrivate.setInitTableName(wbsTree.getInitTableName());
+        wbsTreePrivate.setIsLinkTable(wbsTree.getIsLinkTable());
+        wbsTreePrivate.setIsExistForm(wbsTree.getIsExistForm());
+        wbsTreePrivate.setHtmlUrl(wbsTree.getHtmlUrl());
+
+        wbsTreePrivate.setCreateTime(wbsTree.getCreateTime());
+        wbsTreePrivate.setUpdateTime(wbsTree.getUpdateTime());
+        wbsTreePrivate.setUpdateUser(wbsTree.getUpdateUser());
+        wbsTreePrivate.setCreateUser(wbsTree.getCreateUser());
+        wbsTreePrivate.setCreateDept(wbsTree.getCreateDept());
+        //引用私有wbs,同步清表id
+        wbsTreePrivate.setExcelId(wbsTree.getExcelId());
+
+        return wbsTreePrivate;
+    }
+
+    private WbsTreeContract getWbsTreeContract(WbsTreePrivate wbsTree, WbsTreeContractDTO pawDTO) {
+        WbsTreeContract wbsTreeContract = new WbsTreeContract();
+        Long snowId = SnowFlakeUtil.getId();
+        wbsTreeContract.setPKeyId(snowId);
+        wbsTreeContract.setId(wbsTree.getId());
+        wbsTreeContract.setWbsId(pawDTO.getWbsId());
+        wbsTreeContract.setWbsType(wbsTree.getType());
+        wbsTreeContract.setProjectId(pawDTO.getProjectId());
+        wbsTreeContract.setContractType(pawDTO.getContractType());
+        wbsTreeContract.setTenantId(wbsTree.getTenantId());
+        wbsTreeContract.setParentId(wbsTree.getParentId());
+        wbsTreeContract.setAncestors(wbsTree.getAncestors());
+        wbsTreeContract.setDeptName(wbsTree.getDeptName());
+        wbsTreeContract.setDeptCategory(wbsTree.getDeptCategory());
+        wbsTreeContract.setFullName(wbsTree.getDeptName());
+        wbsTreeContract.setSort(wbsTree.getSort());
+        wbsTreeContract.setRemark(wbsTree.getRemark());
+        wbsTreeContract.setType(wbsTree.getType());
+        wbsTreeContract.setTableType(wbsTree.getTableType());
+        wbsTreeContract.setStatus(wbsTree.getStatus());
+        wbsTreeContract.setIsDeleted(wbsTree.getIsDeleted());
+        wbsTreeContract.setUniqueCode(wbsTree.getUniqueCode());
+        wbsTreeContract.setPartitionCode(wbsTree.getPartitionCode());
+        wbsTreeContract.setIsConcrete(wbsTree.getIsConcrete());
+        wbsTreeContract.setIsExpernode(wbsTree.getIsExpernode());
+        wbsTreeContract.setTableOwner(wbsTree.getTableOwner());
+        wbsTreeContract.setMajorDataType(wbsTree.getMajorDataType());
+        wbsTreeContract.setInitTableName(wbsTree.getInitTableName());
+        wbsTreeContract.setIsLinkTable(wbsTree.getIsLinkTable());
+        wbsTreeContract.setExcelId(wbsTree.getExcelId());
+        wbsTreeContract.setHtmlUrl(wbsTree.getHtmlUrl());
+        wbsTreeContract.setIsBussShow(1);
+
+        wbsTreeContract.setCreateTime(wbsTree.getCreateTime());
+        wbsTreeContract.setUpdateTime(wbsTree.getUpdateTime());
+        wbsTreeContract.setUpdateUser(wbsTree.getUpdateUser());
+        wbsTreeContract.setCreateUser(wbsTree.getCreateUser());
+        wbsTreeContract.setCreateDept(wbsTree.getCreateDept());
+
+        if (wbsTree.getType() == 2) {
+            wbsTreeContract.setIsTypePrivatePid(wbsTree.getPKeyId());
+        }
+        return wbsTreeContract;
+    }
+
 }

+ 0 - 6
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -287,12 +287,6 @@ public class UserController {
     @ApiOperationSupport(order = 13)
     @ApiOperation(value = "导出全部用户", notes = "传入token")
     public void exportUser(@ApiIgnore @RequestParam Map<String, Object> user, BladeUser bladeUser, HttpServletResponse response) {
-        /*QueryWrapper<User> queryWrapper = Condition.getQueryWrapper(user, User.class);
-        if (!AuthUtil.isAdministrator()) {
-            queryWrapper.lambda().eq(User::getTenantId, bladeUser.getTenantId());
-        }
-        queryWrapper.lambda().eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED);
-        List<UserExcel> list = userService.exportUser(queryWrapper);*/
         List<UserVO> list = userService.selectUserListByCondition();
         List<UserExcel2> list1 = Objects.requireNonNull(BeanUtil.copy(list, UserExcel2.class));
         ExcelUtil.export(response, "用户数据" + DateUtil.time(), "用户数据表", list1, UserExcel2.class);

+ 2 - 3
blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel.java

@@ -60,11 +60,11 @@ public class UserExcel implements Serializable {
 
     @ColumnWidth(15)
     @ExcelIgnore
-    @ExcelProperty("部门名称")
+    @ExcelProperty("岗位名称")
     private String postName;
 
     @ColumnWidth(15)
-    @ExcelProperty("部门名称")
+    @ExcelProperty("机构/部门名称(格式:总公司/子公司)")
     private String deptName;
 
     @ExcelIgnore
@@ -91,5 +91,4 @@ public class UserExcel implements Serializable {
     @ExcelProperty("用户平台名称")
     private String userTypeName;
 
-
 }

+ 2 - 2
blade-service/blade-user/src/main/java/org/springblade/system/user/excel/UserExcel2.java

@@ -58,11 +58,11 @@ public class UserExcel2 implements Serializable {
 
     @ColumnWidth(15)
     @ExcelIgnore
-    @ExcelProperty("部门名称")
+    @ExcelProperty("岗位名称")
     private String postName;
 
     @ColumnWidth(15)
-    @ExcelProperty("部门名称")
+    @ExcelProperty("机构/部门名称(格式:总公司/子公司)")
     private String deptName;
 
     @ExcelIgnore

+ 41 - 15
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -31,15 +31,27 @@
         <result column="company_name" property="companyName"/>
     </resultMap>
     <update id="updateRoleIdById">
-        UPDATE blade_user SET role_id = CONCAT(role_id,',',#{roleId1}) WHERE id = #{id} AND status = 1 AND is_deleted=0
+        UPDATE blade_user
+        SET role_id = CONCAT(role_id, ',', #{roleId1})
+        WHERE id = #{id}
+          AND status = 1
+          AND is_deleted = 0
     </update>
 
     <update id="updateRoleIdByIdTwo">
-        UPDATE blade_user SET role_id = #{roleId1} WHERE id = #{id} AND status = 1 AND is_deleted=0
+        UPDATE blade_user
+        SET role_id = #{roleId1}
+        WHERE id = #{id}
+          AND status = 1
+          AND is_deleted = 0
     </update>
 
     <update id="updateRoleId">
-        UPDATE blade_user SET role_id = #{roleId1} WHERE id = #{id} AND status = 1 AND is_deleted=0
+        UPDATE blade_user
+        SET role_id = #{roleId1}
+        WHERE id = #{id}
+          AND status = 1
+          AND is_deleted = 0
     </update>
 
     <select id="selectUserPage" resultMap="userResultMap">
@@ -76,25 +88,39 @@
     </select>
 
     <select id="getUser" resultMap="userResultMap">
-        SELECT
-            *
-        FROM
-            blade_user
-        WHERE
-            tenant_id = #{param1} and account = #{param2} and is_deleted = 0
+        SELECT *
+        FROM blade_user
+        WHERE tenant_id = #{param1}
+          and account = #{param2}
+          and is_deleted = 0
     </select>
 
     <select id="exportUser" resultType="org.springblade.system.user.excel.UserExcel">
-        SELECT id, tenant_id, user_type, account, name, real_name, email, phone, birthday, role_id, dept_id, post_id FROM blade_user ${ew.customSqlSegment}
+        SELECT id,
+               tenant_id,
+               user_type,
+               account,
+               name,
+               real_name,
+               email,
+               phone,
+               birthday,
+               role_id,
+               dept_id,
+               post_id
+        FROM blade_user ${ew.customSqlSegment}
     </select>
 
     <select id="selectUserListByCondition" resultType="org.springblade.system.user.vo.UserVO">
-        SELECT account, real_name, id_number, phone,
-        (SELECT dept_name FROM blade_dept d WHERE d.id = b.dept_id) AS "deptName",
-        (SELECT role_name FROM blade_role r WHERE r.id = b.role_id) AS "roleName"
+        SELECT account,
+               real_name,
+               id_number,
+               phone,
+               CONCAT((SELECT dept_name FROM blade_dept a WHERE a.id = d.parent_id),"/",d.dept_name) AS "deptName",
+               (SELECT role_name FROM blade_role r WHERE r.id = b.role_id)                             AS "roleName"
         FROM blade_user b
-        WHERE
-        account not in("admin","administrator")
+                 INNER JOIN blade_dept d ON b.dept_id = d.id
+        WHERE b.account NOT IN ("admin", "administrator")
     </select>
 
 </mapper>

+ 15 - 8
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -45,6 +45,7 @@ import org.springblade.manager.feign.SaveUserInfoByProjectClient;
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.cache.SysCache;
+import org.springblade.system.entity.Dept;
 import org.springblade.system.entity.Tenant;
 import org.springblade.system.enums.DictEnum;
 import org.springblade.system.feign.ISysClient;
@@ -425,12 +426,18 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             User user = Objects.requireNonNull(BeanUtil.copy(userExcel, User.class));
             // 设置用户平台
             user.setUserType(Func.toInt(DictCache.getKey(DictEnum.USER_TYPE, userExcel.getUserTypeName()), 1));
-            // 设置部门ID
-            user.setDeptId(Func.toStrWithEmpty(SysCache.getDeptIds(AuthUtil.getTenantId(), userExcel.getDeptName()), StringPool.EMPTY));
-            // 设置岗位ID
-            //user.setPostId(Func.toStrWithEmpty(SysCache.getPostIds(userExcel.getTenantId(), userExcel.getPostName()), StringPool.EMPTY));
-            // 设置角色ID
-            //user.setRoleId(Func.toStrWithEmpty(SysCache.getRoleIds(AuthUtil.getTenantId(), userExcel.getRoleName()), StringPool.EMPTY));
+
+            //获取上级部门id
+            String superiorDeptId = Func.toStrWithEmpty(SysCache.getDeptIds(AuthUtil.getTenantId(), userExcel.getDeptName().split("/")[0]), StringPool.EMPTY);
+            //根据上级部门id获取所有下级部门信息
+            List<Dept> deptChildIds = SysCache.getDeptChild(Long.valueOf(superiorDeptId));
+            String childName = userExcel.getDeptName().split("/")[1];
+            for (Dept deptChild : deptChildIds) {
+                if (childName.equals(deptChild.getDeptName())) {
+                    // 设置部门ID
+                    user.setDeptId(Func.toStrWithEmpty(deptChild.getId(), StringPool.EMPTY));
+                }
+            }
             // 设置租户ID
             if (!AuthUtil.isAdministrator() || StringUtil.isBlank(user.getTenantId())) {
                 user.setTenantId(AuthUtil.getTenantId());
@@ -438,8 +445,8 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
             // 覆盖数据
             if (isCovered) {
                 // 查询用户是否存在
-                //User oldUser = UserCache.getUser(AuthUtil.getTenantId(), userExcel.getAccount());
-                User oldUser = baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getAccount, userExcel.getAccount()).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
+                User oldUser = UserCache.getUser(AuthUtil.getTenantId(), userExcel.getAccount());
+                //User oldUser = baseMapper.selectOne(Wrappers.<User>query().lambda().eq(User::getAccount, userExcel.getAccount()).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
                 if (oldUser != null && oldUser.getId() != null) {
                     user.setId(oldUser.getId());
                     this.updateUser(user);