This commit is contained in:
wkc
2026-02-26 09:27:30 +08:00
commit f64b3462c6
2108 changed files with 321244 additions and 0 deletions

55
.gitignore vendored Normal file
View File

@@ -0,0 +1,55 @@
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### JRebel ###
rebel.xml
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
**/_remote.repositories
mvn/
/.idea/
浙江省/
ruoyi-ui/vue.config.js

18
AGENTS.md Normal file
View File

@@ -0,0 +1,18 @@
<!-- OPENSPEC:START -->
# OpenSpec Instructions
These instructions are for AI assistants working in this project.
Always open `@/openspec/AGENTS.md` when the request:
- Mentions planning or proposals (words like proposal, spec, change, plan)
- Introduces new capabilities, breaking changes, architecture shifts, or big performance/security work
- Sounds ambiguous and you need the authoritative spec before coding
Use `@/openspec/AGENTS.md` to learn:
- How to create and apply change proposals
- Spec format and conventions
- Project structure and guidelines
Keep this managed block so 'openspec update' can refresh the instructions.
<!-- OPENSPEC:END -->

206
CLAUDE.md Normal file
View File

@@ -0,0 +1,206 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
<!-- OPENSPEC:START -->
# OpenSpec Instructions
These instructions are for AI assistants working in this project.
Always open `@/openspec/AGENTS.md` when the request:
- Mentions planning or proposals (words like proposal, spec, change, plan)
- Introduces new capabilities, breaking changes, architecture shifts, or big performance/security work
- Sounds ambiguous and you need the authoritative spec before coding
Use `@/openspec/AGENTS.md` to learn:
- How to create and apply change proposals
- Spec format and conventions
- Project structure and guidelines
Keep this managed block so 'openspec update' can refresh the instructions.
<!-- OPENSPEC:END -->
## 项目架构
RuoYi-Vue 是一个基于 Spring Boot + Vue 的前后端分离快速开发框架v3.8.8)。
### 整体结构
```
RuoYi-Vue-master/
├── ruoyi-ui/ # 前端项目Vue 2 + Element UI
├── ruoyi-admin/ # Web 服务入口Spring Boot 主应用)
├── ruoyi-framework/ # 核心框架模块(认证、权限、缓存)
├── ruoyi-system/ # 系统管理模块(用户、角色、菜单等)
├── ruoyi-common/ # 通用工具模块
├── ruoyi-quartz/ # 定时任务模块
├── ruoyi-generator/ # 代码生成模块
├── ibs/ # 数字支行模块(自定义业务模块)
├── sql/ # SQL 脚本
├── openspec/ # OpenSpec 规范管理
└── pom.xml # Maven 父项目配置
```
### 后端模块依赖关系
- **ruoyi-admin**: 主应用,依赖所有其他模块
- **ruoyi-framework**: 核心框架,提供 Spring Security、JWT、Redis 等基础功能
- **ruoyi-system**: 系统管理功能(用户、角色、菜单、部门、岗位、字典、参数、通知公告等)
- **ruoyi-common**: 通用工具类(注解、常量、异常处理、工具类等)
- **ruoyi-quartz**: Quartz 定时任务调度
- **ruoyi-generator**: 代码生成器,支持前后端代码生成
- **ibs**: 自定义业务模块
### 前端目录结构ruoyi-ui/
```
ruoyi-ui/
├── src/
│ ├── api/ # API 接口定义
│ ├── assets/ # 静态资源
│ ├── components/ # 通用组件
│ ├── layout/ # 布局组件
│ ├── router/ # 路由配置
│ ├── store/ # Vuex 状态管理
│ ├── utils/ # 工具函数
│ └── views/ # 页面组件
├── public/ # 公共静态资源
├── vue.config.js # Vue CLI 配置
└── package.json # 前端依赖管理
```
## 开发命令
### 后端开发
```bash
# 编译整个项目
mvn clean install
# 编译单个模块
mvn clean install -pl ruoyi-admin
# 跳过测试编译
mvn clean install -DskipTests
# 运行主应用(需先编译)
cd ruoyi-admin/target
java -jar ruoyi-admin.jar
# 或使用 Maven 插件运行
cd ruoyi-admin
mvn spring-boot:run
```
### 前端开发
```bash
cd ruoyi-ui
# 安装依赖
npm install
# 开发模式运行
npm run dev
# 生产环境构建
npm run build:prod
# 预发布环境构建
npm run build:stage
# 代码检查
npm run lint
```
### 启动脚本
项目提供了启动脚本:
- Windows: `ry.bat`
- Linux: `./ry.bat``./ry.sh`
## 技术栈
### 后端
- Spring Boot 2.5.14
- Spring Security 5.7.12(认证授权)
- JWTToken 认证)
- MyBatisORM
- Redis缓存
- Druid数据库连接池
- Swagger 3.0API 文档)
- Quartz定时任务
- WebSocket实时通信
- EasyExcelExcel 处理)
### 前端
- Vue 2.6.12
- Element UI 2.15.14
- Vue Router 3.4.9
- Vuex 3.6.0
- Axios 0.28.1HTTP 客户端)
- ECharts 5.4.0(数据可视化)
## 核心概念
### 认证授权
- 基于 Spring Security + JWT 的无状态认证
- 支持动态权限菜单
- 数据权限控制(基于部门的数据范围)
- Token 存储在 Redis 中,支持过期续期
### 权限控制
- 菜单权限:控制用户可见的功能模块
- 按钮权限:细粒度的操作控制
- 数据权限:控制用户可访问的数据范围
### 代码生成器
使用代码生成器可以一键生成前后端 CRUD 代码:
1. 在数据库中创建表
2. 通过系统菜单的"代码生成"功能导入表
3. 编辑字段信息
4. 生成代码并下载
## 重要配置文件
| 文件路径 | 用途 |
|---------|------|
| [ruoyi-admin/src/main/resources/application.yml](ruoyi-admin/src/main/resources/application.yml) | Spring Boot 主配置 |
| [ruoyi-ui/.env.development](ruoyi-ui/.env.development) | 前端开发环境配置 |
| [ruoyi-ui/vue.config.js](ruoyi-ui/vue.config.js) | Vue CLI 配置 |
| [pom.xml](pom.xml) | Maven 依赖配置 |
## 开发注意事项
### 后端开发
- Controller 层位于各模块的 `controller/`
- Service 层分为接口(`service/`)和实现(`service/impl/`
- Mapper 层使用 MyBatis 注解或 XML 映射
- 实体类使用 JPA 注解(`@Table`, `@Column` 等)
- 使用 `@RequiresPermissions` 注解控制权限
### 前端开发
- API 请求统一在 `src/api/` 目录下定义
- 页面组件放在 `src/views/` 目录下,按模块分组
- 使用 Vuex 管理全局状态(用户信息、权限等)
- 路由配置在 `src/router/` 目录下
- 静态资源放在 `src/assets/` 目录下
### 数据库
- SQL 脚本位于 `sql/` 目录
- 表命名规范:`sys_` 前缀为系统表,业务表可自定义
- 字段包含通用字段:`create_by`, `create_time`, `update_by`, `update_time`, `remark`
## 默认账号
- 用户名: `admin`
- 密码: `admin123`

20
LICENSE Normal file
View File

@@ -0,0 +1,20 @@
The MIT License (MIT)
Copyright (c) 2018 RuoYi
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

96
README.md Normal file
View File

@@ -0,0 +1,96 @@
<p align="center">
<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
</p>
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.8</h1>
<h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4>
<p align="center">
<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.8-brightgreen.svg"></a>
<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
</p>
## 平台简介
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
* 前端采用Vue、Element UI。
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
* 权限认证使用Jwt支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
* 高效率开发,使用代码生成器可以一键生成前后端代码。
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3),保持同步更新。
* 提供了单应用版本[RuoYi-Vue-fast](https://github.com/yangzongzhuan/RuoYi-Vue-fast)Oracle版本[RuoYi-Vue-Oracle](https://github.com/yangzongzhuan/RuoYi-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[RuoYi](https://gitee.com/y_project/RuoYi),微服务版本,请移步[RuoYi-Cloud](https://gitee.com/y_project/RuoYi-Cloud)
* 阿里云折扣场:[点我进入](http://aly.ruoyi.vip),腾讯云秒杀场:[点我进入](http://txy.ruoyi.vip)&nbsp;&nbsp;
* 阿里云优惠券:[点我领取](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link),腾讯云优惠券:[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console)&nbsp;&nbsp;
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
3. 岗位管理:配置系统用户所属担任职务。
4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
7. 参数管理:对系统动态配置常用参数。
8. 通知公告:系统通知公告信息发布维护。
9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
10. 登录日志:系统登录日志记录查询包含登录异常。
11. 在线用户:当前系统中活跃用户状态监控。
12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
13. 代码生成前后端代码的生成java、html、xml、sql支持CRUD下载 。
14. 系统接口根据业务代码自动生成相关的api接口文档。
15. 服务监控监视当前系统CPU、内存、磁盘、堆栈等相关信息。
16. 缓存监控:对系统的缓存信息查询,命令统计等。
17. 在线构建器拖动表单元素生成相应的HTML代码。
18. 连接池监视监视当前系统数据库连接池状态可进行分析SQL找出系统性能瓶颈。
## 在线体验
- admin/admin123
- 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。
演示地址http://vue.ruoyi.vip
文档地址http://doc.ruoyi.vip
## 演示图
<table>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/cd1f90be5f2684f4560c9519c0f2a232ee8.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/1cbcf0e6f257c7d3a063c0e3f2ff989e4b3.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8074972883b5ba0622e13246738ebba237a.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-9f88719cdfca9af2e58b352a20e23d43b12.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-39bf2584ec3a529b0d5a3b70d15c9b37646.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-936ec82d1f4872e1bc980927654b6007307.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-b2d62ceb95d2dd9b3fbe157bb70d26001e9.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-d67451d308b7a79ad6819723396f7c3d77a.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/5e8c387724954459291aafd5eb52b456f53.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/644e78da53c2e92a95dfda4f76e6d117c4b.jpg"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-8370a0d02977eebf6dbf854c8450293c937.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-49003ed83f60f633e7153609a53a2b644f7.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/up-d4fe726319ece268d4746602c39cffc0621.png"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-c195234bbcd30be6927f037a6755e6ab69c.png"/></td>
</tr>
<tr>
<td><img src="https://oscimg.oschina.net/oscnet/b6115bc8c31de52951982e509930b20684a.jpg"/></td>
<td><img src="https://oscimg.oschina.net/oscnet/up-5e4daac0bb59612c5038448acbcef235e3a.png"/></td>
</tr>
</table>
## 若依前后端分离交流群
QQ群 [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/已满-101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [![加入QQ群](https://img.shields.io/badge/已满-264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [![加入QQ群](https://img.shields.io/badge/已满-167385320-blue.svg)](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [![加入QQ群](https://img.shields.io/badge/已满-104748341-blue.svg)](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [![加入QQ群](https://img.shields.io/badge/已满-160110482-blue.svg)](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [![加入QQ群](https://img.shields.io/badge/已满-170801498-blue.svg)](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [![加入QQ群](https://img.shields.io/badge/已满-108482800-blue.svg)](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [![加入QQ群](https://img.shields.io/badge/已满-101046199-blue.svg)](https://jq.qq.com/?_wv=1027&k=SpyH2875) [![加入QQ群](https://img.shields.io/badge/已满-136919097-blue.svg)](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [![加入QQ群](https://img.shields.io/badge/已满-143961921-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [![加入QQ群](https://img.shields.io/badge/已满-174951577-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [![加入QQ群](https://img.shields.io/badge/已满-161281055-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [![加入QQ群](https://img.shields.io/badge/已满-138988063-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [![加入QQ群](https://img.shields.io/badge/151450850-blue.svg)](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) 点击按钮入群。

12
bin/clean.bat Normal file
View File

@@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 清理工程target生成路径。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean
pause

12
bin/package.bat Normal file
View File

@@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 打包Web工程生成war/jar包文件。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package -Dmaven.test.skip=true
pause

14
bin/run.bat Normal file
View File

@@ -0,0 +1,14 @@
@echo off
echo.
echo [信息] 使用Jar命令运行Web工程。
echo.
cd %~dp0
cd ../ruoyi-admin/target
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
java -jar %JAVA_OPTS% ruoyi-admin.jar
cd bin
pause

487
doc/0314sql-更新.txt Normal file
View File

@@ -0,0 +1,487 @@
alter table sys_group_customer add column `cust_lb` char(1) DEFAULT NULL COMMENT '是否行内客户'; -- 舒
-- 张淋彬
ALTER TABLE ibs.ibs_anchor_address_965 ADD source varchar(100) NULL COMMENT '地址来源';
ALTER TABLE ibs.ibs_anchor_965 ADD cust_status INT DEFAULT 1 NULL;
ALTER TABLE ibs.ibs_anchor_965 ADD cust_address_status INT DEFAULT 1 NULL;
ALTER TABLE ibs.ibs_anchor_965 ADD create_time DATETIME DEFAULT CURRENT_TIMESTAMP NULL;
CREATE INDEX `ibs_anchor_update_time_IDX` USING BTREE ON ibs.ibs_anchor_965 (update_time desc);
CREATE INDEX `ibs_anchor_cust_status_IDX` USING BTREE ON ibs.ibs_anchor_965 (cust_status,cust_address_status,delete_status,cust_type);
CREATE INDEX `ibs_anchor_cust_type_IDX` USING BTREE ON ibs.ibs_anchor_965 (cust_type,delete_status,address_id);
CREATE INDEX `ibs_anchor_cust_id_IDX` USING BTREE ON ibs.ibs_anchor_965 (cust_id,legal_id,delete_status);
ALTER TABLE ibs.cust_info_retail_965 ADD normal_location varchar(100) NULL COMMENT '常住地址';
ALTER TABLE ibs.cust_info_retail_965 ADD idc_location varchar(100) NULL COMMENT '身份证地址';
ALTER TABLE ibs.cust_info_retail_965 ADD relation_location varchar(100) NULL COMMENT '联系地址';
-- 张昱
CREATE TABLE `sys_campaign_group` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`campaign_id` varchar(100) DEFAULT NULL COMMENT '活动id',
`group_id` varchar(100) DEFAULT NULL COMMENT '客群id',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(10) DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=359 DEFAULT CHARSET=utf8 COMMENT='清单客群关系表'
-- ibs_pre.sys_campaign_second definition
CREATE TABLE `sys_campaign_second` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`campaign_name` varchar(100) DEFAULT NULL COMMENT '活动名称(任务名称)',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门id',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
`create_by` varchar(100) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(100) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`start_time` datetime DEFAULT NULL COMMENT '活动开始时间',
`end_time` datetime DEFAULT NULL COMMENT '活动结束时间',
`campaign_degree` varchar(100) DEFAULT NULL COMMENT '活动紧急程度,高,中,低',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在2代表删除)',
`campaign_type` varchar(100) DEFAULT NULL COMMENT '活动类型,走访,电话,短信',
`claim_type` char(1) DEFAULT NULL COMMENT '认领类型0强制认领1可选认领',
`distribute_type` varchar(100) DEFAULT NULL COMMENT '第一优先级分配规则0手动指定1按照客户归属2按照地址归属',
`campaign_id` varchar(100) DEFAULT NULL COMMENT '活动id(任务id)',
`claim_start_time` datetime DEFAULT NULL COMMENT '活动认领开始时间',
`claim_end_time` datetime DEFAULT NULL COMMENT '活动认领结束时间',
`executer` char(1) DEFAULT NULL COMMENT '执行人,0代表机构1代表个人2代表混合分配',
`create_role` char(1) DEFAULT NULL COMMENT '活动创建角色0总行管理员1: 零售 2对公 3运管 5 支行',
`group_id` varchar(100) DEFAULT NULL COMMENT '客群id',
`second_push_status` char(1) DEFAULT '0' COMMENT '活动是否二次推送过0未推送1已推送',
`distribute_type2` varchar(100) DEFAULT NULL COMMENT '第二优先级分配规则0手动指定1按照客户归属2按照地址归属',
`distribute_type3` varchar(100) DEFAULT NULL COMMENT '第三优先级分配规则0手动指定1按照客户归属2按照地址归属',
`task_type` varchar(100) DEFAULT NULL COMMENT '任务类型0营销任务1事务任务',
`check_target` varchar(100) DEFAULT NULL COMMENT '考核目标,存款营销,贷款营销,产品营销,贷前调查,贷后回访,预期催收,其他',
`task_index` varchar(100) DEFAULT NULL COMMENT '任务指标',
`reward` varchar(300) DEFAULT NULL COMMENT '奖励说明',
`feed_back` varchar(100) DEFAULT NULL COMMENT '反馈要求,无,签到签退,拍照,反馈记录',
`cust_type` char(1) DEFAULT NULL COMMENT '客户类型 0个人1商户2企业',
`distribute_cont` varchar(100) DEFAULT NULL COMMENT '規則1内容',
`distribute_cont2` varchar(100) DEFAULT NULL COMMENT '規則2内容',
`distribute_cont3` varchar(100) DEFAULT NULL COMMENT '規則3内容',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT='二次分配活动表';
insert into sys_campaign_group(campaign_id ,group_id )
select distinct campaign_id ,group_id from sys_campaign_group_customer;
ALTER TABLE ibs.sys_campaign ADD distribute_cont3 varchar(100) NULL COMMENT '';
ALTER TABLE ibs.sys_campaign ADD distribute_cont2 varchar(100) NULL COMMENT '';
ALTER TABLE ibs.sys_campaign ADD distribute_cont varchar(100) NULL COMMENT '';
ALTER TABLE ibs.sys_campaign MODIFY COLUMN distribute_type2 varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '';
ALTER TABLE ibs.sys_campaign MODIFY COLUMN distribute_type3 varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '';
-- 何
ALTER TABLE ibs.relation_rule ADD add_source varchar(100) NULL COMMENT '地址来源';
ALTER TABLE ibs.relation_rule ADD add_source_id varchar(100) NULL COMMENT '地址来源码值';
ALTER TABLE ibs.cust_tab_list_info ADD is_start varchar(1) NULL COMMENT '0停用1启动';
ALTER TABLE ibs.cust_tab_list_info MODIFY COLUMN comput_type varchar(1) COMMENT '加工类型: 0手动执行1 天2周 3月4年';
--各个客户表都要965以外的其余行社
ALTER TABLE ibs.cust_info_retail_965 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_merchant_965 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_business_965 ADD record_status char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_retail_807 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_merchant_807 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_business_807 ADD record_status char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_retail_831 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_merchant_831 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_business_831 ADD record_status char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_retail_931 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_merchant_931 ADD record_status char(1) NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
ALTER TABLE ibs.cust_info_business_931 ADD record_status char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '建档标识,新入客户表的客户状态为未建档';
-- ibs.family_member definition
CREATE TABLE `family_member` (
`id_card` varchar(18) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '身份证号',
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '姓名',
`father_card` varchar(18) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '父亲身份证',
`mother_card` varchar(18) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '母亲身份证',
`spouse_card` varchar(18) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '配偶身份证',
`family_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '家庭id',
`gender` char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '性别M男F女',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`is_delete` char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '0未删除1逻辑删除',
`bs_id` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '兄弟姐妹唯一id',
`spouse_family_id` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '配偶家庭id女性出嫁后此字段填充男方家庭id男方结婚后也要写入女方家庭id',
`create_time` datetime DEFAULT NULL,
`create_by` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
`update_by` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
`birth_date` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC;
INSERT INTO ibs.sys_dict_type
(dict_id, dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES(null, '地址来源码值', 'address_source', '0', 'admin', '2024-10-25 10:52:38', '', NULL, NULL);
INSERT INTO ibs.sys_dict_type
(dict_id, dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES(null, '亲属关系码值', 'family_relation', '0', 'admin', '2024-10-25 10:52:38', '', NULL, NULL);
INSERT INTO ibs.sys_dict_type
(dict_id, dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES(null, '对公经营状态', 'reg_status', '0', 'admin', '2024-10-25 10:52:38', '', NULL, NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'信用卡开卡','0_gh_xykkk','ral_rules',NULL,'default','N','0','admin','2024-10-25 10:55:21','9650702','2024-11-21 10:03:41',NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(1,'信用卡销卡','1_gh_xykxk','ral_rules',NULL,'default','N','0','admin','2024-10-25 10:55:54','9650702','2024-11-20 16:23:07',NULL),
(0,'家庭地址','0_dz_jtdz','ral_rules',NULL,'default','N','0','admin','2024-10-25 10:56:33','9650702','2024-11-21 10:03:44',NULL),
(0,'信用卡-企业开卡','0_gh_xykkk','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:23:59','9650702','2024-11-21 10:05:16',NULL),
(0,'信用卡-企业销卡','0_gh_xykxk','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:24:21','9650702','2024-11-21 10:05:21',NULL),
(0,'注册地址','2_dz_zcdz','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:24:43','9650702','2024-11-21 10:04:03',NULL),
(0,'经营地址','2_dz_jydz','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:25:01','9650702','2024-11-21 10:04:10',NULL),
(0,'商户-行用卡销卡','1_gh_xykxk','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:25:26','9650702','2024-11-21 10:04:44',NULL),
(0,'行用卡开卡-商户','1_gh_xykkk','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:25:45','9650702','2024-11-21 10:04:51',NULL),
(0,'注册地址','1_dz_zcdz','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:26:00','9650702','2024-11-21 14:18:29',NULL),
(0,'经营地址','1_dz_btdz','ral_rules',NULL,'default','N','0','9650702','2024-11-20 16:26:25','9650702','2024-11-21 14:19:54',NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'工作地址','0_dz_gzdz','ral_rules',NULL,'default','N','0','9650702','2024-11-21 14:20:51','',NULL,NULL),
(0,'户籍地址','0_dz_hjdz','ral_rules',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'核心','0_hx','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'大信贷','0_dxd','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'EICC','0_eicc','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'ECIF','0_ecif','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'手工导入','0_sgdr','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'核心','1_hx','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'大信贷','1_dxd','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'EICC','1_eicc','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'ECIF','1_ecif','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'手工导入','1_sgdr','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'新华社','1_xhs','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'金综','1_jz','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'核心','2_hx','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'大信贷','2_dxd','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'EICC','2_eicc','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'ECIF','2_ecif','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'手工导入','2_sgdr','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'新华社','2_xhs','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'金综','2_jz','address_source',NULL,'default','N','0','9650702','2024-11-21 14:21:10','',NULL,NULL),
(0,'外高祖母','m,m,m,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'小姑子','h,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾伯祖父','f,f,f,f,bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外甥女','ss,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'女婿','h,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'舅祖母/妗婆','f,m,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外曾孙','s,d,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'叔祖母','f,f,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖姑母/太姑婆','f,f,f,f,bb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'女儿','h,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖姑丈/老太姑婆公','f,f,f,f,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'公公','h,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖母/老太奶奶','f,f,f,f,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姑夫','f,f,bs,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'嫂子','bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂外姑丈/堂外姑婆公','m,f,f,bb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'婆婆','h,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'妹夫','ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'侄子','bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'表妹夫','f,ss,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'大伯子','h,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高伯祖母/老太婆','f,f,f,f,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂叔祖母','f,f,f,sb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖父的妻子(高祖母)','f,f,f,f,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂外叔祖母/堂外婶婆','m,f,f,sb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'大姑子','h,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'小叔子','h,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'哥哥','bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾外孙女','d,d,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'堂姐夫','f,bb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖姑母/姑婆','f,f,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'妻子的伯祖父','w,f,f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姐夫/表妹夫','m,sb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'襟兄','w,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表叔','f,f,ss,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表婶','f,f,ss,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖姑母/太姑婆','f,f,f,f,sb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'孙女婿','d,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'弟弟','sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'姐姐','bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖姑丈/姑婆公','f,f,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖姑丈/太姑婆公','f,f,f,f,sb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外曾婆','h,m,m,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖姑丈/姑婆公','f,f,f,bb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姨夫','m,f,bs,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姑','f,f,ss,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'妹妹','ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外甥','sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高叔祖母/老太婆','f,f,f,f,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'女儿','d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'伯祖父','f,f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂婶','f,f,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外婆','h,m,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'父亲','f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表舅','m,f,bs,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'丈夫','h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外姑丈/外姑婆公','m,f,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'儿媳','w,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'母亲','m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'表妗','m,f,ss,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'弟媳','sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'岳父','w,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'叔祖父','f,f,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'儿子','s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖姑母/姑婆','f,f,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姨','m,f,bs,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'妻子','w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾叔祖父','f,f,f,f,sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'岳母','w,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'女婿','w,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姐/表妹','m,sb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂外姑丈/堂外姑婆公','m,f,f,sb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表伯','f,f,bs,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姑夫','f,f,ss,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表哥/表弟','m,sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂妹/妹妹','f,sb,w,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'舅母/舅妈','m,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姨','m,f,ss,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾孙媳妇','s,s,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'祖父','f,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'大外祖母/外太婆/太姥姥','m,f,f,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表哥/表弟','m,ss,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂弟/弟弟','f,sb,w,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖母/奶奶','f,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姑','f,f,bs,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外伯祖母/外姆婆','m,f,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖姑丈/姑婆公','f,f,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾孙','s,s,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'孙媳妇','s,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'母亲','f,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂伯祖母','f,f,f,bb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾叔祖母','f,f,f,f,sb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姨夫','m,f,ss,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'叔岳父','w,f,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾伯祖母','f,f,f,f,bb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外叔祖母/外婶婆','m,f,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂伯祖父','f,f,f,bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外姑丈/外姑婆公','m,f,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高伯祖母/老太婆','f,f,f,f,f,bb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'曾伯祖母','f,f,f,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外祖父/外公/姥爷','m,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'父亲/爸爸','m,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表嫂/表弟妇','m,sb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姐夫/表妹夫','m,ss,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表舅','m,f,ss,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外祖母','m,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表甥女','m,mb,s,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'伯岳父','w,f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'祖姑母/姑婆','f,f,f,bb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'大外祖父/外太公/太姥爷','m,f,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姐夫/表妹夫','m,bb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'大外祖母/外太婆/太姥姥','m,f,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖姑母/太姑婆','f,f,f,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外舅祖母/外妗婆','m,m,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖姑丈/老太姑婆公','f,f,f,f,f,bb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'舅舅','m,mb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂外伯祖父/堂外伯公','m,f,f,bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表舅','m,m,mb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高叔祖父/老太公','f,f,f,f,f,sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'曾祖姑母/太姑婆','f,f,f,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'姑丈/姑夫','f,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾叔祖父','f,f,f,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表嫂/表弟妇','m,bb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖父','f,f,f,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖母/老太奶奶','f,f,f,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂外姑母/堂外姑婆','m,f,f,bb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表弟','f,ss,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'孙女','d,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'高祖姑母/老太姑婆','f,f,f,f,f,sb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'外舅祖父/外舅公','m,m,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾伯祖父','f,f,f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'女婿','d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂伯','f,bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖母/太奶奶','f,f,f,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖姑丈/太姑婆公','f,f,f,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'岳曾祖父','w,f,f,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外甥','d,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姨','m,bs,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表妹','f,ss,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'曾祖姑丈/太姑婆公','f,f,f,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'堂外姑母/堂外姑婆','m,f,f,sb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'表姐/表妹','m,bs,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'曾祖姑丈/太姑婆公','f,f,f,f,bb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'姨夫','m,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'伯母','f,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:15','',NULL,NULL),
(0,'外曾祖母','m,m,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'太岳母','w,f,f,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂外叔祖父/堂外叔公','m,f,f,sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表嫂','f,bs,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'堂妹夫','f,sb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表嫂/表弟妇','m,ss,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'姑母/姑姑','f,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'岳祖父','w,f,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外舅祖母/外妗婆','m,m,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表姐/表妹','m,bb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'婶婶','f,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'太岳母','w,f,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外舅祖父/外舅公','m,m,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表姐/表妹','m,ss,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'高伯祖父/老太公','f,f,f,f,f,bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'祖姑母/姑婆','f,f,f,sb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'姨丈/姨夫','m,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'叔岳母','w,f,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'舅妈','m,mb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高祖姑母/老太姑婆','f,f,f,f,f,bb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表舅','m,mb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂叔祖父','f,f,f,sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'伯伯','f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高叔祖母/老太婆','f,f,f,f,f,sb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'孙女','s,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂叔','f,sb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'曾叔祖母','f,f,f,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'舅母/舅妈','m,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表姐夫/表妹夫','m,bs,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'姑姑','f,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'叔叔','f,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'孙子','s,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表哥/表弟','m,bb,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂妹','f,sb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'儿媳','s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'伯岳母','w,f,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高祖姑母/老太姑婆','f,f,f,f,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'小姨子','w,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'襟弟','w,ss,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'大妗','w,bb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高祖姑母/老太姑婆','f,f,f,f,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'大姨子','w,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'小舅子','w,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高叔祖父/老太公','f,f,f,f,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'高伯祖父/老太公','f,f,f,f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'大舅子','w,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表姐夫','f,bs,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂弟妇/弟妹','f,sb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外姑母/外姑婆','m,f,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'孙媳妇的丈夫(即自己)','s,s,w,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外叔祖父/外叔公','m,f,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外甥女','d,s,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高祖姑丈/老太姑婆公','f,f,f,f,f,sb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外伯祖父/外伯公','m,f,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'阿姨','m,bs','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表弟妇','f,ss,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'舅祖父/舅公','f,m,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂外伯祖母/堂外姆婆','m,f,f,bb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'祖姑丈/姑婆公','f,f,f,sb,d,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'姨母/姨姨','m,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'曾祖母/太奶奶','f,f,m','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'舅祖母/妗婆','f,m,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表嫂/表弟妇','m,bs,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂姐/堂姊','f,bb,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'舅祖父/舅公','f,m,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'祖母/奶奶','f,f,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表姆','f,f,bs,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'妈妈的弟弟','m,sb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'小妗','w,sb,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外姑母/外姑婆','m,f,ss','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'姐夫','bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'外高祖母的丈夫(外高祖父)','m,m,m,m,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂嫂/嫂嫂','f,bb,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表姐','f,bs,d','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'曾祖父','f,f,f','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'高祖姑丈/老太姑婆公','f,f,f,f,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'堂侄','f,bb,s,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'舅父/大舅','m,bb','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表兄/表哥','f,bs,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'侄女','bs,s','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'姑丈/姑夫','f,bs,h','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'表妗','m,f,bs,s,w','family_relation',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'变更','1','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'变更中','2','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'吊销已注销','3','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'存续(在营、开业,在册)','4','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'已注销','5','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'歇业','6','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'正常','7','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'注销','8','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'其他','9','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'吊销','10','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'吊销未注销','11','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'在业','12','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
INSERT INTO ibs.sys_dict_data (dict_sort,dict_label,dict_value,dict_type,css_class,list_class,is_default,status,create_by,create_time,update_by,update_time,remark) VALUES
(0,'废止','13','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'撤销','14','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'注销中','15','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'吊销已注销','16','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'存续','17','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'迁出','18','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'备案','19','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'开业','20','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL),
(0,'空','21','reg_status',NULL,NULL,'N','0','admin','2025-03-12 10:50:16','',NULL,NULL);
----吴
-- ibs.task_visit_log definition
CREATE TABLE `task_visit_log` (
`id` bigint(21) NOT NULL AUTO_INCREMENT COMMENT '主键',
`cust_id` varchar(255) DEFAULT NULL COMMENT '客户号',
`nick_name` varchar(255) DEFAULT NULL COMMENT '柜员名称',
`cust_feedback` varchar(10) DEFAULT NULL COMMENT '客户意向',
`visit_result` varchar(10) DEFAULT NULL COMMENT '营销结果',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='任务走访记录表';
-- ibs.task_visit_error_log definition
CREATE TABLE `task_visit_error_log` (
`id` bigint(21) NOT NULL AUTO_INCREMENT COMMENT '主键',
`cust_id` varchar(255) DEFAULT NULL COMMENT '客户号',
`task_id` varchar(255) DEFAULT NULL COMMENT '任务id',
`address_error_flag` varchar(1) DEFAULT NULL COMMENT '地址是否错误',
`contact_error_flag` varchar(1) DEFAULT NULL COMMENT '联系方式是否错误',
`create_by` varchar(32) DEFAULT NULL COMMENT '创建人',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='任务走访无法触达';

0
doc/0324sql Normal file
View File

178
doc/0417更新sql.txt Normal file
View File

@@ -0,0 +1,178 @@
-- zy
CREATE TABLE `sys_campaign_group_customer_supplement` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`cust_id` varchar(100) DEFAULT NULL COMMENT '客户号',
`campaign_id` varchar(100) DEFAULT NULL COMMENT '活动id',
`group_id` varchar(100) DEFAULT NULL COMMENT '分群id',
`dept_id` bigint(20) DEFAULT NULL COMMENT '部门id',
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
`create_by` varchar(100) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(100) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在2代表删除)',
`grid_id` bigint(20) DEFAULT NULL COMMENT '网格id',
`list_type` char(1) DEFAULT NULL COMMENT '0推荐营销清单1我的营销清单出版需求设计的字段现在暂时不用',
`push_status` char(1) DEFAULT '0' COMMENT '推送状态(0代表未推送1代表推送成功2代表推送失败)',
`org_claim_status` char(1) DEFAULT '0' COMMENT '机构认领状态(0待认领1已认领)',
`org_distribute_status` char(1) DEFAULT '0' COMMENT '机构分配状态(0待分配1已分配)',
`cust_claim_status` char(1) DEFAULT '0' COMMENT '客户经理认领状态(0待认领1已认领)',
`create_role` char(1) DEFAULT NULL COMMENT '记录创建角色0总行管理员1零售2对公3运管5支行',
`grid_name` varchar(100) DEFAULT NULL COMMENT '一级网格名称',
`grid_name2` varchar(100) DEFAULT NULL COMMENT '二级网格名称',
`outlets` varchar(100) DEFAULT NULL COMMENT '客户经理所在网点',
`cust_idc` varchar(100) DEFAULT NULL COMMENT '客户身份证号',
`second_push_status` char(1) DEFAULT '0' COMMENT '活动是否二次推送过0未推送1已推送',
`cust_phone` varchar(100) DEFAULT NULL COMMENT '客户电话',
`social_credit_code` varchar(100) DEFAULT NULL COMMENT '统一社会信用识别码(只有企业和商户有)',
`outlets_id` varchar(30) DEFAULT NULL COMMENT '客户经理所在网点ID(若客户经理不属于网点,则无值)',
`push_user_level` varchar(10) DEFAULT NULL COMMENT '推送客户经理级别head 总行 branch支行',
`push_status_branch` varchar(1) DEFAULT NULL COMMENT '支行推送状态 0 未推送1成功2失败',
PRIMARY KEY (`id`),
KEY `sys_campaign_group_customer_supplement_cust_id_IDX` (`cust_id`) USING BTREE,
KEY `sys_campaign_group_customer_supplement_campaign_id_IDX` (`campaign_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3610 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='活动分群客户关联关系表-跑批结果表-补充客户经理、机构'
ALTER TABLE sys_menu ADD is_link varchar(1) DEFAULT '0' NULL COMMENT '是否可以直接访问';
CREATE TABLE `admin_region_index_965` (
`id` bigint(21) NOT NULL AUTO_INCREMENT COMMENT '主键',
`create_time` date DEFAULT NULL COMMENT '创建日期',
`level` int(11) DEFAULT NULL COMMENT '行政区划等级',
`code` varchar(255) DEFAULT NULL COMMENT '行政区划编码',
`item_name` varchar(255) DEFAULT NULL COMMENT '指标名称',
`item_val` varchar(255) DEFAULT NULL COMMENT '指标值',
`dept_id` bigint(21) DEFAULT NULL COMMENT '归属机构',
`ops_dept` varchar(1) DEFAULT NULL COMMENT '归属部室',
`item_idx` varchar(10) DEFAULT NULL COMMENT '指标码值',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='行政区划热力指标';
ALTER TABLE draw_shape ADD create_by varchar(100) NULL COMMENT '创建者';
update draw_shape set create_by = update_by;
INSERT INTO sys_dict_type ( dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES
('行政区划数据码值', 'admin_region_data_metric', '0', 'admin', '2025-04-01 11:01:29', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '建档率', '1001', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '授信率', '1002', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '合同签约率', '1003', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '信用卡覆盖率', '1004', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, 'ETC覆盖率', '1005', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '丰收互联覆盖率', '1006', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '收单覆盖率', '1007', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣电费覆盖率', '1008', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款黑名单占比', '1009', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '五级不良贷款占比(人)', '1010', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '五级不良贷款占比(金额)', '1011', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '合同签约率', '2001', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '签发承兑汇票率', '2002', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贴现业务率', '2003', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '保函业务率', '2004', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '有效代发工资率', '2005', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣电费率', '2006', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣水费率', '2007', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣税费率', '2008', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '票据宝签约率', '2009', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '财资宝签约率', '2010', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '收付宝签约率', '2011', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贸融宝签约率', '2012', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '数字生态产品签约率', '2013', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '开户率', '2014', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '国际结算业务率', '2015', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '远期结算汇业务率', '2016', 'admin_region_data_metric', NULL, 'default', 'N', '0', 'admin', '2025-03-24 20:21:30', '', NULL, NULL);
-- zlb
CREATE TABLE `draw_layer_audit_965` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`shape_id` varchar(100) DEFAULT NULL COMMENT '图形id',
`shape_name` varchar(100) DEFAULT NULL COMMENT '图形名称锚点编号。同客户编号,即证件类型',
`layer_id` varchar(100) DEFAULT NULL COMMENT '图层id',
`layer_name` varchar(100) DEFAULT NULL COMMENT '图层名称',
`dept_id` varchar(100) DEFAULT NULL COMMENT '支行机构号',
`dept_name` varchar(100) NOT NULL COMMENT '支行名称',
`user_name` varchar(100) DEFAULT NULL COMMENT '客户经理柜员号',
`nick_name` varchar(100) NOT NULL COMMENT '客户经理名称(申请者、创建者)',
`ops_dept` varchar(10) NOT NULL COMMENT '部室归属',
`delete_status` int(11) DEFAULT '0' COMMENT '删除状态0为正常1为已删除',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '申请时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域审批表';
ALTER TABLE draw_shape ADD audit_status varchar(10) DEFAULT '0' NOT NULL COMMENT '审批状态0待审批1审批通过2拒绝';
ALTER TABLE draw_shape ADD audit_remark varchar(100) NULL COMMENT '审批意见';
ALTER TABLE sys_group_customer MODIFY COLUMN push_status char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '1' NULL COMMENT '导入状态(1代表导入成功2代表导入失败缺乏必填项或地址电话不全)';
--szq
CREATE TABLE `campaign_count` (
`dt` varchar(10) DEFAULT NULL COMMENT '统计日期',
`dept_id` varchar(10) DEFAULT NULL COMMENT '行社机构号',
`dept_name` varchar(10) DEFAULT NULL COMMENT '行社名称',
`user_id` varchar(10) DEFAULT NULL COMMENT '用户id',
`user_name` varchar(10) DEFAULT NULL COMMENT '用户姓名',
`create_camp_num_year` int(10) DEFAULT NULL COMMENT '创建的总任务数--年',
`push_camp_num_year` int(10) DEFAULT NULL COMMENT '推送给我的总任务数--年',
`other_camp_num_year` int(10) DEFAULT NULL COMMENT '其他总任务数--年',
`create_camp_num_month` int(10) DEFAULT NULL COMMENT '创建的总任务数--月',
`push_camp_num_month` int(10) DEFAULT NULL COMMENT '推送给我的总任务数--月',
`other_camp_num_month` int(10) DEFAULT NULL COMMENT '其他总任务数--月',
`create_camp_num_week` int(10) DEFAULT NULL COMMENT '创建的总任务数--周',
`push_camp_num_week` int(10) DEFAULT NULL COMMENT '推送给我的总任务数--周',
`other_camp_num_week` int(10) DEFAULT NULL COMMENT '其他总任务数--周',
`sum_type` char(2) DEFAULT NULL COMMENT '统计层级 0总行 1零售 2公司 3运管 5支行 -1客户经理',
`cust_type` char(1) DEFAULT NULL COMMENT '客户类型 0个人1商户2企业'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='走访任务统计卡片'
CREATE TABLE `visit_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`campaign_id` varchar(100) DEFAULT NULL COMMENT '任务id',
`vis_name` varchar(100) DEFAULT NULL COMMENT '走访客户经理姓名',
`vis_id` varchar(100) DEFAULT NULL COMMENT '走访客户经理id',
`dept_id` varchar(100) DEFAULT NULL COMMENT '走访客户经理部门',
`vis_time` datetime DEFAULT NULL COMMENT '走访时间',
`cust_name` varchar(100) DEFAULT NULL COMMENT '走访客户名称',
`cust_idc` varchar(100) DEFAULT NULL COMMENT '客户证件号',
`social_credit_code` varchar(100) DEFAULT NULL COMMENT '企业(商户)统信码',
`create_by` varchar(100) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(100) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '走访备注',
`cust_type` char(1) DEFAULT NULL COMMENT '客户类型 0个人1商户2企业',
`dept_name` varchar(100) DEFAULT NULL COMMENT '部门名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1232 DEFAULT CHARSET=utf8 COMMENT='走访名单表'
CREATE TABLE `visit_campaign_count` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`campaign_id` varchar(100) DEFAULT NULL COMMENT '任务id',
`cust_num` bigint(20) DEFAULT NULL COMMENT '活动客户数',
`push_success_num` bigint(20) DEFAULT NULL COMMENT '推送成功客户数',
`allocate_rate` varchar(100) DEFAULT NULL COMMENT '机构分配率',
`issued_num` varchar(100) DEFAULT NULL COMMENT '客户认领率',
`claim_num` bigint(20) DEFAULT NULL COMMENT '认领客户数',
`valid_visit_num` bigint(20) DEFAULT NULL COMMENT '有效待走访客户数',
`visit_rate` varchar(100) DEFAULT NULL COMMENT '走访率',
`loan_sign_rate` varchar(100) DEFAULT NULL COMMENT '贷款合同签约率',
`increase_deposit_amount` varchar(100) DEFAULT NULL COMMENT '活期存款提升金额',
`push_client_id` varchar(100) DEFAULT NULL COMMENT '推送的客户经理',
`cust_type` char(1) DEFAULT NULL COMMENT '客户类型 0个人1商户2企业',
`dispatch_num` bigint(20) DEFAULT NULL COMMENT '已下发客户数',
`dept_id` bigint(20) DEFAULT NULL COMMENT '机构号',
`campaign_create_time` varchar(100) DEFAULT NULL COMMENT '活动创建时间',
`start_time` varchar(100) DEFAULT NULL COMMENT '活动开始时间',
`end_time` varchar(100) DEFAULT NULL COMMENT '活动结束时间',
`claim_ddline` varchar(100) DEFAULT NULL COMMENT '活动认领时限',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=537 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='走访任务统计'

371
doc/0515更新sql.txt Normal file

File diff suppressed because one or more lines are too long

295
doc/2.2.3需求slq Normal file
View File

@@ -0,0 +1,295 @@
-- zy
INSERT INTO sys_dict_type
( dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES('自定义名单网格热力图-公司指标', 'gridshapecountindex_gs', '0', 'admin', '2025-06-20 16:15:28', 'admin', '2025-06-20 16:16:18', NULL);
INSERT INTO sys_dict_type
( dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES('自定义名单网格热力图-零售指标', 'gridshapecountindex_ls', '0', 'admin', '2025-06-20 16:16:08', '', NULL, NULL);
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '入格客户数', 'cust_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '活期存款余额', 'hq_cur_balance', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '保证金存款余额', 'bz_cur_balance', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款余额', 'loan_balance_cny', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贴现余额', 'finance_prod_711_balance', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '承兑汇票余额', 'finance_prod_716_balance', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款年日均', 'loan_year_dailyaverage', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '合同签约率', 'htqy_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '签发承兑汇票率', 'qfcd_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贴现业务率', 'tx_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '保函业务率', 'bh_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '有效代发工资率', 'yxdfgz_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣电费率', 'dkdf_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣水费率', 'dksf_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣税费率', 'dkshf_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '票据宝签约率', 'pjb_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '财资宝签约率', 'czb_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '收付宝签约率', 'sfb_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贸融宝签约率', 'mrb_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '数字生态产品签约率', 'szst_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '开户率', 'kh_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '国际结算业务率', 'gjjsyw_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '远期结算汇业务率', 'yqjsh_rat', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '合同签约数', 'htqy_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '签发承兑汇票数', 'qfcd_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贴现业务数', 'tx_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '保函业务数', 'bh_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '有效代发工资数', 'yxdfgz_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '月均代发工资笔数', 'ustr_count_per_m', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '月均代发工资金额(元)', 'ustr_bal_m', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣电费数', 'dkdf_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣水费数', 'dksf_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣税费数', 'dkshf_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '票据宝签约数', 'pjb_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '财资宝签约数', 'czb_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '收付宝签约数', 'sfb_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贸融宝签约数', 'mrb_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '数字生态产品签约数', 'szst_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '开户数', 'kh_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '国际结算业务数', 'gjjsyw_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '远期结算汇业务数', 'yqjsh_num', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近365天已走访人数', 'zf_365cnt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近180天已走访人数', 'zf_180cnt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近90天已走访人数', 'zf_90cnt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近30天已走访人数', 'zf_30cnt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', '', NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近365天走访率', 'zf_365rt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近180天走访率', 'zf_180rt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近90天走访率', 'zf_90rt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近30天走访率', 'zf_30rt', 'gridshapecountindex_gs', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '入格客户数', 'cust_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '活期存款余额', 'cur_bal_d', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '定期存款余额', 'cur_bal_t', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款余额', 'bal_loan', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '五级不良贷款余额', 'cur_bal_5_bad', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '活期存款年日均', 'cur_d_ave', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '定期存款年日均', 'cur_t_ave', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款年日均', 'loan_ave', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '建档率', 'ph_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '授信率', 'sx_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '合同签约率', 'yxht_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '信用卡覆盖率', 'xyk_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '丰收互联覆盖率', 'fshl_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '收单覆盖率', 'sd_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, 'ETC覆盖率', 'etc_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣电费覆盖率', 'dian_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款黑名单占比', 'black_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '五级不良贷款占比(人)', 'bad_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '五级不良贷款占比(金额)', 'bad_bal_rat', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '建档客户数', 'ph_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '授信客户数', 'sx_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '合同签约客户数', 'yxht_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '持有信用卡客户数', 'xyk_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '开通丰收互联客户数', 'fshl_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '收单客户数', 'sd_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, 'ETC客户数', 'etc_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '代扣电费客户数', 'dian_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '贷款黑名单客户数', 'black_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '五级不良贷款客户数', 'bad_num', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近365天已走访人数', 'zf_365cnt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近180天已走访人数', 'zf_180cnt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近90天已走访人数', 'zf_90cnt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近30天已走访人数', 'zf_30cnt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近365天走访率', 'zf_365rt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近180天走访率', 'zf_180rt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近90天走访率', 'zf_90rt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
INSERT INTO sys_dict_data ( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) VALUES( 0, '近30天走访率', 'zf_30rt', 'gridshapecountindex_ls', '', '', 'N', '0', 'admin', '2025-03-12 10:50:15', NULL, NULL, '');
ALTER TABLE sys_campaign_group_customer ADD cust_name varchar(100) NULL COMMENT '客戶姓名';
ALTER TABLE sys_campaign_group_customer ADD cust_isn varchar(100) NULL COMMENT '客戶内碼';
ALTER TABLE sys_campaign_group_customer ADD lp_name varchar(100) NULL COMMENT '法人姓名';
ALTER TABLE sys_campaign ADD `related_model_id` varchar(100) NULL COMMENT '关联反馈模板uuid 默认模板-1';
CREATE TABLE `lowcode_visst_feedback_model` (
`id` bigint(21) NOT NULL AUTO_INCREMENT COMMENT '主键',
`uuid` varchar(100) DEFAULT NULL COMMENT '主键',
`dept_id` bigint(21) DEFAULT NULL COMMENT '机构号',
`model_name` varchar(200) DEFAULT NULL COMMENT '模板名字',
`model_detal` json DEFAULT NULL COMMENT '模板内容',
`belong_outlet_id` varchar(500) DEFAULT NULL COMMENT '归属网点',
`belong_outlet_name` varchar(500) DEFAULT NULL COMMENT '归属网点',
`CREATED_BY` varchar(32) DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` datetime DEFAULT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` datetime DEFAULT NULL COMMENT '更新时间',
`model_type` varchar(2) DEFAULT NULL COMMENT '模板类型 0零售1公司2运管',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='走访反馈自定义模板编辑表';
INSERT INTO sys_dict_type
( dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES( '外部系统链接', 'external_url', '0', 'admin', '2025-07-03 18:07:27', '', NULL, NULL);
INSERT INTO sys_dict_data
( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES(0, 'product_manual', '数智支行操作手册V1.0.docx', 'product_manual_szzh', NULL, 'default', 'N', '0', 'admin', '2025-06-26 19:28:33', '', NULL, NULL);
INSERT INTO sys_dict_data
( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES(0, '965-系统A', 'http://xxxxx/', 'external_url', NULL, 'default', 'N', '0', 'admin', '2025-07-03 18:08:44', '', NULL, NULL);
INSERT INTO sys_dict_data
( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES(1, '965-系统B', 'http://xxxx', 'external_url', NULL, 'default', 'N', '0', 'admin', '2025-07-03 18:09:09', '', NULL, NULL);
INSERT INTO sys_dict_data
( dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark)
VALUES( 0, '932-系统C', 'HTTPS://1213', 'external_url', NULL, 'default', 'N', '0', 'admin', '2025-07-03 18:35:28', '', NULL, NULL);
INSERT INTO sys_dict_type
(dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark)
VALUES( '数智支行操作手册名称', 'product_manual_szzh', '0', 'admin', '2025-06-26 19:27:31', '', NULL, NULL);
-- ibs.grid_region_transfer definition
CREATE TABLE `grid_region_transfer` (
`id` bigint(21) NOT NULL AUTO_INCREMENT COMMENT 'id',
`status` varchar(10) DEFAULT NULL COMMENT '状态 0支行审批 1总行审批 2审批通过 -1审批拒绝',
`cust_id` varchar(100) DEFAULT NULL COMMENT '客户号',
`cust_name` varchar(100) DEFAULT NULL COMMENT '客户名称',
`cust_type` varchar(100) DEFAULT NULL,
`ops_dept` varchar(10) DEFAULT NULL COMMENT '部室',
`prev_grid_id` bigint(21) DEFAULT NULL COMMENT '原网格',
`prev_grid_name` varchar(255) DEFAULT NULL COMMENT '原网格名称',
`prev_user` varchar(100) DEFAULT NULL COMMENT '原客户经理',
`prev_branch_id` bigint(21) DEFAULT NULL COMMENT '原支行',
`prev_branch_name` varchar(100) DEFAULT NULL COMMENT '原支行名称',
`next_grid_id` bigint(21) DEFAULT NULL COMMENT '移交网格',
`next_grid_name` varchar(255) DEFAULT NULL COMMENT '移交网格名称',
`next_branch_ids` varchar(255) DEFAULT NULL COMMENT '移交支行',
`next_branch_name` varchar(255) DEFAULT NULL COMMENT '移交支行名称',
`next_users` varchar(255) DEFAULT NULL COMMENT '移交客户经理',
`approve_branch_user` varchar(255) DEFAULT NULL COMMENT '审批支行管理员',
`approve_branch_result` varchar(1) DEFAULT NULL COMMENT '审批支行结果',
`approve_head_user` varchar(255) DEFAULT NULL COMMENT '审批总行部室管理员',
`approve_head_result` varchar(1) DEFAULT NULL COMMENT '审批总行结果',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`create_by` varchar(100) DEFAULT NULL COMMENT '创建者',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='行政网格移交表';
ALTER TABLE ibs.grid_region_cust_user_965 ADD region_name varchar(100) NULL;
ALTER TABLE ibs.grid_region_cust_user_965 ADD top_grid_duty_type varchar(100) NULL;
ALTER TABLE ibs.grid_region_cust_user_965 ADD sec_grid_duty_type varchar(100) NULL;
-- ibs.task_visit_cust_address definition
CREATE TABLE `task_visit_cust_address` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cust_id` varchar(50) NOT NULL,
`province` varchar(50) DEFAULT NULL,
`city` varchar(50) DEFAULT NULL,
`county` varchar(50) DEFAULT NULL,
`detail_address` text,
`lng` decimal(15,8) DEFAULT NULL,
`lat` decimal(15,8) DEFAULT NULL,
`user_name` varchar(50) DEFAULT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='走访地址采集';
-- ibs.task_visit_image definition
CREATE TABLE `task_visit_image` (
`file_id` varchar(100) NOT NULL COMMENT 'uuid',
`record_id` varchar(100) NOT NULL COMMENT '任务走访id',
`sign_type` varchar(1) NOT NULL COMMENT '打卡类型 0签到 1签退',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='走访打卡图片';
-- ibs.task_visit_record definition
CREATE TABLE `task_visit_record` (
`id` varchar(100) NOT NULL COMMENT 'id',
`campaign_id` varchar(100) NOT NULL COMMENT '任务id',
`campaign_name` varchar(100) NOT NULL COMMENT '任务名称',
`cust_id` varchar(100) NOT NULL COMMENT '客户号',
`cust_name` varchar(100) NOT NULL COMMENT '客户名称',
`user_id` bigint(20) DEFAULT NULL,
`nick_name` varchar(100) NOT NULL COMMENT '客户经理名称',
`user_name` varchar(100) NOT NULL COMMENT '客户经理柜员号',
`sign_id` varchar(100) DEFAULT NULL,
`latest_sign` varchar(100) DEFAULT NULL,
`duration` double DEFAULT '0',
`feedback_id` varchar(100) DEFAULT NULL,
`feedback_type` varchar(100) DEFAULT NULL COMMENT '反馈模板类型 0对私 1对公 2自定义',
`feedback_template_id` varchar(100) DEFAULT NULL,
`cust_type` varchar(100) DEFAULT NULL,
`visit_type` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='任务走访记录';
-- ibs.task_visit_sign definition
CREATE TABLE `task_visit_sign` (
`id` varchar(100) NOT NULL COMMENT 'id',
`record_id` varchar(100) DEFAULT NULL COMMENT '走访记录id',
`sign_in_time` datetime DEFAULT NULL COMMENT '签到时间',
`sign_in_address` text COMMENT '签到地址',
`sign_in_lng` decimal(15,8) DEFAULT NULL COMMENT '签到经度',
`sign_in_lat` decimal(15,8) DEFAULT NULL COMMENT '签到纬度',
`sign_out_time` datetime DEFAULT NULL COMMENT '签退时间',
`sign_out_address` text COMMENT '签退地址',
`sign_out_lng` decimal(15,8) DEFAULT NULL COMMENT '签退经度',
`sign_out_lat` decimal(15,8) DEFAULT NULL COMMENT '签退纬度',
`sign_out_remark` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='走访任务打卡记录';
-- ibs.visit_feedback_private definition
CREATE TABLE `visit_feedback_private` (
`id` varchar(100) NOT NULL COMMENT 'uuid',
`client_suggestion` text COMMENT '客户反馈意见',
`client_label` text COMMENT '客户标签',
`intend_product` text COMMENT '意向产品',
`other_intend` text COMMENT '其他意向',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='走访反馈对私';
-- ibs.visit_feedback_public definition
CREATE TABLE `visit_feedback_public` (
`id` varchar(100) NOT NULL COMMENT 'uuid',
`client_suggestion` text COMMENT '客户意见',
`client_label` text COMMENT '客户标签',
`status_flag` varchar(1) DEFAULT NULL COMMENT '是否经营',
`address_consist` varchar(1) DEFAULT NULL COMMENT '地址是否一致',
`address` text COMMENT '地址',
`scope_consist` varchar(1) DEFAULT NULL COMMENT '经营范围是否一致',
`scope` text COMMENT '经营范围',
`relate_person` text COMMENT '关联人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='走访反馈对公';
-- ibs.oss_file_data definition
CREATE TABLE `oss_file_data` (
`file_id` varchar(255) NOT NULL COMMENT 'uuid',
`file_name` varchar(255) NOT NULL COMMENT '文件名',
`original_file_name` varchar(100) DEFAULT NULL,
`content_type` varchar(255) DEFAULT NULL COMMENT '文件类型',
`file_size` double DEFAULT NULL,
`file_enum` varchar(100) DEFAULT NULL,
`user_name` varchar(100) DEFAULT NULL,
`file_url` varchar(255) NOT NULL COMMENT '文件url',
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`file_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `qywx_org` (
`org_id` varchar(100) DEFAULT NULL COMMENT '机构id',
`app_id` varchar(100) DEFAULT NULL,
`agent_id` varchar(100) DEFAULT NULL,
`secret` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='企业微信机构参数表'

143
doc/v2.2.2_mysql.txt Normal file
View File

@@ -0,0 +1,143 @@
INSERT INTO sys_dict_type ( dict_name, dict_type, status, create_by, create_time, update_by, update_time, remark) VALUES('地图拓客货币币种码值', 'cust_map_cur_metric', '0', 'admin', '2025-05-23 10:06:15', '', NULL, NULL);
INSERT INTO sys_dict_data (dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, update_by, update_time, remark) values
(0, '人民币元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '加元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '哥伦比亚比索', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '德国马克', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '挪威马克', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '新加坡元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '日元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '欧元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '法国法郎', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '港元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '澳大利亚元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '瑞典克朗', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '瑞士法郎', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '美元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '英镑', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '阿富汗尼', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '韩元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '新台币', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL),
(0, '新西兰元', '101', 'cust_map_cur_metric', NULL, 'default', 'N', '0', 'admin', '2025-05-23 10:14:00', '', NULL, NULL);
-- dept_address definition
CREATE TABLE `dept_address` (
`dept_id` bigint(21) NOT NULL COMMENT '部门id',
`address` longtext,
`city` varchar(100) DEFAULT NULL,
`lng` decimal(15,8) DEFAULT NULL,
`lat` decimal(15,8) DEFAULT NULL,
PRIMARY KEY (`dept_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='机构地址表';
CREATE TABLE cust_map_favorite(
id bigint(21) NOT NULL COMMENT '主键' ,
user_name VARCHAR(100) COMMENT '用户名' ,
cust_name VARCHAR(100) COMMENT '企业名称' ,
lp_name VARCHAR(100) COMMENT '法人姓名' ,
phone_number VARCHAR(100) COMMENT '联系方式' ,
regist_capi_show VARCHAR(100) COMMENT '注册资本展示字段' ,
province VARCHAR(100) COMMENT '省' ,
city VARCHAR(100) COMMENT '市' ,
address_detail longtext COMMENT '详细地址' ,
longitude DECIMAL(15,15) COMMENT '经度' ,
latitude DECIMAL(15,15) COMMENT '纬度' ,
start_date DATE COMMENT '成立年限' ,
PRIMARY KEY (id)
) COMMENT = '地图拓客收藏表';
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965000,'临海市大洋街道河阳路299号','台州市',121.19534176,28.88832500),
(965010,'临海市大洋街道河阳路299号','台州市',121.19534176,28.88832500),
(965013,'临海市凯歌路2号','台州市',121.15229963,28.86509170),
(965020,'临海市古城街道巾山中路2号','台州市',121.14417311,28.85059030),
(965022,'临海市古城街道洪池路108号、110号、112号','台州市',121.13400420,28.85616354),
(965030,'临海市大洋街道柏叶中路291号','台州市',121.18192853,28.87585265),
(965035,'临海市大田街道东方大道659号','台州市',121.20797193,28.91396531),
(965036,'临海市大洋街道绿化村','台州市',121.16425365,28.88920773),
(965040,'临海市江南街道江南大道4号','台州市',121.14258149,28.82589609),
(965041,'临海市江南街道小溪村1-98号','台州市',121.13226023,28.78969755);
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965042,'临海市古城街道两水村','台州市',121.16166680,28.84179629),
(965050,'临海市大田街道奋进东街258号','台州市',121.21702020,28.91170836),
(965052,'临海市大田街道奋进西街119号','台州市',121.20810766,28.91187499),
(965060,'临海市汛桥镇汛汇路2号','台州市',121.18481972,28.79844536),
(965070,'临海市东塍镇川津路427号812','台州市',121.26984057,28.93071358),
(965071,'临海市东塍镇屈家村2157A','台州市',121.26016734,28.94013888),
(965072,'临海市东塍镇康一村371号','台州市',121.40748541,28.93156402),
(965080,'临海市邵家渡街道邵临东路54号','台州市',121.22261494,28.86553519),
(965081,'临海市邵家渡街道中台村265号','台州市',121.20895872,28.82085263),
(965090,'临海市小芝镇溪滨北路1号','台州市',121.46179992,28.85924349);
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965100,'临海市杜桥镇滨海路599号','台州市',121.50550545,28.75783738),
(965102,'临海市杜桥镇西岸村4-82号','台州市',121.53366274,28.73910159),
(965104,'临海市杜桥镇汾东村15-14、15-15号','台州市',121.48521237,28.74923323),
(965108,'临海市杜桥镇杜下浦村','台州市',121.54213682,28.72408230),
(965109,'临海市杜桥镇下街路耀达商城16幢','台州市',121.51490541,28.76573292),
(965110,'浙江省临海市上盘镇西大路10号','台州市',121.58828484,28.75916566),
(965111,'浙江省临海市上盘镇银山街267号','台州市',121.60305280,28.75354870),
(965112,'浙江省临海市台州湾经济技术开发区乐安路77、79、81、83号','台州市',121.64550133,28.72767696),
(965120,'临海市桃渚镇东洋大道北7号','台州市',121.59241345,28.82726747),
(965121,'临海市桃渚镇连盘南路124号','台州市',121.58664399,28.78455584);
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965122,'临海市桃渚镇顺南路119号','台州市',121.60391437,28.83248647),
(965123,'临海市桃渚镇项庄村','台州市',121.62403138,28.82529239),
(965124,'临海市桃渚镇城外村桃江路61号','台州市',121.54135916,28.83171938),
(965130,'临海市尤溪镇义城路205号','台州市',121.11074788,28.74381794),
(965140,'临海市涌泉镇灵泉街171号','台州市',121.32395548,28.76260117),
(965141,'临海市涌泉镇后泾村','台州市',121.35571399,28.72437942),
(965142,'临海市涌泉镇管岙村1-92号','台州市',121.25998355,28.78789657),
(965150,'临海市沿江镇水洋大道49号','台州市',121.24849270,28.74755964),
(965151,'临海市沿江镇西岑村4-291A','台州市',121.30993131,28.73750480),
(965152,'临海市沿江镇下岙村83号','台州市',121.30750795,28.70469465);
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965153,'临海市沿江镇长甸三村49号','台州市',121.28051118,28.74876826),
(965160,'河头镇人民路82号','台州市',121.10915626,28.99917355),
(965161,'河头镇兰桥村26-1号','台州市',121.14503737,29.01422584),
(965170,'临海市括苍镇塍园路28号','台州市',120.99303455,28.86399880),
(965171,'临海市括苍镇小海门村3-197A','台州市',120.98924397,28.87119176),
(965180,'临海市永丰镇留贤村1-188号','台州市',121.07890061,28.89838696),
(965182,'临海市永丰镇赤缪一村赤缪街115号','台州市',121.07668503,28.89874271),
(965183,'临海市永丰镇更楼村3-68号','台州市',121.04637306,28.88508833),
(965190,'浙江省临海市白水洋镇黄沙大道81号','台州市',120.91519961,28.90253586),
(965191,'浙江省临海市白水洋镇永安路170号','台州市',120.90808171,28.90108097);
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965192,'浙江省临海市白水洋镇中和路117号','台州市',120.96164309,28.95953814),
(965193,'浙江省临海市白水洋镇店前村12E','台州市',120.94016855,28.95268686),
(965194,'浙江省临海市白水洋镇黄坦村','台州市',120.91435125,28.90211277),
(965850,'临海市汇溪镇两头门村甬临路3号','台州市',121.22307505,28.95837869),
(965870,'临海市古城街道鹿城路170号','台州市',121.13738389,28.84895560),
(965871,'临海市古城街道赤城路50-20号','台州市',121.12452133,28.85063894),
(965872,'临海市古城街道巾山西路59号','台州市',121.12246636,28.84882874),
(965880,'临海市大洋街道大洋西路309号','台州市',121.15621300,28.86242371),
(965881,'临海市大洋街道东方大道120号','台州市',121.20797193,28.91396531),
(965890,'临海市杜桥镇府前街372号','台州市',121.50395605,28.76635382);
INSERT INTO dept_address (dept_id,address,city,lng,lat) VALUES
(965891,'临海市杜桥镇解放街269号','台州市',121.50254679,28.76962042),
(965892,'临海市杜桥镇三房村2-145号','台州市',121.56718993,28.75758802),
(965893,'临海市杜桥镇溪口村2-105号','台州市',121.42106787,28.78712796);
ALTER TABLE visit_trajectory_965 ADD head_id BIGINT NULL;
ALTER TABLE visit_trajectory_965 ADD branch_id BIGINT NULL;
ALTER TABLE visit_trajectory_965 ADD outlet_id BIGINT NULL;
ALTER TABLE visit_trajectory_965 ADD user_name VARCHAR(50) NULL;
--szq
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_365cnt varchar(100) NULL COMMENT '近365天已走访人数';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_180cnt varchar(100) NULL COMMENT '近180天已走访人数';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_90cnt varchar(100) NULL COMMENT '近90天已走访人数';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_30cnt varchar(100) NULL COMMENT '近30天已走访人数';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_365rt varchar(100) NULL COMMENT '近365天走访率';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_180rt varchar(100) NULL COMMENT '近180天走访率';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_90rt varchar(100) NULL COMMENT '近90天走访率';
ALTER TABLE ibs.grid_shape_count_lingshou_965 ADD zf_30rt varchar(100) NULL COMMENT '近30天走访率';
ALTER TABLE ibs.grid_shape_cust_lingshou_965 ADD is_365zf varchar(100) NULL COMMENT '近365天有无走访';
ALTER TABLE ibs.grid_shape_cust_lingshou_965 ADD is_180zf varchar(100) NULL COMMENT '近180天有无走访';
ALTER TABLE ibs.grid_shape_cust_lingshou_965 ADD is_90zf varchar(100) NULL COMMENT '近90天有无走访';
ALTER TABLE ibs.grid_shape_cust_lingshou_965 ADD is_30zf varchar(100) NULL COMMENT '近30天有无走访';

Binary file not shown.

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;
}
}

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