Jelajahi Sumber

手续费应收和跟单应收中都增加业务来源(电销/个代/渠道)筛选项

lipf 4 bulan lalu
induk
melakukan
6e4fd272b8

+ 24 - 0
commons/src/main/java/com/jzg/commons/entity/Constant.java

@@ -0,0 +1,24 @@
+package com.jzg.commons.entity;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 常量池
+ * @author lipf
+ * @date 2026/5/13 14:37
+ */
+public class Constant {
+
+
+    public static final Map<String, String> ywyAttrTypeMap = new HashMap<>();
+
+    static {
+        ywyAttrTypeMap.put("5","团队");
+        ywyAttrTypeMap.put("6","个代");
+        ywyAttrTypeMap.put("7","渠道");
+        ywyAttrTypeMap.put("8","电销");
+    }
+
+
+}

+ 17 - 0
commons/src/main/java/com/jzg/commons/entity/finance/po/InsPlyIncome.java

@@ -255,4 +255,21 @@ public class InsPlyIncome extends BaseModel {
     @TableField(exist = false)
     @TableField(exist = false)
     @Schema(description = "订单类型(code)")
     @Schema(description = "订单类型(code)")
     private String entryStatus;
     private String entryStatus;
+
+    @TableField(exist = false)
+    @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    private String typeAttr;
+
+    @TableField(exist = false)
+    @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    private String typeAttrName;
+
+    @TableField(exist = false)
+    @Schema(description = "实际签单用户手机号2")
+    private String realQuoteUserId;
+
+    @TableField(exist = false)
+    @Schema(description = "实际签单用户手机号")
+    private String realQuoteUserName;
+
 }
 }

+ 3 - 0
commons/src/main/java/com/jzg/commons/entity/finance/vo/ReceivableQueryVo.java

@@ -107,5 +107,8 @@ public class ReceivableQueryVo extends PageRequest {
     @Schema(description = "增加类型")
     @Schema(description = "增加类型")
     private String addType;
     private String addType;
 
 
+    @Schema(description = "业务员类型 团队/渠道/电销/个代 5:团队 6:个代 7:渠道 8 :电销")
+    private String typeAttr;
+
 
 
 }
 }

+ 24 - 0
commons/src/main/java/com/jzg/commons/entity/po/SysUserJzgInfoSalesmanBO.java

@@ -0,0 +1,24 @@
+package com.jzg.commons.entity.po;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+
+@Data
+public class SysUserJzgInfoSalesmanBO extends SysUserJzgInfoSalesman implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 4445597727858843519L;
+
+
+    /**
+     * 租户代码
+     */
+    private String systemCode;
+
+    /**
+     * 用户登录手机号
+     */
+    private String userName;
+}

+ 13 - 0
tenant/organization/src/main/java/com/jzg/organization/mapper/SysUserJzgInfoSalesmanMapper.java

@@ -2,8 +2,21 @@ package com.jzg.organization.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.jzg.commons.entity.po.SysUserJzgInfoSalesman;
 import com.jzg.commons.entity.po.SysUserJzgInfoSalesman;
+import com.jzg.commons.entity.po.SysUserJzgInfoSalesmanBO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 
 @Mapper
 @Mapper
 public interface SysUserJzgInfoSalesmanMapper extends BaseMapper<SysUserJzgInfoSalesman> {
 public interface SysUserJzgInfoSalesmanMapper extends BaseMapper<SysUserJzgInfoSalesman> {
+
+    /**
+     * 查询指定租户下业务员的岗位信息
+     *
+     * @param systemCode 租户信息
+     * @author lipf
+     * @date 2026/5/13 11:13
+     */
+    List<SysUserJzgInfoSalesmanBO> queryYwyTypeAttrInfo(@Param("systemCode") String systemCode);
 }
 }

+ 9 - 0
tenant/organization/src/main/java/com/jzg/organization/service/SysUserJzgInfoSalesmanService.java

@@ -15,4 +15,13 @@ public interface SysUserJzgInfoSalesmanService extends IService<SysUserJzgInfoSa
      * @date 2026/4/24 11:32
      * @date 2026/4/24 11:32
      */
      */
     Map<String, String> queryAllTypeAttrMap();
     Map<String, String> queryAllTypeAttrMap();
+
+    /**
+     * 查询业务员的身份信息
+     *
+     * @return Map<String, String> key 表示sys_user 表的username, value 标识多个岗位的标识
+     * @author lipf
+     * @date 2026/5/13 11:05
+     */
+    Map<String, String> queryYwyTypeAttrMap();
 }
 }

+ 10 - 2
tenant/organization/src/main/java/com/jzg/organization/service/impl/ReceivableServiceImpl.java

@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.constants.dict.InsOrderStatusEnum;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.page.HttpResult;
 import com.jzg.commons.core.page.HttpResult;
+import com.jzg.commons.entity.Constant;
 import com.jzg.commons.entity.finance.dto.*;
 import com.jzg.commons.entity.finance.dto.*;
 import com.jzg.commons.entity.finance.po.*;
 import com.jzg.commons.entity.finance.po.*;
 import com.jzg.commons.entity.finance.vo.*;
 import com.jzg.commons.entity.finance.vo.*;
@@ -34,6 +35,7 @@ import com.jzg.organization.excel.listener.ReceivbleExcelListener;
 import com.jzg.organization.excel.listener.SuperviseExcelListener;
 import com.jzg.organization.excel.listener.SuperviseExcelListener;
 import com.jzg.organization.mapper.*;
 import com.jzg.organization.mapper.*;
 import com.jzg.organization.service.ReceivableService;
 import com.jzg.organization.service.ReceivableService;
+import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
 import org.redisson.api.RBucket;
 import org.redisson.api.RBucket;
 import org.redisson.api.RKeys;
 import org.redisson.api.RKeys;
 import org.redisson.api.RedissonClient;
 import org.redisson.api.RedissonClient;
@@ -104,6 +106,8 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
 
 
     @Autowired
     @Autowired
     private ExportBaseServiceImpl exportBaseService;
     private ExportBaseServiceImpl exportBaseService;
+    @Autowired
+    private SysUserJzgInfoSalesmanService sysUserJzgInfoSalesmanService;
 
 
     @Value("${upload.file.path}")
     @Value("${upload.file.path}")
     private String uploadPath;
     private String uploadPath;
@@ -172,7 +176,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      */
      */
     @Override
     @Override
     public Page<InsPlyIncome> getReceivablePage(ReceivableQueryVo receivableQueryVo) {
     public Page<InsPlyIncome> getReceivablePage(ReceivableQueryVo receivableQueryVo) {
-        log.info("获取私有协议手续费列表。receivableQueryVo=[{}]", JSONUtil.toJsonStr(receivableQueryVo));
+        log.info("获取私有协议手续费应收列表。receivableQueryVo=[{}]", JSONUtil.toJsonStr(receivableQueryVo));
         Page<InsPlyIncome> page = baseMapper.getReceivablePage(receivableQueryVo.getPage(), receivableQueryVo);
         Page<InsPlyIncome> page = baseMapper.getReceivablePage(receivableQueryVo.getPage(), receivableQueryVo);
         List<InsPlyIncome> records = page.getRecords();
         List<InsPlyIncome> records = page.getRecords();
         records = this.fillOtherInfo(records);
         records = this.fillOtherInfo(records);
@@ -383,6 +387,7 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
      */
      */
     List<InsPlyIncome> fillOtherInfo(List<InsPlyIncome> records){
     List<InsPlyIncome> fillOtherInfo(List<InsPlyIncome> records){
         if(CollUtil.isNotEmpty(records)){
         if(CollUtil.isNotEmpty(records)){
+            Map<String, String> typeAttrMaps = sysUserJzgInfoSalesmanService.queryYwyTypeAttrMap();
             records.forEach(insPlyIncome -> {
             records.forEach(insPlyIncome -> {
                 if("0".equals(insPlyIncome.getSettlementStatus())){
                 if("0".equals(insPlyIncome.getSettlementStatus())){
                     insPlyIncome.setSettlementStatusName("未结算");
                     insPlyIncome.setSettlementStatusName("未结算");
@@ -391,8 +396,11 @@ public class ReceivableServiceImpl extends ServiceImpl<ReceivableMapper, InsPlyI
                 }else{
                 }else{
                     insPlyIncome.setSettlementStatusName(insPlyIncome.getSettlementStatus());
                     insPlyIncome.setSettlementStatusName(insPlyIncome.getSettlementStatus());
                 }
                 }
+                String typeAttr = typeAttrMaps.getOrDefault(Objects.toString(insPlyIncome.getRealQuoteUserName(),""),"");
+                String typeAttrName = Constant.ywyAttrTypeMap.get(typeAttr);
+                insPlyIncome.setTypeAttr(typeAttr);
+                insPlyIncome.setTypeAttrName(typeAttrName);
             });
             });
-
         }
         }
         return records;
         return records;
     }
     }

+ 35 - 0
tenant/organization/src/main/java/com/jzg/organization/service/impl/SysUserJzgInfoSalesmanServiceImpl.java

@@ -4,7 +4,9 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.commons.core.base.BaseController;
 import com.jzg.commons.core.base.BaseController;
+import com.jzg.commons.entity.Constant;
 import com.jzg.commons.entity.po.SysUserJzgInfoSalesman;
 import com.jzg.commons.entity.po.SysUserJzgInfoSalesman;
+import com.jzg.commons.entity.po.SysUserJzgInfoSalesmanBO;
 import com.jzg.organization.mapper.SysUserJzgInfoSalesmanMapper;
 import com.jzg.organization.mapper.SysUserJzgInfoSalesmanMapper;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
 import com.jzg.organization.service.SysUserJzgInfoSalesmanService;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -12,8 +14,11 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.io.Serial;
+import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
 /**
 /**
@@ -57,4 +62,34 @@ public class SysUserJzgInfoSalesmanServiceImpl extends ServiceImpl<SysUserJzgInf
         log.info("按照jzg_info表的序号进行划分后。数据个数[{}]", CollectionUtil.size(resultMap));
         log.info("按照jzg_info表的序号进行划分后。数据个数[{}]", CollectionUtil.size(resultMap));
         return resultMap;
         return resultMap;
     }
     }
+
+    /**
+     * 查询业务员的身份信息
+     *
+     * @return Map<String, String> key 表示sys_user 表的username, value 标识多个岗位的标识
+     * @author lipf
+     * @date 2026/5/13 11:05
+     */
+    @Override
+    public Map<String, String> queryYwyTypeAttrMap() {
+        String systemCode = baseController.getSystemCode();
+        Set<String> attrTypes = Set.of("5", "6", "7","8");
+        List<SysUserJzgInfoSalesmanBO> sysUserJzgInfoSalesmen = sysUserJzgInfoSalesmanMapper.queryYwyTypeAttrInfo(systemCode);
+        log.info("查询出[{}]个业务员的类型信息。systemCode=[{}]", CollectionUtil.size(sysUserJzgInfoSalesmen), systemCode);
+        Map<String, String> resultMap = sysUserJzgInfoSalesmen.stream()
+                .filter(action-> StrUtil.isNotEmpty(action.getSysUserJzgInfoId()) && StrUtil.isNotEmpty(action.getTypeAttr()))
+                .filter(action-> action.getSysUserJzgInfoId() != null && action.getTypeAttr() != null)
+                .filter(action-> StrUtil.isNotEmpty(action.getUserName()))
+                .filter(action-> Constant.ywyAttrTypeMap.containsKey(action.getTypeAttr()))
+                .collect(Collectors.toMap(
+                        // 1. Key 映射:先获取 String,再转为 Long
+                        SysUserJzgInfoSalesmanBO::getUserName,
+                        // 2. Value 映射:直接获取 typeAttr
+                        SysUserJzgInfoSalesmanBO::getTypeAttr,
+                        // 3. 合并策略:遇到重复 Key,将 value 用逗号拼接
+                        (existingValue, newValue) -> existingValue + "," + newValue
+                ));
+        log.info("按照sys_user表的username进行划分后。数据个数[{}]", CollectionUtil.size(resultMap));
+        return resultMap;
+    }
 }
 }

+ 7 - 0
tenant/organization/src/main/resources/mapper/ReceivableMapper.xml

@@ -199,6 +199,8 @@
 
 
     <sql id="query">
     <sql id="query">
         SELECT
         SELECT
+        io.real_quote_user_id,
+        io.real_quote_user_id as real_quote_user_name,
         io.signing_time,
         io.signing_time,
         date(io.signing_time ) as sign_date,
         date(io.signing_time ) as sign_date,
         year(io.signing_time) as sign_year,
         year(io.signing_time) as sign_year,
@@ -272,6 +274,11 @@
     
     
     <select id="getReceivablePage" resultType="com.jzg.commons.entity.finance.po.InsPlyIncome">
     <select id="getReceivablePage" resultType="com.jzg.commons.entity.finance.po.InsPlyIncome">
         <include refid="query"/>
         <include refid="query"/>
+        <if test="receivableQueryVo.typeAttr != null and receivableQueryVo.typeAttr != ''">
+            and io.real_quote_user_id  in (select su.username  from sys_user_jzg_info_salesman sujis left join sys_user_jzg_info suji on sujis.sys_user_jzg_info_id = suji.id
+            left join sys_user su on su.id = suji.user_id
+            where sujis.type_attr =#{receivableQueryVo.typeAttr})
+        </if>
         <if test = "receivableQueryVo.agreementType != null and receivableQueryVo.agreementType == 1">
         <if test = "receivableQueryVo.agreementType != null and receivableQueryVo.agreementType == 1">
             AND ipi.agreement_type = #{receivableQueryVo.agreementType}
             AND ipi.agreement_type = #{receivableQueryVo.agreementType}
         </if>
         </if>

+ 20 - 0
tenant/organization/src/main/resources/mapper/SysUserJzgInfoSalesmanMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.jzg.organization.mapper.SysUserJzgInfoSalesmanMapper">
+
+    <!-- 查询指定租户下业务员的岗位信息 lipf 2026年5月13日11:16:58-->
+    <select id="queryYwyTypeAttrInfo" resultType="com.jzg.commons.entity.po.SysUserJzgInfoSalesmanBO">
+        select
+        su.username,
+        suji.system_code ,
+        sujis.*
+        from
+        sys_user_jzg_info_salesman sujis
+        left join sys_user_jzg_info suji on
+        sujis.sys_user_jzg_info_id = suji.id
+        left join sys_user su on
+        suji.user_id = su.id
+        where su.username  is not null
+        and suji.system_code  = #{systemCode}
+    </select>
+</mapper>