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.api.vo.Result;
|
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.jeecg.modules.mdc.entity.MdcEquipment;
|
import org.jeecg.modules.mdc.service.IMdcEquipmentService;
|
import org.jeecg.modules.system.service.IMdcProductionService;
|
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 IWorkStepService workStepService;
|
@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 IMdcEquipmentService iMdcEquipmentService;
|
@Autowired
|
private IMdcProductionService iMdcProductionService;
|
@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){
|
//替换为mdc设备表
|
// DeviceInfo deviceInfo = deviceInfoService.getById(deviceId);
|
MdcEquipment mdcEquipment = iMdcEquipmentService.getById(deviceId);
|
if(mdcEquipment == 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,mdcEquipment.getEquipmentId()));
|
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) {
|
validateParams(stream);
|
DocInfo docInfo = getDocInfo(stream);
|
MdcEquipment mdcEquipment = getMdcEquipment(stream);
|
DocFile docFile = docFileService.getById(stream.getFileId());
|
DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId());
|
if (deviceDoc != null) {
|
handleExistingDeviceDoc(docFile, mdcEquipment, stream.getDeviceId());
|
}
|
deviceDoc = docInfoService.findByAttrAndDocName(docInfo.getDocName(), 4, stream.getDeviceId());
|
if (deviceDoc != null) {
|
handleExistingDeviceDoc(docFile, mdcEquipment, stream.getDeviceId());
|
}
|
List<PermissionStream> permissionStreams = getPermissionStreams(stream);
|
LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
String userId = user.getId();
|
List<String> departIds = getDepartIds(permissionStreams, userId);
|
List<String> userIdList = getUserIdList(departIds);
|
saveBusinessObject(stream, userId);
|
ProcessInstance processInstance = startProcessInstance(stream, userIdList);
|
completeTask(processInstance, userId);
|
return true;
|
}
|
|
@Override
|
@Transactional(rollbackFor = {Exception.class})
|
public ResponseResult applyAssignFileNonActive(AssignFileStream stream) {
|
//权限校验
|
validateParams(stream);
|
DocInfo docInfo = getDocInfo(stream);
|
MdcEquipment mdcEquipment = getMdcEquipment(stream);
|
DocFile docFile = getDocFile(stream);
|
DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 4, stream.getDeviceId());
|
if(deviceDoc != null) {
|
// 删除 备份 覆盖 原有的
|
List<String> strings=iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/"+ mdcEquipment.getEquipmentId(),
|
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());
|
}
|
}*/
|
getPermissionStreams(stream);
|
//插入文档到设备发送文档
|
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);
|
}
|
|
}
|
handleFileTransfer(mdcEquipment, docFile);
|
handleFileProcessing(docFile, mdcEquipment, whether, localFilePath);
|
synchronizedFlagService.updateFlag(2);
|
return new ResponseResult(CommonCode.SUCCESS);
|
}
|
|
@Override
|
public IPage<ActTaskExt> getUndoTaskList(Integer pageNo,Integer pageSize) {
|
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);
|
});
|
//封装Page
|
IPage<ActTaskExt> page = new Page<>(pageNo,pageSize);
|
page.setRecords(extList);
|
return page;
|
}
|
|
@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 Result<?> 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 Result.ok(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);
|
}
|
|
//传参验证
|
private void validateParams(AssignFileStream stream) {
|
if (stream == null) {
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
}
|
if (!ValidateUtil.validateString(stream.getAttributionId()) || !ValidateUtil.validateString(stream.getDocId())
|
|| !ValidateUtil.validateString(stream.getFileId()) || !ValidateUtil.validateString(stream.getAttributionType())) {
|
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);
|
}
|
}
|
|
//获取文件信息
|
private DocInfo getDocInfo(AssignFileStream stream) {
|
DocInfo docInfo = docInfoService.getByDocAttrAndDocId(stream.getDocId(), Integer.parseInt(stream.getAttributionType()), stream.getAttributionId());
|
if (docInfo == null || docInfo.getDocStatus() == 3) {
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR);
|
}
|
return docInfo;
|
}
|
|
//获取文件
|
private void handleExistingDeviceDoc(DocFile docFile, MdcEquipment mdcEquipment, String deviceId) {
|
List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getEquipmentId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/" + mdcEquipment.getEquipmentId(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
if (!copyFileNc) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
} else {
|
DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(deviceId, 4, deviceId);
|
boolean doc = docRelativeService.deleteDocByAttr(deviceDoc.getDocId(), 4, deviceId);
|
if (!doc) {
|
ExceptionCast.cast(ActivitiCode.ACT_DOC_ERROR_DELEVE);
|
}
|
}
|
}
|
}
|
|
//权限校验
|
private List<PermissionStream> getPermissionStreams(AssignFileStream stream) {
|
List<PermissionStream> permissionStreams = new ArrayList<>();
|
if (stream.getAttributionType().equals("5")) {
|
// 工序
|
ProcessStream processStream = processStreamService.getById(stream.getAttributionId());
|
if (processStream == null) {
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
}
|
stream.setProductId(processStream.getProductId());
|
stream.setComponentId(processStream.getComponentId());
|
stream.setPartsId(processStream.getPartsId());
|
stream.setProcessId(processStream.getProcessId());
|
permissionStreams = permissionStreamService
|
.getByProcessId(processStream.getProductId(), processStream.getComponentId(), processStream.getPartsId(), processStream.getProcessId());
|
} else {
|
// 工步
|
WorkStep workStep = workStepService.getById(stream.getAttributionId());
|
if (workStep == null) {
|
ExceptionCast.cast(CommonCode.INVALID_PARAM);
|
}
|
stream.setProductId(workStep.getProductId());
|
stream.setComponentId(workStep.getComponentId());
|
stream.setPartsId(workStep.getPartsId());
|
stream.setProcessId(workStep.getProcessId());
|
stream.setStepId(workStep.getId());
|
permissionStreams = permissionStreamService
|
.getByStepId(workStep.getProductId(), workStep.getComponentId(), workStep.getPartsId(), workStep.getProcessId(), workStep.getId());
|
}
|
if (permissionStreams == null || permissionStreams.isEmpty()) {
|
ExceptionCast.cast(ActivitiCode.ACT_NODE_DEPART_NONE);
|
}
|
return permissionStreams;
|
}
|
|
//获取部门信息
|
//todo 修改
|
private List<String> getDepartIds(List<PermissionStream> permissionStreams, String userId) {
|
Map<String, Department> map = departmentService.getMapByUserId(userId);
|
List<String> departIds = permissionStreams.stream()
|
.filter(item -> map.containsKey(item.getDepartId()))
|
.map(PermissionStream::getDepartId)
|
.collect(Collectors.toList());
|
if (departIds.isEmpty()) {
|
ExceptionCast.cast(ActivitiCode.ACT_USER_NOT_PERM);
|
}
|
return departIds;
|
}
|
|
//获取多个部门的审批人 去重
|
private List<String> getUserIdList(List<String> departIds) {
|
List<String> userIdList = definitionService.getByDepartIds(departIds);
|
if (userIdList == null || userIdList.isEmpty()) {
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE);
|
}
|
return userIdList;
|
}
|
|
//封装数据
|
private void saveBusinessObject(AssignFileStream stream, String userId) {
|
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);
|
}
|
}
|
|
//开始工作流
|
private ProcessInstance startProcessInstance(AssignFileStream stream, List<String> userIdList) {
|
String approveUsers = String.join(",", userIdList);
|
Map<String, Object> avariableMap = new HashMap<>();
|
avariableMap.put(APPLY_VARIABLE, stream.getApplyUserId());
|
avariableMap.put(APPROVE_VARIABLE, approveUsers);
|
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(PROCESS_KEY, stream.getStreamId(), avariableMap);
|
if (processInstance == null) {
|
ExceptionCast.cast(ActivitiCode.ACT_APPROVE_USERS_NONE);
|
}
|
return processInstance;
|
}
|
|
//拾取任务
|
private void completeTask(ProcessInstance processInstance, String userId) {
|
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());
|
}
|
|
//获取设备
|
private MdcEquipment getMdcEquipment(AssignFileStream stream) {
|
MdcEquipment mdcEquipment = iMdcEquipmentService.getById(stream.getDeviceId());
|
if (mdcEquipment == null) {
|
ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE);
|
}
|
return mdcEquipment;
|
}
|
|
//获取文件
|
private DocFile getDocFile(AssignFileStream stream) {
|
DocFile docFile = docFileService.getById(stream.getFileId());
|
if (docFile == null) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
}
|
return docFile;
|
}
|
|
//插入文件传输任务表
|
private void handleFileTransfer(MdcEquipment mdcEquipment, DocFile docFile) {
|
List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
boolean copyFileNc = FileUtilS.copyFileNc(docFile.getFilePath(), path + "/" + mdcEquipment.getEquipmentId(),
|
docFile.getFileEncodeName(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
if (!copyFileNc) {
|
ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR);
|
} else {
|
FileUtilS.deleteZipFromToSend(path + "/" + mdcEquipment.getEquipmentId(),
|
docFile.getFileName(), docFile.getFileSuffix());
|
}
|
} else {
|
throw new RuntimeException("文件传输路径获取失败");
|
}
|
}
|
|
//封装处理文件
|
private void handleFileProcessing(DocFile docFile, MdcEquipment mdcEquipment, String whether, String localFilePath) {
|
if (whether.equals("true") && !docFile.getFileSuffix().equals("zip") && !docFile.getFileSuffix().equals("rar")) {
|
String size = FileUtilS.fileSizeNC(docFile.getFilePath(), docFile.getFileEncodeName());
|
List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId());
|
if (strings != null && !strings.isEmpty()) {
|
String path = StringUtils.join(strings.toArray(), "/");
|
Date dateFirst = DateUtil.getNow();
|
DncPassLog passInfoTxt = new DncPassLog();
|
passInfoTxt.setDayTime(DateUtil.format(dateFirst, DateUtil.STR_YEARMONTHDAY));
|
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);
|
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);
|
} catch (InterruptedException e) {
|
Thread.currentThread().interrupt();
|
}
|
dncPassLogService.save(passInfoNc);
|
|
NcTxtFilePathInfo ncTxt = new NcTxtFilePathInfo();
|
ncTxt.setEquipmentId(mdcEquipment.getEquipmentId());
|
ncTxt.setFileNcName("02A" + DateUtil.format(dateFirst, DateUtil.STR_YEARMONTHDAY) + sequenceNc);
|
ncTxt.setFileTxtName("02A" + DateUtil.format(dateFirst, DateUtil.STR_YEARMONTHDAY) + sequence);
|
ncTxt.setFilePath(path + "/" + mdcEquipment.getEquipmentId() + "/");
|
ncTxt.setOrigFileName(docFile.getFileName());
|
ncTxt.setOrigFileSuffix(docFile.getFileSuffix());
|
ncTxt.setFileAddOrDelete(1);
|
String loFilePath = localFilePath + ncTxt.getFileTxtName() + ".nc";
|
try {
|
String allList = ncTxt.getFileTxtName() + "\n"
|
+ ncTxt.getFileNcName() + "\n"
|
+ ncTxt.getOrigFileName() + "\n"
|
+ ncTxt.getOrigFileSuffix() + "\n"
|
+ ncTxt.getFilePath() + "\n"
|
+ ncTxt.getEquipmentId() + "\n"
|
+ ncTxt.getFileAddOrDelete().toString() + "\n"
|
+ size + "\n";
|
FileUtilS.fileWriterSql(loFilePath, allList);
|
boolean copyFileNc = FileUtilS.copyFileUpName(path + "/" + mdcEquipment.getEquipmentId() + "/send/" +
|
docFile.getFileName(),
|
localFilePath + ncTxt.getFileNcName(),
|
docFile.getFileSuffix(), "NC");
|
if (!copyFileNc) {
|
FileUtilS.deleteNcFile(loFilePath);
|
}
|
} catch (IOException e) {
|
throw new RuntimeException("文件处理失败", e);
|
}
|
}
|
}
|
}
|
|
}
|