|
|
|
@ -3,13 +3,16 @@ package com.hnac.hzims.ticket.twoTicket.service.impl;
|
|
|
|
|
import cn.afterturn.easypoi.word.WordExportUtil; |
|
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker; |
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
|
|
|
|
import com.hnac.hzims.common.flow.StartProcessService; |
|
|
|
|
import com.hnac.hzims.common.logs.utils.StringUtils; |
|
|
|
|
import com.hnac.hzims.middle.process.feign.ICompensateProcessClient; |
|
|
|
|
import com.hnac.hzims.middle.process.feign.ProcessDictFeignService; |
|
|
|
|
import com.hnac.hzims.middle.process.to.ProcessWorkFlowResponse; |
|
|
|
|
import com.hnac.hzims.operational.access.entity.OperAccessPlanEntity; |
|
|
|
|
import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; |
|
|
|
|
import com.hnac.hzims.operational.access.feign.IOperAccessTaskClient; |
|
|
|
|
import com.hnac.hzims.operational.feign.IAccessTaskClient; |
|
|
|
@ -51,6 +54,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
|
|
import org.springblade.core.tool.utils.StringUtil; |
|
|
|
|
import org.springblade.flow.core.entity.BladeFlow; |
|
|
|
|
import org.springblade.flow.core.feign.IFlowClient; |
|
|
|
|
import org.springblade.flow.core.utils.FlowUtil; |
|
|
|
|
import org.springblade.message.MessageConstants; |
|
|
|
|
import org.springblade.message.dto.BusinessMessageDTO; |
|
|
|
|
import org.springblade.message.fegin.IMessageClient; |
|
|
|
@ -60,7 +64,9 @@ import org.springblade.system.user.entity.User;
|
|
|
|
|
import org.springblade.system.user.feign.IUserClient; |
|
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
import org.springframework.transaction.PlatformTransactionManager; |
|
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
import org.springframework.transaction.support.TransactionTemplate; |
|
|
|
|
import org.springframework.util.Assert; |
|
|
|
|
|
|
|
|
|
import javax.servlet.ServletOutputStream; |
|
|
|
@ -140,6 +146,7 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
@Value("${hzims.ticket.path.word.templatePath}") |
|
|
|
|
private String templatePath; |
|
|
|
|
|
|
|
|
|
private final ICompensateProcessClient compensateProcessClient; |
|
|
|
|
|
|
|
|
|
private final TicketInfoDangerService ticketInfoDangerService; |
|
|
|
|
|
|
|
|
@ -162,7 +169,7 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
*/ |
|
|
|
|
// @SneakyThrows
|
|
|
|
|
@Override |
|
|
|
|
@Transactional |
|
|
|
|
// @Transactional
|
|
|
|
|
public R startUp(WorkTicketVo workTicketVo) { |
|
|
|
|
log.info("ticket:start:request",JSON.toJSONString(workTicketVo)); |
|
|
|
|
log.info("执行 com.hnac.hzims.ticket.twoTicket.service.impl【startUp】 。。。方法"); |
|
|
|
@ -179,7 +186,8 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
R r = this.startProcess(saveEntity, dictValue,""); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private final PlatformTransactionManager transactionManager; |
|
|
|
|
private final TransactionTemplate transactionTemplate; |
|
|
|
|
@Override |
|
|
|
|
public String saveEntity(String entity) { |
|
|
|
|
WorkTicketVo workTicketVo= JSONObject.parseObject(entity, WorkTicketVo.class); |
|
|
|
@ -208,7 +216,6 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
throw new ServiceException("票据抬头未配置,请您到站点管理配置"); |
|
|
|
|
} |
|
|
|
|
//signage = signage.length() == 2 ? station.getSignage() : station.getSignage().substring(0, 2);
|
|
|
|
|
|
|
|
|
|
workTicketVo.getWorkTicket().setSignage(station.getSignage()); |
|
|
|
|
workTicketVo.getWorkTicket().setSignageCode(station.getCode()); |
|
|
|
|
//2. 获取编码
|
|
|
|
@ -217,6 +224,8 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
if (StringUtils.isBlank(code)) { |
|
|
|
|
throw new ServiceException("服务器异常,请联系管理员"); |
|
|
|
|
} |
|
|
|
|
transactionTemplate.setTransactionManager(transactionManager); |
|
|
|
|
String res = transactionTemplate.execute(status -> { |
|
|
|
|
workTicketVo.getWorkTicket().setCode(code); |
|
|
|
|
//保存工作对象
|
|
|
|
|
log.info("ticket:start:vo",JSON.toJSONString(workTicketVo.getWorkTicket())); |
|
|
|
@ -231,6 +240,8 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
//保存工作任务
|
|
|
|
|
this.saveWorkTicketContentDto(workTicketVo.getWorkTicketContentDtoList(), workTicketVo.getWorkTicket()); |
|
|
|
|
return JSONObject.toJSONString(workTicketVo); |
|
|
|
|
}); |
|
|
|
|
return res; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -245,7 +256,7 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
if (status.intValue() != workTicketVo.getWorkTicket().getFlowStatus().intValue()) { |
|
|
|
|
return R.success("线下流程,开票成功"); |
|
|
|
|
} |
|
|
|
|
Map<String, Object> params = new HashMap<>(4); |
|
|
|
|
Map<String, Object> params = new HashMap<>(); |
|
|
|
|
params.put("workTicketVo", workTicketVo); |
|
|
|
|
//获取当前登录人
|
|
|
|
|
Long userId = AuthUtil.getUserId(); |
|
|
|
@ -255,7 +266,10 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
params.put("principal", "taskUser_" + workTicketVo.getWorkTicket().getPrincipal()); |
|
|
|
|
} |
|
|
|
|
//已开启流程
|
|
|
|
|
R<BladeFlow> processInstanceContainNameByKey = flowClient.startProcessInstanceContainNameByKey(dictValue, String.valueOf(workTicketVo.getWorkTicket().getId()), workTicketVo.getWorkTicket().getWorkContent(), params); |
|
|
|
|
R processInstanceContainNameByKey = compensateProcessClient.startFlow( |
|
|
|
|
AuthUtil.getUserId().toString(),dictValue, |
|
|
|
|
FlowUtil.getBusinessKey("hzims_work_ticket_info",String.valueOf(workTicketVo.getWorkTicket().getId())), |
|
|
|
|
workTicketVo.getWorkTicket().getWorkContent(),params); |
|
|
|
|
log.info("processInstanceContainNameByKey.isSuccess() : {}", processInstanceContainNameByKey.isSuccess()); |
|
|
|
|
if (!processInstanceContainNameByKey.isSuccess()) { |
|
|
|
|
//保存流程开始失败情况
|
|
|
|
@ -272,20 +286,24 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
r.setMsg("流程开启失败,请检查流程和用户权限后重试!"); |
|
|
|
|
r.setData(params); |
|
|
|
|
return r; |
|
|
|
|
}else { |
|
|
|
|
workTicket.setProcessInstanceId(processInstanceContainNameByKey.getData().toString()); |
|
|
|
|
workTicket.setIsNormal(true); |
|
|
|
|
firstWorkTicketService.updateById(workTicket); |
|
|
|
|
return R.success("启动流程成功"); |
|
|
|
|
} |
|
|
|
|
log.info("获取启动流程数据 : {}", processInstanceContainNameByKey); |
|
|
|
|
Duration between = Duration.between(start, Instant.now()); |
|
|
|
|
|
|
|
|
|
log.info("================================================================"); |
|
|
|
|
log.info("耗时: " + (between.getSeconds()) + "秒"); |
|
|
|
|
log.info("耗时: " + (between.toMillis()) + "毫秒"); |
|
|
|
|
log.info("================================================================"); |
|
|
|
|
return R.success("启动流程成功"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public R compensationProcess(String id) { |
|
|
|
|
return null; |
|
|
|
|
WorkTicketInfoEntity entity = firstWorkTicketService.getById(id); |
|
|
|
|
if (ObjectUtils.isNotEmpty(entity)){ |
|
|
|
|
WorkTicketVo workTicketVo = new WorkTicketVo(); |
|
|
|
|
workTicketVo.setWorkTicket(entity); |
|
|
|
|
String dictValue = getDictValue(workTicketVo); |
|
|
|
|
return this.startProcess(JSON.toJSONString(entity), dictValue,entity.getRemark()); |
|
|
|
|
} |
|
|
|
|
return R.fail("找不到对应流程数据,请稍后重试!"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -321,7 +339,6 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
@Override |
|
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
|
public void findPending(ProcessWorkFlowResponse response) { |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
log.info("获取待处理的数据 {}", response); |
|
|
|
|
log.info("获取businessKey: {}", response.getBusinessKey()); |
|
|
|
@ -332,6 +349,10 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
log.info("获取根据handleType区分是用户还是候选组角色: {}", response.getHandleType()); |
|
|
|
|
//json转换表单
|
|
|
|
|
String formData = JSON.toJSONString(response.getVariables()); |
|
|
|
|
if(ObjectUtils.isNotEmpty(response.getCode())&&700==response.getCode()){ |
|
|
|
|
handException(response); |
|
|
|
|
return ; |
|
|
|
|
} |
|
|
|
|
log.info("获取表单的数据:{}", formData); |
|
|
|
|
FristWorkTicketVo fristWorkFlowResponse = null; |
|
|
|
|
try { |
|
|
|
@ -343,6 +364,7 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
//获取表单数据
|
|
|
|
|
WorkTicketVo workTicketVo = fristWorkFlowResponse.getWorkTicketVo(); |
|
|
|
|
WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket(); |
|
|
|
|
workTicket.setIsNormal(true); |
|
|
|
|
//2.流程处理
|
|
|
|
|
String businessKey = response.getBusinessKey(); |
|
|
|
|
WorkTicketInfoEntity workTicketInfo = ticketInfoService.getById(businessKey); |
|
|
|
@ -503,10 +525,33 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
} |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
e.printStackTrace(); |
|
|
|
|
log.error("工作票流转失败,失败原因:{}",e); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private R handException(ProcessWorkFlowResponse processWorkFlowResponse) { |
|
|
|
|
String[] split = processWorkFlowResponse.getBusinessKey().split(":"); |
|
|
|
|
if (StringUtils.isBlank(split[1])){ |
|
|
|
|
log.error("异常消息转换失败,未找到BusinessKey:"+ processWorkFlowResponse); |
|
|
|
|
return R.fail("异常消息处理失败"); |
|
|
|
|
} |
|
|
|
|
WorkTicketInfoEntity workTicketInfoEntity = ticketInfoService.getOne(new LambdaQueryWrapper<WorkTicketInfoEntity>() {{ |
|
|
|
|
eq(WorkTicketInfoEntity::getId, split[1]); |
|
|
|
|
}}); |
|
|
|
|
workTicketInfoEntity.setIsNormal(false); |
|
|
|
|
workTicketInfoEntity.setRemark(JSONObject.toJSONString(processWorkFlowResponse.getVariables())); |
|
|
|
|
workTicketInfoEntity.setTaskName(processWorkFlowResponse.getTaskName()); |
|
|
|
|
workTicketInfoEntity.setProcessInstanceId(processWorkFlowResponse.getTaskId()); |
|
|
|
|
workTicketInfoEntity.setNextStepOperator(""); |
|
|
|
|
boolean flag = ticketInfoService.updateById(workTicketInfoEntity); |
|
|
|
|
if (!flag){ |
|
|
|
|
log.info("异常状态消息保存失败"+ processWorkFlowResponse); |
|
|
|
|
return R.success("消息保存失败"); |
|
|
|
|
} |
|
|
|
|
return R.fail("消息保存成功"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public Boolean offlineTicketFindPending(ProcessWorkFlowResponse response) { |
|
|
|
|
log.info("线下工作票接收到的工作票数据为:{}",JSON.toJSONString(response)); |
|
|
|
@ -515,6 +560,10 @@ public class TicketProcessServiceImpl implements TicketProcessService, StartProc
|
|
|
|
|
log.error("接收到的数据为:{}",JSON.toJSONString(response.getVariables())); |
|
|
|
|
throw new ServiceException("线下工作票处理流程环节接收数据失败,请联系管理员"); |
|
|
|
|
}); |
|
|
|
|
if(ObjectUtils.isNotEmpty(response.getCode())&&700==response.getCode()){ |
|
|
|
|
handException(response); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
WorkTicketVo workTicketVo = ticketResponse.getWorkTicketVo(); |
|
|
|
|
WorkTicketInfoEntity workTicket = workTicketVo.getWorkTicket(); |
|
|
|
|
WorkTicketInfoEntity info = firstWorkTicketService.getById(workTicket.getId()); |
|
|
|
|