feat: 法规符合性排查流程-生成1
This commit is contained in:
+31
-2
@@ -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.service.IProcessHandleService;
|
||||||
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
|
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.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.entity.vo.ProcessSccVO;
|
||||||
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
|
import com.jero.modules.activiti.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.poi.ss.formula.functions.T;
|
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.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 流程-测试流程(process_demo)表控制层
|
* 流程-测试流程(process_demo)表控制层
|
||||||
@@ -113,8 +120,30 @@ public class ProcessStandardComplianceCheckController extends JeroController<Pro
|
|||||||
@PostMapping("/generate")
|
@PostMapping("/generate")
|
||||||
@Translation
|
@Translation
|
||||||
public Result<?> generate(@RequestPart("scc") ProcessStandardComplianceCheck scc,
|
public Result<?> generate(@RequestPart("scc") ProcessStandardComplianceCheck scc,
|
||||||
@RequestPart("file") MultipartFile file) {
|
@RequestPart("modelFile") MultipartFile modelFile,
|
||||||
return Result.OK(sccService.generate(scc, file));
|
@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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -69,6 +69,12 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
|
|||||||
@ApiModelProperty(value = "条款号")
|
@ApiModelProperty(value = "条款号")
|
||||||
private String termNumber;
|
private String termNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 条款标题
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "条款标题")
|
||||||
|
private String termTitle;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 条款内容
|
* 条款内容
|
||||||
*/
|
*/
|
||||||
@@ -171,6 +177,12 @@ public class ProcessStandardComplianceCheckDetail implements Serializable {
|
|||||||
@ApiModelProperty(value = "设计工程师")
|
@ApiModelProperty(value = "设计工程师")
|
||||||
private String designEngineer;
|
private String designEngineer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主表Id
|
||||||
|
*/
|
||||||
|
@ApiModelProperty(value = "主表Id")
|
||||||
|
private String checkId;
|
||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
}
|
}
|
||||||
+24
@@ -1,12 +1,36 @@
|
|||||||
package com.jero.modules.activiti.process.standardComplianceCheck.entity.vo;
|
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 lombok.Data;
|
||||||
|
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ModelExcelVO {
|
public class ModelExcelVO {
|
||||||
|
|
||||||
|
@Excel(name = "车型")
|
||||||
private String model;
|
private String model;
|
||||||
|
|
||||||
|
|
||||||
|
@Dict(dicCode = "model_status")
|
||||||
|
@Excel(name = "车型状态", dicCode = "model_status")
|
||||||
private String modelState;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -7,8 +7,6 @@ import com.jero.modules.activiti.process.standardComplianceCheck.entity.vo.Proce
|
|||||||
import org.activiti.engine.delegate.DelegateTask;
|
import org.activiti.engine.delegate.DelegateTask;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author ThinkBook
|
* @author ThinkBook
|
||||||
* @description 针对表【process_standard_compliance_check】的数据库操作Service
|
* @description 针对表【process_standard_compliance_check】的数据库操作Service
|
||||||
@@ -26,5 +24,5 @@ public interface IProcessStandardComplianceCheckService extends IService<Process
|
|||||||
|
|
||||||
void submit(ProcessInfoVO<ProcessSccVO> processInfoVO);
|
void submit(ProcessInfoVO<ProcessSccVO> processInfoVO);
|
||||||
|
|
||||||
List<ProcessStandardComplianceCheck> generate(ProcessStandardComplianceCheck scc, MultipartFile file);
|
String generate(ProcessStandardComplianceCheck scc, MultipartFile modelFile, MultipartFile splitFile) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
+117
-1
@@ -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.fb.vo.ProcessInfoVO;
|
||||||
import com.jero.modules.activiti.process.standardComplianceCheck.entity.ProcessStandardComplianceCheck;
|
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.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.entity.vo.ProcessSccVO;
|
||||||
import com.jero.modules.activiti.process.standardComplianceCheck.mapper.ProcessStandardComplianceCheckMapper;
|
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.process.standardComplianceCheck.service.IProcessStandardComplianceCheckService;
|
||||||
import com.jero.modules.activiti.service.ProcessAllService;
|
import com.jero.modules.activiti.service.ProcessAllService;
|
||||||
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
import com.jero.modules.activiti.service.ProcessNodeLinkService;
|
||||||
|
import com.jero.modules.activiti.util.ExcelUtils;
|
||||||
import com.jero.modules.sys.utils.UserUtils;
|
import com.jero.modules.sys.utils.UserUtils;
|
||||||
import org.activiti.engine.RuntimeService;
|
import org.activiti.engine.RuntimeService;
|
||||||
import org.activiti.engine.TaskService;
|
import org.activiti.engine.TaskService;
|
||||||
import org.activiti.engine.delegate.DelegateTask;
|
import org.activiti.engine.delegate.DelegateTask;
|
||||||
import org.activiti.engine.runtime.ProcessInstance;
|
import org.activiti.engine.runtime.ProcessInstance;
|
||||||
import org.activiti.engine.task.Task;
|
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.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -67,6 +73,9 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
|||||||
@Resource
|
@Resource
|
||||||
private RuntimeService runtimeService;
|
private RuntimeService runtimeService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private IProcessStandardComplianceCheckDetailService sccDetailService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startProcess(ProcessInfoVO<ProcessSccVO> processInfoVO) {
|
public void startProcess(ProcessInfoVO<ProcessSccVO> processInfoVO) {
|
||||||
// 流程Key
|
// 流程Key
|
||||||
@@ -175,11 +184,118 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@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;
|
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
|
@Override
|
||||||
public ProcessInfoVO<ProcessSccVO> getHandleData(String taskId) {
|
public ProcessInfoVO<ProcessSccVO> getHandleData(String taskId) {
|
||||||
if (!actFlowCommonService.taskExists(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.Row;
|
||||||
import org.apache.poi.ss.usermodel.Sheet;
|
import org.apache.poi.ss.usermodel.Sheet;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
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.ExcelExportUtil;
|
||||||
import org.jeecgframework.poi.excel.annotation.Excel;
|
import org.jeecgframework.poi.excel.annotation.Excel;
|
||||||
import org.jeecgframework.poi.excel.entity.ExportParams;
|
import org.jeecgframework.poi.excel.entity.ExportParams;
|
||||||
@@ -79,6 +80,28 @@ public class ExcelUtils {
|
|||||||
return baseDate.getTime();
|
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的文本内容
|
* 获取HeadRow的文本内容
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user