From c4c8205a3b5685d3377dde3a1666a744d6417afc Mon Sep 17 00:00:00 2001 From: wxyclub Date: Mon, 4 Dec 2023 18:53:20 +0800 Subject: [PATCH] =?UTF-8?q?add:=20=E4=BC=81=E6=A0=87=E8=AE=A1=E5=88=92exce?= =?UTF-8?q?l=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WorkFlowController.java | 1 + adc-da-slrs/pom.xml | 6 + .../main/java/com/adc/da/common/BusMes.java | 38 ++ .../com/adc/da/common/ProcessRollBackEO.java | 22 ++ .../adc/da/common/WorkFlowFeignClient.java | 21 + .../controller/EsRevisePlanController.java | 94 ++++- .../esRevisePlan/entity/EsRevisePlan.java | 17 + .../service/IEsRevisePlanService.java | 4 + .../service/impl/EsRevisePlanServiceImpl.java | 366 +++++++++++++++++- .../adc/da/utils/util/FieldConvertUtil.java | 11 + 10 files changed, 571 insertions(+), 9 deletions(-) create mode 100644 adc-da-slrs/src/main/java/com/adc/da/common/BusMes.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/common/ProcessRollBackEO.java create mode 100644 adc-da-slrs/src/main/java/com/adc/da/common/WorkFlowFeignClient.java diff --git a/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/WorkFlowController.java b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/WorkFlowController.java index 6b07ccdf..1bda6834 100644 --- a/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/WorkFlowController.java +++ b/adc-da-activiti/src/main/java/com/adc/da/workFlow/controller/WorkFlowController.java @@ -45,6 +45,7 @@ import com.adc.da.sys.page.UserEOPage; import com.adc.da.sys.service.IUserEOService; import com.adc.da.util.LoginUserUtil; import com.adc.da.workFlow.entity.*; +import com.adc.da.workFlow.entity.ProcessRollBackEO; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; diff --git a/adc-da-slrs/pom.xml b/adc-da-slrs/pom.xml index 889ae6ed..e87fc43a 100644 --- a/adc-da-slrs/pom.xml +++ b/adc-da-slrs/pom.xml @@ -137,6 +137,12 @@ com.google.code.gson gson + + org.springframework.cloud + spring-cloud-openfeign-core + 2.2.0.RELEASE + compile + diff --git a/adc-da-slrs/src/main/java/com/adc/da/common/BusMes.java b/adc-da-slrs/src/main/java/com/adc/da/common/BusMes.java new file mode 100644 index 00000000..a372a03a --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/common/BusMes.java @@ -0,0 +1,38 @@ +package com.adc.da.common; + +import lombok.Data; + +/** + * @author wxyclub + * @description + * @date 2023/12/4 + */ +@Data +public class BusMes { + + private String userId; + + private String taskId; + + private String json; + + private String taskIds; + + private String pId; + + private String prcType; + + private String createUser; + + private String createUserName; + + private String userName; + + private int size; + + private int current; + + private String id; + + private String nowStateType; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/common/ProcessRollBackEO.java b/adc-da-slrs/src/main/java/com/adc/da/common/ProcessRollBackEO.java new file mode 100644 index 00000000..fe958503 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/common/ProcessRollBackEO.java @@ -0,0 +1,22 @@ +package com.adc.da.common; + +import lombok.Data; + +/** + * @author wxyclub + * @description + * @date 2023/12/4 + */ +@Data +public class ProcessRollBackEO { + + private String json; + + private String type; + + private String id; + + private String userId; + + private String bpnId; +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/common/WorkFlowFeignClient.java b/adc-da-slrs/src/main/java/com/adc/da/common/WorkFlowFeignClient.java new file mode 100644 index 00000000..838456e1 --- /dev/null +++ b/adc-da-slrs/src/main/java/com/adc/da/common/WorkFlowFeignClient.java @@ -0,0 +1,21 @@ +package com.adc.da.common; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * @author wxyclub + * @description + * @date 2023/12/4 + */ +@FeignClient(value = "bat-wkflow", contextId = "slrs") +public interface WorkFlowFeignClient { + + @RequestMapping(value = "/bat-wkflow/activiti_define_start_user_rollBack",method = RequestMethod.POST) + Wrapper activiti_define_start_rollBack(@RequestBody ProcessRollBackEO processRollBackEO); + + @RequestMapping(value = "/bat-wkflow/completeTask",method = RequestMethod.POST) + Wrapper completeTaskByUserId(@RequestBody BusMes busMes); +} diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java index fa4476ff..cd06e7e5 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/controller/EsRevisePlanController.java @@ -2,6 +2,7 @@ package com.adc.da.slrs.esRevisePlan.controller; import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.ZipUtil; import com.adc.da.common.ReadExcel; import com.adc.da.exception.AdcDaBaseException; import com.adc.da.http.PageInfo; @@ -9,25 +10,32 @@ import com.adc.da.http.ResponseMessage; import com.adc.da.http.Result; import com.adc.da.slrs.esRevisePlan.service.IEsRevisePlanService; import com.adc.da.slrs.sarEnterpriseStandardEvaluation.service.IQualityEvaluationService; +import com.adc.da.util.UUIDUtils; import com.adc.da.utils.util.EsRevisePlanExportUtil; +import com.adc.da.utils.util.FieldConvertUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ObjectUtils; -import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.hssf.usermodel.HSSFCellStyle; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import com.adc.da.slrs.esRevisePlan.entity.EsRevisePlan; import io.swagger.annotations.Api; import com.adc.da.base.web.BaseController; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.io.OutputStream; +import java.io.*; import java.util.*; /** @@ -50,6 +58,9 @@ public class EsRevisePlanController extends BaseController { @Autowired private IQualityEvaluationService qualityEvaluationService; + @Value("${file.path}") + private String filePath; + @ApiOperation(value = "获取所有企标计划") @GetMapping("getAllPlans") public ResponseMessage getAllPlans(EsRevisePlan esRevisePlan){ @@ -291,4 +302,81 @@ public class EsRevisePlanController extends BaseController { return Result.success(iEsRevisePlanService.oaUpdatePlans(esId,date,s)); } + @ApiOperation("企标计划Excel批量导入") + @PostMapping("/importEsRevisePlan") + public ResponseMessage importEsRevisePlan(@RequestParam("file") MultipartFile file) throws Exception { + if (file == null) { + return Result.error("文件为空,请重新上传"); + } + return iEsRevisePlanService.importEsRevisePlan(file); + } + + @ApiOperation("企标计划导入模板下载") + @GetMapping("/exportTemplateFile") + public void exportTemplateFile(String fileName,HttpServletResponse response, HttpServletRequest request) throws Exception { + OutputStream os = null; + OutputStream excelOS = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String fileOriName = "企标计划导入模板"; + if (StringUtils.isNotEmpty(fileName)) { + fileOriName = fileName; + } + try{ + //创建临时文件夹 + String fileNowPath = filePath + "/tempZip/" + UUIDUtils.randomUUID20() + "/" + fileOriName; + File nowFile = new File(fileNowPath); + if (nowFile.exists()){ + nowFile.delete(); + } + nowFile.mkdirs(); + String fileName2 = "导入模板.xls"; + HSSFSheet sheetItems = workbook.createSheet("模板"); + sheetItems.setDefaultColumnWidth(17); + Row rowHeader = sheetItems.createRow(1);//开始创建标题行 + sheetItems.addMergedRegion(new CellRangeAddress(0, 0, 0, 17)); + Row row2 = sheetItems.createRow(0);//开始创建填写说明 + String exportFieldName = FieldConvertUtil.exportFieldEsPlan; + if (StringUtils.isNotBlank(exportFieldName)) { + String[] headerArr = exportFieldName.split(","); + for (int i=0;i < headerArr.length; i++) { + rowHeader.createCell(i).setCellValue(headerArr[i]); + } + } + Cell cellA2 = row2.createCell(0); + cellA2.setCellValue(FieldConvertUtil.exportFieldEsPlanDesc); + //sheetItems.setColumnWidth(0, 20 * 150); + row2.setHeight((short) (100 * 25)); + HSSFCellStyle cellStyle =workbook.createCellStyle(); + cellStyle.setAlignment(HorizontalAlignment.LEFT); + cellStyle.setVerticalAlignment(VerticalAlignment.TOP); + cellStyle.setWrapText(true); + cellA2.setCellStyle(cellStyle); + String repFileName = fileName2.replaceAll("/","_"); + excelOS = new FileOutputStream(fileNowPath + "/" + repFileName); + response.setHeader("Content-Disposition", + "attachment; filename=\""+ ReadExcel.encodeFileName(fileOriName+".xls", request) +"\""); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(excelOS); + excelOS.flush(); + excelOS.close(); + InputStream inputStream = new FileInputStream(fileNowPath + "/" + repFileName); +// FileInputStream fis = new FileInputStream(fileNowPath+".zip"); + int len = 0; + while ((len = inputStream.read()) != -1) { + os.write(len); + } + + os.flush(); + os.close(); // 后开先关 +// fis.close(); // 先开后关 + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new com.adc.da.exception.AdcDaBaseException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + IOUtils.closeQuietly(excelOS); + } + } } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/entity/EsRevisePlan.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/entity/EsRevisePlan.java index d05a036e..d34d20c6 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/entity/EsRevisePlan.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/entity/EsRevisePlan.java @@ -3,6 +3,7 @@ package com.adc.da.slrs.esRevisePlan.entity; import java.util.Date; import java.util.List; +import cn.afterturn.easypoi.excel.annotation.Excel; import com.adc.da.base.page.BasePage; import com.adc.da.slrs.esMatingRelation.entity.EsMatingRelation; import com.adc.da.slrs.esStandRelation.entity.EsStandRelation; @@ -35,21 +36,26 @@ public class EsRevisePlan extends BasePage { private String id; @ApiModelProperty(value = "企标名称") + @Excel(name = "*企标名称") private String esName; @ApiModelProperty(value = "计划状态") private String planStatus; @ApiModelProperty(value = "制修订状态") + @Excel(name = "*制修订类型") private String reviseStatus; @ApiModelProperty(value = "起草人") + @Excel(name = "*起草人") private String drafter; @ApiModelProperty(value = "评审责任人") + @Excel(name = "*内部评审责任人") private String resPerson; @ApiModelProperty(value = "工作组组长") + @Excel(name = "*技术委员会评审负责人") private String wgLeader; @ApiModelProperty(value = "企标ID") @@ -80,11 +86,13 @@ public class EsRevisePlan extends BasePage { @ApiModelProperty(value = "计划标准初稿完成时间") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @Excel(name = "*计划标准初稿完成时间") private Date draftTime; @ApiModelProperty(value = "计划标准发布时间") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @Excel(name = "*计划标准发布时间") private Date releaseTime; @ApiModelProperty(value = "起草责任单位ID") @@ -92,12 +100,14 @@ public class EsRevisePlan extends BasePage { @ApiModelProperty(value = "起草责任单位名称") @TableField(exist = false) + @Excel(name = "*起草责任单位") private String unitName; @ApiModelProperty(value = "引入企业标准json(标准id)") private String rqbJson; @ApiModelProperty(value = "引入企业标准json(标准名称)") @TableField(exist = false) + @Excel(name = "代替企标编号") private String rqbName; @ApiModelProperty(value = "引入企业标准json(标准编号)") @TableField(exist = false) @@ -106,10 +116,12 @@ public class EsRevisePlan extends BasePage { private String tsJson; @ApiModelProperty(value = "体系结构树(名称逗号拼接展示)") @TableField(exist = false) + @Excel(name = "体系结构") private String tsJsonName; @ApiModelProperty(value = "标准范围") private String area; @ApiModelProperty(value = "标准范围") + @Excel(name = "适用车型") @TableField(exist = false) private String areaName; //企标类别 @@ -122,10 +134,13 @@ public class EsRevisePlan extends BasePage { @ApiModelProperty(value = "企标类别") + @Excel(name = "引用标准") private String esMatingRelations; + @Excel(name = "采用标准") private String esStandRelations; @ApiModelProperty(value = "是否引用标准") @TableField("is_relate") + @Excel(name = "是否引用标准") private String isRelate; @ApiModelProperty(value = "采用程度") @@ -133,6 +148,7 @@ public class EsRevisePlan extends BasePage { private String useLevel; @TableField(exist = false) + @Excel(name = "采标程度") private String useLevelName; @ApiModelProperty(value = "简述技术指标依据") @@ -141,6 +157,7 @@ public class EsRevisePlan extends BasePage { @ApiModelProperty(value = "企标类别") @TableField("buss_sort") + @Excel(name = "*企标类别") private String bussSort; @TableField(exist = false) diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/IEsRevisePlanService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/IEsRevisePlanService.java index edbcf341..b700c274 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/IEsRevisePlanService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/IEsRevisePlanService.java @@ -4,7 +4,9 @@ import com.adc.da.http.ResponseMessage; import com.adc.da.slrs.esRevisePlan.entity.EsRevisePlan; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.Date; import java.util.List; @@ -37,5 +39,7 @@ public interface IEsRevisePlanService extends IService { List batchToDoTasks(String json); + ResponseMessage importEsRevisePlan(MultipartFile file) throws Exception; + // String modPlanByStateAndScore(EsRevisePlan esRevisePlan); } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java index b3dd0bb7..dbc0f4ac 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/esRevisePlan/service/impl/EsRevisePlanServiceImpl.java @@ -1,5 +1,11 @@ package com.adc.da.slrs.esRevisePlan.service.impl; +import cn.afterturn.easypoi.excel.ExcelImportUtil; +import cn.afterturn.easypoi.excel.entity.ImportParams; +import com.adc.da.common.BusMes; +import com.adc.da.common.ProcessRollBackEO; +import com.adc.da.common.WorkFlowFeignClient; +import com.adc.da.common.Wrapper; import com.adc.da.http.ResponseMessage; import com.adc.da.http.Result; import com.adc.da.login.util.UserUtils; @@ -16,22 +22,32 @@ import com.adc.da.slrs.esStandRelation.service.IEsStandRelationService; import com.adc.da.slrs.sarBussionessStand.entity.SarBussionessStand; import com.adc.da.slrs.sarBussionessStand.service.ISarBussionessStandService; import com.adc.da.slrs.sarEnterpriseStandardEvaluation.service.IQualityEvaluationService; -import com.adc.da.sys.entity.UserEO; +import com.adc.da.slrs.sarInstitution.entity.TsInstitution; +import com.adc.da.slrs.sarInstitution.service.ITsInstitutionService; +import com.adc.da.slrs.sarUser.entity.TsUser; +import com.adc.da.slrs.sarUser.service.ITsUserService; +import com.adc.da.slrs.tsDictionaryType.entity.TsDicType; +import com.adc.da.slrs.tsDictionaryType.service.ITsDicTypeService; +import com.adc.da.sys.sarMenuStandard.entity.SarMenuStandard; +import com.adc.da.sys.sarMenuStandard.service.ISarMenuStandardService; +import com.adc.da.util.LoginUserUtil; import com.adc.da.util.UUIDUtils; -import com.alibaba.fastjson.JSON; +import com.adc.da.utils.util.FieldConvertUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.google.gson.JsonObject; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDateUtil; +import org.apache.poi.ss.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.math.RoundingMode; -import java.text.NumberFormat; +import java.io.IOException; +import java.io.InputStream; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -63,6 +79,17 @@ public class EsRevisePlanServiceImpl extends ServiceImpl getAllPlans(EsRevisePlan esRevisePlan) { @@ -283,6 +310,333 @@ public class EsRevisePlanServiceImpl extends ServiceImpl importEsRevisePlan(MultipartFile file) throws Exception { + String userId = LoginUserUtil.getUserId(); + //获取文件全称 + String fileNameStr = file.getOriginalFilename(); + //获取最后.的位置 + assert fileNameStr != null; + int pos = fileNameStr.lastIndexOf("."); + //获取文件后缀名并以小写显示 + String fileStr = fileNameStr.substring(pos + 1).toLowerCase(); + //校验是否是xls文件 + if (!(fileStr.equals("xls") || fileStr.equals("xlsx"))) { + return Result.error("请上传Excel格式的文件"); + } + Workbook workbook = null; + InputStream inputStream = file.getInputStream(); + try { + workbook = WorkbookFactory.create(inputStream); + } catch (IOException e) { + return Result.error("导入失败,需要导入的数据有问题"); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Sheet sheet = workbook.getSheetAt(0); + if (sheet == null) { + return Result.error("工作表为空"); + } + List headerList = new ArrayList<>(); + // 获取excel表头 + Row headerRow = sheet.getRow(1); + try { + for (int i = 0; i < 17; i++) { + headerList.add(headerRow.getCell(i).getStringCellValue()); + } + } catch (Exception e) { + return Result.error("表头读取失败,请严格按照模板文件导入数据"); + } + + // 判断表头字段是否相同 + if (!String.join(",",headerList).equals(FieldConvertUtil.exportFieldEsPlan)) { + try { + workbook.close(); + } catch (IOException e) { + return Result.error("文件关闭出错"); + } + return Result.error("fail", "读取失败,请严格按照模板文件导入数据"); + } + // 获取总行数 + int rowNum = sheet.getPhysicalNumberOfRows(); + List> importDataList = new ArrayList<>(); + for (int rowIndex = 2; rowIndex < rowNum; rowIndex++) { + // 获取每一行 + Row row = sheet.getRow(rowIndex); + // 用于存储每行的键值对数据,对应一条数据 + Map rowMap = new LinkedHashMap<>(); + // 总列数 + int columnNum = 17; + // 遍历每个单元格 + for (int columnIndex = 0; columnIndex < columnNum; columnIndex++) { + // 获取单元格 + Cell cell = row.getCell(columnIndex); + // 获取表头单元格 + Cell headerCell = headerRow.getCell(columnIndex); + if (cell != null) { + if (CellType.NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + try { + if (d.before(sdf.parse("1900-01-01")) || d.after(sdf.parse("2500-01-01"))) { + return Result.error("第"+(rowIndex-1)+"行第"+(columnIndex + 1)+"个单元格输入的日期异常,请按照实际日期填写"); + } + } catch (ParseException e) { + return Result.error("第"+(rowIndex-1)+"行第"+(columnIndex + 1)+"个单元格输入的日期异常,请按照实际日期填写"); + } + // 将单元格数据存入Map中 + rowMap.put(headerCell.getStringCellValue(), sdf.format(d)); + } else { + cell.setCellType(CellType.STRING); + if (cell.getStringCellValue().length() > 500) { + return Result.error("第"+(rowIndex-1)+"行第"+(columnIndex + 1)+"个单元格输入过长"); + } + rowMap.put(headerCell.getStringCellValue(), cell.getStringCellValue()); + } + } else { + rowMap.put(headerCell.getStringCellValue(), ""); + } + } + importDataList.add(rowMap); + } + if (importDataList.size() < 1) { + return Result.error("您输入的数据为空"); + } + ImportParams importParams = new ImportParams(); + importParams.setTitleRows(1); + inputStream = file.getInputStream(); + List esRevisePlanList = ExcelImportUtil.importExcel(inputStream, EsRevisePlan.class, importParams); + workbook.close(); + inputStream.close(); + // 获取需要校验的字段 + List bussSortList = tsDicTypeService.selectAllDicTypeNameByDicCode("BUSSSTANDCLASS"); + List bussSortNameList = bussSortList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toList()); + List areaList = tsDicTypeService.selectAllDicTypeNameByDicCode("ENERGYTYPES"); + List areaNameList = areaList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toList()); + List useLevelList = tsDicTypeService.selectAllDicTypeNameByDicCode("DEGREESTANDARD"); + List useLevelNameList = useLevelList.stream().map(TsDicType::getDicTypeName).collect(Collectors.toList()); + // 遍历索引 + int index = 1; + // 去除空数据 + List esRevisePlanListNew = new ArrayList<>(); + for (EsRevisePlan esRevisePlan : esRevisePlanList) { + if (StringUtils.isNotBlank(esRevisePlan.getEsName())) { + esRevisePlanListNew.add(esRevisePlan); + } + } + if (esRevisePlanListNew.size() < 1) { + return Result.error("您输入的数据为空"); + } + for (EsRevisePlan esRevisePlan : esRevisePlanListNew){ + if (StringUtils.isBlank(esRevisePlan.getEsName())) { + return Result.error("第" + index + "条记录的企标名称不能为空"); + } + // 把excel表中的类别名转换为类别编号,并对类别名做检测 + if (StringUtils.isNotBlank(esRevisePlan.getBussSort())) { + if (!bussSortNameList.contains(esRevisePlan.getBussSort())){ + return Result.error("第" + index + "条记录的企标类别不符合输入要求"); + } else { + for (TsDicType tsDicType : bussSortList) { + if (esRevisePlan.getBussSort().equals(tsDicType.getDicTypeName())) { + esRevisePlan.setBussSort(tsDicType.getDicTypeCode()); + break; + } + } + } + }else { + return Result.error("第" + index + "条记录的企标类别不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getAreaName())) { + if (!areaNameList.contains(esRevisePlan.getAreaName())) { + return Result.error("第" + index + "条记录的适用车型不符合输入要求"); + } + List tempAreaNameList = new ArrayList<>(); + for (String areaName : esRevisePlan.getAreaName().split(",")) { + for (TsDicType tsDicType : areaList) { + if (areaName.equals(tsDicType.getDicTypeName())) { + tempAreaNameList.add(tsDicType.getDicTypeCode()); + } + } + } + esRevisePlan.setArea(String.join(",",tempAreaNameList)); + } + if (StringUtils.isNotBlank(esRevisePlan.getReviseStatus())) { + if ("制定".equals(esRevisePlan.getReviseStatus())) { + esRevisePlan.setReviseStatus("1"); + }else if( "修订".equals(esRevisePlan.getReviseStatus())) { + esRevisePlan.setReviseStatus("2"); + }else { + return Result.error("第" + index + "条记录的制修订类型只能是制定或修订"); + } + esRevisePlan.setPlanStatus("6"); + }else { + return Result.error("第" + index + "条记录的制修订类型不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getRqbName())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SarBussionessStand::getStandCode, esRevisePlan.getRqbName()); + wrapper.eq(SarBussionessStand::getValidFlag,"0"); + wrapper.select(SarBussionessStand::getId); + List standList = iSarBussionessStandService.list(wrapper); + if (standList.size() < 1) { + return Result.error("第" + index + "条记录的代替标准编号不存在"); + } + esRevisePlan.setRqbJson(standList.get(0).getId()); + } + if ("2".equals(esRevisePlan.getReviseStatus()) && StringUtils.isBlank(esRevisePlan.getRqbName())) { + return Result.error("第" + index + "条记录的替换标准编号不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getUnitName())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TsInstitution::getName, esRevisePlan.getUnitName()); + wrapper.select(TsInstitution::getId); + List institutionList = tsInstitutionService.list(wrapper); + if (institutionList.size() < 1) { + return Result.error("第" + index + "条记录的起草责任单位不存在"); + } + esRevisePlan.setUnit(institutionList.get(0).getId()); + } else { + return Result.error("第" + index + "条记录的起草责任单位不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getDrafter())) { + int tempCount = 1; + for (String drafter : esRevisePlan.getDrafter().split(",")) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TsUser::getAccount, drafter); + wrapper.eq(TsUser::getState, "1"); + wrapper.eq(TsUser::getValidFlag, "0"); + wrapper.eq(TsUser::getDisableFlag,"0"); + int count = tsUserService.count(wrapper); + if (count < 1) { + return Result.error("第" + index + "条记录的第"+tempCount+"个起草人不存在"); + } + tempCount++; + } + }else { + return Result.error("第" + index + "条记录的起草人不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getResPerson())) { + int tempCount = 1; + for (String resPerson : esRevisePlan.getResPerson().split(",")) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TsUser::getAccount, resPerson); + wrapper.eq(TsUser::getState, "1"); + wrapper.eq(TsUser::getValidFlag, "0"); + wrapper.eq(TsUser::getDisableFlag,"0"); + int count = tsUserService.count(wrapper); + if (count < 1) { + return Result.error("第" + index + "条记录的第"+tempCount+"个内部评审责任人不存在"); + } + } + }else { + return Result.error("第" + index + "条记录的内部评审责任人不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getWgLeader())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TsUser::getAccount, esRevisePlan.getWgLeader()); + wrapper.eq(TsUser::getState, "1"); + wrapper.eq(TsUser::getValidFlag, "0"); + wrapper.eq(TsUser::getDisableFlag,"0"); + int count = tsUserService.count(wrapper); + if (count < 1) { + return Result.error("第" + index + "条记录的技术委员会评审负责人不存在"); + } + }else { + return Result.error("第" + index + "条记录的技术委员会评审负责人不能为空"); + } + if (esRevisePlan.getDraftTime() == null) { + return Result.error("第" + index + "条记录的计划标准初稿完成时间不能为空"); + } + if (esRevisePlan.getReleaseTime() == null) { + return Result.error("第" + index + "条记录的计划标准发布时间不能为空"); + } + if (StringUtils.isNotBlank(esRevisePlan.getTsJsonName())) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SarMenuStandard::getMenuName, esRevisePlan.getTsJsonName()); + wrapper.eq(SarMenuStandard::getDicId, "9m4qqqaansxmox5e82zm"); + wrapper.select(SarMenuStandard::getId); + List menuStandardList = sarMenuStandardService.list(wrapper); + if (menuStandardList.size() < 1) { + return Result.error("第" + index + "条记录的体系类别不存在"); + } + esRevisePlan.setTsJson(menuStandardList.get(0).getId()); + } + if (StringUtils.isNotBlank(esRevisePlan.getIsRelate())) { + if ("是".equals(esRevisePlan.getIsRelate())) { + if (StringUtils.isNotBlank(esRevisePlan.getEsStandRelations())) { + int tempCount = 1; + for (String standCode : esRevisePlan.getEsStandRelations().split(",")) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SarBussionessStand::getStandCode, standCode); + wrapper.eq(SarBussionessStand::getValidFlag,"0"); + int count = iSarBussionessStandService.count(wrapper); + if (count < 1) { + return Result.error("第" + index + "条记录的第" + tempCount + "个采用标准不存在"); + } + tempCount++; + } + } + if (StringUtils.isNotBlank(esRevisePlan.getUseLevelName())) { + if (useLevelNameList.contains(esRevisePlan.getUseLevelName())) { + for (TsDicType tsDicType : useLevelList) { + if (esRevisePlan.getUseLevelName().equals(tsDicType.getDicTypeName())) { + esRevisePlan.setUseLevel(tsDicType.getId()); + break; + } + } + }else { + return Result.error("第" + index + "条记录的采标程度不存在"); + } + } + esRevisePlan.setTechnologic(null); + } else if ("否".equals(esRevisePlan.getIsRelate())) { + esRevisePlan.setEsStandRelations(null); + esRevisePlan.setUseLevel(null); + } else { + return Result.error("第" + index + "条记录的是否关联标准只能为'是'或'否'"); + } + } + if (StringUtils.isNotBlank(esRevisePlan.getEsMatingRelations())) { + int tempCount = 1; + for (String standCode : esRevisePlan.getEsMatingRelations().split(",")) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SarBussionessStand::getStandCode, standCode); + wrapper.eq(SarBussionessStand::getValidFlag,"0"); + int count = iSarBussionessStandService.count(wrapper); + if (count < 1) { + return Result.error("第" + index + "条记录的第" +tempCount+ "条应用标准不存在"); + } + tempCount++; + } + } + // 存入数据库 + ResponseMessage objectResponseMessage = addPlan(esRevisePlan); + if (!objectResponseMessage.isOk()) { + return Result.error("第" + index + "条记录存储失败"); + } + ProcessRollBackEO rollBackEO=new ProcessRollBackEO(); + rollBackEO.setType("25"); + rollBackEO.setId("enterpriseStandardSystemRevisionPlan"); + String jsonString = JSONObject.toJSONString(esRevisePlan); + rollBackEO.setJson(jsonString); + rollBackEO.setUserId(userId); + Wrapper stringWrapper = workFlowFeignClient.activiti_define_start_rollBack(rollBackEO); + if (!stringWrapper.isSuccess()) { + return Result.error("第" + index + "条记录流程启动失败"); + } + String result = stringWrapper.getResult(); + BusMes busMes = new BusMes(); + busMes.setTaskIds(result); + busMes.setUserId(userId); + busMes.setJson(jsonString); + Wrapper stringWrapper1 = workFlowFeignClient.completeTaskByUserId(busMes); + if (!stringWrapper1.isSuccess()) { + return Result.error("第" + index + "条记录流程启动失败"); + } + // 索引 +1 + index++; + } + return Result.success("导入成功"); + } + // @Override // public String modPlanByStateAndScore(EsRevisePlan esRevisePlan) { // if (StringUtils.isBlank(esRevisePlan.getStandId())) { diff --git a/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java b/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java index e019cb92..308dacc9 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java +++ b/adc-da-slrs/src/main/java/com/adc/da/utils/util/FieldConvertUtil.java @@ -77,6 +77,17 @@ public class FieldConvertUtil { // 政策课题关联表 表头 public static String exportFieldLawsTopicRelation = "会议名称,会议时间,会议地点,参会人员(内部),会议主要内容,姓名,单位,电话,邮箱,身份,姓名,单位,电话,邮箱,身份"; + public static String exportFieldEsPlan = "*企标类别,*企标名称,适用车型,*制修订类型,代替企标编号,*起草责任单位,*起草人,*内部评审责任人,*技术委员会评审负责人,*计划标准初稿完成时间,*计划标准发布时间,体系结构,是否引用标准,采用标准,采标程度,简述技术指标依据,引用标准"; + + public static String exportFieldEsPlanDesc = "填写说明\n" + + "1.导入数据从第三行开始,第一行为填写说明,第二行为表头,第三行是正式数据\n" + + "2.所有带*号的字段必须填写\n" + + "3.企标类别(例如:Q/FD),体系结构(例如:物理集成)是单选属性,必须和系统中的对应字段选项相匹配,起草人因为涉及到同名问题只能填写账号例如(zhangsan3),如果有多个起草人需要使用英文逗号进行区分\n" + + "4.适用车型,起草责任单位是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文逗号分割\n" + + "5.制修订类型,只能是制定或修订\n" + + "6.计划标准初稿完成时间,计划标准发布时间字段为年-月-日格式,必须精确到日,例如(2023-04-01)\n" + + "7.企标类别,企标名称字段为文本,填写文本内容\n"; + public static String exportBaseFieldNamesBussCode = "起草部门,废止日期,代替企标编号,复审日期,起草人,被代替企标编号,采用标准,文件上传人员,采标程度,引用标准,适用车型,能源类型,适用产品线,上传时间,体系类别,备案日期,关联模块-乘用车VPPS编码,关联模块--乘用车vpps中文名称,关联模块--卡车VPPS编码,关联模块--卡车vpps中文名称"; public static String exportAttrFieldNamesBuss = "SVPPS,规范性引用文件,废止日期,复审日期,密级,授权,相关部门," +