Compare commits
113 Commits
adb6b00ed0
...
dev-ui
| Author | SHA1 | Date | |
|---|---|---|---|
| addea20fa1 | |||
| d4ac165723 | |||
| 1bb24ab0a2 | |||
| 9c22e8a3ce | |||
| 03282c9b69 | |||
| 8190946a87 | |||
| a8e15e16d9 | |||
| 933214a495 | |||
| b96161ecf4 | |||
| 3f424a5b7e | |||
| ea6bd5213f | |||
| 28b846134a | |||
| 40194c86fb | |||
| c9838024b3 | |||
| d582a65978 | |||
| 0a3c03dcf9 | |||
| dd3aa5bbae | |||
| 865d8f823b | |||
| 9df1b956b3 | |||
| 0889ee4533 | |||
| f2cc9e2700 | |||
| a019abb950 | |||
| d6457491e8 | |||
| 46d190aa74 | |||
| b098d4eed1 | |||
| eb0d896114 | |||
| 36576fab78 | |||
| c1d56cc153 | |||
| 26f77bf458 | |||
| 65f25a9258 | |||
| 2cb4481c3b | |||
| 559572da8c | |||
| c1018fea0c | |||
| cf36b5f05a | |||
| 5e968c8716 | |||
| ed1d07ad05 | |||
| dc578762b3 | |||
| e44e632bb6 | |||
| 3f98d59741 | |||
| e7ad46edaf | |||
| 966754e8c6 | |||
| 7cffdc9e2b | |||
| a76806acfc | |||
| 55c8f1c29c | |||
| d914c93e93 | |||
| 3ea227141d | |||
| 3a2e4d86e3 | |||
| 9e0efe8010 | |||
| 2c793eaed6 | |||
| d931ac185d | |||
| 0e593a9202 | |||
| 762af9de90 | |||
| b5733486fd | |||
| d4421862a8 | |||
| 21b8b7bf41 | |||
| 2b701602ff | |||
| cda1028c48 | |||
| 60f935da27 | |||
| 17a6c389d1 | |||
| 1e3ea8d4c9 | |||
| 3fb02f1391 | |||
| 04381dc434 | |||
| 2866767503 | |||
| d1bfeb8e63 | |||
| 255a41c936 | |||
| ed427f7a42 | |||
| 7fb1543c4c | |||
| 0746a44b32 | |||
| d174dc739f | |||
| 54cd982603 | |||
| e957cdcc81 | |||
| 9442a4116c | |||
| be3448eb44 | |||
| 8e0274df88 | |||
| 5867cd5057 | |||
| 78ae93330c | |||
| a52fb35bd3 | |||
| 717f836190 | |||
| 8df9dbacd8 | |||
| 155da36e78 | |||
| 13769da668 | |||
| e521169a7c | |||
| ad4e115787 | |||
| ed54b01d26 | |||
| 85f4e7bc61 | |||
| a13c73f9a8 | |||
| 137d6630fe | |||
| b14eef8482 | |||
| 2793cf437c | |||
| ad8099889c | |||
| 05ac43f26b | |||
| 071c02192d | |||
| 5eea3c66ff | |||
| f217d59f09 | |||
| 3e8e44ae30 | |||
| 98430b4c8d | |||
| 1770d304e5 | |||
| d745481eeb | |||
| 0fc61aa3cb | |||
| 04c9cfc42e | |||
| 5ba70789d4 | |||
| 0b80c18838 | |||
| 3dc639778e | |||
| 8a6b844509 | |||
| 0dbf5c5ca4 | |||
| c1a588b3fd | |||
| 1d013dc6df | |||
| dd93798cb9 | |||
| eb4988f80e | |||
| 5f8c5a9ec5 | |||
| 805bef4099 | |||
| 294164a504 | |||
| bb49d78a3a |
@@ -27,7 +27,7 @@
|
|||||||
- 前端开发直接在当前分支进行,不需要额外创建 git worktree
|
- 前端开发直接在当前分支进行,不需要额外创建 git worktree
|
||||||
- 测试结束后,自动关闭测试过程中启动的前后端进程
|
- 测试结束后,自动关闭测试过程中启动的前后端进程
|
||||||
- 遇到 MCP 数据库操作时,使用项目配置文件中的数据库连接信息
|
- 遇到 MCP 数据库操作时,使用项目配置文件中的数据库连接信息
|
||||||
- 执行包含中文内容的 MySQL SQL 脚本时,禁止直接手写 `mysql -e` 或普通重定向执行;必须优先使用 `bin/mysql_utf8_exec.sh <sql-file>`,确保会话字符集为 `utf8mb4`,避免写入乱码
|
- 执行包含中文内容的 MySQL SQL 脚本或数据库导入时,禁止直接手写 `mysql -e` 或普通重定向执行;必须优先使用 `bin/mysql_utf8_exec.sh <sql-file>`,确保会话字符集为 `utf8mb4`,避免导入或写入乱码
|
||||||
- 银行流水打标相关规则与参数编码需要统一使用全大写;新增或修改 `rule_code`、`indicator_code`、`param_code` 时,禁止混用大小写风格
|
- 银行流水打标相关规则与参数编码需要统一使用全大写;新增或修改 `rule_code`、`indicator_code`、`param_code` 时,禁止混用大小写风格
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -164,7 +164,7 @@ return AjaxResult.success(result);
|
|||||||
- 非业务字段如 `create_by`、`create_time` 由后端自动维护
|
- 非业务字段如 `create_by`、`create_time` 由后端自动维护
|
||||||
- 前端表单不要暴露通用审计字段
|
- 前端表单不要暴露通用审计字段
|
||||||
- 新增菜单、字典、初始化数据时,同步补充 SQL 脚本
|
- 新增菜单、字典、初始化数据时,同步补充 SQL 脚本
|
||||||
- 执行数据库脚本前,需确认客户端会话字符集为 `utf8mb4`;涉及中文插入、更新时默认使用 `bin/mysql_utf8_exec.sh`
|
- 执行数据库脚本或导入数据库前,需确认客户端会话字符集为 `utf8mb4`;涉及中文插入、更新、导入时默认使用 `bin/mysql_utf8_exec.sh`
|
||||||
|
|
||||||
### 前端规范
|
### 前端规范
|
||||||
|
|
||||||
|
|||||||
BIN
assets/员工账户.xlsx
Normal file
BIN
assets/员工账户.xlsx
Normal file
Binary file not shown.
@@ -11,8 +11,8 @@ TARGET_DIR="$ROOT_DIR/ruoyi-admin/target"
|
|||||||
JAR_NAME="ruoyi-admin.jar"
|
JAR_NAME="ruoyi-admin.jar"
|
||||||
SERVER_PORT=62318
|
SERVER_PORT=62318
|
||||||
STOP_WAIT_SECONDS=30
|
STOP_WAIT_SECONDS=30
|
||||||
APP_KEYWORD="$JAR_NAME"
|
APP_MARKER="-Dccdi.backend.root=$ROOT_DIR"
|
||||||
JAVA_OPTS="-Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError"
|
JAVA_OPTS="$APP_MARKER -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError"
|
||||||
|
|
||||||
timestamp() {
|
timestamp() {
|
||||||
date "+%Y-%m-%d %H:%M:%S"
|
date "+%Y-%m-%d %H:%M:%S"
|
||||||
@@ -42,24 +42,54 @@ ensure_command() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is_managed_backend_pid() {
|
||||||
|
pid="$1"
|
||||||
|
if [ -z "${pid:-}" ] || ! kill -0 "$pid" 2>/dev/null; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
args=$(ps -o args= -p "$pid" 2>/dev/null || true)
|
||||||
|
if [ -z "${args:-}" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "$args" in
|
||||||
|
*"$APP_MARKER"*"$JAR_NAME"*|*"$JAR_NAME"*"$APP_MARKER"*)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ -f "$PID_FILE" ]; then
|
||||||
|
file_pid=$(cat "$PID_FILE" 2>/dev/null || true)
|
||||||
|
if [ "${file_pid:-}" = "$pid" ]; then
|
||||||
|
case "$args" in
|
||||||
|
*"java"*"-jar"*"$JAR_NAME"*)
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
collect_pids() {
|
collect_pids() {
|
||||||
all_pids=""
|
all_pids=""
|
||||||
|
|
||||||
if [ -f "$PID_FILE" ]; then
|
if [ -f "$PID_FILE" ]; then
|
||||||
file_pid=$(cat "$PID_FILE" 2>/dev/null || true)
|
file_pid=$(cat "$PID_FILE" 2>/dev/null || true)
|
||||||
if [ -n "${file_pid:-}" ] && kill -0 "$file_pid" 2>/dev/null; then
|
if [ -n "${file_pid:-}" ] && is_managed_backend_pid "$file_pid"; then
|
||||||
all_pids="$all_pids $file_pid"
|
all_pids="$all_pids $file_pid"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
port_pids=$(lsof -tiTCP:"$SERVER_PORT" -sTCP:LISTEN 2>/dev/null || true)
|
marker_pids=$(pgrep -f "$APP_MARKER" 2>/dev/null || true)
|
||||||
if [ -n "${port_pids:-}" ]; then
|
if [ -n "${marker_pids:-}" ]; then
|
||||||
all_pids="$all_pids $port_pids"
|
for pid in $marker_pids; do
|
||||||
fi
|
if is_managed_backend_pid "$pid"; then
|
||||||
|
all_pids="$all_pids $pid"
|
||||||
app_pids=$(pgrep -f "$APP_KEYWORD" 2>/dev/null || true)
|
fi
|
||||||
if [ -n "${app_pids:-}" ]; then
|
done
|
||||||
all_pids="$all_pids $app_pids"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unique_pids=""
|
unique_pids=""
|
||||||
@@ -155,6 +185,12 @@ status_backend() {
|
|||||||
pids=$(collect_pids)
|
pids=$(collect_pids)
|
||||||
if [ -n "${pids:-}" ]; then
|
if [ -n "${pids:-}" ]; then
|
||||||
log_info "后端正在运行,进程: $pids"
|
log_info "后端正在运行,进程: $pids"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
port_pids=$(lsof -tiTCP:"$SERVER_PORT" -sTCP:LISTEN 2>/dev/null || true)
|
||||||
|
if [ -n "${port_pids:-}" ]; then
|
||||||
|
log_info "未发现脚本托管的后端进程,但端口 $SERVER_PORT 被其他进程占用: $port_pids"
|
||||||
else
|
else
|
||||||
log_info "后端未运行"
|
log_info "后端未运行"
|
||||||
fi
|
fi
|
||||||
@@ -190,6 +226,7 @@ main() {
|
|||||||
ensure_command mvn
|
ensure_command mvn
|
||||||
ensure_command lsof
|
ensure_command lsof
|
||||||
ensure_command pgrep
|
ensure_command pgrep
|
||||||
|
ensure_command ps
|
||||||
ensure_command tail
|
ensure_command tail
|
||||||
|
|
||||||
action="${1:-restart}"
|
action="${1:-restart}"
|
||||||
|
|||||||
@@ -0,0 +1,181 @@
|
|||||||
|
package com.ruoyi.info.collection.controller;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.common.core.page.PageDomain;
|
||||||
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
|
import com.ruoyi.common.core.page.TableSupport;
|
||||||
|
import com.ruoyi.common.annotation.Log;
|
||||||
|
import com.ruoyi.common.enums.BusinessType;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoAddDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoEditDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiAccountInfoExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.AccountInfoImportFailureVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountInfoVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiBaseStaffOptionVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.ImportResult;
|
||||||
|
import com.ruoyi.info.collection.service.ICcdiAccountInfoService;
|
||||||
|
import com.ruoyi.info.collection.service.ICcdiBaseStaffService;
|
||||||
|
import com.ruoyi.info.collection.utils.EasyExcelUtil;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库Controller
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Tag(name = "账户库管理")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/ccdi/accountInfo")
|
||||||
|
public class CcdiAccountInfoController extends BaseController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ICcdiAccountInfoService accountInfoService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ICcdiBaseStaffService baseStaffService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询账户库列表
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询账户库列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:list')")
|
||||||
|
@GetMapping("/list")
|
||||||
|
public TableDataInfo list(CcdiAccountInfoQueryDTO queryDTO) {
|
||||||
|
PageDomain pageDomain = TableSupport.buildPageRequest();
|
||||||
|
Page<CcdiAccountInfoVO> page = new Page<>(pageDomain.getPageNum(), pageDomain.getPageSize());
|
||||||
|
Page<CcdiAccountInfoVO> result = accountInfoService.selectAccountInfoPage(page, queryDTO);
|
||||||
|
return getDataTable(result.getRecords(), result.getTotal());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询账户库详情
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询账户库详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:query')")
|
||||||
|
@GetMapping("/{id}")
|
||||||
|
public AjaxResult getInfo(@PathVariable Long id) {
|
||||||
|
return success(accountInfoService.selectAccountInfoById(id));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出账户库列表
|
||||||
|
*/
|
||||||
|
@Operation(summary = "导出账户库列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:export')")
|
||||||
|
@Log(title = "账户库管理", businessType = BusinessType.EXPORT)
|
||||||
|
@PostMapping("/export")
|
||||||
|
public void export(HttpServletResponse response, CcdiAccountInfoQueryDTO queryDTO) {
|
||||||
|
List<CcdiAccountInfoExcel> list = accountInfoService.selectAccountInfoListForExport(queryDTO);
|
||||||
|
EasyExcelUtil.exportExcel(response, list, CcdiAccountInfoExcel.class, "账户库管理");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增账户
|
||||||
|
*/
|
||||||
|
@Operation(summary = "新增账户")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:add')")
|
||||||
|
@Log(title = "账户库管理", businessType = BusinessType.INSERT)
|
||||||
|
@PostMapping
|
||||||
|
public AjaxResult add(@Validated @RequestBody CcdiAccountInfoAddDTO addDTO) {
|
||||||
|
return toAjax(accountInfoService.insertAccountInfo(addDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改账户
|
||||||
|
*/
|
||||||
|
@Operation(summary = "修改账户")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:edit')")
|
||||||
|
@Log(title = "账户库管理", businessType = BusinessType.UPDATE)
|
||||||
|
@PutMapping
|
||||||
|
public AjaxResult edit(@Validated @RequestBody CcdiAccountInfoEditDTO editDTO) {
|
||||||
|
return toAjax(accountInfoService.updateAccountInfo(editDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除账户
|
||||||
|
*/
|
||||||
|
@Operation(summary = "删除账户")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:remove')")
|
||||||
|
@Log(title = "账户库管理", businessType = BusinessType.DELETE)
|
||||||
|
@DeleteMapping("/{ids}")
|
||||||
|
public AjaxResult remove(@PathVariable Long[] ids) {
|
||||||
|
return toAjax(accountInfoService.deleteAccountInfoByIds(ids));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询账户归属员工下拉
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询账户归属员工下拉")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:list')")
|
||||||
|
@GetMapping("/staffOptions")
|
||||||
|
public AjaxResult getStaffOptions(@RequestParam(required = false) String query) {
|
||||||
|
List<CcdiBaseStaffOptionVO> list = baseStaffService.selectStaffOptions(query);
|
||||||
|
return success(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询关系人下拉
|
||||||
|
*/
|
||||||
|
@Operation(summary = "查询关系人下拉")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:list')")
|
||||||
|
@GetMapping("/relationOptions")
|
||||||
|
public AjaxResult getRelationOptions(@RequestParam Long staffId) {
|
||||||
|
return success(accountInfoService.selectRelationOptionsByStaffId(staffId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载导入模板
|
||||||
|
*/
|
||||||
|
@Operation(summary = "下载导入模板")
|
||||||
|
@PostMapping("/importTemplate")
|
||||||
|
public void importTemplate(HttpServletResponse response) {
|
||||||
|
EasyExcelUtil.importTemplateExcel(response, CcdiAccountInfoExcel.class, "账户库管理");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入账户库信息
|
||||||
|
*/
|
||||||
|
@Operation(summary = "导入账户库信息")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:accountInfo:import')")
|
||||||
|
@Log(title = "账户库管理", businessType = BusinessType.IMPORT)
|
||||||
|
@PostMapping("/importData")
|
||||||
|
public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception {
|
||||||
|
List<CcdiAccountInfoExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiAccountInfoExcel.class);
|
||||||
|
if (list == null || list.isEmpty()) {
|
||||||
|
return error("至少需要一条数据");
|
||||||
|
}
|
||||||
|
ImportResult result = accountInfoService.importAccountInfo(list, updateSupport);
|
||||||
|
List<AccountInfoImportFailureVO> failures = accountInfoService.getLatestImportFailures();
|
||||||
|
Map<String, Object> data = new HashMap<>(4);
|
||||||
|
data.put("totalCount", result.getTotalCount());
|
||||||
|
data.put("successCount", result.getSuccessCount());
|
||||||
|
data.put("failureCount", result.getFailureCount());
|
||||||
|
data.put("failures", failures);
|
||||||
|
String message = "导入完成,共 " + result.getTotalCount() + " 条,成功 " + result.getSuccessCount()
|
||||||
|
+ " 条,失败 " + result.getFailureCount() + " 条";
|
||||||
|
return AjaxResult.success(message, data);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
|||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentWorkExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
import com.ruoyi.info.collection.domain.vo.ImportResultVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||||
@@ -128,6 +129,15 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffRecruitmentExcel.class, "员工招聘信息");
|
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffRecruitmentExcel.class, "员工招聘信息");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载历史工作经历导入模板
|
||||||
|
*/
|
||||||
|
@Operation(summary = "下载历史工作经历导入模板")
|
||||||
|
@PostMapping("/workImportTemplate")
|
||||||
|
public void workImportTemplate(HttpServletResponse response) {
|
||||||
|
EasyExcelUtil.importTemplateWithDictDropdown(response, CcdiStaffRecruitmentWorkExcel.class, "历史工作经历");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 异步导入招聘信息
|
* 异步导入招聘信息
|
||||||
*/
|
*/
|
||||||
@@ -155,6 +165,31 @@ public class CcdiStaffRecruitmentController extends BaseController {
|
|||||||
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
return AjaxResult.success("导入任务已提交,正在后台处理", result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 异步导入历史工作经历
|
||||||
|
*/
|
||||||
|
@Operation(summary = "异步导入历史工作经历")
|
||||||
|
@Parameter(name = "file", description = "导入文件", required = true)
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:staffRecruitment:import')")
|
||||||
|
@Log(title = "员工招聘历史工作经历", businessType = BusinessType.IMPORT)
|
||||||
|
@PostMapping("/importWorkData")
|
||||||
|
public AjaxResult importWorkData(@Parameter(description = "导入文件") MultipartFile file) throws Exception {
|
||||||
|
List<CcdiStaffRecruitmentWorkExcel> list = EasyExcelUtil.importExcel(file.getInputStream(), CcdiStaffRecruitmentWorkExcel.class);
|
||||||
|
|
||||||
|
if (list == null || list.isEmpty()) {
|
||||||
|
return error("至少需要一条数据");
|
||||||
|
}
|
||||||
|
|
||||||
|
String taskId = recruitmentService.importRecruitmentWork(list);
|
||||||
|
|
||||||
|
ImportResultVO result = new ImportResultVO();
|
||||||
|
result.setTaskId(taskId);
|
||||||
|
result.setStatus("PROCESSING");
|
||||||
|
result.setMessage("历史工作经历导入任务已提交,正在后台处理");
|
||||||
|
|
||||||
|
return AjaxResult.success("历史工作经历导入任务已提交,正在后台处理", result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询导入状态
|
* 查询导入状态
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.ruoyi.info.collection.domain;
|
||||||
|
|
||||||
|
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.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户基础信息对象 ccdi_account_info
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("ccdi_account_info")
|
||||||
|
public class CcdiAccountInfo implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@TableId(value = "account_id", type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 所属人类型:EMPLOYEE/RELATION/INTERMEDIARY/EXTERNAL */
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
/** 所属人标识 */
|
||||||
|
private String ownerId;
|
||||||
|
|
||||||
|
/** 账户号码 */
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
/** 账户类型 */
|
||||||
|
private String accountType;
|
||||||
|
|
||||||
|
/** 账户范围:INTERNAL/EXTERNAL */
|
||||||
|
private String bankScope;
|
||||||
|
|
||||||
|
/** 账户姓名 */
|
||||||
|
private String accountName;
|
||||||
|
|
||||||
|
/** 开户机构 */
|
||||||
|
@TableField("bank")
|
||||||
|
private String openBank;
|
||||||
|
|
||||||
|
/** 银行代码 */
|
||||||
|
private String bankCode;
|
||||||
|
|
||||||
|
/** 币种 */
|
||||||
|
private String currency;
|
||||||
|
|
||||||
|
/** 状态:1-正常 2-已销户 */
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/** 生效日期 */
|
||||||
|
private Date effectiveDate;
|
||||||
|
|
||||||
|
/** 失效日期 */
|
||||||
|
private Date invalidDate;
|
||||||
|
|
||||||
|
/** 创建者 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private String createBy;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/** 更新者 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private String updateBy;
|
||||||
|
|
||||||
|
/** 更新时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package com.ruoyi.info.collection.domain;
|
||||||
|
|
||||||
|
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.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户分析结果对象 ccdi_account_result
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("ccdi_account_result")
|
||||||
|
public class CcdiAccountResult implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@TableId(value = "result_id", type = IdType.AUTO)
|
||||||
|
private Long resultId;
|
||||||
|
|
||||||
|
/** 账户号码 */
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
/** 是否实控账户:0-否 1-是 */
|
||||||
|
@TableField("is_self_account")
|
||||||
|
private Integer isActualControl;
|
||||||
|
|
||||||
|
/** 月均交易笔数 */
|
||||||
|
@TableField("monthly_avg_trans_count")
|
||||||
|
private Integer avgMonthTxnCount;
|
||||||
|
|
||||||
|
/** 月均交易金额 */
|
||||||
|
@TableField("monthly_avg_trans_amount")
|
||||||
|
private BigDecimal avgMonthTxnAmount;
|
||||||
|
|
||||||
|
/** 交易频率等级 */
|
||||||
|
@TableField("trans_freq_type")
|
||||||
|
private String txnFrequencyLevel;
|
||||||
|
|
||||||
|
/** 借方单笔最高额 */
|
||||||
|
@TableField("dr_max_single_amount")
|
||||||
|
private BigDecimal debitSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方单笔最高额 */
|
||||||
|
@TableField("cr_max_single_amount")
|
||||||
|
private BigDecimal creditSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 借方日累计最高额 */
|
||||||
|
@TableField("dr_max_daily_amount")
|
||||||
|
private BigDecimal debitDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方日累计最高额 */
|
||||||
|
@TableField("cr_max_daily_amount")
|
||||||
|
private BigDecimal creditDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 风险等级 */
|
||||||
|
@TableField("trans_risk_level")
|
||||||
|
private String txnRiskLevel;
|
||||||
|
|
||||||
|
/** 创建者 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private String createBy;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/** 更新者 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private String updateBy;
|
||||||
|
|
||||||
|
/** 更新时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ public class CcdiStaffRecruitment implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 招聘项目编号 */
|
/** 招聘记录编号 */
|
||||||
@TableId(type = IdType.INPUT)
|
@TableId(type = IdType.INPUT)
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
@@ -41,6 +41,9 @@ public class CcdiStaffRecruitment implements Serializable {
|
|||||||
/** 应聘人员姓名 */
|
/** 应聘人员姓名 */
|
||||||
private String candName;
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘类型:SOCIAL-社招,CAMPUS-校招 */
|
||||||
|
private String recruitType;
|
||||||
|
|
||||||
/** 应聘人员学历 */
|
/** 应聘人员学历 */
|
||||||
private String candEdu;
|
private String candEdu;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,76 @@
|
|||||||
|
package com.ruoyi.info.collection.domain;
|
||||||
|
|
||||||
|
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.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘记录历史工作经历对象 ccdi_staff_recruitment_work
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-15
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("ccdi_staff_recruitment_work")
|
||||||
|
public class CcdiStaffRecruitmentWork implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键 */
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 关联招聘记录编号 */
|
||||||
|
private String recruitId;
|
||||||
|
|
||||||
|
/** 排序号 */
|
||||||
|
private Integer sortOrder;
|
||||||
|
|
||||||
|
/** 工作单位 */
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/** 所属部门 */
|
||||||
|
private String departmentName;
|
||||||
|
|
||||||
|
/** 岗位名称 */
|
||||||
|
private String positionName;
|
||||||
|
|
||||||
|
/** 入职年月 */
|
||||||
|
private String jobStartMonth;
|
||||||
|
|
||||||
|
/** 离职年月 */
|
||||||
|
private String jobEndMonth;
|
||||||
|
|
||||||
|
/** 离职原因 */
|
||||||
|
private String departureReason;
|
||||||
|
|
||||||
|
/** 主要工作内容 */
|
||||||
|
private String workContent;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/** 创建人 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/** 更新人 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
/** 更新时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库新增DTO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "账户库新增")
|
||||||
|
public class CcdiAccountInfoAddDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 所属人类型 */
|
||||||
|
@NotBlank(message = "所属人类型不能为空")
|
||||||
|
@Schema(description = "所属人类型")
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
/** 所属人标识 */
|
||||||
|
@Schema(description = "所属人标识")
|
||||||
|
private String ownerId;
|
||||||
|
|
||||||
|
/** 账户号码 */
|
||||||
|
@NotBlank(message = "账户号码不能为空")
|
||||||
|
@Size(max = 240, message = "账户号码长度不能超过240个字符")
|
||||||
|
@Schema(description = "账户号码")
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
/** 账户类型 */
|
||||||
|
@NotBlank(message = "账户类型不能为空")
|
||||||
|
@Size(max = 30, message = "账户类型长度不能超过30个字符")
|
||||||
|
@Schema(description = "账户类型")
|
||||||
|
private String accountType;
|
||||||
|
|
||||||
|
/** 账户范围 */
|
||||||
|
@NotBlank(message = "账户范围不能为空")
|
||||||
|
@Size(max = 20, message = "账户范围长度不能超过20个字符")
|
||||||
|
@Schema(description = "账户范围")
|
||||||
|
private String bankScope;
|
||||||
|
|
||||||
|
/** 账户姓名 */
|
||||||
|
@NotBlank(message = "账户姓名不能为空")
|
||||||
|
@Size(max = 100, message = "账户姓名长度不能超过100个字符")
|
||||||
|
@Schema(description = "账户姓名")
|
||||||
|
private String accountName;
|
||||||
|
|
||||||
|
/** 开户机构 */
|
||||||
|
@NotBlank(message = "开户机构不能为空")
|
||||||
|
@Size(max = 100, message = "开户机构长度不能超过100个字符")
|
||||||
|
@Schema(description = "开户机构")
|
||||||
|
private String openBank;
|
||||||
|
|
||||||
|
/** 银行代码 */
|
||||||
|
@Size(max = 20, message = "银行代码长度不能超过20个字符")
|
||||||
|
@Schema(description = "银行代码")
|
||||||
|
private String bankCode;
|
||||||
|
|
||||||
|
/** 币种 */
|
||||||
|
@Size(max = 3, message = "币种长度不能超过3个字符")
|
||||||
|
@Schema(description = "币种")
|
||||||
|
private String currency;
|
||||||
|
|
||||||
|
/** 状态 */
|
||||||
|
@NotNull(message = "状态不能为空")
|
||||||
|
@Schema(description = "状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/** 生效日期 */
|
||||||
|
@NotNull(message = "生效日期不能为空")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@Schema(description = "生效日期")
|
||||||
|
private Date effectiveDate;
|
||||||
|
|
||||||
|
/** 失效日期 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@Schema(description = "失效日期")
|
||||||
|
private Date invalidDate;
|
||||||
|
|
||||||
|
/** 是否实控账户 */
|
||||||
|
@Schema(description = "是否实控账户")
|
||||||
|
private Integer isActualControl;
|
||||||
|
|
||||||
|
/** 月均交易笔数 */
|
||||||
|
@Min(value = 0, message = "月均交易笔数不能小于0")
|
||||||
|
@Schema(description = "月均交易笔数")
|
||||||
|
private Integer avgMonthTxnCount;
|
||||||
|
|
||||||
|
/** 月均交易金额 */
|
||||||
|
@DecimalMin(value = "0", message = "月均交易金额不能小于0")
|
||||||
|
@Schema(description = "月均交易金额")
|
||||||
|
private BigDecimal avgMonthTxnAmount;
|
||||||
|
|
||||||
|
/** 频率等级 */
|
||||||
|
@Size(max = 20, message = "频率等级长度不能超过20个字符")
|
||||||
|
@Schema(description = "频率等级")
|
||||||
|
private String txnFrequencyLevel;
|
||||||
|
|
||||||
|
/** 借方单笔最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "借方单笔最高额不能小于0")
|
||||||
|
@Schema(description = "借方单笔最高额")
|
||||||
|
private BigDecimal debitSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方单笔最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "贷方单笔最高额不能小于0")
|
||||||
|
@Schema(description = "贷方单笔最高额")
|
||||||
|
private BigDecimal creditSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 借方日累计最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "借方日累计最高额不能小于0")
|
||||||
|
@Schema(description = "借方日累计最高额")
|
||||||
|
private BigDecimal debitDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方日累计最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "贷方日累计最高额不能小于0")
|
||||||
|
@Schema(description = "贷方日累计最高额")
|
||||||
|
private BigDecimal creditDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 风险等级 */
|
||||||
|
@Size(max = 10, message = "风险等级长度不能超过10个字符")
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String txnRiskLevel;
|
||||||
|
}
|
||||||
@@ -0,0 +1,143 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.Min;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import jakarta.validation.constraints.Size;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库编辑DTO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "账户库编辑")
|
||||||
|
public class CcdiAccountInfoEditDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@NotNull(message = "主键ID不能为空")
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 所属人类型 */
|
||||||
|
@NotBlank(message = "所属人类型不能为空")
|
||||||
|
@Schema(description = "所属人类型")
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
/** 所属人标识 */
|
||||||
|
@Schema(description = "所属人标识")
|
||||||
|
private String ownerId;
|
||||||
|
|
||||||
|
/** 账户号码 */
|
||||||
|
@NotBlank(message = "账户号码不能为空")
|
||||||
|
@Size(max = 240, message = "账户号码长度不能超过240个字符")
|
||||||
|
@Schema(description = "账户号码")
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
/** 账户类型 */
|
||||||
|
@NotBlank(message = "账户类型不能为空")
|
||||||
|
@Size(max = 30, message = "账户类型长度不能超过30个字符")
|
||||||
|
@Schema(description = "账户类型")
|
||||||
|
private String accountType;
|
||||||
|
|
||||||
|
/** 账户范围 */
|
||||||
|
@NotBlank(message = "账户范围不能为空")
|
||||||
|
@Size(max = 20, message = "账户范围长度不能超过20个字符")
|
||||||
|
@Schema(description = "账户范围")
|
||||||
|
private String bankScope;
|
||||||
|
|
||||||
|
/** 账户姓名 */
|
||||||
|
@NotBlank(message = "账户姓名不能为空")
|
||||||
|
@Size(max = 100, message = "账户姓名长度不能超过100个字符")
|
||||||
|
@Schema(description = "账户姓名")
|
||||||
|
private String accountName;
|
||||||
|
|
||||||
|
/** 开户机构 */
|
||||||
|
@NotBlank(message = "开户机构不能为空")
|
||||||
|
@Size(max = 100, message = "开户机构长度不能超过100个字符")
|
||||||
|
@Schema(description = "开户机构")
|
||||||
|
private String openBank;
|
||||||
|
|
||||||
|
/** 银行代码 */
|
||||||
|
@Size(max = 20, message = "银行代码长度不能超过20个字符")
|
||||||
|
@Schema(description = "银行代码")
|
||||||
|
private String bankCode;
|
||||||
|
|
||||||
|
/** 币种 */
|
||||||
|
@Size(max = 3, message = "币种长度不能超过3个字符")
|
||||||
|
@Schema(description = "币种")
|
||||||
|
private String currency;
|
||||||
|
|
||||||
|
/** 状态 */
|
||||||
|
@NotNull(message = "状态不能为空")
|
||||||
|
@Schema(description = "状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/** 生效日期 */
|
||||||
|
@NotNull(message = "生效日期不能为空")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@Schema(description = "生效日期")
|
||||||
|
private Date effectiveDate;
|
||||||
|
|
||||||
|
/** 失效日期 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@Schema(description = "失效日期")
|
||||||
|
private Date invalidDate;
|
||||||
|
|
||||||
|
/** 是否实控账户 */
|
||||||
|
@Schema(description = "是否实控账户")
|
||||||
|
private Integer isActualControl;
|
||||||
|
|
||||||
|
/** 月均交易笔数 */
|
||||||
|
@Min(value = 0, message = "月均交易笔数不能小于0")
|
||||||
|
@Schema(description = "月均交易笔数")
|
||||||
|
private Integer avgMonthTxnCount;
|
||||||
|
|
||||||
|
/** 月均交易金额 */
|
||||||
|
@DecimalMin(value = "0", message = "月均交易金额不能小于0")
|
||||||
|
@Schema(description = "月均交易金额")
|
||||||
|
private BigDecimal avgMonthTxnAmount;
|
||||||
|
|
||||||
|
/** 频率等级 */
|
||||||
|
@Size(max = 20, message = "频率等级长度不能超过20个字符")
|
||||||
|
@Schema(description = "频率等级")
|
||||||
|
private String txnFrequencyLevel;
|
||||||
|
|
||||||
|
/** 借方单笔最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "借方单笔最高额不能小于0")
|
||||||
|
@Schema(description = "借方单笔最高额")
|
||||||
|
private BigDecimal debitSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方单笔最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "贷方单笔最高额不能小于0")
|
||||||
|
@Schema(description = "贷方单笔最高额")
|
||||||
|
private BigDecimal creditSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 借方日累计最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "借方日累计最高额不能小于0")
|
||||||
|
@Schema(description = "借方日累计最高额")
|
||||||
|
private BigDecimal debitDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方日累计最高额 */
|
||||||
|
@DecimalMin(value = "0", message = "贷方日累计最高额不能小于0")
|
||||||
|
@Schema(description = "贷方日累计最高额")
|
||||||
|
private BigDecimal creditDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 风险等级 */
|
||||||
|
@Size(max = 10, message = "风险等级长度不能超过10个字符")
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String txnRiskLevel;
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.dto;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库查询DTO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "账户库查询条件")
|
||||||
|
public class CcdiAccountInfoQueryDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 员工姓名 */
|
||||||
|
@Schema(description = "员工姓名")
|
||||||
|
private String staffName;
|
||||||
|
|
||||||
|
/** 所属人类型 */
|
||||||
|
@Schema(description = "所属人类型")
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
/** 账户范围 */
|
||||||
|
@Schema(description = "账户范围")
|
||||||
|
private String bankScope;
|
||||||
|
|
||||||
|
/** 关系类型 */
|
||||||
|
@Schema(description = "关系类型")
|
||||||
|
private String relationType;
|
||||||
|
|
||||||
|
/** 账户姓名 */
|
||||||
|
@Schema(description = "账户姓名")
|
||||||
|
private String accountName;
|
||||||
|
|
||||||
|
/** 账户类型 */
|
||||||
|
@Schema(description = "账户类型")
|
||||||
|
private String accountType;
|
||||||
|
|
||||||
|
/** 是否实控账户 */
|
||||||
|
@Schema(description = "是否实控账户")
|
||||||
|
private Integer isActualControl;
|
||||||
|
|
||||||
|
/** 风险等级 */
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
/** 状态 */
|
||||||
|
@Schema(description = "状态")
|
||||||
|
private Integer status;
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@ package com.ruoyi.info.collection.domain.dto;
|
|||||||
|
|
||||||
import com.ruoyi.info.collection.annotation.EnumValid;
|
import com.ruoyi.info.collection.annotation.EnumValid;
|
||||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||||
|
import com.ruoyi.info.collection.enums.RecruitType;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.Pattern;
|
import jakarta.validation.constraints.Pattern;
|
||||||
import jakarta.validation.constraints.Size;
|
import jakarta.validation.constraints.Size;
|
||||||
@@ -22,9 +23,9 @@ public class CcdiStaffRecruitmentAddDTO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 招聘项目编号 */
|
/** 招聘记录编号 */
|
||||||
@NotBlank(message = "招聘项目编号不能为空")
|
@NotBlank(message = "招聘记录编号不能为空")
|
||||||
@Size(max = 32, message = "招聘项目编号长度不能超过32个字符")
|
@Size(max = 32, message = "招聘记录编号长度不能超过32个字符")
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 招聘项目名称 */
|
/** 招聘项目名称 */
|
||||||
@@ -51,6 +52,11 @@ public class CcdiStaffRecruitmentAddDTO implements Serializable {
|
|||||||
@Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
|
@Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
|
||||||
private String candName;
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘类型 */
|
||||||
|
@NotBlank(message = "招聘类型不能为空")
|
||||||
|
@EnumValid(enumClass = RecruitType.class, message = "招聘类型状态值不合法")
|
||||||
|
private String recruitType;
|
||||||
|
|
||||||
/** 应聘人员学历 */
|
/** 应聘人员学历 */
|
||||||
@NotBlank(message = "应聘人员学历不能为空")
|
@NotBlank(message = "应聘人员学历不能为空")
|
||||||
@Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
|
@Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.ruoyi.info.collection.domain.dto;
|
|||||||
|
|
||||||
import com.ruoyi.info.collection.annotation.EnumValid;
|
import com.ruoyi.info.collection.annotation.EnumValid;
|
||||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||||
|
import com.ruoyi.info.collection.enums.RecruitType;
|
||||||
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.NotNull;
|
||||||
import jakarta.validation.constraints.Pattern;
|
import jakarta.validation.constraints.Pattern;
|
||||||
@@ -23,8 +24,8 @@ public class CcdiStaffRecruitmentEditDTO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 招聘项目编号 */
|
/** 招聘记录编号 */
|
||||||
@NotNull(message = "招聘项目编号不能为空")
|
@NotNull(message = "招聘记录编号不能为空")
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 招聘项目名称 */
|
/** 招聘项目名称 */
|
||||||
@@ -46,6 +47,10 @@ public class CcdiStaffRecruitmentEditDTO implements Serializable {
|
|||||||
@Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
|
@Size(max = 20, message = "应聘人员姓名长度不能超过20个字符")
|
||||||
private String candName;
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘类型 */
|
||||||
|
@EnumValid(enumClass = RecruitType.class, message = "招聘类型状态值不合法")
|
||||||
|
private String recruitType;
|
||||||
|
|
||||||
/** 应聘人员学历 */
|
/** 应聘人员学历 */
|
||||||
@Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
|
@Size(max = 20, message = "应聘人员学历长度不能超过20个字符")
|
||||||
private String candEdu;
|
private String candEdu;
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ public class CcdiStaffRecruitmentQueryDTO implements Serializable {
|
|||||||
/** 候选人姓名(模糊查询) */
|
/** 候选人姓名(模糊查询) */
|
||||||
private String candName;
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘类型(精确查询) */
|
||||||
|
private String recruitType;
|
||||||
|
|
||||||
/** 证件号码(精确查询) */
|
/** 证件号码(精确查询) */
|
||||||
private String candId;
|
private String candId;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.excel;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库导入导出对象
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-14
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiAccountInfoExcel implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "所属人类型*", index = 0)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "证件号*", index = 1)
|
||||||
|
@ColumnWidth(24)
|
||||||
|
private String ownerId;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "账户姓名*", index = 2)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String accountName;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "账户号码*", index = 3)
|
||||||
|
@ColumnWidth(28)
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "账户类型*", index = 4)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String accountType;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "账户范围*", index = 5)
|
||||||
|
@ColumnWidth(14)
|
||||||
|
private String bankScope;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "开户机构*", index = 6)
|
||||||
|
@ColumnWidth(28)
|
||||||
|
private String openBank;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "银行代码", index = 7)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String bankCode;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "币种", index = 8)
|
||||||
|
@ColumnWidth(10)
|
||||||
|
private String currency;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "状态*", index = 9)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "生效日期*(yyyy-MM-dd)", index = 10)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String effectiveDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "失效日期(yyyy-MM-dd)", index = 11)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String invalidDate;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "是否实控账户", index = 12)
|
||||||
|
@ColumnWidth(14)
|
||||||
|
private String isActualControl;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "月均交易笔数", index = 13)
|
||||||
|
@ColumnWidth(14)
|
||||||
|
private String avgMonthTxnCount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "月均交易金额", index = 14)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String avgMonthTxnAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "频率等级", index = 15)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
private String txnFrequencyLevel;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "借方单笔最高额", index = 16)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String debitSingleMaxAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "贷方单笔最高额", index = 17)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String creditSingleMaxAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "借方日累计最高额", index = 18)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String debitDailyMaxAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "贷方日累计最高额", index = 19)
|
||||||
|
@ColumnWidth(16)
|
||||||
|
private String creditDailyMaxAmount;
|
||||||
|
|
||||||
|
@ExcelProperty(value = "风险等级", index = 20)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
private String txnRiskLevel;
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.excel;
|
||||||
|
|
||||||
|
import com.alibaba.excel.annotation.ExcelProperty;
|
||||||
|
import com.alibaba.excel.annotation.write.style.ColumnWidth;
|
||||||
|
import com.ruoyi.common.annotation.Required;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘记录历史工作经历Excel导入对象
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-20
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiStaffRecruitmentWorkExcel implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 招聘记录编号 */
|
||||||
|
@ExcelProperty(value = "招聘记录编号", index = 0)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@Required
|
||||||
|
private String recruitId;
|
||||||
|
|
||||||
|
/** 候选人姓名 */
|
||||||
|
@ExcelProperty(value = "候选人姓名", index = 1)
|
||||||
|
@ColumnWidth(15)
|
||||||
|
@Required
|
||||||
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘项目名称 */
|
||||||
|
@ExcelProperty(value = "招聘项目名称", index = 2)
|
||||||
|
@ColumnWidth(25)
|
||||||
|
@Required
|
||||||
|
private String recruitName;
|
||||||
|
|
||||||
|
/** 职位名称 */
|
||||||
|
@ExcelProperty(value = "职位名称", index = 3)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@Required
|
||||||
|
private String posName;
|
||||||
|
|
||||||
|
/** 排序号 */
|
||||||
|
@ExcelProperty(value = "排序号", index = 4)
|
||||||
|
@ColumnWidth(10)
|
||||||
|
@Required
|
||||||
|
private Integer sortOrder;
|
||||||
|
|
||||||
|
/** 工作单位 */
|
||||||
|
@ExcelProperty(value = "工作单位", index = 5)
|
||||||
|
@ColumnWidth(25)
|
||||||
|
@Required
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/** 所属部门 */
|
||||||
|
@ExcelProperty(value = "所属部门", index = 6)
|
||||||
|
@ColumnWidth(18)
|
||||||
|
private String departmentName;
|
||||||
|
|
||||||
|
/** 岗位 */
|
||||||
|
@ExcelProperty(value = "岗位", index = 7)
|
||||||
|
@ColumnWidth(20)
|
||||||
|
@Required
|
||||||
|
private String positionName;
|
||||||
|
|
||||||
|
/** 入职年月 */
|
||||||
|
@ExcelProperty(value = "入职年月", index = 8)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
@Required
|
||||||
|
private String jobStartMonth;
|
||||||
|
|
||||||
|
/** 离职年月 */
|
||||||
|
@ExcelProperty(value = "离职年月", index = 9)
|
||||||
|
@ColumnWidth(12)
|
||||||
|
private String jobEndMonth;
|
||||||
|
|
||||||
|
/** 离职原因 */
|
||||||
|
@ExcelProperty(value = "离职原因", index = 10)
|
||||||
|
@ColumnWidth(30)
|
||||||
|
private String departureReason;
|
||||||
|
|
||||||
|
/** 工作内容 */
|
||||||
|
@ExcelProperty(value = "工作内容", index = 11)
|
||||||
|
@ColumnWidth(35)
|
||||||
|
private String workContent;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
@ExcelProperty(value = "备注", index = 12)
|
||||||
|
@ColumnWidth(25)
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库导入失败记录
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-14
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "账户库导入失败记录")
|
||||||
|
public class AccountInfoImportFailureVO {
|
||||||
|
|
||||||
|
@Schema(description = "行号")
|
||||||
|
private Integer rowNum;
|
||||||
|
|
||||||
|
@Schema(description = "所属人类型")
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
@Schema(description = "证件号")
|
||||||
|
private String ownerId;
|
||||||
|
|
||||||
|
@Schema(description = "账户号码")
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
@Schema(description = "错误信息")
|
||||||
|
private String errorMessage;
|
||||||
|
}
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库VO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "账户库信息")
|
||||||
|
public class CcdiAccountInfoVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@Schema(description = "主键ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 所属人类型 */
|
||||||
|
@Schema(description = "所属人类型")
|
||||||
|
private String ownerType;
|
||||||
|
|
||||||
|
/** 所属人标识 */
|
||||||
|
@Schema(description = "所属人标识")
|
||||||
|
private String ownerId;
|
||||||
|
|
||||||
|
/** 员工工号 */
|
||||||
|
@Schema(description = "员工工号")
|
||||||
|
private Long staffId;
|
||||||
|
|
||||||
|
/** 员工姓名 */
|
||||||
|
@Schema(description = "员工姓名")
|
||||||
|
private String staffName;
|
||||||
|
|
||||||
|
/** 关系人ID */
|
||||||
|
@Schema(description = "关系人ID")
|
||||||
|
private Long relationId;
|
||||||
|
|
||||||
|
/** 关系类型 */
|
||||||
|
@Schema(description = "关系类型")
|
||||||
|
private String relationType;
|
||||||
|
|
||||||
|
/** 关系人姓名 */
|
||||||
|
@Schema(description = "关系人姓名")
|
||||||
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关系人证件号 */
|
||||||
|
@Schema(description = "关系人证件号")
|
||||||
|
private String relationCertNo;
|
||||||
|
|
||||||
|
/** 账户号码 */
|
||||||
|
@Schema(description = "账户号码")
|
||||||
|
private String accountNo;
|
||||||
|
|
||||||
|
/** 账户类型 */
|
||||||
|
@Schema(description = "账户类型")
|
||||||
|
private String accountType;
|
||||||
|
|
||||||
|
/** 账户范围 */
|
||||||
|
@Schema(description = "账户范围")
|
||||||
|
private String bankScope;
|
||||||
|
|
||||||
|
/** 账户姓名 */
|
||||||
|
@Schema(description = "账户姓名")
|
||||||
|
private String accountName;
|
||||||
|
|
||||||
|
/** 开户机构 */
|
||||||
|
@Schema(description = "开户机构")
|
||||||
|
private String openBank;
|
||||||
|
|
||||||
|
/** 银行代码 */
|
||||||
|
@Schema(description = "银行代码")
|
||||||
|
private String bankCode;
|
||||||
|
|
||||||
|
/** 币种 */
|
||||||
|
@Schema(description = "币种")
|
||||||
|
private String currency;
|
||||||
|
|
||||||
|
/** 状态 */
|
||||||
|
@Schema(description = "状态")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
/** 生效日期 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@Schema(description = "生效日期")
|
||||||
|
private Date effectiveDate;
|
||||||
|
|
||||||
|
/** 失效日期 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||||
|
@Schema(description = "失效日期")
|
||||||
|
private Date invalidDate;
|
||||||
|
|
||||||
|
/** 是否实控账户 */
|
||||||
|
@Schema(description = "是否实控账户")
|
||||||
|
private Integer isActualControl;
|
||||||
|
|
||||||
|
/** 月均交易笔数 */
|
||||||
|
@Schema(description = "月均交易笔数")
|
||||||
|
private Integer avgMonthTxnCount;
|
||||||
|
|
||||||
|
/** 月均交易金额 */
|
||||||
|
@Schema(description = "月均交易金额")
|
||||||
|
private BigDecimal avgMonthTxnAmount;
|
||||||
|
|
||||||
|
/** 频率等级 */
|
||||||
|
@Schema(description = "频率等级")
|
||||||
|
private String txnFrequencyLevel;
|
||||||
|
|
||||||
|
/** 借方单笔最高额 */
|
||||||
|
@Schema(description = "借方单笔最高额")
|
||||||
|
private BigDecimal debitSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方单笔最高额 */
|
||||||
|
@Schema(description = "贷方单笔最高额")
|
||||||
|
private BigDecimal creditSingleMaxAmount;
|
||||||
|
|
||||||
|
/** 借方日累计最高额 */
|
||||||
|
@Schema(description = "借方日累计最高额")
|
||||||
|
private BigDecimal debitDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 贷方日累计最高额 */
|
||||||
|
@Schema(description = "贷方日累计最高额")
|
||||||
|
private BigDecimal creditDailyMaxAmount;
|
||||||
|
|
||||||
|
/** 风险等级 */
|
||||||
|
@Schema(description = "风险等级")
|
||||||
|
private String txnRiskLevel;
|
||||||
|
|
||||||
|
/** 创建者 */
|
||||||
|
@Schema(description = "创建者")
|
||||||
|
private String createBy;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/** 更新者 */
|
||||||
|
@Schema(description = "更新者")
|
||||||
|
private String updateBy;
|
||||||
|
|
||||||
|
/** 更新时间 */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@Schema(description = "更新时间")
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库关系人下拉VO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Schema(description = "账户库关系人下拉选项")
|
||||||
|
public class CcdiAccountRelationOptionVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 关系人ID */
|
||||||
|
@Schema(description = "关系人ID")
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 关系人姓名 */
|
||||||
|
@Schema(description = "关系人姓名")
|
||||||
|
private String relationName;
|
||||||
|
|
||||||
|
/** 关系类型 */
|
||||||
|
@Schema(description = "关系类型")
|
||||||
|
private String relationType;
|
||||||
|
|
||||||
|
/** 关系人证件号 */
|
||||||
|
@Schema(description = "关系人证件号")
|
||||||
|
private String relationCertNo;
|
||||||
|
}
|
||||||
@@ -26,6 +26,11 @@ public class CcdiBaseStaffOptionVO {
|
|||||||
*/
|
*/
|
||||||
private Long deptId;
|
private Long deptId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 身份证号
|
||||||
|
*/
|
||||||
|
private String idCard;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 部门名称
|
* 部门名称
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import lombok.Data;
|
|||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 员工招聘信息VO
|
* 员工招聘信息VO
|
||||||
@@ -18,7 +19,7 @@ public class CcdiStaffRecruitmentVO implements Serializable {
|
|||||||
@Serial
|
@Serial
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
/** 招聘项目编号 */
|
/** 招聘记录编号 */
|
||||||
private String recruitId;
|
private String recruitId;
|
||||||
|
|
||||||
/** 招聘项目名称 */
|
/** 招聘项目名称 */
|
||||||
@@ -36,6 +37,9 @@ public class CcdiStaffRecruitmentVO implements Serializable {
|
|||||||
/** 应聘人员姓名 */
|
/** 应聘人员姓名 */
|
||||||
private String candName;
|
private String candName;
|
||||||
|
|
||||||
|
/** 招聘类型 */
|
||||||
|
private String recruitType;
|
||||||
|
|
||||||
/** 应聘人员学历 */
|
/** 应聘人员学历 */
|
||||||
private String candEdu;
|
private String candEdu;
|
||||||
|
|
||||||
@@ -57,6 +61,12 @@ public class CcdiStaffRecruitmentVO implements Serializable {
|
|||||||
/** 录用情况描述 */
|
/** 录用情况描述 */
|
||||||
private String admitStatusDesc;
|
private String admitStatusDesc;
|
||||||
|
|
||||||
|
/** 历史工作经历条数 */
|
||||||
|
private Long workExperienceCount;
|
||||||
|
|
||||||
|
/** 历史工作经历列表 */
|
||||||
|
private List<CcdiStaffRecruitmentWorkVO> workExperienceList;
|
||||||
|
|
||||||
/** 面试官1姓名 */
|
/** 面试官1姓名 */
|
||||||
private String interviewerName1;
|
private String interviewerName1;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
package com.ruoyi.info.collection.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘记录历史工作经历VO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-15
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiStaffRecruitmentWorkVO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 排序号 */
|
||||||
|
private Integer sortOrder;
|
||||||
|
|
||||||
|
/** 工作单位 */
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
/** 所属部门 */
|
||||||
|
private String departmentName;
|
||||||
|
|
||||||
|
/** 岗位名称 */
|
||||||
|
private String positionName;
|
||||||
|
|
||||||
|
/** 入职年月 */
|
||||||
|
private String jobStartMonth;
|
||||||
|
|
||||||
|
/** 离职年月 */
|
||||||
|
private String jobEndMonth;
|
||||||
|
|
||||||
|
/** 离职原因 */
|
||||||
|
private String departureReason;
|
||||||
|
|
||||||
|
/** 主要工作内容 */
|
||||||
|
private String workContent;
|
||||||
|
|
||||||
|
/** 备注 */
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@@ -19,6 +19,9 @@ public class RecruitmentImportFailureVO {
|
|||||||
@Schema(description = "招聘项目名称")
|
@Schema(description = "招聘项目名称")
|
||||||
private String recruitName;
|
private String recruitName;
|
||||||
|
|
||||||
|
@Schema(description = "职位名称")
|
||||||
|
private String posName;
|
||||||
|
|
||||||
@Schema(description = "应聘人员姓名")
|
@Schema(description = "应聘人员姓名")
|
||||||
private String candName;
|
private String candName;
|
||||||
|
|
||||||
@@ -28,6 +31,12 @@ public class RecruitmentImportFailureVO {
|
|||||||
@Schema(description = "录用情况")
|
@Schema(description = "录用情况")
|
||||||
private String admitStatus;
|
private String admitStatus;
|
||||||
|
|
||||||
|
@Schema(description = "工作单位")
|
||||||
|
private String companyName;
|
||||||
|
|
||||||
|
@Schema(description = "岗位")
|
||||||
|
private String positionName;
|
||||||
|
|
||||||
@Schema(description = "错误信息")
|
@Schema(description = "错误信息")
|
||||||
private String errorMessage;
|
private String errorMessage;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package com.ruoyi.info.collection.enums;
|
||||||
|
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘类型枚举
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public enum RecruitType {
|
||||||
|
|
||||||
|
/** 社招 */
|
||||||
|
SOCIAL("SOCIAL", "社招"),
|
||||||
|
|
||||||
|
/** 校招 */
|
||||||
|
CAMPUS("CAMPUS", "校招");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
private final String desc;
|
||||||
|
|
||||||
|
RecruitType(String code, String desc) {
|
||||||
|
this.code = code;
|
||||||
|
this.desc = desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDesc() {
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDescByCode(String code) {
|
||||||
|
for (RecruitType type : values()) {
|
||||||
|
if (type.code.equals(code)) {
|
||||||
|
return type.desc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String inferCode(String recruitName) {
|
||||||
|
if (StringUtils.isNotEmpty(recruitName) && recruitName.contains("校园")) {
|
||||||
|
return CAMPUS.code;
|
||||||
|
}
|
||||||
|
return SOCIAL.code;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,26 +11,26 @@ public enum RelationType {
|
|||||||
/** 配偶 */
|
/** 配偶 */
|
||||||
SPOUSE("配偶", "配偶"),
|
SPOUSE("配偶", "配偶"),
|
||||||
|
|
||||||
/** 父子 */
|
/** 父亲 */
|
||||||
FATHER_SON("父子", "父子"),
|
FATHER("父亲", "父亲"),
|
||||||
|
|
||||||
/** 母女 */
|
/** 母亲 */
|
||||||
MOTHER_DAUGHTER("母女", "母女"),
|
MOTHER("母亲", "母亲"),
|
||||||
|
|
||||||
/** 兄弟 */
|
/** 子女 */
|
||||||
BROTHER("兄弟", "兄弟"),
|
CHILDREN("子女", "子女"),
|
||||||
|
|
||||||
/** 姐妹 */
|
/** 兄弟姐妹 */
|
||||||
SISTER("姐妹", "姐妹"),
|
SIBLINGS("兄弟姐妹", "兄弟姐妹"),
|
||||||
|
|
||||||
/** 亲属 */
|
|
||||||
RELATIVE("亲属", "亲属"),
|
|
||||||
|
|
||||||
/** 朋友 */
|
/** 朋友 */
|
||||||
FRIEND("朋友", "朋友"),
|
FRIEND("朋友", "朋友"),
|
||||||
|
|
||||||
/** 同事 */
|
/** 同事 */
|
||||||
COLLEAGUE("同事", "同事");
|
COLLEAGUE("同事", "同事"),
|
||||||
|
|
||||||
|
/** 其他 */
|
||||||
|
OTHER("其他", "其他");
|
||||||
|
|
||||||
private final String code;
|
private final String code;
|
||||||
private final String desc;
|
private final String desc;
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package com.ruoyi.info.collection.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiAccountInfo;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountInfoVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountRelationOptionVO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库数据层
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
public interface CcdiAccountInfoMapper extends BaseMapper<CcdiAccountInfo> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询账户库
|
||||||
|
*
|
||||||
|
* @param page 分页对象
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 账户库分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiAccountInfoVO> selectAccountInfoPage(@Param("page") Page<CcdiAccountInfoVO> page,
|
||||||
|
@Param("query") CcdiAccountInfoQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询账户库详情
|
||||||
|
*
|
||||||
|
* @param id 主键ID
|
||||||
|
* @return 账户库详情
|
||||||
|
*/
|
||||||
|
CcdiAccountInfoVO selectAccountInfoById(@Param("id") Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出账户库列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
List<CcdiAccountInfoVO> selectAccountInfoListForExport(@Param("query") CcdiAccountInfoQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询关系人下拉选项
|
||||||
|
*
|
||||||
|
* @param staffId 员工工号
|
||||||
|
* @return 关系人下拉
|
||||||
|
*/
|
||||||
|
List<CcdiAccountRelationOptionVO> selectRelationOptionsByStaffId(@Param("staffId") Long staffId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.ruoyi.info.collection.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiAccountResult;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户分析结果数据层
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
public interface CcdiAccountResultMapper extends BaseMapper<CcdiAccountResult> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.ruoyi.info.collection.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiStaffRecruitmentWork;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 招聘记录历史工作经历 数据层
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-15
|
||||||
|
*/
|
||||||
|
public interface CcdiStaffRecruitmentWorkMapper extends BaseMapper<CcdiStaffRecruitmentWork> {
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
package com.ruoyi.info.collection.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoAddDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoEditDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiAccountInfoExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.AccountInfoImportFailureVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountInfoVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountRelationOptionVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.ImportResult;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库服务层
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
public interface ICcdiAccountInfoService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询账户库
|
||||||
|
*
|
||||||
|
* @param page 分页对象
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiAccountInfoVO> selectAccountInfoPage(Page<CcdiAccountInfoVO> page, CcdiAccountInfoQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询账户库详情
|
||||||
|
*
|
||||||
|
* @param id 主键ID
|
||||||
|
* @return 账户库详情
|
||||||
|
*/
|
||||||
|
CcdiAccountInfoVO selectAccountInfoById(Long id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增账户
|
||||||
|
*
|
||||||
|
* @param addDTO 新增DTO
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int insertAccountInfo(CcdiAccountInfoAddDTO addDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改账户
|
||||||
|
*
|
||||||
|
* @param editDTO 编辑DTO
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int updateAccountInfo(CcdiAccountInfoEditDTO editDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除账户
|
||||||
|
*
|
||||||
|
* @param ids 主键ID数组
|
||||||
|
* @return 影响行数
|
||||||
|
*/
|
||||||
|
int deleteAccountInfoByIds(Long[] ids);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询关系人下拉
|
||||||
|
*
|
||||||
|
* @param staffId 员工工号
|
||||||
|
* @return 下拉列表
|
||||||
|
*/
|
||||||
|
List<CcdiAccountRelationOptionVO> selectRelationOptionsByStaffId(Long staffId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出账户库列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
List<CcdiAccountInfoExcel> selectAccountInfoListForExport(CcdiAccountInfoQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入账户库信息
|
||||||
|
*
|
||||||
|
* @param excelList Excel数据
|
||||||
|
* @param updateSupport 是否更新已存在账户
|
||||||
|
* @return 导入结果
|
||||||
|
*/
|
||||||
|
ImportResult importAccountInfo(List<CcdiAccountInfoExcel> excelList, boolean updateSupport);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取导入失败记录
|
||||||
|
*
|
||||||
|
* @return 失败记录
|
||||||
|
*/
|
||||||
|
List<AccountInfoImportFailureVO> getLatestImportFailures();
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.ruoyi.info.collection.service;
|
package com.ruoyi.info.collection.service;
|
||||||
|
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentWorkExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.RecruitmentImportFailureVO;
|
import com.ruoyi.info.collection.domain.vo.RecruitmentImportFailureVO;
|
||||||
|
|
||||||
@@ -25,6 +26,17 @@ public interface ICcdiStaffRecruitmentImportService {
|
|||||||
String taskId,
|
String taskId,
|
||||||
String userName);
|
String userName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 异步导入招聘记录历史工作经历数据
|
||||||
|
*
|
||||||
|
* @param excelList Excel数据列表
|
||||||
|
* @param taskId 任务ID
|
||||||
|
* @param userName 用户名
|
||||||
|
*/
|
||||||
|
void importRecruitmentWorkAsync(List<CcdiStaffRecruitmentWorkExcel> excelList,
|
||||||
|
String taskId,
|
||||||
|
String userName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询导入状态
|
* 查询导入状态
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
|||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentWorkExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -81,4 +82,12 @@ public interface ICcdiStaffRecruitmentService {
|
|||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
String importRecruitment(List<CcdiStaffRecruitmentExcel> excelList);
|
String importRecruitment(List<CcdiStaffRecruitmentExcel> excelList);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入招聘记录历史工作经历数据(异步)
|
||||||
|
*
|
||||||
|
* @param excelList Excel实体列表
|
||||||
|
* @return 任务ID
|
||||||
|
*/
|
||||||
|
String importRecruitmentWork(List<CcdiStaffRecruitmentWorkExcel> excelList);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,618 @@
|
|||||||
|
package com.ruoyi.info.collection.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.common.utils.StringUtils;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiAccountInfo;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiAccountResult;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiBaseStaff;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiStaffFmyRelation;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoAddDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoEditDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.dto.CcdiAccountInfoQueryDTO;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiAccountInfoExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.AccountInfoImportFailureVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountInfoVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiAccountRelationOptionVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.ImportResult;
|
||||||
|
import com.ruoyi.info.collection.mapper.CcdiAccountInfoMapper;
|
||||||
|
import com.ruoyi.info.collection.mapper.CcdiAccountResultMapper;
|
||||||
|
import com.ruoyi.info.collection.mapper.CcdiBaseStaffMapper;
|
||||||
|
import com.ruoyi.info.collection.mapper.CcdiStaffFmyRelationMapper;
|
||||||
|
import com.ruoyi.info.collection.service.ICcdiAccountInfoService;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账户库服务实现
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2026-04-13
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class CcdiAccountInfoServiceImpl implements ICcdiAccountInfoService {
|
||||||
|
|
||||||
|
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
|
||||||
|
private static final Set<String> OWNER_TYPES = Set.of("EMPLOYEE", "RELATION", "INTERMEDIARY", "EXTERNAL");
|
||||||
|
private static final Set<String> ACCOUNT_TYPES = Set.of("BANK", "SECURITIES", "PAYMENT", "OTHER");
|
||||||
|
private static final Set<String> BANK_SCOPES = Set.of("INTERNAL", "EXTERNAL");
|
||||||
|
private static final Set<String> LEVELS = Set.of("LOW", "MEDIUM", "HIGH");
|
||||||
|
private final List<AccountInfoImportFailureVO> latestImportFailures = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiAccountInfoMapper accountInfoMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiAccountResultMapper accountResultMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiBaseStaffMapper baseStaffMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiStaffFmyRelationMapper staffFmyRelationMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<CcdiAccountInfoVO> selectAccountInfoPage(Page<CcdiAccountInfoVO> page, CcdiAccountInfoQueryDTO queryDTO) {
|
||||||
|
return accountInfoMapper.selectAccountInfoPage(page, queryDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CcdiAccountInfoVO selectAccountInfoById(Long id) {
|
||||||
|
return accountInfoMapper.selectAccountInfoById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public int insertAccountInfo(CcdiAccountInfoAddDTO addDTO) {
|
||||||
|
normalizeAddDto(addDTO);
|
||||||
|
validateDto(addDTO.getOwnerType(), addDTO.getOwnerId(), addDTO.getAccountType(), addDTO.getBankScope(),
|
||||||
|
addDTO.getStatus(), addDTO.getEffectiveDate(), addDTO.getInvalidDate(), addDTO.getTxnFrequencyLevel(),
|
||||||
|
addDTO.getTxnRiskLevel(), addDTO.getAvgMonthTxnAmount(), addDTO.getDebitSingleMaxAmount(),
|
||||||
|
addDTO.getCreditSingleMaxAmount(), addDTO.getDebitDailyMaxAmount(), addDTO.getCreditDailyMaxAmount());
|
||||||
|
validateDuplicateAccountNo(addDTO.getAccountNo(), null);
|
||||||
|
|
||||||
|
CcdiAccountInfo accountInfo = new CcdiAccountInfo();
|
||||||
|
BeanUtils.copyProperties(addDTO, accountInfo);
|
||||||
|
int result = accountInfoMapper.insert(accountInfo);
|
||||||
|
syncAccountResult(accountInfo.getBankScope(), null, accountInfo.getAccountNo(), addDTO);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public int updateAccountInfo(CcdiAccountInfoEditDTO editDTO) {
|
||||||
|
normalizeEditDto(editDTO);
|
||||||
|
validateDto(editDTO.getOwnerType(), editDTO.getOwnerId(), editDTO.getAccountType(), editDTO.getBankScope(),
|
||||||
|
editDTO.getStatus(), editDTO.getEffectiveDate(), editDTO.getInvalidDate(), editDTO.getTxnFrequencyLevel(),
|
||||||
|
editDTO.getTxnRiskLevel(), editDTO.getAvgMonthTxnAmount(), editDTO.getDebitSingleMaxAmount(),
|
||||||
|
editDTO.getCreditSingleMaxAmount(), editDTO.getDebitDailyMaxAmount(), editDTO.getCreditDailyMaxAmount());
|
||||||
|
|
||||||
|
CcdiAccountInfo existing = accountInfoMapper.selectById(editDTO.getId());
|
||||||
|
if (existing == null) {
|
||||||
|
throw new RuntimeException("账户不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
validateDuplicateAccountNo(editDTO.getAccountNo(), editDTO.getId());
|
||||||
|
|
||||||
|
CcdiAccountInfo accountInfo = new CcdiAccountInfo();
|
||||||
|
BeanUtils.copyProperties(editDTO, accountInfo);
|
||||||
|
int result = accountInfoMapper.updateById(accountInfo);
|
||||||
|
syncAccountResult(accountInfo.getBankScope(), existing, accountInfo.getAccountNo(), editDTO);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public int deleteAccountInfoByIds(Long[] ids) {
|
||||||
|
List<CcdiAccountInfo> accountList = accountInfoMapper.selectBatchIds(Arrays.asList(ids));
|
||||||
|
if (!accountList.isEmpty()) {
|
||||||
|
List<String> accountNos = accountList.stream()
|
||||||
|
.map(CcdiAccountInfo::getAccountNo)
|
||||||
|
.filter(StringUtils::isNotEmpty)
|
||||||
|
.toList();
|
||||||
|
if (!accountNos.isEmpty()) {
|
||||||
|
LambdaQueryWrapper<CcdiAccountResult> resultWrapper = new LambdaQueryWrapper<>();
|
||||||
|
resultWrapper.in(CcdiAccountResult::getAccountNo, accountNos);
|
||||||
|
accountResultMapper.delete(resultWrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accountInfoMapper.deleteBatchIds(Arrays.asList(ids));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CcdiAccountRelationOptionVO> selectRelationOptionsByStaffId(Long staffId) {
|
||||||
|
if (staffId == null) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
return accountInfoMapper.selectRelationOptionsByStaffId(staffId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CcdiAccountInfoExcel> selectAccountInfoListForExport(CcdiAccountInfoQueryDTO queryDTO) {
|
||||||
|
return accountInfoMapper.selectAccountInfoListForExport(queryDTO).stream().map(this::toExcel).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public ImportResult importAccountInfo(List<CcdiAccountInfoExcel> excelList, boolean updateSupport) {
|
||||||
|
latestImportFailures.clear();
|
||||||
|
ImportResult result = new ImportResult();
|
||||||
|
result.setTotalCount(excelList.size());
|
||||||
|
|
||||||
|
int successCount = 0;
|
||||||
|
int rowNum = 1;
|
||||||
|
for (CcdiAccountInfoExcel excel : excelList) {
|
||||||
|
rowNum++;
|
||||||
|
try {
|
||||||
|
importSingleRow(excel, updateSupport);
|
||||||
|
successCount++;
|
||||||
|
} catch (Exception e) {
|
||||||
|
latestImportFailures.add(buildFailure(rowNum, excel, e.getMessage()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.setSuccessCount(successCount);
|
||||||
|
result.setFailureCount(latestImportFailures.size());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<AccountInfoImportFailureVO> getLatestImportFailures() {
|
||||||
|
return new ArrayList<>(latestImportFailures);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateDto(String ownerType, String ownerId, String accountType, String bankScope, Integer status,
|
||||||
|
java.util.Date effectiveDate, java.util.Date invalidDate, String txnFrequencyLevel,
|
||||||
|
String txnRiskLevel, BigDecimal avgMonthTxnAmount, BigDecimal debitSingleMaxAmount,
|
||||||
|
BigDecimal creditSingleMaxAmount, BigDecimal debitDailyMaxAmount,
|
||||||
|
BigDecimal creditDailyMaxAmount) {
|
||||||
|
if (!OWNER_TYPES.contains(ownerType)) {
|
||||||
|
throw new RuntimeException("所属人类型不合法");
|
||||||
|
}
|
||||||
|
if (!ACCOUNT_TYPES.contains(accountType)) {
|
||||||
|
throw new RuntimeException("账户类型不合法");
|
||||||
|
}
|
||||||
|
if (!BANK_SCOPES.contains(bankScope)) {
|
||||||
|
throw new RuntimeException("账户范围不合法");
|
||||||
|
}
|
||||||
|
if (status == null || (status != 1 && status != 2)) {
|
||||||
|
throw new RuntimeException("状态不合法");
|
||||||
|
}
|
||||||
|
if (effectiveDate == null) {
|
||||||
|
throw new RuntimeException("生效日期不能为空");
|
||||||
|
}
|
||||||
|
if (invalidDate != null && invalidDate.before(effectiveDate)) {
|
||||||
|
throw new RuntimeException("失效日期不能早于生效日期");
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotEmpty(txnFrequencyLevel) && !LEVELS.contains(txnFrequencyLevel)) {
|
||||||
|
throw new RuntimeException("频率等级不合法");
|
||||||
|
}
|
||||||
|
if (StringUtils.isNotEmpty(txnRiskLevel) && !LEVELS.contains(txnRiskLevel)) {
|
||||||
|
throw new RuntimeException("风险等级不合法");
|
||||||
|
}
|
||||||
|
validateAmount(avgMonthTxnAmount, "月均交易金额");
|
||||||
|
validateAmount(debitSingleMaxAmount, "借方单笔最高额");
|
||||||
|
validateAmount(creditSingleMaxAmount, "贷方单笔最高额");
|
||||||
|
validateAmount(debitDailyMaxAmount, "借方日累计最高额");
|
||||||
|
validateAmount(creditDailyMaxAmount, "贷方日累计最高额");
|
||||||
|
validateOwner(ownerType, ownerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateOwner(String ownerType, String ownerId) {
|
||||||
|
if (StringUtils.isEmpty(ownerId)) {
|
||||||
|
if ("EXTERNAL".equals(ownerType) || "INTERMEDIARY".equals(ownerType)) {
|
||||||
|
throw new RuntimeException("证件号不能为空");
|
||||||
|
}
|
||||||
|
throw new RuntimeException("所属人不能为空");
|
||||||
|
}
|
||||||
|
if ("EXTERNAL".equals(ownerType) || "INTERMEDIARY".equals(ownerType)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ("EMPLOYEE".equals(ownerType)) {
|
||||||
|
LambdaQueryWrapper<CcdiBaseStaff> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CcdiBaseStaff::getIdCard, ownerId);
|
||||||
|
CcdiBaseStaff staff = baseStaffMapper.selectOne(wrapper);
|
||||||
|
if (staff == null) {
|
||||||
|
throw new RuntimeException("员工不存在");
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<CcdiStaffFmyRelation> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CcdiStaffFmyRelation::getRelationCertNo, ownerId);
|
||||||
|
CcdiStaffFmyRelation relation = staffFmyRelationMapper.selectOne(wrapper);
|
||||||
|
if (relation == null) {
|
||||||
|
throw new RuntimeException("关系人不存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateDuplicateAccountNo(String accountNo, Long excludeId) {
|
||||||
|
LambdaQueryWrapper<CcdiAccountInfo> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CcdiAccountInfo::getAccountNo, accountNo);
|
||||||
|
if (excludeId != null) {
|
||||||
|
wrapper.ne(CcdiAccountInfo::getId, excludeId);
|
||||||
|
}
|
||||||
|
if (accountInfoMapper.selectCount(wrapper) > 0) {
|
||||||
|
throw new RuntimeException("账户号码已存在");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void syncAccountResult(String newBankScope, CcdiAccountInfo existing, String accountNo, Object dto) {
|
||||||
|
String oldBankScope = existing == null ? null : existing.getBankScope();
|
||||||
|
String oldAccountNo = existing == null ? null : existing.getAccountNo();
|
||||||
|
|
||||||
|
if (existing != null && "EXTERNAL".equals(oldBankScope)
|
||||||
|
&& (!"EXTERNAL".equals(newBankScope) || !StringUtils.equals(oldAccountNo, accountNo))) {
|
||||||
|
LambdaQueryWrapper<CcdiAccountResult> deleteWrapper = new LambdaQueryWrapper<>();
|
||||||
|
deleteWrapper.eq(CcdiAccountResult::getAccountNo, oldAccountNo);
|
||||||
|
accountResultMapper.delete(deleteWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!"EXTERNAL".equals(newBankScope)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LambdaQueryWrapper<CcdiAccountResult> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CcdiAccountResult::getAccountNo, accountNo);
|
||||||
|
CcdiAccountResult existingResult = accountResultMapper.selectOne(wrapper);
|
||||||
|
|
||||||
|
CcdiAccountResult accountResult = new CcdiAccountResult();
|
||||||
|
BeanUtils.copyProperties(dto, accountResult);
|
||||||
|
accountResult.setAccountNo(accountNo);
|
||||||
|
if (accountResult.getIsActualControl() == null) {
|
||||||
|
accountResult.setIsActualControl(1);
|
||||||
|
}
|
||||||
|
if (accountResult.getAvgMonthTxnCount() == null) {
|
||||||
|
accountResult.setAvgMonthTxnCount(0);
|
||||||
|
}
|
||||||
|
if (accountResult.getAvgMonthTxnAmount() == null) {
|
||||||
|
accountResult.setAvgMonthTxnAmount(BigDecimal.ZERO);
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(accountResult.getTxnFrequencyLevel())) {
|
||||||
|
accountResult.setTxnFrequencyLevel("MEDIUM");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(accountResult.getTxnRiskLevel())) {
|
||||||
|
accountResult.setTxnRiskLevel("LOW");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingResult == null) {
|
||||||
|
accountResultMapper.insert(accountResult);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
accountResult.setResultId(existingResult.getResultId());
|
||||||
|
accountResultMapper.updateById(accountResult);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateAmount(BigDecimal amount, String fieldLabel) {
|
||||||
|
if (amount == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (amount.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
|
throw new RuntimeException(fieldLabel + "不能为负数");
|
||||||
|
}
|
||||||
|
if (amount.scale() > 2) {
|
||||||
|
throw new RuntimeException(fieldLabel + "最多保留2位小数");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void normalizeAddDto(CcdiAccountInfoAddDTO addDTO) {
|
||||||
|
addDTO.setOwnerType(toUpper(addDTO.getOwnerType()));
|
||||||
|
addDTO.setAccountType(toUpper(addDTO.getAccountType()));
|
||||||
|
addDTO.setBankScope(toUpper(addDTO.getBankScope()));
|
||||||
|
addDTO.setCurrency(normalizeCurrency(addDTO.getCurrency()));
|
||||||
|
addDTO.setTxnFrequencyLevel(toUpper(addDTO.getTxnFrequencyLevel()));
|
||||||
|
addDTO.setTxnRiskLevel(toUpper(addDTO.getTxnRiskLevel()));
|
||||||
|
addDTO.setOwnerId(normalizeOwnerId(addDTO.getOwnerId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void normalizeEditDto(CcdiAccountInfoEditDTO editDTO) {
|
||||||
|
editDTO.setOwnerType(toUpper(editDTO.getOwnerType()));
|
||||||
|
editDTO.setAccountType(toUpper(editDTO.getAccountType()));
|
||||||
|
editDTO.setBankScope(toUpper(editDTO.getBankScope()));
|
||||||
|
editDTO.setCurrency(normalizeCurrency(editDTO.getCurrency()));
|
||||||
|
editDTO.setTxnFrequencyLevel(toUpper(editDTO.getTxnFrequencyLevel()));
|
||||||
|
editDTO.setTxnRiskLevel(toUpper(editDTO.getTxnRiskLevel()));
|
||||||
|
editDTO.setOwnerId(normalizeOwnerId(editDTO.getOwnerId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String normalizeCurrency(String currency) {
|
||||||
|
if (StringUtils.isEmpty(currency)) {
|
||||||
|
return "CNY";
|
||||||
|
}
|
||||||
|
return currency.trim().toUpperCase(Locale.ROOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String toUpper(String value) {
|
||||||
|
if (StringUtils.isEmpty(value)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return value.trim().toUpperCase(Locale.ROOT);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String normalizeOwnerId(String ownerId) {
|
||||||
|
if (StringUtils.isEmpty(ownerId)) {
|
||||||
|
return ownerId;
|
||||||
|
}
|
||||||
|
return ownerId.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiAccountInfoExcel toExcel(CcdiAccountInfoVO vo) {
|
||||||
|
CcdiAccountInfoExcel excel = new CcdiAccountInfoExcel();
|
||||||
|
excel.setOwnerType(ownerTypeLabel(vo.getOwnerType()));
|
||||||
|
excel.setOwnerId(vo.getOwnerId());
|
||||||
|
excel.setAccountName(vo.getAccountName());
|
||||||
|
excel.setAccountNo(vo.getAccountNo());
|
||||||
|
excel.setAccountType(accountTypeLabel(vo.getAccountType()));
|
||||||
|
excel.setBankScope(bankScopeLabel(vo.getBankScope()));
|
||||||
|
excel.setOpenBank(vo.getOpenBank());
|
||||||
|
excel.setBankCode(vo.getBankCode());
|
||||||
|
excel.setCurrency(vo.getCurrency());
|
||||||
|
excel.setStatus(vo.getStatus() == null ? "" : (vo.getStatus() == 1 ? "正常" : "已销户"));
|
||||||
|
excel.setEffectiveDate(formatDate(vo.getEffectiveDate()));
|
||||||
|
excel.setInvalidDate(formatDate(vo.getInvalidDate()));
|
||||||
|
excel.setIsActualControl(formatYesNo(vo.getIsActualControl()));
|
||||||
|
excel.setAvgMonthTxnCount(vo.getAvgMonthTxnCount() == null ? "" : String.valueOf(vo.getAvgMonthTxnCount()));
|
||||||
|
excel.setAvgMonthTxnAmount(formatNumber(vo.getAvgMonthTxnAmount()));
|
||||||
|
excel.setTxnFrequencyLevel(StringUtils.isEmpty(vo.getTxnFrequencyLevel()) ? "" : vo.getTxnFrequencyLevel());
|
||||||
|
excel.setDebitSingleMaxAmount(formatNumber(vo.getDebitSingleMaxAmount()));
|
||||||
|
excel.setCreditSingleMaxAmount(formatNumber(vo.getCreditSingleMaxAmount()));
|
||||||
|
excel.setDebitDailyMaxAmount(formatNumber(vo.getDebitDailyMaxAmount()));
|
||||||
|
excel.setCreditDailyMaxAmount(formatNumber(vo.getCreditDailyMaxAmount()));
|
||||||
|
excel.setTxnRiskLevel(StringUtils.isEmpty(vo.getTxnRiskLevel()) ? "" : vo.getTxnRiskLevel());
|
||||||
|
return excel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void importSingleRow(CcdiAccountInfoExcel excel, boolean updateSupport) {
|
||||||
|
CcdiAccountInfo existing = findByAccountNo(excel.getAccountNo());
|
||||||
|
if (existing != null && !updateSupport) {
|
||||||
|
throw new RuntimeException("账户号码已存在,请勾选更新已存在数据后重试");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existing != null) {
|
||||||
|
CcdiAccountInfoEditDTO editDTO = toEditDto(existing.getId(), excel);
|
||||||
|
updateAccountInfo(editDTO);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
CcdiAccountInfoAddDTO addDTO = toAddDto(excel);
|
||||||
|
insertAccountInfo(addDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiAccountInfoAddDTO toAddDto(CcdiAccountInfoExcel excel) {
|
||||||
|
CcdiAccountInfoAddDTO dto = new CcdiAccountInfoAddDTO();
|
||||||
|
dto.setOwnerType(parseOwnerType(excel.getOwnerType()));
|
||||||
|
dto.setOwnerId(normalizeOwnerId(excel.getOwnerId()));
|
||||||
|
dto.setAccountName(trimToNull(excel.getAccountName()));
|
||||||
|
dto.setAccountNo(trimToNull(excel.getAccountNo()));
|
||||||
|
dto.setAccountType(parseAccountType(excel.getAccountType()));
|
||||||
|
dto.setBankScope(parseBankScope(excel.getBankScope()));
|
||||||
|
dto.setOpenBank(trimToNull(excel.getOpenBank()));
|
||||||
|
dto.setBankCode(trimToNull(excel.getBankCode()));
|
||||||
|
dto.setCurrency(normalizeCurrency(excel.getCurrency()));
|
||||||
|
dto.setStatus(parseStatus(excel.getStatus()));
|
||||||
|
dto.setEffectiveDate(parseDateRequired(excel.getEffectiveDate(), "生效日期"));
|
||||||
|
dto.setInvalidDate(parseDateOptional(excel.getInvalidDate()));
|
||||||
|
dto.setIsActualControl(parseBooleanFlag(excel.getIsActualControl(), 1));
|
||||||
|
dto.setAvgMonthTxnCount(parseInteger(excel.getAvgMonthTxnCount()));
|
||||||
|
dto.setAvgMonthTxnAmount(parseDecimal(excel.getAvgMonthTxnAmount()));
|
||||||
|
dto.setTxnFrequencyLevel(parseLevel(excel.getTxnFrequencyLevel(), "频率等级"));
|
||||||
|
dto.setDebitSingleMaxAmount(parseDecimal(excel.getDebitSingleMaxAmount()));
|
||||||
|
dto.setCreditSingleMaxAmount(parseDecimal(excel.getCreditSingleMaxAmount()));
|
||||||
|
dto.setDebitDailyMaxAmount(parseDecimal(excel.getDebitDailyMaxAmount()));
|
||||||
|
dto.setCreditDailyMaxAmount(parseDecimal(excel.getCreditDailyMaxAmount()));
|
||||||
|
dto.setTxnRiskLevel(parseLevel(excel.getTxnRiskLevel(), "风险等级"));
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiAccountInfoEditDTO toEditDto(Long id, CcdiAccountInfoExcel excel) {
|
||||||
|
CcdiAccountInfoEditDTO dto = new CcdiAccountInfoEditDTO();
|
||||||
|
BeanUtils.copyProperties(toAddDto(excel), dto);
|
||||||
|
dto.setId(id);
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiAccountInfo findByAccountNo(String accountNo) {
|
||||||
|
LambdaQueryWrapper<CcdiAccountInfo> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CcdiAccountInfo::getAccountNo, trimToNull(accountNo));
|
||||||
|
return accountInfoMapper.selectOne(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
private AccountInfoImportFailureVO buildFailure(int rowNum, CcdiAccountInfoExcel excel, String errorMessage) {
|
||||||
|
AccountInfoImportFailureVO failure = new AccountInfoImportFailureVO();
|
||||||
|
failure.setRowNum(rowNum);
|
||||||
|
failure.setOwnerType(excel.getOwnerType());
|
||||||
|
failure.setOwnerId(excel.getOwnerId());
|
||||||
|
failure.setAccountNo(excel.getAccountNo());
|
||||||
|
failure.setErrorMessage(errorMessage);
|
||||||
|
return failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String parseOwnerType(String value) {
|
||||||
|
String normalized = toUpper(value);
|
||||||
|
if ("员工".equals(value)) {
|
||||||
|
return "EMPLOYEE";
|
||||||
|
}
|
||||||
|
if ("员工关系人".equals(value)) {
|
||||||
|
return "RELATION";
|
||||||
|
}
|
||||||
|
if ("中介".equals(value)) {
|
||||||
|
return "INTERMEDIARY";
|
||||||
|
}
|
||||||
|
if ("外部人员".equals(value)) {
|
||||||
|
return "EXTERNAL";
|
||||||
|
}
|
||||||
|
return normalized;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String parseAccountType(String value) {
|
||||||
|
String normalized = toUpper(value);
|
||||||
|
return switch (normalized) {
|
||||||
|
case "银行账户" -> "BANK";
|
||||||
|
case "证券账户" -> "SECURITIES";
|
||||||
|
case "支付账户" -> "PAYMENT";
|
||||||
|
case "其他" -> "OTHER";
|
||||||
|
default -> normalized;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String parseBankScope(String value) {
|
||||||
|
String normalized = toUpper(value);
|
||||||
|
return switch (normalized) {
|
||||||
|
case "行内" -> "INTERNAL";
|
||||||
|
case "行外" -> "EXTERNAL";
|
||||||
|
default -> normalized;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer parseStatus(String value) {
|
||||||
|
String normalized = trimToNull(value);
|
||||||
|
if (normalized == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return switch (normalized) {
|
||||||
|
case "1", "正常" -> 1;
|
||||||
|
case "2", "已销户" -> 2;
|
||||||
|
default -> throw new RuntimeException("状态仅支持“正常/已销户”或“1/2”");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer parseBooleanFlag(String value, Integer defaultValue) {
|
||||||
|
String normalized = trimToNull(value);
|
||||||
|
if (normalized == null) {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
return switch (normalized) {
|
||||||
|
case "1", "是", "Y", "YES", "TRUE", "true" -> 1;
|
||||||
|
case "0", "否", "N", "NO", "FALSE", "false" -> 0;
|
||||||
|
default -> throw new RuntimeException("是否实控账户仅支持“是/否”或“1/0”");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer parseInteger(String value) {
|
||||||
|
String normalized = trimToNull(value);
|
||||||
|
if (normalized == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return Integer.valueOf(normalized);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new RuntimeException("月均交易笔数格式不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private BigDecimal parseDecimal(String value) {
|
||||||
|
String normalized = trimToNull(value);
|
||||||
|
if (normalized == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return new BigDecimal(normalized);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
throw new RuntimeException("金额字段格式不正确");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String parseLevel(String value, String fieldLabel) {
|
||||||
|
String normalized = toUpper(value);
|
||||||
|
if (StringUtils.isEmpty(normalized)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return switch (normalized) {
|
||||||
|
case "低", "LOW" -> "LOW";
|
||||||
|
case "中", "MEDIUM" -> "MEDIUM";
|
||||||
|
case "高", "HIGH" -> "HIGH";
|
||||||
|
default -> throw new RuntimeException(fieldLabel + "仅支持 LOW/MEDIUM/HIGH");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private Date parseDateRequired(String value, String fieldLabel) {
|
||||||
|
Date date = parseDateOptional(value);
|
||||||
|
if (date == null) {
|
||||||
|
throw new RuntimeException(fieldLabel + "不能为空");
|
||||||
|
}
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Date parseDateOptional(String value) {
|
||||||
|
String normalized = trimToNull(value);
|
||||||
|
if (normalized == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
synchronized (DATE_FORMAT) {
|
||||||
|
return DATE_FORMAT.parse(normalized);
|
||||||
|
}
|
||||||
|
} catch (ParseException e) {
|
||||||
|
throw new RuntimeException("日期格式需为 yyyy-MM-dd");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trimToNull(String value) {
|
||||||
|
if (StringUtils.isEmpty(value)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String ownerTypeLabel(String value) {
|
||||||
|
return switch (value) {
|
||||||
|
case "EMPLOYEE" -> "员工";
|
||||||
|
case "RELATION" -> "员工关系人";
|
||||||
|
case "INTERMEDIARY" -> "中介";
|
||||||
|
case "EXTERNAL" -> "外部人员";
|
||||||
|
default -> value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String accountTypeLabel(String value) {
|
||||||
|
return switch (value) {
|
||||||
|
case "BANK" -> "银行账户";
|
||||||
|
case "SECURITIES" -> "证券账户";
|
||||||
|
case "PAYMENT" -> "支付账户";
|
||||||
|
case "OTHER" -> "其他";
|
||||||
|
default -> value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String bankScopeLabel(String value) {
|
||||||
|
return switch (value) {
|
||||||
|
case "INTERNAL" -> "行内";
|
||||||
|
case "EXTERNAL" -> "行外";
|
||||||
|
default -> value;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatYesNo(Integer value) {
|
||||||
|
if (value == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return value == 1 ? "是" : "否";
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatDate(Date value) {
|
||||||
|
if (value == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
synchronized (DATE_FORMAT) {
|
||||||
|
return DATE_FORMAT.format(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String formatNumber(Number value) {
|
||||||
|
return value == null ? "" : String.valueOf(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,13 +3,17 @@ package com.ruoyi.info.collection.service.impl;
|
|||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.ruoyi.info.collection.domain.CcdiStaffRecruitment;
|
import com.ruoyi.info.collection.domain.CcdiStaffRecruitment;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiStaffRecruitmentWork;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentWorkExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportResult;
|
import com.ruoyi.info.collection.domain.vo.ImportResult;
|
||||||
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
import com.ruoyi.info.collection.domain.vo.ImportStatusVO;
|
||||||
import com.ruoyi.info.collection.domain.vo.RecruitmentImportFailureVO;
|
import com.ruoyi.info.collection.domain.vo.RecruitmentImportFailureVO;
|
||||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||||
|
import com.ruoyi.info.collection.enums.RecruitType;
|
||||||
import com.ruoyi.info.collection.mapper.CcdiStaffRecruitmentMapper;
|
import com.ruoyi.info.collection.mapper.CcdiStaffRecruitmentMapper;
|
||||||
|
import com.ruoyi.info.collection.mapper.CcdiStaffRecruitmentWorkMapper;
|
||||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentImportService;
|
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentImportService;
|
||||||
import com.ruoyi.info.collection.utils.ImportLogUtils;
|
import com.ruoyi.info.collection.utils.ImportLogUtils;
|
||||||
import com.ruoyi.common.utils.IdCardUtil;
|
import com.ruoyi.common.utils.IdCardUtil;
|
||||||
@@ -43,6 +47,9 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
@Resource
|
@Resource
|
||||||
private CcdiStaffRecruitmentMapper recruitmentMapper;
|
private CcdiStaffRecruitmentMapper recruitmentMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiStaffRecruitmentWorkMapper recruitmentWorkMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private RedisTemplate<String, Object> redisTemplate;
|
private RedisTemplate<String, Object> redisTemplate;
|
||||||
|
|
||||||
@@ -60,10 +67,10 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
List<CcdiStaffRecruitment> newRecords = new ArrayList<>();
|
List<CcdiStaffRecruitment> newRecords = new ArrayList<>();
|
||||||
List<RecruitmentImportFailureVO> failures = new ArrayList<>();
|
List<RecruitmentImportFailureVO> failures = new ArrayList<>();
|
||||||
|
|
||||||
// 批量查询已存在的招聘项目编号
|
// 批量查询已存在的招聘记录编号
|
||||||
ImportLogUtils.logBatchQueryStart(log, taskId, "已存在的招聘项目编号", excelList.size());
|
ImportLogUtils.logBatchQueryStart(log, taskId, "已存在的招聘记录编号", excelList.size());
|
||||||
Set<String> existingRecruitIds = getExistingRecruitIds(excelList);
|
Set<String> existingRecruitIds = getExistingRecruitIds(excelList);
|
||||||
ImportLogUtils.logBatchQueryComplete(log, taskId, "招聘项目编号", existingRecruitIds.size());
|
ImportLogUtils.logBatchQueryComplete(log, taskId, "招聘记录编号", existingRecruitIds.size());
|
||||||
|
|
||||||
// 用于检测Excel内部的重复ID
|
// 用于检测Excel内部的重复ID
|
||||||
Set<String> excelProcessedIds = new HashSet<>();
|
Set<String> excelProcessedIds = new HashSet<>();
|
||||||
@@ -76,19 +83,21 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
// 转换为AddDTO进行验证
|
// 转换为AddDTO进行验证
|
||||||
CcdiStaffRecruitmentAddDTO addDTO = new CcdiStaffRecruitmentAddDTO();
|
CcdiStaffRecruitmentAddDTO addDTO = new CcdiStaffRecruitmentAddDTO();
|
||||||
BeanUtils.copyProperties(excel, addDTO);
|
BeanUtils.copyProperties(excel, addDTO);
|
||||||
|
addDTO.setRecruitType(RecruitType.inferCode(addDTO.getRecruitName()));
|
||||||
|
|
||||||
// 验证数据
|
// 验证数据
|
||||||
validateRecruitmentData(addDTO, existingRecruitIds);
|
validateRecruitmentData(addDTO, existingRecruitIds);
|
||||||
|
|
||||||
CcdiStaffRecruitment recruitment = new CcdiStaffRecruitment();
|
CcdiStaffRecruitment recruitment = new CcdiStaffRecruitment();
|
||||||
BeanUtils.copyProperties(excel, recruitment);
|
BeanUtils.copyProperties(excel, recruitment);
|
||||||
|
recruitment.setRecruitType(addDTO.getRecruitType());
|
||||||
|
|
||||||
if (existingRecruitIds.contains(excel.getRecruitId())) {
|
if (existingRecruitIds.contains(excel.getRecruitId())) {
|
||||||
// 招聘项目编号在数据库中已存在,直接报错
|
// 招聘记录编号在数据库中已存在,直接报错
|
||||||
throw new RuntimeException(String.format("招聘项目编号[%s]已存在,请勿重复导入", excel.getRecruitId()));
|
throw new RuntimeException(String.format("招聘记录编号[%s]已存在,请勿重复导入", excel.getRecruitId()));
|
||||||
} else if (excelProcessedIds.contains(excel.getRecruitId())) {
|
} else if (excelProcessedIds.contains(excel.getRecruitId())) {
|
||||||
// 招聘项目编号在Excel文件内部重复
|
// 招聘记录编号在Excel文件内部重复
|
||||||
throw new RuntimeException(String.format("招聘项目编号[%s]在导入文件中重复,已跳过此条记录", excel.getRecruitId()));
|
throw new RuntimeException(String.format("招聘记录编号[%s]在导入文件中重复,已跳过此条记录", excel.getRecruitId()));
|
||||||
} else {
|
} else {
|
||||||
recruitment.setCreatedBy(userName);
|
recruitment.setCreatedBy(userName);
|
||||||
recruitment.setUpdatedBy(userName);
|
recruitment.setUpdatedBy(userName);
|
||||||
@@ -107,7 +116,7 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
failures.add(failure);
|
failures.add(failure);
|
||||||
|
|
||||||
// 记录验证失败日志
|
// 记录验证失败日志
|
||||||
String keyData = String.format("招聘项目编号=%s, 项目名称=%s, 应聘人员=%s",
|
String keyData = String.format("招聘记录编号=%s, 项目名称=%s, 应聘人员=%s",
|
||||||
excel.getRecruitId(), excel.getRecruitName(), excel.getCandName());
|
excel.getRecruitId(), excel.getRecruitName(), excel.getCandName());
|
||||||
ImportLogUtils.logValidationError(log, taskId, i + 1, e.getMessage(), keyData);
|
ImportLogUtils.logValidationError(log, taskId, i + 1, e.getMessage(), keyData);
|
||||||
}
|
}
|
||||||
@@ -142,7 +151,85 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
|
|
||||||
// 记录导入完成
|
// 记录导入完成
|
||||||
long duration = System.currentTimeMillis() - startTime;
|
long duration = System.currentTimeMillis() - startTime;
|
||||||
ImportLogUtils.logImportComplete(log, taskId, "招聘信息",
|
ImportLogUtils.logImportComplete(log, taskId, "招聘信息",
|
||||||
|
excelList.size(), result.getSuccessCount(), result.getFailureCount(), duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Async
|
||||||
|
@Transactional
|
||||||
|
public void importRecruitmentWorkAsync(List<CcdiStaffRecruitmentWorkExcel> excelList,
|
||||||
|
String taskId,
|
||||||
|
String userName) {
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
ImportLogUtils.logImportStart(log, taskId, "招聘历史工作经历", excelList.size(), userName);
|
||||||
|
|
||||||
|
List<RecruitmentImportFailureVO> failures = new ArrayList<>();
|
||||||
|
List<CcdiStaffRecruitmentWork> validRecords = new ArrayList<>();
|
||||||
|
Set<String> failedRecruitIds = new HashSet<>();
|
||||||
|
Set<String> processedRecruitSortKeys = new HashSet<>();
|
||||||
|
|
||||||
|
Map<String, CcdiStaffRecruitment> recruitmentMap = getRecruitmentMap(excelList);
|
||||||
|
|
||||||
|
for (int i = 0; i < excelList.size(); i++) {
|
||||||
|
CcdiStaffRecruitmentWorkExcel excel = excelList.get(i);
|
||||||
|
try {
|
||||||
|
CcdiStaffRecruitment recruitment = recruitmentMap.get(trim(excel.getRecruitId()));
|
||||||
|
validateRecruitmentWorkData(excel, recruitment, processedRecruitSortKeys);
|
||||||
|
|
||||||
|
CcdiStaffRecruitmentWork work = new CcdiStaffRecruitmentWork();
|
||||||
|
BeanUtils.copyProperties(excel, work);
|
||||||
|
work.setRecruitId(trim(excel.getRecruitId()));
|
||||||
|
work.setCreatedBy(userName);
|
||||||
|
work.setUpdatedBy(userName);
|
||||||
|
validRecords.add(work);
|
||||||
|
|
||||||
|
ImportLogUtils.logProgress(log, taskId, i + 1, excelList.size(),
|
||||||
|
validRecords.size(), failures.size());
|
||||||
|
} catch (Exception e) {
|
||||||
|
failedRecruitIds.add(trim(excel.getRecruitId()));
|
||||||
|
failures.add(buildWorkFailure(excel, e.getMessage()));
|
||||||
|
String keyData = String.format("招聘记录编号=%s, 候选人=%s, 工作单位=%s",
|
||||||
|
excel.getRecruitId(), excel.getCandName(), excel.getCompanyName());
|
||||||
|
ImportLogUtils.logValidationError(log, taskId, i + 1, e.getMessage(), keyData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<CcdiStaffRecruitmentWork> importRecords = validRecords.stream()
|
||||||
|
.filter(work -> !failedRecruitIds.contains(work.getRecruitId()))
|
||||||
|
.toList();
|
||||||
|
appendSkippedFailures(validRecords, failedRecruitIds, failures);
|
||||||
|
|
||||||
|
if (!importRecords.isEmpty()) {
|
||||||
|
Set<String> importRecruitIds = importRecords.stream()
|
||||||
|
.map(CcdiStaffRecruitmentWork::getRecruitId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
LambdaQueryWrapper<CcdiStaffRecruitmentWork> deleteWrapper = new LambdaQueryWrapper<>();
|
||||||
|
deleteWrapper.in(CcdiStaffRecruitmentWork::getRecruitId, importRecruitIds);
|
||||||
|
recruitmentWorkMapper.delete(deleteWrapper);
|
||||||
|
|
||||||
|
importRecords.forEach(recruitmentWorkMapper::insert);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!failures.isEmpty()) {
|
||||||
|
try {
|
||||||
|
String failuresKey = "import:recruitment:" + taskId + ":failures";
|
||||||
|
redisTemplate.opsForValue().set(failuresKey, failures, 7, TimeUnit.DAYS);
|
||||||
|
ImportLogUtils.logRedisOperation(log, taskId, "保存失败记录", failures.size());
|
||||||
|
} catch (Exception e) {
|
||||||
|
ImportLogUtils.logRedisError(log, taskId, "保存失败记录", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImportResult result = new ImportResult();
|
||||||
|
result.setTotalCount(excelList.size());
|
||||||
|
result.setSuccessCount(importRecords.size());
|
||||||
|
result.setFailureCount(failures.size());
|
||||||
|
String finalStatus = result.getFailureCount() == 0 ? "SUCCESS" : "PARTIAL_SUCCESS";
|
||||||
|
updateImportStatus(taskId, finalStatus, result);
|
||||||
|
|
||||||
|
long duration = System.currentTimeMillis() - startTime;
|
||||||
|
ImportLogUtils.logImportComplete(log, taskId, "招聘历史工作经历",
|
||||||
excelList.size(), result.getSuccessCount(), result.getFailureCount(), duration);
|
excelList.size(), result.getSuccessCount(), result.getFailureCount(), duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +271,7 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量查询已存在的招聘项目编号
|
* 批量查询已存在的招聘记录编号
|
||||||
*/
|
*/
|
||||||
private Set<String> getExistingRecruitIds(List<CcdiStaffRecruitmentExcel> excelList) {
|
private Set<String> getExistingRecruitIds(List<CcdiStaffRecruitmentExcel> excelList) {
|
||||||
List<String> recruitIds = excelList.stream()
|
List<String> recruitIds = excelList.stream()
|
||||||
@@ -212,7 +299,7 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
Set<String> existingRecruitIds) {
|
Set<String> existingRecruitIds) {
|
||||||
// 验证必填字段
|
// 验证必填字段
|
||||||
if (StringUtils.isEmpty(addDTO.getRecruitId())) {
|
if (StringUtils.isEmpty(addDTO.getRecruitId())) {
|
||||||
throw new RuntimeException("招聘项目编号不能为空");
|
throw new RuntimeException("招聘记录编号不能为空");
|
||||||
}
|
}
|
||||||
if (StringUtils.isEmpty(addDTO.getRecruitName())) {
|
if (StringUtils.isEmpty(addDTO.getRecruitName())) {
|
||||||
throw new RuntimeException("招聘项目名称不能为空");
|
throw new RuntimeException("招聘项目名称不能为空");
|
||||||
@@ -247,6 +334,9 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
if (StringUtils.isEmpty(addDTO.getAdmitStatus())) {
|
if (StringUtils.isEmpty(addDTO.getAdmitStatus())) {
|
||||||
throw new RuntimeException("录用情况不能为空");
|
throw new RuntimeException("录用情况不能为空");
|
||||||
}
|
}
|
||||||
|
if (StringUtils.isEmpty(addDTO.getRecruitType())) {
|
||||||
|
throw new RuntimeException("招聘类型不能为空");
|
||||||
|
}
|
||||||
|
|
||||||
// 验证证件号码格式
|
// 验证证件号码格式
|
||||||
String idCardError = IdCardUtil.getErrorMessage(addDTO.getCandId());
|
String idCardError = IdCardUtil.getErrorMessage(addDTO.getCandId());
|
||||||
@@ -263,6 +353,115 @@ public class CcdiStaffRecruitmentImportServiceImpl implements ICcdiStaffRecruitm
|
|||||||
if (AdmitStatus.getDescByCode(addDTO.getAdmitStatus()) == null) {
|
if (AdmitStatus.getDescByCode(addDTO.getAdmitStatus()) == null) {
|
||||||
throw new RuntimeException("录用情况只能填写'录用'、'未录用'或'放弃'");
|
throw new RuntimeException("录用情况只能填写'录用'、'未录用'或'放弃'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (RecruitType.getDescByCode(addDTO.getRecruitType()) == null) {
|
||||||
|
throw new RuntimeException("招聘类型只能填写'SOCIAL'或'CAMPUS'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map<String, CcdiStaffRecruitment> getRecruitmentMap(List<CcdiStaffRecruitmentWorkExcel> excelList) {
|
||||||
|
List<String> recruitIds = excelList.stream()
|
||||||
|
.map(CcdiStaffRecruitmentWorkExcel::getRecruitId)
|
||||||
|
.map(this::trim)
|
||||||
|
.filter(StringUtils::isNotEmpty)
|
||||||
|
.distinct()
|
||||||
|
.toList();
|
||||||
|
if (recruitIds.isEmpty()) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
List<CcdiStaffRecruitment> recruitments = recruitmentMapper.selectBatchIds(recruitIds);
|
||||||
|
return recruitments.stream()
|
||||||
|
.collect(Collectors.toMap(CcdiStaffRecruitment::getRecruitId, item -> item));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateRecruitmentWorkData(CcdiStaffRecruitmentWorkExcel excel,
|
||||||
|
CcdiStaffRecruitment recruitment,
|
||||||
|
Set<String> processedRecruitSortKeys) {
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getRecruitId()))) {
|
||||||
|
throw new RuntimeException("招聘记录编号不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getCandName()))) {
|
||||||
|
throw new RuntimeException("候选人姓名不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getRecruitName()))) {
|
||||||
|
throw new RuntimeException("招聘项目名称不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getPosName()))) {
|
||||||
|
throw new RuntimeException("职位名称不能为空");
|
||||||
|
}
|
||||||
|
if (excel.getSortOrder() == null || excel.getSortOrder() <= 0) {
|
||||||
|
throw new RuntimeException("排序号不能为空且必须大于0");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getCompanyName()))) {
|
||||||
|
throw new RuntimeException("工作单位不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getPositionName()))) {
|
||||||
|
throw new RuntimeException("岗位不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(trim(excel.getJobStartMonth()))) {
|
||||||
|
throw new RuntimeException("入职年月不能为空");
|
||||||
|
}
|
||||||
|
validateMonth(excel.getJobStartMonth(), "入职年月");
|
||||||
|
if (StringUtils.isNotEmpty(trim(excel.getJobEndMonth()))) {
|
||||||
|
validateMonth(excel.getJobEndMonth(), "离职年月");
|
||||||
|
}
|
||||||
|
if (recruitment == null) {
|
||||||
|
throw new RuntimeException("招聘记录编号不存在,请先维护招聘主信息");
|
||||||
|
}
|
||||||
|
if (!"SOCIAL".equals(recruitment.getRecruitType())) {
|
||||||
|
throw new RuntimeException("该招聘记录不是社招,不允许导入历史工作经历");
|
||||||
|
}
|
||||||
|
if (!sameText(excel.getCandName(), recruitment.getCandName())) {
|
||||||
|
throw new RuntimeException("招聘记录编号与候选人姓名不匹配");
|
||||||
|
}
|
||||||
|
if (!sameText(excel.getRecruitName(), recruitment.getRecruitName())) {
|
||||||
|
throw new RuntimeException("招聘记录编号与招聘项目名称不匹配");
|
||||||
|
}
|
||||||
|
if (!sameText(excel.getPosName(), recruitment.getPosName())) {
|
||||||
|
throw new RuntimeException("招聘记录编号与职位名称不匹配");
|
||||||
|
}
|
||||||
|
String duplicateKey = trim(excel.getRecruitId()) + "#" + excel.getSortOrder();
|
||||||
|
if (!processedRecruitSortKeys.add(duplicateKey)) {
|
||||||
|
throw new RuntimeException("同一招聘记录编号下排序号重复");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void validateMonth(String value, String fieldName) {
|
||||||
|
String month = trim(value);
|
||||||
|
if (!month.matches("^((19|20)\\d{2})-(0[1-9]|1[0-2])$")) {
|
||||||
|
throw new RuntimeException(fieldName + "格式不正确,应为YYYY-MM");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean sameText(String first, String second) {
|
||||||
|
return Objects.equals(trim(first), trim(second));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String trim(String value) {
|
||||||
|
return value == null ? null : value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
private RecruitmentImportFailureVO buildWorkFailure(CcdiStaffRecruitmentWorkExcel excel, String errorMessage) {
|
||||||
|
RecruitmentImportFailureVO failure = new RecruitmentImportFailureVO();
|
||||||
|
BeanUtils.copyProperties(excel, failure);
|
||||||
|
failure.setErrorMessage(errorMessage);
|
||||||
|
return failure;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendSkippedFailures(List<CcdiStaffRecruitmentWork> validRecords,
|
||||||
|
Set<String> failedRecruitIds,
|
||||||
|
List<RecruitmentImportFailureVO> failures) {
|
||||||
|
Set<String> appendedRecruitIds = new HashSet<>();
|
||||||
|
for (CcdiStaffRecruitmentWork work : validRecords) {
|
||||||
|
if (failedRecruitIds.contains(work.getRecruitId()) && appendedRecruitIds.add(work.getRecruitId())) {
|
||||||
|
RecruitmentImportFailureVO failure = new RecruitmentImportFailureVO();
|
||||||
|
failure.setRecruitId(work.getRecruitId());
|
||||||
|
failure.setCompanyName(work.getCompanyName());
|
||||||
|
failure.setPositionName(work.getPositionName());
|
||||||
|
failure.setErrorMessage("同一招聘记录编号存在失败行,已跳过该编号下全部工作经历,避免覆盖旧数据");
|
||||||
|
failures.add(failure);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,13 +1,18 @@
|
|||||||
package com.ruoyi.info.collection.service.impl;
|
package com.ruoyi.info.collection.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.info.collection.domain.CcdiStaffRecruitment;
|
import com.ruoyi.info.collection.domain.CcdiStaffRecruitment;
|
||||||
|
import com.ruoyi.info.collection.domain.CcdiStaffRecruitmentWork;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentAddDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentEditDTO;
|
||||||
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
import com.ruoyi.info.collection.domain.dto.CcdiStaffRecruitmentQueryDTO;
|
||||||
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentExcel;
|
||||||
|
import com.ruoyi.info.collection.domain.excel.CcdiStaffRecruitmentWorkExcel;
|
||||||
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentVO;
|
||||||
|
import com.ruoyi.info.collection.domain.vo.CcdiStaffRecruitmentWorkVO;
|
||||||
import com.ruoyi.info.collection.enums.AdmitStatus;
|
import com.ruoyi.info.collection.enums.AdmitStatus;
|
||||||
|
import com.ruoyi.info.collection.mapper.CcdiStaffRecruitmentWorkMapper;
|
||||||
import com.ruoyi.info.collection.mapper.CcdiStaffRecruitmentMapper;
|
import com.ruoyi.info.collection.mapper.CcdiStaffRecruitmentMapper;
|
||||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentImportService;
|
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentImportService;
|
||||||
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentService;
|
import com.ruoyi.info.collection.service.ICcdiStaffRecruitmentService;
|
||||||
@@ -19,6 +24,7 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -37,6 +43,9 @@ public class CcdiStaffRecruitmentServiceImpl implements ICcdiStaffRecruitmentSer
|
|||||||
@Resource
|
@Resource
|
||||||
private CcdiStaffRecruitmentMapper recruitmentMapper;
|
private CcdiStaffRecruitmentMapper recruitmentMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiStaffRecruitmentWorkMapper recruitmentWorkMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ICcdiStaffRecruitmentImportService recruitmentImportService;
|
private ICcdiStaffRecruitmentImportService recruitmentImportService;
|
||||||
|
|
||||||
@@ -96,7 +105,7 @@ public class CcdiStaffRecruitmentServiceImpl implements ICcdiStaffRecruitmentSer
|
|||||||
/**
|
/**
|
||||||
* 查询招聘信息详情
|
* 查询招聘信息详情
|
||||||
*
|
*
|
||||||
* @param recruitId 招聘项目编号
|
* @param recruitId 招聘记录编号
|
||||||
* @return 招聘信息VO
|
* @return 招聘信息VO
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@@ -104,6 +113,7 @@ public class CcdiStaffRecruitmentServiceImpl implements ICcdiStaffRecruitmentSer
|
|||||||
CcdiStaffRecruitmentVO vo = recruitmentMapper.selectRecruitmentById(recruitId);
|
CcdiStaffRecruitmentVO vo = recruitmentMapper.selectRecruitmentById(recruitId);
|
||||||
if (vo != null) {
|
if (vo != null) {
|
||||||
vo.setAdmitStatusDesc(AdmitStatus.getDescByCode(vo.getAdmitStatus()));
|
vo.setAdmitStatusDesc(AdmitStatus.getDescByCode(vo.getAdmitStatus()));
|
||||||
|
vo.setWorkExperienceList(selectWorkExperienceList(recruitId));
|
||||||
}
|
}
|
||||||
return vo;
|
return vo;
|
||||||
}
|
}
|
||||||
@@ -117,9 +127,9 @@ public class CcdiStaffRecruitmentServiceImpl implements ICcdiStaffRecruitmentSer
|
|||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public int insertRecruitment(CcdiStaffRecruitmentAddDTO addDTO) {
|
public int insertRecruitment(CcdiStaffRecruitmentAddDTO addDTO) {
|
||||||
// 检查招聘项目编号唯一性
|
// 检查招聘记录编号唯一性
|
||||||
if (recruitmentMapper.selectById(addDTO.getRecruitId()) != null) {
|
if (recruitmentMapper.selectById(addDTO.getRecruitId()) != null) {
|
||||||
throw new RuntimeException("该招聘项目编号已存在");
|
throw new RuntimeException("该招聘记录编号已存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
CcdiStaffRecruitment recruitment = new CcdiStaffRecruitment();
|
CcdiStaffRecruitment recruitment = new CcdiStaffRecruitment();
|
||||||
@@ -148,12 +158,15 @@ public class CcdiStaffRecruitmentServiceImpl implements ICcdiStaffRecruitmentSer
|
|||||||
/**
|
/**
|
||||||
* 批量删除招聘信息
|
* 批量删除招聘信息
|
||||||
*
|
*
|
||||||
* @param recruitIds 需要删除的招聘项目编号
|
* @param recruitIds 需要删除的招聘记录编号
|
||||||
* @return 结果
|
* @return 结果
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional
|
@Transactional
|
||||||
public int deleteRecruitmentByIds(String[] recruitIds) {
|
public int deleteRecruitmentByIds(String[] recruitIds) {
|
||||||
|
LambdaQueryWrapper<CcdiStaffRecruitmentWork> workWrapper = new LambdaQueryWrapper<>();
|
||||||
|
workWrapper.in(CcdiStaffRecruitmentWork::getRecruitId, List.of(recruitIds));
|
||||||
|
recruitmentWorkMapper.delete(workWrapper);
|
||||||
return recruitmentMapper.deleteBatchIds(List.of(recruitIds));
|
return recruitmentMapper.deleteBatchIds(List.of(recruitIds));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,4 +210,56 @@ public class CcdiStaffRecruitmentServiceImpl implements ICcdiStaffRecruitmentSer
|
|||||||
|
|
||||||
return taskId;
|
return taskId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入招聘记录历史工作经历数据(异步)
|
||||||
|
*
|
||||||
|
* @param excelList Excel实体列表
|
||||||
|
* @return 任务ID
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
@Transactional
|
||||||
|
public String importRecruitmentWork(List<CcdiStaffRecruitmentWorkExcel> excelList) {
|
||||||
|
if (StringUtils.isNull(excelList) || excelList.isEmpty()) {
|
||||||
|
throw new RuntimeException("至少需要一条数据");
|
||||||
|
}
|
||||||
|
|
||||||
|
String taskId = UUID.randomUUID().toString();
|
||||||
|
long startTime = System.currentTimeMillis();
|
||||||
|
String userName = SecurityUtils.getUsername();
|
||||||
|
|
||||||
|
String statusKey = "import:recruitment:" + taskId;
|
||||||
|
Map<String, Object> statusData = new HashMap<>();
|
||||||
|
statusData.put("taskId", taskId);
|
||||||
|
statusData.put("status", "PROCESSING");
|
||||||
|
statusData.put("totalCount", excelList.size());
|
||||||
|
statusData.put("successCount", 0);
|
||||||
|
statusData.put("failureCount", 0);
|
||||||
|
statusData.put("progress", 0);
|
||||||
|
statusData.put("startTime", startTime);
|
||||||
|
statusData.put("message", "正在处理历史工作经历...");
|
||||||
|
|
||||||
|
redisTemplate.opsForHash().putAll(statusKey, statusData);
|
||||||
|
redisTemplate.expire(statusKey, 7, TimeUnit.DAYS);
|
||||||
|
|
||||||
|
recruitmentImportService.importRecruitmentWorkAsync(excelList, taskId, userName);
|
||||||
|
|
||||||
|
return taskId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<CcdiStaffRecruitmentWorkVO> selectWorkExperienceList(String recruitId) {
|
||||||
|
LambdaQueryWrapper<CcdiStaffRecruitmentWork> wrapper = new LambdaQueryWrapper<>();
|
||||||
|
wrapper.eq(CcdiStaffRecruitmentWork::getRecruitId, recruitId)
|
||||||
|
.orderByAsc(CcdiStaffRecruitmentWork::getSortOrder)
|
||||||
|
.orderByDesc(CcdiStaffRecruitmentWork::getId);
|
||||||
|
List<CcdiStaffRecruitmentWork> workList = recruitmentWorkMapper.selectList(wrapper);
|
||||||
|
if (workList == null || workList.isEmpty()) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
return workList.stream().map(work -> {
|
||||||
|
CcdiStaffRecruitmentWorkVO vo = new CcdiStaffRecruitmentWorkVO();
|
||||||
|
BeanUtils.copyProperties(work, vo);
|
||||||
|
return vo;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,168 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="com.ruoyi.info.collection.mapper.CcdiAccountInfoMapper">
|
||||||
|
|
||||||
|
<resultMap id="CcdiAccountInfoVOResult" type="com.ruoyi.info.collection.domain.vo.CcdiAccountInfoVO">
|
||||||
|
<id property="id" column="id"/>
|
||||||
|
<result property="ownerType" column="ownerType"/>
|
||||||
|
<result property="ownerId" column="ownerId"/>
|
||||||
|
<result property="staffId" column="staffId"/>
|
||||||
|
<result property="staffName" column="staffName"/>
|
||||||
|
<result property="relationId" column="relationId"/>
|
||||||
|
<result property="relationType" column="relationType"/>
|
||||||
|
<result property="relationName" column="relationName"/>
|
||||||
|
<result property="relationCertNo" column="relationCertNo"/>
|
||||||
|
<result property="accountNo" column="accountNo"/>
|
||||||
|
<result property="accountType" column="accountType"/>
|
||||||
|
<result property="bankScope" column="bankScope"/>
|
||||||
|
<result property="accountName" column="accountName"/>
|
||||||
|
<result property="openBank" column="openBank"/>
|
||||||
|
<result property="bankCode" column="bankCode"/>
|
||||||
|
<result property="currency" column="currency"/>
|
||||||
|
<result property="status" column="status"/>
|
||||||
|
<result property="effectiveDate" column="effectiveDate"/>
|
||||||
|
<result property="invalidDate" column="invalidDate"/>
|
||||||
|
<result property="isActualControl" column="isActualControl"/>
|
||||||
|
<result property="avgMonthTxnCount" column="avgMonthTxnCount"/>
|
||||||
|
<result property="avgMonthTxnAmount" column="avgMonthTxnAmount"/>
|
||||||
|
<result property="txnFrequencyLevel" column="txnFrequencyLevel"/>
|
||||||
|
<result property="debitSingleMaxAmount" column="debitSingleMaxAmount"/>
|
||||||
|
<result property="creditSingleMaxAmount" column="creditSingleMaxAmount"/>
|
||||||
|
<result property="debitDailyMaxAmount" column="debitDailyMaxAmount"/>
|
||||||
|
<result property="creditDailyMaxAmount" column="creditDailyMaxAmount"/>
|
||||||
|
<result property="txnRiskLevel" column="txnRiskLevel"/>
|
||||||
|
<result property="createBy" column="createBy"/>
|
||||||
|
<result property="createTime" column="createTime"/>
|
||||||
|
<result property="updateBy" column="updateBy"/>
|
||||||
|
<result property="updateTime" column="updateTime"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<sql id="AccountInfoSelectColumns">
|
||||||
|
ai.account_id AS id,
|
||||||
|
ai.owner_type AS ownerType,
|
||||||
|
ai.owner_id AS ownerId,
|
||||||
|
CASE
|
||||||
|
WHEN ai.owner_type = 'EMPLOYEE' THEN bs.staff_id
|
||||||
|
WHEN ai.owner_type = 'RELATION' THEN bsRel.staff_id
|
||||||
|
ELSE NULL
|
||||||
|
END AS staffId,
|
||||||
|
CASE
|
||||||
|
WHEN ai.owner_type = 'EMPLOYEE' THEN bs.name
|
||||||
|
WHEN ai.owner_type = 'RELATION' THEN bsRel.name
|
||||||
|
ELSE NULL
|
||||||
|
END AS staffName,
|
||||||
|
CASE WHEN ai.owner_type = 'RELATION' THEN fr.id ELSE NULL END AS relationId,
|
||||||
|
CASE WHEN ai.owner_type = 'RELATION' THEN fr.relation_type ELSE NULL END AS relationType,
|
||||||
|
CASE WHEN ai.owner_type = 'RELATION' THEN fr.relation_name ELSE NULL END AS relationName,
|
||||||
|
CASE WHEN ai.owner_type = 'RELATION' THEN fr.relation_cert_no ELSE NULL END AS relationCertNo,
|
||||||
|
ai.account_no AS accountNo,
|
||||||
|
ai.account_type AS accountType,
|
||||||
|
ai.bank_scope AS bankScope,
|
||||||
|
ai.account_name AS accountName,
|
||||||
|
ai.bank AS openBank,
|
||||||
|
ai.bank_code AS bankCode,
|
||||||
|
ai.currency AS currency,
|
||||||
|
ai.status AS status,
|
||||||
|
ai.effective_date AS effectiveDate,
|
||||||
|
ai.invalid_date AS invalidDate,
|
||||||
|
ar.is_self_account AS isActualControl,
|
||||||
|
ar.monthly_avg_trans_count AS avgMonthTxnCount,
|
||||||
|
ar.monthly_avg_trans_amount AS avgMonthTxnAmount,
|
||||||
|
ar.trans_freq_type AS txnFrequencyLevel,
|
||||||
|
ar.dr_max_single_amount AS debitSingleMaxAmount,
|
||||||
|
ar.cr_max_single_amount AS creditSingleMaxAmount,
|
||||||
|
ar.dr_max_daily_amount AS debitDailyMaxAmount,
|
||||||
|
ar.cr_max_daily_amount AS creditDailyMaxAmount,
|
||||||
|
ar.trans_risk_level AS txnRiskLevel,
|
||||||
|
ai.create_by AS createBy,
|
||||||
|
ai.create_time AS createTime,
|
||||||
|
ai.update_by AS updateBy,
|
||||||
|
ai.update_time AS updateTime
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<sql id="AccountInfoWhereClause">
|
||||||
|
WHERE 1 = 1
|
||||||
|
<if test="query.staffName != null and query.staffName != ''">
|
||||||
|
AND (
|
||||||
|
(ai.owner_type = 'EMPLOYEE' AND bs.name LIKE CONCAT('%', #{query.staffName}, '%'))
|
||||||
|
OR
|
||||||
|
(ai.owner_type = 'RELATION' AND bsRel.name LIKE CONCAT('%', #{query.staffName}, '%'))
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
<if test="query.ownerType != null and query.ownerType != ''">
|
||||||
|
AND ai.owner_type = #{query.ownerType}
|
||||||
|
</if>
|
||||||
|
<if test="query.bankScope != null and query.bankScope != ''">
|
||||||
|
AND ai.bank_scope = #{query.bankScope}
|
||||||
|
</if>
|
||||||
|
<if test="query.relationType != null and query.relationType != ''">
|
||||||
|
AND fr.relation_type = #{query.relationType}
|
||||||
|
</if>
|
||||||
|
<if test="query.accountName != null and query.accountName != ''">
|
||||||
|
AND ai.account_name LIKE CONCAT('%', #{query.accountName}, '%')
|
||||||
|
</if>
|
||||||
|
<if test="query.accountType != null and query.accountType != ''">
|
||||||
|
AND ai.account_type = #{query.accountType}
|
||||||
|
</if>
|
||||||
|
<if test="query.isActualControl != null">
|
||||||
|
AND ar.is_self_account = #{query.isActualControl}
|
||||||
|
</if>
|
||||||
|
<if test="query.riskLevel != null and query.riskLevel != ''">
|
||||||
|
AND ar.trans_risk_level = #{query.riskLevel}
|
||||||
|
</if>
|
||||||
|
<if test="query.status != null">
|
||||||
|
AND ai.status = #{query.status}
|
||||||
|
</if>
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<select id="selectAccountInfoPage" resultMap="CcdiAccountInfoVOResult">
|
||||||
|
SELECT
|
||||||
|
<include refid="AccountInfoSelectColumns"/>
|
||||||
|
FROM ccdi_account_info ai
|
||||||
|
LEFT JOIN ccdi_account_result ar ON ai.account_no = ar.account_no
|
||||||
|
LEFT JOIN ccdi_base_staff bs ON ai.owner_type = 'EMPLOYEE' AND ai.owner_id = bs.id_card
|
||||||
|
LEFT JOIN ccdi_staff_fmy_relation fr ON ai.owner_type = 'RELATION' AND ai.owner_id = fr.relation_cert_no
|
||||||
|
LEFT JOIN ccdi_base_staff bsRel ON fr.person_id = bsRel.id_card
|
||||||
|
<include refid="AccountInfoWhereClause"/>
|
||||||
|
ORDER BY ai.update_time DESC, ai.account_id DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAccountInfoListForExport" resultMap="CcdiAccountInfoVOResult">
|
||||||
|
SELECT
|
||||||
|
<include refid="AccountInfoSelectColumns"/>
|
||||||
|
FROM ccdi_account_info ai
|
||||||
|
LEFT JOIN ccdi_account_result ar ON ai.account_no = ar.account_no
|
||||||
|
LEFT JOIN ccdi_base_staff bs ON ai.owner_type = 'EMPLOYEE' AND ai.owner_id = bs.id_card
|
||||||
|
LEFT JOIN ccdi_staff_fmy_relation fr ON ai.owner_type = 'RELATION' AND ai.owner_id = fr.relation_cert_no
|
||||||
|
LEFT JOIN ccdi_base_staff bsRel ON fr.person_id = bsRel.id_card
|
||||||
|
<include refid="AccountInfoWhereClause"/>
|
||||||
|
ORDER BY ai.update_time DESC, ai.account_id DESC
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectAccountInfoById" resultMap="CcdiAccountInfoVOResult">
|
||||||
|
SELECT
|
||||||
|
<include refid="AccountInfoSelectColumns"/>
|
||||||
|
FROM ccdi_account_info ai
|
||||||
|
LEFT JOIN ccdi_account_result ar ON ai.account_no = ar.account_no
|
||||||
|
LEFT JOIN ccdi_base_staff bs ON ai.owner_type = 'EMPLOYEE' AND ai.owner_id = bs.id_card
|
||||||
|
LEFT JOIN ccdi_staff_fmy_relation fr ON ai.owner_type = 'RELATION' AND ai.owner_id = fr.relation_cert_no
|
||||||
|
LEFT JOIN ccdi_base_staff bsRel ON fr.person_id = bsRel.id_card
|
||||||
|
WHERE ai.account_id = #{id}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectRelationOptionsByStaffId" resultType="com.ruoyi.info.collection.domain.vo.CcdiAccountRelationOptionVO">
|
||||||
|
SELECT
|
||||||
|
fr.id,
|
||||||
|
fr.relation_name AS relationName,
|
||||||
|
fr.relation_type AS relationType,
|
||||||
|
fr.relation_cert_no AS relationCertNo
|
||||||
|
FROM ccdi_staff_fmy_relation fr
|
||||||
|
INNER JOIN ccdi_base_staff bs ON fr.person_id = bs.id_card
|
||||||
|
WHERE bs.staff_id = #{staffId}
|
||||||
|
AND fr.is_emp_family = 1
|
||||||
|
AND fr.status = 1
|
||||||
|
ORDER BY fr.id DESC
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@@ -86,6 +86,7 @@
|
|||||||
e.staff_id,
|
e.staff_id,
|
||||||
e.name,
|
e.name,
|
||||||
e.dept_id,
|
e.dept_id,
|
||||||
|
e.id_card,
|
||||||
d.dept_name
|
d.dept_name
|
||||||
FROM ccdi_base_staff e
|
FROM ccdi_base_staff e
|
||||||
LEFT JOIN sys_dept d ON e.dept_id = d.dept_id
|
LEFT JOIN sys_dept d ON e.dept_id = d.dept_id
|
||||||
|
|||||||
@@ -12,12 +12,14 @@
|
|||||||
<result property="posCategory" column="pos_category"/>
|
<result property="posCategory" column="pos_category"/>
|
||||||
<result property="posDesc" column="pos_desc"/>
|
<result property="posDesc" column="pos_desc"/>
|
||||||
<result property="candName" column="cand_name"/>
|
<result property="candName" column="cand_name"/>
|
||||||
|
<result property="recruitType" column="recruit_type"/>
|
||||||
<result property="candEdu" column="cand_edu"/>
|
<result property="candEdu" column="cand_edu"/>
|
||||||
<result property="candId" column="cand_id"/>
|
<result property="candId" column="cand_id"/>
|
||||||
<result property="candSchool" column="cand_school"/>
|
<result property="candSchool" column="cand_school"/>
|
||||||
<result property="candMajor" column="cand_major"/>
|
<result property="candMajor" column="cand_major"/>
|
||||||
<result property="candGrad" column="cand_grad"/>
|
<result property="candGrad" column="cand_grad"/>
|
||||||
<result property="admitStatus" column="admit_status"/>
|
<result property="admitStatus" column="admit_status"/>
|
||||||
|
<result property="workExperienceCount" column="work_experience_count"/>
|
||||||
<result property="interviewerName1" column="interviewer_name1"/>
|
<result property="interviewerName1" column="interviewer_name1"/>
|
||||||
<result property="interviewerId1" column="interviewer_id1"/>
|
<result property="interviewerId1" column="interviewer_id1"/>
|
||||||
<result property="interviewerName2" column="interviewer_name2"/>
|
<result property="interviewerName2" column="interviewer_name2"/>
|
||||||
@@ -31,44 +33,53 @@
|
|||||||
<!-- 分页查询招聘信息列表 -->
|
<!-- 分页查询招聘信息列表 -->
|
||||||
<select id="selectRecruitmentPage" resultMap="CcdiStaffRecruitmentVOResult">
|
<select id="selectRecruitmentPage" resultMap="CcdiStaffRecruitmentVOResult">
|
||||||
SELECT
|
SELECT
|
||||||
recruit_id, recruit_name, pos_name, pos_category, pos_desc,
|
r.recruit_id, r.recruit_name, r.pos_name, r.pos_category, r.pos_desc,
|
||||||
cand_name, cand_edu, cand_id, cand_school, cand_major, cand_grad,
|
r.cand_name, r.recruit_type, r.cand_edu, r.cand_id, r.cand_school, r.cand_major, r.cand_grad,
|
||||||
admit_status, interviewer_name1, interviewer_id1, interviewer_name2, interviewer_id2,
|
r.admit_status, COALESCE(w.work_experience_count, 0) AS work_experience_count,
|
||||||
created_by, create_time, updated_by, update_time
|
r.interviewer_name1, r.interviewer_id1, r.interviewer_name2, r.interviewer_id2,
|
||||||
FROM ccdi_staff_recruitment
|
r.created_by, r.create_time, r.updated_by, r.update_time
|
||||||
|
FROM ccdi_staff_recruitment r
|
||||||
|
LEFT JOIN (
|
||||||
|
SELECT recruit_id, COUNT(1) AS work_experience_count
|
||||||
|
FROM ccdi_staff_recruitment_work
|
||||||
|
GROUP BY recruit_id
|
||||||
|
) w ON w.recruit_id = r.recruit_id
|
||||||
<where>
|
<where>
|
||||||
<if test="query.recruitName != null and query.recruitName != ''">
|
<if test="query.recruitName != null and query.recruitName != ''">
|
||||||
AND recruit_name LIKE CONCAT('%', #{query.recruitName}, '%')
|
AND r.recruit_name LIKE CONCAT('%', #{query.recruitName}, '%')
|
||||||
</if>
|
</if>
|
||||||
<if test="query.posName != null and query.posName != ''">
|
<if test="query.posName != null and query.posName != ''">
|
||||||
AND pos_name LIKE CONCAT('%', #{query.posName}, '%')
|
AND r.pos_name LIKE CONCAT('%', #{query.posName}, '%')
|
||||||
</if>
|
</if>
|
||||||
<if test="query.candName != null and query.candName != ''">
|
<if test="query.candName != null and query.candName != ''">
|
||||||
AND cand_name LIKE CONCAT('%', #{query.candName}, '%')
|
AND r.cand_name LIKE CONCAT('%', #{query.candName}, '%')
|
||||||
|
</if>
|
||||||
|
<if test="query.recruitType != null and query.recruitType != ''">
|
||||||
|
AND r.recruit_type = #{query.recruitType}
|
||||||
</if>
|
</if>
|
||||||
<if test="query.candId != null and query.candId != ''">
|
<if test="query.candId != null and query.candId != ''">
|
||||||
AND cand_id = #{query.candId}
|
AND r.cand_id = #{query.candId}
|
||||||
</if>
|
</if>
|
||||||
<if test="query.admitStatus != null and query.admitStatus != ''">
|
<if test="query.admitStatus != null and query.admitStatus != ''">
|
||||||
AND admit_status = #{query.admitStatus}
|
AND r.admit_status = #{query.admitStatus}
|
||||||
</if>
|
</if>
|
||||||
<if test="query.interviewerName != null and query.interviewerName != ''">
|
<if test="query.interviewerName != null and query.interviewerName != ''">
|
||||||
AND (interviewer_name1 LIKE CONCAT('%', #{query.interviewerName}, '%')
|
AND (r.interviewer_name1 LIKE CONCAT('%', #{query.interviewerName}, '%')
|
||||||
OR interviewer_name2 LIKE CONCAT('%', #{query.interviewerName}, '%'))
|
OR r.interviewer_name2 LIKE CONCAT('%', #{query.interviewerName}, '%'))
|
||||||
</if>
|
</if>
|
||||||
<if test="query.interviewerId != null and query.interviewerId != ''">
|
<if test="query.interviewerId != null and query.interviewerId != ''">
|
||||||
AND (interviewer_id1 = #{query.interviewerId}
|
AND (r.interviewer_id1 = #{query.interviewerId}
|
||||||
OR interviewer_id2 = #{query.interviewerId})
|
OR r.interviewer_id2 = #{query.interviewerId})
|
||||||
</if>
|
</if>
|
||||||
</where>
|
</where>
|
||||||
ORDER BY create_time DESC
|
ORDER BY r.create_time DESC
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 查询招聘信息详情 -->
|
<!-- 查询招聘信息详情 -->
|
||||||
<select id="selectRecruitmentById" resultMap="CcdiStaffRecruitmentVOResult">
|
<select id="selectRecruitmentById" resultMap="CcdiStaffRecruitmentVOResult">
|
||||||
SELECT
|
SELECT
|
||||||
recruit_id, recruit_name, pos_name, pos_category, pos_desc,
|
recruit_id, recruit_name, pos_name, pos_category, pos_desc,
|
||||||
cand_name, cand_edu, cand_id, cand_school, cand_major, cand_grad,
|
cand_name, recruit_type, cand_edu, cand_id, cand_school, cand_major, cand_grad,
|
||||||
admit_status, interviewer_name1, interviewer_id1, interviewer_name2, interviewer_id2,
|
admit_status, interviewer_name1, interviewer_id1, interviewer_name2, interviewer_id2,
|
||||||
created_by, create_time, updated_by, update_time
|
created_by, create_time, updated_by, update_time
|
||||||
FROM ccdi_staff_recruitment
|
FROM ccdi_staff_recruitment
|
||||||
@@ -79,13 +90,13 @@
|
|||||||
<insert id="insertBatch">
|
<insert id="insertBatch">
|
||||||
INSERT INTO ccdi_staff_recruitment
|
INSERT INTO ccdi_staff_recruitment
|
||||||
(recruit_id, recruit_name, pos_name, pos_category, pos_desc,
|
(recruit_id, recruit_name, pos_name, pos_category, pos_desc,
|
||||||
cand_name, cand_edu, cand_id, cand_school, cand_major, cand_grad,
|
cand_name, recruit_type, cand_edu, cand_id, cand_school, cand_major, cand_grad,
|
||||||
admit_status, interviewer_name1, interviewer_id1, interviewer_name2, interviewer_id2,
|
admit_status, interviewer_name1, interviewer_id1, interviewer_name2, interviewer_id2,
|
||||||
created_by, create_time, updated_by, update_time)
|
created_by, create_time, updated_by, update_time)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="list" item="item" separator=",">
|
<foreach collection="list" item="item" separator=",">
|
||||||
(#{item.recruitId}, #{item.recruitName}, #{item.posName}, #{item.posCategory}, #{item.posDesc},
|
(#{item.recruitId}, #{item.recruitName}, #{item.posName}, #{item.posCategory}, #{item.posDesc},
|
||||||
#{item.candName}, #{item.candEdu}, #{item.candId}, #{item.candSchool}, #{item.candMajor}, #{item.candGrad},
|
#{item.candName}, #{item.recruitType}, #{item.candEdu}, #{item.candId}, #{item.candSchool}, #{item.candMajor}, #{item.candGrad},
|
||||||
#{item.admitStatus}, #{item.interviewerName1}, #{item.interviewerId1}, #{item.interviewerName2}, #{item.interviewerId2},
|
#{item.admitStatus}, #{item.interviewerName1}, #{item.interviewerId1}, #{item.interviewerName2}, #{item.interviewerId2},
|
||||||
#{item.createdBy}, NOW(), #{item.updatedBy}, NOW())
|
#{item.createdBy}, NOW(), #{item.updatedBy}, NOW())
|
||||||
</foreach>
|
</foreach>
|
||||||
@@ -100,6 +111,7 @@
|
|||||||
pos_category = #{item.posCategory},
|
pos_category = #{item.posCategory},
|
||||||
pos_desc = #{item.posDesc},
|
pos_desc = #{item.posDesc},
|
||||||
cand_name = #{item.candName},
|
cand_name = #{item.candName},
|
||||||
|
recruit_type = #{item.recruitType},
|
||||||
cand_edu = #{item.candEdu},
|
cand_edu = #{item.candEdu},
|
||||||
cand_id = #{item.candId},
|
cand_id = #{item.candId},
|
||||||
cand_school = #{item.candSchool},
|
cand_school = #{item.candSchool},
|
||||||
|
|||||||
@@ -110,6 +110,12 @@ public class GetBankStatementResponse {
|
|||||||
/** 对手方备注 */
|
/** 对手方备注 */
|
||||||
private String customerReference;
|
private String customerReference;
|
||||||
|
|
||||||
|
/** 交易对手方证件号 */
|
||||||
|
private String customerCertNo;
|
||||||
|
|
||||||
|
/** 交易对手方统一社会信用代码 */
|
||||||
|
private String customerSocialCreditCode;
|
||||||
|
|
||||||
// ===== 摘要和备注 =====
|
// ===== 摘要和备注 =====
|
||||||
|
|
||||||
/** 用户交易摘要 */
|
/** 用户交易摘要 */
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
package com.ruoyi.ccdi.project.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiEvidenceQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiEvidenceSaveDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiEvidenceVO;
|
||||||
|
import com.ruoyi.ccdi.project.service.ICcdiEvidenceService;
|
||||||
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据Controller
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/ccdi/evidence")
|
||||||
|
@Tag(name = "项目证据")
|
||||||
|
public class CcdiEvidenceController extends BaseController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ICcdiEvidenceService evidenceService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存证据
|
||||||
|
*/
|
||||||
|
@PostMapping
|
||||||
|
@Operation(summary = "保存证据")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult saveEvidence(@Validated @RequestBody CcdiEvidenceSaveDTO dto) {
|
||||||
|
CcdiEvidenceVO vo = evidenceService.saveEvidence(dto, SecurityUtils.getUsername());
|
||||||
|
return AjaxResult.success("证据入库成功", vo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目证据列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/list")
|
||||||
|
@Operation(summary = "查询项目证据列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult listEvidence(CcdiEvidenceQueryDTO queryDTO) {
|
||||||
|
List<CcdiEvidenceVO> list = evidenceService.listEvidence(queryDTO);
|
||||||
|
return AjaxResult.success(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询证据详情
|
||||||
|
*/
|
||||||
|
@GetMapping("/{evidenceId}")
|
||||||
|
@Operation(summary = "查询证据详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getEvidence(@PathVariable Long evidenceId) {
|
||||||
|
CcdiEvidenceVO vo = evidenceService.getEvidence(evidenceId);
|
||||||
|
return AjaxResult.success(vo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,18 +6,23 @@ import com.ruoyi.common.core.domain.AjaxResult;
|
|||||||
import com.ruoyi.common.core.page.PageDomain;
|
import com.ruoyi.common.core.page.PageDomain;
|
||||||
import com.ruoyi.common.core.page.TableDataInfo;
|
import com.ruoyi.common.core.page.TableDataInfo;
|
||||||
import com.ruoyi.common.core.page.TableSupport;
|
import com.ruoyi.common.core.page.TableSupport;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectImportHistoryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSaveDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSaveDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectHistoryListItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectStatusCountsVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectStatusCountsVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectVO;
|
||||||
import com.ruoyi.ccdi.project.service.ICcdiProjectService;
|
import com.ruoyi.ccdi.project.service.ICcdiProjectService;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 纪检初核项目管理Controller
|
* 纪检初核项目管理Controller
|
||||||
*
|
*
|
||||||
@@ -53,6 +58,17 @@ public class CcdiProjectController extends BaseController {
|
|||||||
return AjaxResult.success("项目更新成功", vo);
|
return AjaxResult.success("项目更新成功", vo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归档项目
|
||||||
|
*/
|
||||||
|
@PostMapping("/{projectId}/archive")
|
||||||
|
@Operation(summary = "归档项目")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:edit')")
|
||||||
|
public AjaxResult archiveProject(@PathVariable Long projectId) {
|
||||||
|
projectService.archiveProject(projectId, SecurityUtils.getUsername());
|
||||||
|
return AjaxResult.success("项目归档成功");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除项目
|
* 删除项目
|
||||||
*/
|
*/
|
||||||
@@ -88,6 +104,28 @@ public class CcdiProjectController extends BaseController {
|
|||||||
return getDataTable(result.getRecords(), result.getTotal());
|
return getDataTable(result.getRecords(), result.getTotal());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询历史项目列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/history")
|
||||||
|
@Operation(summary = "查询历史项目列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:list')")
|
||||||
|
public AjaxResult listHistoryProjects(CcdiProjectQueryDTO queryDTO) {
|
||||||
|
List<CcdiProjectHistoryListItemVO> result = projectService.listHistoryProjects(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从历史项目导入
|
||||||
|
*/
|
||||||
|
@PostMapping("/import")
|
||||||
|
@Operation(summary = "导入历史项目")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:add')")
|
||||||
|
public AjaxResult importFromHistory(@Validated @RequestBody CcdiProjectImportHistoryDTO dto) {
|
||||||
|
CcdiProjectVO vo = projectService.importFromHistory(dto, SecurityUtils.getUsername());
|
||||||
|
return AjaxResult.success("项目创建成功", vo);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询项目状态统计
|
* 查询项目状态统计
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,22 +1,36 @@
|
|||||||
package com.ruoyi.ccdi.project.controller;
|
package com.ruoyi.ccdi.project.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskPeopleQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.excel.CcdiProjectRiskPeopleOverviewExcel;
|
||||||
|
import com.ruoyi.ccdi.project.domain.excel.CcdiProjectSuspiciousTransactionExcel;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativePageVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectSuspiciousTransactionPageVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
||||||
import com.ruoyi.ccdi.project.service.ICcdiProjectOverviewService;
|
import com.ruoyi.ccdi.project.service.ICcdiProjectOverviewService;
|
||||||
|
import com.ruoyi.common.utils.poi.ExcelUtil;
|
||||||
import com.ruoyi.common.core.controller.BaseController;
|
import com.ruoyi.common.core.controller.BaseController;
|
||||||
import com.ruoyi.common.core.domain.AjaxResult;
|
import com.ruoyi.common.core.domain.AjaxResult;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 结果总览控制器
|
* 结果总览控制器
|
||||||
*/
|
*/
|
||||||
@@ -45,8 +59,8 @@ public class CcdiProjectOverviewController extends BaseController {
|
|||||||
@GetMapping("/risk-people")
|
@GetMapping("/risk-people")
|
||||||
@Operation(summary = "查询风险人员总览")
|
@Operation(summary = "查询风险人员总览")
|
||||||
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
public AjaxResult getRiskPeople(Long projectId) {
|
public AjaxResult getRiskPeople(CcdiProjectRiskPeopleQueryDTO queryDTO) {
|
||||||
CcdiProjectRiskPeopleOverviewVO overview = overviewService.getRiskPeopleOverview(projectId);
|
CcdiProjectRiskPeopleOverviewVO overview = overviewService.getRiskPeopleOverview(queryDTO);
|
||||||
return AjaxResult.success(overview);
|
return AjaxResult.success(overview);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -82,4 +96,76 @@ public class CcdiProjectOverviewController extends BaseController {
|
|||||||
CcdiProjectRiskModelPeopleVO people = overviewService.getRiskModelPeople(queryDTO);
|
CcdiProjectRiskModelPeopleVO people = overviewService.getRiskModelPeople(queryDTO);
|
||||||
return AjaxResult.success(people);
|
return AjaxResult.success(people);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目分析详情
|
||||||
|
*/
|
||||||
|
@GetMapping("/person-analysis/detail")
|
||||||
|
@Operation(summary = "查询项目分析详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getPersonAnalysisDetail(CcdiProjectPersonAnalysisDetailQueryDTO queryDTO) {
|
||||||
|
CcdiProjectPersonAnalysisDetailVO detail = overviewService.getPersonAnalysisDetail(queryDTO);
|
||||||
|
return AjaxResult.success(detail);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询涉疑交易明细
|
||||||
|
*/
|
||||||
|
@GetMapping("/suspicious-transactions")
|
||||||
|
@Operation(summary = "查询涉疑交易明细")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getSuspiciousTransactions(CcdiProjectSuspiciousTransactionQueryDTO queryDTO) {
|
||||||
|
CcdiProjectSuspiciousTransactionPageVO pageVO = overviewService.getSuspiciousTransactions(queryDTO);
|
||||||
|
return AjaxResult.success(pageVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目员工负面征信
|
||||||
|
*/
|
||||||
|
@GetMapping("/employee-credit-negative")
|
||||||
|
@Operation(summary = "查询项目员工负面征信")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getEmployeeCreditNegative(CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO) {
|
||||||
|
CcdiProjectEmployeeCreditNegativePageVO pageVO = overviewService.getEmployeeCreditNegative(queryDTO);
|
||||||
|
return AjaxResult.success(pageVO);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出涉疑交易明细
|
||||||
|
*/
|
||||||
|
@PostMapping("/suspicious-transactions/export")
|
||||||
|
@Operation(summary = "导出涉疑交易明细")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public void exportSuspiciousTransactions(
|
||||||
|
HttpServletResponse response,
|
||||||
|
CcdiProjectSuspiciousTransactionQueryDTO queryDTO
|
||||||
|
) {
|
||||||
|
List<CcdiProjectSuspiciousTransactionExcel> rows = overviewService.exportSuspiciousTransactions(queryDTO);
|
||||||
|
ExcelUtil<CcdiProjectSuspiciousTransactionExcel> util =
|
||||||
|
new ExcelUtil<>(CcdiProjectSuspiciousTransactionExcel.class);
|
||||||
|
util.exportExcel(response, rows, "涉疑交易明细");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出风险人员总览
|
||||||
|
*/
|
||||||
|
@PostMapping("/risk-people/export")
|
||||||
|
@Operation(summary = "导出风险人员总览")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public void exportRiskPeople(HttpServletResponse response, Long projectId) {
|
||||||
|
List<CcdiProjectRiskPeopleOverviewExcel> rows = overviewService.exportRiskPeopleOverview(projectId);
|
||||||
|
ExcelUtil<CcdiProjectRiskPeopleOverviewExcel> util =
|
||||||
|
new ExcelUtil<>(CcdiProjectRiskPeopleOverviewExcel.class);
|
||||||
|
util.exportExcel(response, rows, "风险人员总览");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出风险明细
|
||||||
|
*/
|
||||||
|
@PostMapping("/risk-details/export")
|
||||||
|
@Operation(summary = "导出风险明细")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public void exportRiskDetails(HttpServletResponse response, Long projectId) {
|
||||||
|
overviewService.exportRiskDetails(response, projectId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
package com.ruoyi.ccdi.project.controller;
|
package com.ruoyi.ccdi.project.controller;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedPurchaseDetailQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedPurchaseQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedRecruitmentDetailQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedRecruitmentQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedTransferDetailQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedTransferQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityDetailQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityDetailQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityListQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityListQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedPurchaseDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedPurchaseListVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedRecruitmentDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedRecruitmentListVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedTransferDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedTransferListVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityDetailVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityDetailVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityListVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityListVO;
|
||||||
import com.ruoyi.ccdi.project.service.ICcdiProjectSpecialCheckService;
|
import com.ruoyi.ccdi.project.service.ICcdiProjectSpecialCheckService;
|
||||||
@@ -48,4 +60,70 @@ public class CcdiProjectSpecialCheckController extends BaseController {
|
|||||||
CcdiProjectFamilyAssetLiabilityDetailVO result = specialCheckService.getFamilyAssetLiabilityDetail(queryDTO);
|
CcdiProjectFamilyAssetLiabilityDetailVO result = specialCheckService.getFamilyAssetLiabilityDetail(queryDTO);
|
||||||
return AjaxResult.success(result);
|
return AjaxResult.success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询采购拓展列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/extended-query/purchase/list")
|
||||||
|
@Operation(summary = "查询采购拓展列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getExtendedPurchaseList(@Validated CcdiProjectExtendedPurchaseQueryDTO queryDTO) {
|
||||||
|
CcdiProjectExtendedPurchaseListVO result = specialCheckService.getExtendedPurchaseList(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询采购拓展详情
|
||||||
|
*/
|
||||||
|
@GetMapping("/extended-query/purchase/detail")
|
||||||
|
@Operation(summary = "查询采购拓展详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getExtendedPurchaseDetail(@Validated CcdiProjectExtendedPurchaseDetailQueryDTO queryDTO) {
|
||||||
|
CcdiProjectExtendedPurchaseDetailVO result = specialCheckService.getExtendedPurchaseDetail(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询招聘拓展列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/extended-query/recruitment/list")
|
||||||
|
@Operation(summary = "查询招聘拓展列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getExtendedRecruitmentList(@Validated CcdiProjectExtendedRecruitmentQueryDTO queryDTO) {
|
||||||
|
CcdiProjectExtendedRecruitmentListVO result = specialCheckService.getExtendedRecruitmentList(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询招聘拓展详情
|
||||||
|
*/
|
||||||
|
@GetMapping("/extended-query/recruitment/detail")
|
||||||
|
@Operation(summary = "查询招聘拓展详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getExtendedRecruitmentDetail(@Validated CcdiProjectExtendedRecruitmentDetailQueryDTO queryDTO) {
|
||||||
|
CcdiProjectExtendedRecruitmentDetailVO result = specialCheckService.getExtendedRecruitmentDetail(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询调动拓展列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/extended-query/transfer/list")
|
||||||
|
@Operation(summary = "查询调动拓展列表")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getExtendedTransferList(@Validated CcdiProjectExtendedTransferQueryDTO queryDTO) {
|
||||||
|
CcdiProjectExtendedTransferListVO result = specialCheckService.getExtendedTransferList(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询调动拓展详情
|
||||||
|
*/
|
||||||
|
@GetMapping("/extended-query/transfer/detail")
|
||||||
|
@Operation(summary = "查询调动拓展详情")
|
||||||
|
@PreAuthorize("@ss.hasPermi('ccdi:project:query')")
|
||||||
|
public AjaxResult getExtendedTransferDetail(@Validated CcdiProjectExtendedTransferDetailQueryDTO queryDTO) {
|
||||||
|
CcdiProjectExtendedTransferDetailVO result = specialCheckService.getExtendedTransferDetail(queryDTO);
|
||||||
|
return AjaxResult.success(result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据查询入参
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiEvidenceQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 证据类型:FLOW/MODEL/ASSET */
|
||||||
|
private String evidenceType;
|
||||||
|
|
||||||
|
/** 关键词:姓名、标题、摘要、证据编号 */
|
||||||
|
private String keyword;
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存项目证据入参
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiEvidenceSaveDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 证据类型:FLOW/MODEL/ASSET */
|
||||||
|
@NotBlank(message = "证据类型不能为空")
|
||||||
|
private String evidenceType;
|
||||||
|
|
||||||
|
/** 关联人员姓名 */
|
||||||
|
@NotBlank(message = "关联人员不能为空")
|
||||||
|
private String relatedPersonName;
|
||||||
|
|
||||||
|
/** 关联人员标识 */
|
||||||
|
private String relatedPersonId;
|
||||||
|
|
||||||
|
/** 证据标题 */
|
||||||
|
@NotBlank(message = "证据标题不能为空")
|
||||||
|
private String evidenceTitle;
|
||||||
|
|
||||||
|
/** 证据摘要 */
|
||||||
|
@NotBlank(message = "证据摘要不能为空")
|
||||||
|
private String evidenceSummary;
|
||||||
|
|
||||||
|
/** 来源类型 */
|
||||||
|
@NotBlank(message = "来源类型不能为空")
|
||||||
|
private String sourceType;
|
||||||
|
|
||||||
|
/** 来源记录ID */
|
||||||
|
private String sourceRecordId;
|
||||||
|
|
||||||
|
/** 来源页面名称 */
|
||||||
|
private String sourcePage;
|
||||||
|
|
||||||
|
/** 证据快照JSON */
|
||||||
|
private String snapshotJson;
|
||||||
|
|
||||||
|
/** 确认理由/备注 */
|
||||||
|
@NotBlank(message = "确认理由/备注不能为空")
|
||||||
|
private String confirmReason;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目员工负面征信查询 DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectEmployeeCreditNegativeQueryDTO {
|
||||||
|
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
private Integer pageNum;
|
||||||
|
|
||||||
|
private Integer pageSize;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查采购拓展查询详情入参
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedPurchaseDetailQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 采购事项ID */
|
||||||
|
@NotBlank(message = "采购事项ID不能为空")
|
||||||
|
private String purchaseId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查采购拓展查询列表入参
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedPurchaseQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 申请人姓名 */
|
||||||
|
private String applicantName;
|
||||||
|
|
||||||
|
/** 申请日期开始 */
|
||||||
|
private String applyDateStart;
|
||||||
|
|
||||||
|
/** 申请日期结束 */
|
||||||
|
private String applyDateEnd;
|
||||||
|
|
||||||
|
/** 页码 */
|
||||||
|
private Integer pageNum = 1;
|
||||||
|
|
||||||
|
/** 每页条数 */
|
||||||
|
private Integer pageSize = 10;
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查招聘拓展查询详情入参
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedRecruitmentDetailQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 招聘项目编号 */
|
||||||
|
@NotBlank(message = "招聘项目编号不能为空")
|
||||||
|
private String recruitId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查招聘拓展查询列表入参
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedRecruitmentQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 面试官姓名 */
|
||||||
|
private String interviewerName;
|
||||||
|
|
||||||
|
/** 页码 */
|
||||||
|
private Integer pageNum = 1;
|
||||||
|
|
||||||
|
/** 每页条数 */
|
||||||
|
private Integer pageSize = 10;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查调动拓展查询详情入参
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedTransferDetailQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
@NotNull(message = "主键ID不能为空")
|
||||||
|
private Long id;
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查调动拓展查询列表入参
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedTransferQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
@NotNull(message = "项目ID不能为空")
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 员工姓名 */
|
||||||
|
private String staffName;
|
||||||
|
|
||||||
|
/** 调动日期开始 */
|
||||||
|
private String transferDateStart;
|
||||||
|
|
||||||
|
/** 调动日期结束 */
|
||||||
|
private String transferDateEnd;
|
||||||
|
|
||||||
|
/** 页码 */
|
||||||
|
private Integer pageNum = 1;
|
||||||
|
|
||||||
|
/** 每页条数 */
|
||||||
|
private Integer pageSize = 10;
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.hibernate.validator.constraints.Length;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 历史项目导入DTO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectImportHistoryDTO {
|
||||||
|
|
||||||
|
/** 新项目名称 */
|
||||||
|
@NotBlank(message = "项目名称不能为空")
|
||||||
|
@Length(max = 200, message = "项目名称长度不能超过200个字符")
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
/** 项目描述 */
|
||||||
|
@Length(max = 500, message = "项目描述长度不能超过500个字符")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/** 来源项目ID列表 */
|
||||||
|
@NotEmpty(message = "来源项目不能为空")
|
||||||
|
private List<Long> sourceProjectIds;
|
||||||
|
|
||||||
|
/** 流水起始日期 */
|
||||||
|
private String startDate;
|
||||||
|
|
||||||
|
/** 流水结束日期 */
|
||||||
|
private String endDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析详情查询DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisDetailQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 员工身份证号 */
|
||||||
|
private String staffIdCard;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 风险人员总览查询 DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectRiskPeopleQueryDTO {
|
||||||
|
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
private Integer pageNum;
|
||||||
|
|
||||||
|
private Integer pageSize;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉疑交易明细查询DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectSuspiciousTransactionQueryDTO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 涉疑类型 */
|
||||||
|
private String suspiciousType;
|
||||||
|
|
||||||
|
/** 页码 */
|
||||||
|
private Integer pageNum;
|
||||||
|
|
||||||
|
/** 每页数量 */
|
||||||
|
private Integer pageSize;
|
||||||
|
}
|
||||||
@@ -112,6 +112,12 @@ public class CcdiBankStatement implements Serializable {
|
|||||||
/** 对手方备注 */
|
/** 对手方备注 */
|
||||||
private String customerReference;
|
private String customerReference;
|
||||||
|
|
||||||
|
/** 交易对手方证件号 */
|
||||||
|
private String customerCertNo;
|
||||||
|
|
||||||
|
/** 交易对手方统一社会信用代码 */
|
||||||
|
private String customerSocialCreditCode;
|
||||||
|
|
||||||
// ===== 摘要和备注 =====
|
// ===== 摘要和备注 =====
|
||||||
|
|
||||||
/** 用户交易摘要 */
|
/** 用户交易摘要 */
|
||||||
@@ -199,6 +205,8 @@ public class CcdiBankStatement implements Serializable {
|
|||||||
entity.setCustomerLeId(item.getCustomerId());
|
entity.setCustomerLeId(item.getCustomerId());
|
||||||
entity.setCustomerAccountName(item.getCustomerName());
|
entity.setCustomerAccountName(item.getCustomerName());
|
||||||
entity.setBatchSequence(item.getUploadSequnceNumber());
|
entity.setBatchSequence(item.getUploadSequnceNumber());
|
||||||
|
entity.setCustomerCertNo(item.getCustomerCertNo());
|
||||||
|
entity.setCustomerSocialCreditCode(item.getCustomerSocialCreditCode());
|
||||||
|
|
||||||
// 5. 特殊字段处理
|
// 5. 特殊字段处理
|
||||||
entity.setMetaJson(null); // 根据文档要求强制设为 null
|
entity.setMetaJson(null); // 根据文档要求强制设为 null
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package com.ruoyi.ccdi.project.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.baomidou.mybatisplus.annotation.TableName;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据对象 ccdi_evidence
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@TableName("ccdi_evidence")
|
||||||
|
public class CcdiEvidence implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/** 证据ID */
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long evidenceId;
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 证据类型:FLOW/MODEL/ASSET */
|
||||||
|
private String evidenceType;
|
||||||
|
|
||||||
|
/** 关联人员姓名 */
|
||||||
|
private String relatedPersonName;
|
||||||
|
|
||||||
|
/** 关联人员标识,优先存身份证号或员工号 */
|
||||||
|
private String relatedPersonId;
|
||||||
|
|
||||||
|
/** 证据标题 */
|
||||||
|
private String evidenceTitle;
|
||||||
|
|
||||||
|
/** 证据摘要 */
|
||||||
|
private String evidenceSummary;
|
||||||
|
|
||||||
|
/** 来源类型:BANK_STATEMENT/MODEL_DETAIL/ASSET_DETAIL */
|
||||||
|
private String sourceType;
|
||||||
|
|
||||||
|
/** 来源记录ID */
|
||||||
|
private String sourceRecordId;
|
||||||
|
|
||||||
|
/** 来源页面名称 */
|
||||||
|
private String sourcePage;
|
||||||
|
|
||||||
|
/** 证据快照JSON */
|
||||||
|
private String snapshotJson;
|
||||||
|
|
||||||
|
/** 确认理由/备注 */
|
||||||
|
private String confirmReason;
|
||||||
|
|
||||||
|
/** 确认人 */
|
||||||
|
private String confirmBy;
|
||||||
|
|
||||||
|
/** 确认时间 */
|
||||||
|
private Date confirmTime;
|
||||||
|
|
||||||
|
/** 创建者 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private String createBy;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
/** 更新者 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private String updateBy;
|
||||||
|
|
||||||
|
/** 更新时间 */
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -44,6 +44,15 @@ public class CcdiFileUploadRecord implements Serializable {
|
|||||||
/** 文件状态:uploading-上传中,parsing-解析中,parsed_success-解析成功,parsed_failed-解析失败 */
|
/** 文件状态:uploading-上传中,parsing-解析中,parsed_success-解析成功,parsed_failed-解析失败 */
|
||||||
private String fileStatus;
|
private String fileStatus;
|
||||||
|
|
||||||
|
/** 来源类型 */
|
||||||
|
private String sourceType;
|
||||||
|
|
||||||
|
/** 来源项目ID */
|
||||||
|
private Long sourceProjectId;
|
||||||
|
|
||||||
|
/** 来源项目名称 */
|
||||||
|
private String sourceProjectName;
|
||||||
|
|
||||||
/** 主体名称(多个用逗号分隔) */
|
/** 主体名称(多个用逗号分隔) */
|
||||||
private String enterpriseNames;
|
private String enterpriseNames;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.event;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectImportHistoryDTO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 历史项目导入提交事件
|
||||||
|
*/
|
||||||
|
public class CcdiProjectHistoryImportSubmittedEvent {
|
||||||
|
|
||||||
|
private final Long targetProjectId;
|
||||||
|
private final Integer targetLsfxProjectId;
|
||||||
|
private final CcdiProjectImportHistoryDTO dto;
|
||||||
|
private final String operator;
|
||||||
|
|
||||||
|
public CcdiProjectHistoryImportSubmittedEvent(Long targetProjectId, Integer targetLsfxProjectId,
|
||||||
|
CcdiProjectImportHistoryDTO dto, String operator) {
|
||||||
|
this.targetProjectId = targetProjectId;
|
||||||
|
this.targetLsfxProjectId = targetLsfxProjectId;
|
||||||
|
this.dto = dto;
|
||||||
|
this.operator = operator;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getTargetProjectId() {
|
||||||
|
return targetProjectId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getTargetLsfxProjectId() {
|
||||||
|
return targetLsfxProjectId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CcdiProjectImportHistoryDTO getDto() {
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOperator() {
|
||||||
|
return operator;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.excel;
|
||||||
|
|
||||||
|
import com.ruoyi.common.annotation.Excel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目员工负面征信导出对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectEmployeeCreditNegativeExcel {
|
||||||
|
|
||||||
|
@Excel(name = "员工姓名")
|
||||||
|
private String personName;
|
||||||
|
|
||||||
|
@Excel(name = "身份证号")
|
||||||
|
private String personId;
|
||||||
|
|
||||||
|
@Excel(name = "最近征信查询日期")
|
||||||
|
private String queryDate;
|
||||||
|
|
||||||
|
@Excel(name = "民事案件笔数")
|
||||||
|
private Integer civilCnt;
|
||||||
|
|
||||||
|
@Excel(name = "民事案件金额")
|
||||||
|
private BigDecimal civilLmt;
|
||||||
|
|
||||||
|
@Excel(name = "强制执行笔数")
|
||||||
|
private Integer enforceCnt;
|
||||||
|
|
||||||
|
@Excel(name = "强制执行金额")
|
||||||
|
private BigDecimal enforceLmt;
|
||||||
|
|
||||||
|
@Excel(name = "行政处罚笔数")
|
||||||
|
private Integer admCnt;
|
||||||
|
|
||||||
|
@Excel(name = "行政处罚金额")
|
||||||
|
private BigDecimal admLmt;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.excel;
|
||||||
|
|
||||||
|
import com.ruoyi.common.annotation.Excel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 风险人员总览导出对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectRiskPeopleOverviewExcel {
|
||||||
|
|
||||||
|
@Excel(name = "姓名")
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
@Excel(name = "身份证号")
|
||||||
|
private String idNo;
|
||||||
|
|
||||||
|
@Excel(name = "所属部门")
|
||||||
|
private String department;
|
||||||
|
|
||||||
|
@Excel(name = "疑似违规数")
|
||||||
|
private Integer riskCount;
|
||||||
|
|
||||||
|
@Excel(name = "风险等级")
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
@Excel(name = "命中模型数")
|
||||||
|
private Integer modelCount;
|
||||||
|
|
||||||
|
@Excel(name = "核心异常点")
|
||||||
|
private String riskPoint;
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.excel;
|
||||||
|
|
||||||
|
import com.ruoyi.common.annotation.Excel;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉疑交易导出对象
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectSuspiciousTransactionExcel {
|
||||||
|
|
||||||
|
@Excel(name = "交易时间")
|
||||||
|
private String trxDate;
|
||||||
|
|
||||||
|
@Excel(name = "可疑人员")
|
||||||
|
private String suspiciousPersonName;
|
||||||
|
|
||||||
|
@Excel(name = "关联人")
|
||||||
|
private String relatedPersonName;
|
||||||
|
|
||||||
|
@Excel(name = "关联员工")
|
||||||
|
private String relatedStaffDisplay;
|
||||||
|
|
||||||
|
@Excel(name = "关系")
|
||||||
|
private String relationType;
|
||||||
|
|
||||||
|
@Excel(name = "摘要/交易类型")
|
||||||
|
private String summaryAndCashType;
|
||||||
|
|
||||||
|
@Excel(name = "交易金额")
|
||||||
|
private BigDecimal displayAmount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据返回对象
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiEvidenceVO {
|
||||||
|
|
||||||
|
/** 证据ID */
|
||||||
|
private Long evidenceId;
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 证据类型:FLOW/MODEL/ASSET */
|
||||||
|
private String evidenceType;
|
||||||
|
|
||||||
|
/** 关联人员姓名 */
|
||||||
|
private String relatedPersonName;
|
||||||
|
|
||||||
|
/** 关联人员标识 */
|
||||||
|
private String relatedPersonId;
|
||||||
|
|
||||||
|
/** 证据标题 */
|
||||||
|
private String evidenceTitle;
|
||||||
|
|
||||||
|
/** 证据摘要 */
|
||||||
|
private String evidenceSummary;
|
||||||
|
|
||||||
|
/** 来源类型 */
|
||||||
|
private String sourceType;
|
||||||
|
|
||||||
|
/** 来源记录ID */
|
||||||
|
private String sourceRecordId;
|
||||||
|
|
||||||
|
/** 来源页面名称 */
|
||||||
|
private String sourcePage;
|
||||||
|
|
||||||
|
/** 证据快照JSON */
|
||||||
|
private String snapshotJson;
|
||||||
|
|
||||||
|
/** 确认理由/备注 */
|
||||||
|
private String confirmReason;
|
||||||
|
|
||||||
|
/** 确认人 */
|
||||||
|
private String confirmBy;
|
||||||
|
|
||||||
|
/** 确认时间 */
|
||||||
|
private Date confirmTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目员工负面征信行
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectEmployeeCreditNegativeItemVO {
|
||||||
|
|
||||||
|
private String personName;
|
||||||
|
|
||||||
|
private String personId;
|
||||||
|
|
||||||
|
private String queryDate;
|
||||||
|
|
||||||
|
private Integer civilCnt;
|
||||||
|
|
||||||
|
private BigDecimal civilLmt;
|
||||||
|
|
||||||
|
private Integer enforceCnt;
|
||||||
|
|
||||||
|
private BigDecimal enforceLmt;
|
||||||
|
|
||||||
|
private Integer admCnt;
|
||||||
|
|
||||||
|
private BigDecimal admLmt;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目员工负面征信分页结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectEmployeeCreditNegativePageVO {
|
||||||
|
|
||||||
|
private List<CcdiProjectEmployeeCreditNegativeItemVO> rows = new ArrayList<>();
|
||||||
|
|
||||||
|
private Long total = 0L;
|
||||||
|
}
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查采购拓展查询详情
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedPurchaseDetailVO {
|
||||||
|
|
||||||
|
private String purchaseId;
|
||||||
|
|
||||||
|
private String purchaseCategory;
|
||||||
|
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
private String subjectName;
|
||||||
|
|
||||||
|
private String subjectDesc;
|
||||||
|
|
||||||
|
private BigDecimal purchaseQty;
|
||||||
|
|
||||||
|
private BigDecimal budgetAmount;
|
||||||
|
|
||||||
|
private BigDecimal bidAmount;
|
||||||
|
|
||||||
|
private BigDecimal actualAmount;
|
||||||
|
|
||||||
|
private BigDecimal contractAmount;
|
||||||
|
|
||||||
|
private BigDecimal settlementAmount;
|
||||||
|
|
||||||
|
private String purchaseMethod;
|
||||||
|
|
||||||
|
private String supplierName;
|
||||||
|
|
||||||
|
private String contactPerson;
|
||||||
|
|
||||||
|
private String contactPhone;
|
||||||
|
|
||||||
|
private String supplierUscc;
|
||||||
|
|
||||||
|
private String supplierBankAccount;
|
||||||
|
|
||||||
|
private String applyDate;
|
||||||
|
|
||||||
|
private String planApproveDate;
|
||||||
|
|
||||||
|
private String announceDate;
|
||||||
|
|
||||||
|
private String bidOpenDate;
|
||||||
|
|
||||||
|
private String contractSignDate;
|
||||||
|
|
||||||
|
private String expectedDeliveryDate;
|
||||||
|
|
||||||
|
private String actualDeliveryDate;
|
||||||
|
|
||||||
|
private String acceptanceDate;
|
||||||
|
|
||||||
|
private String settlementDate;
|
||||||
|
|
||||||
|
private String applicantId;
|
||||||
|
|
||||||
|
private String applicantName;
|
||||||
|
|
||||||
|
private String applyDepartment;
|
||||||
|
|
||||||
|
private String purchaseLeaderId;
|
||||||
|
|
||||||
|
private String purchaseLeaderName;
|
||||||
|
|
||||||
|
private String purchaseDepartment;
|
||||||
|
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
private String createTime;
|
||||||
|
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
private String updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查采购拓展查询列表项
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedPurchaseListItemVO {
|
||||||
|
|
||||||
|
/** 采购事项ID */
|
||||||
|
private String purchaseId;
|
||||||
|
|
||||||
|
/** 项目名称 */
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
/** 标的物名称 */
|
||||||
|
private String subjectName;
|
||||||
|
|
||||||
|
/** 申请人姓名 */
|
||||||
|
private String applicantName;
|
||||||
|
|
||||||
|
/** 申请日期 */
|
||||||
|
private String applyDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查采购拓展查询列表结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedPurchaseListVO {
|
||||||
|
|
||||||
|
/** 列表数据 */
|
||||||
|
private List<CcdiProjectExtendedPurchaseListItemVO> rows;
|
||||||
|
|
||||||
|
/** 总数 */
|
||||||
|
private Long total;
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查招聘拓展查询详情
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedRecruitmentDetailVO {
|
||||||
|
|
||||||
|
private String recruitId;
|
||||||
|
|
||||||
|
private String recruitName;
|
||||||
|
|
||||||
|
private String posName;
|
||||||
|
|
||||||
|
private String posCategory;
|
||||||
|
|
||||||
|
private String posDesc;
|
||||||
|
|
||||||
|
private String candName;
|
||||||
|
|
||||||
|
private String candEdu;
|
||||||
|
|
||||||
|
private String candId;
|
||||||
|
|
||||||
|
private String candSchool;
|
||||||
|
|
||||||
|
private String candMajor;
|
||||||
|
|
||||||
|
private String candGrad;
|
||||||
|
|
||||||
|
private String admitStatus;
|
||||||
|
|
||||||
|
private String interviewerName1;
|
||||||
|
|
||||||
|
private String interviewerId1;
|
||||||
|
|
||||||
|
private String interviewerName2;
|
||||||
|
|
||||||
|
private String interviewerId2;
|
||||||
|
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查招聘拓展查询列表项
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedRecruitmentListItemVO {
|
||||||
|
|
||||||
|
/** 招聘项目编号 */
|
||||||
|
private String recruitId;
|
||||||
|
|
||||||
|
/** 招聘项目名称 */
|
||||||
|
private String recruitName;
|
||||||
|
|
||||||
|
/** 职位名称 */
|
||||||
|
private String posName;
|
||||||
|
|
||||||
|
/** 面试官摘要 */
|
||||||
|
private String interviewerNameSummary;
|
||||||
|
|
||||||
|
/** 录用情况 */
|
||||||
|
private String admitStatus;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查招聘拓展查询列表结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedRecruitmentListVO {
|
||||||
|
|
||||||
|
/** 列表数据 */
|
||||||
|
private List<CcdiProjectExtendedRecruitmentListItemVO> rows;
|
||||||
|
|
||||||
|
/** 总数 */
|
||||||
|
private Long total;
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查调动拓展查询详情
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedTransferDetailVO {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private Long staffId;
|
||||||
|
|
||||||
|
private String staffName;
|
||||||
|
|
||||||
|
private String transferType;
|
||||||
|
|
||||||
|
private String transferSubType;
|
||||||
|
|
||||||
|
private Long deptIdBefore;
|
||||||
|
|
||||||
|
private String deptNameBefore;
|
||||||
|
|
||||||
|
private String gradeBefore;
|
||||||
|
|
||||||
|
private String positionBefore;
|
||||||
|
|
||||||
|
private String salaryLevelBefore;
|
||||||
|
|
||||||
|
private Long deptIdAfter;
|
||||||
|
|
||||||
|
private String deptNameAfter;
|
||||||
|
|
||||||
|
private String gradeAfter;
|
||||||
|
|
||||||
|
private String positionAfter;
|
||||||
|
|
||||||
|
private String salaryLevelAfter;
|
||||||
|
|
||||||
|
private Date transferDate;
|
||||||
|
|
||||||
|
private String createdBy;
|
||||||
|
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
private String updatedBy;
|
||||||
|
|
||||||
|
private Date updateTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查调动拓展查询列表项
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedTransferListItemVO {
|
||||||
|
|
||||||
|
/** 主键ID */
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/** 员工姓名 */
|
||||||
|
private String staffName;
|
||||||
|
|
||||||
|
/** 调动类型 */
|
||||||
|
private String transferType;
|
||||||
|
|
||||||
|
/** 调动前部门 */
|
||||||
|
private String deptNameBefore;
|
||||||
|
|
||||||
|
/** 调动后部门 */
|
||||||
|
private String deptNameAfter;
|
||||||
|
|
||||||
|
/** 调动日期 */
|
||||||
|
private String transferDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 专项核查调动拓展查询列表结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectExtendedTransferListVO {
|
||||||
|
|
||||||
|
/** 列表数据 */
|
||||||
|
private List<CcdiProjectExtendedTransferListItemVO> rows;
|
||||||
|
|
||||||
|
/** 总数 */
|
||||||
|
private Long total;
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 历史项目列表项VO
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectHistoryListItemVO {
|
||||||
|
|
||||||
|
/** 项目ID */
|
||||||
|
private Long projectId;
|
||||||
|
|
||||||
|
/** 项目名称 */
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
/** 项目描述 */
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/** 项目状态 */
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/** 是否归档 */
|
||||||
|
private Integer isArchived;
|
||||||
|
|
||||||
|
/** 创建时间 */
|
||||||
|
private Date createTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析异常明细
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisAbnormalDetailVO {
|
||||||
|
|
||||||
|
private List<CcdiProjectPersonAnalysisAbnormalGroupVO> groups;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析异常分组
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisAbnormalGroupVO {
|
||||||
|
|
||||||
|
private String groupCode;
|
||||||
|
|
||||||
|
private String groupName;
|
||||||
|
|
||||||
|
private String groupType;
|
||||||
|
|
||||||
|
private List<?> records;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析人员基础信息
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisBasicInfoVO {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String idNo;
|
||||||
|
|
||||||
|
private String staffCode;
|
||||||
|
|
||||||
|
private String department;
|
||||||
|
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
private String riskLevel;
|
||||||
|
|
||||||
|
private String projectName;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析详情
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisDetailVO {
|
||||||
|
|
||||||
|
private CcdiProjectPersonAnalysisBasicInfoVO basicInfo;
|
||||||
|
|
||||||
|
private CcdiProjectPersonAnalysisAbnormalDetailVO abnormalDetail;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析对象型异常补充字段
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisObjectFieldVO {
|
||||||
|
|
||||||
|
private String label;
|
||||||
|
|
||||||
|
private String value;
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目分析对象型异常记录
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectPersonAnalysisObjectRecordVO {
|
||||||
|
|
||||||
|
private String modelCode;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private String subtitle;
|
||||||
|
|
||||||
|
private List<String> riskTags;
|
||||||
|
|
||||||
|
private String reasonDetail;
|
||||||
|
|
||||||
|
private String summary;
|
||||||
|
|
||||||
|
private List<CcdiProjectPersonAnalysisObjectFieldVO> extraFields = new ArrayList<>();
|
||||||
|
}
|
||||||
@@ -9,5 +9,11 @@ import lombok.Data;
|
|||||||
@Data
|
@Data
|
||||||
public class CcdiProjectRiskPeopleOverviewVO {
|
public class CcdiProjectRiskPeopleOverviewVO {
|
||||||
|
|
||||||
private List<CcdiProjectRiskPeopleOverviewItemVO> overviewList;
|
private List<CcdiProjectRiskPeopleOverviewItemVO> rows;
|
||||||
|
|
||||||
|
private Long total;
|
||||||
|
|
||||||
|
private Long pageNum;
|
||||||
|
|
||||||
|
private Long pageSize;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉疑交易明细行
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectSuspiciousTransactionItemVO {
|
||||||
|
|
||||||
|
private Long bankStatementId;
|
||||||
|
|
||||||
|
private String trxDate;
|
||||||
|
|
||||||
|
private String suspiciousPersonName;
|
||||||
|
|
||||||
|
private String relatedPersonName;
|
||||||
|
|
||||||
|
private String relatedStaffName;
|
||||||
|
|
||||||
|
private String relatedStaffCode;
|
||||||
|
|
||||||
|
private String relationType;
|
||||||
|
|
||||||
|
private String userMemo;
|
||||||
|
|
||||||
|
private String cashType;
|
||||||
|
|
||||||
|
private BigDecimal displayAmount;
|
||||||
|
|
||||||
|
private Boolean hasModelRuleHit;
|
||||||
|
|
||||||
|
private Boolean hasNameListHit;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.ruoyi.ccdi.project.domain.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 涉疑交易分页结果
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class CcdiProjectSuspiciousTransactionPageVO {
|
||||||
|
|
||||||
|
private List<CcdiProjectSuspiciousTransactionItemVO> rows;
|
||||||
|
|
||||||
|
private Long total;
|
||||||
|
}
|
||||||
@@ -30,6 +30,11 @@ public interface CcdiBankStatementMapper extends BaseMapper<CcdiBankStatement> {
|
|||||||
int deleteByProjectIdAndBatchId(@Param("projectId") Long projectId,
|
int deleteByProjectIdAndBatchId(@Param("projectId") Long projectId,
|
||||||
@Param("batchId") Integer batchId);
|
@Param("batchId") Integer batchId);
|
||||||
|
|
||||||
|
List<CcdiBankStatement> selectStatementsForHistoryImport(@Param("projectId") Long projectId,
|
||||||
|
@Param("batchId") Integer batchId,
|
||||||
|
@Param("startDate") String startDate,
|
||||||
|
@Param("endDate") String endDate);
|
||||||
|
|
||||||
Page<CcdiBankStatementListVO> selectStatementPage(Page<CcdiBankStatementListVO> page,
|
Page<CcdiBankStatementListVO> selectStatementPage(Page<CcdiBankStatementListVO> page,
|
||||||
@Param("query") CcdiBankStatementQueryDTO query);
|
@Param("query") CcdiBankStatementQueryDTO query);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.ruoyi.ccdi.project.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.ruoyi.ccdi.project.domain.entity.CcdiEvidence;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据Mapper接口
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public interface CcdiEvidenceMapper extends BaseMapper<CcdiEvidence> {
|
||||||
|
}
|
||||||
@@ -25,6 +25,14 @@ public interface CcdiFileUploadRecordMapper extends BaseMapper<CcdiFileUploadRec
|
|||||||
*/
|
*/
|
||||||
int insertBatch(@Param("list") List<CcdiFileUploadRecord> records);
|
int insertBatch(@Param("list") List<CcdiFileUploadRecord> records);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询来源项目中解析成功且具备logId的文件记录
|
||||||
|
*
|
||||||
|
* @param projectIds 来源项目ID列表
|
||||||
|
* @return 文件记录列表
|
||||||
|
*/
|
||||||
|
List<CcdiFileUploadRecord> selectSuccessfulRecordsByProjectIds(@Param("projectIds") List<Long> projectIds);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计各状态文件数量
|
* 统计各状态文件数量
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -4,10 +4,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectHistoryListItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectVO;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目Mapper接口
|
* 项目Mapper接口
|
||||||
*
|
*
|
||||||
@@ -24,6 +27,14 @@ public interface CcdiProjectMapper extends BaseMapper<CcdiProject> {
|
|||||||
*/
|
*/
|
||||||
Page<CcdiProjectVO> selectProjectPage(Page<CcdiProjectVO> page, @Param("queryDTO") CcdiProjectQueryDTO queryDTO);
|
Page<CcdiProjectVO> selectProjectPage(Page<CcdiProjectVO> page, @Param("queryDTO") CcdiProjectQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询历史项目列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 历史项目列表
|
||||||
|
*/
|
||||||
|
List<CcdiProjectHistoryListItemVO> selectHistoryProjects(@Param("queryDTO") CcdiProjectQueryDTO queryDTO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新项目风险人数
|
* 更新项目风险人数
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,12 +1,20 @@
|
|||||||
package com.ruoyi.ccdi.project.mapper;
|
package com.ruoyi.ccdi.project.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
|
||||||
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
import com.ruoyi.ccdi.project.domain.CcdiProject;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskPeopleQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiBankStatementListVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativeItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeRiskAggregateVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisBasicInfoVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisObjectRecordVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskHitTagVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskHitTagVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleItemVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleItemVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectSuspiciousTransactionItemVO;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
@@ -29,10 +37,22 @@ public interface CcdiProjectOverviewMapper {
|
|||||||
/**
|
/**
|
||||||
* 查询风险人员总览
|
* 查询风险人员总览
|
||||||
*
|
*
|
||||||
|
* @param page 分页参数
|
||||||
|
* @param query 查询条件
|
||||||
|
* @return 风险人员聚合分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiProjectEmployeeRiskAggregateVO> selectRiskPeopleOverviewPage(
|
||||||
|
Page<CcdiProjectEmployeeRiskAggregateVO> page,
|
||||||
|
@Param("query") CcdiProjectRiskPeopleQueryDTO query
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询风险人员总览导出列表
|
||||||
|
*
|
||||||
* @param projectId 项目ID
|
* @param projectId 项目ID
|
||||||
* @return 风险人员聚合列表
|
* @return 风险人员聚合列表
|
||||||
*/
|
*/
|
||||||
List<CcdiProjectEmployeeRiskAggregateVO> selectRiskPeopleOverviewByProjectId(@Param("projectId") Long projectId);
|
List<CcdiProjectEmployeeRiskAggregateVO> selectRiskPeopleOverviewList(@Param("projectId") Long projectId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询中高风险TOP10
|
* 查询中高风险TOP10
|
||||||
@@ -62,6 +82,48 @@ public interface CcdiProjectOverviewMapper {
|
|||||||
@Param("query") CcdiProjectRiskModelPeopleQueryDTO query
|
@Param("query") CcdiProjectRiskModelPeopleQueryDTO query
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询涉疑交易明细
|
||||||
|
*
|
||||||
|
* @param page 分页参数
|
||||||
|
* @param query 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiProjectSuspiciousTransactionItemVO> selectSuspiciousTransactionPage(
|
||||||
|
Page<CcdiProjectSuspiciousTransactionItemVO> page,
|
||||||
|
@Param("query") CcdiProjectSuspiciousTransactionQueryDTO query
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询项目员工负面征信
|
||||||
|
*
|
||||||
|
* @param page 分页参数
|
||||||
|
* @param query 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiProjectEmployeeCreditNegativeItemVO> selectEmployeeCreditNegativePage(
|
||||||
|
Page<CcdiProjectEmployeeCreditNegativeItemVO> page,
|
||||||
|
@Param("query") CcdiProjectEmployeeCreditNegativeQueryDTO query
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目员工负面征信导出列表
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
List<CcdiProjectEmployeeCreditNegativeItemVO> selectEmployeeCreditNegativeList(@Param("projectId") Long projectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询涉疑交易导出列表
|
||||||
|
*
|
||||||
|
* @param query 查询条件
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
List<CcdiProjectSuspiciousTransactionItemVO> selectSuspiciousTransactionList(
|
||||||
|
@Param("query") CcdiProjectSuspiciousTransactionQueryDTO query
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按员工范围查询命中标签
|
* 按员工范围查询命中标签
|
||||||
*
|
*
|
||||||
@@ -76,6 +138,42 @@ public interface CcdiProjectOverviewMapper {
|
|||||||
@Param("selectedModelCodes") String selectedModelCodes
|
@Param("selectedModelCodes") String selectedModelCodes
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目分析基础信息
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param staffIdCard 员工身份证号
|
||||||
|
* @return 项目分析基础信息
|
||||||
|
*/
|
||||||
|
CcdiProjectPersonAnalysisBasicInfoVO selectPersonAnalysisBasicInfo(
|
||||||
|
@Param("projectId") Long projectId,
|
||||||
|
@Param("staffIdCard") String staffIdCard
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目分析流水异常明细
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param staffIdCard 员工身份证号
|
||||||
|
* @return 流水异常明细
|
||||||
|
*/
|
||||||
|
List<CcdiBankStatementListVO> selectPersonAnalysisStatementRows(
|
||||||
|
@Param("projectId") Long projectId,
|
||||||
|
@Param("staffIdCard") String staffIdCard
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目分析对象型异常记录
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param staffIdCard 员工身份证号
|
||||||
|
* @return 对象型异常记录
|
||||||
|
*/
|
||||||
|
List<CcdiProjectPersonAnalysisObjectRecordVO> selectPersonAnalysisObjectRows(
|
||||||
|
@Param("projectId") Long projectId,
|
||||||
|
@Param("staffIdCard") String staffIdCard
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询项目风险人数汇总
|
* 查询项目风险人数汇总
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
package com.ruoyi.ccdi.project.mapper;
|
package com.ruoyi.ccdi.project.mapper;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedPurchaseQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedRecruitmentQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedTransferQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedPurchaseDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedPurchaseListItemVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedRecruitmentDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedRecruitmentListItemVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedTransferDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedTransferListItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetItemVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityDetailVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityDetailVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityListItemVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityListItemVO;
|
||||||
@@ -61,4 +71,76 @@ public interface CcdiProjectSpecialCheckMapper {
|
|||||||
@Param("staffIdCard") String staffIdCard,
|
@Param("staffIdCard") String staffIdCard,
|
||||||
@Param("spouseIdCard") String spouseIdCard
|
@Param("spouseIdCard") String spouseIdCard
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询专项核查采购拓展列表
|
||||||
|
*
|
||||||
|
* @param page 分页对象
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiProjectExtendedPurchaseListItemVO> selectExtendedPurchasePage(
|
||||||
|
@Param("page") Page<CcdiProjectExtendedPurchaseListItemVO> page,
|
||||||
|
@Param("query") CcdiProjectExtendedPurchaseQueryDTO queryDTO
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询专项核查采购拓展详情
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param purchaseId 采购事项ID
|
||||||
|
* @return 详情
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedPurchaseDetailVO selectExtendedPurchaseDetail(
|
||||||
|
@Param("projectId") Long projectId,
|
||||||
|
@Param("purchaseId") String purchaseId
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询专项核查招聘拓展列表
|
||||||
|
*
|
||||||
|
* @param page 分页对象
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiProjectExtendedRecruitmentListItemVO> selectExtendedRecruitmentPage(
|
||||||
|
@Param("page") Page<CcdiProjectExtendedRecruitmentListItemVO> page,
|
||||||
|
@Param("query") CcdiProjectExtendedRecruitmentQueryDTO queryDTO
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询专项核查招聘拓展详情
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param recruitId 招聘项目编号
|
||||||
|
* @return 详情
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedRecruitmentDetailVO selectExtendedRecruitmentDetail(
|
||||||
|
@Param("projectId") Long projectId,
|
||||||
|
@Param("recruitId") String recruitId
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询专项核查调动拓展列表
|
||||||
|
*
|
||||||
|
* @param page 分页对象
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
Page<CcdiProjectExtendedTransferListItemVO> selectExtendedTransferPage(
|
||||||
|
@Param("page") Page<CcdiProjectExtendedTransferListItemVO> page,
|
||||||
|
@Param("query") CcdiProjectExtendedTransferQueryDTO queryDTO
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询专项核查调动拓展详情
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param id 主键ID
|
||||||
|
* @return 详情
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedTransferDetailVO selectExtendedTransferDetail(
|
||||||
|
@Param("projectId") Long projectId,
|
||||||
|
@Param("id") Long id
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package com.ruoyi.ccdi.project.service;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiEvidenceQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiEvidenceSaveDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiEvidenceVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据Service接口
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public interface ICcdiEvidenceService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存证据
|
||||||
|
*
|
||||||
|
* @param dto 保存入参
|
||||||
|
* @param operator 操作人
|
||||||
|
* @return 证据
|
||||||
|
*/
|
||||||
|
CcdiEvidenceVO saveEvidence(CcdiEvidenceSaveDTO dto, String operator);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目证据列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询入参
|
||||||
|
* @return 证据列表
|
||||||
|
*/
|
||||||
|
List<CcdiEvidenceVO> listEvidence(CcdiEvidenceQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询证据详情
|
||||||
|
*
|
||||||
|
* @param evidenceId 证据ID
|
||||||
|
* @return 证据
|
||||||
|
*/
|
||||||
|
CcdiEvidenceVO getEvidence(Long evidenceId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.ruoyi.ccdi.project.service;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectImportHistoryDTO;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 历史项目导入服务
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
public interface ICcdiProjectHistoryImportService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 提交历史项目导入任务
|
||||||
|
*
|
||||||
|
* @param targetProjectId 目标项目ID
|
||||||
|
* @param targetLsfxProjectId 目标流水分析项目ID
|
||||||
|
* @param dto 导入参数
|
||||||
|
* @param operator 操作人
|
||||||
|
*/
|
||||||
|
void submitImport(Long targetProjectId, Integer targetLsfxProjectId,
|
||||||
|
CcdiProjectImportHistoryDTO dto, String operator);
|
||||||
|
}
|
||||||
@@ -1,11 +1,24 @@
|
|||||||
package com.ruoyi.ccdi.project.service;
|
package com.ruoyi.ccdi.project.service;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectEmployeeCreditNegativeQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectPersonAnalysisDetailQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskModelPeopleQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectRiskPeopleQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSuspiciousTransactionQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.excel.CcdiProjectEmployeeCreditNegativeExcel;
|
||||||
|
import com.ruoyi.ccdi.project.domain.excel.CcdiProjectRiskPeopleOverviewExcel;
|
||||||
|
import com.ruoyi.ccdi.project.domain.excel.CcdiProjectSuspiciousTransactionExcel;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectEmployeeCreditNegativePageVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectPersonAnalysisDetailVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectOverviewDashboardVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelCardsVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskModelPeopleVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectRiskPeopleOverviewVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectSuspiciousTransactionPageVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectTopRiskPeopleVO;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 结果总览服务接口
|
* 结果总览服务接口
|
||||||
@@ -23,10 +36,10 @@ public interface ICcdiProjectOverviewService {
|
|||||||
/**
|
/**
|
||||||
* 查询风险人员总览
|
* 查询风险人员总览
|
||||||
*
|
*
|
||||||
* @param projectId 项目ID
|
* @param queryDTO 查询条件
|
||||||
* @return 风险人员总览
|
* @return 风险人员总览
|
||||||
*/
|
*/
|
||||||
CcdiProjectRiskPeopleOverviewVO getRiskPeopleOverview(Long projectId);
|
CcdiProjectRiskPeopleOverviewVO getRiskPeopleOverview(CcdiProjectRiskPeopleQueryDTO queryDTO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询中高风险人员TOP10
|
* 查询中高风险人员TOP10
|
||||||
@@ -36,6 +49,16 @@ public interface ICcdiProjectOverviewService {
|
|||||||
*/
|
*/
|
||||||
CcdiProjectTopRiskPeopleVO getTopRiskPeople(Long projectId);
|
CcdiProjectTopRiskPeopleVO getTopRiskPeople(Long projectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目分析详情
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 项目分析详情
|
||||||
|
*/
|
||||||
|
default CcdiProjectPersonAnalysisDetailVO getPersonAnalysisDetail(CcdiProjectPersonAnalysisDetailQueryDTO queryDTO) {
|
||||||
|
return new CcdiProjectPersonAnalysisDetailVO();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询风险模型卡片
|
* 查询风险模型卡片
|
||||||
*
|
*
|
||||||
@@ -56,6 +79,71 @@ public interface ICcdiProjectOverviewService {
|
|||||||
return new CcdiProjectRiskModelPeopleVO();
|
return new CcdiProjectRiskModelPeopleVO();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询涉疑交易明细
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
default CcdiProjectSuspiciousTransactionPageVO getSuspiciousTransactions(
|
||||||
|
CcdiProjectSuspiciousTransactionQueryDTO queryDTO
|
||||||
|
) {
|
||||||
|
return new CcdiProjectSuspiciousTransactionPageVO();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出涉疑交易明细
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
default List<CcdiProjectSuspiciousTransactionExcel> exportSuspiciousTransactions(
|
||||||
|
CcdiProjectSuspiciousTransactionQueryDTO queryDTO
|
||||||
|
) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出风险人员总览
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
default List<CcdiProjectRiskPeopleOverviewExcel> exportRiskPeopleOverview(Long projectId) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 统一导出风险明细
|
||||||
|
*
|
||||||
|
* @param response 响应流
|
||||||
|
* @param projectId 项目ID
|
||||||
|
*/
|
||||||
|
default void exportRiskDetails(HttpServletResponse response, Long projectId) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出项目员工负面征信
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @return 导出列表
|
||||||
|
*/
|
||||||
|
default List<CcdiProjectEmployeeCreditNegativeExcel> exportEmployeeCreditNegative(Long projectId) {
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询项目员工负面征信
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 分页结果
|
||||||
|
*/
|
||||||
|
default CcdiProjectEmployeeCreditNegativePageVO getEmployeeCreditNegative(
|
||||||
|
CcdiProjectEmployeeCreditNegativeQueryDTO queryDTO
|
||||||
|
) {
|
||||||
|
return new CcdiProjectEmployeeCreditNegativePageVO();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重算结果总览员工结果并同步项目风险人数
|
* 重算结果总览员工结果并同步项目风险人数
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,11 +1,15 @@
|
|||||||
package com.ruoyi.ccdi.project.service;
|
package com.ruoyi.ccdi.project.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectImportHistoryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSaveDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectSaveDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectHistoryListItemVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectStatusCountsVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectStatusCountsVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectVO;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目Service接口
|
* 项目Service接口
|
||||||
*
|
*
|
||||||
@@ -53,6 +57,23 @@ public interface ICcdiProjectService {
|
|||||||
*/
|
*/
|
||||||
Page<CcdiProjectVO> selectProjectPage(Page<CcdiProjectVO> page, CcdiProjectQueryDTO queryDTO);
|
Page<CcdiProjectVO> selectProjectPage(Page<CcdiProjectVO> page, CcdiProjectQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询历史项目列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 历史项目列表
|
||||||
|
*/
|
||||||
|
List<CcdiProjectHistoryListItemVO> listHistoryProjects(CcdiProjectQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从历史项目导入
|
||||||
|
*
|
||||||
|
* @param dto 导入参数
|
||||||
|
* @param operator 操作人
|
||||||
|
* @return 新建项目
|
||||||
|
*/
|
||||||
|
CcdiProjectVO importFromHistory(CcdiProjectImportHistoryDTO dto, String operator);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询各状态的项目总数(不受搜索条件影响)
|
* 查询各状态的项目总数(不受搜索条件影响)
|
||||||
*
|
*
|
||||||
@@ -60,6 +81,14 @@ public interface ICcdiProjectService {
|
|||||||
*/
|
*/
|
||||||
CcdiProjectStatusCountsVO getStatusCounts();
|
CcdiProjectStatusCountsVO getStatusCounts();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 归档项目
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param operator 操作人
|
||||||
|
*/
|
||||||
|
void archiveProject(Long projectId, String operator);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 更新项目状态
|
* 更新项目状态
|
||||||
*
|
*
|
||||||
@@ -76,6 +105,14 @@ public interface ICcdiProjectService {
|
|||||||
*/
|
*/
|
||||||
void ensureProjectCanStartTagging(Long projectId);
|
void ensureProjectCanStartTagging(Long projectId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验项目是否未归档
|
||||||
|
*
|
||||||
|
* @param projectId 项目ID
|
||||||
|
* @param message 拒绝文案
|
||||||
|
*/
|
||||||
|
void ensureProjectNotArchived(Long projectId, String message);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 校验项目是否允许写入
|
* 校验项目是否允许写入
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,7 +1,19 @@
|
|||||||
package com.ruoyi.ccdi.project.service;
|
package com.ruoyi.ccdi.project.service;
|
||||||
|
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedPurchaseDetailQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedPurchaseQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedRecruitmentDetailQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedRecruitmentQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedTransferDetailQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectExtendedTransferQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityDetailQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityDetailQueryDTO;
|
||||||
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityListQueryDTO;
|
import com.ruoyi.ccdi.project.domain.dto.CcdiProjectFamilyAssetLiabilityListQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedPurchaseDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedPurchaseListVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedRecruitmentDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedRecruitmentListVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedTransferDetailVO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectExtendedTransferListVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityDetailVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityDetailVO;
|
||||||
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityListVO;
|
import com.ruoyi.ccdi.project.domain.vo.CcdiProjectFamilyAssetLiabilityListVO;
|
||||||
|
|
||||||
@@ -29,4 +41,54 @@ public interface ICcdiProjectSpecialCheckService {
|
|||||||
CcdiProjectFamilyAssetLiabilityDetailVO getFamilyAssetLiabilityDetail(
|
CcdiProjectFamilyAssetLiabilityDetailVO getFamilyAssetLiabilityDetail(
|
||||||
CcdiProjectFamilyAssetLiabilityDetailQueryDTO queryDTO
|
CcdiProjectFamilyAssetLiabilityDetailQueryDTO queryDTO
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询采购拓展列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 列表结果
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedPurchaseListVO getExtendedPurchaseList(CcdiProjectExtendedPurchaseQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询采购拓展详情
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 详情结果
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedPurchaseDetailVO getExtendedPurchaseDetail(CcdiProjectExtendedPurchaseDetailQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询招聘拓展列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 列表结果
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedRecruitmentListVO getExtendedRecruitmentList(CcdiProjectExtendedRecruitmentQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询招聘拓展详情
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 详情结果
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedRecruitmentDetailVO getExtendedRecruitmentDetail(
|
||||||
|
CcdiProjectExtendedRecruitmentDetailQueryDTO queryDTO
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询调动拓展列表
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 列表结果
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedTransferListVO getExtendedTransferList(CcdiProjectExtendedTransferQueryDTO queryDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询调动拓展详情
|
||||||
|
*
|
||||||
|
* @param queryDTO 查询条件
|
||||||
|
* @return 详情结果
|
||||||
|
*/
|
||||||
|
CcdiProjectExtendedTransferDetailVO getExtendedTransferDetail(CcdiProjectExtendedTransferDetailQueryDTO queryDTO);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
package com.ruoyi.ccdi.project.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiEvidenceQueryDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.dto.CcdiEvidenceSaveDTO;
|
||||||
|
import com.ruoyi.ccdi.project.domain.entity.CcdiEvidence;
|
||||||
|
import com.ruoyi.ccdi.project.domain.vo.CcdiEvidenceVO;
|
||||||
|
import com.ruoyi.ccdi.project.mapper.CcdiEvidenceMapper;
|
||||||
|
import com.ruoyi.ccdi.project.service.ICcdiEvidenceService;
|
||||||
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目证据Service实现类
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class CcdiEvidenceServiceImpl implements ICcdiEvidenceService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private CcdiEvidenceMapper evidenceMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public CcdiEvidenceVO saveEvidence(CcdiEvidenceSaveDTO dto, String operator) {
|
||||||
|
CcdiEvidence evidence = new CcdiEvidence();
|
||||||
|
BeanUtils.copyProperties(dto, evidence);
|
||||||
|
evidence.setConfirmBy(operator);
|
||||||
|
evidence.setConfirmTime(new Date());
|
||||||
|
evidenceMapper.insert(evidence);
|
||||||
|
return toVO(evidence);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CcdiEvidenceVO> listEvidence(CcdiEvidenceQueryDTO queryDTO) {
|
||||||
|
if (queryDTO.getProjectId() == null) {
|
||||||
|
throw new ServiceException("项目ID不能为空");
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<CcdiEvidence> wrapper = new LambdaQueryWrapper<CcdiEvidence>()
|
||||||
|
.eq(CcdiEvidence::getProjectId, queryDTO.getProjectId())
|
||||||
|
.orderByDesc(CcdiEvidence::getConfirmTime)
|
||||||
|
.orderByDesc(CcdiEvidence::getEvidenceId);
|
||||||
|
|
||||||
|
if (StringUtils.hasText(queryDTO.getEvidenceType())) {
|
||||||
|
wrapper.eq(CcdiEvidence::getEvidenceType, queryDTO.getEvidenceType());
|
||||||
|
}
|
||||||
|
if (StringUtils.hasText(queryDTO.getKeyword())) {
|
||||||
|
String keyword = queryDTO.getKeyword().trim();
|
||||||
|
wrapper.and(item -> item
|
||||||
|
.like(CcdiEvidence::getRelatedPersonName, keyword)
|
||||||
|
.or()
|
||||||
|
.like(CcdiEvidence::getRelatedPersonId, keyword)
|
||||||
|
.or()
|
||||||
|
.like(CcdiEvidence::getEvidenceTitle, keyword)
|
||||||
|
.or()
|
||||||
|
.like(CcdiEvidence::getEvidenceSummary, keyword)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return evidenceMapper.selectList(wrapper).stream().map(this::toVO).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CcdiEvidenceVO getEvidence(Long evidenceId) {
|
||||||
|
CcdiEvidence evidence = evidenceMapper.selectById(evidenceId);
|
||||||
|
if (evidence == null) {
|
||||||
|
throw new ServiceException("证据不存在");
|
||||||
|
}
|
||||||
|
return toVO(evidence);
|
||||||
|
}
|
||||||
|
|
||||||
|
private CcdiEvidenceVO toVO(CcdiEvidence evidence) {
|
||||||
|
CcdiEvidenceVO vo = new CcdiEvidenceVO();
|
||||||
|
BeanUtils.copyProperties(evidence, vo);
|
||||||
|
return vo;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@ import com.ruoyi.ccdi.project.mapper.CcdiProjectMapper;
|
|||||||
import com.ruoyi.ccdi.project.service.ICcdiBankTagService;
|
import com.ruoyi.ccdi.project.service.ICcdiBankTagService;
|
||||||
import com.ruoyi.ccdi.project.service.ICcdiFileUploadService;
|
import com.ruoyi.ccdi.project.service.ICcdiFileUploadService;
|
||||||
import com.ruoyi.ccdi.project.service.ICcdiProjectService;
|
import com.ruoyi.ccdi.project.service.ICcdiProjectService;
|
||||||
|
import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.lsfx.client.LsfxAnalysisClient;
|
import com.ruoyi.lsfx.client.LsfxAnalysisClient;
|
||||||
import com.ruoyi.lsfx.constants.LsfxConstants;
|
import com.ruoyi.lsfx.constants.LsfxConstants;
|
||||||
import com.ruoyi.lsfx.domain.request.FetchInnerFlowRequest;
|
import com.ruoyi.lsfx.domain.request.FetchInnerFlowRequest;
|
||||||
@@ -169,6 +170,7 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
|
|||||||
throw new IllegalArgumentException("开始日期不能晚于结束日期");
|
throw new IllegalArgumentException("开始日期不能晚于结束日期");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许上传或拉取数据");
|
||||||
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许上传或拉取数据");
|
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许上传或拉取数据");
|
||||||
|
|
||||||
CcdiProject project = projectMapper.selectById(projectId);
|
CcdiProject project = projectMapper.selectById(projectId);
|
||||||
@@ -323,6 +325,7 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
|
|||||||
log.info("【文件上传】开始批量上传: projectId={}, 文件数量={}, username={}",
|
log.info("【文件上传】开始批量上传: projectId={}, 文件数量={}, username={}",
|
||||||
projectId, files.length, username);
|
projectId, files.length, username);
|
||||||
|
|
||||||
|
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许上传或拉取数据");
|
||||||
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许上传或拉取数据");
|
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许上传或拉取数据");
|
||||||
|
|
||||||
// 1. 生成批次ID
|
// 1. 生成批次ID
|
||||||
@@ -962,6 +965,9 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
|
|||||||
if (record == null) {
|
if (record == null) {
|
||||||
throw new RuntimeException("上传记录不存在");
|
throw new RuntimeException("上传记录不存在");
|
||||||
}
|
}
|
||||||
|
if ("HISTORY_IMPORT".equals(record.getSourceType())) {
|
||||||
|
throw new ServiceException("历史导入文件不支持删除");
|
||||||
|
}
|
||||||
if (!"parsed_success".equals(record.getFileStatus())) {
|
if (!"parsed_success".equals(record.getFileStatus())) {
|
||||||
if ("deleted".equals(record.getFileStatus())) {
|
if ("deleted".equals(record.getFileStatus())) {
|
||||||
throw new RuntimeException("文件已删除,请勿重复操作");
|
throw new RuntimeException("文件已删除,请勿重复操作");
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
|
|||||||
Long projectId = saveDTO.getProjectId();
|
Long projectId = saveDTO.getProjectId();
|
||||||
|
|
||||||
if (projectId > 0) {
|
if (projectId > 0) {
|
||||||
|
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许修改参数");
|
||||||
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许修改参数");
|
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许修改参数");
|
||||||
switchToCustomConfigIfNeeded(getRequiredProject(projectId));
|
switchToCustomConfigIfNeeded(getRequiredProject(projectId));
|
||||||
}
|
}
|
||||||
@@ -192,6 +193,7 @@ public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
|
|||||||
Long projectId = saveAllDTO.getProjectId();
|
Long projectId = saveAllDTO.getProjectId();
|
||||||
|
|
||||||
if (projectId > 0) {
|
if (projectId > 0) {
|
||||||
|
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许修改参数");
|
||||||
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许修改参数");
|
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许修改参数");
|
||||||
switchToCustomConfigIfNeeded(getRequiredProject(projectId));
|
switchToCustomConfigIfNeeded(getRequiredProject(projectId));
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user