Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

lixiaolong před 1 týdnem
rodič
revize
dff2bc34a2

+ 63 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementCostServiceImpl.java

@@ -414,6 +414,8 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
 
         Map<String, String> userName2Name = sysUserJzgInfoService.queryUserInfoUserName2Name(baseController.getSystemCode());
         Page<CostManagementVo> costManagementVoPage = baseMapper.pageList(costParam.getPage(), costParam);
+        // 按承保规则属性 sort 正序,重新排列 cost_rules 各段描述
+        reorderCostRules(costManagementVoPage.getRecords());
         costManagementVoPage.getRecords().forEach(item->{
             if(item.getCostRules() != null && !item.getCostRules().isEmpty()){
                 item.setCostRules(item.getCostRules().substring(0,item.getCostRules().length()-1));
@@ -428,6 +430,67 @@ public class PtlAgreementCostServiceImpl extends ServiceImpl<PtlAgreementCostMap
         return HttpResult.ok(costManagementVoPage);
     }
 
+    /**
+     * 重新排序费用规则描述(cost_rules)
+     * 流程:
+     * 1. 查询所有 ptl_agreement_undwrt_rules_attr,按 sort 正序排列
+     * 2. 将 cost_rules 按 ";\t\t" 分段
+     * 3. 用 contains 判断每段包含哪个属性名(attr_name),按 sort 顺序重新排列各段
+     * 4. 重新拼接并赋值 cost_rules
+     *
+     * @param records 费用管理分页记录
+     */
+    private void reorderCostRules(List<CostManagementVo> records) {
+        if (CollectionUtils.isEmpty(records)) {
+            return;
+        }
+        // 查询所有承保规则属性,按 sort 正序排列
+        List<PtlAgreementUndwrtRulesAttr> sortedAttrs = agreementUndwrtRulesAttrService.getUndwrtRulesAttrList().stream()
+                .filter(attr -> StrUtil.isNotEmpty(attr.getAttrName()))
+                .sorted(Comparator.comparing(PtlAgreementUndwrtRulesAttr::getSort, Comparator.nullsLast(Integer::compareTo)))
+                .collect(Collectors.toList());
+        if (sortedAttrs.isEmpty()) {
+            return;
+        }
+        // cost_rules 各段以 ";\t\t" 分隔
+        String separator = ";\t\t";
+        for (CostManagementVo item : records) {
+            String costRules = item.getCostRules();
+            if (StrUtil.isEmpty(costRules)) {
+                continue;
+            }
+            // 按 separator 分段,过滤空段
+            List<String> segList = Arrays.stream(costRules.split(separator))
+                    .filter(s -> !s.isEmpty())
+                    .collect(Collectors.toList());
+            if (segList.isEmpty()) {
+                continue;
+            }
+            // 为每段确定排序值:用 contains 判断包含哪个属性名,取对应 sort
+            List<Map.Entry<String, Integer>> segWithSort = new ArrayList<>();
+            for (String seg : segList) {
+                Integer sortVal = null;
+                for (PtlAgreementUndwrtRulesAttr attr : sortedAttrs) {
+                    if (seg.contains(attr.getAttrName())) {
+                        sortVal = attr.getSort();
+                        break;
+                    }
+                }
+                segWithSort.add(new AbstractMap.SimpleEntry<>(seg, sortVal));
+            }
+            // 按 sort 正序排列(未匹配到的段置后,保持原顺序)
+            segWithSort.sort(Comparator.comparing(e -> e.getValue() == null ? Integer.MAX_VALUE : e.getValue()));
+            // 重新拼接并赋值 cost_rules
+            String newCostRules = segWithSort.stream()
+                    .map(Map.Entry::getKey)
+                    .collect(Collectors.joining(separator));
+            if (StrUtil.isNotBlank(newCostRules)) {
+                newCostRules = newCostRules + separator;
+            }
+            item.setCostRules(newCostRules);
+        }
+    }
+
     @GlobalTransactional
     @Override
     public HttpResult costCopy(PtlAgreementCostCopyParam costCopyParam) {

+ 0 - 1
tenant/organization/src/main/java/com/jzg/organization/service/impl/PtlAgreementUndwrtRulesAttrServiceImpl.java

@@ -172,7 +172,6 @@ public class PtlAgreementUndwrtRulesAttrServiceImpl extends ServiceImpl<PtlAgree
     @Override
     public Map<String, List<PtlAgreementUndwrtRulesAttr>> attrGroup(RulesAttParam param) {
         try {
-
             LambdaQueryWrapper<PtlAgreementUndwrtRulesAttr> lambdaQueryWrapper = new LambdaQueryWrapper<>();
             lambdaQueryWrapper.like(StringUtils.isNotEmpty(param.getScopeApplication()), PtlAgreementUndwrtRulesAttr::getScopeApplication, param.getScopeApplication());
             if(Objects.nonNull(param.getCompanyId())){

+ 3 - 1
tenant/organization/src/main/resources/mapper/PtlAgreementCostExternalMapper.xml

@@ -58,6 +58,7 @@
         <result column="update_by" property="updateBy" />
         <result column="is_delete" property="isDelete" />
         <result column="system_code" property="systemCode" />
+        <result column="agreement_title" property="agreementTitle" />
         <collection property="costExternalTypeAdds" column="id" ofType="com.jzg.commons.entity.vo.CostExternalTypeVo" select="selectCostExternalTypeVo" />
     </resultMap>
 
@@ -155,7 +156,8 @@
         ce.add_throw,
         ce.keep_point_ratio,
         pa.agreement_code,
-        pa.agreement_abbreviation
+        pa.agreement_abbreviation,
+        pa.agreement_title
         FROM
         ptl_agreement_cost_external ce
         LEFT JOIN ptl_agreement pa ON pa.id = ce.ptl_agreement_id AND pa.is_delete = 0

+ 23 - 12
tenant/organization/src/main/resources/mapper/SysUserJzgInfoMapper.xml

@@ -126,38 +126,49 @@
         order by suji.create_time desc
     </select>
     <select id="queryBJYwy" resultMap="BaseResultMap">
-        select
+
+        WITH RECURSIVE leader_tree AS (
+        SELECT id, leader_id, 1 AS depth,system_code
+        FROM sys_user_jzg_info
+        WHERE leader_id = #{leaderId}
+        AND is_delete = 0
+        UNION ALL
+        SELECT t.id, t.leader_id, lt.depth + 1,t.system_code
+        FROM sys_user_jzg_info t
+        INNER JOIN leader_tree lt ON t.leader_id = lt.id
+        WHERE t.is_delete = 0
+        AND lt.depth <![CDATA[  <  ]]> 10
+        )
+        SELECT
         suji.id,
         suji.user_id,
         suji.work_number,
         su.username,
-        su.mobile ,
+        su.mobile,
         suji.name,
         suji.dept_id,
         sd.name AS dept_name,
         suji.status,
         suji.is_enable,
         lsu.name AS leader_name,
-        ( select  aa.mobile from sys_user aa
-        where aa.id = lsu.user_id AND aa.is_delete = 0 ) AS leader_id,
-        (select re.name from sys_user_jzg_info re where re.id = suji.referrer_id) referrer_name,
+        (SELECT aa.mobile FROM sys_user aa
+        WHERE aa.id = lsu.user_id AND aa.is_delete = 0) AS leader_id,
+        (SELECT re.name FROM sys_user_jzg_info re WHERE re.id = suji.referrer_id) AS referrer_name,
         suji.referrer_id,
         suji.create_time AS createTime,
         suji.create_by AS createBy
-        from
+        FROM
         sys_user_jzg_info suji
-        left join sys_user su on su.id = suji.user_id AND su.is_delete = 0
-        LEFT JOIN sys_user_jzg_info lsu on lsu.id = suji.leader_id AND lsu.is_delete = 0
-        left join sys_dept sd on sd.id = suji.dept_id AND sd.is_delete = 0
+        INNER JOIN leader_tree lt ON suji.id = lt.id
+        LEFT JOIN sys_user su ON su.id = suji.user_id AND su.is_delete = 0
+        LEFT JOIN sys_user_jzg_info lsu ON lsu.id = suji.leader_id AND lsu.is_delete = 0
+        LEFT JOIN sys_dept sd ON sd.id = suji.dept_id AND sd.is_delete = 0
         LEFT JOIN sys_dept d ON suji.dept_id = d.id AND d.is_delete = 0
         <where>
             suji.is_delete = 0
             and suji.id  in (
             select sujis.sys_user_jzg_info_id  from sys_user_jzg_info_salesman sujis  where  sujis.type_attr != 2 AND sujis.type_attr != 3
             )
-            <if test="leaderId != null and leaderId != ''">
-                and suji.leader_id = #{leaderId}
-            </if>
             <if test="sysUserInfoListVo.deptId != null and sysUserInfoListVo.deptId != ''">
                 and d.route LIKE CONCAT('%', #{sysUserInfoListVo.deptId}, '%')
             </if>