年度制修订计划导入

This commit is contained in:
Xia Zekun
2024-04-25 11:48:45 +08:00
committed by lijiarao
parent f5c747e0d1
commit 9b1c4d10e0
7 changed files with 309 additions and 22 deletions
@@ -36,5 +36,13 @@ public enum ESPChangeType {
return description;
}
public static String getValueByName(String name) {
for (ESPChangeType type : ESPChangeType.values()) {
if (type.getName().equals(name)) {
return type.getValue();
}
}
// 如果找不到对应的状态值,则返回“新增”的状态值
return ESPChangeType.ADD.getValue();
}
}
@@ -28,4 +28,15 @@ public enum ESPProjectStatus {
public String getValue() {
return value;
}
public static String getValueByName(String name) {
for (ESPProjectStatus status : ESPProjectStatus.values()) {
if (status.getName().equals(name)) {
return status.getValue();
}
}
// 如果找不到对应的状态值,则返回“未开始”的状态值
return ESPProjectStatus.NOT_STARTED.getValue();
}
}
@@ -3,31 +3,31 @@ package com.jero.modules.activiti.util;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jero.common.api.CommonAPI;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.SysDictItemCore;
import com.jero.common.util.MessageUtils;
import com.jero.common.util.oConvertUtils;
import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType;
import com.jero.modules.laws.common.util.ImportUtil;
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.sys.entity.LawsEnterpriseStandardLevel;
import com.jero.modules.sys.entity.LawsGrade;
import com.jero.modules.sys.service.ILawsEnterpriseStandardLevelService;
import com.jero.modules.sys.service.ILawsGradeService;
import com.jero.modules.system.entity.SysDictItem;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.*;
@@ -490,4 +490,23 @@ public class ExcelUtils {
authDeptMap.put("2", levelTwoList.stream().map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList()));
return authDeptMap;
}
public <T> void exportWithExcel(HttpServletResponse response, List<T> dtoList, String fileName) {
try {
// 设置导出参数
ExportParams exportParams = new ExportParams(null, fileName); // 可以为标题添加更多的配置
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, dtoList.get(0).getClass(), dtoList);
// 设置响应头和内容类型
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 写出到响应流
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
throw new JeroBootException(MessageUtils.getMessage(ResultCommon.EXPORT_ERROR), e);
}
}
}
@@ -4,12 +4,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.jero.common.api.vo.Result;
import com.jero.common.api.vo.ResultCommon;
import com.jero.common.aspect.annotation.AutoLog;
import com.jero.common.aspect.annotation.Translation;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.base.controller.JeroController;
import com.jero.common.util.MessageUtils;
import com.jero.common.api.vo.ResultCommon;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.entity.dto.ESPlanQueryDTO;
import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo;
@@ -22,10 +22,11 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.io.IOException;
/**
* @Description: 企标计划
@@ -109,4 +110,13 @@ public class EnterpriseStandardPlanController extends JeroController<EnterpriseS
public void exportData(HttpServletResponse response, ESPlanQueryDTO esPlanQueryDTO) {
esPlanService.export(response, esPlanQueryDTO, "企标计划", "企标计划");
}
@AutoLog(value = "企标计划-年度制修订计划导入")
@ApiOperation(value="企标计划-年度制修订计划导入", notes="企标计划-年度制修订计划导入")
@PostMapping("importAnnualRevisionPlan")
public void importAnnualRevisionPlan(@RequestParam("file") @ApiParam("文件") MultipartFile file,
HttpServletResponse response) throws IOException {
esPlanService.importAnnualRevisionPlan(file, response);
}
}
@@ -0,0 +1,106 @@
package com.jero.modules.laws.enterprise.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.jeecgframework.poi.excel.annotation.Excel;
/**
* @author: xzk
* @Date: 2024年4月2日 09:39:56
*/
@Data
public class EnterpriseStandardPlanImport {
@Excel(name = "*制修订类型", width = 15, orderNum = "0")
private String editType;
@Excel(name = "*原企标编号", width = 15, orderNum = "1")
private String originEnStandardNo;
@Excel(name = "*新企标编号", width = 15, orderNum = "2")
private String newEnStandardNo;
@Excel(name = "*项目状态", width = 15, orderNum = "3")
private String projectStatus;
@Excel(name = "*变更状态", width = 15, orderNum = "4")
private String changeStatus;
@Excel(name = "*新企标名称", width = 15, orderNum = "5")
private String newEnStandardName;
@Excel(name = "*企业标准代号", width = 15, orderNum = "6")
private String enStandardCode;
@Excel(name = "*企业名称代号", width = 15, orderNum = "7")
private String enNameCode;
@Excel(name = "*标准类别代号", width = 15, orderNum = "8")
private String standardCategoryCode;
@Excel(name = "*标准体系", width = 15, orderNum = "9")
private String enStandardSystem;
@Excel(name = "*标准类型", width = 15, orderNum = "10")
private String standardType;
@Excel(name = "*标准等级分类", width = 15, orderNum = "11")
private String enStandardClassification;
@Excel(name = "*草稿计划完成日期", width = 15, orderNum = "12")
private String draftPlannedCompleteDate;
@Excel(name = "*征求意见稿计划完成日期", width = 15, orderNum = "13")
private String solicitationDraftPlanCompleteDate;
@Excel(name = "*计划报批日期", width = 15, orderNum = "14")
private String planApprovalDate;
@Excel(name = "零部件名称", width = 15, orderNum = "15")
private String componentName;
@Excel(name = "授权部门", width = 15, orderNum = "16")
private String authDept;
@Excel(name = "*主起草人", width = 15, orderNum = "17")
private String mainDraftingUser;
@Excel(name = "*主起草单位", width = 15, orderNum = "18")
private String mainDraftingUnit;
@Excel(name = "*主起草单位责任人", width = 15, orderNum = "19")
private String mainDraftingUnitResponsiblePerson;
@Excel(name = "*标准推进人", width = 15, orderNum = "20")
private String standardPromoter;
@Excel(name = "配合单位", width = 15, orderNum = "21")
private String cooperationUnit;
@Excel(name = "错误信息", width = 35, orderNum = "22")
@TableField(exist = false)
private String errorInfo;
/**
* 判断是否是无用行
*/
public boolean isBlankRow() {
return StringUtils.isBlank(editType) &&
StringUtils.isBlank(originEnStandardNo) &&
StringUtils.isBlank(newEnStandardNo) &&
StringUtils.isBlank(projectStatus) &&
StringUtils.isBlank(changeStatus) &&
StringUtils.isBlank(newEnStandardName);
}
/**
* 判断是否是无用行
*/
public boolean isUselessRow() {
return !"制定".equals(editType) && !"修订".equals(editType);
}
}
@@ -5,8 +5,10 @@ import com.jero.modules.laws.enterprise.entity.dto.ESPlanQueryDTO;
import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author ThinkBook
@@ -56,4 +58,9 @@ public interface EnterpriseStandardPlanService extends IService<EnterpriseStanda
* @return
*/
IPage<EnterpriseStandardPlanVo> getESPList(Integer pageNo, Integer pageSize, ESPlanQueryDTO esPlanQueryDTO, String projectType);
/**
* 年度制修订计划导入
*/
void importAnnualRevisionPlan(MultipartFile file, HttpServletResponse response) throws IOException;
}
@@ -5,46 +5,69 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.system.vo.DictModel;
import com.jero.common.api.CommonAPI;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.SysDictItemCore;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPChangeType;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectStatus;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType;
import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPRevisionType;
import com.jero.modules.activiti.util.ExcelUtils;
import com.jero.modules.laws.common.service.ILawsCommonService;
import com.jero.modules.laws.common.util.ImportUtil;
import com.jero.modules.laws.common.vo.ManyStandardSelectionBox;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlanImport;
import com.jero.modules.laws.enterprise.entity.dto.ESPlanQueryDTO;
import com.jero.modules.laws.enterprise.entity.vo.EnterpriseStandardPlanVo;
import com.jero.common.exception.JeroBootException;
import com.jero.modules.laws.enterprise.entity.EnterpriseStandardPlan;
import com.jero.modules.laws.enterprise.mapper.EnterpriseStandardPlanMapper;
import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider;
import com.jero.modules.laws.enterprise.service.EnterpriseStandardPlanService;
import com.jero.modules.laws.enterprise.mapper.EnterpriseStandardPlanMapper;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.jeecgframework.poi.excel.ExcelExportUtil;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author ThinkBook
* @description 针对表【laws_enterprise_standard_plan】的数据库操作Service实现
* @createDate 2023-09-07 11:20:13
*/
* @author ThinkBook
* @description 针对表【laws_enterprise_standard_plan】的数据库操作Service实现
* @createDate 2023-09-07 11:20:13
*/
@Service
@Transactional(rollbackFor = JeroBootException.class)
@Slf4j
public class EnterpriseStandardPlanServiceImpl extends ServiceImpl<EnterpriseStandardPlanMapper, EnterpriseStandardPlan>
implements EnterpriseStandardPlanService, ESSequenceNumberProvider {
implements EnterpriseStandardPlanService, ESSequenceNumberProvider {
@Resource
private ImportUtil importUtil;
@Resource
private CommonAPI commonAPI;
@Resource
private ExcelUtils excelUtils;
@Autowired
private ILawsCommonService lawsCommonService;
@Resource
private EnterpriseStandardPlanMapper esPlanMapper;
@@ -143,6 +166,109 @@ public class EnterpriseStandardPlanServiceImpl extends ServiceImpl<EnterpriseSta
return espList.stream().map(EnterpriseStandardPlan::getNewEnStandardNo)
.map(EnterpriseStandardUtil::getSequenceNoFromStandardNo).collect(Collectors.toList());
}
@Override
public void importAnnualRevisionPlan(MultipartFile file, HttpServletResponse response) throws IOException {
log.info("importAnnualRevisionPlan");
log.info("开始导入年度制修订计划表");
List<EnterpriseStandardPlanImport> importErrorList = new ArrayList<>();
@Cleanup
InputStream inputStream = file.getInputStream();
ImportParams params = new ImportParams();
params.setTitleRows(0);
params.setNeedSave(true);
List<EnterpriseStandardPlanImport> importList = new ArrayList<>();
try {
importList = ExcelImportUtil.importExcel(inputStream, EnterpriseStandardPlanImport.class, params);
} catch (Exception e) {
log.error("导入失败: " + e.getMessage());
}
log.info("获取数据成功,总数据条数:{}", importList.size());
String errorInfo = "";
List<SysDictItemCore> listDict = commonAPI.getDictItemAll();
for (EnterpriseStandardPlanImport item : importList) {
if (item.isBlankRow()) {
continue;
}
if (item.isUselessRow()) {
errorInfo = "当前行数据制修订类型既不是制定也不是修订,该行不予导入,不作处理";
log.info(errorInfo);
log.info(item.toString());
item.setErrorInfo(errorInfo);
importErrorList.add(item);
continue;
}
EnterpriseStandardPlan esp = new EnterpriseStandardPlan();
try {
esp.setOriginEnStandardNo(item.getOriginEnStandardNo());
esp.setNewEnStandardNo(item.getNewEnStandardNo());
esp.setProjectStatus(ESPProjectStatus.getValueByName(item.getProjectStatus()));
esp.setChangeStatus(ESPChangeType.getValueByName(item.getChangeStatus()));
esp.setNewEnStandardName(item.getNewEnStandardName());
esp.setEnStandardCode(item.getEnStandardCode());
esp.setEnNameCode(item.getEnNameCode());
esp.setStandardCategoryCode(item.getStandardCategoryCode());
esp.setEnStandardSystem(importUtil.convertStandardSystem(item.getEnStandardSystem(), "3"));
esp.setStandardType(excelUtils.translateDictValue("esp_standard_type", item.getStandardType(), listDict));
esp.setEnStandardClassification(item.getEnStandardClassification());
esp.setDraftPlannedCompleteDate(importUtil.convertDate(item.getDraftPlannedCompleteDate()));
esp.setSolicitationDraftPlanCompleteDate(importUtil.convertDate(item.getSolicitationDraftPlanCompleteDate()));
esp.setPlanApprovalDate(importUtil.convertDate(item.getPlanApprovalDate()));
esp.setComponentName(excelUtils.translateDictValue("name", "code", "laws_part_name", item.getComponentName(), listDict));
esp.setAuthDept(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getAuthDept(), listDict));
esp.setMainDraftingUser(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getMainDraftingUser(), listDict));
esp.setMainDraftingUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getMainDraftingUnit(), listDict));
esp.setMainDraftingUnitResponsiblePerson(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getMainDraftingUnitResponsiblePerson(), listDict));
esp.setStandardPromoter(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getStandardPromoter(), listDict));
esp.setCooperationUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getCooperationUnit(), listDict));
} catch (Exception e) {
errorInfo = "数据转换异常:" + e.getMessage();
log.info(errorInfo);
log.info(item.toString());
log.error(e.getMessage(), e);
item.setErrorInfo("数据转换异常:" + e.getMessage());
importErrorList.add(item);
continue;
}
// 制定的,拿新企标编号在企标表里查,查到的话要报错,不予导入,统计并反馈;查不到的,数据正常录入plan表
if ("制定".equals(item.getEditType())) {
ManyStandardSelectionBox singleStandard = lawsCommonService.getSingleStandard(esp.getNewEnStandardNo(), null);
if (ObjectUtils.isNotEmpty(singleStandard)) {
// 查到的话要报错,不予导入,统计并反馈
errorInfo = "该制定类型数据的新企标编号已经在系统中存在,不予导入";
log.info(errorInfo);
log.info(item.toString());
item.setErrorInfo(errorInfo);
importErrorList.add(item);
continue;
} else { // 查不到正常,直接保存
this.save(esp);
}
}
// 修订的,拿旧企标编号在企标表里查,查不到的要报错,不予导入,统计并反馈;查得到的,数据正常录入plan表
if ("修订".equals(item.getEditType())) {
ManyStandardSelectionBox singleStandard = lawsCommonService.getSingleStandard(esp.getOriginEnStandardNo(), null);
if (ObjectUtils.isEmpty(singleStandard)) {
//查不到的要报错,不予导入
errorInfo = "该修订类型数据的原企标编号在系统中不存在,不予导入";
log.info(errorInfo);
log.info(item.toString());
item.setErrorInfo(errorInfo);
importErrorList.add(item);
continue;
} else { // 查得到正常,直接保存
this.save(esp);
}
}
}
if (!importErrorList.isEmpty()) {
log.info("问题数据条数:{}", importErrorList.size());
excelUtils.exportWithExcel(response, importErrorList, "importAnnualRevisionPlan-ImportErrorData.xls");
}
log.info("年度制修订计划表数据导入结束");
}
}