This commit is contained in:
wkc
2026-02-26 14:51:13 +08:00
commit acd6c38ae2
2102 changed files with 320452 additions and 0 deletions

78
ibs/pom.xml Normal file
View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>3.8.8</version>
</parent>
<artifactId>ibs</artifactId>
<dependencies>
<!-- Mockito依赖 -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.3.3</version> <!-- 请根据需要选择合适的版本 -->
<scope>test</scope>
</dependency>
<!-- JUnit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version> <!-- 请根据需要选择合适的版本 -->
<scope>test</scope>
</dependency>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.18.2</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.31</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.postgresql</groupId>-->
<!-- <artifactId>postgresql</artifactId>-->
<!-- <version>42.3.3</version>-->
<!-- </dependency>-->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-system</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel-core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.2</version>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,113 @@
package com.ruoyi.ibs.cmpm.controller;
import com.github.pagehelper.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataPageInfo;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.ibs.cmpm.domain.dto.CustLevelDTO;
import com.ruoyi.ibs.cmpm.domain.dto.CustManagerDTO;
import com.ruoyi.ibs.cmpm.domain.dto.GridCmpmListDTO;
import com.ruoyi.ibs.cmpm.domain.dto.UserDeptDTO;
import com.ruoyi.ibs.cmpm.domain.vo.DwbRetailCustLevelManagerDetailVO;
import com.ruoyi.ibs.cmpm.domain.vo.DwbRetailResultVO;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmVO;
import com.ruoyi.ibs.cmpm.service.GridCmpmCustService;
import com.ruoyi.ibs.cmpm.service.GridCmpmService;
import com.ruoyi.ibs.cmpm.service.GridCmpmTransferService;
import com.ruoyi.ibs.customerselect.domain.CustBaseInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* @Author 吴凯程
* @Date 2025/10/20
**/
@Api(tags = "绩效网格")
@RestController
@RequestMapping("/grid/cmpm")
public class GridCmpmController extends BaseController {
@Resource
private GridCmpmService gridCmpmService;
@Resource
private GridCmpmCustService gridCmpmCustService;
@Resource
private GridCmpmTransferService gridCmpmTransferService;
@GetMapping("/list")
@Log(title = "绩效网格-查询绩效网格列表")
@ApiOperation("查询绩效网格列表")
public TableDataPageInfo selectManageList(GridCmpmListDTO gridCmpmListDTO) {
Page<Object> page = startPage();
List<GridCmpmVO> gridCmpmVOS = gridCmpmService.selectManageList(gridCmpmListDTO);
return getDataTable(gridCmpmVOS, page);
}
@GetMapping("/common/list")
@Log(title = "绩效网格-查询绩效网格公共池列表")
@ApiOperation("查询绩效网格公共池列表")
public TableDataPageInfo selectCommonList(GridCmpmListDTO gridCmpmListDTO) {
UserDeptDTO userDeptDTO = gridCmpmTransferService.getUserDeptDTO(SecurityUtils.getUsername());
if (Objects.nonNull(userDeptDTO.getBranchId())){
gridCmpmListDTO.setBranchId(userDeptDTO.getBranchId());
}
Page<Object> page = startPage();
List<GridCmpmVO> gridCmpmVOS = gridCmpmService.selectCommonList(gridCmpmListDTO);
return getDataTable(gridCmpmVOS, page);
}
@GetMapping("/cust/level")
@Log(title = "绩效网格-查询客户分层等级")
@ApiOperation("查询客户分层等级")
public AjaxResult custLevel(CustLevelDTO custLevelDTO) {
return success(gridCmpmService.getCustLevelByCust(custLevelDTO));
}
@GetMapping("/cust/list/tag")
@Log(title = "绩效网格-查询客户分层等级下拉框")
@ApiOperation("查询客户分层等级下拉框")
@ApiImplicitParam(name = "gridType", value = "零售retail 对公corporate 对公账户corporate_account", required = true, dataType = "String")
public AjaxResult custLevelListTag(@RequestParam String gridType) {
return success(gridCmpmService.getAllCustLevel(gridType));
}
@GetMapping("/custManagerList")
@Log(title = "绩效网格-查询管户报表")
@ApiOperation("查询管户报表")
public TableDataPageInfo selectCustManagerList(CustManagerDTO custManagerDTO) {
Page<Object> page = startPage();
List<DwbRetailCustLevelManagerDetailVO> gridCmpmVOS = gridCmpmService.selectCustManagerList(custManagerDTO);
return getDataTable(gridCmpmVOS, page);
}
@GetMapping("/custManager/result")
@Log(title = "绩效网格-管户报表统计")
@ApiOperation("管户报表统计")
public DwbRetailResultVO selectCustManagerResult() {
return gridCmpmService.selectCustManagerResult();
}
@GetMapping("/custLevel/count")
@Log(title = "绩效网格-查询客户分层等级")
@ApiOperation("查询客户分层等级")
public AjaxResult custLevelCount(CustManagerDTO custManagerDTO) {
return success(gridCmpmService.custLevelCount(custManagerDTO));
}
@PostMapping("/custBaseInfo/list")
@Log(title = "绩效网格-我的客户绩效网格查询")
@ApiOperation("我的客户绩效网格查询")
public AjaxResult selectCustBaseInfoList(@RequestBody CustBaseInfo custBaseInfo) {
return AjaxResult.success( gridCmpmCustService.selectCustInfoList (custBaseInfo)) ;
}
}

View File

@@ -0,0 +1,97 @@
package com.ruoyi.ibs.cmpm.controller;
import com.github.pagehelper.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataPageInfo;
import com.ruoyi.ibs.cmpm.domain.dto.*;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmClaimVO;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmTransferVO;
import com.ruoyi.ibs.cmpm.service.GridCmpmTransferService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/10/20
**/
@Api(tags = "绩效网格移交")
@RestController
@RequestMapping("/grid/cmpm/transfer")
public class GridCmpmTransferController extends BaseController {
@Resource
private GridCmpmTransferService gridCmpmTransferService;
@PostMapping("/create")
@Log(title = "绩效网格-创建关系移交审批")
@ApiOperation("创建关系移交审批")
public AjaxResult create(@RequestBody GridCmpmTransferDTO gridCmpmTransferDTO) {
return success(gridCmpmTransferService.createGridCmpmTransfer(gridCmpmTransferDTO));
}
@PostMapping("/create/claim")
@Log(title = "绩效网格-创建客户经理认领审批")
@ApiOperation("创建客户经理认领审批")
public AjaxResult createClaim(@RequestBody GridCmpmClaimDTO gridCmpmClaimDTO) {
return success(gridCmpmTransferService.createClaim(gridCmpmClaimDTO));
}
@PostMapping("/create/common/claim")
@Log(title = "绩效网格-创建公共池认领审批")
@ApiOperation("创建公共池认领审批")
public AjaxResult createCommonClaim(@RequestBody GridCmpmClaimDTO gridCmpmClaimDTO) {
return success(gridCmpmTransferService.createCommonClaim(gridCmpmClaimDTO));
}
@PostMapping("/approve")
@Log(title = "绩效网格-审批关系移交审批")
@ApiOperation("审批关系移交审批")
public AjaxResult approve(@RequestBody GridCmpmApproveDTO gridCmpmApproveDTO) {
return success(gridCmpmTransferService.approveTransfer(gridCmpmApproveDTO));
}
@GetMapping("/list/approve")
@ApiOperation("绩效网格-查询关系移交审批列表")
@Log(title = "查询关系移交审批列表")
public TableDataPageInfo list(GridCmpmTransferListDTO gridCmpmRetailListDTO) {
Page<Object> page = startPage();
List<GridCmpmTransferVO> gridCmpmTransferList = gridCmpmTransferService.getGridCmpmTransferList(gridCmpmRetailListDTO);
return getDataTable(gridCmpmTransferList, page);
}
@GetMapping("/list/history")
@ApiOperation("绩效网格-查询关系移交审批历史列表")
@Log(title = "查询关系移交审批历史列表")
public TableDataPageInfo historyList(GridCmpmTransferListDTO gridCmpmRetailListDTO) {
Page<Object> page = startPage();
List<GridCmpmTransferVO> gridCmpmTransferList = gridCmpmTransferService.getGridCmpmTransferHistoryList(gridCmpmRetailListDTO);
return getDataTable(gridCmpmTransferList, page);
}
@PostMapping("/adjust")
@ApiOperation("绩效网格-总行支行管理员调整关系")
@Log(title = "总行支行管理员调整关系")
public AjaxResult adjust(@RequestBody GridCmpmAdjustDTO gridCmpmAdjustDTO) {
return success(gridCmpmTransferService.adjustGridCmpm(gridCmpmAdjustDTO));
}
@GetMapping("/claim/list")
@ApiOperation("绩效网格-查询认领客户列表")
@Log(title = "查询认领客户列表")
public TableDataPageInfo claimList(String custKey, String gridType) {
Page<Object> page = startPage();
List<GridCmpmClaimVO> gridCmpmClaimList = gridCmpmTransferService.queryClaimList(custKey, gridType);
return getDataTable(gridCmpmClaimList, page);
}
}

View File

@@ -0,0 +1,59 @@
package com.ruoyi.ibs.cmpm.controller;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustReachDTO;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustReachListDTO;
import com.ruoyi.ibs.cmpm.domain.vo.VisitCustReachListVO;
import com.ruoyi.ibs.cmpm.domain.vo.VisitCustReachVO;
import com.ruoyi.ibs.cmpm.service.VisitCustReachService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Api(tags = "客户接触记录接口")
@RestController
@RequestMapping("/cust/reach")
public class VisitCustReachController extends BaseController {
@Resource
private VisitCustReachService visitCustReachService;
@ApiOperation("查询客户接触记录列表")
@Log(title = "客户接触记录-查询客户接触记录列表")
@GetMapping("/list")
public R<PageInfo<VisitCustReachListVO>> queryVisitCustReachList(@Valid VisitCustReachListDTO visitCustReachListDTO){
return R.ok(visitCustReachService.queryVisitCustReachList(visitCustReachListDTO));
}
@ApiOperation("查询客户搜索框")
@Log(title = "客户接触记录-查询客户搜索框")
@GetMapping("/query")
public R<List<VisitCustReachVO>> queryVisitCustReach(@RequestParam String custName){
return R.ok(visitCustReachService.queryVisitCust(custName));
}
@ApiOperation("保存客户接触记录")
@Log(title = "客户接触记录-保存客户接触记录")
@PostMapping("/save")
public R<String> saveVisitCustReach(@RequestBody VisitCustReachDTO visitCustReachDTO){
return R.ok(visitCustReachService.saveVisitCustReachDTO(visitCustReachDTO));
}
@ApiOperation("查询客户历史接触记录")
@Log(title = "客户接触记录-查询客户历史接触记录")
@GetMapping("/query/history")
public R<List<VisitCustReachListVO>> queryVisitCustReachListByCustId(@RequestParam String custId){
return R.ok(visitCustReachService.queryVisitCustReachListByCustId(custId));
}
}

View File

@@ -0,0 +1,25 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/31
**/
@Data
public class CustLevelDTO {
/** 移交客户号 */
@ApiModelProperty(value = "客户号",notes = "")
private String custId ;
/** 移交客户账号 */
@ApiModelProperty(value = "客户账号",notes = "")
private String accountNo ;
@ApiModelProperty(value = "客戶類型 0個人 1商戶 2企業",notes = "")
private String custType;
private String gridType;
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CustManagerDTO {
@ApiModelProperty(value = "客户星级",notes = "")
private String custLevel;
@ApiModelProperty(value = "柜员号",notes = "")
private String managerId;
@ApiModelProperty(value = "网点号",notes = "")
private String outletId;
@ApiModelProperty(value = "网点名",notes = "")
private String branchId;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/11/17
**/
@Data
public class GridCmpmAdjustDTO {
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType;
private String deptCode;
/** 客户号 */
@ApiModelProperty(value = "客户信息",notes = "")
private List<TransferCustDTO> custList ;
private String userName;
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/10/27
**/
@Data
public class GridCmpmApproveDTO {
private List<Long> idList;
private Boolean approveResult;
}

View File

@@ -0,0 +1,17 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/10/28
**/
@Data
public class GridCmpmBranchDTO {
private Long branchId;
private List<String> custIdList;
}

View File

@@ -0,0 +1,24 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/10/27
**/
@Data
public class GridCmpmClaimDTO {
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType ;
/** 移交客户号 */
@ApiModelProperty(value = "移交客户信息",notes = "")
private List<TransferCustDTO> custList ;
/** 新客户经理柜员号 */
@ApiModelProperty(value = "新客户经理柜员号",notes = "")
private String userName ;
}

View File

@@ -0,0 +1,44 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/10/15
**/
@Data
public class GridCmpmListDTO {
@ApiModelProperty(value = "网格类型 零售retail 对公corporate 对公账户对公corporate_account",notes = "")
private String gridType;
/** 客户号 */
@ApiModelProperty(name = "客户号",notes = "")
private String custId ;
/** 客户姓名 */
@ApiModelProperty(name = "客户姓名",notes = "")
private String custName ;
/** 客户姓名 */
@ApiModelProperty(name = "客户类型",notes = "")
private List<String> custTypes ;
/** 客户层级 */
@ApiModelProperty(name = "客户层级",notes = "")
private List<String> custLevels ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "客户经理柜员号",notes = "")
private String userName ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "用户柜员号",notes = "")
private String curUserName ;
/** 网点机构号 */
@ApiModelProperty(name = "网点机构号",notes = "")
private Long outletId ;
/** 支行机构号 */
@ApiModelProperty(name = "支行机构号",notes = "")
private Long branchId ;
}

View File

@@ -0,0 +1,30 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/10/20
**/
@Data
public class GridCmpmTransferDTO {
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType ;
/** 移交客户号 */
@ApiModelProperty(value = "移交客户信息",notes = "")
private List<TransferCustDTO> custList ;
/** 原客户经理柜员号 */
@ApiModelProperty(value = "原客户经理柜员号",notes = "")
private String prevUserName ;
/** 新客户经理柜员号 */
@ApiModelProperty(value = "新客户经理柜员号",notes = "")
private String nextUserName ;
@ApiModelProperty(value = "是否全部移交",notes = "")
private Boolean isFullTransfer ;
}

View File

@@ -0,0 +1,29 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/20
**/
@Data
public class GridCmpmTransferListDTO {
/** 移交客户信息 */
@ApiModelProperty(value = "移交客户信息",notes = "")
private String keyword;
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType ;
private String userRole;
private Long deptId;
private String userName;
private String headId;
}

View File

@@ -0,0 +1,47 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/11/13
**/
@Data
public class GridCmpmUpdateDTO {
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType ;
/** 归属总行 */
@ApiModelProperty(value = "归属总行",notes = "")
private String deptCode ;
/** 客户号 */
@ApiModelProperty(name = "客户号",notes = "")
private String custId ;
/** 客户内码 */
@ApiModelProperty(name = "账户号",notes = "")
private String accountNo ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "客户经理柜员号",notes = "")
private String prevUserName ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "客户经理柜员号",notes = "")
private String userName ;
/** 客户经理姓名 */
@ApiModelProperty(name = "客户经理姓名",notes = "")
private String nickName ;
/** 网点机构号 */
@ApiModelProperty(name = "网点机构号",notes = "")
private Long outletId ;
/** 网点名称 */
@ApiModelProperty(name = "网点名称",notes = "")
private String outletName ;
/** 支行机构号 */
@ApiModelProperty(name = "支行机构号",notes = "")
private Long branchId ;
/** 支行名称 */
@ApiModelProperty(name = "支行名称",notes = "")
private String branchName ;
}

View File

@@ -0,0 +1,27 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/22
**/
@Data
public class TransferCustDTO {
/** 移交客户类型 */
@ApiModelProperty(value = "移交客户类型",notes = "")
private String custType ;
/** 移交客户名称 */
@ApiModelProperty(value = "移交客户名称",notes = "")
private String custName ;
/** 移交客户号 */
@ApiModelProperty(value = "移交客户号",notes = "")
private String custId ;
/** 移交客户账号 */
@ApiModelProperty(value = "移交客户账号",notes = "")
private String accountNo ;
@ApiModelProperty(value = "原客户经理",notes = "")
private String prevUserName ;
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/21
**/
@Data
public class UserDeptDTO {
private Long deptId;
private String deptType;
private Long outletId;
private Long branchId;
private Long headId;
}

View File

@@ -0,0 +1,18 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Data
public class VisitCustQueryDTO {
private String custName;
private String userName;
private Long branchId;
}

View File

@@ -0,0 +1,64 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Data
public class VisitCustReachDTO {
private Long id ;
/** 客户号 */
@ApiModelProperty(value = "客户号",notes = "")
@NotNull
private String custId ;
/** 客户内码 */
@ApiModelProperty(value = "客户内码",notes = "")
@NotNull
private String custIdn ;
/** 客户名称 */
@ApiModelProperty(value = "客户名称",notes = "")
@NotNull
private String custName ;
/** 手机号 */
@ApiModelProperty(value = "手机号",notes = "")
private String mobile ;
/** 电访计划时间 */
@ApiModelProperty(value = "电访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telPlanDate ;
/** 电访计划内容 */
@ApiModelProperty(value = "电访计划内容",notes = "")
private String telPlanRemark ;
/** 电访总结时间 */
@ApiModelProperty(value = "电访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telSummaryDate ;
/** 电访总结内容 */
@ApiModelProperty(value = "电访总结内容",notes = "")
private String telSummaryRemark ;
/** 面访计划时间 */
@ApiModelProperty(value = "面访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitPlanDate ;
/** 面访计划内容 */
@ApiModelProperty(value = "面访计划内容",notes = "")
private String visitPlanRemark ;
/** 面访总结时间 */
@ApiModelProperty(value = "面访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitSummaryDate ;
/** 面访总结内容 */
@ApiModelProperty(value = "面访总结内容",notes = "")
private String visitSummaryRemark ;
/** 提交标识 */
@ApiModelProperty(value = "提交标识 保存False 提交True",notes = "")
private Boolean submitFlag ;
}

View File

@@ -0,0 +1,39 @@
package com.ruoyi.ibs.cmpm.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Data
@Valid
public class VisitCustReachListDTO {
/** 客户名称 */
@ApiModelProperty(value = "客户名称",notes = "")
private String custName ;
/** 客户名称 */
@ApiModelProperty(value = "权限柜员号",notes = "", hidden = true)
private String aliasUserName;
/** 客户名称 */
@ApiModelProperty(value = "柜员号",notes = "")
private String userName;
/** 客户名称 */
@ApiModelProperty(value = "柜员号",notes = "")
private String editUserName;
@ApiModelProperty(hidden = true)
private Long deptId;
@NotNull
private Integer pageNum;
@NotNull
private Integer pageSize;
}

View File

@@ -0,0 +1,99 @@
package com.ruoyi.ibs.cmpm.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 零售星级客户管户明细表
*
* @author ruoyi
* @date 2024-11-20
*/
@Data
@TableName("dwb_retail_cust_level_manager_detail")
@ApiModel(description = "零售星级客户管户明细表")
public class DwbRetailCustLevelManagerDetail {
/** id */
@TableId
@ApiModelProperty(value = "id")
private Long id;
/** 网点号 */
@ApiModelProperty(value = "网点号")
private String outletId;
/** 网点名 */
@ApiModelProperty(value = "网点名")
private String outletName;
/** 支行号 */
@ApiModelProperty(value = "支行号")
private String branchId;
/** 支行名 */
@ApiModelProperty(value = "支行名")
private String branchName;
/** 客户名称 */
@ApiModelProperty(value = "客户名称")
private String custName;
/** 客户证件号 */
@ApiModelProperty(value = "客户证件号")
private String custIdc;
/** 客户内码 */
@ApiModelProperty(value = "客户内码")
private String custIsn;
/** 年龄 */
@ApiModelProperty(value = "年龄")
private String custAge;
/** 性别 */
@ApiModelProperty(value = "性别")
private String custSex;
/** 联系电话 */
@ApiModelProperty(value = "联系电话")
private String custPhone;
/** 联系地址 */
@ApiModelProperty(value = "联系地址")
private String custAddress;
/** 总资产余额 */
@ApiModelProperty(value = "总资产余额")
private BigDecimal custAumBal;
/** 总资产余额较上月变动 */
@ApiModelProperty(value = "总资产余额较上月变动")
private BigDecimal aumBalCompLm;
/** 总资产月日均 */
@ApiModelProperty(value = "总资产月日均")
private BigDecimal custAumMonthAvg;
/** 客户星级 */
@ApiModelProperty(value = "客户星级")
private String custLevel;
/** 星级较上月变动 */
@ApiModelProperty(value = "星级较上月变动")
private String custLevelCompLm;
/** 责任人 */
@ApiModelProperty(value = "责任人")
private String managerName;
/** 责任人柜员号 */
@ApiModelProperty(value = "责任人柜员号")
private String managerId;
}

View File

@@ -0,0 +1,73 @@
package com.ruoyi.ibs.cmpm.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/15
*
* ALTER TABLE ibs.grid_cmpm_retail_965 ADD cust_type varchar(100) NULL COMMENT '0个人 1商户 2企业';
* ALTER TABLE ibs.grid_cmpm_retail_965 ADD grid_type varchar(100) NULL COMMENT '零售retail 对公corporate 对公账户corporateAccount';
* ALTER TABLE ibs.grid_cmpm_retail_965 ADD account_no varchar(100) NULL COMMENT '账户号';
**/
@Data
public class GridCmpm {
/** id */
@TableId(type = IdType.AUTO)
@ApiModelProperty(name = "id",notes = "")
private Long id ;
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType ;
/** 客户类型 retail merchant business */
@ApiModelProperty(name = "客户类型",notes = "")
private String custType ;
/** 客户号 */
@ApiModelProperty(name = "客户号",notes = "")
private String custId ;
/** 身份证号 */
@ApiModelProperty(name = "身份证号",notes = "")
private String custIdc ;
/** 统信码 */
@ApiModelProperty(name = "统信码",notes = "")
private String usci;
/** 客户内码 */
@ApiModelProperty(name = "客户内码",notes = "")
private String custIdn ;
/** 客户内码 */
@ApiModelProperty(name = "账户号",notes = "")
private String accountNo ;
/** 客户姓名 */
@ApiModelProperty(name = "客户姓名",notes = "")
private String custName ;
/** 客户层级 */
@ApiModelProperty(name = "客户层级",notes = "")
private String custLevel ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "客户经理柜员号",notes = "")
private String userName ;
/** 客户经理姓名 */
@ApiModelProperty(name = "客户经理姓名",notes = "")
private String nickName ;
/** 网点机构号 */
@ApiModelProperty(name = "网点机构号",notes = "")
private Long outletId ;
/** 网点名称 */
@ApiModelProperty(name = "网点名称",notes = "")
private String outletName ;
/** 支行机构号 */
@ApiModelProperty(name = "支行机构号",notes = "")
private Long branchId ;
/** 支行名称 */
@ApiModelProperty(name = "支行名称",notes = "")
private String branchName ;
private String source;
/** 锁定标识 */
@ApiModelProperty(name = "锁定标识",notes = "")
private Boolean lockFlag ;
}

View File

@@ -0,0 +1,60 @@
package com.ruoyi.ibs.cmpm.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/15
**/
@Data
public class GridCmpmRetail {
/** id */
@TableId(type = IdType.AUTO)
@ApiModelProperty(name = "id",notes = "")
private Long id ;
/** 客户号 */
@ApiModelProperty(name = "客户号",notes = "")
private String custId ;
/** 身份证号 */
@ApiModelProperty(name = "身份证号",notes = "")
private String custIdc ;
/** 统信码 */
@ApiModelProperty(name = "统信码",notes = "")
private String usci;
/** 客户内码 */
@ApiModelProperty(name = "客户内码",notes = "")
private String custIdn ;
/** 客户姓名 */
@ApiModelProperty(name = "客户姓名",notes = "")
private String custName ;
/** 客户层级 */
@ApiModelProperty(name = "客户层级",notes = "")
private String custLevel ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "客户经理柜员号",notes = "")
private String userName ;
/** 客户经理姓名 */
@ApiModelProperty(name = "客户经理姓名",notes = "")
private String nickName ;
/** 网点机构号 */
@ApiModelProperty(name = "网点机构号",notes = "")
private Long outletId ;
/** 网点名称 */
@ApiModelProperty(name = "网点名称",notes = "")
private String outletName ;
/** 支行机构号 */
@ApiModelProperty(name = "支行机构号",notes = "")
private Long branchId ;
/** 支行名称 */
@ApiModelProperty(name = "支行名称",notes = "")
private String branchName ;
private String source;
/** 锁定标识 */
@ApiModelProperty(name = "锁定标识",notes = "")
private Boolean lockFlag ;
}

View File

@@ -0,0 +1,105 @@
package com.ruoyi.ibs.cmpm.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/10/20
*
* ALTER TABLE ibs.grid_cmpm_transfer ADD cust_type varchar(100) NULL COMMENT '客户类型 0个人1商户2企业';
**/
@Data
public class GridCmpmTransfer {
/** id */
@ApiModelProperty(value = "id",notes = "")
@TableId(value = "id", type = IdType.AUTO)
private Long id ;
@ApiModelProperty(value = "0移交 1认领",notes = "")
private String transferLabel;
/** 移交类型 网点内 支行内 跨支行 */
@ApiModelProperty(value = "移交类型 0网点内 1支行内 2跨支行",notes = "")
private Integer transferType ;
/** 移交状态 审批中 通过 拒绝 */
@ApiModelProperty(value = "移交状态 0网点审批中 1支行审批中 2总行审批中 3通过 -1拒绝",notes = "")
private String transferStatus ;
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售retail 对公corporate 对公账户corporate_account",notes = "")
private String gridType ;
/** 归属总行 */
@ApiModelProperty(value = "归属总行",notes = "")
private String headId ;
/** 移交客户名称 */
@ApiModelProperty(value = "移交客户名称",notes = "")
private String custName ;
/** 移交客户号 */
@ApiModelProperty(value = "移交客户号",notes = "")
private String custId ;
/** 移交客户类型 */
@ApiModelProperty(value = "移交客户类型",notes = "")
private String custType ;
/** 移交客户账号 */
@ApiModelProperty(value = "移交客户账号",notes = "")
private String accountNo ;
/** 原客户经理柜员号 */
@ApiModelProperty(value = "原客户经理柜员号",notes = "")
private String prevUserName ;
/** 原归属网点 */
@ApiModelProperty(value = "原归属网点",notes = "")
private Long prevOutletId ;
/** 原归属支行 */
@ApiModelProperty(value = "原归属支行",notes = "")
private Long prevBranchId ;
/** 新客户经理柜员号 */
@ApiModelProperty(value = "新客户经理柜员号",notes = "")
private String nextUserName ;
/** 新归属网点 */
@ApiModelProperty(value = "新归属网点",notes = "")
private Long nextOutletId ;
/** 新归属支行 */
@ApiModelProperty(value = "新归属支行",notes = "")
private Long nextBranchId ;
/** 网点审批人 */
@ApiModelProperty(value = "网点审批人",notes = "")
private String outletApprover ;
/** 网点审批结果 */
@ApiModelProperty(value = "网点审批结果",notes = "")
private Boolean outletApproveResult ;
/** 网点审批时间 */
@ApiModelProperty(value = "网点审批时间",notes = "")
private Date outletApproveTime ;
/** 支行审批人 */
@ApiModelProperty(value = "支行审批人",notes = "")
private String branchApprover ;
/** 支行审批结果 */
@ApiModelProperty(value = "支行审批结果",notes = "")
private Boolean branchApproveResult ;
/** 支行审批时间 */
@ApiModelProperty(value = "支行审批时间",notes = "")
private Date branchApproveTime ;
/** 总行审批人 */
@ApiModelProperty(value = "总行审批人",notes = "")
private String headApprover ;
/** 总行审批结果 */
@ApiModelProperty(value = "总行审批结果",notes = "")
private Boolean headApproveResult ;
/** 总行审批时间 */
@ApiModelProperty(value = "总行审批时间",notes = "")
private Date headApproveTime ;
/** 创建时间 */
@ApiModelProperty(value = "创建时间",notes = "")
@TableField(fill = FieldFill.INSERT)
private Date createTime ;
/** 更新时间 */
@ApiModelProperty(value = "更新时间",notes = "")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime ;
}

View File

@@ -0,0 +1,87 @@
package com.ruoyi.ibs.cmpm.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/12/10
**/
@Data
public class VisitCustReach {
/** 主键 */
@ApiModelProperty(value = "主键",notes = "")
@TableId(type = IdType.AUTO)
private Long id ;
/** 客户号 */
@ApiModelProperty(value = "客户号",notes = "")
private String custId ;
/** 客户内码 */
@ApiModelProperty(value = "客户内码",notes = "")
private String custIdn ;
/** 客户名称 */
@ApiModelProperty(value = "客户名称",notes = "")
private String custName ;
/** 手机号 */
@ApiModelProperty(value = "手机号",notes = "")
private String mobile ;
/** 电访计划时间 */
@ApiModelProperty(value = "电访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telPlanDate ;
/** 电访计划内容 */
@ApiModelProperty(value = "电访计划内容",notes = "")
private String telPlanRemark ;
/** 电访总结时间 */
@ApiModelProperty(value = "电访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telSummaryDate ;
/** 电访总结内容 */
@ApiModelProperty(value = "电访总结内容",notes = "")
private String telSummaryRemark ;
/** 面访计划时间 */
@ApiModelProperty(value = "面访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitPlanDate ;
/** 面访计划内容 */
@ApiModelProperty(value = "面访计划内容",notes = "")
private String visitPlanRemark ;
/** 面访总结时间 */
@ApiModelProperty(value = "面访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitSummaryDate ;
/** 面访总结内容 */
@ApiModelProperty(value = "面访总结内容",notes = "")
private String visitSummaryRemark ;
/** 机构号 */
@ApiModelProperty(value = "机构号",notes = "")
private Long deptId ;
/** 创建者 */
@ApiModelProperty(value = "创建者",notes = "")
@TableField(fill = FieldFill.INSERT)
private String createBy ;
/** 创建时间 */
@ApiModelProperty(value = "创建时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT)
private Date createTime ;
/** 更新者 */
@ApiModelProperty(value = "更新者",notes = "")
@TableField(fill = FieldFill.INSERT_UPDATE)
private String updateBy ;
/** 更新时间 */
@ApiModelProperty(value = "更新时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime ;
/** 提交标识 */
@ApiModelProperty(value = "提交标识",notes = "")
private Boolean submitFlag;
}

View File

@@ -0,0 +1,97 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* 零售星级客户管户明细表
*
* @author ruoyi
* @date 2024-11-20
*/
@Data
@ApiModel(description = "零售星级客户管户明细表")
public class DwbRetailCustLevelManagerDetailVO {
/** id */
@ApiModelProperty(value = "id")
private Long id;
/** 网点号 */
@ApiModelProperty(value = "网点号")
private String outletId;
/** 网点名 */
@ApiModelProperty(value = "网点名")
private String outletName;
/** 支行号 */
@ApiModelProperty(value = "支行号")
private String branchId;
/** 支行名 */
@ApiModelProperty(value = "支行名")
private String branchName;
/** 客户名称 */
@ApiModelProperty(value = "客户名称")
private String custName;
/** 客户证件号 */
@ApiModelProperty(value = "客户证件号")
private String custIdc;
/** 客户内码 */
@ApiModelProperty(value = "客户内码")
private String custIsn;
/** 年龄 */
@ApiModelProperty(value = "年龄")
private String custAge;
/** 性别 */
@ApiModelProperty(value = "性别")
private String custSex;
/** 联系电话 */
@ApiModelProperty(value = "联系电话")
private String custPhone;
/** 联系地址 */
@ApiModelProperty(value = "联系地址")
private String custAddress;
/** 总资产余额 */
@ApiModelProperty(value = "总资产余额")
private BigDecimal custAumBal;
/** 总资产余额较上月变动 */
@ApiModelProperty(value = "总资产余额较上月变动")
private BigDecimal aumBalCompLm;
/** 总资产月日均 */
@ApiModelProperty(value = "总资产月日均")
private BigDecimal custAumMonthAvg;
/** 客户星级 */
@ApiModelProperty(value = "客户星级")
private String custLevel;
/** 星级较上月变动 */
@ApiModelProperty(value = "星级较上月变动")
private String custLevelCompLm;
/** 责任人 */
@ApiModelProperty(value = "责任人")
private String managerName;
/** 责任人柜员号 */
@ApiModelProperty(value = "责任人柜员号")
private String managerId;
}

View File

@@ -0,0 +1,44 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Map;
@Data
public class DwbRetailResultVO {
/** 总资产余额 */
@ApiModelProperty(value = "总资产余额")
private BigDecimal custAumBal;
/** 总资产余额-上月 */
@ApiModelProperty(value = "总资产余额-上月")
private BigDecimal custAumBalLm;
/** 总资产余额较上月变动 */
@ApiModelProperty(value = "总资产余额较上月变动")
private BigDecimal aumBalCompLm;
/** 总资产月日均 */
@ApiModelProperty(value = "总资产月日均")
private BigDecimal custAumMonthAvg;
/** 总资产月日均-上月 */
@ApiModelProperty(value = "总资产月日均-上月")
private BigDecimal custAumMonthAvgLm;
/** 总资产月日均较上月变动 */
@ApiModelProperty(value = "总资产月日均较上月变动")
private BigDecimal custAumMonthAvgCompLm;
/** 各星级客户数量统计 */
@ApiModelProperty(value = "各星级客户数量统计")
private Map<String, Integer> custLevelCount;
/** 各星级客户数较上月变动 */
@ApiModelProperty(value = "各星级客户数较上月变动")
private Map<String, Integer> custLevelCompLm;
}

View File

@@ -0,0 +1,36 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/11/17
**/
@Data
public class GridCmpmClaimVO {
@ApiModelProperty(value = "客户类型",notes = "")
private String custType;
/** 移交客户名称 */
@ApiModelProperty(value = "移交客户名称",notes = "")
private String custName ;
/** 移交客户号 */
@ApiModelProperty(value = "移交客户号",notes = "")
private String custId ;
/** 移交客户账号 */
@ApiModelProperty(value = "移交客户账号",notes = "")
private String accountNo ;
@ApiModelProperty(value = "柜员号",notes = "")
private String userName;
@ApiModelProperty(value = "柜员名",notes = "")
private String nickName;
@ApiModelProperty(value = "认领状态说明",notes = "")
private String claimStatus;
@ApiModelProperty(value = "可否进行认领",notes = "")
private Boolean claimFlag;
}

View File

@@ -0,0 +1,95 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/10/22
**/
@Data
public class GridCmpmTransferVO {
/** id */
@ApiModelProperty(value = "id",notes = "")
private Long id ;
@ApiModelProperty(value = "0移交 1认领",notes = "")
private String transferLabel;
/** 移交类型 网点内 支行内 跨支行 */
@ApiModelProperty(value = "移交类型 0网点内 1支行内 2跨支行",notes = "")
private Integer transferType ;
/** 移交状态 审批中 通过 拒绝 */
@ApiModelProperty(value = "移交状态 0网点审批中 1支行审批中 2总行审批中 3通过 -1拒绝",notes = "")
private String transferStatus ;
/** 移交网格 零售 对公 对公账户 */
@ApiModelProperty(value = "移交网格 零售 对公 对公账户",notes = "")
private String gridType ;
/** 归属总行 */
@ApiModelProperty(value = "归属总行",notes = "")
private String headId ;
/** 移交客户类型 */
@ApiModelProperty(value = "移交客户类型",notes = "")
private String custType ;
/** 移交客户名称 */
@ApiModelProperty(value = "移交客户名称",notes = "")
private String custName ;
/** 移交客户号 */
@ApiModelProperty(value = "移交客户号",notes = "")
private String custId ;
/** 移交客户账号 */
@ApiModelProperty(value = "移交客户账号",notes = "")
private String accountNo ;
/** 原客户经理柜员号 */
@ApiModelProperty(value = "原客户经理柜员号",notes = "")
private String prevUser ;
/** 原归属网点 */
@ApiModelProperty(value = "原归属网点",notes = "")
private Long prevOutletId ;
/** 原归属支行 */
@ApiModelProperty(value = "原归属支行",notes = "")
private Long prevBranchId ;
/** 新客户经理柜员号 */
@ApiModelProperty(value = "新客户经理柜员号",notes = "")
private String nextUser ;
/** 新归属网点 */
@ApiModelProperty(value = "新归属网点",notes = "")
private Long nextOutletId ;
/** 新归属支行 */
@ApiModelProperty(value = "新归属支行",notes = "")
private Long nextBranchId ;
/** 网点审批人 */
@ApiModelProperty(value = "网点审批人",notes = "")
private String outletApprover ;
/** 网点审批结果 */
@ApiModelProperty(value = "网点审批结果",notes = "")
private String outletApproveResult ;
/** 网点审批时间 */
@ApiModelProperty(value = "网点审批时间",notes = "")
private Date outletApproveTime ;
/** 支行审批人 */
@ApiModelProperty(value = "支行审批人",notes = "")
private String branchApprover ;
/** 支行审批结果 */
@ApiModelProperty(value = "支行审批结果",notes = "")
private String branchApproveResult ;
/** 支行审批时间 */
@ApiModelProperty(value = "支行审批时间",notes = "")
private Date branchApproveTime ;
/** 总行审批人 */
@ApiModelProperty(value = "总行审批人",notes = "")
private String headApprover ;
/** 总行审批结果 */
@ApiModelProperty(value = "总行审批结果",notes = "")
private String headApproveResult ;
/** 总行审批时间 */
@ApiModelProperty(value = "总行审批时间",notes = "")
private Date headApproveTime ;
/** 创建时间 */
@ApiModelProperty(value = "创建时间",notes = "")
private Date createTime ;
/** 更新时间 */
@ApiModelProperty(value = "更新时间",notes = "")
private Date updateTime ;
}

View File

@@ -0,0 +1,65 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/10/15
**/
@Data
public class GridCmpmVO {
/** id */
@ApiModelProperty(name = "id",notes = "")
private Long id ;
/** 客户号 */
@ApiModelProperty(name = "客户号",notes = "")
private String custId ;
/** 身份证号 */
@ApiModelProperty(name = "身份证号",notes = "")
private String custIdc ;
/** 客户内码 */
@ApiModelProperty(name = "客户内码",notes = "")
private String custIdn ;
@ApiModelProperty(name = "客户类型",notes = "")
private String custType ;
@ApiModelProperty(name = "统信码",notes = "")
private String usci;
private String accountNo;
/** 客户姓名 */
@ApiModelProperty(name = "客户姓名",notes = "")
private String custName ;
/** 客户层级 */
@ApiModelProperty(name = "客户层级",notes = "")
private String custLevel ;
/** 客户经理柜员号 */
@ApiModelProperty(name = "客户经理柜员号",notes = "")
private String userName ;
/** 客户经理姓名 */
@ApiModelProperty(name = "客户经理姓名",notes = "")
private String nickName ;
/** 网点机构号 */
@ApiModelProperty(name = "网点机构号",notes = "")
private Long outletId ;
/** 网点名称 */
@ApiModelProperty(name = "网点名称",notes = "")
private String outletName ;
/** 支行机构号 */
@ApiModelProperty(name = "支行机构号",notes = "")
private Long branchId ;
/** 支行名称 */
@ApiModelProperty(name = "支行名称",notes = "")
private String branchName ;
@ApiModelProperty(name = "客户来源",notes = "")
private String source;
/** 锁定标识 */
@ApiModelProperty(name = "锁定标识",notes = "")
private Boolean lockFlag ;
@ApiModelProperty(name = "是否可以移交",notes = "")
private Boolean transferFlag;
}

View File

@@ -0,0 +1,67 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Data
public class VisitCustReachListVO {
private Long id ;
/** 客户号 */
@ApiModelProperty(value = "客户号",notes = "")
private String custId ;
/** 客户内码 */
@ApiModelProperty(value = "客户内码",notes = "")
private String custIdn ;
/** 客户名称 */
@ApiModelProperty(value = "客户名称",notes = "")
private String custName ;
/** 手机号 */
@ApiModelProperty(value = "手机号",notes = "")
private String mobile ;
/** 电访计划时间 */
@ApiModelProperty(value = "电访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telPlanDate ;
/** 电访计划内容 */
@ApiModelProperty(value = "电访计划内容",notes = "")
private String telPlanRemark ;
/** 电访总结时间 */
@ApiModelProperty(value = "电访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telSummaryDate ;
/** 电访总结内容 */
@ApiModelProperty(value = "电访总结内容",notes = "")
private String telSummaryRemark ;
/** 面访计划时间 */
@ApiModelProperty(value = "面访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitPlanDate ;
/** 面访计划内容 */
@ApiModelProperty(value = "面访计划内容",notes = "")
private String visitPlanRemark ;
/** 面访总结时间 */
@ApiModelProperty(value = "面访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitSummaryDate ;
/** 面访总结内容 */
@ApiModelProperty(value = "面访总结内容",notes = "")
private String visitSummaryRemark ;
@ApiModelProperty(value = "柜员名称",notes = "")
private String nickName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间",notes = "")
private Date updateTime;
@ApiModelProperty(value = "可编辑标识",notes = "")
private Boolean editFlag;
}

View File

@@ -0,0 +1,57 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Data
public class VisitCustReachVO {
private Long id ;
/** 客户号 */
@ApiModelProperty(value = "客户号",notes = "")
private String custId ;
/** 客户内码 */
@ApiModelProperty(value = "客户内码",notes = "")
private String custIdn ;
/** 客户名称 */
@ApiModelProperty(value = "客户名称",notes = "")
private String custName ;
/** 手机号 */
@ApiModelProperty(value = "手机号",notes = "")
private String mobile ;
/** 电访计划时间 */
@ApiModelProperty(value = "电访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telPlanDate ;
/** 电访计划内容 */
@ApiModelProperty(value = "电访计划内容",notes = "")
private String telPlanRemark ;
/** 电访总结时间 */
@ApiModelProperty(value = "电访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date telSummaryDate ;
/** 电访总结内容 */
@ApiModelProperty(value = "电访总结内容",notes = "")
private String telSummaryRemark ;
/** 面访计划时间 */
@ApiModelProperty(value = "面访计划时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitPlanDate ;
/** 面访计划内容 */
@ApiModelProperty(value = "面访计划内容",notes = "")
private String visitPlanRemark ;
/** 面访总结时间 */
@ApiModelProperty(value = "面访总结时间",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date visitSummaryDate ;
/** 面访总结内容 */
@ApiModelProperty(value = "面访总结内容",notes = "")
private String visitSummaryRemark ;
}

View File

@@ -0,0 +1,19 @@
package com.ruoyi.ibs.cmpm.domain.vo;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Data
public class VisitCustVO {
private String custId;
private String custIdn;
private String custName;
private String mobile;
}

View File

@@ -0,0 +1,70 @@
package com.ruoyi.ibs.cmpm.mapper;
import com.ruoyi.ibs.cmpm.domain.dto.CustLevelDTO;
import com.ruoyi.ibs.cmpm.domain.dto.CustManagerDTO;
import com.ruoyi.ibs.cmpm.domain.dto.GridCmpmListDTO;
import com.ruoyi.ibs.cmpm.domain.dto.GridCmpmUpdateDTO;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpm;
import com.ruoyi.ibs.cmpm.domain.vo.DwbRetailCustLevelManagerDetailVO;
import com.ruoyi.ibs.cmpm.domain.vo.DwbRetailResultVO;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmClaimVO;
import com.ruoyi.ibs.customerselect.domain.CustBaseInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/26
**/
@Mapper
public interface GridCmpmMapper {
List<GridCmpm> selectManageList(GridCmpmListDTO gridCmpmListDTO);
List<GridCmpm> selectCommonList(GridCmpmListDTO gridCmpmListDTO);
GridCmpm getGridCmpmByCustKey(@Param("custId") String custId, @Param("accountNo") String accountNo, @Param("userName") String userName,
@Param("gridType") String gridType, @Param("deptCode") String deptCode);
List<GridCmpm> getGridCmpmByUserName(@Param("userName") String userName, @Param("deptCode") String deptCode, @Param("gridType") String gridType);
List<GridCmpm> queryGridCmpmByCustKey( @Param("deptCode") String deptCode, @Param("gridType") String gridType,
@Param("custIds") List<String> custIds, @Param("accountNos") List<String> accountNos );
Long updateGridCmpm(GridCmpmUpdateDTO gridCmpmUpdateDTO);
List<String> getAllCustLevel(@Param("gridType") String gridType);
String getCustLevel(CustLevelDTO custLevelDTO);
List<GridCmpmClaimVO> queryClaimList(@Param("deptCode") String deptCode, @Param("gridType") String gridType, @Param("custKey") String custKey);
List<DwbRetailCustLevelManagerDetailVO> getCustManagerList(CustManagerDTO custManagerDTO);
int getCustLevelCount(CustManagerDTO custManagerDTO);
List<CustBaseInfo> selectCustInfoFromGridCmpm(CustBaseInfo custBaseInfo);
List<CustBaseInfo> queryCustInfoFromGridCmpm(CustBaseInfo custBaseInfo);
DwbRetailResultVO getCustManagerResult(CustManagerDTO custManagerDTO);
List<String> getCustLevelList();
int getCustCountByLevel(@Param("dto") CustManagerDTO custManagerDTO, @Param("time") String time);
List<String> selectDeptListByRole(@Param("role") String role);
List<String> selectManagerList();
// List<CustBaseInfo> selectCustInfoRetailFromGridCmpm(CustBaseInfo custBaseInfo);
//
// List<CustBaseInfo> selectCustInfoMerchantFromGridCmpm(CustBaseInfo custBaseInfo);
//
// List<CustBaseInfo> selectCustInfoBusinessFromGridCmpm(CustBaseInfo custBaseInfo);
}

View File

@@ -0,0 +1,26 @@
package com.ruoyi.ibs.cmpm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpmRetail;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/26
**/
@Mapper
public interface GridCmpmRetailMapper extends BaseMapper<GridCmpmRetail> {
GridCmpmRetail getGridCmpmRetailByCustId(@Param("custId") String custId, @Param("deptCode") String deptCode);
List<GridCmpmRetail> getGridCmpmRetailByUserName(@Param("userName") String userName, @Param("deptCode") String deptCode);
Long updateGridCmpmRetail(@Param("custId") String custId, @Param("deptCode") String deptCode,
@Param("userName") String userName, @Param("nickName") String nickName,
@Param("outletId") Long outletId, @Param("outletName") String outletName,
@Param("branchId") Long branchId, @Param("branchName") String branchName);
List<String> getAllCustLevel();
}

View File

@@ -0,0 +1,27 @@
package com.ruoyi.ibs.cmpm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.cmpm.domain.dto.GridCmpmTransferListDTO;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpmTransfer;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmTransferVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/26
**/
@Mapper
public interface GridCmpmTransferMapper extends BaseMapper<GridCmpmTransfer> {
List<GridCmpmTransferVO> getGridCmpmTransferList(GridCmpmTransferListDTO gridCmpmTransferListDTO);
List<GridCmpmTransferVO> getGridCmpmTransferHistoryList(GridCmpmTransferListDTO gridCmpmTransferListDTO);
Long checkExistTransferCust(@Param("custKey") String custKey, @Param ("userName") String userName);
Long batchInsert(@Param("gridCmpmTransferList") List<GridCmpmTransfer> gridCmpmTransferList);
}

View File

@@ -0,0 +1,26 @@
package com.ruoyi.ibs.cmpm.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.github.pagehelper.Page;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustQueryDTO;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustReachListDTO;
import com.ruoyi.ibs.cmpm.domain.entity.VisitCustReach;
import com.ruoyi.ibs.cmpm.domain.vo.VisitCustReachListVO;
import com.ruoyi.ibs.cmpm.domain.vo.VisitCustReachVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Mapper
public interface VisitCustReachMapper extends BaseMapper<VisitCustReach> {
List<VisitCustReachVO> queryVisitCust(VisitCustQueryDTO visitCustQueryDTO);
Page<VisitCustReachListVO> queryVisitCustReachList(VisitCustReachListDTO visitCustReachListDTO);
List<VisitCustReachListVO> queryVisitCustReachListByCustId(String custId);
}

View File

@@ -0,0 +1,179 @@
package com.ruoyi.ibs.cmpm.service;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.ibs.cmpm.mapper.GridCmpmMapper;
import com.ruoyi.ibs.customerselect.domain.ContinuousParam;
import com.ruoyi.ibs.customerselect.domain.CustBaseInfo;
import com.ruoyi.ibs.customerselect.domain.DiscreteParam;
import com.ruoyi.ibs.customerselect.domain.vo.GridRelateVO;
import com.ruoyi.ibs.customerselect.mapper.GridSelectMapper;
import com.ruoyi.ibs.customerselect.mapper.GridSummarCountMapper;
import com.ruoyi.ibs.customerselect.service.MyCustomerGridSelectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author 吴凯程
* @Date 2025/11/21
**/
@Service
public class GridCmpmCustService {
@Resource
private GridCmpmMapper gridCmpmMapper;
@Resource
private GridCmpmService gridCmpmService;
@Resource
private GridSelectMapper gridSelectMapper;
@Resource
private MyCustomerGridSelectService myCustomerGridSelectService;
@Autowired
private GridSummarCountMapper gridSummarCountMapper;
/**
* 海宁查询绩效管户
* 查询归属于该用户的客户,不考虑机构层级
* @param custBaseInfoParam
* @return
*/
public List<CustBaseInfo> selectCustInfoList(CustBaseInfo custBaseInfoParam) {
custBaseInfoParam.setCmpmUserName(SecurityUtils.getUsername());
custBaseInfoParam.setDeptCode(SecurityUtils.getHeadId());
//分页参数
custBaseInfoParam.setStart((custBaseInfoParam.getNum() - 1) * custBaseInfoParam.getSize());
custBaseInfoParam.setEnd(custBaseInfoParam.getNum() * custBaseInfoParam.getSize());
StringBuilder metricStrBuilder = new StringBuilder();
if (custBaseInfoParam.getContinuousParams() != null && custBaseInfoParam.getContinuousParams().size() > 0){
for (ContinuousParam info : custBaseInfoParam.getContinuousParams()){
if (metricStrBuilder.length() > 0) {
metricStrBuilder.append(",");
}
metricStrBuilder.append(gridSummarCountMapper.selectDictLabelByDictValue(info.getKey()));
}
}
if (custBaseInfoParam.getDiscreteParams() != null && custBaseInfoParam.getDiscreteParams().size() > 0){
for (DiscreteParam info:custBaseInfoParam.getDiscreteParams()){
if (metricStrBuilder.length() > 0) {
metricStrBuilder.append(",");
}
metricStrBuilder.append(gridSummarCountMapper.selectDictLabelByDictValue(info.getKey()));
}
}
List<CustBaseInfo> collect = gridCmpmMapper.selectCustInfoFromGridCmpm(custBaseInfoParam);
List<String> custIds = collect.stream().map(CustBaseInfo::getCustId).collect(Collectors.toList());
if (!custIds.isEmpty()){
List<GridRelateVO> drawGridRelate = gridSelectMapper.getDrawGridRelate(custIds);
List<GridRelateVO> regionGridRelate = gridSelectMapper.getRegionGridRelate(custIds);
List<GridRelateVO> virtualGridRelate = myCustomerGridSelectService.getVirtualGridRelate(custIds);
for (CustBaseInfo custBaseInfo : collect) {
drawGridRelate.stream().filter(gridRelateVO -> gridRelateVO.getCustId().equals(custBaseInfo.getCustId())).findFirst().ifPresent(gridRelateVO -> {
custBaseInfo.setDrawBranchNames(gridRelateVO.getBranchNames());
custBaseInfo.setDrawOutletNames(gridRelateVO.getOutletNames());
custBaseInfo.setDrawUserNames(gridRelateVO.getUserNames());
custBaseInfo.setDrawGridName(gridRelateVO.getGridNames());
});
regionGridRelate.stream().filter(gridRelateVO -> gridRelateVO.getCustId().equals(custBaseInfo.getCustId())).findFirst().ifPresent(gridRelateVO -> {
custBaseInfo.setRegionBranchNames(gridRelateVO.getBranchNames());
custBaseInfo.setRegionOutletNames(gridRelateVO.getOutletNames());
custBaseInfo.setRegionUserNames(gridRelateVO.getUserNames());
custBaseInfo.setRegionTopGridName(gridRelateVO.getTopGridName());
custBaseInfo.setRegionSecGridName(gridRelateVO.getSecGridName());
custBaseInfo.setBelongBranchName(gridRelateVO.getBranchNames());
custBaseInfo.setBelongOutletName(gridRelateVO.getOutletNames());
custBaseInfo.setBelongUserNameList(gridRelateVO.getUserNames());
});
virtualGridRelate.stream().filter(gridRelateVO -> gridRelateVO.getCustId().equals(custBaseInfo.getCustId())).findFirst().ifPresent(gridRelateVO -> {
custBaseInfo.setVirtualBranchNames(gridRelateVO.getBranchNames());
custBaseInfo.setVirtualOutletNames(gridRelateVO.getOutletNames());
custBaseInfo.setVirtualUserNames(gridRelateVO.getUserNames());
custBaseInfo.setVirtualGridName(gridRelateVO.getGridNames());
});
}
}
return collect;
}
/**
* 通用查询绩效管户关系,考虑机构层级
* @param custBaseInfoParam
* @return
*/
public List<CustBaseInfo> queryCustInfoList(CustBaseInfo custBaseInfoParam) {
custBaseInfoParam.setDeptCode(SecurityUtils.getHeadId());
String userRole = SecurityUtils.userRole();
if("branch".equalsIgnoreCase(userRole)){
custBaseInfoParam.setCmpmBranchId(SecurityUtils.getDeptId());
}else if("outlet".equalsIgnoreCase(userRole)){
custBaseInfoParam.setCmpmOutletId(SecurityUtils.getDeptId());
}else if ("manager".equalsIgnoreCase(userRole)){
custBaseInfoParam.setCmpmUserName(SecurityUtils.getUsername());
}
//分页参数
custBaseInfoParam.setStart((custBaseInfoParam.getNum() - 1) * custBaseInfoParam.getSize());
custBaseInfoParam.setEnd(custBaseInfoParam.getNum() * custBaseInfoParam.getSize());
StringBuilder metricStrBuilder = new StringBuilder();
if (custBaseInfoParam.getContinuousParams() != null && custBaseInfoParam.getContinuousParams().size() > 0){
for (ContinuousParam info : custBaseInfoParam.getContinuousParams()){
if (metricStrBuilder.length() > 0) {
metricStrBuilder.append(",");
}
metricStrBuilder.append(gridSummarCountMapper.selectDictLabelByDictValue(info.getKey()));
}
}
if (custBaseInfoParam.getDiscreteParams() != null && custBaseInfoParam.getDiscreteParams().size() > 0){
for (DiscreteParam info:custBaseInfoParam.getDiscreteParams()){
if (metricStrBuilder.length() > 0) {
metricStrBuilder.append(",");
}
metricStrBuilder.append(gridSummarCountMapper.selectDictLabelByDictValue(info.getKey()));
}
}
List<CustBaseInfo> collect = gridCmpmMapper.queryCustInfoFromGridCmpm(custBaseInfoParam);
List<String> custIds = collect.stream().map(CustBaseInfo::getCustId).collect(Collectors.toList());
if (!custIds.isEmpty()){
List<GridRelateVO> drawGridRelate = gridSelectMapper.getDrawGridRelate(custIds);
List<GridRelateVO> regionGridRelate = gridSelectMapper.getRegionGridRelate(custIds);
List<GridRelateVO> virtualGridRelate = myCustomerGridSelectService.getVirtualGridRelate(custIds);
for (CustBaseInfo custBaseInfo : collect) {
drawGridRelate.stream().filter(gridRelateVO -> gridRelateVO.getCustId().equals(custBaseInfo.getCustId())).findFirst().ifPresent(gridRelateVO -> {
custBaseInfo.setDrawBranchNames(gridRelateVO.getBranchNames());
custBaseInfo.setDrawOutletNames(gridRelateVO.getOutletNames());
custBaseInfo.setDrawUserNames(gridRelateVO.getUserNames());
custBaseInfo.setDrawGridName(gridRelateVO.getGridNames());
});
regionGridRelate.stream().filter(gridRelateVO -> gridRelateVO.getCustId().equals(custBaseInfo.getCustId())).findFirst().ifPresent(gridRelateVO -> {
custBaseInfo.setRegionBranchNames(gridRelateVO.getBranchNames());
custBaseInfo.setRegionOutletNames(gridRelateVO.getOutletNames());
custBaseInfo.setRegionUserNames(gridRelateVO.getUserNames());
custBaseInfo.setRegionTopGridName(gridRelateVO.getTopGridName());
custBaseInfo.setRegionSecGridName(gridRelateVO.getSecGridName());
custBaseInfo.setBelongBranchName(gridRelateVO.getBranchNames());
custBaseInfo.setBelongOutletName(gridRelateVO.getOutletNames());
custBaseInfo.setBelongUserNameList(gridRelateVO.getUserNames());
});
virtualGridRelate.stream().filter(gridRelateVO -> gridRelateVO.getCustId().equals(custBaseInfo.getCustId())).findFirst().ifPresent(gridRelateVO -> {
custBaseInfo.setVirtualBranchNames(gridRelateVO.getBranchNames());
custBaseInfo.setVirtualOutletNames(gridRelateVO.getOutletNames());
custBaseInfo.setVirtualUserNames(gridRelateVO.getUserNames());
custBaseInfo.setVirtualGridName(gridRelateVO.getGridNames());
});
}
}
return collect;
}
}

View File

@@ -0,0 +1,282 @@
package com.ruoyi.ibs.cmpm.service;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.ibs.cmpm.domain.dto.CustLevelDTO;
import com.ruoyi.ibs.cmpm.domain.dto.CustManagerDTO;
import com.ruoyi.ibs.cmpm.domain.dto.GridCmpmListDTO;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpm;
import com.ruoyi.ibs.cmpm.domain.vo.DwbRetailCustLevelManagerDetailVO;
import com.ruoyi.ibs.cmpm.domain.vo.DwbRetailResultVO;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmVO;
import com.ruoyi.ibs.cmpm.mapper.GridCmpmMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @Author 吴凯程
* @Date 2025/10/15
**/
@Service
public class GridCmpmService {
@Resource
private GridCmpmMapper gridCmpmMapper;
@Resource
private GridCmpmTransferService gridCmpmTransferService;
@Resource
private RedisCache redisCache;
private final String CUST_LEVEL_COUNT_KEY = "GRID_CMPM_CUST_LEVEL_COUNT_";
public List<GridCmpmVO> selectManageList(GridCmpmListDTO gridCmpmRetailListDTO){
String userRole = SecurityUtils.userRole();
if("branch".equalsIgnoreCase(userRole)){
gridCmpmRetailListDTO.setBranchId(SecurityUtils.getDeptId());
}else if("outlet".equalsIgnoreCase(userRole)){
gridCmpmRetailListDTO.setOutletId(SecurityUtils.getDeptId());
}else if ("manager".equalsIgnoreCase(userRole)){
gridCmpmRetailListDTO.setCurUserName(SecurityUtils.getUsername());
}
List<GridCmpm> gridCmpms = gridCmpmMapper.selectManageList(gridCmpmRetailListDTO);
return gridCmpms.stream().map(gridCmpm -> {
GridCmpmVO gridCmpmVO = new GridCmpmVO();
BeanUtils.copyProperties(gridCmpm,gridCmpmVO);
if (SecurityUtils.userRole().equals("branch") || SecurityUtils.userRole().equals("head") || SecurityUtils.isHead()){
gridCmpmVO.setTransferFlag( !gridCmpmTransferService.checkExistTransferCust(gridCmpm.getCustId(), gridCmpm.getUserName()) );
}else{
// 无法移交条件: 1.客户存在移交审批中的记录 2.客户经理为当前用户
gridCmpmVO.setTransferFlag( (!gridCmpmTransferService.checkExistTransferCust(gridCmpm.getCustId(), gridCmpm.getUserName())) && gridCmpm.getUserName().equals(SecurityUtils.getUsername()) );
}
return gridCmpmVO;
}).collect(Collectors.toList());
}
public List<GridCmpmVO> selectCommonList(GridCmpmListDTO gridCmpmListDTO){
List<GridCmpm> gridCmpms = gridCmpmMapper.selectCommonList(gridCmpmListDTO);
return gridCmpms.stream().map(gridCmpm -> {
GridCmpmVO gridCmpmRetailVO = new GridCmpmVO();
BeanUtils.copyProperties(gridCmpm,gridCmpmRetailVO);
gridCmpmRetailVO.setTransferFlag(!gridCmpmTransferService.checkExistTransferCust(gridCmpm.getCustId(), null));
return gridCmpmRetailVO;
}).collect(Collectors.toList());
}
public String getCustLevelByCust(CustLevelDTO custLevelDTO){
if (custLevelDTO.getCustType().equals("0") || custLevelDTO.getCustType().equals("1")){
custLevelDTO.setGridType("retail");
return gridCmpmMapper.getCustLevel(custLevelDTO);
}else if (Objects.nonNull(custLevelDTO.getAccountNo())){
custLevelDTO.setGridType("corporate_account");
}else {
custLevelDTO.setGridType("corporate");
}
// todo 公司部未上
return null;
}
public List<String> getAllCustLevel(String gridType){
String label = gridType +"_"+ SecurityUtils.getHeadId();
ArrayList<SysDictData> custLevelList = redisCache.getCacheObject("sys_dict:grid_cmpm_cust_level");
return custLevelList.stream().filter(sysDictData -> sysDictData.getDictLabel().equals(label)).map(sysDictData -> sysDictData.getDictValue()).sorted().collect(Collectors.toList());
}
public List<DwbRetailCustLevelManagerDetailVO> selectCustManagerList(CustManagerDTO custManagerDTO) {
String userRole = SecurityUtils.userRole();
if (userRole.equals("manager")){
//客户经理查自己
custManagerDTO.setManagerId(SecurityUtils.getUsername());
}else if (userRole.equals("outlet")){
//网点管理员查网点
custManagerDTO.setOutletId(String.valueOf(SecurityUtils.getDeptId()));
}else if (userRole.equals("branch")){
//支行管理员查支行
custManagerDTO.setBranchId(String.valueOf(SecurityUtils.getDeptId()));
}
//其他角色查全部
return gridCmpmMapper.getCustManagerList(custManagerDTO);
}
public int custLevelCount(CustManagerDTO custManagerDTO) {
String userRole = SecurityUtils.userRole();
if (userRole.equals("manager")){
//客户经理查自己
custManagerDTO.setManagerId(SecurityUtils.getUsername());
}else if (userRole.equals("outlet")){
//网点管理员查网点
custManagerDTO.setOutletId(String.valueOf(SecurityUtils.getDeptId()));
}else if (userRole.equals("branch")){
//支行管理员查支行
custManagerDTO.setBranchId(String.valueOf(SecurityUtils.getDeptId()));
}
return gridCmpmMapper.getCustLevelCount(custManagerDTO);
}
/**
* 获取AUM统计数据(只查redis)
*/
public DwbRetailResultVO selectCustManagerResult(){
String userRole = SecurityUtils.userRole();
String deptId = String.valueOf(SecurityUtils.getDeptId());
String key ;
if (userRole.equals("manager")){
key = CUST_LEVEL_COUNT_KEY + userRole + "_" + SecurityUtils.getUsername();
}else if (userRole.equals("outlet") || userRole.equals("branch")){
key = CUST_LEVEL_COUNT_KEY + userRole + "_" + deptId;
}else {
key = CUST_LEVEL_COUNT_KEY + userRole;
}
try {
if (redisCache.hasKey(key)){
String json = redisCache.getCacheObject(key);
if (json != null && !json.isEmpty()) {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(json, DwbRetailResultVO.class);
}
}
} catch (Exception e) {
throw new ServiceException("反序列化Redis缓存数据异常:" + key + e.getMessage());
}
return new DwbRetailResultVO();
}
/**
* 每月定时设置统计数据
*/
public void setCustManagerResultMonthly() {
String[] roles = {"manager", "outlet", "branch", "head", "public", "private", "ops"};
for (String role : roles) {
setCustManagerResultByRole(role);
}
}
/**
* 根据角色获取AUM统计数据
*/
private void setCustManagerResultByRole(String userRole) {
CustManagerDTO custManagerDTO = new CustManagerDTO();
if (userRole.equals("manager")){
List<String> managerList = gridCmpmMapper.selectManagerList();
if (managerList != null){
for (String manager : managerList) {
String key = CUST_LEVEL_COUNT_KEY + userRole + "_" + manager;
custManagerDTO.setManagerId(manager);
processAndCacheResult(key, custManagerDTO);
}
}
}else {
//非客户经理角色——根据角色获取deptIds
List<String> deptIds = gridCmpmMapper.selectDeptListByRole(userRole);
if (deptIds.contains("head")){
String key = CUST_LEVEL_COUNT_KEY + userRole;
processAndCacheResult(key, custManagerDTO);
}else {
for (String deptId : deptIds) {
//redisKey用于存入redis供后续查询
String key = CUST_LEVEL_COUNT_KEY + userRole + "_" + deptId;
switch (userRole) {
case "outlet":
custManagerDTO.setOutletId(deptId);
break;
case "branch":
custManagerDTO.setBranchId(deptId);
break;
}
processAndCacheResult(key, custManagerDTO);
}
}
}
}
/**
* 处理并缓存客户经理或机构的统计结果
*
* @param key Redis缓存key
* @param custManagerDTO 查询条件DTO
* @return 处理后的VO对象
*/
private void processAndCacheResult(String key, CustManagerDTO custManagerDTO) {
// 查出总资产余额、总资产余额较上月变动、总资产月日均
DwbRetailResultVO vo = gridCmpmMapper.getCustManagerResult(custManagerDTO);
if (vo.getCustAumMonthAvg() != null && vo.getCustAumMonthAvgLm() != null) {
vo.setCustAumMonthAvgCompLm(vo.getCustAumMonthAvg().subtract(vo.getCustAumMonthAvgLm()));
} else {
vo.setCustAumMonthAvgCompLm(BigDecimal.ZERO);
}
if (vo.getCustAumBal() != null && vo.getAumBalCompLm() != null) {
vo.setCustAumBalLm(vo.getCustAumBal().subtract(vo.getAumBalCompLm()));
} else {
vo.setCustAumBalLm(BigDecimal.ZERO);
}
// 获取当前各星级客户数
Map<String, Integer> currentLevelCountMap = getCustLevelCountMap(custManagerDTO, "now");
// 获取上月各星级客户数
Map<String, Integer> historyLevelCountMap = getCustLevelCountMap(custManagerDTO, "last");
Map<String, Integer> custLevelCompLm = calculateLevelChanges(historyLevelCountMap, currentLevelCountMap);
vo.setCustLevelCompLm(custLevelCompLm);
vo.setCustLevelCount(currentLevelCountMap);
ObjectMapper objectMapper = new ObjectMapper();
try{
String json = objectMapper.writeValueAsString(vo);
redisCache.setCacheObject(key, json, 31, TimeUnit.DAYS);
}catch (Exception e){
throw new ServiceException("JSON转换异常" + e.getMessage());
}
}
private Map<String, Integer> getCustLevelCountMap(CustManagerDTO custManagerDTO, String time){
List<String> custLevelList = gridCmpmMapper.getCustLevelList();
//查出各星级客户数
Map<String, Integer> custLevelCountMap = new HashMap<>();
for (String custLevel : custLevelList) {
custManagerDTO.setCustLevel(custLevel);
int count = gridCmpmMapper.getCustCountByLevel(custManagerDTO, time);
custLevelCountMap.put(custLevel, count);
}
return custLevelCountMap;
}
// 计算客户等级变化情况
private Map<String, Integer> calculateLevelChanges(Map<String, Integer> historyMap, Map<String, Integer> currentMap) {
Map<String, Integer> changesMap = new HashMap<>();
if (historyMap == null) {
// 如果没有历史数据,所有当前数据都是新增的
for (Map.Entry<String, Integer> entry : currentMap.entrySet()) {
changesMap.put(entry.getKey(), entry.getValue());
}
return changesMap;
}
// 计算每个等级的变化量(当前 - 历史 = 变化量)
// 正数表示增加,负数表示减少
for (String custLevel : currentMap.keySet()) {
Integer currentCount = currentMap.getOrDefault(custLevel, 0);
Integer historyCount = historyMap.getOrDefault(custLevel, 0);
changesMap.put(custLevel, currentCount - historyCount);
}
// 处理历史数据中有但当前数据中没有的等级这些等级的客户数变为0
for (String custLevel : historyMap.keySet()) {
if (!currentMap.containsKey(custLevel)) {
changesMap.put(custLevel, -historyMap.get(custLevel));
}
}
return changesMap;
}
}

View File

@@ -0,0 +1,361 @@
package com.ruoyi.ibs.cmpm.service;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.ibs.cmpm.domain.dto.*;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpm;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpmTransfer;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmClaimVO;
import com.ruoyi.ibs.cmpm.domain.vo.GridCmpmTransferVO;
import com.ruoyi.ibs.cmpm.mapper.GridCmpmMapper;
import com.ruoyi.ibs.cmpm.mapper.GridCmpmTransferMapper;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @Author 吴凯程
* @Date 2025/10/17
**/
@Service
@Slf4j
@EnableAsync
public class GridCmpmTransferService {
@Resource
private GridCmpmTransferMapper gridCmpmTransferMapper;
@Resource
private ISysDeptService sysDeptService;
@Resource
private ISysUserService sysUserService;
@Resource
private GridCmpmUpdateService gridCmpmUpdateService;
@Resource
private GridCmpmMapper gridCmpmMapper;
@Transactional(rollbackFor = Exception.class)
public String createGridCmpmTransfer(GridCmpmTransferDTO gridCmpmTransferDTO){
if (gridCmpmTransferDTO.getPrevUserName().equals(gridCmpmTransferDTO.getNextUserName())){
throw new ServiceException("流程前后不可选择相同的客户经理");
}
GridCmpmTransfer gridCmpmTransfer = new GridCmpmTransfer();
gridCmpmTransfer.setTransferLabel("0");
gridCmpmTransfer.setGridType(gridCmpmTransferDTO.getGridType());
gridCmpmTransfer.setPrevUserName(gridCmpmTransferDTO.getPrevUserName());
gridCmpmTransfer.setNextUserName(gridCmpmTransferDTO.getNextUserName());
UserDeptDTO prevUserDeptDTO = getUserDeptDTO(gridCmpmTransferDTO.getPrevUserName());
gridCmpmTransfer.setPrevBranchId(prevUserDeptDTO.getBranchId());
gridCmpmTransfer.setPrevOutletId(prevUserDeptDTO.getOutletId());
UserDeptDTO nextUserDeptDTO = getUserDeptDTO(gridCmpmTransferDTO.getNextUserName());
gridCmpmTransfer.setNextBranchId(nextUserDeptDTO.getBranchId());
gridCmpmTransfer.setNextOutletId(nextUserDeptDTO.getOutletId());
gridCmpmTransfer.setHeadId(prevUserDeptDTO.getDeptId().toString().substring(0,3));
GridCmpmTransfer statusAndType = setTransferStatusAndType(prevUserDeptDTO,nextUserDeptDTO);
gridCmpmTransfer.setTransferType(statusAndType.getTransferType());
gridCmpmTransfer.setTransferStatus(statusAndType.getTransferStatus());
if (gridCmpmTransferDTO.getIsFullTransfer()){
gridCmpmUpdateService.createFullTransferApprove(gridCmpmTransfer);
}else{
int i = 1;
for (TransferCustDTO transferCustDTO : gridCmpmTransferDTO.getCustList()) {
GridCmpmTransfer transfer = new GridCmpmTransfer();
BeanUtils.copyProperties(gridCmpmTransfer, transfer);
BeanUtils.copyProperties(transferCustDTO, transfer);
gridCmpmTransferMapper.insert(transfer);
log.info("开始插入第{}个审批,总共有{}个", i, gridCmpmTransferDTO.getCustList().size());
i++;
}
}
return "审批流程创建成功";
}
@Transactional(rollbackFor = Exception.class)
public String createClaim(GridCmpmClaimDTO gridCmpmClaimDTO){
int i = 1;
UserDeptDTO nextUserDeptDTO = getUserDeptDTO(gridCmpmClaimDTO.getUserName());
for (TransferCustDTO transferCustDTO : gridCmpmClaimDTO.getCustList()) {
GridCmpm gridCmpm = gridCmpmMapper.getGridCmpmByCustKey(transferCustDTO.getCustId(),
transferCustDTO.getAccountNo(), transferCustDTO.getPrevUserName(),
gridCmpmClaimDTO.getGridType(), SecurityUtils.getHeadId());
if (gridCmpmClaimDTO.getUserName().equals(gridCmpm.getUserName())){
throw new ServiceException("流程前后不可选择相同的客户经理");
}
GridCmpmTransfer gridCmpmTransfer = new GridCmpmTransfer();
BeanUtils.copyProperties(transferCustDTO, gridCmpmTransfer);
gridCmpmTransfer.setTransferLabel("1");
gridCmpmTransfer.setGridType(gridCmpmClaimDTO.getGridType());
gridCmpmTransfer.setCustType(gridCmpm.getCustType());
gridCmpmTransfer.setPrevUserName(gridCmpm.getUserName());
gridCmpmTransfer.setNextUserName(gridCmpmClaimDTO.getUserName());
UserDeptDTO prevUserDeptDTO = getUserDeptDTO(gridCmpm.getUserName());
gridCmpmTransfer.setPrevBranchId(prevUserDeptDTO.getBranchId());
gridCmpmTransfer.setPrevOutletId(prevUserDeptDTO.getOutletId());
gridCmpmTransfer.setNextBranchId(nextUserDeptDTO.getBranchId());
gridCmpmTransfer.setNextOutletId(nextUserDeptDTO.getOutletId());
gridCmpmTransfer.setHeadId(prevUserDeptDTO.getDeptId().toString().substring(0,3));
GridCmpmTransfer statusAndType = setTransferStatusAndType(prevUserDeptDTO,nextUserDeptDTO);
gridCmpmTransfer.setTransferType(statusAndType.getTransferType());
gridCmpmTransfer.setTransferStatus(statusAndType.getTransferStatus());
gridCmpmTransferMapper.insert(gridCmpmTransfer);
log.info("开始插入第{}个审批,总共有{}个", i, gridCmpmClaimDTO.getCustList().size());
i++;
}
return "审批流程创建成功";
}
private GridCmpmTransfer setTransferStatusAndType (UserDeptDTO prevUserDeptDTO, UserDeptDTO nextUserDeptDTO){
GridCmpmTransfer gridCmpmTransfer = new GridCmpmTransfer();
if (prevUserDeptDTO.getDeptType().equals("outlet")){
gridCmpmTransfer.setTransferStatus("0");
// 网点相同 网点内移交
if(Objects.nonNull(nextUserDeptDTO.getOutletId()) && prevUserDeptDTO.getOutletId().equals(nextUserDeptDTO.getOutletId())){
gridCmpmTransfer.setTransferType(0);
// 支行号相同 支行内移交
}else if (Objects.nonNull(nextUserDeptDTO.getBranchId()) && prevUserDeptDTO.getBranchId().equals(nextUserDeptDTO.getBranchId())){
gridCmpmTransfer.setTransferType(1);
// 跨支行移交
}else {
gridCmpmTransfer.setTransferType(2);
}
}else if (prevUserDeptDTO.getDeptType().equals("branch")){
gridCmpmTransfer.setTransferStatus("1");
if (Objects.nonNull(nextUserDeptDTO.getBranchId()) && prevUserDeptDTO.getBranchId().equals(nextUserDeptDTO.getBranchId())){
gridCmpmTransfer.setTransferType(1);
}else{
gridCmpmTransfer.setTransferType(2);
}
}else if (prevUserDeptDTO.getDeptType().equals("head")){
gridCmpmTransfer.setTransferType(2);
gridCmpmTransfer.setTransferStatus("2");
}
return gridCmpmTransfer;
}
@Transactional(rollbackFor = Exception.class)
public String createCommonClaim(GridCmpmClaimDTO gridCmpmClaimDTO ){
GridCmpmTransfer gridCmpmTransfer = new GridCmpmTransfer();
gridCmpmTransfer.setTransferLabel("1");
gridCmpmTransfer.setGridType(gridCmpmClaimDTO.getGridType());
gridCmpmTransfer.setNextUserName(gridCmpmClaimDTO.getUserName());
UserDeptDTO userDeptDTO = getUserDeptDTO(gridCmpmClaimDTO.getUserName());
gridCmpmTransfer.setNextBranchId(userDeptDTO.getBranchId());
gridCmpmTransfer.setNextOutletId(userDeptDTO.getOutletId());
gridCmpmTransfer.setHeadId(userDeptDTO.getDeptId().toString().substring(0,3));
int i = 1;
for (TransferCustDTO transferCustDTO : gridCmpmClaimDTO.getCustList()) {
GridCmpmTransfer transfer = new GridCmpmTransfer();
BeanUtils.copyProperties(gridCmpmTransfer, transfer);
BeanUtils.copyProperties(transferCustDTO, transfer);
transfer.setPrevBranchId(userDeptDTO.getBranchId());
transfer.setPrevOutletId(userDeptDTO.getOutletId());
if (userDeptDTO.getDeptType().equals("outlet")){
transfer.setTransferType(1);
transfer.setTransferStatus("0");
}else if (userDeptDTO.getDeptType().equals("branch")){
transfer.setTransferType(1);
transfer.setTransferStatus("1");
} else if (userDeptDTO.getDeptType().equals("head")){
transfer.setTransferType(2);
transfer.setTransferStatus("2");
}
gridCmpmTransferMapper.insert(transfer);
log.info("开始插入第{}个认领审批,总共有{}个:", i, gridCmpmClaimDTO.getCustList().size(), transfer);
i++;
}
return "公共池认领审批流程创建成功";
}
@Transactional(rollbackFor = Exception.class)
public String adjustGridCmpm(GridCmpmAdjustDTO gridCmpmAdjustDTO){
if (!SecurityUtils.userRole().equals("branch") && !SecurityUtils.userRole().equals("head") &&!SecurityUtils.isHead()){
throw new ServiceException("没有权限");
}
SysUser sysUser = sysUserService.selectUserByUserName(gridCmpmAdjustDTO.getUserName());
UserDeptDTO userDeptDTO = getUserDeptDTO(gridCmpmAdjustDTO.getUserName());
gridCmpmAdjustDTO.setDeptCode(SecurityUtils.getHeadId());
for (TransferCustDTO transferCustDTO : gridCmpmAdjustDTO.getCustList()) {
GridCmpm gridCmpm = gridCmpmMapper.getGridCmpmByCustKey(transferCustDTO.getCustId(),
transferCustDTO.getAccountNo(), transferCustDTO.getPrevUserName(),
gridCmpmAdjustDTO.getGridType(), gridCmpmAdjustDTO.getDeptCode());
if (Objects.isNull(gridCmpm)){
throw new ServiceException("客户不存在");
}
GridCmpmUpdateDTO gridCmpmUpdateDTO = new GridCmpmUpdateDTO();
BeanUtils.copyProperties(gridCmpm, gridCmpmUpdateDTO);
gridCmpmUpdateDTO.setDeptCode(gridCmpmAdjustDTO.getDeptCode());
gridCmpmUpdateDTO.setPrevUserName(gridCmpm.getUserName());
gridCmpmUpdateDTO.setUserName(sysUser.getUserName());
gridCmpmUpdateDTO.setNickName(sysUser.getNickName());
if (Objects.nonNull(userDeptDTO.getBranchId())){
SysDept branch = sysDeptService.selectDeptById(userDeptDTO.getBranchId());
gridCmpmUpdateDTO.setBranchId(userDeptDTO.getBranchId());
gridCmpmUpdateDTO.setBranchName(branch.getDeptName());
}else {
gridCmpmUpdateDTO.setBranchId(null);
gridCmpmUpdateDTO.setBranchName(null);
}
if (Objects.nonNull(userDeptDTO.getOutletId())){
SysDept outlet = sysDeptService.selectDeptById(userDeptDTO.getOutletId());
gridCmpmUpdateDTO.setOutletId(userDeptDTO.getOutletId());
gridCmpmUpdateDTO.setOutletName(outlet.getDeptName());
}else{
gridCmpmUpdateDTO.setOutletId(null);
gridCmpmUpdateDTO.setOutletName(null);
}
gridCmpmMapper.updateGridCmpm(gridCmpmUpdateDTO);
log.info("调整绩效网格客户管护:" + gridCmpm);
}
return "调整成功";
}
public List<GridCmpmTransferVO> getGridCmpmTransferList(GridCmpmTransferListDTO gridCmpmTransferListDTO){
if ("manager".equals(SecurityUtils.userRole())){
throw new ServiceException("没有权限查控");
}
gridCmpmTransferListDTO.setUserRole(SecurityUtils.userRole());
gridCmpmTransferListDTO.setDeptId(SecurityUtils.getDeptId());
gridCmpmTransferListDTO.setUserName(SecurityUtils.getUsername());
gridCmpmTransferListDTO.setHeadId(SecurityUtils.getHeadId());
List<GridCmpmTransferVO> gridCmpmTransferList = gridCmpmTransferMapper.getGridCmpmTransferList(gridCmpmTransferListDTO);
return gridCmpmTransferList;
}
public List<GridCmpmTransferVO> getGridCmpmTransferHistoryList(GridCmpmTransferListDTO gridCmpmTransferListDTO){
gridCmpmTransferListDTO.setUserRole(SecurityUtils.userRole());
gridCmpmTransferListDTO.setDeptId(SecurityUtils.getDeptId());
gridCmpmTransferListDTO.setUserName(SecurityUtils.getUsername());
gridCmpmTransferListDTO.setHeadId(SecurityUtils.getHeadId());
List<GridCmpmTransferVO> gridCmpmTransferHistoryList = gridCmpmTransferMapper.getGridCmpmTransferHistoryList(gridCmpmTransferListDTO);
return gridCmpmTransferHistoryList;
}
public Boolean checkExistTransferCust(String custKey, String userName){
return gridCmpmTransferMapper.checkExistTransferCust(custKey, userName) > 0;
}
@Transactional(rollbackFor = Exception.class)
public String approveTransfer(GridCmpmApproveDTO gridCmpmApproveDTO){
for (Long id : gridCmpmApproveDTO.getIdList()) {
GridCmpmTransfer gridCmpmTransfer = gridCmpmTransferMapper.selectById(id);
if (gridCmpmTransfer.getTransferStatus().equals("0")){
gridCmpmTransfer.setOutletApprover(SecurityUtils.getUsername());
gridCmpmTransfer.setOutletApproveResult(gridCmpmApproveDTO.getApproveResult());
gridCmpmTransfer.setOutletApproveTime(DateUtils.getNowDate());
}else if (gridCmpmTransfer.getTransferStatus().equals("1")){
gridCmpmTransfer.setBranchApprover(SecurityUtils.getUsername());
gridCmpmTransfer.setBranchApproveResult(gridCmpmApproveDTO.getApproveResult());
gridCmpmTransfer.setBranchApproveTime(DateUtils.getNowDate());
}else if (gridCmpmTransfer.getTransferStatus().equals("2")){
gridCmpmTransfer.setHeadApprover(SecurityUtils.getUsername());
gridCmpmTransfer.setHeadApproveResult(gridCmpmApproveDTO.getApproveResult());
gridCmpmTransfer.setHeadApproveTime(DateUtils.getNowDate());
}
if (gridCmpmApproveDTO.getApproveResult()){
gridCmpmTransfer.setTransferStatus(getNextTransferStatus(gridCmpmTransfer.getTransferType(), gridCmpmTransfer.getTransferStatus()));
}else{
gridCmpmTransfer.setTransferStatus("-1");
}
if (gridCmpmTransferMapper.updateById(gridCmpmTransfer) > 0 && gridCmpmTransfer.getTransferStatus().equals("3")){
gridCmpmUpdateService.updateGridCmpm(gridCmpmTransfer);
}
}
return "审批成功";
}
private String getNextTransferStatus(Integer transferType, String transferStatus){
if (transferType == 0){
if (transferStatus.equals("0")){
return "3";
}
}else if (transferType == 1){
if (transferStatus.equals("0")){
return "1";
}else if (transferStatus.equals("1")){
return "3";
}
}else if (transferType == 2){
if (transferStatus.equals("0")){
return "1";
}else if (transferStatus.equals("1")){
return "2";
}else if (transferStatus.equals("2")){
return "3";
}
}
return "-1";
}
public UserDeptDTO getUserDeptDTO(String userName){
UserDeptDTO userDeptDTO = new UserDeptDTO();
SysUser sysUser = sysUserService.selectUserByUserName(userName);
userDeptDTO.setDeptId(sysUser.getDeptId());
SysDept sysDept = sysDeptService.selectDeptById(sysUser.getDeptId());
userDeptDTO.setDeptType(sysDept.getDeptType());
if (sysDept.getDeptType().equals("head")){
userDeptDTO.setHeadId(sysDept.getDeptId());
}else if (sysDept.getDeptType().equals("branch")){
userDeptDTO.setBranchId(sysDept.getDeptId());
userDeptDTO.setHeadId(sysDept.getParentId());
}else if (sysDept.getDeptType().equals("outlet")){
userDeptDTO.setOutletId(sysDept.getDeptId());
userDeptDTO.setBranchId(sysDept.getParentId());
SysDept branchDept = sysDeptService.selectDeptById(sysDept.getParentId());
userDeptDTO.setHeadId(branchDept.getParentId());
}
return userDeptDTO;
}
public List<GridCmpmClaimVO> queryClaimList(String custKey, String gridType){
List<GridCmpmClaimVO> gridCmpmClaimVOS = gridCmpmMapper.queryClaimList(SecurityUtils.getHeadId(), gridType, custKey);
return gridCmpmClaimVOS.stream().map(gridCmpmClaimVO -> {
gridCmpmClaimVO.setClaimFlag(Boolean.TRUE);
if (gridType.equals("corproate_account")){
if (gridCmpmTransferMapper.checkExistTransferCust(gridCmpmClaimVO.getAccountNo(), gridCmpmClaimVO.getUserName()) > 0){
gridCmpmClaimVO.setClaimFlag(Boolean.FALSE);
gridCmpmClaimVO.setClaimStatus("该客户存在正在审批的移交或者认领流程");
}
}else {
if (gridCmpmTransferMapper.checkExistTransferCust(gridCmpmClaimVO.getCustId(), gridCmpmClaimVO.getUserName()) > 0){
gridCmpmClaimVO.setClaimFlag(Boolean.FALSE);
gridCmpmClaimVO.setClaimStatus("该客户存在正在审批的移交或者认领流程");
}
}
if (Objects.nonNull(gridCmpmClaimVO.getUserName()) && gridCmpmClaimVO.getUserName().equals(SecurityUtils.getUsername())){
gridCmpmClaimVO.setClaimFlag(Boolean.FALSE);
gridCmpmClaimVO.setClaimStatus("该客户无须认领");
}
return gridCmpmClaimVO;
}).collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,113 @@
package com.ruoyi.ibs.cmpm.service;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.ibs.cmpm.domain.dto.GridCmpmUpdateDTO;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpm;
import com.ruoyi.ibs.cmpm.domain.entity.GridCmpmTransfer;
import com.ruoyi.ibs.cmpm.mapper.GridCmpmMapper;
import com.ruoyi.ibs.cmpm.mapper.GridCmpmTransferMapper;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @Author 吴凯程
* @Date 2025/10/24
**/
@Service
@Slf4j
@EnableAsync
public class GridCmpmUpdateService {
@Resource
private GridCmpmMapper gridCmpmMapper;
@Resource
private GridCmpmTransferMapper gridCmpmTransferMapper;
@Resource
private ISysDeptService sysDeptService;
@Resource
private ISysUserService sysUserService;
@Async
@Transactional(rollbackFor = Exception.class)
public void updateGridCmpm(GridCmpmTransfer gridCmpmTransfer) {
GridCmpm gridCmpm = gridCmpmMapper.getGridCmpmByCustKey(gridCmpmTransfer.getCustId(), gridCmpmTransfer.getAccountNo(), gridCmpmTransfer.getPrevUserName(),
gridCmpmTransfer.getGridType(), gridCmpmTransfer.getHeadId());
if (Objects.isNull(gridCmpm)){
throw new ServiceException("绩效网格管户不存在");
}
SysUser sysUser = sysUserService.selectUserByUserName(gridCmpmTransfer.getNextUserName());
if (Objects.isNull(sysUser)){
throw new ServiceException("移交用户不存在");
}
gridCmpm.setUserName(sysUser.getUserName());
gridCmpm.setNickName(sysUser.getNickName());
if(Objects.nonNull(gridCmpmTransfer.getNextBranchId())){
SysDept sysDept = sysDeptService.selectDeptById(gridCmpmTransfer.getNextBranchId());
gridCmpm.setBranchId(gridCmpmTransfer.getNextBranchId());
gridCmpm.setBranchName(sysDept.getDeptName());
}else{
gridCmpm.setBranchId(null);
gridCmpm.setBranchName(null);
}
if(Objects.nonNull(gridCmpmTransfer.getNextOutletId())){
SysDept sysDept = sysDeptService.selectDeptById(gridCmpmTransfer.getNextOutletId());
gridCmpm.setOutletId(gridCmpmTransfer.getNextOutletId());
gridCmpm.setOutletName(sysDept.getDeptName());
}else{
gridCmpm.setOutletId(null);
gridCmpm.setOutletName(null);
}
GridCmpmUpdateDTO gridCmpmUpdateDTO = new GridCmpmUpdateDTO();
BeanUtils.copyProperties(gridCmpm, gridCmpmUpdateDTO);
gridCmpmUpdateDTO.setPrevUserName(gridCmpmTransfer.getPrevUserName());
gridCmpmUpdateDTO.setDeptCode(gridCmpmTransfer.getHeadId());
gridCmpmMapper.updateGridCmpm(gridCmpmUpdateDTO);
log.info("更新绩效网格客户管护:" + gridCmpm);
}
@Async
@Transactional(rollbackFor = Exception.class)
public void createFullTransferApprove(GridCmpmTransfer gridCmpmTransfer){
List<GridCmpm> gridCmpms = gridCmpmMapper.getGridCmpmByUserName(gridCmpmTransfer.getPrevUserName(), gridCmpmTransfer.getHeadId(), gridCmpmTransfer.getGridType());
if (!gridCmpms.isEmpty()){
List<GridCmpmTransfer> gridCmpmTransferList = new ArrayList<>();
for (GridCmpm gridCmpm : gridCmpms) {
GridCmpmTransfer transfer = new GridCmpmTransfer();
BeanUtils.copyProperties(gridCmpmTransfer, transfer);
transfer.setCustId(gridCmpm.getCustId());
transfer.setCustName(gridCmpm.getCustName());
transfer.setCustType(gridCmpm.getCustType());
transfer.setAccountNo(gridCmpm.getAccountNo());
gridCmpmTransferList.add(transfer);
if (gridCmpmTransferList.size() == 1000){
gridCmpmTransferMapper.batchInsert(gridCmpmTransferList);
gridCmpmTransferList.clear();
log.info("开始异步插入第{}个审批,总共有{}个", gridCmpmTransferList.size(), gridCmpms.size());
}
}
if (!gridCmpmTransferList.isEmpty()){
gridCmpmTransferMapper.batchInsert(gridCmpmTransferList);
}
log.info("开始异步插入第{}个审批,总共有{}个", gridCmpmTransferList.size(), gridCmpms.size());
}else{
log.info("该用户没有客户需要移交: " + gridCmpmTransfer.getPrevUserName());
}
log.info("全量移交审批流程已插入:" + gridCmpmTransfer.getPrevUserName());
}
}

View File

@@ -0,0 +1,91 @@
package com.ruoyi.ibs.cmpm.service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.page.PageMethod;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustQueryDTO;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustReachDTO;
import com.ruoyi.ibs.cmpm.domain.dto.VisitCustReachListDTO;
import com.ruoyi.ibs.cmpm.domain.entity.VisitCustReach;
import com.ruoyi.ibs.cmpm.domain.vo.VisitCustReachListVO;
import com.ruoyi.ibs.cmpm.domain.vo.VisitCustReachVO;
import com.ruoyi.ibs.cmpm.mapper.VisitCustReachMapper;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* @Author 吴凯程
* @Date 2025/12/11
**/
@Service
public class VisitCustReachService {
@Resource
private VisitCustReachMapper visitCustReachMapper;
@Resource
private ISysDeptService sysDeptService;
@Resource
private ISysUserService sysUserService;
public String saveVisitCustReachDTO(VisitCustReachDTO visitCustReachDTO){
VisitCustReach visitCustReach;
if (Objects.isNull(visitCustReachDTO.getId())){
visitCustReach = new VisitCustReach();
BeanUtils.copyProperties(visitCustReachDTO,visitCustReach);
visitCustReach.setDeptId(SecurityUtils.getDeptId());
visitCustReachMapper.insert(visitCustReach);
}else {
visitCustReach = visitCustReachMapper.selectById(visitCustReachDTO.getId());
BeanUtils.copyProperties(visitCustReachDTO,visitCustReach);
visitCustReachMapper.updateById(visitCustReach);
}
return "客户触达信息已保存";
}
public List<VisitCustReachVO> queryVisitCust(String custName){
VisitCustQueryDTO visitCustQueryDTO = new VisitCustQueryDTO();
visitCustQueryDTO.setCustName(custName);
visitCustQueryDTO.setUserName(SecurityUtils.getUsername());
visitCustQueryDTO.setBranchId(getBranchIdByUserName(SecurityUtils.getUsername()));
return visitCustReachMapper.queryVisitCust(visitCustQueryDTO);
}
public PageInfo<VisitCustReachListVO> queryVisitCustReachList(VisitCustReachListDTO visitCustReachListDTO){
visitCustReachListDTO.setDeptId(SecurityUtils.getDeptId());
visitCustReachListDTO.setEditUserName(SecurityUtils.getUsername());
if ("manager".equals(SecurityUtils.userRole())){
visitCustReachListDTO.setAliasUserName(SecurityUtils.getUsername());
}
PageMethod.startPage(visitCustReachListDTO.getPageNum(), visitCustReachListDTO.getPageSize());
Page<VisitCustReachListVO> visitCustReachListVOPage = visitCustReachMapper.queryVisitCustReachList(visitCustReachListDTO);
return visitCustReachListVOPage.toPageInfo();
}
public List<VisitCustReachListVO> queryVisitCustReachListByCustId(String custId){
return visitCustReachMapper.queryVisitCustReachListByCustId(custId);
}
private Long getBranchIdByUserName(String userName){
SysUser sysUser = sysUserService.selectUserByUserName(userName);
SysDept sysDept = sysDeptService.selectDeptById(sysUser.getDeptId());
if (sysDept.getDeptType().equals("branch")){
return sysDept.getDeptId();
}
if (sysDept.getDeptType().equals("outlet")){
return sysDept.getParentId();
}
return null;
}
}

View File

@@ -0,0 +1,135 @@
package com.ruoyi.ibs.custmap.controller;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleExcelDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonExcelDTO;
import com.ruoyi.ibs.custmap.domain.vo.CustMapExcelVO;
import com.ruoyi.ibs.custmap.domain.vo.CustMapVO;
import com.ruoyi.ibs.custmap.service.CustMapExportService;
import com.ruoyi.ibs.custmap.service.CustMapSelectService;
import com.ruoyi.ibs.custmap.service.DeptAddressService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.util.List;
import java.util.Objects;
@Api(tags = "地图拓客接口")
@Slf4j
@RestController
@RequestMapping("/cust/map")
public class CustMapController extends BaseController {
@Resource
private CustMapSelectService custMapSelectService;
@Resource
private CustMapExportService custMapExportService;
@Resource
private DeptAddressService deptAddressService;
@ApiOperation("坐标和半径查询用户列表")
@Log(title = "地图拓客-坐标和半径查询用户列表")
@PostMapping("/search/circle")
public AjaxResult searchCustByCircle(@RequestBody @Valid CustMapCircleDTO custMapCircleDTO) {
List<CustMapVO> custMapVOS = custMapSelectService.selectCustListByCircle(custMapCircleDTO);
return success(custMapVOS);
}
@ApiOperation("坐标和半径导出用户")
@Log(title = "地图拓客-坐标和半径导出用户")
@PostMapping("/export/circle")
public AjaxResult exportCustByCircle(@RequestBody @Valid CustMapCircleExcelDTO custMapCircleExcelDTO) {
if (custMapExportService.checkCustMapExportRequest()){
return AjaxResult.error("请勿重复点击导出");
}
custMapCircleExcelDTO.setLatRange(custMapCircleExcelDTO.getDist() / 111.0);
custMapCircleExcelDTO.setLngRange(custMapCircleExcelDTO.getDist() / (111.0 * Math.cos(Math.toRadians(custMapCircleExcelDTO.getTargetLat()))));
custMapCircleExcelDTO.setUserName(getUsername());
custMapCircleExcelDTO.setDept(SecurityUtils.getHeadId());
custMapExportService.exportCustMapList(custMapCircleExcelDTO);
return success("开始生成客户导出文件");
}
@ApiOperation("坐标和半径搜索用户数量")
@Log(title ="地图拓客-坐标和半径搜索用户数量")
@PostMapping("/search/circle/count")
public AjaxResult countCustMapListByCircle(@RequestBody @Valid CustMapCircleDTO custMapCircleDTO) {
return success(custMapSelectService.countCustMapListByCircle(custMapCircleDTO));
}
@ApiOperation("多边形坐标查询用户列表")
@Log(title = "地图拓客-多边形坐标查询用户列表")
@PostMapping("/search/polygon")
public AjaxResult searchCustByPolygon(@RequestBody @Valid CustMapPolygonDTO custMapPolygonDTO) {
List<CustMapVO> custMapVOS = custMapSelectService.selectCustListByPolygon(custMapPolygonDTO);
return success(custMapVOS);
}
@ApiOperation("多边形坐标搜索用户数量")
@Log(title = "地图拓客-多边形坐标搜索用户数量")
@PostMapping("/search/polygon/count")
public AjaxResult countCustMapListByPolygon(@RequestBody @Valid CustMapPolygonDTO custMapPolygonDTO) {
return success(custMapSelectService.countCustMapListByPolygon(custMapPolygonDTO));
}
@ApiOperation("多边形坐标导出用户")
@Log(title = "地图拓客-多边形坐标导出用户")
@PostMapping("/export/polygon")
public AjaxResult exportCustMapListByPolygon(@RequestBody @Valid CustMapPolygonExcelDTO custMapPolygonExcelDTO) {
if (custMapExportService.checkCustMapExportRequest()){
return AjaxResult.error("请勿重复点击导出");
}
custMapPolygonExcelDTO.setUserName(getUsername());
custMapPolygonExcelDTO.setDept(SecurityUtils.getHeadId());
custMapExportService.exportCustMapList(custMapPolygonExcelDTO);
return success("开始生成客户导出文件");
}
@ApiOperation("获取用户默认地址")
@Log(title = "地图拓客-获取用户默认地址")
@GetMapping("/loc")
public AjaxResult getDefaultLoc() {
return success(deptAddressService.selectDeptAddressById());
}
@ApiOperation("获取新华社数据")
@Log(title = "地图拓客-获取新华社数据")
@GetMapping("/info")
public AjaxResult getRadarInfo(@RequestParam Integer id) {
return success(custMapSelectService.selectCustInfoRadarById(id));
}
@ApiOperation("选择导出用户")
@Log(title = "地图拓客-选择导出用户")
@PostMapping("/export/select")
public void exportTopGridTemplate(HttpServletResponse response, @RequestBody List<Integer> ids) {
if(Objects.isNull(ids) || ids.isEmpty()){
throw new ServiceException("请选择导出客户");
}
List<CustMapExcelVO> custMapExcelVOS = custMapExportService.exportCustMapList(ids);
ExcelUtil<CustMapExcelVO> util = new ExcelUtil<>(CustMapExcelVO.class);
util.exportExcel(response, custMapExcelVOS, "地图拓客导出");
}
@Anonymous
@ApiOperation("获取用户默认地址")
@GetMapping("/loc/init")
public AjaxResult initDefaultLoc() {
deptAddressService.initDeptAddress();
return success();
}
}

View File

@@ -0,0 +1,68 @@
package com.ruoyi.ibs.custmap.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysDictData;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.ibs.custmap.domain.vo.CompanyTypeVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Author 吴凯程
* @Date 2025/5/23
**/
@Api(tags = "地图拓客码值")
@RestController
@RequestMapping("/cust/map/metric")
public class CustMapMerticController extends BaseController {
@Resource
private RedisCache redisCache;
@ApiOperation("币种码值表")
@GetMapping("/cur")
public R<List<SysDictData>> getCurDict(){
List<SysDictData> sysDictTypeArrayList = new ArrayList<SysDictData>(redisCache.getCacheObject("sys_dict:cust_map_cur_metric"));
return R.ok(sysDictTypeArrayList);
}
@ApiOperation("资质证书")
@GetMapping("/zzzs")
public R<List<SysDictData>> getZzzsDict(){
List<SysDictData> sysDictTypeArrayList = new ArrayList<SysDictData>(redisCache.getCacheObject("sys_dict:cust_map_zzzs_metric"));
return R.ok(sysDictTypeArrayList);
}
@ApiOperation("机构类型码值表")
@GetMapping("/company/type")
public R<List<CompanyTypeVO>> getCompanyTypeDict(){
List<SysDictData> sysDictTypeArrayList = new ArrayList<SysDictData>(redisCache.getCacheObject("sys_dict:cust_map_company_type_metric"));
List<CompanyTypeVO> collect = sysDictTypeArrayList.stream().map(CompanyTypeVO::new).collect(Collectors.toList());
List<CompanyTypeVO> collect1 = collect.stream().filter(companyTypeVO -> companyTypeVO.getSort() == 1).collect(Collectors.toList());
for (CompanyTypeVO companyTypeVO : collect1) {
companyTypeVO.setChildren(companyTypeDfs(companyTypeVO.getValue(), companyTypeVO.getSort() + 1, collect));
}
return R.ok(collect1);
}
private List<CompanyTypeVO> companyTypeDfs(String value, Long sort, List<CompanyTypeVO> collect){
List<CompanyTypeVO> collect1 = collect.stream().filter(companyTypeVO -> companyTypeVO.getValue().startsWith(value) && companyTypeVO.getSort() == sort)
.collect(Collectors.toList());
if (collect1.size() == 0){
return null;
}
for (CompanyTypeVO companyTypeVO : collect1) {
companyTypeVO.setChildren(companyTypeDfs(companyTypeVO.getValue(), companyTypeVO.getSort() + 1, collect));
}
return collect1;
}
}

View File

@@ -0,0 +1,44 @@
package com.ruoyi.ibs.custmap.controller;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.ibs.custmap.domain.dto.CustMapSearchDTO;
import com.ruoyi.ibs.custmap.service.CustMapSearchService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
/**
* @Author 吴凯程
* @Date 2025/6/23
**/
@Api(tags = "地图拓客-我的模板接口")
@RestController
@RequestMapping("/cust/map/search/template")
public class CustMapSearchController {
@Resource
private CustMapSearchService custMapSearchService;
@ApiOperation("保存查询模板")
@PostMapping("/save")
public AjaxResult saveCustMapSearchTemplate(@RequestBody @Valid CustMapSearchDTO custMapSearchDTO)
{
return AjaxResult.success(custMapSearchService.saveCustMapSearchTemplate(custMapSearchDTO));
}
@ApiOperation("获取查询模板")
@GetMapping("/get")
public AjaxResult getCustMapSearchTemplate()
{
return AjaxResult.success(custMapSearchService.getCustMapSearchTemplate());
}
@ApiOperation("删除查询模板")
@PostMapping("/delete")
public AjaxResult deleteCustMapSearchTemplate(@RequestParam String templateId) {
return AjaxResult.success(custMapSearchService.deleteCustMapSearchTemplate(templateId));
}
}

View File

@@ -0,0 +1,45 @@
package com.ruoyi.ibs.custmap.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapCircleDTO extends CustMapDTO{
@NotNull(message = "纬度不能为空")
@ApiModelProperty(value = "纬度")
private Double targetLat;
@NotNull(message = "经度不能为空")
@ApiModelProperty(value = "经度")
private Double targetLng;
private Double latRange;
private Double lngRange;
@NotNull(message = "距离不能为空")
@ApiModelProperty(value = "距离半径")
private Double dist;
@ApiModelProperty(value = "页面大小")
private Integer size;
@ApiModelProperty(value = "页数")
private Integer num;
private Integer pageIndex;
@ApiModelProperty(value = "升降序")
private Boolean isAsc;
private List<String> codeList;
}

View File

@@ -0,0 +1,31 @@
package com.ruoyi.ibs.custmap.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapCircleExcelDTO extends CustMapExcelDTO{
@NotNull(message = "纬度不能为空")
@ApiModelProperty(value = "纬度")
private Double targetLat;
@NotNull(message = "经度不能为空")
@ApiModelProperty(value = "经度")
private Double targetLng;
private Double latRange;
private Double lngRange;
@NotNull(message = "距离不能为空")
@ApiModelProperty(value = "距离半径")
private Double dist;
}

View File

@@ -0,0 +1,282 @@
package com.ruoyi.ibs.custmap.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapDTO {
private String dept;
/**
* 企业规模 | en_qly
*/
@ApiModelProperty(value = "企业规模 | en_qly")
private List<String> custScaleList;
@ApiModelProperty(value = "机构类型")
private List<String> companyTypeList;
@ApiModelProperty(value = "包含机构类型")
private Boolean companyTypeInclude;
/**
* 法人电话
*/
@ApiModelProperty(value = "是否电话")
private Boolean isPhoneNumber;
@ApiModelProperty(value = "是否邮箱")
private Boolean isEmail;
/**
* 省
*/
@ApiModelProperty(value = "")
private String province;
/**
* 市
*/
@ApiModelProperty(value = "")
private String city;
/**
* 县
*/
@ApiModelProperty(value = "")
private String county;
/**
* 街道/镇
*/
@ApiModelProperty(value = "街道/镇")
private String street;
/**
* 社区/村
*/
@ApiModelProperty(value = "社区/村")
private String community;
/**
* 所在行业
*/
@ApiModelProperty(value = "所在行业")
private List<String> belongBusinessList;
/**
* 成立年限
*/
@ApiModelProperty(value = "成立年限")
private List<RangeInterval> startDateIntervalList;
/**
* 经营状态
*/
@ApiModelProperty(value = "经营状态")
private List<String> statusList;
@ApiModelProperty(value = "是否包含特定经营状态")
private Boolean statusInclude;
/**
* 注册资本币种
*/
@ApiModelProperty(value = "注册资本币种")
private String registCapiCur;
@ApiModelProperty(value = "注册资本范围")
private List<RangeInterval> registCapiIntervalList;
/**
* 实缴资本币种
*/
@ApiModelProperty(value = "实缴资本币种")
private String recCapCur;
@ApiModelProperty(value = "实缴资本范围")
private List<RangeInterval> recCapIntervalList;
/**
* 经营信息-养老保险参保人数
*/
@ApiModelProperty(value = "经营信息-养老保险参保人数")
private List<RangeInterval> businessInfoPenInsurIntervalList;
/**
* 经营信息-医疗保险参保人数
*/
@ApiModelProperty(value = "经营信息-医疗保险参保人数")
private List<RangeInterval> businessInfoMediInsurIntervalList;
/**
* 经营信息-有无进出口信息1为有0为无
*/
@ApiModelProperty(value = "经营信息-有无进出口信息1为有0为无")
private Boolean businessInfoImExportFlag;
@ApiModelProperty(value = "进出口信用等级列表")
private List<String> businessInfoImExportCreditGradeList;
/**
* 经营信息-有无政府扶持和奖励1为有0为无
*/
@ApiModelProperty(value = "经营信息-有无政府扶持和奖励1为有0为无")
private Boolean businessInfoGovSupportFlag;
/**
* 经营信息-有无融资信息1为有0为无
*/
@ApiModelProperty(value = "经营信息-有无融资信息1为有0为无")
private Boolean businessInfoFinaInfoFlag;
/**
* 经营信息-融资轮次
*/
@ApiModelProperty(value = "经营信息-融资轮次")
private List<String> businessInfoFinaRoundList;
/**
* 知识产权-有无商标信息1为有0为无
*/
@ApiModelProperty(value = "知识产权-有无商标信息1为有0为无")
private Boolean intelPropRightTrademarkInfoFlag;
/**
* 知识产权-有无专利信息1为有0为无
*/
@ApiModelProperty(value = "知识产权-有无专利信息1为有0为无")
private Boolean intelPropRightPatentInfoFlag;
/**
* 知识产权-有无软件著作权1为有0为无
*/
@ApiModelProperty(value = "知识产权-有无软件著作权1为有0为无")
private Boolean intelPropRightSoftCopyrightFlag;
/**
* 科技等级-类型
*/
@ApiModelProperty(value = "科技等级-类型")
private List<String> technologyLvlTypeList;
/**
* 科技等级-状态
*/
@ApiModelProperty(value = "科技等级-状态")
private List<String> technologyLvlStateList;
/**
* 科技等级-级别
*/
@ApiModelProperty(value = "科技等级-级别")
private List<String> technologyLvlLevelList;
/**
* 资本市场-有无上市信息1为有0为无
*/
@ApiModelProperty(value = "资本市场-有无上市信息1为有0为无")
private Boolean capMarketListInfoFlag;
/**
* 风险特征-有无失信信息1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无失信信息1为有0为无")
private Boolean riskCharDisInfoFlag;
/**
* 风险特征-有无破产清算1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无破产清算1为有0为无")
private Boolean riskCharBankruptcyLiquiFlag;
/**
* 风险特征-有无变更记录1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无变更记录1为有0为无")
private Boolean riskCharChangeRecordFlag;
/**
* 风险特征-有无失信被执行人1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无失信被执行人1为有0为无")
private Boolean riskCharDisPersonFlag;
/**
* 风险特征-有无严重失信违法1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无严重失信违法1为有0为无")
private Boolean riskCharSncFlag;
/**
* 风险特征-有无限制高消费1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无限制高消费1为有0为无")
private Boolean riskCharRhcFlag;
/**
* 经营风险-有无行政处罚1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无行政处罚1为有0为无")
private Boolean operatRiskAdminPenaltyFlag;
/**
* 经营风险-有无环保处罚1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无环保处罚1为有0为无")
private Boolean operatRiskEnvirPenaltyFlag;
/**
* 经营风险-有无欠税信息1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无欠税信息1为有0为无")
private Boolean operatRiskOweTaxInfoFlag;
/**
* 经营风险-有无终末案件1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无终末案件1为有0为无")
private Boolean operatRiskFinalCaseFlag;
/**
* 经营风险-有无未结案件1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无未结案件1为有0为无")
private Boolean operatRiskUnfinishCaseFlag;
/**
* 新增企业标识1为新增企业0为存量企业
*/
@ApiModelProperty(value = "新增企业标识1为新增企业0为存量企业")
private Boolean newCompanyFlag;
@ApiModelProperty(value = "是否是分支机构")
private Boolean isBranchFlag;
@ApiModelProperty(value = "是否有分支机构")
private Boolean isHasBranchFlag;
@ApiModelProperty(value = "纳税信用等级")
private List<String> nsxydjList;
@ApiModelProperty(value = "税收违法")
private Boolean isSswf;
@ApiModelProperty(value = "经营异常")
private Boolean isJyyc;
@ApiModelProperty(value = "资质证书")
private List<String> zzzsCodeList;
@ApiModelProperty(value = "法人变更")
private Boolean isFrbg;
@ApiModelProperty(value = "股权冻结")
private Boolean isGqdj;
}

View File

@@ -0,0 +1,25 @@
package com.ruoyi.ibs.custmap.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapExcelDTO extends CustMapDTO{
private String dept;
private String userName;
@NotNull(message = "导出数据量不能为空")
@ApiModelProperty(value = "导出数据量")
private Integer total;
@ApiModelProperty(value = "升降序")
private Boolean isAsc;
}

View File

@@ -0,0 +1,37 @@
package com.ruoyi.ibs.custmap.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapPolygonDTO extends CustMapDTO{
@NotEmpty(message = "wkt不能为空")
@ApiModelProperty(value = "wkt")
private String wkt;
private Double minLat;
private Double minLng;
private Double maxLat;
private Double maxLng;
@ApiModelProperty(value = "页面大小")
private Integer size;
@ApiModelProperty(value = "页数")
private Integer num;
private Integer pageIndex;
@ApiModelProperty(value = "升降序")
private Boolean isAsc;
}

View File

@@ -0,0 +1,19 @@
package com.ruoyi.ibs.custmap.domain.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapPolygonExcelDTO extends CustMapExcelDTO{
@NotEmpty(message = "wkt不能为空")
@ApiModelProperty(value = "wkt")
private String wkt;
}

View File

@@ -0,0 +1,30 @@
package com.ruoyi.ibs.custmap.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
@Valid
public class CustMapSearchDTO {
@ApiModelProperty(value = "模板id")
private String templateId;
@ApiModelProperty(value = "模板名称")
private String templateName;
private String nickName;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
private String searchTemplate;
}

View File

@@ -0,0 +1,20 @@
package com.ruoyi.ibs.custmap.domain.dto;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/5/22
**/
@Data
public class PolygonDTO {
private Double minLat;
private Double minLng;
private Double maxLat;
private Double maxLng;
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.ibs.custmap.domain.dto;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/5/20
**/
@Data
public class RangeInterval{
private Long min;
private Long max;
}

View File

@@ -0,0 +1,323 @@
package com.ruoyi.ibs.custmap.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 客户雷达信息表(CustInfoRadar965)实体类
*
* @author makejava
* @since 2025-05-22 16:44:05
*/
@Data
@TableName("cust_info_radar")
public class CustInfoRadar {
/**
* id
*/
@TableId
@ApiModelProperty(value = "ID")
private Integer id;
/**
* 企业规模 | en_qly
*/
@ApiModelProperty(value = "企业规模 | en_qly")
private String custScale;
/**
* 企业名称 | cust_nam
*/
@ApiModelProperty(value = "企业名称 | cust_nam")
private String custName;
/**
* 法人姓名
*/
@ApiModelProperty(value = "法人姓名")
private String lpName;
/**
* 法人电话
*/
@ApiModelProperty(value = "法人电话")
private String custPhone;
/**
* 客户号 | cust_id
*/
@ApiModelProperty(value = "客户号 | cust_id")
private String custId;
/**
* 客户内码 | cst_id
*/
@ApiModelProperty(value = "客户内码 | cst_id")
private String custIsn;
/**
* 统一社会信用识别码 | uniscid
*/
@ApiModelProperty(value = "统一社会信用识别码 | uniscid")
private String socialCreditCode;
/**
* 省
*/
@ApiModelProperty(value = "")
private String province;
/**
* 市
*/
@ApiModelProperty(value = "")
private String city;
/**
* 县
*/
@ApiModelProperty(value = "")
private String county;
/**
* 街道/镇
*/
@ApiModelProperty(value = "街道/镇")
private String street;
/**
* 社区/村
*/
@ApiModelProperty(value = "社区/村")
private String community;
/**
* 详细地址
*/
@ApiModelProperty(value = "详细地址")
private String addressDetail;
/**
* 经度
*/
@ApiModelProperty(value = "经度")
private Double longitude;
/**
* 纬度
*/
@ApiModelProperty(value = "纬度")
private Double latitude;
/**
* 所在行业
*/
@ApiModelProperty(value = "所在行业")
private String belongBusiness;
/**
* 成立年限
*/
@ApiModelProperty(value = "成立年限")
@JsonFormat(pattern = "yyyy-MM-dd")
private String startDate;
/**
* 经营状态
*/
@ApiModelProperty(value = "经营状态")
private String status;
/**
* 注册资本币种
*/
@ApiModelProperty(value = "注册资本币种")
private String registCapiCur;
/**
* 注册资本数值
*/
@ApiModelProperty(value = "注册资本数值")
private Double registCapiValue;
/**
* 注册资本单位
*/
@ApiModelProperty(value = "注册资本单位")
private String registCapiUnit;
/**
* 实缴资本币种
*/
@ApiModelProperty(value = "实缴资本币种")
private String recCapCur;
/**
* 实缴资本数值
*/
@ApiModelProperty(value = "实缴资本数值")
private Double recCapValue;
/**
* 实缴资本单位
*/
@ApiModelProperty(value = "实缴资本单位")
private String recCapUnit;
/**
* 联系方式
*/
@ApiModelProperty(value = "联系方式")
private String phoneNumber;
/**
* 经营信息-养老保险参保人数
*/
@ApiModelProperty(value = "经营信息-养老保险参保人数")
private String businessInfoPenInsurNum;
/**
* 经营信息-医疗保险参保人数
*/
@ApiModelProperty(value = "经营信息-医疗保险参保人数")
private String businessInfoMediInsurNum;
/**
* 经营信息-有无进出口信息1为有0为无
*/
@ApiModelProperty(value = "经营信息-有无进出口信息1为有0为无")
private Boolean businessInfoImExportFlag;
@ApiModelProperty(value = "经营信息-进出口信用等级")
private String businessInfoImExportCreditGrade;
/**
* 经营信息-有无政府扶持和奖励1为有0为无
*/
@ApiModelProperty(value = "经营信息-有无政府扶持和奖励1为有0为无")
private Boolean businessInfoGovSupportFlag;
/**
* 经营信息-有无融资信息1为有0为无
*/
@ApiModelProperty(value = "经营信息-有无融资信息1为有0为无")
private Boolean businessInfoFinaInfoFlag;
/**
* 经营信息-融资轮次
*/
@ApiModelProperty(value = "经营信息-融资轮次")
private String businessInfoFinaRound;
/**
* 知识产权-有无商标信息1为有0为无
*/
@ApiModelProperty(value = "知识产权-有无商标信息1为有0为无")
private Boolean intelPropRightTrademarkInfoFlag;
/**
* 知识产权-有无专利信息1为有0为无
*/
@ApiModelProperty(value = "知识产权-有无专利信息1为有0为无")
private Boolean intelPropRightPatentInfoFlag;
/**
* 知识产权-有无软件著作权1为有0为无
*/
@ApiModelProperty(value = "知识产权-有无软件著作权1为有0为无")
private Boolean intelPropRightSoftCopyrightFlag;
/**
* 科技等级-类型
*/
@ApiModelProperty(value = "科技等级-类型")
private String technologyLvlType;
/**
* 科技等级-状态
*/
@ApiModelProperty(value = "科技等级-状态")
private String technologyLvlState;
/**
* 科技等级-级别
*/
@ApiModelProperty(value = "科技等级-级别")
private String technologyLvlLevel;
/**
* 资本市场-有无上市信息1为有0为无
*/
@ApiModelProperty(value = "资本市场-有无上市信息1为有0为无")
private Boolean capMarketListInfoFlag;
/**
* 风险特征-有无失信信息1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无失信信息1为有0为无")
private Boolean riskCharDisInfoFlag;
/**
* 风险特征-有无破产清算1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无破产清算1为有0为无")
private Boolean riskCharBankruptcyLiquiFlag;
/**
* 风险特征-有无变更记录1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无变更记录1为有0为无")
private Boolean riskCharChangeRecordFlag;
/**
* 风险特征-有无失信被执行人1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无失信被执行人1为有0为无")
private Boolean riskCharDisPersonFlag;
/**
* 风险特征-有无严重失信违法1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无严重失信违法1为有0为无")
private Boolean riskCharSncFlag;
/**
* 风险特征-有无限制高消费1为有0为无
*/
@ApiModelProperty(value = "风险特征-有无限制高消费1为有0为无")
private Boolean riskCharRhcFlag;
/**
* 经营风险-有无行政处罚1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无行政处罚1为有0为无")
private Boolean operatRiskAdminPenaltyFlag;
/**
* 经营风险-有无环保处罚1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无环保处罚1为有0为无")
private Boolean operatRiskEnvirPenaltyFlag;
/**
* 经营风险-有无欠税信息1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无欠税信息1为有0为无")
private Boolean operatRiskOweTaxInfoFlag;
/**
* 经营风险-有无终末案件1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无终末案件1为有0为无")
private Boolean operatRiskFinalCaseFlag;
/**
* 经营风险-有无未结案件1为有0为无
*/
@ApiModelProperty(value = "经营风险-有无未结案件1为有0为无")
private Boolean operatRiskUnfinishCaseFlag;
/**
* 新增企业标识1为新增企业0为存量企业
*/
@ApiModelProperty(value = "新增企业标识1为新增企业0为存量企业")
private Boolean newCompanyFlag;
@ApiModelProperty(value = "是否是分支机构")
private Boolean isBranchFlag;
@ApiModelProperty(value = "是否有分支机构")
private Boolean isHasBranchFlag;
@ApiModelProperty(value = "电子邮箱")
private String email;
@ApiModelProperty(value = "注册资本展示")
private String registCapiShow;
@ApiModelProperty(value = "实缴资本展示")
private String recCapShow;
@ApiModelProperty(value = "经营范围")
private String scope;
@ApiModelProperty(value = "客户类型")
private String custType;
@ApiModelProperty(value = "机构类型")
private String companyType;
@ApiModelProperty(value = "纳税信用等级")
private String nsxydj;
@ApiModelProperty(value = "税收违法")
private Boolean isSswf;
@ApiModelProperty(value = "经营异常")
private Boolean isJyyc;
@ApiModelProperty(value = "资质证书")
// @TableField(typeHandler = StringListTypeHandler.class)
private String zzzsCode;
@ApiModelProperty(value = "法人变更")
private Boolean isFrbg;
@ApiModelProperty(value = "股权冻结")
private Boolean isGqdj;
}

View File

@@ -0,0 +1,33 @@
package com.ruoyi.ibs.custmap.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/5/23
**/
@ApiModel(value = "机构地址表",description = "")
@TableName("dept_address")
@Data
public class DeptAddress {
/** 部门id */
@ApiModelProperty(value = "部门id",notes = "")
@TableId
private Long deptId ;
/** */
@ApiModelProperty(value = "地址",notes = "")
private String address ;
@ApiModelProperty(value = "城市",notes = "")
private String city ;
/** */
@ApiModelProperty(value = "经度",notes = "")
private Double lng ;
/** */
@ApiModelProperty(value = "纬度",notes = "")
private Double lat ;
}

View File

@@ -0,0 +1,28 @@
package com.ruoyi.ibs.custmap.domain.vo;
import com.ruoyi.common.core.domain.entity.SysDictData;
import lombok.Data;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/28
**/
@Data
public class CompanyTypeVO {
private Long sort;
private String label;
private String value;
private List<CompanyTypeVO> children;
public CompanyTypeVO(SysDictData sysDictData) {
this.sort = sysDictData.getDictSort();
this.label = sysDictData.getDictLabel();
this.value = sysDictData.getDictValue();
}
}

View File

@@ -0,0 +1,359 @@
package com.ruoyi.ibs.custmap.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapExcelVO {
/**
* id
*/
// @Excel(name = "id")
@ExcelProperty("id")
private Integer id;
/**
* 企业规模 | en_qly
*/
@ExcelProperty("企业规模")
private String custScale;
/**
* 企业名称 | cust_nam
*/
@ExcelProperty("企业名称")
private String custName;
/**
* 公司类型
*/
@ExcelProperty("机构类型")
private String companyType;
/**
* 法人姓名
*/
@ExcelProperty("法人姓名")
private String lpName;
/**
* 法人电话
*/
@ExcelProperty("法人电话")
private String custPhone;
/**
* 客户号 | cust_id
*/
@ExcelProperty("客户号")
private String custId;
/**
* 客户内码 | cst_id
*/
@ExcelProperty("客户内码")
private String custIsn;
/**
* 统一社会信用识别码 | uniscid
*/
@ExcelProperty("统一社会信用识别码")
private String socialCreditCode;
/**
* 省
*/
@ExcelProperty("")
private String province;
/**
* 市
*/
@ExcelProperty("")
private String city;
/**
* 县
*/
@ExcelProperty("")
private String county;
/**
* 街道/镇
*/
@ExcelProperty("街道/镇")
private String street;
/**
* 社区/村
*/
@ExcelProperty("社区/村")
private String community;
/**
* 详细地址
*/
@ExcelProperty("详细地址")
private String addressDetail;
/**
* 经度
*/
@ExcelProperty("经度")
private BigDecimal longitude;
/**
* 纬度
*/
@ExcelProperty("纬度")
private BigDecimal latitude;
/**
* 所在行业
*/
@ExcelProperty("所在行业")
private String belongBusiness;
/**
* 成立年限
*/
@ExcelProperty("成立年限")
@JsonFormat(pattern = "yyyy-MM-dd")
private String startDate;
/**
* 经营状态
*/
@ExcelProperty("经营状态")
private String status;
/**
* 注册资本币种
*/
@ExcelProperty("注册资本币种")
private String registCapiCur;
/**
* 注册资本数值
*/
@ExcelProperty("注册资本数值")
private Double registCapiValue;
/**
* 注册资本单位
*/
@ExcelProperty("注册资本展示")
private String registCapiShow;
/**
* 实缴资本币种
*/
@ExcelProperty("实缴资本币种")
private String recCapCur;
/**
* 实缴资本数值
*/
@ExcelProperty("实缴资本数值")
private Double recCapValue;
/**
* 实缴资本单位
*/
@ExcelProperty("实缴资本展示")
private String recCapShow;
/**
* 联系方式
*/
@ExcelProperty("联系方式")
private String phoneNumber;
/**
* 经营信息-养老保险参保人数
*/
@ExcelProperty("经营信息-养老保险参保人数")
private String businessInfoPenInsurNum;
/**
* 经营信息-医疗保险参保人数
*/
@ExcelProperty("经营信息-医疗保险参保人数")
private String businessInfoMediInsurNum;
/**
* 经营信息-有无进出口信息1为有0为无
*/
@ExcelProperty("经营信息-有无进出口信息")
private Boolean businessInfoImExportFlag;
@ExcelProperty("经营信息-进出口信息信用等级")
private String businessInfoImExportCreditGrade;
/**
* 经营信息-有无政府扶持和奖励1为有0为无
*/
@ExcelProperty("经营信息-有无政府扶持和奖励")
private Boolean businessInfoGovSupportFlag;
/**
* 经营信息-有无融资信息1为有0为无
*/
@ExcelProperty("经营信息-有无融资信息")
private Boolean businessInfoFinaInfoFlag;
/**
* 经营信息-融资轮次
*/
@ExcelProperty("经营信息-融资轮次")
private String businessInfoFinaRound;
/**
* 知识产权-有无商标信息1为有0为无
*/
@ExcelProperty("知识产权-有无商标信息")
private Boolean intelPropRightTrademarkInfoFlag;
/**
* 知识产权-有无专利信息1为有0为无
*/
@ExcelProperty("知识产权-有无专利信息")
private Boolean intelPropRightPatentInfoFlag;
/**
* 知识产权-有无软件著作权1为有0为无
*/
@ExcelProperty("知识产权-有无软件著作权")
private Boolean intelPropRightSoftCopyrightFlag;
/**
* 科技等级-类型
*/
@ExcelProperty("科技等级-类型")
private String technologyLvlType;
/**
* 科技等级-状态
*/
@ExcelProperty("科技等级-状态")
private String technologyLvlState;
/**
* 科技等级-级别
*/
@ExcelProperty("科技等级-级别")
private String technologyLvlLevel;
/**
* 资本市场-有无上市信息1为有0为无
*/
@ExcelProperty("资本市场-有无上市信息")
private Boolean capMarketListInfoFlag;
/**
* 风险特征-有无失信信息1为有0为无
*/
@ExcelProperty("风险特征-有无失信信息")
private Boolean riskCharDisInfoFlag;
/**
* 风险特征-有无破产清算1为有0为无
*/
@ExcelProperty("风险特征-有无破产清算")
private Boolean riskCharBankruptcyLiquiFlag;
/**
* 风险特征-有无变更记录1为有0为无
*/
@ExcelProperty("风险特征-有无变更记录")
private Boolean riskCharChangeRecordFlag;
/**
* 风险特征-有无失信被执行人1为有0为无
*/
@ExcelProperty("风险特征-有无失信被执行人")
private Boolean riskCharDisPersonFlag;
/**
* 风险特征-有无严重失信违法1为有0为无
*/
@ExcelProperty("风险特征-有无严重失信违法")
private Boolean riskCharSncFlag;
/**
* 风险特征-有无限制高消费1为有0为无
*/
@ExcelProperty("风险特征-有无限制高消费")
private Boolean riskCharRhcFlag;
/**
* 经营风险-有无行政处罚1为有0为无
*/
@ExcelProperty("经营风险-有无行政处罚")
private Boolean operatRiskAdminPenaltyFlag;
/**
* 经营风险-有无环保处罚1为有0为无
*/
@ExcelProperty("经营风险-有无环保处罚")
private Boolean operatRiskEnvirPenaltyFlag;
/**
* 经营风险-有无欠税信息1为有0为无
*/
@ExcelProperty("经营风险-有无欠税信息")
private Boolean operatRiskOweTaxInfoFlag;
/**
* 经营风险-有无终末案件1为有0为无
*/
@ExcelProperty("经营风险-有无终末案件")
private Boolean operatRiskFinalCaseFlag;
/**
* 经营风险-有无未结案件1为有0为无
*/
@ExcelProperty("经营风险-有无未结案件")
private Boolean operatRiskUnfinishCaseFlag;
/**
* 新增企业标识1为新增企业0为存量企业
*/
@ExcelProperty("新增企业标识")
private Boolean newCompanyFlag;
/**
* 是否是分支机构
*/
@ExcelProperty("是否是分支机构")
private Boolean isBranch;
/**
* 是否有分支机构
*/
@ExcelProperty("是否有分支机构")
private Boolean isHasBranch;
/**
* 电子邮箱
*/
@ExcelProperty("电子邮箱")
private String email;
@ExcelProperty("经营范围")
private String scope;
@ExcelProperty("客户类型")
private String custType;
}

View File

@@ -0,0 +1,60 @@
package com.ruoyi.ibs.custmap.domain.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Data
public class CustMapVO {
@ApiModelProperty(value = "ID")
private Integer id;
@ApiModelProperty(value = "客户名称")
private String custName;
@ApiModelProperty(value = "法人")
private String lpName;
@ApiModelProperty(value = "开始日期")
private String startDate;
@ApiModelProperty(value = "注册资本显示")
private String registCapiShow;
@ApiModelProperty(value = "省份")
private String province;
@ApiModelProperty(value = "城市")
private String city;
@ApiModelProperty(value = "距离")
private double distance;
@ApiModelProperty(value = "电话号码")
private String phoneNumber;
@ApiModelProperty(value = "详细地址")
private String addressDetail;
@ApiModelProperty(value = "经度")
private BigDecimal longitude;
@ApiModelProperty(value = "纬度")
private BigDecimal latitude;
@ApiModelProperty(value = "社会信用代码")
private String socialCreditCode;
@ApiModelProperty(value = "新公司标志")
private Boolean newCompanyFlag;
@ApiModelProperty(value = "客户类型")
private String custType;
}

View File

@@ -0,0 +1,42 @@
package com.ruoyi.ibs.custmap.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleExcelDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonExcelDTO;
import com.ruoyi.ibs.custmap.domain.entity.CustInfoRadar;
import com.ruoyi.ibs.custmap.domain.vo.CustMapExcelVO;
import com.ruoyi.ibs.custmap.domain.vo.CustMapVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Mapper
public interface CustMapMapper extends BaseMapper<CustInfoRadar> {
List<CustMapVO> selectCustMapListByCircle(CustMapCircleDTO custMapCircleDTO );
List<CustMapExcelVO> exportCustMapListByCircle(CustMapCircleExcelDTO custMapCircleExcelDTO );
Long countCustMapListByCircle(CustMapCircleDTO custMapCircleDTO);
List<CustMapVO> selectCustMapListByPolygon(CustMapPolygonDTO custMapPolygonDTO );
Long countCustMapListByPolygon(CustMapPolygonDTO custMapPolygonDTO);
List<CustMapExcelVO> exportCustMapListByPolygon(CustMapPolygonExcelDTO custMapPolygonExcelDTO );
List<CustMapVO> selectLngAndLat(@Param("offset") int offset, @Param("limit") int limit);
void saveCodeToCustMap(@Param("updateDataList") List<Map<String, Object>> updateDataLis);
}

View File

@@ -0,0 +1,13 @@
package com.ruoyi.ibs.custmap.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.custmap.domain.entity.DeptAddress;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author 吴凯程
* @Date 2025/5/26
**/
@Mapper
public interface DeptAddressMapper extends BaseMapper<DeptAddress> {
}

View File

@@ -0,0 +1,102 @@
package com.ruoyi.ibs.custmap.service;
import com.alibaba.excel.EasyExcel;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleExcelDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapExcelDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonExcelDTO;
import com.ruoyi.ibs.custmap.domain.entity.CustInfoRadar;
import com.ruoyi.ibs.custmap.domain.vo.CustMapExcelVO;
import com.ruoyi.ibs.custmap.mapper.CustMapMapper;
import com.ruoyi.ibs.dashboard.service.FileOptService;
import com.ruoyi.ibs.dashboard.service.NotificationDownloadService;
import com.ruoyi.ibs.task.domain.entity.ImportExportTask;
import com.ruoyi.ibs.task.mapper.ImportExportTaskMapper;
import com.ruoyi.ibs.task.service.ImportExportTaskService;
import com.ruoyi.system.enums.OssFileEnum;
import com.ruoyi.system.service.OssFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Service
@Slf4j
@EnableAsync
public class CustMapExportService {
private final String CUST_MAP_EXPORT_REQUEST = "CUST_MAP_EXPORT_REQUEST_";
@Resource
private CustMapMapper custMapMapper;
@Resource
private RedisCache redisCache;
@Resource
private NotificationDownloadService notificationDownloadService;
@Resource
private FileOptService fileOptService;
@Resource
private ImportExportTaskService importExportTaskService;
@Resource
private ImportExportTaskMapper importExportTaskMapper;
public Boolean checkCustMapExportRequest() {
return redisCache.hasKey(CUST_MAP_EXPORT_REQUEST + SecurityUtils.getUsername());
}
@Async
public void exportCustMapList(CustMapExcelDTO custMapExcelDTO) {
// 使用redis控制每个用户不可同时多次执行导出
if (redisCache.hasKey(CUST_MAP_EXPORT_REQUEST + custMapExcelDTO.getUserName())) {
throw new ServiceException("请勿重复导出");
}
redisCache.setCacheObject(CUST_MAP_EXPORT_REQUEST + custMapExcelDTO.getUserName(), custMapExcelDTO, 15, TimeUnit.MINUTES);
String fileNotification = notificationDownloadService.createFileNotification(custMapExcelDTO.getUserName());
int pageNum = 1;
int pageSize = Math.min(10000, custMapExcelDTO.getTotal());
int pageCount = (int) Math.ceil(custMapExcelDTO.getTotal() / pageSize);
List<CustMapExcelVO> custMapExcelVOS = new ArrayList<>();
do {
PageHelper.startPage(pageNum, pageSize);
List<CustMapExcelVO> custMapVOS = new ArrayList<>();
if(custMapExcelDTO instanceof CustMapCircleExcelDTO){
custMapVOS = custMapMapper.exportCustMapListByCircle((CustMapCircleExcelDTO) custMapExcelDTO);
}else{
custMapVOS = custMapMapper.exportCustMapListByPolygon((CustMapPolygonExcelDTO) custMapExcelDTO);
}
custMapExcelVOS.addAll(custMapVOS);
pageNum++;
} while (pageNum <= pageCount);
// String filePath = fileOptService.saveFile("地图拓客", custMapExcelVOS, CustMapExcelVO.class);
String filePath = importExportTaskService.exportExcelAndUpload(custMapExcelVOS, CustMapExcelVO.class, "地图拓客", OssFileEnum.CUST_MAP_EXPORT, custMapExcelDTO.getUserName());
notificationDownloadService.sendFileNotification(fileNotification, custMapExcelDTO.getUserName(), filePath);
redisCache.deleteObject(CUST_MAP_EXPORT_REQUEST + custMapExcelDTO.getUserName());
}
public List<CustMapExcelVO> exportCustMapList(List<Integer> ids) {
List<CustInfoRadar> custInfoRadars = custMapMapper.selectBatchIds(ids);
return custInfoRadars.stream().map(custInfoRadar -> {
CustMapExcelVO custMapExcelVO = new CustMapExcelVO();
BeanUtils.copyProperties(custInfoRadar, custMapExcelVO);
return custMapExcelVO;
}).collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,69 @@
package com.ruoyi.ibs.custmap.service;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.ibs.custmap.domain.dto.CustMapSearchDTO;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
/**
* @Author 吴凯程
* @Date 2025/6/23
**/
@Service
public class CustMapSearchService {
private static final String CUST_MAP_SEARCH_KEY = "CUST_MAP_SEARCH_";
@Resource
private RedisCache redisCache;
public String saveCustMapSearchTemplate(CustMapSearchDTO custMapSearchDTO) {
String filePattern = CUST_MAP_SEARCH_KEY + SecurityUtils.getUsername() + "*";
Collection<String> fileKeys = redisCache.keys(filePattern);
if (StringUtils.isEmpty(custMapSearchDTO.getTemplateId()) && fileKeys.size() > 4 && !fileKeys.contains(CUST_MAP_SEARCH_KEY)) {
throw new ServiceException("最多只能保存5个模板");
}
if (Objects.isNull(custMapSearchDTO.getTemplateId())) {
custMapSearchDTO.setTemplateId(IdUtils.fastSimpleUUID());
}
String key = CUST_MAP_SEARCH_KEY + SecurityUtils.getUsername() + '_' + custMapSearchDTO.getTemplateId();
custMapSearchDTO.setNickName(SecurityUtils.getLoginUser().getUser().getNickName());
custMapSearchDTO.setCreateTime(new Date());
redisCache.setCacheObject(key, custMapSearchDTO);
return "我的模板" + custMapSearchDTO.getTemplateName() + " 保存成功";
}
public List<CustMapSearchDTO> getCustMapSearchTemplate() {
List<CustMapSearchDTO> collect = new ArrayList<>();
// 根据通知的键和当前用户的用户名生成一个模式字符串,用于匹配通知的键
String filePattern = CUST_MAP_SEARCH_KEY + SecurityUtils.getUsername() + "*";
// 从Redis缓存中获取匹配该模式的所有键
Collection<String> fileKeys = redisCache.keys(filePattern);
// 检查获取到的键集合是否为空,如果不为空,则进行进一步处理
if (fileKeys != null && fileKeys.size() > 0) {
// 使用流操作处理键集合,将每个键对应的值(通知对象)映射出来,并按读取状态排序
for (String key : fileKeys) {
// 从Redis缓存中获取键对应的值通知对象
CustMapSearchDTO custMapSearchDTO = redisCache.getCacheObject(key);
// 返回通知对象
collect.add(custMapSearchDTO);
}
}
return collect;
}
public String deleteCustMapSearchTemplate(String templateId) {
String key = CUST_MAP_SEARCH_KEY + SecurityUtils.getUsername() + '_' + templateId;
if (!redisCache.hasKey(key)) {
throw new ServiceException("模板不存在");
}
redisCache.deleteObject(key);
return "删除成功";
}
}

View File

@@ -0,0 +1,27 @@
package com.ruoyi.ibs.custmap.service;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonDTO;
import com.ruoyi.ibs.custmap.domain.entity.CustInfoRadar;
import com.ruoyi.ibs.custmap.domain.vo.CustMapVO;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
public interface CustMapSelectService {
List<CustMapVO> selectCustListByCircle(CustMapCircleDTO custMapCircleDTO);
Long countCustMapListByCircle(CustMapCircleDTO custMapCircleDTO);
List<CustMapVO> selectCustListByPolygon(CustMapPolygonDTO custMapPolygonDTO);
Long countCustMapListByPolygon(CustMapPolygonDTO custMapPolygonDTO);
CustInfoRadar selectCustInfoRadarById(Integer custId);
}

View File

@@ -0,0 +1,62 @@
package com.ruoyi.ibs.custmap.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.ibs.custmap.domain.entity.DeptAddress;
import com.ruoyi.ibs.custmap.mapper.DeptAddressMapper;
import com.ruoyi.ibs.grid.domain.dto.BaiduResponseDTO;
import com.ruoyi.ibs.grid.domain.vo.AddressResultVO;
import com.ruoyi.ibs.grid.service.AddressAnalyseService;
import com.ruoyi.ibs.grid.service.BaiduApiService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
* @Author 吴凯程
* @Date 2025/5/26
**/
@Service
@Slf4j
public class DeptAddressService {
@Resource
private DeptAddressMapper deptAddressMapper;
@Resource
private BaiduApiService baiduApiService;
@Resource
private AddressAnalyseService addressAnalyseService;
public DeptAddress selectDeptAddressById() {
return deptAddressMapper.selectById(SecurityUtils.getDeptId());
}
public void initDeptAddress() {
List<DeptAddress> deptAddresses = deptAddressMapper.selectList(new LambdaQueryWrapper<>());
for (DeptAddress deptAddress : deptAddresses) {
if (Objects.nonNull(deptAddress.getLat()) || Objects.isNull(deptAddress.getAddress())){
continue;
}
BaiduResponseDTO geocoding = baiduApiService.geocoding(deptAddress.getAddress());
log.info(geocoding.toString());
if (Objects.isNull(geocoding.getResult())){
continue;
}
deptAddress.setLng(geocoding.getResult().getLocation().getLng());
deptAddress.setLat(geocoding.getResult().getLocation().getLat());
AddressResultVO addressResultVO = addressAnalyseService.pointInGeometry(deptAddress.getLng(), deptAddress.getLat());
if (addressResultVO.getStatus() == 0) {
deptAddress.setCity(addressResultVO.getCity());
}
deptAddressMapper.updateById(deptAddress);
}
}
}

View File

@@ -0,0 +1,139 @@
package com.ruoyi.ibs.custmap.service.impl;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.ibs.custmap.domain.dto.CustMapCircleDTO;
import com.ruoyi.ibs.custmap.domain.dto.CustMapPolygonDTO;
import com.ruoyi.ibs.custmap.domain.dto.PolygonDTO;
import com.ruoyi.ibs.custmap.domain.entity.CustInfoRadar;
import com.ruoyi.ibs.custmap.domain.vo.CustMapVO;
import com.ruoyi.ibs.custmap.mapper.CustMapMapper;
import com.ruoyi.ibs.custmap.service.CustMapSelectService;
import com.ruoyi.ibs.grid.service.AddressAnalyseService;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* @Author 吴凯程
* @Date 2025/5/15
**/
@Service
public class CustMapSelectServiceImpl implements CustMapSelectService {
@Resource
private CustMapMapper custMapMapper;
@Resource
private AddressAnalyseService addressAnalyseService;
/**
* @param
* @return
*/
@Override
public List<CustMapVO> selectCustListByCircle(CustMapCircleDTO custMapCircleDTO) {
custMapCircleDTO.setDept(SecurityUtils.getHeadId());
custMapCircleDTO.setPageIndex((custMapCircleDTO.getNum() - 1) * custMapCircleDTO.getSize());
custMapCircleDTO.setLatRange(custMapCircleDTO.getDist() / 111.0);
custMapCircleDTO.setLngRange(custMapCircleDTO.getDist() / (111.0 * Math.cos(Math.toRadians(custMapCircleDTO.getTargetLat()))));
return custMapMapper.selectCustMapListByCircle(custMapCircleDTO);
}
/**
* @param custMapCircleDTO
* @return
*/
@Override
public Long countCustMapListByCircle(CustMapCircleDTO custMapCircleDTO) {
custMapCircleDTO.setDept(SecurityUtils.getHeadId());
custMapCircleDTO.setLatRange(custMapCircleDTO.getDist() / 111.0);
custMapCircleDTO.setLngRange(custMapCircleDTO.getDist() / (111.0 * Math.cos(Math.toRadians(custMapCircleDTO.getTargetLat()))));
return custMapMapper.countCustMapListByCircle(custMapCircleDTO);
}
/**
* @param custMapPolygonDTO
* @return
*/
@Override
public List<CustMapVO> selectCustListByPolygon(CustMapPolygonDTO custMapPolygonDTO) {
if(!addressAnalyseService.checkWktValid(custMapPolygonDTO.getWkt())){
return new ArrayList<>();
}
custMapPolygonDTO.setDept(SecurityUtils.getHeadId());
custMapPolygonDTO.setPageIndex((custMapPolygonDTO.getNum() - 1) * custMapPolygonDTO.getSize());
PolygonDTO polygonDTO = getPolygonDTO(custMapPolygonDTO.getWkt());
BeanUtils.copyProperties(polygonDTO,custMapPolygonDTO);
return custMapMapper.selectCustMapListByPolygon(custMapPolygonDTO);
}
/**
* @param custMapPolygonDTO
* @return
*/
@Override
public Long countCustMapListByPolygon(CustMapPolygonDTO custMapPolygonDTO) {
if(!addressAnalyseService.checkWktValid(custMapPolygonDTO.getWkt())){
return 0L;
}
custMapPolygonDTO.setDept(SecurityUtils.getHeadId());
PolygonDTO polygonDTO = getPolygonDTO(custMapPolygonDTO.getWkt());
BeanUtils.copyProperties(polygonDTO,custMapPolygonDTO);
return custMapMapper.countCustMapListByPolygon(custMapPolygonDTO);
}
/**
* @param custId
* @return
*/
@Override
public CustInfoRadar selectCustInfoRadarById(Integer id) {
return custMapMapper.selectById(id);
}
private PolygonDTO getPolygonDTO(String wkt){
PolygonDTO polygonDTO = new PolygonDTO();
WKTReader wktReader = new WKTReader();
try {
Geometry geometry = wktReader.read(wkt);
Coordinate[] coordinates = geometry.getCoordinates();
for (Coordinate coordinate : coordinates) {
if(Objects.isNull(polygonDTO.getMinLat())){
polygonDTO.setMinLat(coordinate.getY());
}else{
polygonDTO.setMinLat(Math.min(coordinate.getY(), polygonDTO.getMinLat()) );
}
if (Objects.isNull(polygonDTO.getMinLng())){
polygonDTO.setMinLng(coordinate.getX());
}else {
polygonDTO.setMinLng(Math.min(coordinate.getX(), polygonDTO.getMinLng()));
}
if (Objects.isNull(polygonDTO.getMaxLat())){
polygonDTO.setMaxLat(coordinate.getY());
}else {
polygonDTO.setMaxLat(Math.max(coordinate.getY(), polygonDTO.getMaxLat()));
}
if (Objects.isNull(polygonDTO.getMaxLng())){
polygonDTO.setMaxLng(coordinate.getX());
}else {
polygonDTO.setMaxLng(Math.max(coordinate.getX(), polygonDTO.getMaxLng()));
}
}
} catch (ParseException e) {
throw new RuntimeException(e);
}
return polygonDTO;
}
}

View File

@@ -0,0 +1,45 @@
package com.ruoyi.ibs.customerselect.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.ibs.customerselect.service.CustCsvTagService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* @Author 吴凯程
* @Date 2025/11/28
**/
@Api(tags = "CSV客户标签")
@RestController
@RequestMapping("/csv/tag")
public class CustCsvTagController extends BaseController {
@Resource
private CustCsvTagService custCsvTagService;
@PostMapping("/upload")
@Log(title = "CSV客户标签-上传CSV文件并更新")
@ApiOperation("上传CSV文件并更新")
public AjaxResult uploadCsv(MultipartFile file) {
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
if (!suffix.equals("csv")) {
return AjaxResult.error("文件格式错误请上传CSV文件");
}
custCsvTagService.processCsvInBatches(file, SecurityUtils.getUsername(), SecurityUtils.getHeadId());
return AjaxResult.success("文件完成上传,开始更新标签");
}
@GetMapping("/search")
@Log(title = "CSV客户标签-查询客户标签")
@ApiOperation("查询客户标签")
public AjaxResult searchCsv(@RequestParam String custIdc) {
return AjaxResult.success(custCsvTagService.getCsvTagJson(custIdc));
}
}

View File

@@ -0,0 +1,86 @@
package com.ruoyi.ibs.customerselect.controller;
import com.github.pagehelper.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.TableDataPageInfo;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.ibs.customerselect.domain.ListSelectByUser;
import com.ruoyi.ibs.customerselect.domain.ListSelectForUser;
import com.ruoyi.ibs.customerselect.service.IListSelectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 清单查询 控制类
*
* @author ruoyi
*/
@Api(tags = "清单查询管理")
@RestController
@RequestMapping("/system/listselectlist")
public class ListSelectController extends BaseController {
@Autowired
IListSelectService listSelectService;
/**
* 获取清单查询列表信息
*/
// @PreAuthorize("@ss.hasPermi('system:getListInfo')")
@GetMapping("/list")
@Log(title = "清单查询管理-获取清单列表")
@ApiOperation("获取清单列表")
public TableDataPageInfo list(ListSelectByUser listSelectByUser)
{
Page<Object> page = startPage();
List<ListSelectByUser> list = listSelectService.getListInfoByUser(listSelectByUser);
return getDataTable(list ,page);
}
/**
* 获取清单客户列表信息
*/
// @PreAuthorize("@ss.hasPermi('system:getCustListInfo')")
@GetMapping("/custlist")
@Log(title = "清单查询管理-获取客户清单列表")
@ApiOperation("获取客户清单列表")
public TableDataPageInfo custList(ListSelectForUser listSelectForUser)
{
Page<Object> page = startPage();
List<ListSelectForUser> custList = listSelectService.getCustListInfoByUser(listSelectForUser );
return getDataTable(custList ,page);
}
/**
* 批量导出分群客户
*/
// @PreAuthorize("@ss.hasPermi('system:custlist:export')")
@Log(title = "清单查询管理-批量导出分群客户", businessType = BusinessType.IMPORT)
@ApiOperation("批量导出清单列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "groupId", value = "客群id", dataType = "String", dataTypeClass = String.class),
@ApiImplicitParam(name = "campaignId", value = "客群id", dataType = "String", dataTypeClass = String.class),
})
@PostMapping("/export")
public void export(HttpServletResponse response, String custPattern,String groupId, String campaignId,Long deptId,@RequestParam(value = "custIds" , required = true) List<String> custIds) throws Exception{
if(groupId.isEmpty() || custIds.isEmpty()){
throw new ServiceException("请选择需要导出的数据!");
}
listSelectService.selectListExportByGroupId(response,custPattern,groupId,campaignId,deptId,custIds);
}
}

View File

@@ -0,0 +1,223 @@
package com.ruoyi.ibs.customerselect.controller;
import com.github.pagehelper.Page;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataPageInfo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.ibs.customerselect.domain.*;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.ibs.customerselect.service.IMyCustomerService;
import com.ruoyi.ibs.grid.domain.excel.NewPersonAnchor;
import com.ruoyi.ibs.list.service.ISysCampaignGroupCustomerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.rmi.ServerException;
import java.util.ArrayList;
import java.util.List;
/**
* 我的客户 控制类
*
* @author ruoyi
*/
@Api("客户基本信息管理")
@RestController
@RequestMapping("/system/custBaseInfo")
public class MyCustomerController extends BaseController {
@Autowired
private IMyCustomerService myCustomerService;
@Autowired
ISysCampaignGroupCustomerService iSysCampaignGroupCustomerService;
private static Logger logger= LoggerFactory.getLogger(MyCustomerController.class);
/**
* 获取我的客户信息列表
*/
// @PreAuthorize("@ss.hasPermi('system:custBaseInfo:list')")
@Log(title = "我的客户-获取客户信息列表")
@PostMapping("/list")
@ApiOperation("获取客户信息列表")
public AjaxResult list(@RequestBody CustBaseInfo sysCustomerBasedata)
// public TableDataPageInfo<CustBaseInfo> list(CustBaseInfo sysCustomerBasedata)
{
// Page<Object> page = startPage();
List<CustBaseInfo> custBaseInfoList = myCustomerService.selectSysCustomerBasedataList(sysCustomerBasedata);
logger.info(custBaseInfoList.toString());
// return getDataTable(custBaseInfoList ,page);
return AjaxResult.success(custBaseInfoList);
}
@Log(title = "我的客户-获取商户云相关信息")
@GetMapping("/merchantMessage")
@ApiOperation("获取商户云相关信息")
public AjaxResult merchantMessage( String custId)
// public TableDataPageInfo<CustBaseInfo> list(CustBaseInfo sysCustomerBasedata)
{
// Page<Object> page = startPage();
MerchantMcspInfo merchantMcspInfo = myCustomerService.selectmerchantMessage(custId);
// logger.info(merchantMcspInfo.toString());
// return getDataTable(custBaseInfoList ,page);
return AjaxResult.success(merchantMcspInfo);
}
@GetMapping("/searchList")
@ApiOperation("获取高级筛选项")
public AjaxResult searchList(CustBaseInfo sysCustomerBasedata) {
CustListSearchVo custBaseInfoList = myCustomerService.selectCustomListSearchVo(sysCustomerBasedata);
logger.info(custBaseInfoList.toString());
// return getDataTable(custBaseInfoList ,page);
return AjaxResult.success(custBaseInfoList);
}
@Log(title = "我的客户-我的客户导出(企业)")
@PostMapping("/exportBusiness")
@ApiOperation("我的客户导出(企业)")
public void exportBusiness(HttpServletResponse response, @RequestBody List<BusinessExportVo> list)
{
for (BusinessExportVo b:list
) {
b.setCustPattern("2");
}
try {
ExcelUtil<BusinessExportVo> util = new ExcelUtil<>(BusinessExportVo.class);
util.exportExcel(response, list, "sheet1");
} catch (Exception e) {
e.printStackTrace();
}
}
@Log(title = "我的客户-我的客户导出1000条企业")
@PostMapping("/exportBusiness1000")
@ApiOperation("我的客户导出1000条企业")
public void exportBusiness1000(HttpServletResponse response, @RequestBody CustBaseInfo sysCustomerBasedata)
{
sysCustomerBasedata.setSize(1000);
sysCustomerBasedata.setNum(1);
List<CustBaseInfo> custBaseInfoList = myCustomerService.selectSysCustomerBasedataList(sysCustomerBasedata);
List<BusinessExportVo> list = new ArrayList<>();
for (CustBaseInfo b:custBaseInfoList
) {
BusinessExportVo businessExportVo = new BusinessExportVo();
BeanUtils.copyProperties(b,businessExportVo);
businessExportVo.setCustPattern("2");
list.add(businessExportVo);
}
try {
ExcelUtil<BusinessExportVo> util = new ExcelUtil<>(BusinessExportVo.class);
util.exportExcel(response, list, "sheet1");
} catch (Exception e) {
e.printStackTrace();
}
}
@Log(title = "我的客户-我的客户导出(商户)")
@PostMapping("/exportMerchant")
@ApiOperation("我的客户导出(商户)")
public void exportMerchant(HttpServletResponse response, @RequestBody List<MerchantExportVo> list)
{
for (MerchantExportVo m:list
) {
m.setCustPattern("1");
}
try {
ExcelUtil<MerchantExportVo> util = new ExcelUtil<>(MerchantExportVo.class);
util.exportExcel(response, list, "sheet1");
} catch (Exception e) {
e.printStackTrace();
}
}
@Log(title = "我的客户-我的客户导出1000条商户")
@PostMapping("/exportMerchant1000")
@ApiOperation("我的客户导出1000条商户")
public void exportMerchant1000(HttpServletResponse response, @RequestBody CustBaseInfo sysCustomerBasedata)
{
sysCustomerBasedata.setSize(1000);
sysCustomerBasedata.setNum(1);
List<CustBaseInfo> custBaseInfoList = myCustomerService.selectSysCustomerBasedataList(sysCustomerBasedata);
List<MerchantExportVo> list = new ArrayList<>();
for (CustBaseInfo b:custBaseInfoList
) {
MerchantExportVo merchantExportVo = new MerchantExportVo();
BeanUtils.copyProperties(b,merchantExportVo);
merchantExportVo.setCustPattern("1");
list.add(merchantExportVo);
}
try {
ExcelUtil<MerchantExportVo> util = new ExcelUtil<>(MerchantExportVo.class);
util.exportExcel(response, list, "sheet1");
} catch (Exception e) {
e.printStackTrace();
}
}
@Log(title = "我的客户-我的客户导出(个人)")
@PostMapping("/exportRetail")
@ApiOperation("我的客户导出(个人)")
public void exportRetail(HttpServletResponse response, @RequestBody List<RetailExportVo> list)
{
for (RetailExportVo r:list
) {
r.setCustPattern("0");
}
try {
ExcelUtil<RetailExportVo> util = new ExcelUtil<>(RetailExportVo.class);
util.exportExcel(response, list, "sheet1");
} catch (Exception e) {
e.printStackTrace();
}
}
@Log(title = "我的客户-我的客户导出1000条个人")
@PostMapping("/exportRetail1000")
@ApiOperation("我的客户导出1000条个人")
public void exportRetail1000(HttpServletResponse response, @RequestBody CustBaseInfo sysCustomerBasedata)
{
sysCustomerBasedata.setSize(1000);
sysCustomerBasedata.setNum(1);
List<CustBaseInfo> custBaseInfoList = myCustomerService.selectSysCustomerBasedataList(sysCustomerBasedata);
List<RetailExportVo> list = new ArrayList<>();
for (CustBaseInfo b:custBaseInfoList
) {
RetailExportVo retailExportVo = new RetailExportVo();
BeanUtils.copyProperties(b,retailExportVo);
retailExportVo.setCustPattern("0");
list.add(retailExportVo);
}
try {
ExcelUtil<RetailExportVo> util = new ExcelUtil<>(RetailExportVo.class);
util.exportExcel(response, list, "sheet1");
} catch (Exception e) {
e.printStackTrace();
}
}
@Log(title = "我的客户-补充经纬度")
@PostMapping("/selectAddress")
@ApiOperation("补充经纬度")
public AjaxResult selectAddress(@RequestBody List<CustBaseInfo> list)
{
return AjaxResult.success(myCustomerService.selectAddress(list));
}
@Log(title = "我的客户-添加至已有活动")
@PostMapping("/appointCustCamp")
@ApiOperation("添加至已有活动")
public AjaxResult appointCustCamp(String custId,String custName,String custIdc,String custPhone,String custIsn,String socialCreditCode,String lpName,String campaignId,String custType) throws ServerException {
if(!StringUtils.isNotEmpty(custId)){
return AjaxResult.warn("客户ID不能为空");
}
return AjaxResult.success(iSysCampaignGroupCustomerService.appointCustCamp( custId, custName, custIdc, custPhone, custIsn,socialCreditCode,lpName, campaignId, custType));
}
}

View File

@@ -0,0 +1,49 @@
package com.ruoyi.ibs.customerselect.controller;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.ibs.customerselect.service.MyCustomerGridSelectService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @Author 吴凯程
* @Date 2025/5/8
**/
@Api(tags = "我的客户-网格筛选")
@RestController
@RequestMapping("/my/customer/grid/select")
public class MyCustomerGridSelectController extends BaseController {
@Resource
private MyCustomerGridSelectService myCustomerGridSelectService;
@ApiOperation("我的客户-行政网格下拉框")
@Log(title = "我的客户行政网格下拉框")
@GetMapping("/region")
public AjaxResult getRegionGridList(@RequestParam String gridLevel, @RequestParam String opsDept) {
return AjaxResult.success(myCustomerGridSelectService.getRegionGridList(gridLevel, opsDept));
}
@ApiOperation("我的客户-虚拟网格下拉框")
@Log(title = "我的客户虚拟网格下拉框")
@GetMapping("/virtual")
public AjaxResult getVirtualGridList(@RequestParam String opsDept) {
return AjaxResult.success(myCustomerGridSelectService.getVirtualGridList(opsDept));
}
@ApiOperation("我的客户-特色网格下拉框")
@Log(title = "我的客户虚拟网格下拉框")
@GetMapping("/draw")
public AjaxResult getDrawGridList(@RequestParam String opsDept) {
return AjaxResult.success(myCustomerGridSelectService.getDrawGridList(opsDept));
}
}

View File

@@ -0,0 +1,300 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class BusinessExportVo {
/** 客户标签 */
@Excel(name = "客户分类",readConverterExp = "0=个人,1=商户,2=企业")
private String custPattern;
/** 企业名称 */
@Excel(name = "企业名称")
private String custName;
@Excel(name = "归属总行网格名称")
private String regionTopGridName;
@Excel(name = "归属支行网格名称")
private String regionSecGridName;
/** 归属支行 */
@Excel(name = "行政网格归属支行")
private String belongBranchName;
/** 归属网点 */
@Excel(name = "行政网格归属网点")
private String belongOutletName;
@Excel(name = "归属自定义地图网格名称")
private String drawGridName;
@Excel(name = "自定义地图网格归属支行")
private String drawBranchNames;
@Excel(name = "自定义地图网格归属网点")
private String drawOutletNames;
@Excel(name = "自定义地图网格归属客户经理")
private String drawUserNames;
/**
* 归属 网格客户经理名,多个按照逗号 隔开
*/
@Excel(name = "行政网格归属客户经理")
private String belongUserNameList;
@Excel(name = "归属自定义名单网格名称")
private String virtualGridName;
@Excel(name = "自定义名单网格归属支行")
private String virtualBranchNames;
@Excel(name = "自定义名单网格归属网点")
private String virtualOutletNames;
@Excel(name = "自定义名单网格归属客户经理")
private String virtualUserNames;
/** 法人姓名 */
@Excel(name = "法人姓名")
private String lpName;
/** 法人电话 */
@Excel(name = "法人电话")
private String custPhone;
/** 客户类型 */
@Excel(name = "客户类型",readConverterExp = "0=存量,1=潜在,2=暂无")
// @Excel(name = "客户类型")
private String custType ;
/** 产品标签 */
// @Excel(name = "产品标签")
@Excel(name = "产品标签",readConverterExp = "000=暂无,100=存款,010=贷款,001=中收,110=存款、贷款,101=存款、中收,011=贷款、中收,111=存款、贷款、中收")
private String custTag;
/** 企业规模 */
@Excel(name = "企业规模",readConverterExp = "0=小型,1=中型,2=大型,3=微型,4=其他")
// @Excel(name = "企业规模")
private String custScale;
//企业业务指标
/**
* 活期存款余额
*/
@Excel(name = "活期存款余额(元)")
private String hqCurBalance;
/**
* 保证金存款余额
*/
@Excel(name = "保证金存款余额(元)")
private String bzCurBalance;
/**
* 是否授信
*/
@Excel(name = "是否授信")
private String isCredit;
/**
* 贷款余额
*/
@Excel(name = "贷款余额(元)")
private String loanBalanceCny;
/**
* 贷款年日均
*/
@Excel(name = "贷款年日均(元)")
private String loanYearDailyaverage;
/**
* 是否普惠签约
*/
@Excel(name = "是否合同签约")
private String isHtqy;
/**
* 是否有签发承兑汇票
*/
@Excel(name = "是否有签发承兑汇票")
private String financeProd716OpenFlag;
/**
* 承兑汇票余额
*/
@Excel(name = "承兑汇票余额(元)")
private String financeProd716Balance;
/**
* 是否有贴现业务
*/
@Excel(name = "是否有贴现业务")
private String financeProd711OpenFlag;
/**
* 贴现金额
*/
@Excel(name = "贴现金额(元)")
private String financeProd711Balance;
/**
* 是否有保函业务
*/
@Excel(name = "是否有保函业务")
private String intlBussinessJcbhOpenFlag;
/**
* 是否为有效代发工资客户
*/
@Excel(name = "是否为有效代发工资客户")
private String isUstr;
/**
* 月均代发工资笔数
*/
@Excel(name = "月均代发工资笔数")
private String ustrCountPerM;
/**
* 月均代发工资金额(元)
*/
@Excel(name = "月均代发工资金额(元)")
private String ustrBalM;
/**
* 是否代扣电费
*/
@Excel(name = "是否代扣电费")
private String elecchargeSignFlag;
/**
* 是否代扣水费
*/
@Excel(name = "是否代扣水费")
private String waterchargeSignFlag;
/**
* 是否代扣税费
*/
@Excel(name = "是否代扣税费")
private String taxdeductionSignFlag;
/**
* 是否票据宝签约
*/
@Excel(name = "是否票据宝签约")
private String pjb;
/**
* 是否财资宝签约
*/
@Excel(name = "是否财资宝签约")
private String czb;
/**
* 是否收付宝签约
*/
@Excel(name = "是否收付宝签约")
private String sfb;
/**
* 是否贸融宝签约
*/
@Excel(name = "是否贸融宝签约")
private String mrb;
/**
* 是否数字生态产品签约
*/
@Excel(name = "是否数字生态产品签约")
private String szst;
/**
* 是否开户
*/
@Excel(name = "是否开户")
private String isOpenSts;
/**
* 是否国际结算业务
*/
@Excel(name = "是否国际结算业务")
private String intlBussinessOpenFlag;
/**
* 是否有远期结算汇业务
*/
@Excel(name = "是否有远期结算汇业务")
private String intlBussiness325OpenFlag;
@Excel(name = "近365天有无走访")
private String is365zf;
@Excel(name = "近180天有无走访")
private String is180zf;
@Excel(name = "近90天有无走访")
private String is90zf;
@Excel(name = "近30天有无走访")
private String is30zf;
public String getCustPattern() {
return custPattern;
}
public void setCustPattern(String custPattern) {
this.custPattern = custPattern;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getBelongBranchName() {
return belongBranchName;
}
public void setBelongBranchName(String belongBranchName) {
this.belongBranchName = belongBranchName;
}
public String getBelongOutletName() {
return belongOutletName;
}
public void setBelongOutletName(String belongOutletName) {
this.belongOutletName = belongOutletName;
}
public String getLpName() {
return lpName;
}
public void setLpName(String lpName) {
this.lpName = lpName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getBelongUserNameList() {
return belongUserNameList;
}
public void setBelongUserNameList(String belongUserNameList) {
this.belongUserNameList = belongUserNameList;
}
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getCustTag() {
return custTag;
}
public void setCustTag(String custTag) {
this.custTag = custTag;
}
public String getCustScale() {
return custScale;
}
public void setCustScale(String custScale) {
this.custScale = custScale;
}
}

View File

@@ -0,0 +1,27 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
public class ContinuousParam extends BaseEntity {
private String key;
private List<String> value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public List<String> getValue() {
return value;
}
public void setValue(List<String> value) {
this.value = value;
}
}

View File

@@ -0,0 +1,715 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 客户基本信息对象 sys_customer_basedata
*
* @author ruoyi
* @date 2024-09-10
*/
@Data
public class CustBaseInfo extends BaseEntity
{
/** id */
private Long id;
/** 客户标签 */
@NotNull(message = "客户标签不能为空")
@Excel(name = "客户分类",readConverterExp = "0=个人,1=商户,2=企业")
private String custPattern = "0";
/** 客户类型 */
@NotNull(message = "客户类型不能为空")
@Excel(name = "客户类型",readConverterExp = "0=存量,1=潜在")
private String custType = "2";
/** 产品标签 */
@NotNull(message = "产品标签不能为空")
@Excel(name = "产品标签",readConverterExp = "100=存款,010=贷款,001=中收,110=存款、贷款,101=存款、中收,011=贷款、中收,111=存款、贷款、中收")
private String custTag = "111";
/** 企业规模 */
@NotNull(message = "企业规模不能为空")
@Excel(name = "企业规模",readConverterExp = "0=无,1=小型,2=中型,3=大型")
private String custScale;
//规模小型
private String custScale1;
//规模中型
private String custScale2;
//规模大型
private String custScale3;
//规模微型
private String custScale0;
private String opsDept;
private String custLevel;
private Long branchId;
private Long outletId;
private String cmpmUserName;
private Long cmpmBranchId;
private Long cmpmOutletId;
private String deptCode;
private boolean isHead;
private List<String> custScaleList;
/** 企业名称 */
@Excel(name = "企业名称")
private String custName;
@Excel(name = "归属总行网格名称")
private String regionTopGridName;
@Excel(name = "归属支行网格名称")
private String regionSecGridName;
/** 归属支行 */
@Excel(name = "行政网格归属支行")
private String belongBranchName;
/** 归属网点 */
@Excel(name = "行政网格归属网点")
private String belongOutletName;
/**
* 归属 网格客户经理名,多个按照逗号 隔开
*/
@Excel(name = "行政网格归属客户经理")
private String belongUserNameList;
/** 管护客户经理 */
private String manageUserName;
/** 网格客户经理 */
private String belongUserName;
/** 法人姓名 */
private String lpName;
/** 法人电话 */
private String custPhone;
/** 注册资本 */
private String custCapital;
/** 是否贷款 */
private String loanTag;
/** 客户状态 */
private String status;
/** 归属机构 */
private Long userDeptId;
private Long deptId;
private Long outletsId;
private Long userId;
private String userName;
private String custId;
private String roleName;
int num;
int size;
int start;
int end;
String latitude;
String longitude;
private List<Long> regionTopGridIds;
private List<Long> regionSecGridIds;
private List<Long> virtualGridIds;
private List<Long> drawGridIds;
private Boolean isSelectGrid;
private String regionBranchNames;
private String regionOutletNames;
private String regionUserNames;
@Excel(name = "归属自定义地图网格名称")
private String drawGridName;
@Excel(name = "自定义地图网格归属支行")
private String drawBranchNames;
@Excel(name = "自定义地图网格归属网点")
private String drawOutletNames;
@Excel(name = "自定义地图网格归属客户经理")
private String drawUserNames;
@Excel(name = "归属自定义名单网格名称")
private String virtualGridName;
@Excel(name = "自定义名单网格归属支行")
private String virtualBranchNames;
@Excel(name = "自定义名单网格归属网点")
private String virtualOutletNames;
@Excel(name = "自定义名单网格归属客户经理")
private String virtualUserNames;
private String asset;
private String credit;
//个人商户业务指标
/**
* 活期存款余额
*/
@Excel(name = "活期存款余额(元)")
private String curBalD;
/**
* 定期存款余额
*/
@Excel(name = "定期存款余额(元)")
private String curBalT;
/**
* 贷款余额
*/
@Excel(name = "贷款余额(元)")
private String balLoan;
/**
* 五级不良贷款余额
*/
@Excel(name = "五级不良贷款余额(元)")
private String curBal5Bad;
/**
* 活期存款年日均
*/
@Excel(name = "活期存款年日均(元)")
private String curDAve;
/**
* 定期存款年日均
*/
@Excel(name = "定期存款年日均(元)")
private String curTAve;
/**
* 贷款年日均
*/
@Excel(name = "贷款年日均(元)")
private String loanAve;
/**
* 是否建档
*/
@Excel(name = "是否建档")
private String isPh;
/**
* 是否授信
*/
@Excel(name = "是否授信")
private String isSx;
/**
* 是否合同签约
*/
@Excel(name = "是否合同签约")
private String isYxht;
/**
* 是否持有信用卡
*/
@Excel(name = "是否持有信用卡")
private String isXyk;
/**
* 是否开通丰收互联
*/
@Excel(name = "是否开通丰收互联")
private String fshl;
/**
* 是否办理收单
*/
@Excel(name = "是否办理收单")
private String isSd;
/**
* 是否办理etc
*/
@Excel(name = "是否办理etc")
private String etc;
/**
* 是否代扣电费
*/
@Excel(name = "是否代扣电费")
private String dian;
/**
* 是否贷款黑名单
*/
@Excel(name = "是否贷款黑名单")
private String isBlack;
/**
* 是否五级不良贷款客户
*/
@Excel(name = "是否五级不良贷款客户")
private String isBad;
//企业业务指标
/**
* 活期存款余额
*/
@Excel(name = "活期存款余额(元)")
private String hqCurBalance;
/**
* 保证金存款余额
*/
@Excel(name = "保证金存款余额(元)")
private String bzCurBalance;
/**
* 是否授信
*/
@Excel(name = "是否授信")
private String isCredit;
/**
* 贷款余额
*/
@Excel(name = "贷款余额(元)")
private String loanBalanceCny;
/**
* 贷款年日均
*/
@Excel(name = "贷款年日均(元)")
private String loanYearDailyaverage;
/**
* 是否普惠签约
*/
@Excel(name = "是否合同签约")
private String isHtqy;
/**
* 是否有签发承兑汇票
*/
@Excel(name = "是否有签发承兑汇票")
private String financeProd716OpenFlag;
/**
* 承兑汇票余额
*/
@Excel(name = "承兑汇票余额(元)")
private String financeProd716Balance;
/**
* 是否有贴现业务
*/
@Excel(name = "是否有贴现业务")
private String financeProd711OpenFlag;
/**
* 贴现金额
*/
@Excel(name = "贴现金额(元)")
private String financeProd711Balance;
/**
* 是否有保函业务
*/
@Excel(name = "是否有保函业务")
private String intlBussinessJcbhOpenFlag;
/**
* 是否为有效代发工资客户
*/
@Excel(name = "是否为有效代发工资客户")
private String isUstr;
/**
* 月均代发工资笔数
*/
@Excel(name = "月均代发工资笔数")
private String ustrCountPerM;
/**
* 月均代发工资金额(元)
*/
@Excel(name = "月均代发工资金额(元)")
private String ustrBalM;
/**
* 是否代扣电费
*/
@Excel(name = "是否代扣电费")
private String elecchargeSignFlag;
/**
* 是否代扣水费
*/
@Excel(name = "是否代扣水费")
private String waterchargeSignFlag;
/**
* 是否代扣税费
*/
@Excel(name = "是否代扣税费")
private String taxdeductionSignFlag;
/**
* 是否票据宝签约
*/
@Excel(name = "是否票据宝签约")
private String pjb;
/**
* 是否财资宝签约
*/
@Excel(name = "是否财资宝签约")
private String czb;
/**
* 是否收付宝签约
*/
@Excel(name = "是否收付宝签约")
private String sfb;
/**
* 是否贸融宝签约
*/
@Excel(name = "是否贸融宝签约")
private String mrb;
/**
* 是否数字生态产品签约
*/
@Excel(name = "是否数字生态产品签约")
private String szst;
/**
* 是否开户
*/
@Excel(name = "是否开户")
private String isOpenSts;
/**
* 是否国际结算业务
*/
@Excel(name = "是否国际结算业务")
private String intlBussinessOpenFlag;
/**
* 是否有远期结算汇业务
*/
@Excel(name = "是否有远期结算汇业务")
private String intlBussiness325OpenFlag;
@Excel(name = "近365天有无走访")
private String is365zf;
@Excel(name = "近180天有无走访")
private String is180zf;
@Excel(name = "近90天有无走访")
private String is90zf;
@Excel(name = "近30天有无走访")
private String is30zf;
public String getBelongUserNameList() {
return belongUserNameList;
}
public void setBelongUserNameList(String belongUserNameList) {
this.belongUserNameList = belongUserNameList;
}
public String getOpsDept() {
return opsDept;
}
public void setOpsDept(String opsDept) {
this.opsDept = opsDept;
}
public String getCustScale1() {
return custScale1;
}
public void setCustScale1(String custScale1) {
this.custScale1 = custScale1;
}
public String getCustScale2() {
return custScale2;
}
public void setCustScale2(String custScale2) {
this.custScale2 = custScale2;
}
public String getCustScale3() {
return custScale3;
}
public void setCustScale3(String custScale3) {
this.custScale3 = custScale3;
}
public String getCustScale0() {
return custScale0;
}
public void setCustScale0(String custScale0) {
this.custScale0 = custScale0;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@NotBlank(message = "客户标签不能为空")
public String getCustPattern() {
return custPattern;
}
public void setCustPattern(String custPattern) {
this.custPattern = custPattern;
}
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getCustTag() {
return custTag;
}
public void setCustTag(String custTag) {
this.custTag = custTag;
}
public String getCustScale() {
return custScale;
}
public void setCustScale(String custScale) {
this.custScale = custScale;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getBelongBranchName() {
return belongBranchName;
}
public void setBelongBranchName(String belongBranchName) {
this.belongBranchName = belongBranchName;
}
public String getBelongOutletName() {
return belongOutletName;
}
public void setBelongOutletName(String belongOutletName) {
this.belongOutletName = belongOutletName;
}
public String getManageUserName() {
return manageUserName;
}
public void setManageUserName(String manageUserName) {
this.manageUserName = manageUserName;
}
public String getBelongUserName() {
return belongUserName;
}
public void setBelongUserName(String belongUserName) {
this.belongUserName = belongUserName;
}
public String getLpName() {
return lpName;
}
public void setLpName(String lpName) {
this.lpName = lpName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getCustCapital() {
return custCapital;
}
public void setCustCapital(String custCapital) {
this.custCapital = custCapital;
}
public String getLoanTag() {
return loanTag;
}
public void setLoanTag(String loanTag) {
this.loanTag = loanTag;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Long getUserDeptId() {
return userDeptId;
}
public void setUserDeptId(Long userDeptId) {
this.userDeptId = userDeptId;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getOutletsId() {
return outletsId;
}
public void setOutletsId(Long outletsId) {
this.outletsId = outletsId;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
private List<ContinuousParam> continuousParams; //连续型指标
private List<DiscreteParam> discreteParams; //离散型指标
private String perMetric;
public List<ContinuousParam> getContinuousParams() {
return continuousParams;
}
public void setContinuousParams(List<ContinuousParam> continuousParams) {
this.continuousParams = continuousParams;
}
public List<DiscreteParam> getDiscreteParams() {
return discreteParams;
}
public void setDiscreteParams(List<DiscreteParam> discreteParams) {
this.discreteParams = discreteParams;
}
public String getPerMetric() {
return perMetric;
}
public void setPerMetric(String perMetric) {
this.perMetric = perMetric;
}
@Override
public String toString() {
return "CustBaseInfo{" +
"id=" + id +
", custPattern='" + custPattern + '\'' +
", custType='" + custType + '\'' +
", custTag='" + custTag + '\'' +
", custScale='" + custScale + '\'' +
", custName='" + custName + '\'' +
", belongBranchName='" + belongBranchName + '\'' +
", belongOutletName='" + belongOutletName + '\'' +
", manageUserName='" + manageUserName + '\'' +
", belongUserName=" + belongUserName +
", lpName='" + lpName + '\'' +
", custPhone='" + custPhone + '\'' +
", custCapital='" + custCapital + '\'' +
", loanTag='" + loanTag + '\'' +
", status='" + status + '\'' +
", userDeptId=" + userDeptId +
'}';
}
}

View File

@@ -0,0 +1,34 @@
package com.ruoyi.ibs.customerselect.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @Author 吴凯程
* @Date 2025/11/27
**/
@Data
public class CustCsvTag {
/** 主键 */
@ApiModelProperty(value = "主键",notes = "")
@TableId(type = IdType.AUTO)
private Long id ;
/** 机构号 */
@ApiModelProperty(value = "机构号",notes = "")
private String headId ;
/** 客户号 */
@ApiModelProperty(value = "证件号",notes = "")
private String custIdc ;
/** 文件id */
@ApiModelProperty(value = "文件id",notes = "")
private String fileId ;
/** 更新日期 */
@ApiModelProperty(value = "更新日期",notes = "")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date updateTime ;
}

View File

@@ -0,0 +1,48 @@
package com.ruoyi.ibs.customerselect.domain;
public class CustInfoDeleteFromAnchor {
/** 客户类型 */
private String custType;
/** 客户号 */
private String custId;
/** 客户证件类型 */
private String custIdType;
/** 证件号 */
private String legalId;
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getCustIdType() {
return custIdType;
}
public void setCustIdType(String custIdType) {
this.custIdType = custIdType;
}
public String getLegalId() {
return legalId;
}
public void setLegalId(String legalId) {
this.legalId = legalId;
}
}

View File

@@ -0,0 +1,167 @@
package com.ruoyi.ibs.customerselect.domain;
import java.util.Date;
/**
* 客户基本信息对象 custInfoUpdateFromAnchor
*
* @author ruoyi
* @date 2024-10-29
*/
public class CustInfoUpdateFromAnchor {
/** 客户类型 */
private String custType;
/** 客户id */
private String custId;
/** 证件类型 */
private String custIdType;
/** 锚点名称 */
private String anchorName;
/** 所在行业 */
private String belongBusiness;
/** 创建人 */
private String updateBy;
/** 创建机构 */
private String updateOrg;
/** 证件号 */
private String legalId;
/** 客户内码 */
private String custIsn;
/** 地址 */
private String address;
/** 详细地址 */
private String addressDetail;
/** 归属行政区划编码 */
private String regionCode;
/** 创建时间 */
private Date updateTime;
private String addressName;
public String getAddressName() {
return addressName;
}
public void setAddressName(String addressName) {
this.addressName = addressName;
}
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getCustIdType() {
return custIdType;
}
public void setCustIdType(String custIdType) {
this.custIdType = custIdType;
}
public String getAnchorName() {
return anchorName;
}
public void setAnchorName(String anchorName) {
this.anchorName = anchorName;
}
public String getBelongBusiness() {
return belongBusiness;
}
public void setBelongBusiness(String belongBusiness) {
this.belongBusiness = belongBusiness;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public String getUpdateOrg() {
return updateOrg;
}
public void setUpdateOrg(String updateOrg) {
this.updateOrg = updateOrg;
}
public String getLegalId() {
return legalId;
}
public void setLegalId(String legalId) {
this.legalId = legalId;
}
public String getCustIsn() {
return custIsn;
}
public void setCustIsn(String custIsn) {
this.custIsn = custIsn;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
public String getRegionCode() {
return regionCode;
}
public void setRegionCode(String regionCode) {
this.regionCode = regionCode;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
}

View File

@@ -0,0 +1,16 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.List;
import java.util.Map;
@Data
public class CustListSearchVo extends BaseEntity {
private List<Map<String,Object>> continuousParams; //连续型
private List<Map<String,Object>> discreteParams; //离散型
}

View File

@@ -0,0 +1,25 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.core.domain.BaseEntity;
public class DiscreteParam extends BaseEntity {
private String key;
private String value;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}

View File

@@ -0,0 +1,696 @@
package com.ruoyi.ibs.customerselect.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
* 网格汇总统计_公司对象 grid_cmpm_count_gongsi_965
*
* @author ruoyi
* @date 2025-03-22
*/
public class GridSummarCount extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 统计日期 */
@Excel(name = "统计日期")
private String dt;
/** 一级网格名称 */
@Excel(name = "一级网格名称")
private String gridName;
/** 二级网格名称 */
@Excel(name = "二级网格名称")
private String gridName2;
/** 镇/街道 */
@Excel(name = "镇/街道")
private String town;
/** 归属支行 */
@Excel(name = "归属支行")
private String deptId;
/** 归属网点 */
@Excel(name = "归属网点")
private String outletsId;
/** 归属客户经理 */
@Excel(name = "归属客户经理")
private String userName;
/** 入格客户数 */
@Excel(name = "入格客户数")
private Integer custNum;
/** 活期存款余额 */
@Excel(name = "活期存款余额")
private String hqCurBalance;
/** 保证金存款余额 */
@Excel(name = "保证金存款余额")
private String bzCurBalance;
/** 贷款余额 */
@Excel(name = "贷款余额")
private String loanBalanceCny;
/** 贴现余额 */
@Excel(name = "贴现余额")
private String financeProd711Balance;
/** 承兑汇票余额 */
@Excel(name = "承兑汇票余额")
private String financeProd716Balance;
/** 贷款年日均 */
@Excel(name = "贷款年日均")
private String loanYearDailyaverage;
/** 普惠签约率 */
@Excel(name = "普惠签约率")
private String phRat;
/** 签发承兑汇票率 */
@Excel(name = "签发承兑汇票率")
private String qfcdRat;
/** 贴现业务率 */
@Excel(name = "贴现业务率")
private String txRat;
/** 保函业务率 */
@Excel(name = "保函业务率")
private String bhRat;
/** 有效代发工资率 */
@Excel(name = "有效代发工资率")
private String yxdfgzRat;
/** 代扣电费率 */
@Excel(name = "代扣电费率")
private String dkdfRat;
/** 代扣水费率 */
@Excel(name = "代扣水费率")
private String dksfRat;
/** 代扣税费率 */
@Excel(name = "代扣税费率")
private String dkshfRat;
/** 票据宝签约率 */
@Excel(name = "票据宝签约率")
private String pjbRat;
/** 财资宝签约率 */
@Excel(name = "财资宝签约率")
private String czbRat;
/** 收付宝签约率 */
@Excel(name = "收付宝签约率")
private String sfbRat;
/** 贸融宝签约率 */
@Excel(name = "贸融宝签约率")
private String mrbRat;
/** 数字生态产品签约率 */
@Excel(name = "数字生态产品签约率")
private String szstRat;
/** 开户率 */
@Excel(name = "开户率")
private String khRat;
/** 国际结算业务率 */
@Excel(name = "国际结算业务率")
private String gjjsywRat;
/** 远期结算汇业务率 */
@Excel(name = "远期结算汇业务率")
private String yqjshRat;
/** 普惠签约数 */
@Excel(name = "普惠签约数")
private Integer phNum;
/** 签发承兑汇票数 */
@Excel(name = "签发承兑汇票数")
private Integer qfcdNum;
/** 贴现业务数 */
@Excel(name = "贴现业务数")
private Integer txNum;
/** 保函业务数 */
@Excel(name = "保函业务数")
private Integer bhNum;
/** 有效代发工资数 */
@Excel(name = "有效代发工资数")
private Integer yxdfgzNum;
/** 代扣电费数 */
@Excel(name = "代扣电费数")
private Integer dkdfNum;
/** 代扣水费数 */
@Excel(name = "代扣水费数")
private Integer dksfNum;
/** 代扣税费数 */
@Excel(name = "代扣税费数")
private Integer dkshfNum;
/** 票据宝签约数 */
@Excel(name = "票据宝签约数")
private Integer pjbNum;
/** 财资宝签约数 */
@Excel(name = "财资宝签约数")
private Integer czbNum;
/** 收付宝签约数 */
@Excel(name = "收付宝签约数")
private Integer sfbNum;
/** 贸融宝签约数 */
@Excel(name = "贸融宝签约数")
private Integer mrbNum;
/** 数字生态产品签约数 */
@Excel(name = "数字生态产品签约数")
private Integer szstNum;
/** 开户数 */
@Excel(name = "开户数")
private Integer khNum;
/** 国际结算业务数 */
@Excel(name = "国际结算业务数")
private Integer gjjsywNum;
/** 远期结算汇业务数 */
@Excel(name = "远期结算汇业务数")
private Integer yqjshNum;
/** 归属行政区划编码 */
@Excel(name = "归属行政区划编码")
private String regionCode;
/** 部室归属 0零售 1公司 2运管 */
@Excel(name = "部室归属 0零售 1公司 2运管")
private String opsDept;
public void setDt(String dt)
{
this.dt = dt;
}
public String getDt()
{
return dt;
}
public void setGridName(String gridName)
{
this.gridName = gridName;
}
public String getGridName()
{
return gridName;
}
public void setGridName2(String gridName2)
{
this.gridName2 = gridName2;
}
public String getGridName2()
{
return gridName2;
}
public void setTown(String town)
{
this.town = town;
}
public String getTown()
{
return town;
}
public void setDeptId(String deptId)
{
this.deptId = deptId;
}
public String getDeptId()
{
return deptId;
}
public void setOutletsId(String outletsId)
{
this.outletsId = outletsId;
}
public String getOutletsId()
{
return outletsId;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public String getUserName()
{
return userName;
}
public void setCustNum(Integer custNum)
{
this.custNum = custNum;
}
public Integer getCustNum()
{
return custNum;
}
public void setHqCurBalance(String hqCurBalance)
{
this.hqCurBalance = hqCurBalance;
}
public String getHqCurBalance()
{
return hqCurBalance;
}
public void setBzCurBalance(String bzCurBalance)
{
this.bzCurBalance = bzCurBalance;
}
public String getBzCurBalance()
{
return bzCurBalance;
}
public void setLoanBalanceCny(String loanBalanceCny)
{
this.loanBalanceCny = loanBalanceCny;
}
public String getLoanBalanceCny()
{
return loanBalanceCny;
}
public void setFinanceProd711Balance(String financeProd711Balance)
{
this.financeProd711Balance = financeProd711Balance;
}
public String getFinanceProd711Balance()
{
return financeProd711Balance;
}
public void setFinanceProd716Balance(String financeProd716Balance)
{
this.financeProd716Balance = financeProd716Balance;
}
public String getFinanceProd716Balance()
{
return financeProd716Balance;
}
public void setLoanYearDailyaverage(String loanYearDailyaverage)
{
this.loanYearDailyaverage = loanYearDailyaverage;
}
public String getLoanYearDailyaverage()
{
return loanYearDailyaverage;
}
public void setPhRat(String phRat)
{
this.phRat = phRat;
}
public String getPhRat()
{
return phRat;
}
public void setQfcdRat(String qfcdRat)
{
this.qfcdRat = qfcdRat;
}
public String getQfcdRat()
{
return qfcdRat;
}
public void setTxRat(String txRat)
{
this.txRat = txRat;
}
public String getTxRat()
{
return txRat;
}
public void setBhRat(String bhRat)
{
this.bhRat = bhRat;
}
public String getBhRat()
{
return bhRat;
}
public void setYxdfgzRat(String yxdfgzRat)
{
this.yxdfgzRat = yxdfgzRat;
}
public String getYxdfgzRat()
{
return yxdfgzRat;
}
public void setDkdfRat(String dkdfRat)
{
this.dkdfRat = dkdfRat;
}
public String getDkdfRat()
{
return dkdfRat;
}
public void setDksfRat(String dksfRat)
{
this.dksfRat = dksfRat;
}
public String getDksfRat()
{
return dksfRat;
}
public void setDkshfRat(String dkshfRat)
{
this.dkshfRat = dkshfRat;
}
public String getDkshfRat()
{
return dkshfRat;
}
public void setPjbRat(String pjbRat)
{
this.pjbRat = pjbRat;
}
public String getPjbRat()
{
return pjbRat;
}
public void setCzbRat(String czbRat)
{
this.czbRat = czbRat;
}
public String getCzbRat()
{
return czbRat;
}
public void setSfbRat(String sfbRat)
{
this.sfbRat = sfbRat;
}
public String getSfbRat()
{
return sfbRat;
}
public void setMrbRat(String mrbRat)
{
this.mrbRat = mrbRat;
}
public String getMrbRat()
{
return mrbRat;
}
public void setSzstRat(String szstRat)
{
this.szstRat = szstRat;
}
public String getSzstRat()
{
return szstRat;
}
public void setKhRat(String khRat)
{
this.khRat = khRat;
}
public String getKhRat()
{
return khRat;
}
public void setGjjsywRat(String gjjsywRat)
{
this.gjjsywRat = gjjsywRat;
}
public String getGjjsywRat()
{
return gjjsywRat;
}
public void setYqjshRat(String yqjshRat)
{
this.yqjshRat = yqjshRat;
}
public String getYqjshRat()
{
return yqjshRat;
}
public void setPhNum(Integer phNum)
{
this.phNum = phNum;
}
public Integer getPhNum()
{
return phNum;
}
public void setQfcdNum(Integer qfcdNum)
{
this.qfcdNum = qfcdNum;
}
public Integer getQfcdNum()
{
return qfcdNum;
}
public void setTxNum(Integer txNum)
{
this.txNum = txNum;
}
public Integer getTxNum()
{
return txNum;
}
public void setBhNum(Integer bhNum)
{
this.bhNum = bhNum;
}
public Integer getBhNum()
{
return bhNum;
}
public void setYxdfgzNum(Integer yxdfgzNum)
{
this.yxdfgzNum = yxdfgzNum;
}
public Integer getYxdfgzNum()
{
return yxdfgzNum;
}
public void setDkdfNum(Integer dkdfNum)
{
this.dkdfNum = dkdfNum;
}
public Integer getDkdfNum()
{
return dkdfNum;
}
public void setDksfNum(Integer dksfNum)
{
this.dksfNum = dksfNum;
}
public Integer getDksfNum()
{
return dksfNum;
}
public void setDkshfNum(Integer dkshfNum)
{
this.dkshfNum = dkshfNum;
}
public Integer getDkshfNum()
{
return dkshfNum;
}
public void setPjbNum(Integer pjbNum)
{
this.pjbNum = pjbNum;
}
public Integer getPjbNum()
{
return pjbNum;
}
public void setCzbNum(Integer czbNum)
{
this.czbNum = czbNum;
}
public Integer getCzbNum()
{
return czbNum;
}
public void setSfbNum(Integer sfbNum)
{
this.sfbNum = sfbNum;
}
public Integer getSfbNum()
{
return sfbNum;
}
public void setMrbNum(Integer mrbNum)
{
this.mrbNum = mrbNum;
}
public Integer getMrbNum()
{
return mrbNum;
}
public void setSzstNum(Integer szstNum)
{
this.szstNum = szstNum;
}
public Integer getSzstNum()
{
return szstNum;
}
public void setKhNum(Integer khNum)
{
this.khNum = khNum;
}
public Integer getKhNum()
{
return khNum;
}
public void setGjjsywNum(Integer gjjsywNum)
{
this.gjjsywNum = gjjsywNum;
}
public Integer getGjjsywNum()
{
return gjjsywNum;
}
public void setYqjshNum(Integer yqjshNum)
{
this.yqjshNum = yqjshNum;
}
public Integer getYqjshNum()
{
return yqjshNum;
}
public void setRegionCode(String regionCode)
{
this.regionCode = regionCode;
}
public String getRegionCode()
{
return regionCode;
}
public void setOpsDept(String opsDept)
{
this.opsDept = opsDept;
}
public String getOpsDept()
{
return opsDept;
}
@Override
public String toString() {
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
.append("dt", getDt())
.append("gridName", getGridName())
.append("gridName2", getGridName2())
.append("town", getTown())
.append("deptId", getDeptId())
.append("outletsId", getOutletsId())
.append("userName", getUserName())
.append("custNum", getCustNum())
.append("hqCurBalance", getHqCurBalance())
.append("bzCurBalance", getBzCurBalance())
.append("loanBalanceCny", getLoanBalanceCny())
.append("financeProd711Balance", getFinanceProd711Balance())
.append("financeProd716Balance", getFinanceProd716Balance())
.append("loanYearDailyaverage", getLoanYearDailyaverage())
.append("phRat", getPhRat())
.append("qfcdRat", getQfcdRat())
.append("txRat", getTxRat())
.append("bhRat", getBhRat())
.append("yxdfgzRat", getYxdfgzRat())
.append("dkdfRat", getDkdfRat())
.append("dksfRat", getDksfRat())
.append("dkshfRat", getDkshfRat())
.append("pjbRat", getPjbRat())
.append("czbRat", getCzbRat())
.append("sfbRat", getSfbRat())
.append("mrbRat", getMrbRat())
.append("szstRat", getSzstRat())
.append("khRat", getKhRat())
.append("gjjsywRat", getGjjsywRat())
.append("yqjshRat", getYqjshRat())
.append("phNum", getPhNum())
.append("qfcdNum", getQfcdNum())
.append("txNum", getTxNum())
.append("bhNum", getBhNum())
.append("yxdfgzNum", getYxdfgzNum())
.append("dkdfNum", getDkdfNum())
.append("dksfNum", getDksfNum())
.append("dkshfNum", getDkshfNum())
.append("pjbNum", getPjbNum())
.append("czbNum", getCzbNum())
.append("sfbNum", getSfbNum())
.append("mrbNum", getMrbNum())
.append("szstNum", getSzstNum())
.append("khNum", getKhNum())
.append("gjjsywNum", getGjjsywNum())
.append("yqjshNum", getYqjshNum())
.append("regionCode", getRegionCode())
.append("opsDept", getOpsDept())
.toString();
}
}

View File

@@ -0,0 +1,58 @@
package com.ruoyi.ibs.customerselect.domain;
public class GroupListVo {
/** 清单ID */
private String groupId;
/** 清单名称 */
private String groupName;
/** 清单类型 */
private String groupType;
/** 创建机构 */
private String createRole;
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getGroupType() {
return groupType;
}
public void setGroupType(String groupType) {
this.groupType = groupType;
}
public String getCreateRole() {
return createRole;
}
public void setCreateRole(String createRole) {
this.createRole = createRole;
}
@Override
public String toString() {
return "GroupListVo{" +
"groupId='" + groupId + '\'' +
", groupName='" + groupName + '\'' +
", groupType='" + groupType + '\'' +
", createRole='" + createRole + '\'' +
'}';
}
}

View File

@@ -0,0 +1,350 @@
package com.ruoyi.ibs.customerselect.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import javax.validation.constraints.NotNull;
import java.util.Date;
/**
* 清单列表查询信息 ListSelectByUser
*
* @author ruoyi
* @date 2024-09-25
*/
public class ListSelectByUser {
/** 客户标签 */
@NotNull(message = "客户标签不能为空")
private String custPattern;
/** 用户机构 */
private Long userDept;
/** 用户id */
private Long userId;
/** 清单来源 */
private String createRole;
/** 清单类型 */
private String groupType;
/** 客户类型 */
private String custType;
/** 清单ID */
private String groupId;
/** 清单名称 */
private String groupName;
/** 客户数 */
private Long customerNum;
/** 关联活动id */
private String campaignId;
/** 关联活动名称 */
private String campaignName;
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startTime;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endTime;
/** 活动状态 */
private String actionStatus;
/** 紧急程度 */
private String campaignDegree;
/** 分配机构id */
private Long deptId;
/** 分配机构 */
private String belongDept;
private String belongOutlet;
/** 分配结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date claimEndTime;
/** 认领类型 */
private String claimType;
/** 机构领取状态 */
private String orgClaimStatus;
/** 机构分配状态 */
private String orgDistributeStatus;
/** 客户经理认领率 */
private String receiveSitustion = "0%";
/** 是否二次推送 */
private String secondPushStatus;
/** 执行人 0-机构1-个人2-混合分配 */
private String executer;
/** 更新时间 */
private Date updateTime;
/** 创建时间 */
private Date createTime;
/** 当前时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date nowTime;
@Excel(name = "考核目标")
private String checkTarget;
@Excel(name = "下发支行")
private String sendDept;
public String getSendDept() {
return sendDept;
}
public void setSendDept(String sendDept) {
this.sendDept = sendDept;
}
public String getCustPattern() {
return custPattern;
}
public void setCustPattern(String custPattern) {
this.custPattern = custPattern;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getUserDept() {
return userDept;
}
public void setUserDept(Long userDept) {
this.userDept = userDept;
}
public String getCreateRole() {
return createRole;
}
public void setCreateRole(String createRole) {
this.createRole = createRole;
}
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getGroupType() {
return groupType;
}
public void setGroupType(String groupType) {
this.groupType = groupType;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public Long getCustomerNum() {
return customerNum;
}
public void setCustomerNum(Long customerNum) {
this.customerNum = customerNum;
}
public String getCampaignId() {
return campaignId;
}
public void setCampaignId(String campaignId) {
this.campaignId = campaignId;
}
public String getCampaignName() {
return campaignName;
}
public void setCampaignName(String campaignName) {
this.campaignName = campaignName;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getActionStatus() {
return actionStatus;
}
public void setActionStatus(String actionStatus) {
this.actionStatus = actionStatus;
}
public String getCampaignDegree() {
return campaignDegree;
}
public void setCampaignDegree(String campaignDegree) {
this.campaignDegree = campaignDegree;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public String getBelongDept() {
return belongDept;
}
public void setBelongDept(String belongDept) {
this.belongDept = belongDept;
}
public Date getClaimEndTime() {
return claimEndTime;
}
public void setClaimEndTime(Date claimEndTime) {
this.claimEndTime = claimEndTime;
}
public String getClaimType() {
return claimType;
}
public void setClaimType(String claimType) {
this.claimType = claimType;
}
public String getOrgClaimStatus() {
return orgClaimStatus;
}
public void setOrgClaimStatus(String orgClaimStatus) {
this.orgClaimStatus = orgClaimStatus;
}
public String getOrgDistributeStatus() {
return orgDistributeStatus;
}
public void setOrgDistributeStatus(String orgDistributeStatus) {
this.orgDistributeStatus = orgDistributeStatus;
}
public String getReceiveSitustion() {
return receiveSitustion;
}
public void setReceiveSitustion(String receiveSitustion) {
this.receiveSitustion = receiveSitustion;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getSecondPushStatus() {
return secondPushStatus;
}
public void setSecondPushStatus(String secondPushStatus) {
this.secondPushStatus = secondPushStatus;
}
public String getExecuter() {
return executer;
}
public void setExecuter(String executer) {
this.executer = executer;
}
public Date getNowTime() {
return nowTime;
}
public void setNowTime(Date nowTime) {
this.nowTime = nowTime;
}
public String getCheckTarget() {
return checkTarget;
}
public void setCheckTarget(String checkTarget) {
this.checkTarget = checkTarget;
}
public String getBelongOutlet() {
return belongOutlet;
}
public void setBelongOutlet(String belongOutlet) {
this.belongOutlet = belongOutlet;
}
}

View File

@@ -0,0 +1,368 @@
package com.ruoyi.ibs.customerselect.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import javax.validation.constraints.NotNull;
import java.util.Date;
public class ListSelectForUser {
/** 客户标签 */
@Excel(name = "客户类型:0-个人1-商户2-企业")
@NotNull(message = "客户标签不能为空")
private String custPattern;
/** 用户机构 */
private Long userDept;
/** 用户id */
private Long userId;
/** 清单来源 */
@Excel(name = "清单来源 0-总行1-支行")
private String createRole;
/** 清单ID */
@Excel(name = "清单ID")
private String groupId;
/** 清单名称 */
@Excel(name = "清单名称")
private String groupName;
/** 关联活动id */
@Excel(name = "关联活动id")
private String campaignId;
/** 关联活动名称 */
@Excel(name = "关联活动名称")
private String campaignName;
/** 客户号 */
@Excel(name = "客户号")
private String custId;
/** 客户名 */
@Excel(name = "客户名")
private String custName;
/** 经营者名称 */
@Excel(name = "经营者名称(用于商户或企业客户)")
private String lpName;
/** 客户手机号 */
@Excel(name = "客户手机号")
private String custPhone;
/** 客户证件号 */
@Excel(name = "客户证件号(用于个人客户)")
private String custIdc;
/** 社会统一编码 */
@Excel(name = "社会统一编码(用于商户或企业客户)")
private String socialCreditCode;
/** 客户内码 */
@Excel(name = "客户内码")
private String custIsn;
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date startTime;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime;
/** 紧急程度 */
@Excel(name = "紧急程度")
private String campaignDegree;
/** 分配机构id */
@Excel(name = "分配机构id")
private Long deptId;
/** 分配机构名称 */
@Excel(name = "分配机构名称")
private String belongDept;
/** 认领类型 */
@Excel(name = "认领类型 0-强制认领1-可选认领")
private String claimType;
/** 机构领取状态 */
@Excel(name = "机构领取状态 0-待认领1-已认领")
private String orgClaimStatus;
/** 机构分配状态 */
@Excel(name = "机构分配状态 0-待分配1-已分配")
private String orgDistributeStatus;
/** 客户经理分配状态 */
@Excel(name = "客户经理分配状态 0-待分配1-已分配")
private String custClaimStatus;
/** 所属一级网格(导出) */
@Excel(name = "所属一级网格")
private String topGridName;
/** 所属二级网格(导出) */
@Excel(name = "所属二级网格")
private String secGridName;
/** 所属客户经理(导出) */
@Excel(name = "所属客户经理")
private String userName;
/** 所属网点(导出) */
@Excel(name = "所属网点")
private String outlets;
@Excel(name = "考核目标")
private String checkTarget;
//是否是网点查询0-否1-是
private String isOutlet;
public String getIsOutlet() {
return isOutlet;
}
public void setIsOutlet(String isOutlet) {
this.isOutlet = isOutlet;
}
public String getCustPattern() {
return custPattern;
}
public void setCustPattern(String custPattern) {
this.custPattern = custPattern;
}
public Long getUserDept() {
return userDept;
}
public void setUserDept(Long userDept) {
this.userDept = userDept;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getCreateRole() {
return createRole;
}
public void setCreateRole(String createRole) {
this.createRole = createRole;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getCampaignId() {
return campaignId;
}
public void setCampaignId(String campaignId) {
this.campaignId = campaignId;
}
public String getCampaignName() {
return campaignName;
}
public void setCampaignName(String campaignName) {
this.campaignName = campaignName;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getLpName() {
return lpName;
}
public void setLpName(String lpName) {
this.lpName = lpName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getCustIdc() {
return custIdc;
}
public void setCustIdc(String custIdc) {
this.custIdc = custIdc;
}
public String getSocialCreditCode() {
return socialCreditCode;
}
public void setSocialCreditCode(String socialCreditCode) {
this.socialCreditCode = socialCreditCode;
}
public String getCustIsn() {
return custIsn;
}
public void setCustIsn(String custIsn) {
this.custIsn = custIsn;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getCampaignDegree() {
return campaignDegree;
}
public void setCampaignDegree(String campaignDegree) {
this.campaignDegree = campaignDegree;
}
public Long getDeptId() {
return deptId;
}
public void setDeptId(Long deptId) {
this.deptId = deptId;
}
public String getBelongDept() {
return belongDept;
}
public void setBelongDept(String belongDept) {
this.belongDept = belongDept;
}
public String getClaimType() {
return claimType;
}
public void setClaimType(String claimType) {
this.claimType = claimType;
}
public String getOrgClaimStatus() {
return orgClaimStatus;
}
public void setOrgClaimStatus(String orgClaimStatus) {
this.orgClaimStatus = orgClaimStatus;
}
public String getOrgDistributeStatus() {
return orgDistributeStatus;
}
public void setOrgDistributeStatus(String orgDistributeStatus) {
this.orgDistributeStatus = orgDistributeStatus;
}
public String getCustClaimStatus() {
return custClaimStatus;
}
public void setCustClaimStatus(String custClaimStatus) {
this.custClaimStatus = custClaimStatus;
}
public String getTopGridName() {
return topGridName;
}
public void setTopGridName(String topGridName) {
this.topGridName = topGridName;
}
public String getSecGridName() {
return secGridName;
}
public void setSecGridName(String secGridName) {
this.secGridName = secGridName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getOutlets() {
return outlets;
}
public void setOutlets(String outlets) {
this.outlets = outlets;
}
public String getCheckTarget() {
return checkTarget;
}
public void setCheckTarget(String checkTarget) {
this.checkTarget = checkTarget;
}
}

View File

@@ -0,0 +1,257 @@
package com.ruoyi.ibs.customerselect.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import java.util.Date;
public class ListSelectForUserExportBusiness {
/** 清单来源 */
@Excel(name = "清单来源",readConverterExp = "0=总行,1=支行")
private String createRole;
/** 清单名称 */
@Excel(name = "清单名称")
private String groupName;
/** 关联活动名称 */
@Excel(name = "任务名称")
private String campaignName;
/** 客户号 */
@Excel(name = "客户号")
private String custId;
/** 客户名 */
@Excel(name = "企业名称")
private String custName;
/** 经营者名称 */
@Excel(name = "法人代表姓名")
private String lpName;
/** 客户手机号 */
@Excel(name = "法人代表手机号")
private String custPhone;
/** 社会统一编码 */
@Excel(name = "证件号")
private String socialCreditCode;
/** 客户内码 */
@Excel(name = "客户内码")
private String custIsn;
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date startTime;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime;
/** 紧急程度 */
@Excel(name = "紧急程度")
private String campaignDegree;
/** 分配机构名称 */
@Excel(name = "推送支行")
private String belongDept;
/** 认领类型 */
@Excel(name = "认领类型",readConverterExp = "0=强制认领,1=可选认领")
private String claimType;
/** 机构领取状态 */
@Excel(name = "机构认领状态",readConverterExp = "0=待认领,1=已认领,/=/")
private String orgClaimStatus;
/** 机构分配状态 */
@Excel(name = "机构分配状态",readConverterExp = "0=待分配,1=已分配,/=/")
private String orgDistributeStatus;
/** 客户经理分配状态 */
@Excel(name = "客户经理分配状态",readConverterExp = "0=待分配,1=已分配")
private String custClaimStatus;
/** 所属客户经理(导出) */
@Excel(name = "推送客户经理")
private String userName;
/** 所属网点(导出) */
@Excel(name = "推送网点")
private String outlets;
@Excel(name = "考核目标")
private String checkTarget;
public String getCreateRole() {
return createRole;
}
public void setCreateRole(String createRole) {
this.createRole = createRole;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getCampaignName() {
return campaignName;
}
public void setCampaignName(String campaignName) {
this.campaignName = campaignName;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getLpName() {
return lpName;
}
public void setLpName(String lpName) {
this.lpName = lpName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getSocialCreditCode() {
return socialCreditCode;
}
public void setSocialCreditCode(String socialCreditCode) {
this.socialCreditCode = socialCreditCode;
}
public String getCustIsn() {
return custIsn;
}
public void setCustIsn(String custIsn) {
this.custIsn = custIsn;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getCampaignDegree() {
return campaignDegree;
}
public void setCampaignDegree(String campaignDegree) {
this.campaignDegree = campaignDegree;
}
public String getBelongDept() {
return belongDept;
}
public void setBelongDept(String belongDept) {
this.belongDept = belongDept;
}
public String getClaimType() {
return claimType;
}
public void setClaimType(String claimType) {
this.claimType = claimType;
}
public String getOrgClaimStatus() {
return orgClaimStatus;
}
public void setOrgClaimStatus(String orgClaimStatus) {
this.orgClaimStatus = orgClaimStatus;
}
public String getOrgDistributeStatus() {
return orgDistributeStatus;
}
public void setOrgDistributeStatus(String orgDistributeStatus) {
this.orgDistributeStatus = orgDistributeStatus;
}
public String getCustClaimStatus() {
return custClaimStatus;
}
public void setCustClaimStatus(String custClaimStatus) {
this.custClaimStatus = custClaimStatus;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getOutlets() {
return outlets;
}
public void setOutlets(String outlets) {
this.outlets = outlets;
}
public String getCheckTarget() {
return checkTarget;
}
public void setCheckTarget(String checkTarget) {
this.checkTarget = checkTarget;
}
}

View File

@@ -0,0 +1,257 @@
package com.ruoyi.ibs.customerselect.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import java.util.Date;
public class ListSelectForUserExportMerchant {
/** 清单来源 */
@Excel(name = "清单来源",readConverterExp = "0=总行,1=支行")
private String createRole;
/** 清单名称 */
@Excel(name = "清单名称")
private String groupName;
/** 关联活动名称 */
@Excel(name = "任务名称")
private String campaignName;
/** 客户号 */
@Excel(name = "客户号")
private String custId;
/** 客户名 */
@Excel(name = "商户名称")
private String custName;
/** 经营者名称 */
@Excel(name = "经营者姓名")
private String lpName;
/** 客户手机号 */
@Excel(name = "经营者手机号")
private String custPhone;
/** 社会统一编码 */
@Excel(name = "证件号")
private String socialCreditCode;
/** 客户内码 */
@Excel(name = "客户内码")
private String custIsn;
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date startTime;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime;
/** 紧急程度 */
@Excel(name = "紧急程度")
private String campaignDegree;
/** 分配机构名称 */
@Excel(name = "推送支行")
private String belongDept;
/** 认领类型 */
@Excel(name = "认领类型",readConverterExp = "0=强制认领,1=可选认领")
private String claimType;
/** 机构领取状态 */
@Excel(name = "机构认领状态",readConverterExp = "0=待认领,1=已认领,/=/")
private String orgClaimStatus;
/** 机构分配状态 */
@Excel(name = "机构分配状态",readConverterExp = "0=待分配,1=已分配,/=/")
private String orgDistributeStatus;
/** 客户经理分配状态 */
@Excel(name = "客户经理分配状态",readConverterExp = "0=待分配,1=已分配")
private String custClaimStatus;
/** 所属客户经理(导出) */
@Excel(name = "推送客户经理")
private String userName;
/** 所属网点(导出) */
@Excel(name = "推送网点")
private String outlets;
@Excel(name = "考核目标")
private String checkTarget;
public String getCreateRole() {
return createRole;
}
public void setCreateRole(String createRole) {
this.createRole = createRole;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getCampaignName() {
return campaignName;
}
public void setCampaignName(String campaignName) {
this.campaignName = campaignName;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getLpName() {
return lpName;
}
public void setLpName(String lpName) {
this.lpName = lpName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getSocialCreditCode() {
return socialCreditCode;
}
public void setSocialCreditCode(String socialCreditCode) {
this.socialCreditCode = socialCreditCode;
}
public String getCustIsn() {
return custIsn;
}
public void setCustIsn(String custIsn) {
this.custIsn = custIsn;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getCampaignDegree() {
return campaignDegree;
}
public void setCampaignDegree(String campaignDegree) {
this.campaignDegree = campaignDegree;
}
public String getBelongDept() {
return belongDept;
}
public void setBelongDept(String belongDept) {
this.belongDept = belongDept;
}
public String getClaimType() {
return claimType;
}
public void setClaimType(String claimType) {
this.claimType = claimType;
}
public String getOrgClaimStatus() {
return orgClaimStatus;
}
public void setOrgClaimStatus(String orgClaimStatus) {
this.orgClaimStatus = orgClaimStatus;
}
public String getOrgDistributeStatus() {
return orgDistributeStatus;
}
public void setOrgDistributeStatus(String orgDistributeStatus) {
this.orgDistributeStatus = orgDistributeStatus;
}
public String getCustClaimStatus() {
return custClaimStatus;
}
public void setCustClaimStatus(String custClaimStatus) {
this.custClaimStatus = custClaimStatus;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getOutlets() {
return outlets;
}
public void setOutlets(String outlets) {
this.outlets = outlets;
}
public String getCheckTarget() {
return checkTarget;
}
public void setCheckTarget(String checkTarget) {
this.checkTarget = checkTarget;
}
}

View File

@@ -0,0 +1,245 @@
package com.ruoyi.ibs.customerselect.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import java.util.Date;
public class ListSelectForUserExportRetail {
/** 清单来源 */
@Excel(name = "清单来源",readConverterExp = "0=总行,1=支行")
private String createRole;
/** 清单名称 */
@Excel(name = "清单名称")
private String groupName;
/** 关联活动名称 */
@Excel(name = "任务名称")
private String campaignName;
/** 客户号 */
@Excel(name = "客户号")
private String custId;
/** 客户名 */
@Excel(name = "客户名")
private String custName;
/** 客户手机号 */
@Excel(name = "客户手机号")
private String custPhone;
/** 客户证件号 */
@Excel(name = "证件号")
private String custIdc;
/** 客户内码 */
@Excel(name = "客户内码")
private String custIsn;
/** 开始时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date startTime;
/** 结束时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date endTime;
/** 紧急程度 */
@Excel(name = "紧急程度")
private String campaignDegree;
/** 分配机构名称 */
@Excel(name = "推送支行")
private String belongDept;
/** 认领类型 */
@Excel(name = "认领类型",readConverterExp = "0=强制认领,1=可选认领")
private String claimType;
/** 机构领取状态 */
@Excel(name = "机构认领状态",readConverterExp = "0=待认领,1=已认领,/=/")
private String orgClaimStatus;
/** 机构分配状态 */
@Excel(name = "机构分配状态",readConverterExp = "0=待分配,1=已分配,/=/")
private String orgDistributeStatus;
/** 客户经理分配状态 */
@Excel(name = "客户经理分配状态",readConverterExp = "0=待分配,1=已分配")
private String custClaimStatus;
/** 所属客户经理(导出) */
@Excel(name = "推送客户经理")
private String userName;
/** 所属网点(导出) */
@Excel(name = "推送网点")
private String outlets;
@Excel(name = "考核目标")
private String checkTarget;
public String getCreateRole() {
return createRole;
}
public void setCreateRole(String createRole) {
this.createRole = createRole;
}
public String getGroupName() {
return groupName;
}
public void setGroupName(String groupName) {
this.groupName = groupName;
}
public String getCampaignName() {
return campaignName;
}
public void setCampaignName(String campaignName) {
this.campaignName = campaignName;
}
public String getCustId() {
return custId;
}
public void setCustId(String custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getCustIdc() {
return custIdc;
}
public void setCustIdc(String custIdc) {
this.custIdc = custIdc;
}
public String getCustIsn() {
return custIsn;
}
public void setCustIsn(String custIsn) {
this.custIsn = custIsn;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getCampaignDegree() {
return campaignDegree;
}
public void setCampaignDegree(String campaignDegree) {
this.campaignDegree = campaignDegree;
}
public String getBelongDept() {
return belongDept;
}
public void setBelongDept(String belongDept) {
this.belongDept = belongDept;
}
public String getClaimType() {
return claimType;
}
public void setClaimType(String claimType) {
this.claimType = claimType;
}
public String getOrgClaimStatus() {
return orgClaimStatus;
}
public void setOrgClaimStatus(String orgClaimStatus) {
this.orgClaimStatus = orgClaimStatus;
}
public String getOrgDistributeStatus() {
return orgDistributeStatus;
}
public void setOrgDistributeStatus(String orgDistributeStatus) {
this.orgDistributeStatus = orgDistributeStatus;
}
public String getCustClaimStatus() {
return custClaimStatus;
}
public void setCustClaimStatus(String custClaimStatus) {
this.custClaimStatus = custClaimStatus;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getOutlets() {
return outlets;
}
public void setOutlets(String outlets) {
this.outlets = outlets;
}
public String getCheckTarget() {
return checkTarget;
}
public void setCheckTarget(String checkTarget) {
this.checkTarget = checkTarget;
}
}

View File

@@ -0,0 +1,245 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
@Data
public class MerchantExportVo {
/** 客户标签 */
@Excel(name = "客户分类",readConverterExp = "0=个人,1=商户,2=企业")
private String custPattern;
/** 企业名称 */
@Excel(name = "商户名称")
private String custName;
@Excel(name = "归属总行网格名称")
private String regionTopGridName;
@Excel(name = "归属支行网格名称")
private String regionSecGridName;
/** 归属支行 */
@Excel(name = "行政网格归属支行")
private String belongBranchName;
/** 归属网点 */
@Excel(name = "行政网格归属网点")
private String belongOutletName;
/**
* 归属 网格客户经理名,多个按照逗号 隔开
*/
@Excel(name = "行政网格归属客户经理")
private String belongUserNameList;
@Excel(name = "归属自定义地图网格名称")
private String drawGridName;
@Excel(name = "自定义地图网格归属支行")
private String drawBranchNames;
@Excel(name = "自定义地图网格归属网点")
private String drawOutletNames;
@Excel(name = "自定义地图网格归属客户经理")
private String drawUserNames;
@Excel(name = "归属自定义名单网格名称")
private String virtualGridName;
@Excel(name = "自定义名单网格归属支行")
private String virtualBranchNames;
@Excel(name = "自定义名单网格归属网点")
private String virtualOutletNames;
@Excel(name = "自定义名单网格归属客户经理")
private String virtualUserNames;
/** 经营者姓名 */
@Excel(name = "经营者姓名")
private String lpName;
/** 经营者电话 */
@Excel(name = "经营者电话")
private String custPhone;
/** 客户类型 */
@Excel(name = "客户类型",readConverterExp = "0=存量,1=潜在,2=暂无")
// @Excel(name = "客户类型")
private String custType ;
/** 产品标签 */
@Excel(name = "产品标签",readConverterExp = "000=暂无,100=存款,010=贷款,001=中收,110=存款、贷款,101=存款、中收,011=贷款、中收,111=存款、贷款、中收")
// @Excel(name = "产品标签")
private String custTag;
//个人商户业务指标
/**
* 活期存款余额
*/
@Excel(name = "活期存款余额(元)")
private String curBalD;
/**
* 定期存款余额
*/
@Excel(name = "定期存款余额(元)")
private String curBalT;
/**
* 贷款余额
*/
@Excel(name = "贷款余额(元)")
private String balLoan;
/**
* 五级不良贷款余额
*/
@Excel(name = "五级不良贷款余额(元)")
private String curBal5Bad;
/**
* 活期存款年日均
*/
@Excel(name = "活期存款年日均(元)")
private String curDAve;
/**
* 定期存款年日均
*/
@Excel(name = "定期存款年日均(元)")
private String curTAve;
/**
* 贷款年日均
*/
@Excel(name = "贷款年日均(元)")
private String loanAve;
/**
* 是否建档
*/
@Excel(name = "是否建档")
private String isPh;
/**
* 是否授信
*/
@Excel(name = "是否授信")
private String isSx;
/**
* 是否合同签约
*/
@Excel(name = "是否合同签约")
private String isYxht;
/**
* 是否持有信用卡
*/
@Excel(name = "是否持有信用卡")
private String isXyk;
/**
* 是否开通丰收互联
*/
@Excel(name = "是否开通丰收互联")
private String fshl;
/**
* 是否办理收单
*/
@Excel(name = "是否办理收单")
private String isSd;
/**
* 是否办理etc
*/
@Excel(name = "是否办理etc")
private String etc;
/**
* 是否代扣电费
*/
@Excel(name = "是否代扣电费")
private String dian;
/**
* 是否贷款黑名单
*/
@Excel(name = "是否贷款黑名单")
private String isBlack;
/**
* 是否五级不良贷款客户
*/
@Excel(name = "是否五级不良贷款客户")
private String isBad;
@Excel(name = "近365天有无走访")
private String is365zf;
@Excel(name = "近180天有无走访")
private String is180zf;
@Excel(name = "近90天有无走访")
private String is90zf;
@Excel(name = "近30天有无走访")
private String is30zf;
public String getCustPattern() {
return custPattern;
}
public void setCustPattern(String custPattern) {
this.custPattern = custPattern;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getBelongBranchName() {
return belongBranchName;
}
public void setBelongBranchName(String belongBranchName) {
this.belongBranchName = belongBranchName;
}
public String getBelongOutletName() {
return belongOutletName;
}
public void setBelongOutletName(String belongOutletName) {
this.belongOutletName = belongOutletName;
}
public String getLpName() {
return lpName;
}
public void setLpName(String lpName) {
this.lpName = lpName;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getBelongUserNameList() {
return belongUserNameList;
}
public void setBelongUserNameList(String belongUserNameList) {
this.belongUserNameList = belongUserNameList;
}
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getCustTag() {
return custTag;
}
public void setCustTag(String custTag) {
this.custTag = custTag;
}
}

View File

@@ -0,0 +1,96 @@
package com.ruoyi.ibs.customerselect.domain;
import lombok.Data;
@Data
public class MerchantMcspInfo {
private Long id;
private String custId;
/**
* 特约商户号
*/
private String custSmchno;
/**
* 收单产品
*/
private String productType;
/**
* 联系人
*/
private String contactName;
/**
* 联系电话
*/
private String contactPhone;
/**
* 商户类别码
*/
private String mchmcc;
/**
* 结算方式
*/
private String jsType;
/**
* 账户类别
*/
private String accountType;
/**
* 收单结算账户账号
*/
private String accountId;
/**
* 收单结算账户名称
*/
private String accountName;
/**
* 商户收单结算周期
*/
private String jsCycle;
/**
* 计费模式
*/
private String billMode;
/**
* 免费额度
*/
private String freeQuota;
/**
* 剩余免费额度
*/
private String rareFree;
/**
* 年收单笔数
*/
private String yearBillCount;
/**
* 年收单金额
*/
private String yearBillAmount;
/**
* 上月收单金额
*/
private String lastMonthBillAmount;
/**
* 上月收单笔数
*/
private String lastMonthBillCount;
/**
* 上月收单账户日均存款
*/
private String lastMonthAccountAvgAmount;
/**
* 收单账户手续费收取情况
*/
private String accountRareMsg;
/**
* 商户年日均存款
*/
private String accountYearAvgAmount;
/**
* 商户星级评定
*/
private String accountStar;
}

View File

@@ -0,0 +1,230 @@
package com.ruoyi.ibs.customerselect.domain;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
@Data
public class RetailExportVo {
/** 客户标签 */
@Excel(name = "客户分类",readConverterExp = "0=个人,1=商户,2=企业")
private String custPattern;
/** 企业名称 */
@Excel(name = "客户名称")
private String custName;
@Excel(name = "归属总行网格名称")
private String regionTopGridName;
@Excel(name = "归属支行网格名称")
private String regionSecGridName;
/** 归属支行 */
@Excel(name = "行政网格归属支行")
private String belongBranchName;
/** 归属网点 */
@Excel(name = "行政网格归属网点")
private String belongOutletName;
@Excel(name = "归属自定义地图网格名称")
private String drawGridName;
@Excel(name = "自定义地图网格归属支行")
private String drawBranchNames;
@Excel(name = "自定义地图网格归属网点")
private String drawOutletNames;
@Excel(name = "自定义地图网格归属客户经理")
private String drawUserNames;
/**
* 归属 网格客户经理名,多个按照逗号 隔开
*/
@Excel(name = "行政网格归属客户经理")
private String belongUserNameList;
@Excel(name = "归属自定义名单网格名称")
private String virtualGridName;
@Excel(name = "自定义名单网格归属支行")
private String virtualBranchNames;
@Excel(name = "自定义名单网格归属网点")
private String virtualOutletNames;
@Excel(name = "自定义名单网格归属客户经理")
private String virtualUserNames;
/** 经营者电话 */
@Excel(name = "客户电话")
private String custPhone;
/** 客户类型 */
@Excel(name = "客户类型",readConverterExp = "0=存量,1=潜在,2=暂无")
// @Excel(name = "客户类型")
private String custType ;
/** 产品标签 */
@Excel(name = "产品标签",readConverterExp = "000=暂无,100=存款,010=贷款,001=中收,110=存款、贷款,101=存款、中收,011=贷款、中收,111=存款、贷款、中收")
// @Excel(name = "产品标签")
private String custTag;
//个人商户业务指标
/**
* 活期存款余额
*/
@Excel(name = "活期存款余额(元)")
private String curBalD;
/**
* 定期存款余额
*/
@Excel(name = "定期存款余额(元)")
private String curBalT;
/**
* 贷款余额
*/
@Excel(name = "贷款余额(元)")
private String balLoan;
/**
* 五级不良贷款余额
*/
@Excel(name = "五级不良贷款余额(元)")
private String curBal5Bad;
/**
* 活期存款年日均
*/
@Excel(name = "活期存款年日均(元)")
private String curDAve;
/**
* 定期存款年日均
*/
@Excel(name = "定期存款年日均(元)")
private String curTAve;
/**
* 贷款年日均
*/
@Excel(name = "贷款年日均(元)")
private String loanAve;
/**
* 是否建档
*/
@Excel(name = "是否建档")
private String isPh;
/**
* 是否授信
*/
@Excel(name = "是否授信")
private String isSx;
/**
* 是否合同签约
*/
@Excel(name = "是否合同签约")
private String isYxht;
/**
* 是否持有信用卡
*/
@Excel(name = "是否持有信用卡")
private String isXyk;
/**
* 是否开通丰收互联
*/
@Excel(name = "是否开通丰收互联")
private String fshl;
/**
* 是否办理收单
*/
@Excel(name = "是否办理收单")
private String isSd;
/**
* 是否办理etc
*/
@Excel(name = "是否办理etc")
private String etc;
/**
* 是否代扣电费
*/
@Excel(name = "是否代扣电费")
private String dian;
/**
* 是否贷款黑名单
*/
@Excel(name = "是否贷款黑名单")
private String isBlack;
/**
* 是否五级不良贷款客户
*/
@Excel(name = "是否五级不良贷款客户")
private String isBad;
@Excel(name = "近365天有无走访")
private String is365zf;
@Excel(name = "近180天有无走访")
private String is180zf;
@Excel(name = "近90天有无走访")
private String is90zf;
@Excel(name = "近30天有无走访")
private String is30zf;
public String getCustPattern() {
return custPattern;
}
public String getCustName() {
return custName;
}
public void setCustPattern(String custPattern) {
this.custPattern = custPattern;
}
public void setCustName(String custName) {
this.custName = custName;
}
public String getBelongBranchName() {
return belongBranchName;
}
public void setBelongBranchName(String belongBranchName) {
this.belongBranchName = belongBranchName;
}
public String getBelongOutletName() {
return belongOutletName;
}
public void setBelongOutletName(String belongOutletName) {
this.belongOutletName = belongOutletName;
}
public String getBelongUserNameList() {
return belongUserNameList;
}
public void setBelongUserNameList(String belongUserNameList) {
this.belongUserNameList = belongUserNameList;
}
public String getCustPhone() {
return custPhone;
}
public void setCustPhone(String custPhone) {
this.custPhone = custPhone;
}
public String getCustType() {
return custType;
}
public void setCustType(String custType) {
this.custType = custType;
}
public String getCustTag() {
return custTag;
}
public void setCustTag(String custTag) {
this.custTag = custTag;
}
}

View File

@@ -0,0 +1,28 @@
package com.ruoyi.ibs.customerselect.domain.vo;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/5/9
**/
@Data
public class GridRelateVO {
private String custId;
private String gridNames;
private String branchNames;
private String outletNames;
private String userNames;
private String topGridName;
private String secGridName;
private String deptIds;
}

View File

@@ -0,0 +1,15 @@
package com.ruoyi.ibs.customerselect.domain.vo;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/5/8
**/
@Data
public class GridSelectVO {
private Long gridId;
private String gridName;
}

View File

@@ -0,0 +1,20 @@
package com.ruoyi.ibs.customerselect.domain.vo;
import lombok.Data;
/**
* @Author 吴凯程
* @Date 2025/5/9
**/
@Data
public class VirtualGridRelateVO {
private String gridNames;
private String branchNames;
private String outletsNames;
private String userNames;
}

View File

@@ -0,0 +1,14 @@
package com.ruoyi.ibs.customerselect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.customerselect.domain.CustCsvTag;
/**
* @Author 吴凯程
* @Date 2025/5/8
**/
public interface CustCsvTagMapper extends BaseMapper<CustCsvTag> {
}

View File

@@ -0,0 +1,245 @@
package com.ruoyi.ibs.customerselect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.common.core.domain.entity.CustInfoBusiness;
import com.ruoyi.ibs.customerselect.domain.CustBaseInfo;
import com.ruoyi.ibs.customerselect.domain.CustInfoDeleteFromAnchor;
import com.ruoyi.ibs.customerselect.domain.CustInfoUpdateFromAnchor;
import com.ruoyi.ibs.customerselect.domain.ListSelectForUser;
import com.ruoyi.ibs.grid.domain.dto.CustManageInfo;
import com.ruoyi.ibs.list.domain.SysGroupCustomer;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 客户基本信息Mapper接口
*
* @author ruoyi
* @date 2024-09-11
*/
public interface CustInfoBusinessMapper extends BaseMapper<CustInfoBusiness>
{
/**
* 查询企业客户基本信息列表
*
* @param sysCustomerBasedata 企业客户基本信息
* @return 客户基本信息集合
*/
public List<CustInfoBusiness> selectCustInfoBusinessList(CustBaseInfo sysCustomerBasedata);
public List<CustInfoBusiness> selectCustInfoBusinessListHead(CustBaseInfo sysCustomerBasedata);
public List<CustInfoBusiness> selectCustInfoBusinessListOps(CustBaseInfo sysCustomerBasedata);
/**
* 使用行政区划查询客户数量
*
* @param gridId 企业客户基本信息
* @return 客户基本信息集合
*/
public Long selectBusinessNumByAdmin(@Param("gridId")Long gridId, @Param("userDept")Long userDept);
/**
* 使用机构id查询客户数量
*
* @param headDeptId 企业客户基本信息
* @return 客户基本信息集合
*/
public Long getBusinessNumByDeptId(Long headDeptId);
/**
* 使用经理id查询客户数量
*
* @param UserId 企业客户基本信息
* @return 客户基本信息集合
*/
public Long getBusinessNumByUserId(String UserId);
/**
* 使用行政区划查询未分配客户信息列表
*
* @param custManageInfo 企业客户基本信息
* @return 客户基本信息集合
*/
public List<CustInfoBusiness> selectCustInfoBusinessByAdminList(CustManageInfo custManageInfo);
/**
* 使用行政区划查询未分配客户信息列表
*
* @param custManageInfo 企业客户基本信息
* @return 客户基本信息集合
*/
public List<CustInfoBusiness> selectunDisCustByAdminList(CustManageInfo custManageInfo);
/**
* 使用虚拟网格查询未分配客户信息列表
*
* @param custManageInfo 企业客户基本信息
* @return 客户基本信息集合
*/
public List<CustInfoBusiness> selectCustInfoBusinessByVirtualList(CustManageInfo custManageInfo);
/**
* 使用虚拟网格查询未分配客户信息列表
*
* @param custManageInfo 企业客户基本信息
* @return 客户基本信息集合
*/
public List<CustInfoBusiness> selectunDisCustByVirtualList(CustManageInfo custManageInfo);
/**
* 查询企业客户基本信息
*
* @param id 企业客户基本信息主键
* @return 企业客户基本信息
*/
public CustInfoBusiness selectCustInfoBusinessById(Long id);
/**
* 查询企业客户基本信息列表
*
* @param custInfoBusiness 企业客户基本信息
* @return 企业客户基本信息集合
*/
public List<CustInfoBusiness> selectCustInfoBusinessListBykeyword(@Param("keyword") String keyword);
/**
* 查询企业客户基本信息列表
*
* @param custInfoBusiness 企业客户基本信息
* @return 企业客户基本信息集合
*/
public List<CustInfoBusiness> selectCustInfoBusinessListBykeywordBranchAndManager(@Param("keyword") String keyword,@Param("deptId")Long deptId,@Param("outletsId")Long outletsId,@Param("userId")Long userId,@Param("opsDept") String opsDept);
/**
* 新增企业客户基本信息
*
* @param custInfoBusiness 企业客户基本信息
* @return 结果
*/
public int insertCustInfoBusiness(CustInfoBusiness custInfoBusiness);
/**
* 修改企业客户基本信息
*
* @param custInfoBusiness 企业客户基本信息
* @return 结果
*/
public int updateCustInfoBusiness(CustInfoBusiness custInfoBusiness);
public int updateCustInfoBusinessLabel(CustInfoBusiness custInfoBusiness);
/**
* 删除企业客户基本信息
*
* @param id 企业客户基本信息主键
* @return 结果
*/
public int deleteCustInfoBusinessById(Long id);
/**
* 批量删除企业客户基本信息
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteCustInfoBusinessByIds(Long[] ids);
/**
* 查询企业客户基本信息
*
* @param custId 企业客户基本信息主键
* @return 企业客户基本信息
*/
public CustInfoBusiness selectCustInfoBusinessByCustId(String custId);
/**
* 根据统信码查询企业客户基本信息
* @param socialCreditCode
* @return
*/
public CustInfoBusiness selectCustInfoBusinessBySocialCreditCode(String socialCreditCode);
public List<CustInfoBusiness> selectCustInfoBusinessLists(CustInfoBusiness custInfoBusiness);
/**
* 使用证件号查询客户数量
*
* @param LegalId 企业客户基本信息
* @return 客户基本信息集合
*/
public Long getBusinessNumByLegalId(String LegalId);
/**
* 锚点更新客户信息
*
* @param custInfoUpdateFromAnchor 管户信息
* @return 结果
*/
public int updateBusinessByAnchor(CustInfoUpdateFromAnchor custInfoUpdateFromAnchor);
/**
* 锚点新增客户信息
*
* @param custInfoUpdateFromAnchor 客户信息
* @return 结果
*/
public int insertBusinessByAnchor(CustInfoUpdateFromAnchor custInfoUpdateFromAnchor);
/**
* 锚点删除客户信息
*
* @param custInfoDeleteFromAnchor 客户信息
* @return 结果
*/
public int deleteBusinessByAnchor(CustInfoDeleteFromAnchor custInfoDeleteFromAnchor);
/**
* 获取客群客户经营者名称
*
* @param listSelectForUser 清单名称或者活动名称关键词
* @return 客户经理
*/
public String getLpNameByCustId(ListSelectForUser listSelectForUser);
/**
* 使用客户号查询客户证件号
*
* @param custId 企业客户基本信息
* @return 客户基本信息集合
*/
public String getBusiIdcByCustId(String custId);
/**
* 使用查询行政网格客户信息列表
*
* @param custManageInfo 企业客户基本信息
* @return 客户基本信息集合
*/
public List<CustManageInfo> selectBusinessInfoByManage(CustManageInfo custManageInfo);
/**
* 查询企业客户基本信息
*
* @param id 企业客户基本信息主键
* @return 企业客户基本信息
*/
public CustInfoBusiness selectCustInfoBusinessByCustNameAndCustIdc(@Param("custName") String custName,@Param("custIdc") String custIdc);
/**
* 查询企业客户基本信息
*
* @param custId
* @return 企业客户基本信息
*/
public CustInfoBusiness selectCustInfoBusinessCustId(@Param("custId") String custId);
Long countByCode(@Param("code") String code, @Param("deptCode") String deptCode);
public int insertCustomersToBusinessByScCode(List<SysGroupCustomer> sysGroupCustomers);
List<CustInfoBusiness> selectRecord(String socialCreditCode);
}

View File

@@ -0,0 +1,28 @@
package com.ruoyi.ibs.customerselect.mapper;
import com.ruoyi.ibs.customerselect.domain.vo.GridRelateVO;
import com.ruoyi.ibs.customerselect.domain.vo.GridSelectVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @Author 吴凯程
* @Date 2025/5/8
**/
public interface GridSelectMapper {
List<GridSelectVO> getRegionGridList(@Param("deptId") Long deptId, @Param("userName") String userName, @Param("gridLevel") String gridLevel, @Param("opsDept") String opsDept);
List<GridSelectVO> getVirtualGridList(@Param("deptId") Long deptId, @Param("userName") String userName, @Param("opsDept") String opsDept);
List<GridSelectVO> getDrawGridList(@Param("deptId") Long deptId, @Param("userName") String userName, @Param("opsDept") String opsDept);
List<GridRelateVO> getDrawGridRelate(@Param("custIds") List<String> custIds);
List<GridRelateVO> getRegionGridRelate(@Param("custIds") List<String> custIds);
List<GridRelateVO> getVirtualGridRelate(@Param("custIds") List<String> custIds, @Param("userName") String userName);
}

View File

@@ -0,0 +1,73 @@
package com.ruoyi.ibs.customerselect.mapper;
import java.util.List;
import java.util.Map;
import com.ruoyi.ibs.customerselect.domain.CustBaseInfo;
import com.ruoyi.ibs.customerselect.domain.GridSummarCount;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 网格汇总统计_公司Mapper接口
*
* @author ruoyi
* @date 2025-03-22
*/
@Mapper
public interface GridSummarCountMapper
{
/**
* 查询网格汇总统计_公司
*
* @param dt 网格汇总统计_公司主键
* @return 网格汇总统计_公司
*/
public GridSummarCount selectGridSummarCountByDt(String dt);
/**
* 查询网格汇总统计_公司列表
*
* @param GridSummarCount 网格汇总统计_公司
* @return 网格汇总统计_公司集合
*/
public List<GridSummarCount> selectGridSummarCountList(GridSummarCount GridSummarCount);
/**
* 新增网格汇总统计_公司
*
* @param GridSummarCount 网格汇总统计_公司
* @return 结果
*/
public int insertGridSummarCount(GridSummarCount GridSummarCount);
/**
* 修改网格汇总统计_公司
*
* @param GridSummarCount 网格汇总统计_公司
* @return 结果
*/
public int updateGridSummarCount(GridSummarCount GridSummarCount);
/**
* 删除网格汇总统计_公司
*
* @param dt 网格汇总统计_公司主键
* @return 结果
*/
public int deleteGridSummarCountByDt(String dt);
/**
* 批量删除网格汇总统计_公司
*
* @param dts 需要删除的数据主键集合
* @return 结果
*/
public int deleteGridSummarCountByDts(String[] dts);
List<Map<String,Object>> selectContinuousParams(CustBaseInfo sysCustomerBasedata);
List<Map<String,Object>> selectDiscreteParams(CustBaseInfo sysCustomerBasedata);
public String selectDictLabelByDictValue(@Param("dictValue") String dictValue);
}

View File

@@ -0,0 +1,8 @@
package com.ruoyi.ibs.customerselect.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.customerselect.domain.MerchantMcspInfo;
public interface MerchantMcspInfoMapper extends BaseMapper<MerchantMcspInfo> {
}

View File

@@ -0,0 +1,126 @@
package com.ruoyi.ibs.customerselect.service;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opencsv.CSVReader;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.ibs.customerselect.domain.CustCsvTag;
import com.ruoyi.ibs.customerselect.mapper.CustCsvTagMapper;
import com.ruoyi.system.enums.OssFileEnum;
import com.ruoyi.system.service.OssFileService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Objects;
/**
* @Author 吴凯程
* @Date 2025/11/27
**/
@Service
@Slf4j
@EnableAsync
public class CustCsvTagService {
@Resource
private OssFileService ossFileService;
@Resource
private CustCsvTagMapper custCsvTagMapper;
private final static ObjectMapper objectMapper = new ObjectMapper();
@Async
public void processCsvInBatches(MultipartFile file, String userName, String headId) {
log.info("开始执行CSV标签更新");
try{
InputStreamReader inputStreamReader = new InputStreamReader(file.getInputStream(), "UTF-8");
CSVReader reader = new CSVReader(new BufferedReader(inputStreamReader));
String[] headers = reader.readNext(); // 读取标题行
String[] row;
while ((row = reader.readNext()) != null) {
JSONObject jsonObject = new JSONObject();
String custIdc = null;
for (int i = 0; i < headers.length; i++) {
jsonObject.put(headers[i], row[i]);
if (headers[i].equals("身份证")){
custIdc = row[i];
}
}
if (custIdc == null){
log.error("------------------------>CSV标签JSON上传出错身份证为空");
continue;
}
updateCSVtoOSS(jsonObject, custIdc, userName, headId);
}
} catch (Exception e){
log.error("------------------------>执行CSV标签出错",e);
throw new ServiceException("执行CSV标签出错" + e.getMessage());
}
}
private void updateCSVtoOSS(JSONObject jsonObject, String custIdc, String userName, String headId) {
String fileId = writeJsonToOss(jsonObject, custIdc, userName);
LambdaQueryWrapper<CustCsvTag> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CustCsvTag::getCustIdc, custIdc);
queryWrapper.eq(CustCsvTag::getHeadId, headId);
CustCsvTag custCsvTag = custCsvTagMapper.selectOne(queryWrapper);
if (Objects.nonNull(custCsvTag)){
ossFileService.deleteFileFromOss(custCsvTag.getFileId());
log.info("删除旧文件:" + custCsvTag.getFileId());
custCsvTagMapper.deleteById(custCsvTag);
}
custCsvTag = new CustCsvTag();
custCsvTag.setCustIdc(custIdc);
custCsvTag.setHeadId(headId);
custCsvTag.setFileId(fileId);
custCsvTag.setUpdateTime(new Date());
custCsvTagMapper.insert(custCsvTag);
log.info("CSV标签JSON保存成功" + custIdc);
}
private String writeJsonToOss(JSONObject jsonObject, String fileNamePrefix, String userName) {
File tempFile = null;
try {
tempFile = File.createTempFile(fileNamePrefix, ".json");
String originalFileName = fileNamePrefix + ".json";
objectMapper.writeValue(tempFile, jsonObject);
return ossFileService.uploadFileToOss(OssFileEnum.CUST_CSV_TAG, tempFile, originalFileName, userName);
}catch (Exception e){
log.error("------------------------>CSV标签JSON上传出错",e);
throw new ServiceException("CSV标签JSON上传出错" + e.getMessage());
}finally {
tempFile.delete();
}
}
public JSONObject getCsvTagJson(String custIdc) {
LambdaQueryWrapper<CustCsvTag> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CustCsvTag::getCustIdc, custIdc);
queryWrapper.eq(CustCsvTag::getHeadId, SecurityUtils.getHeadId());
CustCsvTag custCsvTag = custCsvTagMapper.selectOne(queryWrapper);
if (Objects.isNull(custCsvTag)){
return null;
}
MultipartFile fileFromOss = ossFileService.getFileFromOss(custCsvTag.getFileId());
try {
return objectMapper.readValue(fileFromOss.getBytes(), JSONObject.class);
} catch (Exception e) {
log.error("------------------------>CSV标签JSON读取出错",e);
throw new ServiceException("CSV标签JSON读取出错" + e.getMessage());
}
}
}

View File

@@ -0,0 +1,8 @@
package com.ruoyi.ibs.customerselect.service;
/**
* @Author 吴凯程
* @Date 2025/5/8
**/
public interface GridFilterService {
}

View File

@@ -0,0 +1,35 @@
package com.ruoyi.ibs.customerselect.service;
import com.ruoyi.ibs.customerselect.domain.ListSelectByUser;
import com.ruoyi.ibs.customerselect.domain.ListSelectForUser;
import com.ruoyi.ibs.customerselect.domain.ListSelectForUserExportRetail;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface IListSelectService {
/**
* 查询清单列表信息
*
* @return 清单信息
*/
public List<ListSelectByUser> getListInfoByUser(ListSelectByUser listSelectByUser);
/**
* 查询清单客户列表信息
*
* @return 清单信息
*/
public List<ListSelectForUser> getCustListInfoByUser(ListSelectForUser listSelectForUser);
/**
* 查询导出客群清单
*
* @return 清单信息
*/
public void selectListExportByGroupId(HttpServletResponse response, String custPattern, String groupId, String campaignId, Long deptId, List<String> custIds);
}

View File

@@ -0,0 +1,44 @@
package com.ruoyi.ibs.customerselect.service;
import com.ruoyi.ibs.customerselect.domain.*;
import java.util.List;
public interface IMyCustomerService {
/**
* 查询客户基本信息
*
* @return 客户基本信息
*/
public List<CustBaseInfo> selectSysCustomerBasedataList(CustBaseInfo sysCustomerBasedata);
Long countCustRetailByRegion(String code);
Long countCustBusinessByRegion(String code);
Long countCustMerchantByRegion(String code);
List<Long> countAllByCode(String code, String deptCode);
/**
* 我的客户数据新增修改
*
* @return 客户基本信息
*/
public int custInfoUpdate(CustInfoUpdateFromAnchor custInfoUpdateFromAnchor);
/**
* 我的客户数据删除
*
* @return 客户基本信息
*/
public int custInfoDelete(CustInfoDeleteFromAnchor custInfoDeleteFromAnchor);
public List<CustBaseInfo> selectAddress(List<CustBaseInfo> list);
public CustListSearchVo selectCustomListSearchVo(CustBaseInfo sysCustomerBasedata);
MerchantMcspInfo selectmerchantMessage(String custId);
}

View File

@@ -0,0 +1,11 @@
package com.ruoyi.ibs.customerselect.service.Impl;
import com.ruoyi.ibs.customerselect.service.GridFilterService;
/**
* @Author 吴凯程
* @Date 2025/5/8
**/
public class GridFilterServiceImpl implements GridFilterService {
}

Some files were not shown because too many files have changed in this diff Show More