From aa8d68101325963b59d08ef29c7f6f77f73df5e0 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Fri, 24 Oct 2025 13:43:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EnterprisePersonnelController.java | 73 ++++ .../controller/file/FileUploadController.java | 4 - .../service/enterprise/PersonnelService.java | 386 ++++++++++++++++++ .../bonus/common/constant/TableConstants.java | 6 + .../dto/EnterprisePersonnelDto.java | 207 ++++++++++ .../mainDatabase/po/EnterprisePersonnel.java | 117 ++++++ .../mainDatabase/po/PersonnelCertificate.java | 69 ++++ .../vo/EnterprisePersonnelVo.java | 75 ++++ .../bonus/common/utils/CertificateUtil.java | 132 ++++-- .../bonus/file/mapper/ISourceFileMapper.java | 9 + .../bonus/file/service/SourceFileService.java | 11 + .../resources/mapper/SourceFileMapper.xml | 19 + .../mapper/IMDCertificateMapper.java | 63 +++ .../mapper/IMDErrorInfoMapper.java | 9 + .../mapper/IMDPersonnelMapper.java | 69 ++++ .../service/IMDCertificateService.java | 61 +++ .../service/IMDErrorInfoService.java | 9 + .../service/IMDPersonnelService.java | 63 +++ .../impl/MDCertificateServiceImpl.java | 63 +++ .../service/impl/MDErrorInfoServiceImpl.java | 5 + .../service/impl/MDPersonnelServiceImpl.java | 77 ++++ .../service/impl/TestServiceImpl.java | 20 - .../resources/mapper/CertificateMapper.xml | 80 ++++ .../main/resources/mapper/ErrorInfoMapper.xml | 18 + .../main/resources/mapper/PersonnelMapper.xml | 122 ++++++ 25 files changed, 1714 insertions(+), 53 deletions(-) create mode 100644 bonus-admin/src/main/java/com/bonus/web/controller/enterprise/EnterprisePersonnelController.java create mode 100644 bonus-admin/src/main/java/com/bonus/web/service/enterprise/PersonnelService.java create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/dto/EnterprisePersonnelDto.java create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/EnterprisePersonnel.java create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/PersonnelCertificate.java create mode 100644 bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/vo/EnterprisePersonnelVo.java create mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDCertificateMapper.java create mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDPersonnelMapper.java create mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDCertificateService.java create mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDPersonnelService.java create mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDCertificateServiceImpl.java create mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDPersonnelServiceImpl.java delete mode 100644 bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/TestServiceImpl.java create mode 100644 bonus-mainDatabase/src/main/resources/mapper/CertificateMapper.xml create mode 100644 bonus-mainDatabase/src/main/resources/mapper/PersonnelMapper.xml diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/enterprise/EnterprisePersonnelController.java b/bonus-admin/src/main/java/com/bonus/web/controller/enterprise/EnterprisePersonnelController.java new file mode 100644 index 0000000..b85a930 --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/controller/enterprise/EnterprisePersonnelController.java @@ -0,0 +1,73 @@ +package com.bonus.web.controller.enterprise; + +import com.bonus.common.annotation.RequiresPermissions; +import com.bonus.common.annotation.SysLog; +import com.bonus.common.core.controller.BaseController; +import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.core.page.TableDataInfo; +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.vo.EnterprisePersonnelVo; +import com.bonus.common.enums.OperaType; +import com.bonus.web.service.enterprise.PersonnelService; +import io.swagger.annotations.ApiOperation; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @className: EnterprisePersonnelController + * @author: cwchen + * @date: 2025-10-22-16:10 + * @version: 1.0 + * @description: 企业人员库-web层 + */ +@RestController +@RequestMapping("/mainDatabase/personnel") +public class EnterprisePersonnelController extends BaseController { + + @Resource(name = "PersonnelService") + private PersonnelService personnelService; + + @ApiOperation(value = "人员库", notes = "查询列表") + @GetMapping("getList") + @SysLog(title = "人员库", module = "企业知识库->人员库->查询列表", businessType = OperaType.QUERY, details = "查询列表", logType = 1) + @RequiresPermissions("enterpriseLibrary:personnel:list") + public TableDataInfo getList(EnterprisePersonnelDto dto) { + startPage(); + List list = personnelService.getList(dto); + return getDataTable(list); + } + + @ApiOperation(value = "人员库", notes = "新增人员库") + @PostMapping("addData") + @SysLog(title = "人员库", module = "企业知识库->人员库->新增人员库", businessType = OperaType.INSERT, details = "新增人员库", logType = 1) + @RequiresPermissions("enterpriseLibrary:personnel:add") + public AjaxResult addData(@RequestBody EnterprisePersonnelDto dto) { + return personnelService.addData(dto); + } + + @ApiOperation(value = "人员库", notes = "修改人员库") + @PostMapping("editData") + @SysLog(title = "人员库", module = "企业知识库->人员库->修改人员库", businessType = OperaType.UPDATE, details = "修改人员库", logType = 1) + @RequiresPermissions("enterpriseLibrary:personnel:edit") + public AjaxResult editData(@RequestBody EnterprisePersonnelDto dto) { + return personnelService.editData(dto); + } + + @ApiOperation(value = "人员库", notes = "删除人员库") + @PostMapping("delData") + @SysLog(title = "人员库", module = "企业知识库->人员库->删除人员库", businessType = OperaType.DELETE, details = "删除人员库", logType = 1) + @RequiresPermissions("enterpriseLibrary:personnel:del") + public AjaxResult delData(@RequestBody EnterprisePersonnelDto dto) { + return personnelService.delData(dto); + } + + @ApiOperation(value = "人员库", notes = "查询详情") + @GetMapping("getDetailData") + @SysLog(title = "人员库", module = "企业知识库->人员库->查询详情", businessType = OperaType.QUERY, details = "查询详情", logType = 1) + @RequiresPermissions("enterpriseLibrary:personnel:detail") + public AjaxResult getDetailData(EnterprisePersonnelDto dto) { + return personnelService.getDetailData(dto); + } +} diff --git a/bonus-admin/src/main/java/com/bonus/web/controller/file/FileUploadController.java b/bonus-admin/src/main/java/com/bonus/web/controller/file/FileUploadController.java index 4e75525..e048279 100644 --- a/bonus-admin/src/main/java/com/bonus/web/controller/file/FileUploadController.java +++ b/bonus-admin/src/main/java/com/bonus/web/controller/file/FileUploadController.java @@ -10,9 +10,7 @@ import com.bonus.file.service.FileUploadService; import com.bonus.file.service.SourceFileService; import com.bonus.file.util.FileUtil; import com.bonus.file.util.MinioUtil; -import com.bonus.mainDataBase.service.ITestService; import com.bonus.ocr.service.OcrService; -import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -48,8 +46,6 @@ public class FileUploadController { @Resource private MinioUtil minioUtil; - @Resource(name = "TestService") - private ITestService testService; @PostMapping(value = "uploadFile") diff --git a/bonus-admin/src/main/java/com/bonus/web/service/enterprise/PersonnelService.java b/bonus-admin/src/main/java/com/bonus/web/service/enterprise/PersonnelService.java new file mode 100644 index 0000000..43fbae9 --- /dev/null +++ b/bonus-admin/src/main/java/com/bonus/web/service/enterprise/PersonnelService.java @@ -0,0 +1,386 @@ +package com.bonus.web.service.enterprise; + +import com.bonus.common.constant.CertificateConstants; +import com.bonus.common.constant.TableConstants; +import com.bonus.common.core.domain.AjaxResult; +import com.bonus.common.domain.file.po.ResourceFilePo; +import com.bonus.common.domain.file.vo.ResourceFileVo; +import com.bonus.common.domain.file.vo.SysFile; +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.EnterprisePersonnel; +import com.bonus.common.domain.mainDatabase.po.ErrorInfo; +import com.bonus.common.domain.mainDatabase.po.PersonnelCertificate; +import com.bonus.common.domain.mainDatabase.vo.EnterprisePersonnelVo; +import com.bonus.common.domain.mainDatabase.vo.EnterpriseVo; +import com.bonus.common.utils.CertificateUtil; +import com.bonus.common.utils.ValidatorsUtils; +import com.bonus.file.service.FileUploadService; +import com.bonus.file.service.SourceFileService; +import com.bonus.mainDataBase.service.IMDCertificateService; +import com.bonus.mainDataBase.service.IMDErrorInfoService; +import com.bonus.mainDataBase.service.IMDPersonnelService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +/** + * @className:PersonnelService + * @author:cwchen + * @date:2025-10-22-16:12 + * @version:1.0 + * @description:人员库-业务实现层 + */ +@Service(value = "PersonnelService") +@Slf4j +public class PersonnelService { + + @Resource(name = "IMDPersonnelService") + private IMDPersonnelService imdPersonnelService; + + @Resource(name = "IMDCertificateService") + private IMDCertificateService imdCertificateService; + + @Resource(name = "SourceFileService") + private SourceFileService sourceFileService; + + @Resource(name = "IMDErrorInfoService") + private IMDErrorInfoService imdErrorInfoService; + + @Resource(name = "FileUploadService") + private FileUploadService fileUploadService; + + @Resource(name = "ValidatorsUtils") + private ValidatorsUtils validatorsUtils; + + /** + * 人员库->查询列表 + * + * @param dto + * @return TableDataInfo + * @author cwchen + * @date 2025/10/22 16:18 + */ + public List getList(EnterprisePersonnelDto dto) { + return imdPersonnelService.getList(dto); + } + + /** + * 人员库->新增人员库 + * + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2025/10/22 17:11 + */ + @Transactional(rollbackFor = Exception.class) + public AjaxResult addData(EnterprisePersonnelDto dto) { + // 校验数据是否合法 + String validResult = validatorsUtils.valid(dto, EnterprisePersonnelDto.ADD.class); + if (StringUtils.isNotBlank(validResult)) { + return AjaxResult.error(validResult); + } + try { + // 1.人员身份证不能重复 + int result = imdPersonnelService.isRepeat(dto); + if(result > 0){ + return AjaxResult.error("身份证号码已存在"); + } + // 2.添加人员库数据 + imdPersonnelService.operPersonnelData(dto, 1); + // 3.添加文件 + for (ResourceFilePo file : dto.getFiles()) { + file.setBusinessId(dto.getPersonnelId()); // 业务id + file.setSourceTable(TableConstants.TB_ENTERPRISE_PERSONNEL); // 来源表 + } + sourceFileService.saveResourceFile(dto.getFiles()); + // 处理资质信息和职称信息 + if(CollectionUtils.isNotEmpty(dto.getPersonnelCertificateFiles())){ + for (EnterprisePersonnelDto.PersonnelCertificateDto item : dto.getPersonnelCertificateFiles()) { + // 添加人员id + item.getPersonnelCertificate().setPersonnelId(dto.getPersonnelId()); + } + // 添加人员证书 + imdCertificateService.addCertificateData(dto.getPersonnelCertificateFiles()); + // 创建证书资源文件和证书异常消息集合 + List certificateList = new ArrayList<>(); + List errorInfos = new ArrayList<>(); + for (EnterprisePersonnelDto.PersonnelCertificateDto item : dto.getPersonnelCertificateFiles()) { + item.getResourceFilePo().setBusinessId(item.getPersonnelCertificate().getPersonnelCertificateId());// 添加证书id + item.getResourceFilePo().setSourceTable(TableConstants.TB_PERSONNEL_CERTIFICATE); // 来源表 + certificateList.add(item.getResourceFilePo()); + // 检查证书资源文件是否存在过期 + ErrorInfo errorInfo = CertificateUtil.checkCertificateState(item.getPersonnelCertificate().getCertificateValidityPeriod(), + item.getPersonnelCertificate().getCertificateType(), + item.getPersonnelCertificate().getPersonnelCertificateId(), + dto.getEnterpriseId()); + if (Objects.nonNull(errorInfo)) { + errorInfos.add(errorInfo); + } + } + // 添加证书资源文件 + sourceFileService.saveResourceFile(certificateList); + // 存在证书过期异常信息则添加 + if(CollectionUtils.isNotEmpty(errorInfos)){ + imdErrorInfoService.addErrorInfo(errorInfos); + } + + } + } catch (Exception e) { + log.error(e.toString(), e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 人员库->修改人员库 + * + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2025/10/22 17:14 + */ + @Transactional(rollbackFor = Exception.class) + public AjaxResult editData(EnterprisePersonnelDto dto) { + // 校验数据是否合法 + String validResult = validatorsUtils.valid(dto, EnterprisePersonnelDto.UPDATE.class); + if (StringUtils.isNotBlank(validResult)) { + return AjaxResult.error(validResult); + } + try { + // 1.人员身份证不能重复 + int result = imdPersonnelService.isRepeat(dto); + if(result > 0){ + return AjaxResult.error("身份证号码已存在"); + } + // 2.修改人员库数据 + imdPersonnelService.operPersonnelData(dto, 2); + // 3.如果存在新增文件,则添加 + if(CollectionUtils.isNotEmpty(dto.getFiles())){ + for (ResourceFilePo file : dto.getFiles()) { + file.setBusinessId(dto.getPersonnelId()); // 业务id + file.setSourceTable(TableConstants.TB_ENTERPRISE_PERSONNEL); // 来源表 + } + sourceFileService.saveResourceFile(dto.getFiles()); + } + // 4.如果存在删除的文件则删除系统资源文件 + if (CollectionUtils.isNotEmpty(dto.getDelFiles())) { + sourceFileService.delResourceFile(dto.getDelFiles(), TableConstants.TB_ENTERPRISE_PERSONNEL); + } + + // 异常信息删除集合 + List delErrorInfoList = new ArrayList<>(); + // 处理资质信息和职称信息 + if(CollectionUtils.isNotEmpty(dto.getPersonnelCertificateFiles())){ + // 查询人员职位是否发生了变化,是否导致证书类型也发生了变化 + List changeList = imdCertificateService.getCertificateChange(dto.getPersonnelCertificateFiles(),dto.getPersonnelId()); + if(CollectionUtils.isNotEmpty(changeList)){ + // 删除证书 + imdCertificateService.delCertificate(changeList); + List delFiles = new ArrayList<>(); + for (PersonnelCertificate item : changeList) { + // 添加需要删除的资源文件 + ResourceFilePo delResourceFilePo = setResourceFile(item); + delFiles.add(delResourceFilePo); + // 添加需要删除的异常信息 + ErrorInfo delErrorInfo = setErrorInfo(item); + delErrorInfoList.add(delErrorInfo); + } + // 删除证书资源文件根据业务id、来源表、业务类型 + sourceFileService.delResourceFileBybusinessId(delFiles); + } + + // 修改人员证书 + imdCertificateService.editCertificateData(dto.getPersonnelCertificateFiles()); + // 创建证书资源文件和证书异常消息集合 + List certificateList = new ArrayList<>(); + List errorInfos = new ArrayList<>(); + for (EnterprisePersonnelDto.PersonnelCertificateDto item : dto.getPersonnelCertificateFiles()) { + if(Objects.nonNull(item.getResourceFilePo())){ + item.getResourceFilePo().setBusinessId(item.getPersonnelCertificate().getPersonnelCertificateId());// 添加证书id + item.getResourceFilePo().setSourceTable(TableConstants.TB_PERSONNEL_CERTIFICATE); // 来源表 + certificateList.add(item.getResourceFilePo()); + } + // 添加需要删除的异常信息 + ErrorInfo delErrorInfo = setErrorInfo(item.getPersonnelCertificate()); + delErrorInfoList.add(delErrorInfo); + // 检查证书资源文件是否存在过期 + ErrorInfo errorInfo = CertificateUtil.checkCertificateState(item.getPersonnelCertificate().getCertificateValidityPeriod(), + item.getPersonnelCertificate().getCertificateType(), + item.getPersonnelCertificate().getPersonnelCertificateId(), + dto.getEnterpriseId()); + if (Objects.nonNull(errorInfo)) { + errorInfos.add(errorInfo); + } + } + // 添加证书资源文件 + if(CollectionUtils.isNotEmpty(certificateList)){ + sourceFileService.saveResourceFile(certificateList); + } + // 删除异常信息数据-根据业务id、业务类型、来源表 + imdErrorInfoService.delErrorInfoByBusinessId(delErrorInfoList); + // 存在证书过期异常信息则添加 + if(CollectionUtils.isNotEmpty(errorInfos)){ + imdErrorInfoService.addErrorInfo(errorInfos); + } + } + } catch (Exception e) { + log.error(e.toString(), e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 人员库->删除人员库 + * + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2025/10/22 17:15 + */ + public AjaxResult delData(EnterprisePersonnelDto dto) { + // 1.校验数据是否合法 + String validResult = validatorsUtils.valid(dto, EnterprisePersonnelDto.DELETE.class); + if (StringUtils.isNotBlank(validResult)) { + return AjaxResult.error(validResult); + } + try { + // 2.判断人员是否被引用 + int useNum = imdPersonnelService.getUseNum(dto); + if(useNum > 0) { + return AjaxResult.error("人员已被企业业绩关联,无法删除"); + } + // 3.删除人员 + imdPersonnelService.operPersonnelData(dto,3); + // 4.删除人员相关资源文件 + sourceFileService.delResourceFileByTable(dto.getPersonnelId(),TableConstants.TB_ENTERPRISE_PERSONNEL); + // 查询人员相关证书 + List certificateList = imdCertificateService.getCertificates(dto); + // 异常信息删除、人员证书集合 + List delErrorInfoList = new ArrayList<>(); + List delFiles = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(certificateList)){ + for (PersonnelCertificate item : certificateList) { + // 添加需要删除的资源文件 + ResourceFilePo delResourceFilePo = setResourceFile(item); + delFiles.add(delResourceFilePo); + // 添加需要删除的异常信息 + ErrorInfo delErrorInfo = setErrorInfo(item); + delErrorInfoList.add(delErrorInfo); + } + } + // 删除证书资源文件根据业务id、来源表、业务类型 + sourceFileService.delResourceFileBybusinessId(delFiles); + // 删除异常信息数据-根据业务id、业务类型、来源表 + imdErrorInfoService.delErrorInfoByBusinessId(delErrorInfoList); + } catch (Exception e) { + log.error(e.toString(), e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + return AjaxResult.error(); + } + return AjaxResult.success(); + } + + /** + * 人员库->人员库详情 + * + * @param dto + * @return AjaxResult + * @author cwchen + * @date 2025/10/22 17:16 + */ + public AjaxResult getDetailData(EnterprisePersonnelDto dto) { + // 1.校验数据是否合法 + String validResult = validatorsUtils.valid(dto, EnterprisePersonnelDto.QUERY.class); + if (StringUtils.isNotBlank(validResult)) { + return AjaxResult.error(validResult); + } + EnterprisePersonnelVo.PersonnelDetailVo detailVo = new EnterprisePersonnelVo.PersonnelDetailVo(); + List certificateDetailList = new ArrayList<>(); + // 2.查询人员详情 + EnterprisePersonnel personnel = imdPersonnelService.getPersonnelData(dto); + detailVo.setEnterprisePersonnel(personnel); + // 3.查询人员关联资源文件 + List fileVoList = sourceFileService.getFilesByTable(dto.getPersonnelId(),TableConstants.TB_ENTERPRISE_PERSONNEL); + // 4.取minio中的文件访问路径 + List resourceFileVos = setFile(fileVoList); + detailVo.setResourceFileVoList(resourceFileVos); + + // 5.查询人员证书 + List certificateList = imdCertificateService.getCertificates(dto); + if(CollectionUtils.isNotEmpty(certificateList)){ + for (PersonnelCertificate item : certificateList) { + EnterprisePersonnelVo.CertificateDetailVo vo = new EnterprisePersonnelVo.CertificateDetailVo(); + vo.setCertificate(item); + List filesByTable = sourceFileService.getFilesByTable(item.getPersonnelCertificateId(), TableConstants.TB_ENTERPRISE_PERSONNEL); + // 取minio中的文件访问路径 + List fileVos = setFile(filesByTable); + vo.setFileVoList(fileVos); + certificateDetailList.add(vo); + } + } + detailVo.setCertificateDetailList(certificateDetailList); + return AjaxResult.success(detailVo); + } + + /** + * 异常信息赋值 + * @param item + * @return ErrorInfo + * @author cwchen + * @date 2025/10/24 12:13 + */ + public ErrorInfo setErrorInfo(PersonnelCertificate item) { + ErrorInfo errorInfo = new ErrorInfo(); + errorInfo.setSourceTable(TableConstants.TB_PERSONNEL_CERTIFICATE); + errorInfo.setBusinessId(item.getPersonnelCertificateId()); + errorInfo.setBusinessType(item.getCertificateType()); + return errorInfo; + } + + /** + * 资源文件赋值 + * @param item + * @return ResourceFilePo + * @author cwchen + * @date 2025/10/24 12:15 + */ + public ResourceFilePo setResourceFile(PersonnelCertificate item) { + ResourceFilePo resourceFilePo = new ResourceFilePo(); + resourceFilePo.setBusinessId(item.getPersonnelCertificateId()); + resourceFilePo.setSourceTable(TableConstants.TB_PERSONNEL_CERTIFICATE); + resourceFilePo.setFileType(item.getCertificateType()); + return resourceFilePo; + } + + /** + * 文件访问路径赋值 + * @param fileVoList + * @return List + * @author cwchen + * @date 2025/10/24 13:37 + */ + public List setFile(List fileVoList){ + if(CollectionUtils.isNotEmpty(fileVoList)){ + for (ResourceFileVo file : fileVoList) { + SysFile sysFile = fileUploadService.getFile(file.getFilePath()); + if(Objects.nonNull(sysFile)){ + file.setLsFilePath(sysFile.getUrl()); + } + } + } + return fileVoList; + } +} diff --git a/bonus-common/src/main/java/com/bonus/common/constant/TableConstants.java b/bonus-common/src/main/java/com/bonus/common/constant/TableConstants.java index c5266f6..ac96b0b 100644 --- a/bonus-common/src/main/java/com/bonus/common/constant/TableConstants.java +++ b/bonus-common/src/main/java/com/bonus/common/constant/TableConstants.java @@ -11,4 +11,10 @@ public class TableConstants { /**企业主体表*/ public static final String TB_ENTERPRISE = "tb_enterprise"; + + /**企业人员库表*/ + public static final String TB_ENTERPRISE_PERSONNEL = "tb_enterprise_personnel"; + + /**人员证书*/ + public static final String TB_PERSONNEL_CERTIFICATE = "tb_personnel_certificate"; } diff --git a/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/dto/EnterprisePersonnelDto.java b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/dto/EnterprisePersonnelDto.java new file mode 100644 index 0000000..72a0ad6 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/dto/EnterprisePersonnelDto.java @@ -0,0 +1,207 @@ +package com.bonus.common.domain.mainDatabase.dto; + +import com.bonus.common.core.domain.model.LoginUser; +import com.bonus.common.domain.file.po.ResourceFilePo; +import com.bonus.common.domain.mainDatabase.po.PersonnelCertificate; +import com.bonus.common.utils.SecurityUtils; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +/** + * 企业人员库表 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class EnterprisePersonnelDto { + + /** + * 人员id + */ + @NotNull(message = "人员id不能为空", groups = {UPDATE.class, DELETE.class, QUERY.class}) + private Long personnelId; + + /** + * 企业id + */ + @NotNull(message = "企业id不能为空", groups = {ADD.class, UPDATE.class, DELETE.class, QUERY.class}) + private Long enterpriseId; + + /** + * 人员职位(字典表配置) + */ + @NotBlank(message = "人员职位不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 32, message = "人员职位字符长度不能超过32", groups = {ADD.class, UPDATE.class}) + private String personnelPosition; + + /** + * 人员姓名 + */ + @NotBlank(message = "人员姓名不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 32, message = "人员姓名字符长度不能超过32", groups = {ADD.class, UPDATE.class}) + private String personnelName; + + /** + * 身份证号码 + */ + @NotBlank(message = "身份证号码不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 32, message = "身份证号码字符长度不能超过32", groups = {ADD.class, UPDATE.class}) + private String personnelIdCard; + + /** + * 入职时间 + */ + @NotNull(message = "入职时间不能为空", groups = {ADD.class, UPDATE.class}) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date employmentDate; + + /** + * 从业年限 + */ + @NotBlank(message = "从业年限不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 32, message = "从业年限字符长度不能超过32", groups = {ADD.class, UPDATE.class}) + private String employmentYears; + + /** + * 毕业院校 + */ + @NotBlank(message = "毕业院校不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 64, message = "毕业院校字符长度不能超过64", groups = {ADD.class, UPDATE.class}) + private String graduateSchool; + + /** + * 毕业专业 + */ + @NotBlank(message = "毕业专业不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 64, message = "毕业专业字符长度不能超过64", groups = {ADD.class, UPDATE.class}) + private String graduationMajor; + + /** + * 学历 + */ + @NotBlank(message = "学历不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 32, message = "学历字符长度不能超过32", groups = {ADD.class, UPDATE.class}) + private String qualification; + + /** + * 毕业时间 + */ + @NotNull(message = "毕业时间不能为空", groups = {ADD.class, UPDATE.class}) + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date graduationDate; + + /** + * 联系方式 + */ + @NotBlank(message = "联系方式不能为空", groups = {ADD.class, UPDATE.class}) + @Length(max = 11, message = "联系方式字符长度不能超过11", groups = {ADD.class, UPDATE.class}) + private String personnelPhone; + + /** + * 人员简介 + */ + @Length(max = 300, message = "人员简介字符长度不能超过300", groups = {ADD.class, UPDATE.class}) + private String personnelIntroduction; + + /** + * 是否存在过期证件 0.未过期 1.已过期 + */ + private String expiredState; + + /** + * 创建人 + */ + private Long createUserId = Optional.ofNullable(SecurityUtils.getLoginUser()) + .map(LoginUser::getUserId) + .orElse(null); + ; + + /** + * 创建人姓名 + */ + private String createUserName = Optional.ofNullable(SecurityUtils.getLoginUser()) + .map(LoginUser::getUsername) + .orElse(null); + + /** + * 修改人 + */ + private Long updateUserId = Optional.ofNullable(SecurityUtils.getLoginUser()) + .map(LoginUser::getUserId) + .orElse(null); + ; + + /** + * 修改人姓名 + */ + private String updateUserName = Optional.ofNullable(SecurityUtils.getLoginUser()) + .map(LoginUser::getUsername) + .orElse(null); + + + /** + * 资源文件 + */ + @NotEmpty(message = "文件不能为空", groups = {EnterpriseDto.ADD.class}) + @Size(min = 5, max = 7, message = "最少需要上传四个文件", groups = {EnterpriseDto.ADD.class}) + private List files; + + /** + * 证书文件 + */ + private List personnelCertificateFiles; + + + /** + * 删除的文件路径 + */ + private List delFiles; + + @Data + public static class PersonnelCertificateDto { + private PersonnelCertificate personnelCertificate; + private ResourceFilePo resourceFilePo; + /** + * 证书删除的文件路径 + */ + private List delFiles; + } + + /** + * 查询条件限制 + */ + public interface QUERY { + } + + /** + * 新增条件限制 + */ + public interface ADD { + } + + /** + * 修改条件限制 + */ + public interface UPDATE { + } + + /** + * 删除条件限制 + */ + public interface DELETE { + } +} \ No newline at end of file diff --git a/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/EnterprisePersonnel.java b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/EnterprisePersonnel.java new file mode 100644 index 0000000..10b9d05 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/EnterprisePersonnel.java @@ -0,0 +1,117 @@ +package com.bonus.common.domain.mainDatabase.po; + +import java.util.Date; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * 企业人员库表 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class EnterprisePersonnel { + /** + * 人员id + */ + private Long personnelId; + + /** + * 企业id + */ + private Long enterpriseId; + + /** + * 人员职位(字典表配置) + */ + private String personnelPosition; + + /** + * 人员姓名 + */ + private String personnelName; + + /** + * 入职时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date employmentDate; + + /** + * 从业年限 + */ + private String employmentYears; + + /** + * 毕业院校 + */ + private String graduateSchool; + + /** + * 毕业专业 + */ + private String graduationMajor; + + /** + * 学历 + */ + private String qualification; + + /** + * 毕业时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date graduationDate; + + /** + * 联系方式 + */ + private String personnelPhone; + + /** + * 人员简介 + */ + private String personnelIntroduction; + + /** + * 是否存在过期证件 0.未过期 1.已过期 + */ + private String expiredState; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 创建人 + */ + private Long createUserId; + + /** + * 创建人姓名 + */ + private String createUserName; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 修改人 + */ + private Long updateUserId; + + /** + * 修改人姓名 + */ + private String updateUserName; + +} \ No newline at end of file diff --git a/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/PersonnelCertificate.java b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/PersonnelCertificate.java new file mode 100644 index 0000000..d0268f7 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/po/PersonnelCertificate.java @@ -0,0 +1,69 @@ +package com.bonus.common.domain.mainDatabase.po; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 人员证书 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class PersonnelCertificate { + /** + * 人员证书id + */ + private Long personnelCertificateId; + + /** + * 人员id + */ + private Long personnelId; + + /** + * 人员证书类型(字典表配置) + */ + private String certificateType; + + /** + * 专业类型 + */ + private String professionalType; + + /** + * 证书编号 + */ + private String certificateCode; + + /** + * 级别 + */ + private String certificateLevel; + + /** + * 证书有效期 + */ + private String certificateValidityPeriod; + + /** + * 使用有效期 + */ + private String useValidityPeriod; + + /** + * 注册专业 + */ + private String registerProfessional; + + /** + * 职称名称 + */ + private String titleName; + + /** + * 专业名称 + */ + private String professionalName; + +} \ No newline at end of file diff --git a/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/vo/EnterprisePersonnelVo.java b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/vo/EnterprisePersonnelVo.java new file mode 100644 index 0000000..4351705 --- /dev/null +++ b/bonus-common/src/main/java/com/bonus/common/domain/mainDatabase/vo/EnterprisePersonnelVo.java @@ -0,0 +1,75 @@ +package com.bonus.common.domain.mainDatabase.vo; + +import com.bonus.common.domain.file.po.ResourceFilePo; +import com.bonus.common.domain.file.vo.ResourceFileVo; +import com.bonus.common.domain.mainDatabase.po.EnterprisePersonnel; +import com.bonus.common.domain.mainDatabase.po.PersonnelCertificate; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; +import java.util.List; + +/** + * 企业人员库表 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class EnterprisePersonnelVo { + + + /** + * 人员id + */ + private Long personnelId; + + /** + * 企业id + */ + private Long enterpriseId; + + /** + * 人员职位(字典表配置) + */ + private String personnelPosition; + + /** + * 人员姓名 + */ + private String personnelName; + + /** + * 入职时间 + */ + @JsonFormat(pattern = "yyyy/MM/dd", timezone = "GMT+8") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date employmentDate; + + /** + * 从业年限 + */ + private String employmentYears; + + /**人员详情*/ + @Data + public static class PersonnelDetailVo { + private EnterprisePersonnel enterprisePersonnel; + /**人员相关资源文件*/ + private List resourceFileVoList; + /**人员相关证书*/ + private List certificateDetailList; + } + + /**人员证书*/ + @Data + public static class CertificateDetailVo { + private PersonnelCertificate certificate; + private List fileVoList; + } + + +} \ No newline at end of file diff --git a/bonus-common/src/main/java/com/bonus/common/utils/CertificateUtil.java b/bonus-common/src/main/java/com/bonus/common/utils/CertificateUtil.java index 762aca7..0adedcf 100644 --- a/bonus-common/src/main/java/com/bonus/common/utils/CertificateUtil.java +++ b/bonus-common/src/main/java/com/bonus/common/utils/CertificateUtil.java @@ -1,54 +1,128 @@ package com.bonus.common.utils; -import cn.hutool.core.date.DateTime; -import cn.hutool.core.lang.generator.UUIDGenerator; import com.bonus.common.domain.mainDatabase.po.ErrorInfo; import java.util.Date; -import java.util.Objects; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; /** - * @className:CertificateUtil - * @author:cwchen - * @date:2025-10-23-10:00 - * @version:1.0 - * @description:证书工具类 + * @className: CertificateUtil + * @author: cwchen + * @date: 2025-10-23-10:00 + * @version: 1.0 + * @description: 证书工具类 */ public class CertificateUtil { + /** + * 证书类型与错误信息的映射 + */ + private static final Map CERTIFICATE_ERROR_MAP = new HashMap<>(); + + static { + // 初始化证书类型与错误信息的映射 + CERTIFICATE_ERROR_MAP.put("national_emblem_id_card", "身份证过期"); + CERTIFICATE_ERROR_MAP.put("constructor_certificate", "建造师证书过期"); + CERTIFICATE_ERROR_MAP.put("safety_assessment_certificate_b", "安全考核B证过期"); + CERTIFICATE_ERROR_MAP.put("safety_assessment_certificate_c", "安全考核C证过期"); + CERTIFICATE_ERROR_MAP.put("professional_title_certificate", "质检员证过期"); + CERTIFICATE_ERROR_MAP.put("quality_inspector_certificate", "质检员证过期"); + CERTIFICATE_ERROR_MAP.put("construction_worker_certificate", "施工员证过期"); + CERTIFICATE_ERROR_MAP.put("materials_officer_certificate", "材料员证过期"); + CERTIFICATE_ERROR_MAP.put("mechanic_s_certificate", "机械员证过期"); + CERTIFICATE_ERROR_MAP.put("cost_engineer_certificate", "造价员证过期"); + } + + /** + * 长期有效的标识 + */ + private static final String[] PERMANENT_INDICATORS = {"长期", "永久"}; + /** * 检查证书是否过期 * - * @param endDate - * @param certificateType - * @return ErrorInfo + * @param endDate 结束日期 + * @param certificateType 证书类型 + * @param businessId 业务ID + * @param enterpriseId 企业ID + * @return ErrorInfo 错误信息,如果未过期返回null * @author cwchen * @date 2025/10/23 10:02 */ - public static ErrorInfo checkCertificateState(String endDate, String certificateType, Long businessId, Long enterpriseId) { - boolean flag = false; - StringBuilder sb = new StringBuilder(); - switch (certificateType) { - case "national_emblem_id_card": // 身份证 - if(!endDate.contains("长期") || !endDate.contains("永久")){ - String[] split = endDate.split("-"); - if(split.length == 2){ - flag = DateTimeHelper.isExpired(split[1]); - } - } - sb.append("身份证过期"); - break; - } - if(!flag){ + public static ErrorInfo checkCertificateState(String endDate, String certificateType, + Long businessId, Long enterpriseId) { + // 检查证书是否过期 + boolean isExpired = isCertificateExpired(endDate, certificateType); + + if (!isExpired) { return null; } + + // 构建错误信息 + return buildErrorInfo(businessId, enterpriseId, certificateType); + } + + /** + * 检查证书是否过期 + */ + private static boolean isCertificateExpired(String endDate, String certificateType) { + // 处理空值情况 + if (endDate == null || endDate.trim().isEmpty()) { + return true; // 如果日期为空,视为过期 + } + + // 身份证特殊处理 + if ("national_emblem_id_card".equals(certificateType)) { + return isIdCardExpired(endDate); + } + + // 其他证书直接检查过期 + return DateTimeHelper.isExpired(endDate); + } + + /** + * 检查身份证是否过期 + */ + private static boolean isIdCardExpired(String endDate) { + // 检查是否为长期有效 + for (String indicator : PERMANENT_INDICATORS) { + if (endDate.contains(indicator)) { + return false; + } + } + + // 处理日期格式:起始日期-结束日期 + String[] dateParts = endDate.split("-"); + if (dateParts.length == 2) { + return DateTimeHelper.isExpired(dateParts[1]); + } + + // 如果格式不符合预期,按普通日期处理 + return DateTimeHelper.isExpired(endDate); + } + + /** + * 构建错误信息对象 + */ + private static ErrorInfo buildErrorInfo(Long businessId, Long enterpriseId, String certificateType) { + String errorContent = CERTIFICATE_ERROR_MAP.getOrDefault(certificateType, "证书过期"); + ErrorInfo errorInfo = new ErrorInfo(); - errorInfo.setErrorId(UUID.randomUUID().toString().replace("-", "")); + errorInfo.setErrorId(generateErrorId()); errorInfo.setBusinessId(businessId); errorInfo.setEnterpriseId(enterpriseId); errorInfo.setErrorTime(new Date()); - errorInfo.setErrorContent(sb.toString()); + errorInfo.setErrorContent(errorContent); + return errorInfo; } -} + + /** + * 生成错误ID + */ + private static String generateErrorId() { + return UUID.randomUUID().toString().replace("-", ""); + } +} \ No newline at end of file diff --git a/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java b/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java index d412043..c6e551f 100644 --- a/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java +++ b/bonus-file/src/main/java/com/bonus/file/mapper/ISourceFileMapper.java @@ -57,4 +57,13 @@ public interface ISourceFileMapper { * @date 2025/10/23 13:43 */ List getFilesByTable(@Param("businessId") Long businessId, @Param("dataBaseName") String dataBaseName); + + /** + * 删除证书资源文件根据业务id、来源表、业务类型 + * @param delFiles + * @return void + * @author cwchen + * @date 2025/10/24 11:10 + */ + void delResourceFileBybusinessId(List delFiles); } diff --git a/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java b/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java index 3a95ccc..a0171ae 100644 --- a/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java +++ b/bonus-file/src/main/java/com/bonus/file/service/SourceFileService.java @@ -79,4 +79,15 @@ public class SourceFileService { return null; } } + + /** + * 删除证书资源文件根据业务id、来源表、业务类型 + * @param delFiles + * @return void + * @author cwchen + * @date 2025/10/24 11:10 + */ + public void delResourceFileBybusinessId(List delFiles) { + mapper.delResourceFileBybusinessId(delFiles); + } } diff --git a/bonus-file/src/main/resources/mapper/SourceFileMapper.xml b/bonus-file/src/main/resources/mapper/SourceFileMapper.xml index 72aac9f..1205b85 100644 --- a/bonus-file/src/main/resources/mapper/SourceFileMapper.xml +++ b/bonus-file/src/main/resources/mapper/SourceFileMapper.xml @@ -65,4 +65,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM sys_resource_file WHERE business_id = #{businessId} AND source_table = #{dataBaseName} AND del_flag = '0' + + + + UPDATE sys_resource_file + SET del_flag = '1' + WHERE EXISTS ( + SELECT 1 FROM ( + + SELECT + #{item.sourceTable} AS source_table, + #{item.businessId} AS business_id, + #{item.businessType} AS business_type + + ) t + WHERE sys_resource_file.source_table = t.source_table + AND sys_resource_file.business_id = t.business_id + AND sys_resource_file.business_type = t.business_type + ) + diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDCertificateMapper.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDCertificateMapper.java new file mode 100644 index 0000000..7756796 --- /dev/null +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDCertificateMapper.java @@ -0,0 +1,63 @@ +package com.bonus.mainDataBase.mapper; + +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.PersonnelCertificate; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @className:IMDCertificateMapper + * @author:cwchen + * @date:2025-10-24-10:02 + * @version:1.0 + * @description:人员证书-数据层 + */ +@Repository(value = "IMDCertificateMapper") +public interface IMDCertificateMapper { + /** + * 添加人员证书 + * @param list + * @return void + * @author cwchen + * @date 2025/10/24 10:08 + */ + void addCertificateData(List list); + + /** + * 查询人员职位是否发生了变化,是否导致证书类型也发生了变化 + * @param list + * @return List + * @author cwchen + * @date 2025/10/24 10:46 + */ + List getCertificateChange(@Param("list") List list,@Param("personnelId") Long personnelId); + + /** + * 删除证书 + * @param list + * @return void + * @author cwchen + * @date 2025/10/24 11:02 + */ + void delCertificate(List list); + + /** + * 修改人员证书 + * @param list + * @return void + * @author cwchen + * @date 2025/10/24 11:16 + */ + void editCertificateData(List list); + + /** + * 查询人员相关证书 + * @param dto + * @return List + * @author cwchen + * @date 2025/10/24 13:12 + */ + List getCertificates(EnterprisePersonnelDto dto); +} diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java index 58cbf2e..0938e25 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java @@ -47,4 +47,13 @@ public interface IMDErrorInfoMapper { * @date 2025/10/23 13:10 */ void delErrorByTable(@Param("businessId") Long businessId, @Param("sourceTable") String sourceTable); + + /** + * 删除异常信息数据-根据业务id、业务类型、来源表 + * @param list + * @return void + * @author cwchen + * @date 2025/10/24 12:18 + */ + void delErrorInfoByBusinessId(List list); } diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDPersonnelMapper.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDPersonnelMapper.java new file mode 100644 index 0000000..50d381e --- /dev/null +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDPersonnelMapper.java @@ -0,0 +1,69 @@ +package com.bonus.mainDataBase.mapper; + +import com.bonus.common.domain.mainDatabase.dto.EnterpriseDto; +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.EnterprisePersonnel; +import com.bonus.common.domain.mainDatabase.vo.EnterprisePersonnelVo; +import com.bonus.common.domain.mainDatabase.vo.EnterpriseVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; + +/** + * @className: IMDPersonnelMapper + * @author: cwchen + * @date: 2025-10-22-16:25 + * @version: 1.0 + * @description: 人员库-数据层 + */ +@Repository(value = "IMDPersonnelMapper") +public interface IMDPersonnelMapper { + + /** + * 人员库->查询列表 + * + * @param dto + * @return List + * @author cwchen + * @date 2025/10/23 17:43 + */ + List getList(EnterprisePersonnelDto dto); + + /** + * 操作人员库数据 + * @param dto + * @param type 1.新增 2.修改 3.删除 + * @return void + * @author cwchen + * @date 2025/10/23 18:19 + */ + void operPersonnelData(@Param("params") EnterprisePersonnelDto dto,@Param("type") int type); + + /** + * 人员身份证不能重复 + * @param dto + * @return int + * @author cwchen + * @date 2025/10/23 18:34 + */ + int isRepeat(EnterprisePersonnelDto dto); + + /** + * 判断人员是否被引用 + * @param dto + * @return int + * @author cwchen + * @date 2025/10/24 13:05 + */ + int getUseNum(EnterprisePersonnelDto dto); + + /** + * 查询人员详情 + * @param dto + * @return EnterprisePersonnel + * @author cwchen + * @date 2025/10/24 13:27 + */ + EnterprisePersonnel getPersonnelData(EnterprisePersonnelDto dto); +} diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDCertificateService.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDCertificateService.java new file mode 100644 index 0000000..dc66199 --- /dev/null +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDCertificateService.java @@ -0,0 +1,61 @@ +package com.bonus.mainDataBase.service; + +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.PersonnelCertificate; + +import java.util.List; + +/** + * @className:IMDCertificateService + * @author:cwchen + * @date:2025-10-24-10:00 + * @version:1.0 + * @description:人员证书-业务层 + */ +public interface IMDCertificateService { + /** + * 添加人员证书 + * @param personnelCertificateFiles + * @return void + * @author cwchen + * @date 2025/10/24 10:45 + */ + void addCertificateData(List personnelCertificateFiles); + + /** + * 查询人员职位是否发生了变化,是否导致证书类型也发生了变化 + * @param personnelCertificateFiles + * @param personnelId + * @return List + * @author cwchen + * @date 2025/10/24 10:45 + */ + List getCertificateChange(List personnelCertificateFiles,Long personnelId); + + /** + * 删除证书 + * @param changeList + * @return void + * @author cwchen + * @date 2025/10/24 11:01 + */ + void delCertificate(List changeList); + + /** + * 修改人员证书 + * @param personnelCertificateFiles + * @return void + * @author cwchen + * @date 2025/10/24 11:15 + */ + void editCertificateData(List personnelCertificateFiles); + + /** + * 查询人员相关证书 + * @param dto + * @return List + * @author cwchen + * @date 2025/10/24 13:11 + */ + List getCertificates(EnterprisePersonnelDto dto); +} diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java index 2837361..1c8100c 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java @@ -45,4 +45,13 @@ public interface IMDErrorInfoService { * @date 2025/10/23 13:10 */ void delErrorByTable(Long enterpriseId, String tbEnterprise); + + /** + * 删除异常信息数据-根据业务id、业务类型、来源表 + * @param errorInfoList + * @return void + * @author cwchen + * @date 2025/10/24 12:18 + */ + void delErrorInfoByBusinessId(List errorInfoList); } diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDPersonnelService.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDPersonnelService.java new file mode 100644 index 0000000..ba35218 --- /dev/null +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDPersonnelService.java @@ -0,0 +1,63 @@ +package com.bonus.mainDataBase.service; + +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.EnterprisePersonnel; +import com.bonus.common.domain.mainDatabase.vo.EnterprisePersonnelVo; + +import java.util.List; + +/** + * @className:IMDPersonnelService + * @author:cwchen + * @date:2025-10-23-17:36 + * @version:1.0 + * @description:人员库-具体业务层 + */ +public interface IMDPersonnelService { + + /** + * 人员库->查询列表 + * @param dto + * @return List + * @author cwchen + * @date 2025/10/23 17:41 + */ + List getList(EnterprisePersonnelDto dto); + + /** + * 操作人员库数据 + * @param dto + * @param type + * @return void + * @author cwchen + * @date 2025/10/23 18:18 + */ + void operPersonnelData(EnterprisePersonnelDto dto, int type); + + /** + * 人员身份证不能重复 + * @param dto + * @return int + * @author cwchen + * @date 2025/10/23 18:34 + */ + int isRepeat(EnterprisePersonnelDto dto); + + /** + * 判断人员是否被引用 + * @param dto + * @return int + * @author cwchen + * @date 2025/10/24 13:04 + */ + int getUseNum(EnterprisePersonnelDto dto); + + /** + * 查询人员详情 + * @param dto + * @return EnterprisePersonnel + * @author cwchen + * @date 2025/10/24 13:26 + */ + EnterprisePersonnel getPersonnelData(EnterprisePersonnelDto dto); +} diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDCertificateServiceImpl.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDCertificateServiceImpl.java new file mode 100644 index 0000000..669c490 --- /dev/null +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDCertificateServiceImpl.java @@ -0,0 +1,63 @@ +package com.bonus.mainDataBase.service.impl; + +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.PersonnelCertificate; +import com.bonus.mainDataBase.mapper.IMDCertificateMapper; +import com.bonus.mainDataBase.service.IMDCertificateService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * @className:MDCertificateServiceImpl + * @author:cwchen + * @date:2025-10-24-10:01 + * @version:1.0 + * @description:人员证书-业务实现层 + */ +@Service(value = "IMDCertificateService") +@Slf4j +public class MDCertificateServiceImpl implements IMDCertificateService { + + @Resource(name = "IMDCertificateMapper") + private IMDCertificateMapper imdCertificateMapper; + + + @Override + public void addCertificateData(List personnelCertificateFiles) { + imdCertificateMapper.addCertificateData(personnelCertificateFiles); + } + + @Override + public List getCertificateChange(List personnelCertificateFiles,Long personnelId) { + try { + return Optional.ofNullable(imdCertificateMapper.getCertificateChange(personnelCertificateFiles,personnelId)).orElse(new ArrayList<>()); + } catch (Exception e) { + return null; + } + } + + @Override + public void delCertificate(List list) { + imdCertificateMapper.delCertificate(list); + } + + @Override + public void editCertificateData(List list) { + imdCertificateMapper.editCertificateData(list); + } + + @Override + public List getCertificates(EnterprisePersonnelDto dto) { + try { + return Optional.ofNullable(imdCertificateMapper.getCertificates(dto)).orElse(new ArrayList<>()); + } catch (Exception e) { + return null; + } + } +} diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java index 2b8978a..eb686df 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java @@ -38,4 +38,9 @@ public class MDErrorInfoServiceImpl implements IMDErrorInfoService { public void delErrorByTable(Long businessId, String sourceTable) { imdErrorInfoMapper.delErrorByTable(businessId,sourceTable); } + + @Override + public void delErrorInfoByBusinessId(List errorInfoList) { + imdErrorInfoMapper.delErrorInfoByBusinessId(errorInfoList); + } } diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDPersonnelServiceImpl.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDPersonnelServiceImpl.java new file mode 100644 index 0000000..4c8408a --- /dev/null +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDPersonnelServiceImpl.java @@ -0,0 +1,77 @@ +package com.bonus.mainDataBase.service.impl; + +import com.bonus.common.domain.mainDatabase.dto.EnterprisePersonnelDto; +import com.bonus.common.domain.mainDatabase.po.EnterprisePersonnel; +import com.bonus.common.domain.mainDatabase.vo.EnterprisePersonnelVo; +import com.bonus.common.domain.mainDatabase.vo.EnterpriseVo; +import com.bonus.mainDataBase.mapper.IMDPersonnelMapper; +import com.bonus.mainDataBase.service.IMDPersonnelService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +/** + * @className:MDPersonnelServiceImpl + * @author:cwchen + * @date:2025-10-23-17:37 + * @version:1.0 + * @description:人员库-具体业务实现层 + */ +@Service(value = "IMDPersonnelService") +@Slf4j +public class MDPersonnelServiceImpl implements IMDPersonnelService { + + @Resource(name = "IMDPersonnelMapper") + private IMDPersonnelMapper imdPersonnelMapper; + + @Override + public List getList(EnterprisePersonnelDto dto) { + try { + List list = Optional.ofNullable(imdPersonnelMapper.getList(dto)).orElse(new ArrayList<>()); + return list; + } catch (Exception e) { + log.error(e.toString(), e); + return new ArrayList<>(); + } + } + + @Override + public void operPersonnelData(EnterprisePersonnelDto dto, int type) { + imdPersonnelMapper.operPersonnelData(dto,type); + } + + @Override + public int isRepeat(EnterprisePersonnelDto dto) { + try { + return Optional.ofNullable(imdPersonnelMapper.isRepeat(dto)).orElse(0); + } catch (Exception e) { + log.error(e.toString(), e); + return 0; + } + } + + @Override + public int getUseNum(EnterprisePersonnelDto dto) { + try { + return Optional.ofNullable(imdPersonnelMapper.getUseNum(dto)).orElse(0); + } catch (Exception e) { + log.error(e.toString(), e); + return 0; + } + } + + @Override + public EnterprisePersonnel getPersonnelData(EnterprisePersonnelDto dto) { + try { + return Optional.ofNullable(imdPersonnelMapper.getPersonnelData(dto)).orElse(new EnterprisePersonnel()); + } catch (Exception e) { + log.error(e.toString(), e); + return new EnterprisePersonnel(); + } + } +} diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/TestServiceImpl.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/TestServiceImpl.java deleted file mode 100644 index 541ca1d..0000000 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/TestServiceImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.bonus.mainDataBase.service.impl; - -import com.bonus.common.domain.file.po.ResourceFilePo; -import com.bonus.mainDataBase.service.ITestService; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -/** - * @className:TestServiceImpl - * @author:cwchen - * @date:2025-10-17-16:50 - * @version:1.0 - * @description:测试 - */ -@Service(value = "TestService") -public class TestServiceImpl implements ITestService { - -} diff --git a/bonus-mainDatabase/src/main/resources/mapper/CertificateMapper.xml b/bonus-mainDatabase/src/main/resources/mapper/CertificateMapper.xml new file mode 100644 index 0000000..09e4009 --- /dev/null +++ b/bonus-mainDatabase/src/main/resources/mapper/CertificateMapper.xml @@ -0,0 +1,80 @@ + + + + + + + INSERT INTO tb_personnel_certificate + (personnel_id, certificate_type, professional_type, certificate_code, certificate_level, + certificate_validity_period,use_validity_period,register_professional,title_name,professional_name) + VALUES + + ( + #{item.personnelCertificate.personnelId}, + #{item.personnelCertificate.certificateType}, + #{item.personnelCertificate.professionalType}, + #{item.personnelCertificate.certificateCode}, + #{item.personnelCertificate.certificateLevel}, + #{item.personnelCertificate.certificateValidityPeriod}, + #{item.personnelCertificate.useValidityPeriod}, + #{item.personnelCertificate.registerProfessional}, + #{item.personnelCertificate.titleName}, + #{item.personnelCertificate.professionalName} + ) + + + + + + + + + UPDATE tb_personnel_certificate SET del_flag = '1' WHERE personnel_certificate_id IN + + #{item.personnelCertificateId} + + + + + + + UPDATE tb_personnel_certificate + SET + certificate_type = #{item.personnelCertificate.certificateType}, + professional_type = #{item.personnelCertificate.professionalType}, + certificate_code = #{item.personnelCertificate.certificateCode}, + certificate_level = #{item.personnelCertificate.certificateLevel}, + certificate_validity_period = #{item.personnelCertificate.certificateValidityPeriod}, + use_validity_period = #{item.personnelCertificate.useValidityPeriod}, + register_professional = #{item.personnelCertificate.registerProfessional}, + title_name = #{item.personnelCertificate.titleName}, + professional_name = #{item.personnelCertificate.professionalName} + WHERE personnel_certificate_id = #{item.personnelCertificate.personnelCertificateId} + + + + + + diff --git a/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml b/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml index 2b73a8b..ce511a9 100644 --- a/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml +++ b/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml @@ -40,4 +40,22 @@ DELETE FROM tb_error_info WHERE business_id = #{businessId} AND source_table = #{sourceTable} + + + + DELETE FROM tb_error_info + WHERE EXISTS ( + SELECT 1 FROM ( + + SELECT + #{item.businessId} AS business_id, + #{item.sourceTable} AS source_table, + #{item.businessType} AS business_type + + ) t + WHERE tb_error_info.business_id = t.business_id + AND tb_error_info.source_table = t.source_table + AND tb_error_info.business_type = t.business_type + ) + diff --git a/bonus-mainDatabase/src/main/resources/mapper/PersonnelMapper.xml b/bonus-mainDatabase/src/main/resources/mapper/PersonnelMapper.xml new file mode 100644 index 0000000..aca5bfd --- /dev/null +++ b/bonus-mainDatabase/src/main/resources/mapper/PersonnelMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + INSERT INTO tb_enterprise_personnel + + enterprise_id, + personnel_position, + personnel_name, + personnel_id_card, + employment_date, + employment_years, + graduate_school, + graduation_major, + qualification, + graduation_date, + personnel_phone, + personnel_introduction, + create_user_id, + create_user_name, + update_user_id, + update_user_name + + + #{params.enterpriseId}, + #{params.personnelPosition}, + #{params.personnelName}, + #{params.personnelIdCard}, + #{params.employmentDate}, + #{params.employmentYears}, + #{params.graduateSchool}, + #{params.graduationMajor}, + #{params.qualification}, + #{params.graduationDate}, + #{params.personnelPhone}, + #{params.personnelIntroduction}, + #{params.createUserId}, + #{params.createUserName}, + #{params.updateUserId}, + #{params.updateUserName}, + + + + UPDATE tb_enterprise_personnel + SET + personnel_position = #{params.personnelPosition}, + personnel_name = #{params.personnelName}, + personnel_id_card = #{params.personnelIdCard}, + employment_date = #{params.employmentDate}, + employment_years = #{params.employmentYears}, + graduate_school = #{params.graduateSchool}, + graduation_major = #{params.graduationMajor}, + qualification = #{params.qualification}, + graduation_date = #{params.graduationDate}, + personnel_phone = #{params.personnelPhone}, + personnel_introduction = #{params.personnelIntroduction} + WHERE personnel_id = #{params.personnelId}; + + + UPDATE tb_enterprise_personnel SET del_flag = '1' WHERE personnel_id = #{params.personnelId} + + + + + +