package org.springblade.mdm.flow.service;
|
|
import com.alibaba.excel.EasyExcel;
|
import jodd.util.StringUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springblade.core.log.exception.ServiceException;
|
import org.springblade.core.oss.OssTemplate;
|
import org.springblade.core.oss.model.BladeFile;
|
import org.springblade.mdm.basesetting.machine.entity.Machine;
|
import org.springblade.mdm.basesetting.machine.service.MachineService;
|
import org.springblade.mdm.basesetting.producedivision.entity.QinzheFgb;
|
import org.springblade.mdm.basesetting.producedivision.service.QinzheFgbService;
|
import org.springblade.mdm.flow.entity.TaskDispatch;
|
import org.springblade.mdm.flow.excel.TaskAssignExcel;
|
import org.springblade.mdm.flow.excel.TaskAssignImpResultExcel;
|
import org.springblade.mdm.flow.excution.StartDispatcher;
|
import org.springblade.mdm.flow.vo.FlowStartResult;
|
import org.springblade.mdm.flow.vo.TaskAssignVO;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.nio.file.Files;
|
import java.nio.file.Path;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 固化流程服务
|
*/
|
@Slf4j
|
@Service
|
public class TaskImportService {
|
@Autowired
|
private OssTemplate ossTemplate;
|
@Autowired
|
private QinzheFgbService qinzheFgbService;
|
@Autowired
|
private MachineService machineService;
|
@Autowired
|
private TaskDispatchService taskDispatchService;
|
@Autowired
|
private StartDispatcher dispatcher;
|
/**
|
* 启动固化流程
|
*/
|
|
public BladeFile importTask(List<TaskAssignExcel> importTaskList,String oriFilename) throws IOException {
|
List<TaskAssignImpResultExcel> resultExcelList = new ArrayList<>();
|
for(TaskAssignExcel taskAssignExcel:importTaskList){
|
resultExcelList.add(importOne(taskAssignExcel));
|
}
|
Path resultPath = writeResultFile(resultExcelList);
|
BladeFile bfile;
|
try(InputStream ins = Files.newInputStream(resultPath);){
|
String baseName = FilenameUtils.getBaseName(oriFilename);
|
String ext = FilenameUtils.getExtension(oriFilename);
|
String filename = baseName+"-导入结果" + (StringUtils.isNotBlank(ext)?"."+ext:"");
|
bfile = ossTemplate.putFile(filename,ins);
|
}
|
|
return bfile;
|
}
|
|
/**
|
* 处理单条数据
|
* @param excelInput excel的一行数据
|
*/
|
TaskAssignImpResultExcel importOne(TaskAssignExcel excelInput){
|
|
TaskAssignImpResultExcel impResult = checkData(excelInput);
|
if(StringUtils.isNotBlank(impResult.getErrorMsg())){
|
impResult.setErrorMsg(impResult.getErrorMsg());
|
return impResult;
|
}
|
|
TaskAssignVO startVO = new TaskAssignVO();
|
BeanUtils.copyProperties(impResult,startVO);
|
startVO.setTitle(NcNodeService.genProgramName(startVO.getDrawingNo(),startVO.getProcessNo(),startVO.getProcessEdition())+"-计划任务");
|
|
try {
|
boolean isDuplicate = taskDispatchService.checkIsDuplicate(startVO);
|
|
TaskDispatch dispatch = taskDispatchService.saveTask(startVO,isDuplicate);
|
startVO.setCreateUser(dispatch.getCreateUser());
|
if(isDuplicate){
|
impResult.setErrorMsg("重复派工");
|
}else {
|
|
try {
|
FlowStartResult result = dispatcher.start(startVO);
|
dispatch.setStatus(TaskDispatch.STATUS_STARTED);
|
dispatch.setProcessInstanceId(result.getProcessInstanceId());
|
dispatch.setProgramNo(result.getProgramNo());
|
taskDispatchService.updateById(dispatch);
|
impResult.setErrorMsg("导入成功");
|
} catch (Exception e) {
|
log.error("导入任务start失败,零组件号:{}", excelInput.getDrawingNo(), e);
|
dispatch.setStatus(TaskDispatch.STATUS_EXCEPTION);
|
dispatch.setErrMsg(e.getMessage());
|
taskDispatchService.updateById(dispatch);
|
|
impResult.setErrorMsg(e.getMessage());
|
}
|
}
|
}catch(Exception e){
|
log.error("导入失败,零组件号:{}",impResult.getDrawingNo(),e);
|
impResult.setErrorMsg(e.getMessage());
|
}
|
|
return impResult;
|
}
|
|
/**
|
* 检查数据
|
* @param excelLine 一行excel数据
|
*/
|
TaskAssignImpResultExcel checkData(TaskAssignExcel excelLine){
|
TaskAssignImpResultExcel resultExcel= new TaskAssignImpResultExcel();
|
BeanUtils.copyProperties(excelLine,resultExcel);
|
//为空的数据检查
|
List<String> errors = new ArrayList<>();
|
if(StringUtil.isBlank(excelLine.getDrawingNo())){
|
errors.add("零组件号为空");
|
}
|
if(StringUtil.isBlank(excelLine.getProcessNo())){
|
errors.add("工序号为空");
|
}
|
|
if(StringUtil.isBlank(excelLine.getProcessEdition())){
|
errors.add("工序版次为空");
|
}
|
if(StringUtil.isBlank(excelLine.getProcessName())){
|
errors.add("工序名称为空");
|
}
|
|
if(StringUtil.isBlank(excelLine.getMachineCode())){
|
errors.add("机床编号为空");
|
}
|
|
if(!errors.isEmpty()){
|
resultExcel.setErrorMsg(StringUtils.joinWith(",",errors));
|
return resultExcel;
|
}
|
|
try {
|
//ProduceDivision div = produceDivisionService.getByDrawingNoWithQinzhe(excelLine.getDrawingNo());
|
QinzheFgb fgb = qinzheFgbService.getByLjh(excelLine.getDrawingNo());
|
if(fgb == null){
|
errors.add("零组件号不存在");
|
}else{
|
resultExcel.setProductModel(fgb.getCph());
|
}
|
|
}catch(ServiceException se){
|
errors.add(se.getMessage());
|
}
|
Machine machine = machineService.getByCode(excelLine.getMachineCode());
|
if(machine == null){
|
errors.add("机床编号不存在");
|
}else{
|
resultExcel.setMachineMode(machine.getName());
|
}
|
if(!errors.isEmpty()) {
|
resultExcel.setErrorMsg(StringUtils.joinWith(",", errors));
|
}
|
return resultExcel;
|
}
|
|
/**
|
* 将导入结果写入临时文件
|
* @param importTaskList 导入任务列表
|
* @return 文件路径
|
* @throws IOException 写入文件可能倒是io异常
|
*/
|
Path writeResultFile(List<TaskAssignImpResultExcel> importTaskList) throws IOException {
|
Path tempFilePath = Files.createTempFile("impresult",".xlsx");
|
|
String fileName = tempFilePath.toString();
|
EasyExcel.write(fileName, TaskAssignImpResultExcel.class).sheet("导入结果").doWrite(importTaskList);
|
|
return tempFilePath;
|
}
|
|
}
|