feat: 法规符合性排查流程-生成1

This commit is contained in:
2024-07-08 11:58:02 +08:00
parent ff00bb82ef
commit f1ca5baeac
6 changed files with 208 additions and 6 deletions
@@ -11,17 +11,24 @@ import com.jero.modules.activiti.process.common.service.ActFlowCommonService;
import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheck;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ModelExcelVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.enmus.ExcelType;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import java.util.ArrayList;
/**
* 流程-测试流程(process_demo)表控制层
@@ -113,8 +120,30 @@ public class ProcessStandardComplianceCheckController extends JeroController<Pro
@PostMapping("/generate")
@Translation
public Result<?> generate(@RequestPart("scc") ProcessStandardComplianceCheck scc,
@RequestPart("file") MultipartFile file) {
return Result.OK(sccService.generate(scc, file));
@RequestPart("modelFile") MultipartFile modelFile,
@RequestPart(name = "splitFile", required = false) MultipartFile splitFile) throws Exception {
return Result.OK(sccService.generate(scc, modelFile, splitFile));
}
/**
* 车型导入模板下载
*/
@GetMapping("/modelTemplateDownload")
@ApiOperation(value = "法规符合性排查流程-车型导入模板下载", notes = "法规符合性排查流程-车型导入模板下载")
@AutoLog(value = "法规符合性排查流程-车型导入模板下载")
public ModelAndView templateDownload() {
// AutoPoi 导出Excel
ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
String title = "车型批量导入模板";
//此处设置的filename无效 ,前端会重更新设置一下
mv.addObject(FILE_NAME, title);
mv.addObject(CLASS, ModelExcelVO.class);
ExportParams exportParams=new ExportParams(title, title);
// 导出xls
exportParams.setType(ExcelType.HSSF);
mv.addObject(PARAMS,exportParams);
mv.addObject(NormalExcelConstants.DATA_LIST, new ArrayList<T>());
return mv;
}
}
@@ -69,6 +69,12 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
@ApiModelProperty(value = "条款号")
private String termNumber;
/**
* 条款标题
*/
@ApiModelProperty(value = "条款标题")
private String termTitle;
/**
* 条款内容
*/
@@ -171,6 +177,12 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
@ApiModelProperty(value = "设计工程师")
private String designEngineer;
/**
* 主表Id
*/
@ApiModelProperty(value = "主表Id")
private String checkId;
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
@@ -1,12 +1,36 @@
package com.jero.modules.activiti.process.standardComplianceCheck.entity.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.jero.common.aspect.annotation.Dict;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Arrays;
import java.util.List;
@Data
public class ModelExcelVO {
@Excel(name = "车型")
private String model;
@Dict(dicCode = "model_status")
@Excel(name = "车型状态", dicCode = "model_status")
private String modelState;
public boolean emptyRowOrNot() {
ModelExcelVO modelExcel = this;
return modelExcel.getModel() == null && modelExcel.getModelState() == null;
}
// 预定义的Excel头部字段
@TableField(exist = false)
public static final List<String> EXPECTED_EXCEL_HEADERS = Arrays.asList(
"车型", "车型状态"
);
public static boolean validateExcelHeaders(List<String> headers) {
return EXPECTED_EXCEL_HEADERS.equals(headers);
}
}
@@ -7,8 +7,6 @@ import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.Proce
import org.activiti.engine.delegate.DelegateTask;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service
@@ -26,5 +24,5 @@ public interface IProcessStandardComplianceCheckService extends IService<Process
void submit(ProcessInfoVO<ProcessSccVO> processInfoVO);
List<ProcessStandardComplianceCheck> generate(ProcessStandardComplianceCheck scc, MultipartFile file);
String generate(ProcessStandardComplianceCheck scc, MultipartFile modelFile, MultipartFile splitFile) throws Exception;
}
@@ -18,21 +18,27 @@ import com.jero.modules.activiti.process.fb.service.IProcessHandleService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheck;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheckDetail;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ModelExcelVO;
import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.ProcessSccVO;
import com.jero.modules.activiti.process.standardComplianceCheck.mapper.ProcessStandardComplianceCheckMapper;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckDetailService;
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.activiti.util.ExcelUtils;
import com.jero.modules.sys.utils.UserUtils;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -67,6 +73,9 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
@Resource
private RuntimeService runtimeService;
@Resource
private IProcessStandardComplianceCheckDetailService sccDetailService;
@Override
public void startProcess(ProcessInfoVO<ProcessSccVO> processInfoVO) {
// 流程Key
@@ -175,11 +184,118 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
@Override
public List<ProcessStandardComplianceCheck> generate(ProcessStandardComplianceCheck scc, MultipartFile file) {
public String generate(ProcessStandardComplianceCheck scc, MultipartFile modelFile, MultipartFile splitFile) throws Exception {
// 文件内容转换
List<ModelExcelVO> modelExcelVOList = this.getModelExcelData(modelFile);
// 新增流程主表数据
this.save(scc);
// 找到拆分数据
List<ProcessStandardComplianceCheckDetail> detailInfoList = this.getSplitData(scc, splitFile);
// 根据主表数据和车型文件生成子表数据并保存
this.saveAllDetailData(modelExcelVOList, detailInfoList);
// 返回主键
return scc.getId();
}
/**
* 循环生成所有数据
*
* @param modelExcelVOList
* @param detailInfoList
*/
private void saveAllDetailData(List<ModelExcelVO> modelExcelVOList, List<ProcessStandardComplianceCheckDetail> detailInfoList) {
List<ProcessStandardComplianceCheckDetail> result = new ArrayList<>();
for (ProcessStandardComplianceCheckDetail detailInfo : detailInfoList) {
for (ModelExcelVO modelExcelVO : modelExcelVOList) {
ProcessStandardComplianceCheckDetail detail = new ProcessStandardComplianceCheckDetail();
detail.setModel(modelExcelVO.getModel());
detail.setModelState(modelExcelVO.getModelState());
detail.setTermNumber(detailInfo.getTermNumber());
detail.setTermTitle(detailInfo.getTermTitle());
detail.setTermContent(detail.getTermContent());
detail.setAuthDept(detailInfo.getAuthDept());
detail.setCheckId(detailInfo.getCheckId());
}
}
sccDetailService.saveBatch(result);
}
/**
* 获取拆分数据
* @param scc
* @param splitFile
* @return
*/
private List<ProcessStandardComplianceCheckDetail> getSplitData(ProcessStandardComplianceCheck scc, MultipartFile splitFile) {
List<ProcessStandardComplianceCheckDetail> result = new ArrayList<>();
boolean newStandard = false;
if (StrUtil.isBlank(scc.getStandardId())) {
newStandard = true;
}
// 是否手动新增标准
if (newStandard) {
// 是否上传分解单
if (splitFile == null) {
ProcessStandardComplianceCheckDetail detail = new ProcessStandardComplianceCheckDetail();
detail.setTermNumber(scc.getStandardNumber());
detail.setTermTitle(scc.getStandardName());
detail.setCheckId(scc.getId());
result.add(detail);
} else {
// TODO 获取数据返回
result.addAll(this.getSplitExcelData(splitFile, scc.getId()));
}
} else {
// TODO 根据标准Id获取所有拆分数据
}
if (result.isEmpty()) {
throw new JeroBootException("拆分单数据为空");
}
return result;
}
/**
* 获取分解单Excel内数据
* @param splitFile
* @return
*/
private List<ProcessStandardComplianceCheckDetail> getSplitExcelData(MultipartFile splitFile, String sccId) {
// TODO
return null;
}
private List<ModelExcelVO> getModelExcelData(MultipartFile file) throws Exception {
// 获取Excel的header
List<String> headers = null;
try {
headers = ExcelUtils.getHeaderFromExcel(file.getInputStream());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new JeroBootException("上传模板错误,请检查后重试。");
}
// 使用Grade的静态方法验证header
boolean isMatched = ModelExcelVO.validateExcelHeaders(headers);
if (!isMatched) {
throw new JeroBootException("上传模板错误,请检查后重试。");
}
ImportParams params = new ImportParams();
params.setTitleRows(1);
params.setHeadRows(1);
params.setNeedSave(true);
List<ModelExcelVO> modelExcelVOList = new ArrayList<>();
try {
modelExcelVOList = ExcelImportUtil.importExcel(file.getInputStream(), ModelExcelVO.class, params);
if (modelExcelVOList.isEmpty()) {
throw new JeroBootException("文件导入失败:数据为空");
}
} catch (Exception e) {
log.error("文件导入异常:" + e.getMessage(), e);
throw new JeroBootException("文件导入失败:" + e.getMessage());
}
return modelExcelVOList;
}
@Override
public ProcessInfoVO<ProcessSccVO> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
@@ -19,6 +19,7 @@ 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;
@@ -79,6 +80,28 @@ public class ExcelUtils {
return baseDate.getTime();
}
/**
* 获取HeadRow的文本内容
* @param is 文件输入流
* @return HeadRow的List
* @throws Exception
*/
public static List<String> getHeaderFromExcel(InputStream is) throws Exception {
List<String> headers = new ArrayList<>();
Workbook workbook = new XSSFWorkbook(is);
Sheet sheet = workbook.getSheetAt(0);
// HeadRow在index 1
for (int rowIndex = 1; rowIndex <= 1; rowIndex++) {
Row row = sheet.getRow(rowIndex);
for (Cell cell : row) {
headers.add(cell.getStringCellValue());
}
}
return headers;
}
/**
* 获取HeadRow的文本内容
*