diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPChangeType.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPChangeType.java index c3f31675..f4ba0da6 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPChangeType.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPChangeType.java @@ -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(); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPProjectStatus.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPProjectStatus.java index 40f929dc..3d771bbb 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPProjectStatus.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esInitChange/entity/enums/ESPProjectStatus.java @@ -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(); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java b/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java index 3c038e7c..4710b175 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java @@ -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 void exportWithExcel(HttpServletResponse response, List 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); + } + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/controller/EnterpriseStandardPlanController.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/controller/EnterpriseStandardPlanController.java index 10558e88..175a55de 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/controller/EnterpriseStandardPlanController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/controller/EnterpriseStandardPlanController.java @@ -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 getESPList(Integer pageNo, Integer pageSize, ESPlanQueryDTO esPlanQueryDTO, String projectType); + + /** + * 年度制修订计划导入 + */ + void importAnnualRevisionPlan(MultipartFile file, HttpServletResponse response) throws IOException; } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java index d052c556..b8e621b7 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/enterprise/service/impl/EnterpriseStandardPlanServiceImpl.java @@ -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 - 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 importErrorList = new ArrayList<>(); + @Cleanup + InputStream inputStream = file.getInputStream(); + ImportParams params = new ImportParams(); + params.setTitleRows(0); + params.setNeedSave(true); + List 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 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("年度制修订计划表数据导入结束"); + } + }