岗位证书维护导入功能

develop-QA
qinyulong 3 months ago
parent 48384059b6
commit ae684dc6e5
  1. 54
      blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/jobTransfer/pojo/excel/CertificateMaintenanceImport.java
  2. 43
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateMaintenanceController.java
  3. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CertificateTypeController.java
  4. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/CultivateDetailController.java
  5. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/EquipmentMaintenanceController.java
  6. 4
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/controller/PostHandleController.java
  7. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/CertificateMaintenanceMapper.xml
  8. 2
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/mapper/EquipmentMaintenanceMapper.xml
  9. 10
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/ICertificateMaintenanceService.java
  10. 57
      blade-service/blade-desk/src/main/java/org/springblade/desk/jobTransfer/service/impl/CertificateMaintenanceServiceImpl.java
  11. BIN
      blade-service/blade-desk/src/main/resources/Excel/jobTransfer/证书维护导入模板.xls

@ -0,0 +1,54 @@
package org.springblade.desk.jobTransfer.pojo.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.core.mp.base.BaseEntity;
import java.util.Date;
/**
* 证书维护导入
*
* @author qyl
* @since 2026-01-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CertificateMaintenanceImport extends BaseEntity {
/**
* 用户code
*/
@ExcelProperty(index = 0)
private String userCode;
/**
* 证书类型
*/
@ExcelProperty(index = 1)
private String certificateType;
/**
* 证书编号
*/
@ExcelProperty(index = 2)
private String certificateCode;
/**
* 证书日期
*/
@ExcelProperty(index = 3)
@DateTimeFormat("yyyy/MM/dd")
private Date certificateDate;
/**
* 适航日期
*/
@ExcelProperty(index = 4)
@DateTimeFormat("yyyy/MM/dd")
private Date airworthinessDate;
/**
* 宇航日期
*/
@ExcelProperty(index = 5)
@DateTimeFormat("yyyy/MM/dd")
private Date astronautDate;
}

@ -17,13 +17,20 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.desk.basic.util.ExcelExtUtil;
import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel;
import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceImport;
import org.springblade.desk.jobTransfer.pojo.excel.CultivateDetailExcel;
import org.springblade.desk.jobTransfer.pojo.excel.PostHandleImport;
import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery;
import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO;
import org.springblade.desk.jobTransfer.pojo.vo.CultivateDetailVO;
import org.springblade.desk.jobTransfer.pojo.vo.PostHandleVO;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.UserInfo;
import org.springframework.beans.BeanUtils;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -36,11 +43,10 @@ import org.springblade.core.boot.ctrl.BladeController;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.core.excel.util.ExcelUtil;
import java.util.ArrayList;
import java.util.Map;
import java.util.List;
import java.util.*;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
/**
* 证书维护 控制器
@ -51,7 +57,7 @@ import jakarta.servlet.http.HttpServletResponse;
@RestController
@AllArgsConstructor
@RequestMapping("/certificateMaintenance")
@Tag(name = "证书维护", description = "证书维护接口")
@Tag(name = "上岗证台账", description = "上岗证台账接口")
public class CertificateMaintenanceController extends BladeController {
private final ICertificateMaintenanceService certificateMaintenanceService;
@ -173,6 +179,35 @@ public class CertificateMaintenanceController extends BladeController {
ExcelUtil.export(response, "证书维护数据" + DateUtil.time(), "证书维护数据表", excels, CertificateMaintenanceExcel.class);
}
/**
* 下载Excel模板
*/
@GetMapping("/downloadExcelTemplate")
@ApiOperationSupport(order = 10)
@Operation(summary = "下载Excel模板", description = "")
public ResponseEntity<Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/jobTransfer/证书维护导入模板.xls",
"证书维护导入模板.xls");
}
/**
* 导入Excel
*/
@PostMapping("/importExcel")
@ApiOperationSupport(order = 11)
@Operation(summary = "导入Excel", description = "MultipartFile")
public R importExcel(@RequestParam("file") MultipartFile file) {
R checkR = ExcelExtUtil.importExcelCheck(file);
if (checkR != null) {
return checkR;
}
List<CertificateMaintenanceImport> importList = ExcelUtil.read(
file, 0, 1, CertificateMaintenanceImport.class
);
return certificateMaintenanceService.saveExcelData(importList);
}
@PostConstruct // 项目启动后立即执行一次
public void init() {
updateMaintenanceStatus();

@ -40,7 +40,7 @@ import jakarta.servlet.http.HttpServletResponse;
@RestController
@AllArgsConstructor
@RequestMapping("/certificateType")
@Tag(name = "证书类型", description = "证书类型接口")
@Tag(name = "证书类型维护", description = "证书类型维护接口")
public class CertificateTypeController extends BladeController {
private final ICertificateTypeService certificateTypeService;

@ -49,7 +49,7 @@ import jakarta.servlet.http.HttpServletResponse;
@RestController
@AllArgsConstructor
@RequestMapping("/cultivateDetail")
@Tag(name = "培训安排", description = "培训安排接口")
@Tag(name = "培训记录管理", description = "培训记录管理接口")
public class CultivateDetailController extends BladeController {
private final ICultivateDetailService cultivateDetailService;

@ -50,7 +50,7 @@ import jakarta.servlet.http.HttpServletResponse;
@RestController
@AllArgsConstructor
@RequestMapping("/equipmentMaintenance")
@Tag(name = "岗位设备维护", description = "岗位设备维护接口")
@Tag(name = "人员设备台账", description = "人员设备台账接口")
public class EquipmentMaintenanceController extends BladeController {
private final IEquipmentMaintenanceService equipmentMaintenanceService;

@ -52,7 +52,7 @@ import org.springframework.web.multipart.MultipartFile;
@RestController
@AllArgsConstructor
@RequestMapping("/postHandle")
@Tag(name = "岗位处理", description = "岗位处理接口")
@Tag(name = "人员岗位管理", description = "人员岗位管理接口")
public class PostHandleController extends BladeController {
private final IPostHandleService postHandleService;
@ -215,7 +215,7 @@ public class PostHandleController extends BladeController {
public ResponseEntity<Resource> downloadExcelTemplate() {
return ExcelExtUtil.downloadXlsTemplate(
"Excel/jobTransfer/岗位处理导入模板下载.xls",
"岗位处理导入模板下载.xls");
"岗位处理导入模板.xls");
}
/**

@ -131,7 +131,7 @@
LEFT JOIN BA_TEAM_SET bd ON ph.DEPT_ID = bd.ID
LEFT JOIN MES_CERTIFICATE_MAINTENANCE cm ON ph.id = cm.ph_id AND cm.is_deleted = 0
LEFT JOIN MES_CERTIFICATE_TYPE ct ON cm.certificate_id = ct.id AND ct.is_deleted = 0
WHERE ph.is_deleted = 0
WHERE ph.is_deleted = 0 and ph.staff_type != 1
<if test="query.name != null and query.name != ''">
AND ph.name LIKE CONCAT(CONCAT('%', #{query.name}), '%')
</if>

@ -110,7 +110,7 @@
LEFT JOIN BA_TEAM_SET bd ON ph.DEPT_ID = bd.ID
LEFT JOIN MES_EQUIPMENT_MAINTENANCE em ON ph.id = em.ph_id AND em.is_deleted = 0
LEFT JOIN MES_EQUIPMENT equipment ON em.equipment_id = equipment.id AND equipment.is_deleted = 0
WHERE ph.is_deleted = 0
WHERE ph.is_deleted = 0 and ph.staff_type != 1
<if test="query.name != null and query.name != ''">
AND ph.name LIKE CONCAT(CONCAT('%', #{query.name}), '%')
</if>

@ -1,8 +1,10 @@
package org.springblade.desk.jobTransfer.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import org.springblade.core.tool.api.R;
import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel;
import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceImport;
import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery;
import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -47,4 +49,12 @@ public interface ICertificateMaintenanceService extends BaseService<CertificateM
* @return
*/
Boolean submitList(List<CertificateMaintenanceEntity> certificateMaintenances);
/**
* 导入
*
* @param certificateMaintenanceImports
* @return
*/
R saveExcelData(List<CertificateMaintenanceImport> certificateMaintenanceImports);
}

@ -1,18 +1,30 @@
package org.springblade.desk.jobTransfer.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import jakarta.annotation.Resource;
import org.springblade.core.tool.api.R;
import org.springblade.desk.jobTransfer.mapper.CertificateTypeMapper;
import org.springblade.desk.jobTransfer.mapper.PostHandleMapper;
import org.springblade.desk.jobTransfer.pojo.entity.CertificateMaintenanceEntity;
import org.springblade.desk.jobTransfer.pojo.entity.PostHandleEntity;
import org.springblade.desk.jobTransfer.pojo.enums.PostHandleStatusEnum;
import org.springblade.desk.jobTransfer.pojo.enums.StaffTypeEnum;
import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceExcel;
import org.springblade.desk.jobTransfer.pojo.excel.CertificateMaintenanceImport;
import org.springblade.desk.jobTransfer.pojo.request.CertificateLedgerQuery;
import org.springblade.desk.jobTransfer.pojo.vo.CertificateLedgerVO;
import org.springblade.desk.jobTransfer.mapper.CertificateMaintenanceMapper;
import org.springblade.desk.jobTransfer.service.ICertificateMaintenanceService;
import org.springblade.system.cache.UserCache;
import org.springblade.system.pojo.entity.UserInfo;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 证书维护 服务实现类
@ -23,6 +35,12 @@ import java.util.List;
@Service
public class CertificateMaintenanceServiceImpl extends BaseServiceImpl<CertificateMaintenanceMapper, CertificateMaintenanceEntity> implements ICertificateMaintenanceService {
@Resource
private PostHandleMapper postHandleMapper;
@Resource
private CertificateTypeMapper certificateTypeMapper;
@Override
public IPage<CertificateLedgerVO> selectCertificateMaintenancePage(IPage<CertificateLedgerVO> page, CertificateLedgerQuery certificateLedgerQuery) {
return page.setRecords(baseMapper.selectCertificateMaintenancePage(page, certificateLedgerQuery));
@ -53,7 +71,44 @@ public class CertificateMaintenanceServiceImpl extends BaseServiceImpl<Certifica
return saved;
}
@Override
public R saveExcelData(List<CertificateMaintenanceImport> certificateMaintenanceImports) {
//获取全部用户codes,通过code获取用户ID,
Set<String> codes = certificateMaintenanceImports.stream().map(CertificateMaintenanceImport::getUserCode)
.collect(Collectors.toSet());
Map<Long, String> idCodeMap = codes.stream()
.map(code -> {
UserInfo userInfo = UserCache.getUserByCode(code);
return (userInfo != null && userInfo.getUser() != null) ?
new AbstractMap.SimpleEntry<>(code, userInfo.getUser().getId()) : null;
})
.filter(Objects::nonNull)
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getValue, AbstractMap.SimpleEntry::getKey));
//根据用户id获取人员岗位数据
Collection<Long> values = idCodeMap.keySet();
LambdaQueryWrapper<PostHandleEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.in(PostHandleEntity::getUserId, values)
.eq(PostHandleEntity::getStaffType, StaffTypeEnum.FORMAL.getCode().shortValue())
.ne(PostHandleEntity::getPhStatus, PostHandleStatusEnum.DEPART.getCode().shortValue()); // 使用实体类的get方法引用
List<PostHandleEntity> postHandleEntities = postHandleMapper.selectList(lambdaQueryWrapper);
Map<Long, Long> idMap = postHandleEntities.stream().collect(Collectors.toMap(
entity -> entity.getUserId(),
entity -> entity.getId()));
//整合成一个用户code和PostHandleEntityId的map
Map<String, Long> codePostHandleIdMap = new HashMap<>();
for (Long l : idMap.keySet()) {
codePostHandleIdMap.put(idCodeMap.get(l), idMap.get(l));
}
codes.removeAll(codePostHandleIdMap.keySet());
if (codes.size() > 0) {
return R.fail("工号:" + String.join(",", codes) + "不存在。");
}
//获取全部证书类型
Set<String> certificateType = certificateMaintenanceImports.stream().map(CertificateMaintenanceImport::getCertificateType)
.collect(Collectors.toSet());
return null;
}
}

Loading…
Cancel
Save