package org.jeecg.modules.activiti.service.impl;
|
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.activiti.engine.HistoryService;
|
import org.activiti.engine.RuntimeService;
|
import org.activiti.engine.TaskService;
|
import org.activiti.engine.history.HistoricProcessInstance;
|
import org.activiti.engine.runtime.ProcessInstance;
|
import org.activiti.engine.task.Task;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.modules.activiti.entity.AssignFileStream;
|
import org.jeecg.modules.activiti.entity.ToEquipmentTask;
|
import org.jeecg.modules.activiti.ext.ActTaskExt;
|
import org.jeecg.modules.activiti.ext.AssignFileStreamExt;
|
import org.jeecg.modules.activiti.mapper.AssignFileStreamMapper;
|
import org.jeecg.modules.activiti.request.ApproveBatchRequest;
|
import org.jeecg.modules.activiti.request.AssignFileRequest;
|
import org.jeecg.modules.activiti.request.AssignFileStreamQueryRequest;
|
import org.jeecg.modules.activiti.request.TaskRequest;
|
import org.jeecg.modules.activiti.service.IActivitiDefinitionService;
|
import org.jeecg.modules.activiti.service.IAssignFileStreamService;
|
import org.jeecg.modules.activiti.service.IToEquipmentTaskService;
|
import org.jeecg.modules.dnc.entity.*;
|
import org.jeecg.modules.dnc.exception.ExceptionCast;
|
import org.jeecg.modules.dnc.ext.NcTxtFilePathInfo;
|
import org.jeecg.modules.dnc.response.*;
|
import org.jeecg.modules.dnc.service.*;
|
import org.jeecg.modules.dnc.ucenter.Department;
|
import org.jeecg.modules.dnc.utils.ValidateUtil;
|
import org.jeecg.modules.dnc.utils.date.DateUtil;
|
import org.jeecg.modules.dnc.utils.file.FileUtilS;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.io.IOException;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class AssignFileStreamServiceImpl extends ServiceImpl<AssignFileStreamMapper, AssignFileStream> implements IAssignFileStreamService {
|
private static final String PROCESS_KEY = "assign_nc_to_device";
|
private static final String APPLY_VARIABLE = "apply_user";
|
private static final String APPROVE_VARIABLE = "approve_users";
|
private static final String SEND_CODE = "SEND";
|
|
@Value("${activiti.enable}")
|
private Boolean activeEnable;
|
|
@Autowired
|
private RuntimeService runtimeService;
|
@Autowired
|
private TaskService taskService;
|
@Autowired
|
private IDocInfoService docInfoService;
|
@Autowired
|
private IProcessStreamService processStreamService;
|
@Autowired
|
private IPermissionStreamService permissionStreamService;
|
@Autowired
|
private IDepartmentService departmentService;
|
@Autowired
|
private HistoryService historyService;
|
@Autowired
|
private IDocClassificationService classificationService;
|
@Autowired
|
private IToEquipmentTaskService equipmentTaskService;
|
@Autowired
|
private IDeviceInfoService deviceInfoService;
|
@Autowired
|
private IDocFileService docFileService;
|
@Autowired
|
private IActivitiDefinitionService definitionService;
|
@Autowired
|
private IDocRelativeService docRelativeService;
|
@Autowired
|
private ISynchronizedFlagService synchronizedFlagService;
|
@Autowired
|
private IDeviceGroupService deviceGroupService;
|
@Autowired
|
private IDncPassLogService dncPassLogService;
|
@Autowired
|
private IDeviceCharactersService iDeviceCharactersService;
|
|
@Autowired
|
private StringRedisTemplate redisTemplate;
|
|
@Value("${securedoc.serverIp}")
|
private String serverIp;
|
@Value("${securedoc.serverPort}")
|
private int serverPort;
|
@Value("${securedoc.whether}")
|
private String whether;
|
@Value("${securedoc.localFilePath}")
|
private String localFilePath;
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public ResponseResult applyAssignFile(AssignFileStream stream) {
|
synchronized (this){
|
//判断设备特殊字符
|
String specialChar = getDeviceSpecialChar(stream.getDeviceId(),stream.getFileId());
|
if (StrUtil.isNotEmpty(specialChar)){
|
//抛出特殊字符异常
|
return createSpecialCharErrorResponse(specialChar);
|
}
|
if(activeEnable) {
|
boolean b = applyAssignFileActive(stream);
|
if (b) {
|
return ResponseResult.SUCCESS();
|
} else {
|
return ResponseResult.SUCCESS();
|
}
|
|
}else {
|
return applyAssignFileNonActive(stream);
|
}
|
}
|
}
|
|
/**
|
* 判断设备特殊字符
|
* @param deviceId,fileId
|
* 设备ID,文件ID
|
*/
|
public String getDeviceSpecialChar(String deviceId, String fileId){
|
DeviceInfo deviceInfo = deviceInfoService.getById(deviceId);
|
if(deviceInfo == null)
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
// DocFile docFile = docFileService.getById(fileId);
|
DocInfo docInfo = docInfoService.getOne(new QueryWrapper<DocInfo>().eq("publish_file_id",fileId));
|
if(docInfo == null)
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
List<DeviceCharacters> deviceCharactersList=iDeviceCharactersService.list(
|
new LambdaQueryWrapper<DeviceCharacters>().eq(DeviceCharacters::getDeviceNo,deviceInfo.getDeviceNo()));
|
if (deviceCharactersList.isEmpty()){
|
return "";
|
}else {
|
List<String> specialCharList=deviceCharactersList.stream().map(DeviceCharacters::getCharacters).collect(Collectors.toList());
|
if(!specialCharList.isEmpty()){
|
//对比文件名是否包含特殊字符
|
String fileName=docInfo.getDocName();
|
for(String specialChar:specialCharList){
|
if (fileName.contains(specialChar)){
|
return specialChar;
|
}
|
}
|
}else {
|
return "";
|
}
|
}
|
return "";
|
}
|
|
private ResponseResult createSpecialCharErrorResponse(String specialChar) {
|
return new ResponseResult(new ResultCode() {
|
@Override
|
public boolean success() {
|
return false;
|
}
|
@Override
|
public int code() {
|
return 88881;
|
}
|
@Override
|
public String message() {
|
return "文件名称存在设备特殊字符" + specialChar;
|
}
|
});
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public boolean applyAssignFileActive(AssignFileStream stream) {
|
//校验开始
|
if(stream == null)
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
if(!ValidateUtil.validateString(stream.getProcessId()) || !ValidateUtil.validateString(stream.getDocId())
|
|| !ValidateUtil.validateString(stream.getFileId()))
|
ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_SAVE_ERROR);
|
if(!ValidateUtil.validateString(stream.getDeviceId()))
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
|
DocInfo docInfo = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 5, stream.getProcessId());
|
if(docInfo == null || docInfo.getDocStatus() == 3)
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
|
DeviceInfo deviceInfo = deviceInfoService.getById(stream.getDeviceId());
|
if(deviceInfo == null)
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
if(deviceInfo == null)
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
DocFile docFile = docFileService.getById(stream.getFileId());
|
DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId());
|
if(deviceDoc != null) {
|
/*// 删除 备份 覆盖 原有的
|
List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
if (!copyFileNc) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
} else {
|
//docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId());
|
boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(),4,stream.getDeviceId());
|
if (!doc) {
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
|
}
|
}
|
}*/
|
}
|
deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId());
|
if(deviceDoc != null) {
|
// 删除 备份 覆盖 原有的
|
/* List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
if (!copyFileNc) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
} else {
|
//docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId());
|
boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(),4,stream.getDeviceId());
|
if (!doc) {
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
|
}
|
}
|
}*/
|
}
|
|
ProcessStream processStream = processStreamService.getById(stream.getProcessId());
|
if(processStream == null)
|
ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_SAVE_ERROR);
|
stream.setProductId(processStream.getProductId());
|
stream.setComponentId(processStream.getComponentId());
|
stream.setPartsId(processStream.getPartsId());
|
List<PermissionStream> permissionStreams = null;
|
if(ValidateUtil.validateString(processStream.getPartsId())) {
|
//进入零件
|
permissionStreams = permissionStreamService.getByPartsId(stream.getProductId(), stream.getComponentId(), stream.getPartsId());
|
}else if(ValidateUtil.validateString(processStream.getComponentId())) {
|
//进入部件的处理
|
permissionStreams = permissionStreamService.getByComponentId(stream.getProductId(), stream.getComponentId());
|
}
|
if(permissionStreams == null || permissionStreams.isEmpty())
|
ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
|
List<String> departIds = new ArrayList<>();
|
Map<String, Department> map = departmentService.getMapByUserId(userId);
|
permissionStreams.forEach(item -> {
|
if(map.containsKey(item.getDepartId())) {
|
departIds.add(item.getDepartId());
|
}
|
});
|
if(departIds.isEmpty())
|
ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM);
|
//获取部门审批人
|
List<String> userIdList = definitionService.getByDepartIds(departIds);
|
if(userIdList == null || userIdList.isEmpty())
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE);
|
//校验结束
|
String streamId = IdWorker.getIdStr();
|
stream.setStreamId(streamId);
|
stream.setApplyUserId(userId);
|
stream.setApplyTime(DateUtil.getNow());
|
stream.setStatus(1);
|
//保存流程业务对象
|
boolean b = super.save(stream);
|
if(!b)
|
ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_SAVE_ERROR);
|
//保存流程任务
|
String approveUsers = String.join(",", userIdList);
|
Map<String, Object> avariableMap = new HashMap<>();
|
avariableMap.put(APPLY_VARIABLE, userId);
|
avariableMap.put(APPROVE_VARIABLE, approveUsers);
|
//启动流程
|
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROCESS_KEY, streamId, avariableMap);
|
if(processInstance == null)
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE);
|
//查询当前流程用户流程任务
|
Task task = taskService.createTaskQuery().processDefinitionKey(PROCESS_KEY).taskAssignee(userId)
|
.processInstanceId(processInstance.getId()).singleResult();
|
if(task == null)
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE);
|
//完成流程任务
|
taskService.complete(task.getId());
|
return true;
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public ResponseResult applyAssignFileNonActive(AssignFileStream stream) {
|
if(stream == null)
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
if(!ValidateUtil.validateString(stream.getProcessId()) || !ValidateUtil.validateString(stream.getDocId())
|
|| !ValidateUtil.validateString(stream.getFileId()))
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
if(!ValidateUtil.validateString(stream.getDeviceId()))
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
|
DocInfo docInfo = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 5, stream.getProcessId());
|
if(docInfo == null || docInfo.getDocStatus() == 3)
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
|
|
DeviceInfo deviceInfo = deviceInfoService.getById(stream.getDeviceId());
|
if(deviceInfo == null)
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
DocFile docFile = docFileService.getById(stream.getFileId());
|
if(docFile == null)
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId());
|
if(deviceDoc != null) {
|
// 删除 备份 覆盖 原有的
|
List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
}
|
}
|
|
/*deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId());
|
if(deviceDoc != null) {
|
// 删除 备份 覆盖 原有的
|
List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
}
|
}*/
|
ProcessStream processStream = processStreamService.getById(stream.getProcessId());
|
if(processStream == null)
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
stream.setProductId(processStream.getProductId());
|
stream.setComponentId(processStream.getComponentId());
|
stream.setPartsId(processStream.getPartsId());
|
List<PermissionStream> permissionStreams = null;
|
if(ValidateUtil.validateString(processStream.getPartsId())) {
|
//进入零件
|
permissionStreams = permissionStreamService.getByPartsId(stream.getProductId(), stream.getComponentId(), stream.getPartsId());
|
}else if(ValidateUtil.validateString(processStream.getComponentId())) {
|
//进入部件的处理
|
permissionStreams = permissionStreamService.getByComponentId(stream.getProductId(), stream.getComponentId());
|
}
|
if(permissionStreams == null || permissionStreams.isEmpty())
|
ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
|
List<String> departIds = new ArrayList<>();
|
Map<String, Department> map = departmentService.getMapByUserId(userId);
|
permissionStreams.forEach(item -> {
|
if(map.containsKey(item.getDepartId())) {
|
departIds.add(item.getDepartId());
|
}
|
});
|
if(departIds.isEmpty())
|
ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM);
|
//deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId());
|
/*if(deviceDoc != null)
|
ExceptionCast.cast(ActivitiCode.ACT_DEVICE_DOC_ERROR);*/
|
//插入文档到设备发送文档
|
if(deviceDoc == null) {
|
DocClassification classification = classificationService.getByCode(SEND_CODE);
|
if(classification == null)
|
ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR);
|
|
DocRelative docRelative = new DocRelative();
|
docRelative.setDocId(docInfo.getDocId());
|
docRelative.setClassificationId(classification.getClassificationId());
|
docRelative.setAttributionType(4);
|
docRelative.setAttributionId(stream.getDeviceId());
|
boolean b = docRelativeService.save(docRelative);
|
if(!b) {
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
}
|
|
}
|
|
//TODO
|
//插入文件传输任务表
|
List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileEncodeName(),
|
docFile.getFileName(),docFile.getFileSuffix());
|
if (!copyFileNc) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
} else {
|
FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(),docFile.getFileSuffix());
|
|
}
|
} else {
|
return new ResponseResult(CommonCode.FAIL);
|
}
|
String size = FileUtilS.fileSizeNC(docFile.getFilePath(),docFile.getFileEncodeName());
|
if (whether.equals("true") && !docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().equals("rar") ) {
|
//处理文件 记录并上报
|
//1、 判断端口是否能够访问 文件路径加
|
/*boolean btelnetPort = TelnetUtil.telnetPort(serverIp,serverPort,10);
|
if (!btelnetPort) {
|
ExceptionCast.cast(ActivitiCode.ACT_DEVICE_DOC_FILELABLE);
|
}*/
|
DncPassLog passInfoTxt = new DncPassLog();
|
|
String path = StringUtils.join(strings.toArray(), "/");
|
Date dateFirst = DateUtil.getNow();
|
passInfoTxt.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY));
|
/*查询最后一条记录*/
|
//休眠 500毫秒
|
DncPassLog dncPassLog = dncPassLogService.findDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY));
|
Integer fileTxt = 0, fileNc =0;
|
if (dncPassLog !=null) {
|
fileTxt = dncPassLog.getSequenceNumber() + 1;
|
fileNc = fileTxt + 1;
|
} else {
|
fileTxt = 1;
|
fileNc = fileTxt + 1;
|
}
|
//处理文件名称 文件路径
|
String sequence = String.format("%06d",fileTxt);
|
String sequenceNc = String.format("%06d",fileNc);
|
passInfoTxt.setSequenceNumber(fileTxt);
|
passInfoTxt.setSequenceOrder(sequence);
|
passInfoTxt.setCreateTime(dateFirst);
|
System.out.println(DateUtil.format(dateFirst,DateUtil.STR_DATE_TIME));
|
passInfoTxt.setPassType("02");
|
dncPassLogService.save(passInfoTxt);
|
|
DncPassLog passInfoNc = new DncPassLog();
|
passInfoNc.setSequenceNumber(fileNc);
|
passInfoNc.setSequenceOrder(sequenceNc);
|
passInfoNc.setDayTime(DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY));
|
passInfoNc.setPassType("02");
|
passInfoNc.setPassName(docFile.getFileName());
|
try {
|
Thread.sleep(1000);
|
Date date = new Date();
|
passInfoNc.setCreateTime(date);
|
System.out.println(DateUtil.format(date,DateUtil.STR_DATE_TIME));
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
|
dncPassLogService.save(passInfoNc);
|
|
NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo();
|
ncTxt.setEquipmentId(deviceInfo.getDeviceNo());
|
ncTxt.setFileNcName("02A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequenceNc);
|
ncTxt.setFileTxtName("02A"+DateUtil.format(dateFirst,DateUtil.STR_YEARMONTHDAY)+sequence);
|
ncTxt.setFilePath(path + "/"+ deviceInfo.getDeviceNo() + "/" );
|
ncTxt.setOrigFileName(docFile.getFileName());
|
ncTxt.setOrigFileSuffix(docFile.getFileSuffix());
|
ncTxt.setFileAddOrDelete(1);
|
String loFilePath = localFilePath + ncTxt.getFileTxtName() + ".nc";
|
// String loFilePath = localFilePath + "\\" + ncTxt.getFileTxtName() + ".nc";
|
try {
|
String allList = new String();
|
allList=(ncTxt.getFileTxtName()+"\n");
|
allList+=(ncTxt.getFileNcName()+"\n");
|
allList+=(ncTxt.getOrigFileName()+"\n");
|
allList+=(ncTxt.getOrigFileSuffix()+"\n");
|
allList+=(ncTxt.getFilePath()+"\n");
|
allList+=(ncTxt.getEquipmentId()+"\n");
|
allList+=(ncTxt.getFileAddOrDelete().toString()+"\n");
|
// 文件大小字节 第二行 工控网进行文件分析
|
allList+= (size+"\n");
|
|
FileUtilS.fileWriterSql(loFilePath,allList);
|
//文件解析重新规划
|
//添加文件名字,第一行,
|
|
|
/*
|
boolean copyFileNc = FileUtilS.copyFileNcIntegration(path + "/"+ deviceInfo.getDeviceNo() +"/send/" +
|
docFile.getFileName(),
|
localFilePath + "\\" + ncTxt.getFileNcName(),
|
docFile.getFileSuffix());
|
*/
|
boolean copyFileNc = FileUtilS.copyFileUpName(path + "/"+ deviceInfo.getDeviceNo() +"/send/" +
|
docFile.getFileName(),
|
localFilePath + ncTxt.getFileNcName(),
|
// localFilePath + "\\" + ncTxt.getFileNcName(),
|
docFile.getFileSuffix(),"NC");
|
if (!copyFileNc) {
|
FileUtilS.deleteNcFile(loFilePath);
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
synchronizedFlagService.updateFlag(2);
|
return new ResponseResult(CommonCode.SUCCESS);
|
}
|
|
@Override
|
public List<ActTaskExt> getUndoTaskList() {
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
return null;
|
List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned(userId).list();
|
if(list == null || list.isEmpty())
|
return null;
|
List<ActTaskExt> extList = new ArrayList<>();
|
list.forEach(item -> {
|
ActTaskExt ext = new ActTaskExt();
|
ext.instanceOfTask(item);
|
|
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(
|
item.getProcessInstanceId()).singleResult();
|
if(historicProcessInstance == null || !ValidateUtil.validateString(historicProcessInstance.getBusinessKey())) {
|
ExceptionCast.cast(ActivitiCode.ACT_PROC_INST_ERROR);
|
}
|
ext.setBusinessKey(historicProcessInstance.getBusinessKey());
|
AssignFileStreamExt streamDetail = getAssignFileStreamDetail(historicProcessInstance.getBusinessKey());
|
if(streamDetail == null)
|
ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR);
|
ext.setAssignFileStream(streamDetail);
|
extList.add(ext);
|
});
|
return extList;
|
}
|
|
@Override
|
public AssignFileStreamExt getAssignFileStreamDetail(String streamId) {
|
if(!ValidateUtil.validateString(streamId))
|
return null;
|
return super.getBaseMapper().getAssignFileStreamDetail(streamId);
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public boolean approveAssignFile(String taskId, String streamId, AssignFileStream stream) {
|
if(!ValidateUtil.validateString(taskId) || !ValidateUtil.validateString(streamId) || stream == null)
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
|
if(!ValidateUtil.validateInteger(stream.getStatus()))
|
ExceptionCast.cast(ActivitiCode.ACT_STATUS_ERROR);
|
AssignFileStream en = super.getById(streamId);
|
if(en == null)
|
ExceptionCast.cast(ActivitiCode.ACT_BUSINESS_DETAIL_ERROR);
|
Task task = taskService.createTaskQuery().taskId(taskId).taskCandidateOrAssigned(userId).singleResult();
|
if(task == null)
|
ExceptionCast.cast(ActivitiCode.ACT_TASK_ERROR);
|
if(!ValidateUtil.validateString(task.getAssignee())) {
|
//拾取任务
|
taskService.claim(task.getId(), userId);
|
//完成任务
|
taskService.complete(task.getId());
|
}else {
|
//完成任务
|
taskService.complete(task.getId());
|
}
|
//更新对象封装
|
AssignFileStream up = new AssignFileStream();
|
up.setApproveContent(stream.getApproveContent());
|
up.setStatus(stream.getStatus());
|
up.setApproveUserId(userId);
|
up.setApproveTime(DateUtil.getNow());
|
up.setStreamId(streamId);
|
boolean b = super.updateById(up);
|
if(!b)
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
if(up.getStatus() == 2) {
|
//同意操作
|
DocInfo docInfo = docInfoService.getByDocAttrAndDocId(en.getDocId(), 5, en.getProcessId());
|
if(docInfo == null || docInfo.getDocStatus() == 3)
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
|
DeviceInfo deviceInfo = deviceInfoService.getById(en.getDeviceId());
|
if(deviceInfo == null)
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
DocFile docFile = docFileService.getById(en.getFileId());
|
if(docFile == null)
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),4, en.getDeviceId());
|
if(deviceDoc != null) {
|
// 删除 备份 覆盖 原有的
|
List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
/* //docInfoService.getBaseMapper().deleteById(deviceDoc.getDocId());
|
boolean doc = docRelativeService.deleteCopyDocByAttrNext(deviceDoc.getDocId(),4,stream.getDeviceId());
|
if (!doc) {
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
|
}*/
|
|
}
|
} else {
|
//插入文档到设备发送文档
|
DocClassification classification = classificationService.getByCode(SEND_CODE);
|
if(classification == null)
|
ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR);
|
|
DocRelative docRelative = new DocRelative();
|
docRelative.setDocId(docInfo.getDocId());
|
docRelative.setClassificationId(classification.getClassificationId());
|
docRelative.setAttributionType(4);
|
docRelative.setAttributionId(en.getDeviceId());
|
b = docRelativeService.save(docRelative);
|
}
|
if(!b)
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
if (deviceInfo != null) {
|
List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(),path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileEncodeName(),
|
docFile.getFileName(),docFile.getFileSuffix());
|
if (!copyFileNc) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
} else {
|
FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(),
|
docFile.getFileName(),docFile.getFileSuffix());
|
|
}
|
}
|
|
}
|
return synchronizedFlagService.updateFlag(1);
|
}else if(up.getStatus() == 3) {
|
//拒绝操作 什么也不做
|
return true;
|
}else {
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
}
|
return false;
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public boolean applyBatchAssignFile(AssignFileRequest assignFileRequest) {
|
if(assignFileRequest == null)
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
String[] deviceIds = assignFileRequest.getDeviceIds();
|
if(deviceIds == null || deviceIds.length < 1)
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
AssignFileStream stream;
|
for(String id : deviceIds) {
|
stream = new AssignFileStream();
|
stream.setProcessId(assignFileRequest.getProcessId());
|
stream.setDocId(assignFileRequest.getDocId());
|
stream.setFileId(assignFileRequest.getFileId());
|
stream.setApplyReason(assignFileRequest.getApplyReason());
|
stream.setDeviceId(id);
|
ResponseResult b = applyAssignFile(stream);
|
if(!b.isSuccess())
|
ExceptionCast.cast(ActivitiCode.ACT_APPLY_ERROR);
|
}
|
return true;
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public boolean approveBatchAssignFile(ApproveBatchRequest approveBatchRequest) {
|
if(approveBatchRequest == null)
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
List<TaskRequest> list = approveBatchRequest.getTaskArr();
|
if(list == null || list.isEmpty())
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
list.forEach(item -> {
|
AssignFileStream stream = new AssignFileStream();
|
stream.setApproveContent(approveBatchRequest.getApproveContent());
|
stream.setStatus(approveBatchRequest.getStatus());
|
boolean b = approveAssignFile(item.getId(), item.getBusinessKey(), stream);
|
if(!b)
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
});
|
return synchronizedFlagService.updateFlag(1);
|
}
|
|
@Override
|
public QueryPageResponseResult<AssignFileStreamExt> findPageList(int page, int size, AssignFileStreamQueryRequest request) {
|
if(page < 1 || size < 1) {
|
ExceptionCast.cast(CommonCode.INVALID_PAGE);
|
}
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
|
LambdaQueryWrapper<AssignFileStreamExt> lambdaQueryWrapper = Wrappers.lambdaQuery();
|
lambdaQueryWrapper.eq(AssignFileStreamExt::getApproveUserId, userId);
|
lambdaQueryWrapper.orderByDesc(AssignFileStreamExt::getApproveTime);
|
IPage<AssignFileStreamExt> pageData = new Page<>(page, size);
|
if(request != null) {
|
if(ValidateUtil.validateString(request.getAscStr())) {
|
String[] ascArr = request.getAscStr().split(",");
|
// ((Page<AssignFileStreamExt>) pageData).setAsc(ascArr);
|
}
|
if(ValidateUtil.validateString(request.getDescStr())) {
|
String[] descStr = request.getDescStr().split(",");
|
// ((Page<AssignFileStreamExt>) pageData).setDesc(descStr);
|
}
|
}
|
IPage<AssignFileStreamExt> streamExtIPage = super.getBaseMapper().findByPage(pageData, lambdaQueryWrapper);
|
return new QueryPageResponseResult<>(CommonCode.SUCCESS, streamExtIPage);
|
}
|
|
@Override
|
public QueryPageResponseResult<AssignFileStreamExt> findPageListByDocId(int page, int size, String docId) {
|
if(page < 1 || size < 1) {
|
ExceptionCast.cast(CommonCode.INVALID_PAGE);
|
}
|
if(!ValidateUtil.validateString(docId))
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ID_NONE);
|
QueryWrapper<AssignFileStreamExt> queryWrapper = Wrappers.query();
|
queryWrapper.eq("a.doc_id", docId);
|
queryWrapper.orderByDesc("approve_time");
|
IPage<AssignFileStreamExt> pageData = new Page<>(page, size);
|
IPage<AssignFileStreamExt> streamExtIPage = super.getBaseMapper().findByPage(pageData, queryWrapper);
|
return new QueryPageResponseResult<>(CommonCode.SUCCESS, streamExtIPage);
|
}
|
|
@Override
|
public Boolean getActiveEnable() {
|
if(activeEnable != null) {
|
return activeEnable;
|
}
|
return false;
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public boolean transferDocFile(String pnCode, String deviceNo) {
|
List<ProcessStream> streams = processStreamService.validateDeviceProcessInfo(pnCode, deviceNo);
|
DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo);
|
if(deviceInfo == null)
|
ExceptionCast.cast(DeviceCode.DEVICE_NOT_EXIST);
|
//删除原来设备下的所有文档
|
docRelativeService.deleteByDocAttr(4, deviceInfo.getDeviceId());
|
List<DocInfo> docInfoList = docInfoService.getByProcessIds(streams);
|
if(docInfoList == null || docInfoList.isEmpty())
|
ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
if(!ValidateUtil.validateString(userId))
|
ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST);
|
for(DocInfo docInfo : docInfoList) {
|
DocFile docFile = docFileService.getById(docInfo.getPublishFileId());
|
if(docFile == null)
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
//插入文档到设备发送文档
|
DocClassification classification = classificationService.getByCode(SEND_CODE);
|
if(classification == null)
|
ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR);
|
DocRelative docRelative = new DocRelative();
|
docRelative.setDocId(docInfo.getDocId());
|
docRelative.setClassificationId(classification.getClassificationId());
|
docRelative.setAttributionType(4);
|
docRelative.setAttributionId(deviceInfo.getDeviceId());
|
boolean b = docRelativeService.save(docRelative);
|
if(!b)
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
//插入文件传输任务表
|
ToEquipmentTask equipmentTask = new ToEquipmentTask();
|
//不能直接从doc中拿fileId 和version 可能会存在斌更
|
//equipmentTask.setFileId(docInfo.getPublishFileId());
|
//equipmentTask.setDocVersion(docInfo.getPublishVersion());
|
equipmentTask.setDocId(docInfo.getDocId());
|
equipmentTask.setSyncFlag(1);
|
equipmentTask.setDeviceNo(deviceInfo.getDeviceNo());
|
equipmentTask.setDeviceId(deviceInfo.getDeviceId());
|
equipmentTask.setDepartId(deviceInfo.getDepartId());
|
//文件相关信息
|
equipmentTask.setFileId(docFile.getFileId());
|
equipmentTask.setDocVersion(docFile.getDocVersion());
|
equipmentTask.setFileName(docInfo.getDocName());
|
equipmentTask.setFileEncodeName(docFile.getFileEncodeName());
|
equipmentTask.setFilePath(docFile.getFilePath());
|
equipmentTask.setFileSuffix(docFile.getFileSuffix());
|
equipmentTask.setFileSize(docFile.getFileSize());
|
b = equipmentTaskService.save(equipmentTask);
|
if(!b) {
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR);
|
}
|
}
|
return synchronizedFlagService.updateFlag(1);
|
}
|
}
|