|
@@ -0,0 +1,275 @@
|
|
|
|
|
+package cn.start.tz.module.pressure2.service.tasksign;
|
|
|
|
|
+
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
+import cn.start.tz.framework.common.exception.ErrorCode;
|
|
|
|
|
+import cn.start.tz.framework.common.exception.ServiceException;
|
|
|
|
|
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
|
|
|
|
|
+import cn.start.tz.module.infra.api.file.FileApi;
|
|
|
|
|
+import cn.start.tz.module.infra.api.sign.SignApi;
|
|
|
|
|
+import cn.start.tz.module.infra.api.sign.dto.CntSignReqDTO;
|
|
|
|
|
+import cn.start.tz.module.infra.api.sign.dto.CntSignResponseRepsDTO;
|
|
|
|
|
+import cn.start.tz.module.infra.api.sign.dto.QrCodeValuesDTO;
|
|
|
|
|
+import cn.start.tz.module.infra.api.sign.dto.SignValuesDTO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.MajorIssuesSubmitVO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.controller.admin.pipetaskorderinput.vo.PipeTaskOrderInputPrintReqVO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.OrderFromPdfReqVO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.TaskOrderPushReqVO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskordersignfile.BoilerTaskOrderSignFileDO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.boilertaskorder.BoilerTaskOrderMapper;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.boilertaskorderitemreport.BoilerTaskOrderItemReportMapper;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.orderreport.OrderReportMapper;
|
|
|
|
|
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemreport.PipeTaskOrderItemReportMapper;
|
|
|
|
|
+import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
|
|
|
|
|
+import cn.start.tz.module.pressure2.service.boilertaskordersignfile.BoilerTaskOrderSignFileService;
|
|
|
|
|
+import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
|
|
|
|
|
+import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
|
|
|
|
|
+import cn.start.tz.module.system.api.user.AdminUserApi;
|
|
|
|
|
+import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
|
|
+import cn.start.tz.module.system.enums.common.IsYesOrNoEnum;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
|
+import jakarta.annotation.Resource;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
+import java.io.ByteArrayOutputStream;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Objects;
|
|
|
|
|
+
|
|
|
|
|
+import static cn.start.tz.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
|
+import static cn.start.tz.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
|
|
|
|
+import static cn.start.tz.module.pressure.enums.ErrorCodeConstants.TASK_ORDER_NOT_EXISTS;
|
|
|
|
|
+import static java.time.LocalDate.now;
|
|
|
|
|
+
|
|
|
|
|
+@Service
|
|
|
|
|
+@Slf4j
|
|
|
|
|
+public class TaskSignServiceImpl implements TaskSignService {
|
|
|
|
|
+
|
|
|
|
|
+ @Value("${tz.env.name}")
|
|
|
|
|
+ private String env;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private BoilerTaskOrderMapper boilerTaskOrderMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private BoilerTaskOrderItemReportMapper boilerTaskOrderItemReportMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private PipeTaskOrderItemReportMapper pipeTaskOrderItemReportMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private PipeTaskOrderInputService pipeTaskOrderInputService;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private OrderReportMapper orderReportMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private OrderReportService orderReportService;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private FileApi fileApi;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private SignApi signApi;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private AdminUserApi adminUserApi;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private BoilerTaskOrderService boilerTaskOrderService;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private BoilerTaskOrderSignFileService boilerTaskOrderSignFileService;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional
|
|
|
|
|
+ public void orderSignSubmit(TaskOrderPushReqVO reqVO) throws Exception {
|
|
|
|
|
+ // 根据id查询任务单
|
|
|
|
|
+ BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(reqVO.getId());
|
|
|
|
|
+ // 如果任务单不存在,抛出异常
|
|
|
|
|
+ if (taskOrderDO == null) {
|
|
|
|
|
+ throw new ServiceException(404, "任务单不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ BoilerTaskOrderSignFileDO taskOrderSignFileDO = boilerTaskOrderSignFileService
|
|
|
|
|
+ .selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), reqVO.getBusinessType(), reqVO.getOrderItemId(), reqVO.getSecurityCheckId());
|
|
|
|
|
+ //存储签名后pdfUrl
|
|
|
|
|
+ OrderFromPdfReqVO orderFromPdfReqVO = new OrderFromPdfReqVO();
|
|
|
|
|
+ orderFromPdfReqVO.setDataStr("1");
|
|
|
|
|
+ orderFromPdfReqVO.setTemplateUrl("1");
|
|
|
|
|
+ orderFromPdfReqVO.setOrderId(taskOrderDO.getId());
|
|
|
|
|
+ orderFromPdfReqVO.setFileType(200);
|
|
|
|
|
+ orderFromPdfReqVO.setBusinessType(reqVO.getBusinessType());
|
|
|
|
|
+ orderFromPdfReqVO.setOrderItemId(reqVO.getOrderItemId());
|
|
|
|
|
+
|
|
|
|
|
+ if (ObjectUtil.isNotNull(taskOrderSignFileDO)) {
|
|
|
|
|
+ taskOrderSignFileDO.setReceiver(reqVO.getReceiver());
|
|
|
|
|
+ taskOrderSignFileDO.setReceiverPhone(reqVO.getReceiverPhone());
|
|
|
|
|
+ taskOrderSignFileDO.setIsPush(IsYesOrNoEnum.UNKNOWN.getKey());
|
|
|
|
|
+ taskOrderSignFileDO.setPushDateTime(LocalDateTime.now());
|
|
|
|
|
+ taskOrderSignFileDO.setIsSignature(IsYesOrNoEnum.YES.getKey());
|
|
|
|
|
+ taskOrderSignFileDO.setSignUrl(reqVO.getSignUrl());
|
|
|
|
|
+ taskOrderSignFileDO.setSignDate(now());
|
|
|
|
|
+
|
|
|
|
|
+ boilerTaskOrderSignFileService.updateById(taskOrderSignFileDO);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ taskOrderSignFileDO = new BoilerTaskOrderSignFileDO();
|
|
|
|
|
+ taskOrderSignFileDO.setOrderId(taskOrderDO.getId());
|
|
|
|
|
+ taskOrderSignFileDO.setOrderItemId(reqVO.getOrderItemId());
|
|
|
|
|
+ taskOrderSignFileDO.setBusinessType(reqVO.getBusinessType());
|
|
|
|
|
+ taskOrderSignFileDO.setReceiver(reqVO.getReceiver());
|
|
|
|
|
+ taskOrderSignFileDO.setReceiverPhone(reqVO.getReceiverPhone());
|
|
|
|
|
+ taskOrderSignFileDO.setIsPush(IsYesOrNoEnum.UNKNOWN.getKey());
|
|
|
|
|
+ taskOrderSignFileDO.setPushDateTime(LocalDateTime.now());
|
|
|
|
|
+ taskOrderSignFileDO.setIsSignature(IsYesOrNoEnum.YES.getKey());
|
|
|
|
|
+ taskOrderSignFileDO.setSignUrl(reqVO.getSignUrl());
|
|
|
|
|
+ taskOrderSignFileDO.setSignDate(now());
|
|
|
|
|
+ taskOrderSignFileDO.setSecurityCheckId(reqVO.getSecurityCheckId());
|
|
|
|
|
+
|
|
|
|
|
+ boilerTaskOrderSignFileService.save(taskOrderSignFileDO);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (taskOrderDO.getEquipMainType().equals(200)) {
|
|
|
|
|
+ orderReportService.generateBoilerOrderReport(taskOrderDO.getAcceptOrderId());
|
|
|
|
|
+ }else {
|
|
|
|
|
+ orderReportService.generatePipeOrderReport(taskOrderDO.getAcceptOrderId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+// String pdfUrl = printFromPdfDownload(orderFromPdfReqVO);
|
|
|
|
|
+// if (StringUtils.isNotBlank(pdfUrl)) {
|
|
|
|
|
+// taskOrderSignFileDO.setSignFilePdf(pdfUrl);
|
|
|
|
|
+// boilerTaskOrderSignFileService.updateById(taskOrderSignFileDO);
|
|
|
|
|
+// }
|
|
|
|
|
+ // 锅炉
|
|
|
|
|
+// if (taskOrderDO.getEquipMainType().equals(200)) {
|
|
|
|
|
+// //提交审批
|
|
|
|
|
+// if (Integer.valueOf(400).equals(reqVO.getBusinessType())) {
|
|
|
|
|
+// LambdaQueryWrapper<BoilerTaskOrderItemReportDO> queryWrapper = new LambdaQueryWrapperX<>();
|
|
|
|
|
+// queryWrapper.eq(BoilerTaskOrderItemReportDO::getOrderItemId, reqVO.getOrderItemId());
|
|
|
|
|
+// queryWrapper.eq(BoilerTaskOrderItemReportDO::getReportType, 500);
|
|
|
|
|
+// List<BoilerTaskOrderItemReportDO> taskOrderItemReportDOS = boilerTaskOrderItemReportMapper.selectList(queryWrapper);
|
|
|
|
|
+// if (CollUtil.isEmpty(taskOrderItemReportDOS)) {
|
|
|
|
|
+// throw exception(new ErrorCode(1000, "任务单设备文件不存在"));
|
|
|
|
|
+// }
|
|
|
|
|
+// MajorIssuesSubmitVO majorIssuesSubmitVO = new MajorIssuesSubmitVO();
|
|
|
|
|
+// majorIssuesSubmitVO.setId(taskOrderItemReportDOS.get(0).getId());
|
|
|
|
|
+// majorIssuesSubmitVO.setReportUrl(taskOrderItemReportDOS.get(0).getReportUrl());
|
|
|
|
|
+// majorIssuesSubmitVO.setPrepareJson(taskOrderItemReportDOS.get(0).getPrepareJson());
|
|
|
|
|
+// majorIssuesSubmitVO.setSubmitId(getLoginUserId());
|
|
|
|
|
+// boilerTaskOrderService.opinionNotice(majorIssuesSubmitVO);
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// // 管道
|
|
|
|
|
+// if (taskOrderDO.getEquipMainType().equals(300)) {
|
|
|
|
|
+// if (Integer.valueOf(400).equals(reqVO.getBusinessType())) {
|
|
|
|
|
+// LambdaQueryWrapper<PipeTaskOrderItemReportDO> queryWrapper = new LambdaQueryWrapperX<>();
|
|
|
|
|
+// queryWrapper.eq(PipeTaskOrderItemReportDO::getOrderItemId, reqVO.getOrderItemId());
|
|
|
|
|
+// queryWrapper.eq(PipeTaskOrderItemReportDO::getReportType, 500);
|
|
|
|
|
+// List<PipeTaskOrderItemReportDO> taskOrderItemReportDOS = pipeTaskOrderItemReportMapper.selectList(queryWrapper);
|
|
|
|
|
+// if (CollUtil.isEmpty(taskOrderItemReportDOS)) {
|
|
|
|
|
+// throw exception(new ErrorCode(1000, "任务单设备文件不存在"));
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 服务单文件下载(小程序)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param reqVO 参数
|
|
|
|
|
+ * @return 结果
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String printFromPdfDownload(OrderFromPdfReqVO reqVO) {
|
|
|
|
|
+ String filePath = null;
|
|
|
|
|
+ try {
|
|
|
|
|
+ BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(reqVO.getOrderId());
|
|
|
|
|
+ if (ObjectUtil.isEmpty(taskOrderDO)) {
|
|
|
|
|
+ throw exception(TASK_ORDER_NOT_EXISTS);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+// TaskOrderFileVersionDO taskOrderFileVersionDO = orderFileVersionService.selectLastOneByOrderIdAndBusinessType(reqVO.getOrderId(), reqVO.getBusinessType(), reqVO.getOrderItemId(), reqVO.getSecurityCheckId());
|
|
|
|
|
+// if (ObjectUtil.isEmpty(taskOrderFileVersionDO)) {
|
|
|
|
|
+// throw exception(new ErrorCode(1000, "任务单相关文件版本不存在"));
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
|
|
+// String notifierSignImageData = null;
|
|
|
|
|
+// //业务类型=400并且告知人-签名人用户id不为空
|
|
|
|
|
+// if (Integer.valueOf(400).equals(taskOrderFileVersionDO.getBusinessType()) && StringUtils.isNotEmpty(taskOrderFileVersionDO.getNotifierUserId())) {
|
|
|
|
|
+// AdminUserRespDTO checkedData = adminUserApi.getUser(taskOrderFileVersionDO.getNotifierUserId()).getCheckedData();
|
|
|
|
|
+// if (ObjectUtil.isNotEmpty(checkedData) && StringUtils.isNotEmpty(checkedData.getSignUrl())) {
|
|
|
|
|
+// notifierSignImageData = checkedData.getSignUrl();
|
|
|
|
|
+// }
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
|
|
+ //获取任务单签名文件信息
|
|
|
|
|
+ BoilerTaskOrderSignFileDO taskOrderSignFileDO = boilerTaskOrderSignFileService.selectLastOneByOrderIdAndBusinessType(taskOrderDO.getId(), reqVO.getBusinessType(), reqVO.getOrderItemId(), reqVO.getSecurityCheckId());
|
|
|
|
|
+ if (ObjectUtil.isNotEmpty(taskOrderSignFileDO) && StringUtils.isNotEmpty(taskOrderSignFileDO.getSignUrl())) {
|
|
|
|
|
+ ByteArrayOutputStream byteArrayOutputStream = null;
|
|
|
|
|
+ byte[] imageData = fileApi.getFileByPath(taskOrderSignFileDO.getSignUrl()).getData();
|
|
|
|
|
+ PipeTaskOrderInputPrintReqVO printReqVO = new PipeTaskOrderInputPrintReqVO();
|
|
|
|
|
+ if (Integer.valueOf(100).equals(taskOrderSignFileDO.getBusinessType())) {
|
|
|
|
|
+ List<OrderReportDO> orderReportDOS = orderReportMapper.selectList(OrderReportDO::getTaskOrderId, taskOrderDO.getId());
|
|
|
|
|
+ OrderReportDO orderReportDO = orderReportDOS.get(0);
|
|
|
|
|
+ printReqVO.setId(orderReportDO.getId());
|
|
|
|
|
+ printReqVO.setTemplateId(orderReportDO.getTemplateId());
|
|
|
|
|
+ } else if (Integer.valueOf(200).equals(taskOrderSignFileDO.getBusinessType())) {
|
|
|
|
|
+
|
|
|
|
|
+ } else if (Integer.valueOf(300).equals(taskOrderSignFileDO.getBusinessType()) || Integer.valueOf(400).equals(taskOrderSignFileDO.getBusinessType())) {
|
|
|
|
|
+ }
|
|
|
|
|
+ byteArrayOutputStream = pipeTaskOrderInputService.printPipeTaskOrderInput(printReqVO);
|
|
|
|
|
+
|
|
|
|
|
+ if (Objects.equals(env, "uat") && Integer.valueOf(100).equals(taskOrderSignFileDO.getBusinessType())) {
|
|
|
|
|
+ if (Integer.valueOf(100).equals(reqVO.getBusinessType())) {
|
|
|
|
|
+ List<SignValuesDTO> valuesDTOList = Lists.newArrayList();
|
|
|
|
|
+ SignValuesDTO valuesDTO1 = new SignValuesDTO();
|
|
|
|
|
+ valuesDTO1.setTextonce(0);
|
|
|
|
|
+ if (Integer.valueOf(200).equals(taskOrderDO.getCheckType())) {
|
|
|
|
|
+ valuesDTO1.setSealType("6");
|
|
|
|
|
+ valuesDTO1.setText("机构公章或");
|
|
|
|
|
+ } else {
|
|
|
|
|
+ valuesDTO1.setSealType("6");
|
|
|
|
|
+ valuesDTO1.setText("机构公章或");
|
|
|
|
|
+ }
|
|
|
|
|
+ valuesDTOList.add(valuesDTO1);
|
|
|
|
|
+ byte[] byteUrl = this.sign(byteArrayOutputStream.toByteArray(), valuesDTOList, null);
|
|
|
|
|
+ //上传至资源服务器并获取url
|
|
|
|
|
+ filePath = fileApi.createFile(byteUrl);
|
|
|
|
|
+ LambdaUpdateWrapper<BoilerTaskOrderSignFileDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ updateWrapper.eq(BoilerTaskOrderSignFileDO::getId, taskOrderSignFileDO.getId());
|
|
|
|
|
+ updateWrapper.set(BoilerTaskOrderSignFileDO::getSignFilePdf, filePath);
|
|
|
|
|
+ boilerTaskOrderSignFileService.update(updateWrapper);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ filePath = fileApi.createFile(byteArrayOutputStream.toByteArray());
|
|
|
|
|
+ LambdaUpdateWrapper<BoilerTaskOrderSignFileDO> updateWrapper = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ updateWrapper.eq(BoilerTaskOrderSignFileDO::getId, taskOrderSignFileDO.getId());
|
|
|
|
|
+ updateWrapper.set(BoilerTaskOrderSignFileDO::getSignFilePdf, filePath);
|
|
|
|
|
+ boilerTaskOrderSignFileService.update(updateWrapper);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw exception(new ErrorCode(1000, "不存在签名信息pdf下载失败"));
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
|
+ }
|
|
|
|
|
+ return filePath;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private byte[] sign(byte[] bytes, List<SignValuesDTO> valuesDTOList, QrCodeValuesDTO qrCodeValuesDTO) throws Exception {
|
|
|
|
|
+ CntSignReqDTO signReqDTO = new CntSignReqDTO();
|
|
|
|
|
+ signReqDTO.setBytes(bytes);
|
|
|
|
|
+ signReqDTO.setValuesDTOList(valuesDTOList);
|
|
|
|
|
+ signReqDTO.setQrCodeValuesDTO(qrCodeValuesDTO);
|
|
|
|
|
+ CntSignResponseRepsDTO signRepsDTO = signApi.sign(signReqDTO).getCheckedData();
|
|
|
|
|
+ String signUrl = signRepsDTO.getRecord_saved_urls().get(0);
|
|
|
|
|
+ log.info("signUrl:" + signUrl);
|
|
|
|
|
+ return signApi.getSignFile(signUrl).getCheckedData();
|
|
|
|
|
+ }
|
|
|
|
|
+}
|