Parcourir la source

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

yangyj il y a 1 an
Parent
commit
b11e405136

+ 7 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsFormElement.java

@@ -64,4 +64,11 @@ public class WbsFormElement extends BaseEntity {
     @ApiModelProperty(value = "备注")
     @JsonProperty(value = "remark")
     private String remark;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "动态字典,征拆统计")
+    @JsonProperty(value = "dynamicDict")
+    private Integer dynamicDict;
 }

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

@@ -1499,7 +1499,7 @@ public class InformationWriteQueryController extends BladeController {
                         String keys = StringUtils.join(filteredList, ",");
 
                         /*重置*/
-                        //Map<String, String> eMap = reviseValue(nodeOld, null, ekvMap);
+                        Map<String, String> eMap = reviseValue(nodeOld, null, ekvMap);
 
                         //构造入参(获取列名、列值)
                         String dataSql = "SELECT " + keys + " FROM " + tableName + " WHERE p_key_id= " + nodeOld.getPKeyId() + " LIMIT 1;";
@@ -1527,8 +1527,8 @@ public class InformationWriteQueryController extends BladeController {
                             LinkedHashMap<String, Object> resultMap = resultList.get(0);
                             for (Map.Entry<String, Object> entry : resultMap.entrySet()) {
                                 keySet.add(entry.getKey());
-                                /*Object value = reviseValue(eMap, entry.getKey(), entry.getValue());*/
-                                Object value = entry.getValue();
+                                Object value = reviseValue(eMap, entry.getKey(), entry.getValue());
+                                //Object value = entry.getValue();
                                 if (value != null) {
                                     if (value.toString().contains("\n")) {
                                         //如果值中包含换行符,则将换行符替换

+ 38 - 9
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeContractController.java

@@ -202,25 +202,54 @@ public class WbsTreeContractController extends BladeController {
             @ApiImplicitParam(name = "tableOwner", value = "所属方节点权限,施工=1,监理=2,区分节点的数量、颜色")
     })
     public R<List<WbsTreeContractLazyVO>> lazyQueryContractWbsTree(@RequestParam String primaryKeyId, @RequestParam String parentId, @RequestParam String contractId, @RequestParam String contractIdRelation, @RequestParam String classifyType, @RequestParam String tableOwner) {
+        //这里是对应的监理合同段下,加载树时primaryKeyId=parentId;与前端对接时没沟通好入参,就不单独处理了,直接重新映射赋值一下
         if (StringUtils.isNotEmpty(primaryKeyId)) {
             parentId = primaryKeyId;
         }
+
+        //结果集
         List<WbsTreeContractLazyVO> vos;
+
+        //构造Redis缓存Key
         String dataInfoId = "";
         if (("1").equals(classifyType)) {
             dataInfoId = contractId + "_" + parentId + "_" + classifyType + "_" + tableOwner;
-        }/* else {
-            //监理合同段先不加缓存,存在问题
-            dataInfoId = contractIdRelation + "_" + parentId + "_" + classifyType + "_" + tableOwner;
-        }*/
-        Object data = redisTemplate.opsForValue().get("blade-manager::contract:wbstree:" + dataInfoId);
+        } else if (("2").equals(classifyType)) {
+            //监理合同段下,classifyType=1,直接查询对应的施工树缓存
+            dataInfoId = contractIdRelation + "_" + parentId + "_" + "1" + "_" + tableOwner;
+        }
+
+        //获取Redis缓存信息
+        Object data = null;
+        if (ObjectUtil.isNotEmpty(dataInfoId)) {
+            if (("2").equals(classifyType) && ObjectUtil.isNotEmpty(contractIdRelation)) {
+                //监理根据contractIdRelation关联合同段id来判断获取缓存
+                data = redisTemplate.opsForValue().get("blade-manager::contract:wbstree:" + dataInfoId);
+            } else if (("1").equals(classifyType)) {
+                //施工直接获取缓存
+                data = redisTemplate.opsForValue().get("blade-manager::contract:wbstree:" + dataInfoId);
+            }
+        }
+
         if (data != null) {
+            //返回缓存
             vos = JSON.parseArray(data.toString(), WbsTreeContractLazyVO.class);
+
         } else {
-        vos = iWbsTreeContractService.lazyQueryContractWbsTree(parentId, contractId, contractIdRelation, tableOwner);
-            if (vos != null) {
-                JSONArray array = JSONArray.parseArray(JSON.toJSONString(vos));
-                redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + dataInfoId, JSON.toJSON(array).toString());
+            //响应结果集
+            vos = iWbsTreeContractService.lazyQueryContractWbsTree(parentId, contractId, contractIdRelation, tableOwner);
+
+            //存储缓存
+            if (vos != null && ObjectUtil.isNotEmpty(dataInfoId)) {
+                //监理根据contractIdRelation关联合同段id来判断存储缓存
+                if (("2").equals(classifyType) && ObjectUtil.isNotEmpty(contractIdRelation)) {
+                    JSONArray array = JSONArray.parseArray(JSON.toJSONString(vos));
+                    redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + dataInfoId, JSON.toJSON(array).toString());
+                } else if (("1").equals(classifyType)) {
+                    //施工直接存储缓存
+                    JSONArray array = JSONArray.parseArray(JSON.toJSONString(vos));
+                    redisTemplate.opsForValue().set("blade-manager::contract:wbstree:" + dataInfoId, JSON.toJSON(array).toString());
+                }
             }
         }
         return R.data(vos);

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

@@ -593,14 +593,55 @@
         <foreach collection="listContract" item="item" index="index" separator=";">
             UPDATE m_wbs_tree_contract
             <set>
-                node_name = #{item.nodeName},
-                node_type = #{item.nodeType},
-                major_data_type = #{item.majorDataType},
-                table_type = #{item.tableType},
-                table_owner = #{item.tableOwner},
-                html_url = #{item.htmlUrl},
-                excel_id = #{item.excelId},
-                sort = #{item.sort}
+                node_name =
+                    CASE
+                        WHEN node_name LIKE '%_PL_%' OR node_name LIKE '%__%'
+                        THEN CONCAT(
+                            <if test="item.nodeName != null and item.nodeName != ''">
+                                #{item.nodeName}
+                            </if>,
+                            SUBSTRING(node_name FROM INSTR(node_name, '__'))
+                        )
+                    ELSE
+                        <if test="item.nodeName != null and item.nodeName != ''">
+                            #{item.nodeName}
+                        </if>
+                    END,
+                full_name =
+                    CASE
+                        WHEN full_name LIKE '%_PL_%' OR full_name LIKE '%__%'
+                        THEN CONCAT(
+                        <if test="item.nodeName != null">
+                            #{item.nodeName}
+                        </if>,
+                        SUBSTRING(full_name FROM INSTR(full_name, '__'))
+                        )
+                    ELSE
+                        <if test="item.nodeName != null">
+                            #{item.nodeName}
+                        </if>
+                    END,
+                <if test="item.nodeType != null and item.nodeType != ''">
+                    node_type = #{item.nodeType},
+                </if>
+                <if test="item.majorDataType != null and item.majorDataType != ''">
+                    major_data_type = #{item.majorDataType},
+                </if>
+                <if test="item.tableType != null and item.tableType != ''">
+                    table_type = #{item.tableType},
+                </if>
+                <if test="item.tableOwner != null and item.tableOwner != ''">
+                    table_owner = #{item.tableOwner},
+                </if>
+                <if test="item.htmlUrl != null and item.htmlUrl != ''">
+                    html_url = #{item.htmlUrl},
+                </if>
+                <if test="item.excelId != null and item.excelId != ''">
+                    excel_id = #{item.excelId},
+                </if>
+                <if test="item.sort != null and item.sort != ''">
+                    sort = #{item.sort}
+                </if>
             </set>
             WHERE id = #{item.id}
             AND project_id = #{item.projectId}

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

@@ -94,6 +94,7 @@
         <result column="nodeId" property="nodeId"/>
         <result column="globalFormula" property="globalFormula"/>
         <result column="isBussTime" property="isBussTime"/>
+        <result column="dynamic_dict" property="dynamicDict"/>
     </resultMap>
 
     <insert id="addFormElement" parameterType="org.springblade.manager.dto.WbsFormElementDTO">
@@ -406,6 +407,7 @@
         select f_id,
                e_key,
                a.id,
+               a.dynamic_dict,
                e_name,
                e_type,
                e_length,
@@ -423,6 +425,7 @@
         select f_id,
                e_key,
                a.id,
+               a.dynamic_dict,
                e_name,
                e_type,
                e_length,

+ 16 - 11
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -837,9 +837,10 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             if (contractInfos.size() > 0) {
                 throw new ServiceException("合同段名称已存在当前项目下,请重新输入");
             }
+
             ContractInfo contractInfo1 = baseMapper.selectById(contractInfo.getId());
             try {
-                int integer = archiveTreeContractMapper.updateByNodeName(contractInfo1.getContractName(), contractInfo.getContractName(), contractInfo.getId());
+                archiveTreeContractMapper.updateByNodeName(contractInfo1.getContractName(), contractInfo.getContractName(), contractInfo.getId());
             } catch (Exception e) {
                 e.printStackTrace();
             }
@@ -847,23 +848,27 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
             //监理、总监办编辑
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
-                //获取当前项目所有施工合同段信息
-                List<Long> contractInfosSGAll = baseMapper.selectList(Wrappers.<ContractInfo>lambdaQuery().eq(ContractInfo::getPId, contractInfo.getPId()).eq(ContractInfo::getContractType, 1).eq(ContractInfo::getStatus, 1)).stream().map(ContractInfo::getId).collect(Collectors.toList());
+                //获取当前项目所有施工合同段ids
+                List<Long> contractInfosSGAll = baseMapper.selectList(Wrappers.<ContractInfo>lambdaQuery()
+                        .eq(ContractInfo::getPId, contractInfo.getPId())
+                        .eq(ContractInfo::getContractType, 1).eq(ContractInfo::getStatus, 1))
+                        .stream().map(ContractInfo::getId).collect(Collectors.toList());
+
+                //更新当下项目所有施工合同段Redis树缓存
+                for (Long id : contractInfosSGAll) {
+                    informationQueryClient.delAsyncWbsTree(id + "");
+                }
+
+                //更新当前监理合同段Redis树缓存
+                informationQueryClient.delAsyncWbsTree(contractInfo.getId() + "");
 
+                //删除记录信息
                 List<String> updateId_SG = contractInfo.getIdList().stream().map(WbsTreeContractVO3::getContractId).collect(Collectors.toList());
-                //删除新增记录信息
                 baseMapper.deleteContractRelationJLYZ(contractInfo.getId());
                 for (String id : updateId_SG) {
                     baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), id);
                 }
 
-                //更新redis树缓存
-                for (Long id : contractInfosSGAll) {
-                    informationQueryClient.delAsyncWbsTree(id + "");
-                }
-                //当前合同段树缓存
-                informationQueryClient.delAsyncWbsTree(contractInfo.getId() + "");
-
                 //当前关联的施工合同段ids
                 String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
                 List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());

+ 11 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -35,10 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -270,6 +267,16 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         if (StringUtils.isEmpty(initTableName)) {
             throw new ServiceException("未获取到initTableName对应实体表名称,操作失败");
         }
+        //校验,不能在同一个表单中,为多个字段配置相同的统计标识
+        Map<Integer, List<WbsFormElement>> collect = wbsFormElementList.stream()
+                .filter(l->Objects.nonNull(l.getDynamicDict()))
+                .filter(l-> l.getDynamicDict() != 0)
+                .collect(Collectors.groupingBy(WbsFormElement::getDynamicDict));
+        for (Integer integer : collect.keySet()) {
+            if (collect.get(integer).size() >= 2){
+                throw new ServiceException("不能在一张表中,为多个字段配置相同的统计标识,请重新配置");
+            }
+        }
 
         //修改元素基础信息
         wbsFormElementList.forEach(obj -> obj.setStatus(1));

+ 9 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -335,9 +335,9 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
 
             //将wbsTreePrivateNew转为对应Map
             Map<Long, String> wbsTreePrivateNameMap = wbsTreePrivateNew.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getNodeName));
-            Map<Long, Integer> wbsTreePrivateTabTypeMap = wbsTreePrivateNew.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getTableType));
-            Map<Long, String> wbsTreePrivateTabOwnerMap = wbsTreePrivateNew.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getTableOwner));
-            Map<Long, String> wbsTreePrivateFillRateMap = wbsTreePrivateNew.stream().collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getFillRate));
+            Map<Long, Integer> wbsTreePrivateTabTypeMap = wbsTreePrivateNew.stream().filter(f -> ObjectUtil.isNotEmpty(f.getTableType())).collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getTableType));
+            Map<Long, String> wbsTreePrivateTabOwnerMap = wbsTreePrivateNew.stream().filter(f -> ObjectUtil.isNotEmpty(f.getTableOwner())).collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getTableOwner));
+            Map<Long, String> wbsTreePrivateFillRateMap = wbsTreePrivateNew.stream().filter(f -> ObjectUtil.isNotEmpty(f.getFillRate())).collect(Collectors.toMap(WbsTreePrivate::getPKeyId, WbsTreePrivate::getFillRate));
 
             //获取项目下所有合同段ids
             String projectId = wbsTreePrivateNew.stream().map(WbsTreePrivate::getProjectId).findAny().orElse(null);
@@ -347,9 +347,9 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
             for (WbsTreePrivateDTO3 wbsTreePrivate : wbsTreePrivates) {
                 //数据变动才修改
                 if (!wbsTreePrivateNameMap.get(wbsTreePrivate.getPKeyId()).equals(wbsTreePrivate.getNodeName())
-                        || !wbsTreePrivateTabTypeMap.get(wbsTreePrivate.getPKeyId()).equals(wbsTreePrivate.getTableType())
-                        || !wbsTreePrivateTabOwnerMap.get(wbsTreePrivate.getPKeyId()).equals(wbsTreePrivate.getTableOwner())
-                        || !wbsTreePrivateFillRateMap.get(wbsTreePrivate.getPKeyId()).equals(wbsTreePrivate.getFillRate())
+                        || (ObjectUtil.isNotEmpty(wbsTreePrivate.getTableType()) && !wbsTreePrivate.getTableType().equals(wbsTreePrivateTabTypeMap.getOrDefault(wbsTreePrivate.getPKeyId(), -99)))
+                        || (ObjectUtil.isNotEmpty(wbsTreePrivate.getTableOwner()) && !wbsTreePrivate.getTableOwner().equals(wbsTreePrivateTabOwnerMap.getOrDefault(wbsTreePrivate.getPKeyId(), "")))
+                        || (ObjectUtil.isNotEmpty(wbsTreePrivate.getFillRate()) && !wbsTreePrivate.getFillRate().equals(wbsTreePrivateFillRateMap.getOrDefault(wbsTreePrivate.getPKeyId(), "")))
                 ) {
                     WbsTreePrivate wbsTreePrivateParam = BeanUtil.copyProperties(wbsTreePrivate, WbsTreePrivate.class);
                     if (wbsTreePrivateParam != null) {
@@ -383,7 +383,8 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                 }
             }
         } catch (Exception e) {
-            throw new ServiceException("修改同步到合同段时异常" + e.getMessage());
+            e.printStackTrace();
+            throw new ServiceException("修改同步到合同段时异常,原因:" + e.getMessage());
         }
         return true;
     }
@@ -564,6 +565,7 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
                     WbsTreeContract obj2 = copyAddNodesNow.stream().filter(f -> f.getContractId().equals(obj1.getContractId()) && f.getProjectId().equals(obj1.getProjectId())).findAny().orElse(null);
                     if (obj2 != null) {
                         obj2.setNodeName(obj1.getNodeName());
+                        obj2.setFullName(obj1.getNodeName());
                         obj2.setNodeType(obj1.getNodeType());
                         obj2.setMajorDataType(obj1.getMajorDataType());
                         obj2.setTableType(obj1.getTableType());

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

@@ -591,7 +591,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         List<Long> ids = list.stream().map(WbsTreePrivate::getId).collect(Collectors.toList());
         if (ids.size() > 0) {
             List<WbsTreePrivate> query = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery()
-                    .select(WbsTreePrivate::getWbsId, WbsTreePrivate::getPKeyId, WbsTreePrivate::getId, WbsTreePrivate::getType, WbsTreePrivate::getNodeName,
+                    .select(WbsTreePrivate::getWbsId, WbsTreePrivate::getPKeyId, WbsTreePrivate::getId, WbsTreePrivate::getType,
+                            WbsTreePrivate::getNodeName, WbsTreePrivate::getFullName,
                             WbsTreePrivate::getNodeType, WbsTreePrivate::getMajorDataType, WbsTreePrivate::getTableType, WbsTreePrivate::getTableOwner,
                             WbsTreePrivate::getImportMatchingInfo, WbsTreePrivate::getMixRatioTestIds, WbsTreePrivate::getInitTableId,
                             WbsTreePrivate::getInitTableName, WbsTreePrivate::getSort, WbsTreePrivate::getHtmlUrl, WbsTreePrivate::getExcelId)
@@ -953,7 +954,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     List<WbsTreePrivate> insertData1 = new ArrayList<>();
                     List<WbsTreePrivate> insertData2 = new ArrayList<>();
                     //映射新老pKeyId,用于保存表单配置
-                    Map<Long,Long> map = new HashMap<>();
+                    Map<Long, Long> map = new HashMap<>();
                     //是否存在独立库表,true为不存在,不存在才同步
                     Boolean isExist = true;
 
@@ -990,7 +991,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         //获取当前项目下的所有独立表
                         List<WbsTreePrivate> wbsTreePrivatesTableDL = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>lambdaQuery().select(WbsTreePrivate::getId).eq(WbsTreePrivate::getProjectId, pawDTO.getProjectId()).eq(WbsTreePrivate::getType, 10).eq(WbsTreePrivate::getParentId, -10).eq(WbsTreePrivate::getStatus, 1));
                         //存在数据则不再同步独立库表单配置
-                        if (wbsTreePrivatesTableDL != null && wbsTreePrivatesTableDL.size() > 0){
+                        if (wbsTreePrivatesTableDL != null && wbsTreePrivatesTableDL.size() > 0) {
                             isExist = false;
                         }
                         Set<Long> saveIdsSet = saveIds.stream().map(Long::parseLong).collect(Collectors.toSet());
@@ -1028,7 +1029,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                                 if (tree.getType() == 10) {
                                     wbsTreePrivate.setWbsId(null);
                                     wbsTreePrivate.setWbsType(null);
-                                    map.put(tree.getPKeyId(),wbsTreePrivate.getPKeyId());
+                                    map.put(tree.getPKeyId(), wbsTreePrivate.getPKeyId());
                                 } else {
                                     wbsTreePrivate.setWbsId(pawDTO.getPrimaryKeyId());
                                     wbsTreePrivate.setWbsType(String.valueOf(pawDTO.getWbsType()));