1、新增企业证照管理

2、人员证照管理
3、股份端的人员证照、企业证照统计
main
hezhiqiang 2026-01-08 09:09:47 +08:00
parent 1a9f412f90
commit bc5ce255b2
45 changed files with 1705 additions and 23 deletions

View File

@ -13,6 +13,8 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>

View File

@ -2,11 +2,8 @@ package com.zcloud.certificate.web;
import com.zcloud.certificate.api.CorpCertificateServiceI;
import com.zcloud.certificate.dto.CorpCertificateAddCmd;
import com.zcloud.certificate.dto.CorpCertificatePageQry;
import com.zcloud.certificate.dto.CorpCertificateListQry;
import com.zcloud.certificate.dto.CorpCertificateUpdateCmd;
import com.zcloud.certificate.dto.CorpCertificateRemoveCmd;
import com.zcloud.certificate.dto.*;
import com.zcloud.certificate.dto.clientobject.CertificateStatisticsCO;
import com.zcloud.certificate.dto.clientobject.CorpCertificateCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
@ -79,5 +76,11 @@ public class CorpCertificateController {
return SingleResponse.buildSuccess();
}
@ApiOperation("股份端查看分公司/相关方证照统计信息分页")
@PostMapping("/statPage")
public PageResponse<CertificateStatisticsCO> statPage(@RequestBody CorpCertificateStatPageQry qry) {
return corpCertificateService.statPage(qry);
}
}

View File

@ -0,0 +1,87 @@
package com.zcloud.certificate.web;
import com.zcloud.certificate.api.UserCertificateServiceI;
import com.zcloud.certificate.dto.CorpCertificateStatPageQry;
import com.zcloud.certificate.dto.UserCertificateAddCmd;
import com.zcloud.certificate.dto.UserCertificatePageQry;
import com.zcloud.certificate.dto.UserCertificateUpdateCmd;
import com.zcloud.certificate.dto.clientobject.UserCertificateCO;
import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.Response;
import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
/**
* web-adapter
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Api(tags = "个人证照管理")
@RequestMapping("/${application.gateway}/userCertificate")
@RestController
@AllArgsConstructor
public class UserCertificateController {
private final UserCertificateServiceI userCertificateService;
@ApiOperation("新增")
@PostMapping("/save")
public SingleResponse<UserCertificateCO> add(@Validated @RequestBody UserCertificateAddCmd cmd) {
SSOUser ssoUser = AuthContext.getCurrentUser();
return userCertificateService.add(cmd);
}
@ApiOperation("分页")
@PostMapping("/list")
public PageResponse<UserCertificateCO> page(@RequestBody UserCertificatePageQry qry) {
return userCertificateService.listPage(qry);
}
@ApiOperation("所有数据")
@GetMapping("/listAll")
public MultiResponse<UserCertificateCO> listAll() {
return MultiResponse.of(new ArrayList<UserCertificateCO>());
}
@ApiOperation("详情")
@GetMapping("/getInfoById/{id}")
public SingleResponse<UserCertificateCO> getInfoById(@PathVariable("id") Long id) {
return SingleResponse.of(userCertificateService.queryById(id));
}
@ApiOperation("删除")
@DeleteMapping("/delete/{id}")
public Response remove(@PathVariable("id") Long id) {
userCertificateService.remove(id);
return SingleResponse.buildSuccess();
}
@ApiOperation("删除多个")
@DeleteMapping("/deleteBatch/{ids}")
public Response removeBatch(@RequestParam Long[] ids) {
userCertificateService.removeBatch(ids);
return SingleResponse.buildSuccess();
}
@ApiOperation("修改")
@PutMapping("/edit")
public SingleResponse edit(@Validated @RequestBody UserCertificateUpdateCmd userCertificateUpdateCmd) {
userCertificateService.edit(userCertificateUpdateCmd);
return SingleResponse.buildSuccess();
}
@ApiOperation("股份端查询企业/相关方各类人员证书数量分页")
@PostMapping("/corpCertificateStatPage")
public PageResponse corpCertificateStatPage(@RequestBody CorpCertificateStatPageQry qry) {
return userCertificateService.corpCertificateStatPage(qry);
}
}

View File

@ -1,9 +1,12 @@
package com.zcloud.certificate.command;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import com.zcloud.certificate.domain.gateway.CorpCertificateGateway;
import com.zcloud.certificate.domain.model.CorpCertificateE;
import com.zcloud.certificate.dto.CorpCertificateAddCmd;
import com.alibaba.cola.exception.BizException;
import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
@ -25,8 +28,17 @@ public class CorpCertificateAddExe {
public boolean execute(CorpCertificateAddCmd cmd) {
CorpCertificateE corpCertificateE = new CorpCertificateE();
BeanUtils.copyProperties(cmd, corpCertificateE);
Boolean certificate = corpCertificateGateway.checkCertificateExist(corpCertificateE);
if (!certificate) {
throw new BizException("证照编号已存在");
}
boolean res = false;
try {
if (corpCertificateE.getCorpCertificateId() == null) {
corpCertificateE.setCorpCertificateId(IdUtil.simpleUUID());
}
res = corpCertificateGateway.add(corpCertificateE);
} catch (Exception e) {
throw new RuntimeException(e);

View File

@ -25,6 +25,11 @@ public class CorpCertificateUpdateExe {
public void execute(CorpCertificateUpdateCmd cmd) {
CorpCertificateE corpCertificateE = new CorpCertificateE();
BeanUtils.copyProperties(cmd, corpCertificateE);
Boolean certificate = corpCertificateGateway.checkCertificateExist(corpCertificateE);
if (!certificate) {
throw new BizException("证照编号已存在");
}
boolean res = corpCertificateGateway.update(corpCertificateE);
if (!res) {
throw new BizException("修改失败");

View File

@ -0,0 +1,47 @@
package com.zcloud.certificate.command;
import com.zcloud.certificate.domain.gateway.UserCertificateGateway;
import com.zcloud.certificate.domain.model.UserCertificateE;
import com.zcloud.certificate.dto.UserCertificateAddCmd;
import com.alibaba.cola.exception.BizException;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Component
@AllArgsConstructor
public class UserCertificateAddExe {
private final UserCertificateGateway userCertificateGateway;
@Transactional(rollbackFor = Exception.class)
public boolean execute(UserCertificateAddCmd cmd) {
UserCertificateE userCertificateE = new UserCertificateE();
BeanUtils.copyProperties(cmd, userCertificateE);
Boolean certificate = userCertificateGateway.checkCertificateExist(userCertificateE);
if (certificate) {
throw new BizException("证书编号已存在");
}
boolean res = false;
try {
res = userCertificateGateway.add(userCertificateE);
} catch (Exception e) {
throw new RuntimeException(e);
}
if (!res) {
throw new BizException("保存失败");
}
return true;
}
}

View File

@ -0,0 +1,40 @@
package com.zcloud.certificate.command;
import com.zcloud.certificate.domain.gateway.UserCertificateGateway;
import com.alibaba.cola.exception.BizException;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Component
@AllArgsConstructor
public class UserCertificateRemoveExe {
private final UserCertificateGateway userCertificateGateway;
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long id) {
boolean res = userCertificateGateway.deletedUserCertificateById(id);
if(!res){
throw new BizException("删除失败");
}
return true;
}
@Transactional(rollbackFor = Exception.class)
public boolean execute(Long[] ids) {
boolean res = userCertificateGateway.deletedUserCertificateByIds(ids);
if(!res){
throw new BizException("删除失败");
}
return true;
}
}

View File

@ -0,0 +1,42 @@
package com.zcloud.certificate.command;
import com.alibaba.cola.exception.BizException;
import com.zcloud.certificate.domain.gateway.UserCertificateGateway;
import com.zcloud.certificate.domain.model.UserCertificateE;
import com.zcloud.certificate.dto.UserCertificateUpdateCmd;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* web-app
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Component
@AllArgsConstructor
public class UserCertificateUpdateExe {
private final UserCertificateGateway userCertificateGateway;
@Transactional(rollbackFor = Exception.class)
public void execute(UserCertificateUpdateCmd userCertificateUpdateCmd) {
UserCertificateE userCertificateE = new UserCertificateE();
BeanUtils.copyProperties(userCertificateUpdateCmd, userCertificateE);
Boolean certificate = userCertificateGateway.checkCertificateExist(userCertificateE);
if (certificate) {
throw new BizException("证书编号已存在");
}
boolean res = userCertificateGateway.update(userCertificateE);
if (!res) {
throw new BizException("修改失败");
}
}
}

View File

@ -0,0 +1,13 @@
package com.zcloud.certificate.command.convertor;
import com.zcloud.certificate.dto.clientobject.CertificateStatisticsCO;
import com.zcloud.certificate.persistence.dataobject.CorpInfoDO;
import org.mapstruct.Mapper;
import java.util.List;
@Mapper(componentModel = "spring")
public interface CorpCertificateStatCoConvertor {
List<CertificateStatisticsCO> convertRowsToCOs(List<CorpInfoDO> rows);
}

View File

@ -0,0 +1,30 @@
package com.zcloud.certificate.command.convertor;
import com.zcloud.certificate.dto.clientobject.UserCertificateCO;
import com.zcloud.certificate.dto.clientobject.UserCertificateStatCO;
import com.zcloud.certificate.persistence.dataobject.UserCertificateDO;
import com.zcloud.certificate.persistence.dataobject.UserCertificateStatDO;
import org.mapstruct.Mapper;
import java.util.List;
/**
* web-app
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Mapper(componentModel = "spring")
public interface UserCertificateCoConvertor {
/**
* @param userCertificateDOs
* @return
*/
List<UserCertificateCO> converDOsToCOs(List<UserCertificateDO> userCertificateDOs);
UserCertificateCO converDOToCO(UserCertificateDO userCertificateDO);
List<UserCertificateStatCO> converStatDOsToStatCOs(List<UserCertificateStatDO> userCertificateStatDOs);
}

View File

@ -2,10 +2,14 @@ package com.zcloud.certificate.command.query;
import com.alibaba.cola.dto.MultiResponse;
import com.zcloud.certificate.command.convertor.CorpCertificateCoConvertor;
import com.zcloud.certificate.command.convertor.CorpCertificateStatCoConvertor;
import com.zcloud.certificate.dto.CorpCertificatePageQry;
import com.zcloud.certificate.dto.CorpCertificateListQry;
import com.zcloud.certificate.dto.CorpCertificateStatPageQry;
import com.zcloud.certificate.dto.clientobject.CertificateStatisticsCO;
import com.zcloud.certificate.dto.clientobject.CorpCertificateCO;
import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
import com.zcloud.certificate.persistence.dataobject.CorpInfoDO;
import com.zcloud.certificate.persistence.repository.CorpCertificateRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.alibaba.cola.dto.PageResponse;
@ -29,6 +33,7 @@ import java.util.Map;
public class CorpCertificateQueryExe {
private final CorpCertificateRepository corpCertificateRepository;
private final CorpCertificateCoConvertor corpCertificateCoConvertor;
private final CorpCertificateStatCoConvertor corpCertificateStatCoConvertor;
/**
*
@ -37,6 +42,7 @@ public class CorpCertificateQueryExe {
*/
public PageResponse<CorpCertificateCO> execute(CorpCertificatePageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<CorpCertificateDO> pageResponse = corpCertificateRepository.listPage(params);
List<CorpCertificateCO> examCenterCOS = corpCertificateCoConvertor.converDOsToCOs(pageResponse.getData());
return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex());
@ -56,5 +62,24 @@ public class CorpCertificateQueryExe {
return SingleResponse.of(co);
}
public PageResponse<CertificateStatisticsCO> statPage(CorpCertificateStatPageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
PageResponse<CorpInfoDO> pageResponse =
corpCertificateRepository.statPage(params);
List<CertificateStatisticsCO> cos =
corpCertificateStatCoConvertor.convertRowsToCOs(pageResponse.getData());
return PageResponse.of(
cos,
pageResponse.getTotalCount(),
pageResponse.getPageSize(),
pageResponse.getPageIndex()
);
}
}

View File

@ -0,0 +1,108 @@
package com.zcloud.certificate.command.query;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zcloud.certificate.command.convertor.UserCertificateCoConvertor;
import com.zcloud.certificate.dto.CorpCertificateStatPageQry;
import com.zcloud.certificate.dto.UserCertificatePageQry;
import com.zcloud.certificate.dto.clientobject.UserCertificateCO;
import com.zcloud.certificate.dto.clientobject.UserCertificateStatCO;
import com.zcloud.certificate.persistence.dataobject.UserCertificateDO;
import com.zcloud.certificate.persistence.dataobject.UserCertificateStatDO;
import com.zcloud.certificate.persistence.dataobject.UserDO;
import com.zcloud.certificate.persistence.repository.UserCertificateRepository;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.alibaba.cola.dto.PageResponse;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* web-app
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Component
@AllArgsConstructor
public class UserCertificateQueryExe {
private final UserCertificateRepository userCertificateRepository;
private final UserCertificateCoConvertor userCertificateCoConvertor;
/**
* id
* @param id
* @return
*/
public UserCertificateCO queryById(Long id) {
UserCertificateCO userCertificateCO = userCertificateCoConvertor.converDOToCO(userCertificateRepository.getById(id));
if (userCertificateCO == null) {
return null;
}
// 查询用户名 在职状态并设置
UserDO userDO = userCertificateRepository.getUserNamesByUserIds(Collections.singletonList(userCertificateCO.getUserId())).stream().findFirst().orElse(null);
if (userDO != null) {
userCertificateCO.setUserName(userDO.getUserName());
userCertificateCO.setEmploymentStatus(userDO.getEmploymentStatus());
userCertificateCO.setPostName(userDO.getPostName());
userCertificateCO.setDepartmentName(userDO.getDepartmentName());
userCertificateCO.setCorpinfoName(userDO.getCorpinfoName());
}
return userCertificateCO;
}
/**
*
*
* @return
*/
public PageResponse<UserCertificateCO> execute(UserCertificatePageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
IPage<UserCertificateDO> iPage = userCertificateRepository.listPageWithUser(new Page<>(qry.getPageIndex(), qry.getPageSize()), params);
List<UserCertificateCO> cos = Optional.ofNullable(iPage.getRecords())
.orElse(Collections.emptyList())
.stream()
.map(userCertificateCoConvertor::converDOToCO)
.collect(Collectors.toList());
return PageResponse.of(
cos,
(int) iPage.getTotal(),
(int) iPage.getSize(),
(int) iPage.getCurrent()
);
}
/**
* //
*/
public PageResponse<UserCertificateStatCO> execute(CorpCertificateStatPageQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
IPage<UserCertificateStatDO> page = new Page<>(
qry.getPageIndex(),
qry.getPageSize()
);
IPage<UserCertificateStatDO> result =
userCertificateRepository.selectCorpCertificateStatPage(page, params);
List<UserCertificateStatCO> cos = userCertificateCoConvertor.converStatDOsToStatCOs(
Optional.ofNullable(result.getRecords()).orElse(Collections.emptyList())
);
return PageResponse.of(
cos,
(int)result.getTotal(),
(int) result.getSize(),
(int) result.getCurrent()
);
}
}

View File

@ -6,10 +6,8 @@ import com.zcloud.certificate.command.CorpCertificateAddExe;
import com.zcloud.certificate.command.CorpCertificateRemoveExe;
import com.zcloud.certificate.command.CorpCertificateUpdateExe;
import com.zcloud.certificate.command.query.CorpCertificateQueryExe;
import com.zcloud.certificate.dto.CorpCertificateAddCmd;
import com.zcloud.certificate.dto.CorpCertificatePageQry;
import com.zcloud.certificate.dto.CorpCertificateListQry;
import com.zcloud.certificate.dto.CorpCertificateUpdateCmd;
import com.zcloud.certificate.dto.*;
import com.zcloud.certificate.dto.clientobject.CertificateStatisticsCO;
import com.zcloud.certificate.dto.clientobject.CorpCertificateCO;
import com.alibaba.cola.dto.PageResponse;
@ -66,5 +64,10 @@ public class CorpCertificateServiceImpl implements CorpCertificateServiceI {
public void removeBatch(Long[] ids) {
corpCertificateRemoveExe.execute(ids);
}
@Override
public PageResponse<CertificateStatisticsCO> statPage(CorpCertificateStatPageQry qry) {
return corpCertificateQueryExe.statPage(qry);
}
}

View File

@ -0,0 +1,71 @@
package com.zcloud.certificate.service;
import com.zcloud.certificate.api.UserCertificateServiceI;
import com.zcloud.certificate.command.UserCertificateAddExe;
import com.zcloud.certificate.command.UserCertificateRemoveExe;
import com.zcloud.certificate.command.UserCertificateUpdateExe;
import com.zcloud.certificate.command.query.UserCertificateQueryExe;
import com.zcloud.certificate.dto.CorpCertificateStatPageQry;
import com.zcloud.certificate.dto.UserCertificateAddCmd;
import com.zcloud.certificate.dto.UserCertificatePageQry;
import com.zcloud.certificate.dto.UserCertificateUpdateCmd;
import com.zcloud.certificate.dto.clientobject.UserCertificateCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.certificate.dto.clientobject.UserCertificateStatCO;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
/**
* web-app
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Service
@AllArgsConstructor
public class UserCertificateServiceImpl implements UserCertificateServiceI {
private final UserCertificateAddExe userCertificateAddExe;
private final UserCertificateUpdateExe userCertificateUpdateExe;
private final UserCertificateRemoveExe userCertificateRemoveExe;
private final UserCertificateQueryExe userCertificateQueryExe;
@Override
public UserCertificateCO queryById(Long id){
return userCertificateQueryExe.queryById(id);
}
@Override
public PageResponse<UserCertificateCO> listPage(UserCertificatePageQry qry){
return userCertificateQueryExe.execute(qry);
}
@Override
public SingleResponse add(UserCertificateAddCmd cmd) {
userCertificateAddExe.execute(cmd);
return SingleResponse.buildSuccess();
}
@Override
public void edit(UserCertificateUpdateCmd userCertificateUpdateCmd) {
userCertificateUpdateExe.execute(userCertificateUpdateCmd);
}
@Override
public void remove(Long id) {
userCertificateRemoveExe.execute(id);
}
@Override
public void removeBatch(Long[] ids) {
userCertificateRemoveExe.execute(ids);
}
@Override
public PageResponse<UserCertificateStatCO> corpCertificateStatPage(CorpCertificateStatPageQry qry) {
return userCertificateQueryExe.execute(qry);
}
}

View File

@ -1,10 +1,8 @@
package com.zcloud.certificate.api;
import com.alibaba.cola.dto.MultiResponse;
import com.zcloud.certificate.dto.CorpCertificateAddCmd;
import com.zcloud.certificate.dto.CorpCertificatePageQry;
import com.zcloud.certificate.dto.CorpCertificateListQry;
import com.zcloud.certificate.dto.CorpCertificateUpdateCmd;
import com.zcloud.certificate.dto.*;
import com.zcloud.certificate.dto.clientobject.CertificateStatisticsCO;
import com.zcloud.certificate.dto.clientobject.CorpCertificateCO;
import com.alibaba.cola.dto.PageResponse;
@ -30,5 +28,10 @@ public interface CorpCertificateServiceI {
void remove(Long id);
void removeBatch(Long[] ids);
/**
*
*/
PageResponse<CertificateStatisticsCO> statPage(CorpCertificateStatPageQry qry);
}

View File

@ -0,0 +1,36 @@
package com.zcloud.certificate.api;
import com.zcloud.certificate.dto.CorpCertificateStatPageQry;
import com.zcloud.certificate.dto.UserCertificateAddCmd;
import com.zcloud.certificate.dto.UserCertificatePageQry;
import com.zcloud.certificate.dto.UserCertificateUpdateCmd;
import com.zcloud.certificate.dto.clientobject.UserCertificateCO;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.certificate.dto.clientobject.UserCertificateStatCO;
/**
* web-client
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
public interface UserCertificateServiceI {
UserCertificateCO queryById(Long id);
PageResponse<UserCertificateCO> listPage(UserCertificatePageQry qry);
SingleResponse<UserCertificateCO> add(UserCertificateAddCmd cmd);
void edit(UserCertificateUpdateCmd cmd);
void remove(Long id);
void removeBatch(Long[] ids);
/**
* //
*/
PageResponse<UserCertificateStatCO> corpCertificateStatPage(CorpCertificateStatPageQry qry);
}

View File

@ -23,6 +23,10 @@ import java.util.Date;
@NoArgsConstructor
@AllArgsConstructor
public class CorpCertificateAddCmd extends Command {
@ApiModelProperty(value = "企业业务ID", name = "corpCertificateId", required = true)
private String corpCertificateId;
@ApiModelProperty(value = "企业id", name = "corpinfoId", required = true)
@NotNull(message = "企业id不能为空")
private Long corpinfoId;
@ -46,7 +50,6 @@ public class CorpCertificateAddCmd extends Command {
private Date certificateDateEnd;
@ApiModelProperty(value = "备注", name = "remark", required = true)
@NotEmpty(message = "备注不能为空")
private String remark;
}

View File

@ -1,8 +1,11 @@
package com.zcloud.certificate.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
/**
* web-client
@ -24,5 +27,18 @@ public class CorpCertificatePageQry extends PageQuery {
* - `ne`: SQL!=
*/
private String likeCorpCertificateId;
@ApiModelProperty(value = "证书名称")
private String likeCertificateName;
@ApiModelProperty(value = "证书有效期-开始时间")
private LocalDate geCertificateDateStart;
@ApiModelProperty(value = "证书有效期-结束时间")
private LocalDate leCertificateDateEnd;
@ApiModelProperty(value = "企业ID")
private Long eqCorpinfoId;
}

View File

@ -0,0 +1,15 @@
package com.zcloud.certificate.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CorpCertificateStatPageQry extends PageQuery {
@ApiModelProperty(value = "类型0企业1相关方null全部")
private Integer corpType;
@ApiModelProperty(value = "企业名称-模糊查询")
private String corpName;
}

View File

@ -10,6 +10,7 @@ import lombok.NoArgsConstructor;
import javax.validation.constraints.*;
import java.time.LocalDate;
import java.util.Date;
/**
@ -41,13 +42,12 @@ public class CorpCertificateUpdateCmd extends Command {
@ApiModelProperty(value = "证书有效期-开始时间", name = "certificateDateStart", required = true)
@NotNull(message = "证书有效期-开始时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date certificateDateStart;
private LocalDate certificateDateStart;
@ApiModelProperty(value = "证书有效期-结束时间", name = "certificateDateEnd", required = true)
@NotNull(message = "证书有效期-结束时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date certificateDateEnd;
private LocalDate certificateDateEnd;
@ApiModelProperty(value = "备注", name = "remark", required = true)
@NotEmpty(message = "备注不能为空")
private String remark;
}

View File

@ -0,0 +1,105 @@
package com.zcloud.certificate.dto;
import com.alibaba.cola.dto.Command;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.*;
import java.time.LocalDate;
import java.util.Date;
/**
* web-client
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserCertificateAddCmd extends Command {
@ApiModelProperty(value = "企业id", name = "corpinfoId", required = true)
@NotNull(message = "企业id不能为空")
private Long corpinfoId;
@ApiModelProperty(value = "用户id", name = "userId", required = true)
@NotNull(message = "用户id不能为空")
private Long userId;
@ApiModelProperty(value = "1-特种作业2-特种设备3-主要负责人4-安全生产管理人员", name = "type", required = true)
@NotNull(message = "1-特种作业2-特种设备3-主要负责人4-安全生产管理人员不能为空")
private Integer type;
@ApiModelProperty(value = "证书名称", name = "certificateName", required = true)
@NotEmpty(message = "证书名称不能为空")
private String certificateName;
@ApiModelProperty(value = "证书编号", name = "certificateCode", required = true)
@NotEmpty(message = "证书编号不能为空")
private String certificateCode;
@ApiModelProperty(value = "发证机构", name = "issuingAuthority", required = true)
@NotEmpty(message = "发证机构不能为空")
private String issuingAuthority;
@ApiModelProperty(value = "行业类别code-特种作业使用", name = "industryCategoryCode", required = true)
// @NotEmpty(message = "行业类别code-特种作业使用不能为空")
private String industryCategoryCode;
@ApiModelProperty(value = "行业类别名称-特种作业使用", name = "industryCategoryName", required = true)
// @NotEmpty(message = "行业类别名称-特种作业使用不能为空")
private String industryCategoryName;
@ApiModelProperty(value = "行业类别-操作项目code-特种作业使用", name = "industryOperatingItemsCode", required = true)
// @NotEmpty(message = "行业类别-操作项目code-特种作业使用不能为空")
private String industryOperatingItemsCode;
@ApiModelProperty(value = "行业类别-操作项目名称-特种作业使用", name = "industryOperatingItemsName", required = true)
// @NotEmpty(message = "行业类别-操作项目名称-特种作业使用不能为空")
private String industryOperatingItemsName;
@ApiModelProperty(value = "作业类别code-特种设备使用", name = "assignmentCategoryCode", required = true)
// @NotEmpty(message = "作业类别code-特种设备使用不能为空")
private String assignmentCategoryCode;
@ApiModelProperty(value = "作业类别名称-特种设备使用", name = "assignmentCategoryName", required = true)
// @NotEmpty(message = "作业类别名称-特种设备使用不能为空")
private String assignmentCategoryName;
@ApiModelProperty(value = "作业类别-操作项目code-特种设备使用", name = "assignmentOperatingItemsCode", required = true)
// @NotEmpty(message = "作业类别-操作项目code-特种设备使用不能为空")
private String assignmentOperatingItemsCode;
@ApiModelProperty(value = "作业类别-操作项目名称-特种设备使用", name = "assignmentOperatingItemsName", required = true)
// @NotEmpty(message = "作业类别-操作项目名称-特种设备使用不能为空")
private String assignmentOperatingItemsName;
@ApiModelProperty(value = "岗位名称(未定)-主要负责人和安全生产使用", name = "postName", required = true)
// @NotEmpty(message = "岗位名称(未定)-主要负责人和安全生产使用不能为空")
private String postName;
@ApiModelProperty(value = "发证日期", name = "dateIssue", required = true)
@NotNull(message = "发证日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate dateIssue;
@ApiModelProperty(value = "证书有效期-开始时间", name = "certificateDateStart", required = true)
@NotNull(message = "证书有效期-开始时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate certificateDateStart;
@ApiModelProperty(value = "证书有效期-结束时间", name = "certificateDateEnd", required = true)
@NotNull(message = "证书有效期-结束时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate certificateDateEnd;
@ApiModelProperty(value = "复审日期", name = "reviewDate", required = true)
@NotNull(message = "复审日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate reviewDate;
}

View File

@ -0,0 +1,57 @@
package com.zcloud.certificate.dto;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* web-client
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Data
public class UserCertificatePageQry extends PageQuery {
/**
* ,
* - `like`: SQLLIKE
* - `eq`: SQL=
* - `gt`:
* - `lt`:
* - `ge`:
* - `le`:
* - `ne`: SQL!=
*/
@ApiModelProperty(value = "业务ID", name = "likeUserCertificateId")
private String likeUserCertificateId;
@ApiModelProperty(value = "姓名", name = "likeUserName")
private String likeUserName;
/**
*
*/
@ApiModelProperty(value = "操作类别code-特种作业使用", name = "eqIndustryCategoryCode")
private String eqIndustryCategoryCode;
/**
*
*/
@ApiModelProperty(value = "操作项目code-特种作业使用", name = "eqIndustryOperatingItemsCode")
private String eqIndustryOperatingItemsCode;
/**
*
*/
@ApiModelProperty(value = "人员类型 1-特种作业2-特种设备3-主要负责人4-安全生产管理人员", name = "eqType")
private Integer eqType;
/**
* ID
*/
@ApiModelProperty(value = "企业ID", name = "eqCorpinfoId")
private Long eqCorpinfoId;
}

View File

@ -0,0 +1,92 @@
package com.zcloud.certificate.dto;
import com.alibaba.cola.dto.Command;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.*;
import java.time.LocalDate;
import java.util.Date;
/**
* web-client
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserCertificateUpdateCmd extends Command {
@ApiModelProperty(value = "主键id", name = "id", required = true)
@NotNull(message = "主键id不能为空")
private Long id;
@ApiModelProperty(value = "业务主键id", name = "userCertificateId", required = true)
@NotEmpty(message = "业务主键id不能为空")
private String userCertificateId;
@ApiModelProperty(value = "企业id", name = "corpinfoId", required = true)
@NotNull(message = "企业id不能为空")
private Long corpinfoId;
@ApiModelProperty(value = "用户id", name = "userId", required = true)
@NotNull(message = "用户id不能为空")
private Long userId;
@ApiModelProperty(value = "1-特种作业2-特种设备3-主要负责人4-安全生产管理人员", name = "type", required = true)
@NotNull(message = "1-特种作业2-特种设备3-主要负责人4-安全生产管理人员不能为空")
private Integer type;
@ApiModelProperty(value = "证书名称", name = "certificateName", required = true)
@NotEmpty(message = "证书名称不能为空")
private String certificateName;
@ApiModelProperty(value = "证书编号", name = "certificateCode", required = true)
@NotEmpty(message = "证书编号不能为空")
private String certificateCode;
@ApiModelProperty(value = "发证机构", name = "issuingAuthority", required = true)
@NotEmpty(message = "发证机构不能为空")
private String issuingAuthority;
@ApiModelProperty(value = "行业类别code-特种作业使用", name = "industryCategoryCode", required = true)
// @NotEmpty(message = "行业类别code-特种作业使用不能为空")
private String industryCategoryCode;
@ApiModelProperty(value = "行业类别名称-特种作业使用", name = "industryCategoryName", required = true)
// @NotEmpty(message = "行业类别名称-特种作业使用不能为空")
private String industryCategoryName;
@ApiModelProperty(value = "行业类别-操作项目code-特种作业使用", name = "industryOperatingItemsCode", required = true)
// @NotEmpty(message = "行业类别-操作项目code-特种作业使用不能为空")
private String industryOperatingItemsCode;
@ApiModelProperty(value = "行业类别-操作项目名称-特种作业使用", name = "industryOperatingItemsName", required = true)
// @NotEmpty(message = "行业类别-操作项目名称-特种作业使用不能为空")
private String industryOperatingItemsName;
@ApiModelProperty(value = "作业类别code-特种设备使用", name = "assignmentCategoryCode", required = true)
// @NotEmpty(message = "作业类别code-特种设备使用不能为空")
private String assignmentCategoryCode;
@ApiModelProperty(value = "作业类别名称-特种设备使用", name = "assignmentCategoryName", required = true)
// @NotEmpty(message = "作业类别名称-特种设备使用不能为空")
private String assignmentCategoryName;
@ApiModelProperty(value = "作业类别-操作项目code-特种设备使用", name = "assignmentOperatingItemsCode", required = true)
// @NotEmpty(message = "作业类别-操作项目code-特种设备使用不能为空")
private String assignmentOperatingItemsCode;
@ApiModelProperty(value = "作业类别-操作项目名称-特种设备使用", name = "assignmentOperatingItemsName", required = true)
// @NotEmpty(message = "作业类别-操作项目名称-特种设备使用不能为空")
private String assignmentOperatingItemsName;
@ApiModelProperty(value = "岗位名称(未定)-主要负责人和安全生产使用", name = "postName", required = true)
// @NotEmpty(message = "岗位名称(未定)-主要负责人和安全生产使用不能为空")
private String postName;
@ApiModelProperty(value = "发证日期", name = "dateIssue", required = true)
@NotNull(message = "发证日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate dateIssue;
@ApiModelProperty(value = "证书有效期-开始时间", name = "certificateDateStart", required = true)
@NotNull(message = "证书有效期-开始时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate certificateDateStart;
@ApiModelProperty(value = "证书有效期-结束时间", name = "certificateDateEnd", required = true)
@NotNull(message = "证书有效期-结束时间不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate certificateDateEnd;
@ApiModelProperty(value = "复审日期", name = "reviewDate", required = true)
@NotNull(message = "复审日期不能为空")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate reviewDate;
}

View File

@ -0,0 +1,21 @@
package com.zcloud.certificate.dto.clientobject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class CertificateStatisticsCO {
@ApiModelProperty(value = "企业ID", name = "corpId")
private Long corpId;
@ApiModelProperty(value = "企业名称", name = "corpName")
private String corpName;
@ApiModelProperty(value = "企业类型", name = "corpType")
private Integer corpType;
@ApiModelProperty(value = "证照数量", name = "certCount")
private Long certCount;
}

View File

@ -0,0 +1,140 @@
package com.zcloud.certificate.dto.clientobject;
import com.alibaba.cola.dto.ClientObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
/**
* web-client
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Data
public class UserCertificateCO extends ClientObject {
//主键id
@ApiModelProperty(value = "主键id")
private Long id;
//业务主键id
@ApiModelProperty(value = "业务主键id")
private String userCertificateId;
//企业id
@ApiModelProperty(value = "企业id")
private Long corpinfoId;
//用户id
@ApiModelProperty(value = "用户id")
private Long userId;
@ApiModelProperty(value = "用户名称")
private String userName;
@ApiModelProperty(value = "在职状态 0-离职, 1-在职, 2-信息变更中, 3-未入职, 4-实习生, 5-实习结束, 6-退休, 7-劳务派遣, 8-劳务派遣结束, 11-入职待审核, 10-离职待审核")
private Integer employmentStatus;
//1-特种作业2-特种设备3-主要负责人4-安全生产管理人员
@ApiModelProperty(value = "1-特种作业2-特种设备3-主要负责人4-安全生产管理人员")
private Integer type;
//证书名称
@ApiModelProperty(value = "证书名称")
private String certificateName;
//证书编号
@ApiModelProperty(value = "证书编号")
private String certificateCode;
//发证机构
@ApiModelProperty(value = "发证机构")
private String issuingAuthority;
//行业类别code-特种作业使用
@ApiModelProperty(value = "行业类别code-特种作业使用")
private String industryCategoryCode;
//行业类别名称-特种作业使用
@ApiModelProperty(value = "行业类别名称-特种作业使用")
private String industryCategoryName;
//行业类别-操作项目code-特种作业使用
@ApiModelProperty(value = "行业类别-操作项目code-特种作业使用")
private String industryOperatingItemsCode;
//行业类别-操作项目名称-特种作业使用
@ApiModelProperty(value = "行业类别-操作项目名称-特种作业使用")
private String industryOperatingItemsName;
//作业类别code-特种设备使用
@ApiModelProperty(value = "作业类别code-特种设备使用")
private String assignmentCategoryCode;
//作业类别名称-特种设备使用
@ApiModelProperty(value = "作业类别名称-特种设备使用")
private String assignmentCategoryName;
//作业类别-操作项目code-特种设备使用
@ApiModelProperty(value = "作业类别-操作项目code-特种设备使用")
private String assignmentOperatingItemsCode;
//作业类别-操作项目名称-特种设备使用
@ApiModelProperty(value = "作业类别-操作项目名称-特种设备使用")
private String assignmentOperatingItemsName;
//岗位名称(未定)-主要负责人和安全生产使用
@ApiModelProperty(value = "岗位名称(未定)-主要负责人和安全生产使用")
private String postName;
//发证日期
@ApiModelProperty(value = "发证日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate dateIssue;
//证书有效期-开始时间
@ApiModelProperty(value = "证书有效期-开始时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate certificateDateStart;
//证书有效期-结束时间
@ApiModelProperty(value = "证书有效期-结束时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate certificateDateEnd;
//复审日期
@ApiModelProperty(value = "复审日期")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate reviewDate;
//删除标识true false
@ApiModelProperty(value = "删除标识true false")
private String deleteEnum;
//备注
@ApiModelProperty(value = "备注")
private String remarks;
//创建人姓名
@ApiModelProperty(value = "创建人姓名")
private String createName;
//更新人姓名
@ApiModelProperty(value = "更新人姓名")
private String updateName;
//租户id
@ApiModelProperty(value = "租户id")
private Long tenantId;
//单位id
@ApiModelProperty(value = "单位id")
private Long orgId;
//版本
@ApiModelProperty(value = "版本")
private Integer version;
//创建时间
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date createTime;
//修改时间
@ApiModelProperty(value = "修改时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date updateTime;
//创建人id
@ApiModelProperty(value = "创建人id")
private Long createId;
//修改人id
@ApiModelProperty(value = "修改人id")
private Long updateId;
//环境
@ApiModelProperty(value = "环境")
private String env;
@ApiModelProperty(value = "部门名称")
private String departmentName;
@ApiModelProperty(value = "企业名称")
private String corpinfoName;
}

View File

@ -0,0 +1,26 @@
package com.zcloud.certificate.dto.clientobject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UserCertificateStatCO {
@ApiModelProperty(value = "企业/相关方ID")
private Long corpinfoId;
@ApiModelProperty(value = "企业/相关方名称")
private String corpName;
@ApiModelProperty(value = "特种作业人员证书数量")
private Integer specialWorkCertCount;
@ApiModelProperty(value = "特种设备人证书数量")
private Integer specialEquipmentCertCount;
@ApiModelProperty(value = "主要负责人证书数量")
private Integer principalCertCount;
@ApiModelProperty(value = "安全管理人员证书数量")
private Integer safetyManagerCertCount;
}

View File

@ -26,5 +26,10 @@ public interface CorpCertificateGateway {
Boolean deletedCorpCertificateById(Long id);
Boolean deletedCorpCertificateByIds(Long[] id);
/**
*
*/
Boolean checkCertificateExist(CorpCertificateE corpCertificateE);
}

View File

@ -0,0 +1,33 @@
package com.zcloud.certificate.domain.gateway;
import com.zcloud.certificate.domain.model.UserCertificateE;
/**
* web-domain
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
public interface UserCertificateGateway {
/**
*
*/
Boolean add(UserCertificateE userCertificateE) ;
/**
*
*/
Boolean update(UserCertificateE userCertificateE);
/**
*
*/
Boolean deletedUserCertificateById(Long id);
Boolean deletedUserCertificateByIds(Long[] id);
/**
*
*/
Boolean checkCertificateExist(UserCertificateE userCertificateE);
}

View File

@ -3,6 +3,7 @@ package com.zcloud.certificate.domain.model;
import com.jjb.saas.framework.domain.model.BaseE;
import lombok.Data;
import java.time.LocalDate;
import java.util.Date;
/**
@ -24,9 +25,9 @@ public class CorpCertificateE extends BaseE {
//证书编号
private String certificateCode;
//证书有效期-开始时间
private Date certificateDateStart;
private LocalDate certificateDateStart;
//证书有效期-结束时间
private Date certificateDateEnd;
private LocalDate certificateDateEnd;
//备注
private String remark;
}

View File

@ -0,0 +1,59 @@
package com.zcloud.certificate.domain.model;
import com.alibaba.cola.domain.Entity;
import com.jjb.saas.framework.domain.model.BaseE;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.sql.Date;
import java.time.LocalDate;
/**
* web-domain
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Data
public class UserCertificateE extends BaseE {
//业务主键id
private String userCertificateId;
//企业id
private Long corpinfoId;
//用户id
private Long userId;
//1-特种作业2-特种设备3-主要负责人4-安全生产管理人员
private Integer type;
//证书名称
private String certificateName;
//证书编号
private String certificateCode;
//发证机构
private String issuingAuthority;
//行业类别code-特种作业使用
private String industryCategoryCode;
//行业类别名称-特种作业使用
private String industryCategoryName;
//行业类别-操作项目code-特种作业使用
private String industryOperatingItemsCode;
//行业类别-操作项目名称-特种作业使用
private String industryOperatingItemsName;
//作业类别code-特种设备使用
private String assignmentCategoryCode;
//作业类别名称-特种设备使用
private String assignmentCategoryName;
//作业类别-操作项目code-特种设备使用
private String assignmentOperatingItemsCode;
//作业类别-操作项目名称-特种设备使用
private String assignmentOperatingItemsName;
//岗位名称(未定)-主要负责人和安全生产使用
private String postName;
//发证日期
private LocalDate dateIssue;
//证书有效期-开始时间
private LocalDate certificateDateStart;
//证书有效期-结束时间
private LocalDate certificateDateEnd;
//复审日期
private LocalDate reviewDate;
}

View File

@ -1,5 +1,6 @@
package com.zcloud.certificate.gatewayimpl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zcloud.certificate.domain.gateway.CorpCertificateGateway;
import com.zcloud.certificate.domain.model.CorpCertificateE;
import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
@ -8,6 +9,7 @@ import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Collections;
/**
@ -44,7 +46,17 @@ public class CorpCertificateGatewayImpl implements CorpCertificateGateway {
@Override
public Boolean deletedCorpCertificateByIds(Long[] ids) {
return corpCertificateRepository.removeByIds(Collections.singletonList(ids));
return corpCertificateRepository.removeByIds(Arrays.asList(ids));
}
@Override
public Boolean checkCertificateExist(CorpCertificateE corpCertificateE) {
CorpCertificateDO d = new CorpCertificateDO();
BeanUtils.copyProperties(corpCertificateE, d);
CorpCertificateDO queryDO = corpCertificateRepository.getOne(new LambdaQueryWrapper<CorpCertificateDO>()
.eq(CorpCertificateDO::getCertificateCode, d.getCertificateCode())
);
return queryDO == null;
}
}

View File

@ -0,0 +1,59 @@
package com.zcloud.certificate.gatewayimpl;
import com.zcloud.certificate.domain.gateway.UserCertificateGateway;
import com.zcloud.certificate.domain.model.UserCertificateE;
import com.zcloud.certificate.persistence.dataobject.UserCertificateDO;
import com.zcloud.certificate.persistence.repository.UserCertificateRepository;
import lombok.AllArgsConstructor;
import com.zcloud.gbscommon.utils.Tools;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.Arrays;
/**
* web-infrastructure
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Service
@AllArgsConstructor
public class UserCertificateGatewayImpl implements UserCertificateGateway {
private final UserCertificateRepository userCertificateRepository;
@Override
public Boolean add(UserCertificateE userCertificateE) {
UserCertificateDO d = new UserCertificateDO(Tools.get32UUID());
BeanUtils.copyProperties(userCertificateE, d,"userCertificateId");
userCertificateRepository.save(d);
return true;
}
@Override
public Boolean update(UserCertificateE userCertificateE) {
UserCertificateDO d = new UserCertificateDO();
BeanUtils.copyProperties(userCertificateE, d);
userCertificateRepository.updateById(d);
return true;
}
@Override
public Boolean deletedUserCertificateById(Long id) {
return userCertificateRepository.removeById(id);
}
@Override
public Boolean deletedUserCertificateByIds(Long[] ids) {
return userCertificateRepository.removeByIds(Arrays.asList(ids));
}
@Override
public Boolean checkCertificateExist(UserCertificateE userCertificateE) {
Long count = userCertificateRepository.lambdaQuery()
.eq(UserCertificateDO::getCertificateCode, userCertificateE.getCertificateCode())
.ne(userCertificateE.getUserCertificateId() != null, UserCertificateDO::getUserCertificateId, userCertificateE.getUserCertificateId())
.count();
return count > 0;
}
}

View File

@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.Date;
/**
@ -34,10 +35,10 @@ public class CorpCertificateDO extends BaseDO {
private String certificateCode;
//证书有效期-开始时间
@ApiModelProperty(value = "证书有效期-开始时间")
private Date certificateDateStart;
private LocalDate certificateDateStart;
//证书有效期-结束时间
@ApiModelProperty(value = "证书有效期-结束时间")
private Date certificateDateEnd;
private LocalDate certificateDateEnd;
//备注
@ApiModelProperty(value = "备注")
private String remark;

View File

@ -0,0 +1,31 @@
package com.zcloud.certificate.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Data
@TableName("corp_info")
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class CorpInfoDO extends BaseDO {
@ApiModelProperty(value = "企业ID")
private Long corpId;
@ApiModelProperty(value = "企业名称")
private String corpName;
@ApiModelProperty(value = "企业类型")
private Integer corpType;
@ApiModelProperty(value = "证照数量")
private Long certCount;
@ApiModelProperty(value = "总数量")
private Long totalCount;
}

View File

@ -0,0 +1,95 @@
package com.zcloud.certificate.persistence.dataobject;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jjb.saas.framework.repository.basedo.BaseDO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.Date;
/**
* web-infrastructure
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Data
@TableName("user_certificate")
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class UserCertificateDO extends BaseDO {
//业务主键id
@ApiModelProperty(value = "业务主键id")
private String userCertificateId;
//企业id
@ApiModelProperty(value = "企业id")
private Long corpinfoId;
//用户id
@ApiModelProperty(value = "用户id")
private Long userId;
//1-特种作业2-特种设备3-主要负责人4-安全生产管理人员
@ApiModelProperty(value = "1-特种作业2-特种设备3-主要负责人4-安全生产管理人员")
private Integer type;
//证书名称
@ApiModelProperty(value = "证书名称")
private String certificateName;
//证书编号
@ApiModelProperty(value = "证书编号")
private String certificateCode;
//发证机构
@ApiModelProperty(value = "发证机构")
private String issuingAuthority;
//行业类别code-特种作业使用
@ApiModelProperty(value = "行业类别code-特种作业使用")
private String industryCategoryCode;
//行业类别名称-特种作业使用
@ApiModelProperty(value = "行业类别名称-特种作业使用")
private String industryCategoryName;
//行业类别-操作项目code-特种作业使用
@ApiModelProperty(value = "行业类别-操作项目code-特种作业使用")
private String industryOperatingItemsCode;
//行业类别-操作项目名称-特种作业使用
@ApiModelProperty(value = "行业类别-操作项目名称-特种作业使用")
private String industryOperatingItemsName;
//作业类别code-特种设备使用
@ApiModelProperty(value = "作业类别code-特种设备使用")
private String assignmentCategoryCode;
//作业类别名称-特种设备使用
@ApiModelProperty(value = "作业类别名称-特种设备使用")
private String assignmentCategoryName;
//作业类别-操作项目code-特种设备使用
@ApiModelProperty(value = "作业类别-操作项目code-特种设备使用")
private String assignmentOperatingItemsCode;
//作业类别-操作项目名称-特种设备使用
@ApiModelProperty(value = "作业类别-操作项目名称-特种设备使用")
private String assignmentOperatingItemsName;
//岗位名称(未定)-主要负责人和安全生产使用
@ApiModelProperty(value = "岗位名称(未定)-主要负责人和安全生产使用")
private String postName;
//发证日期
@ApiModelProperty(value = "发证日期")
private LocalDate dateIssue;
//证书有效期-开始时间
@ApiModelProperty(value = "证书有效期-开始时间")
private LocalDate certificateDateStart;
//证书有效期-结束时间
@ApiModelProperty(value = "证书有效期-结束时间")
private LocalDate certificateDateEnd;
//复审日期
@ApiModelProperty(value = "复审日期")
private LocalDate reviewDate;
@ApiModelProperty(value = "用户名称")
private String userName;
@ApiModelProperty(value = "在职状态 0-离职, 1-在职, 2-信息变更中, 3-未入职, 4-实习生, 5-实习结束, 6-退休, 7-劳务派遣, 8-劳务派遣结束, 11-入职待审核, 10-离职待审核")
private Integer employmentStatus;
public UserCertificateDO(String userCertificateId) {
this.userCertificateId = userCertificateId;
}
}

View File

@ -0,0 +1,28 @@
package com.zcloud.certificate.persistence.dataobject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UserCertificateStatDO {
@ApiModelProperty(value = "企业/相关方ID")
private Long corpinfoId;
@ApiModelProperty(value = "企业/相关方名称")
private String corpName;
@ApiModelProperty(value = "特种作业人员证书数量")
private Integer specialWorkCertCount;
@ApiModelProperty(value = "特种设备人证书数量")
private Integer specialEquipmentCertCount;
@ApiModelProperty(value = "主要负责人证书数量")
private Integer principalCertCount;
@ApiModelProperty(value = "安全管理人员证书数量")
private Integer safetyManagerCertCount;
}

View File

@ -0,0 +1,27 @@
package com.zcloud.certificate.persistence.dataobject;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class UserDO {
@ApiModelProperty(value = "用户ID")
private Long userId;
@ApiModelProperty(value = "用户名称")
private String userName;
@ApiModelProperty(value = "在职状态 0-离职, 1-在职, 2-信息变更中, 3-未入职, 4-实习生, 5-实习结束, 6-退休, 7-劳务派遣, 8-劳务派遣结束, 11-入职待审核, 10-离职待审核")
private Integer employmentStatus;
@ApiModelProperty(value = "部门名称")
private String departmentName;
@ApiModelProperty(value = "企业名称")
private String corpinfoName;
@ApiModelProperty(value = "岗位名称")
private String postName;
}

View File

@ -2,8 +2,12 @@ package com.zcloud.certificate.persistence.mapper;
import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zcloud.certificate.persistence.dataobject.CorpInfoDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
* web-infrastructure
*
@ -13,5 +17,7 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface CorpCertificateMapper extends BaseMapper<CorpCertificateDO> {
List<CorpInfoDO> selectCorpCertStatPage(Map<String, Object> params);
}

View File

@ -0,0 +1,40 @@
package com.zcloud.certificate.persistence.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.zcloud.certificate.persistence.dataobject.UserCertificateDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zcloud.certificate.persistence.dataobject.UserCertificateStatDO;
import com.zcloud.certificate.persistence.dataobject.UserDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* web-infrastructure
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Mapper
public interface UserCertificateMapper extends BaseMapper<UserCertificateDO> {
/**
* userId
*/
List<UserDO> selectUserNamesByUserIds(List<Long> userIds);
/**
*
*/
IPage<UserCertificateDO> selectPageWithUser(IPage<UserCertificateDO> page, @Param("params") Map<String, Object> params);
/**
* //
*/
IPage<UserCertificateStatDO> selectCorpCertificateStatPage(IPage<UserCertificateStatDO> page, @Param("params") Map<String, Object> params);
}

View File

@ -4,6 +4,7 @@ import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.certificate.persistence.dataobject.CorpInfoDO;
import java.util.Map;
import java.util.List;
@ -21,5 +22,7 @@ public interface CorpCertificateRepository extends BaseRepository<CorpCertificat
List<CorpCertificateDO> list(Map<String, Object> params);
SingleResponse<CorpCertificateDO> getInfoById(Long id);
PageResponse<CorpInfoDO> statPage(Map<String, Object> params);
}

View File

@ -0,0 +1,40 @@
package com.zcloud.certificate.persistence.repository;
import com.zcloud.certificate.persistence.dataobject.UserCertificateDO;
import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.certificate.persistence.dataobject.UserCertificateStatDO;
import com.zcloud.certificate.persistence.dataobject.UserDO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* web-infrastructure
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
public interface UserCertificateRepository extends BaseRepository<UserCertificateDO> {
PageResponse<UserCertificateDO> listPage(Map<String,Object> params);
/**
* userId
*/
List<UserDO> getUserNamesByUserIds(List<Long> userIds);
/**
*
*/
IPage<UserCertificateDO> listPageWithUser(IPage<UserCertificateDO> page, Map<String, Object> params);
/**
* //
*/
IPage<UserCertificateStatDO> selectCorpCertificateStatPage(
IPage<UserCertificateStatDO> page,
@Param("params") Map<String, Object> params
);
}

View File

@ -2,6 +2,7 @@ package com.zcloud.certificate.persistence.repository.impl;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.zcloud.certificate.persistence.dataobject.CorpCertificateDO;
import com.zcloud.certificate.persistence.dataobject.CorpInfoDO;
import com.zcloud.certificate.persistence.mapper.CorpCertificateMapper;
import com.zcloud.certificate.persistence.repository.CorpCertificateRepository;
import com.alibaba.cola.dto.SingleResponse;
@ -51,5 +52,18 @@ public class CorpCertificateRepositoryImpl extends BaseRepositoryImpl<CorpCertif
public SingleResponse<CorpCertificateDO> getInfoById(Long id) {
return SingleResponse.of(corpCertificateMapper.selectById(id));
}
@Override
public PageResponse<CorpInfoDO> statPage(Map<String, Object> params) {
Integer pageIndex = (Integer) params.get("pageIndex");
Integer pageSize = (Integer) params.get("pageSize");
params.put("offset", (pageIndex - 1) * pageSize);
List<CorpInfoDO> rows = corpCertificateMapper.selectCorpCertStatPage(params);
long total = rows.isEmpty() ? 0 : rows.get(0).getTotalCount();
return PageResponse.of(rows, (int)total, pageSize, pageIndex);
}
}

View File

@ -0,0 +1,57 @@
package com.zcloud.certificate.persistence.repository.impl;
import com.zcloud.certificate.persistence.dataobject.UserCertificateDO;
import com.zcloud.certificate.persistence.dataobject.UserCertificateStatDO;
import com.zcloud.certificate.persistence.dataobject.UserDO;
import com.zcloud.certificate.persistence.mapper.UserCertificateMapper;
import com.zcloud.certificate.persistence.repository.UserCertificateRepository;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.gbscommon.utils.Query;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* web-infrastructure
* @Author makejava
* @Date 2026-01-06 08:47:20
*/
@Service
@RequiredArgsConstructor
public class UserCertificateRepositoryImpl extends BaseRepositoryImpl<UserCertificateMapper, UserCertificateDO> implements UserCertificateRepository {
private final UserCertificateMapper userCertificateMapper;
@Override
public PageResponse<UserCertificateDO> listPage(Map<String,Object> params) {
IPage<UserCertificateDO> iPage = new Query<UserCertificateDO>().getPage(params);
QueryWrapper<UserCertificateDO> queryWrapper = new QueryWrapper<>();
queryWrapper = PageQueryHelper.createPageQueryWrapper(queryWrapper, params);
queryWrapper.orderByDesc("create_time");
IPage<UserCertificateDO> result = userCertificateMapper.selectPage(iPage, queryWrapper);
return PageHelper.pageToResponse(result, result.getRecords());
}
@Override
public List<UserDO> getUserNamesByUserIds(List<Long> userIds) {
return userCertificateMapper.selectUserNamesByUserIds(userIds);
}
@Override
public IPage<UserCertificateDO> listPageWithUser(IPage<UserCertificateDO> page, Map<String, Object> params) {
return userCertificateMapper.selectPageWithUser(page, params);
}
@Override
public IPage<UserCertificateStatDO> selectCorpCertificateStatPage(IPage<UserCertificateStatDO> page, Map<String, Object> params) {
return userCertificateMapper.selectCorpCertificateStatPage(page, params);
}
}

View File

@ -3,5 +3,42 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zcloud.certificate.persistence.mapper.CorpCertificateMapper">
</mapper>
<select id="selectCorpCertStatPage" resultType="com.zcloud.certificate.persistence.dataobject.CorpInfoDO">
SELECT
ci.id AS corpId,
ci.corp_name AS corpName,
ci.type AS corpType,
COUNT(cc.id) AS certCount,
COUNT(*) OVER() AS totalCount
FROM
corp_info ci
LEFT JOIN
corp_certificate cc
ON
cc.corpinfo_id = ci.id
AND
(cc.delete_enum IS NULL OR cc.delete_enum &lt;&gt; 'true')
WHERE
1 = 1
<if test="corpType != null">
AND (
(#{corpType} = 0 AND ci.type IN (0,1))
OR (#{corpType} = 1 AND ci.type IN (3,4,5))
)
</if>
<if test="corpName != null and corpName != ''">
AND ci.corp_name LIKE CONCAT('%', #{corpName}, '%')
</if>
GROUP BY
ci.id, ci.corp_name, ci.type
ORDER BY
ci.id DESC
LIMIT #{offset}, #{pageSize}
</select>
</mapper>

View File

@ -0,0 +1,132 @@
<?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.zcloud.certificate.persistence.mapper.UserCertificateMapper">
<select id="selectPageWithUser" resultType="com.zcloud.certificate.persistence.dataobject.UserCertificateDO">
SELECT
uc.*,
u.username AS userName,
u.employment_flag AS employmentStatus,
d.name AS departmentName,
p.corpinfo_name AS corpinfoName,
p.post_name AS postName
FROM
user_certificate uc
LEFT JOIN
user u ON u.id = uc.user_id
LEFT JOIN
department d ON d.id = u.department_id
LEFT JOIN
post p ON p.id = u.post_id
WHERE 1=1
<if test="params.tenantId != null">
AND uc.tenant_id = #{params.tenantId}
</if>
<if test="params.orgId != null">
AND uc.org_id = #{params.orgId}
</if>
<if test="params.likeUserName != null and params.likeUserName != ''">
AND u.username LIKE CONCAT('%', #{params.likeUserName}, '%')
</if>
<if test="params.eqIndustryCategoryCode != null and params.eqIndustryCategoryCode != ''">
AND uc.industry_category_code = #{params.eqIndustryCategoryCode}
</if>
<if test="params.eqIndustryOperatingItemsCode != null and params.eqIndustryOperatingItemsCode != ''">
AND uc.industry_operating_items_code = #{params.eqIndustryOperatingItemsCode}
</if>
<if test="params.eqType != null and params.eqType != ''">
AND uc.type = #{params.eqType}
</if>
<if test="params.eqCorpinfoId != null and params.eqCorpinfoId != ''">
AND uc.corpinfo_id = #{params.eqCorpinfoId}
</if>
ORDER BY uc.create_time DESC
</select>
<select id="selectUserNamesByUserIds" resultType="com.zcloud.certificate.persistence.dataobject.UserDO">
SELECT
u.id AS userId,
u.name AS userName,
d.name AS departmentName,
p.corpinfo_name AS corpinfoName,
p.post_name AS postName,
u.employment_flag AS employmentStatus
FROM
user u
LEFT JOIN
department d ON d.id = u.department_id
LEFT JOIN
post p ON p.id = u.post_id
WHERE
u.id IN
<foreach item="userId" index="index" collection="userIds" open="(" separator="," close=")">
#{userId}
</foreach>
</select>
<select id="selectCorpCertificateStatPage"
resultType="com.zcloud.certificate.persistence.dataobject.UserCertificateStatDO">
SELECT
ci.id AS corpinfoId,
ci.corp_name AS corpName,
COALESCE(SUM(CASE WHEN uc.type = 1 THEN 1 ELSE 0 END), 0) AS specialWorkCertCount,
COALESCE(SUM(CASE WHEN uc.type = 2 THEN 1 ELSE 0 END), 0) AS specialEquipmentCertCount,
COALESCE(SUM(CASE WHEN uc.type = 3 THEN 1 ELSE 0 END), 0) AS principalCertCount,
COALESCE(SUM(CASE WHEN uc.type = 4 THEN 1 ELSE 0 END), 0) AS safetyManagerCertCount
FROM
corp_info ci
LEFT JOIN
user_certificate uc
ON
uc.corpinfo_id = ci.id
AND
uc.delete_enum = 'false'
<if test="params.tenantId != null">
AND uc.tenant_id = #{params.tenantId}
</if>
<if test="params.orgId != null">
AND uc.org_id = #{params.orgId}
</if>
<if test="params.env != null and params.env != ''">
AND uc.env = #{params.env}
</if>
WHERE 1 = 1
AND ci.delete_enum = 'false'
<if test="params.tenantId != null">
AND ci.tenant_id = #{params.tenantId}
</if>
<if test="params.orgId != null">
AND ci.org_id = #{params.orgId}
</if>
<if test="params.env != null and params.env != ''">
AND ci.env = #{params.env}
</if>
<if test="params.useFlag != null">
AND ci.use_flag = #{params.useFlag}
</if>
<if test="params.corpType != null">
AND (
(#{params.corpType} = 0 AND ci.type IN (0,1))
OR (#{params.corpType} = 1 AND ci.type IN (3,4,5))
)
</if>
<if test="params.corpName != null and params.corpName != ''">
AND ci.corp_name LIKE CONCAT('%', #{params.corpName}, '%')
</if>
GROUP BY ci.id, ci.corp_name
ORDER BY ci.corp_order ASC, ci.id ASC
</select>
</mapper>