xuzhancheng 2 tygodni temu
rodzic
commit
ec6a804666
11 zmienionych plików z 177 dodań i 195 usunięć
  1. 24 2
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/api/taskorder/BoilerTaskOrderApiImpl.java
  2. 11 11
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/ExternalOAController.java
  3. 4 21
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/vo/ReturnFlowVO.java
  4. 5 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorder/PipeTaskOrderDO.java
  5. 21 16
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java
  6. 0 10
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAService.java
  7. 4 113
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAServiceImpl.java
  8. 6 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOACommentInfoRes.java
  9. 3 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderService.java
  10. 68 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  11. 31 22
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java

+ 24 - 2
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/api/taskorder/BoilerTaskOrderApiImpl.java

@@ -1,21 +1,29 @@
 package cn.start.tz.module.pressure2.api.taskorder;
 
 import cn.start.tz.framework.common.pojo.CommonResult;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.start.tz.module.pressure.api.taskorder.TaskOrderApi;
 import cn.start.tz.module.pressure2.api.taskorder.dto.UpdatePayStatusDTO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.MajorIssuesSubmitVO;
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
 import cn.start.tz.module.pressure2.service.boilertaskorder.BoilerTaskOrderService;
+import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
 import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController // 提供 RESTful API 接口,给 Feign 调用
 @Validated
+@Slf4j
 public class BoilerTaskOrderApiImpl implements BoilerTaskOrderApi {
 
     @Resource
     private BoilerTaskOrderService taskOrderService;
 
+    @Resource
+    private PipeTaskOrderService pipeTaskOrderService;
+
     @Override
     public CommonResult<Boolean> audit(String id, Integer status, String reason) {
         Boolean b = taskOrderService.audit(id, status, reason);
@@ -52,7 +60,21 @@ public class BoilerTaskOrderApiImpl implements BoilerTaskOrderApi {
 
     @Override
     public CommonResult<Boolean> updatePayStatus(UpdatePayStatusDTO payInfo) {
-        Boolean b = taskOrderService.updatePayStatus(payInfo);
-        return CommonResult.success(b);
+        String orderNo = payInfo.getOrderNo();
+        BoilerTaskOrderDO boilerTaskOrderDO = taskOrderService.getOne(new LambdaQueryWrapperX<BoilerTaskOrderDO>().
+                eq(BoilerTaskOrderDO::getOrderNo, orderNo), false);
+        if (boilerTaskOrderDO == null) {
+            log.error("任务单不存在");
+            return CommonResult.success(false);
+        }
+        if (boilerTaskOrderDO.getEquipMainType() == 200){
+            Boolean b = taskOrderService.updatePayStatus(payInfo);
+            return CommonResult.success(b);
+        }
+        if (boilerTaskOrderDO.getEquipMainType() == 300){
+            Boolean b = pipeTaskOrderService.updatePayStatus(payInfo);
+            return CommonResult.success(b);
+        }
+        return CommonResult.success(false);
     }
 }

+ 11 - 11
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/ExternalOAController.java

@@ -98,17 +98,17 @@ public class ExternalOAController {
         return success(null);
     }
 
-    @GetMapping("/pdf/templateId/{templateId}/instanceId/{instanceId}")
-    @PermitAll
-    public CommonResult<ExternalOAUploadAttachmentRes> pdf(HttpServletResponse response, @PathVariable("templateId") String templateId, @PathVariable("instanceId") String instanceId) {
-        try {
-            byte[] pdf = externalOAService.pdf(templateId, instanceId);
-            ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf), "fujian.pdf");
-            return success(externalOAUploadAttachmentRes);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-    }
+//    @GetMapping("/pdf/templateId/{templateId}/instanceId/{instanceId}")
+//    @PermitAll
+//    public CommonResult<ExternalOAUploadAttachmentRes> pdf(HttpServletResponse response, @PathVariable("templateId") String templateId, @PathVariable("instanceId") String instanceId) {
+//        try {
+//            byte[] pdf = externalOAService.pdf(templateId, instanceId);
+//            ExternalOAUploadAttachmentRes externalOAUploadAttachmentRes = externalOAService.externalOAUploadAttachment(new ByteArrayInputStream(pdf), "fujian.pdf");
+//            return success(externalOAUploadAttachmentRes);
+//        } catch (Exception e) {
+//            throw new RuntimeException(e);
+//        }
+//    }
 
     @GetMapping("/getExternalOAComment/{summaryid}")
     @PermitAll

+ 4 - 21
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/admin/externalOA/vo/ReturnFlowVO.java

@@ -1,31 +1,14 @@
 package cn.start.tz.module.pressure2.controller.admin.externalOA.vo;
 
-import cn.start.tz.framework.common.pojo.PageParam;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 import lombok.ToString;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.List;
-
-import static cn.start.tz.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
 
 @Data
 @ToString(callSuper = true)
-public class ReturnFlowVO{
+public class ReturnFlowVO {
     @Schema(description = "流程ID")
     private String summaryId;
-    @Schema(description = "账户ID")
-    private String accountId;
-    @Schema(description = "节点名称")
-    private String nodeName;
-    @Schema(description = "处理人")
-    private String handler;
-    @Schema(description = "处理类型")
-    private String handleType;
-    @Schema(description = "表单编码")
-    private String formcode;
-}
+    @Schema(description = "流程状态(如:回退)")
+    private String state;
+}

+ 5 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorder/PipeTaskOrderDO.java

@@ -322,4 +322,9 @@ public class PipeTaskOrderDO extends BaseDO {
      * 使用单位id
      */
     private String useUnitId;
+
+    /**
+     * 金额
+     */
+    private BigDecimal payAmount;
 }

+ 21 - 16
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java

@@ -323,24 +323,28 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                         ExternalOACommentRes externalOAComment = externalOAService.getExternalOAComment(boilerTaskOrderItemReportDO.getSummaryId());
                         if (externalOAComment != null && externalOAComment.getData() != null) {
                             log.info("查询结果,{}", externalOAComment);
-                            if (externalOAComment.getData().getState() != null) {
+                            ExternalOARes oaRes = externalOAComment.getData();
+                            if (oaRes.getState() != null) {
                                 // 流程流转记录
-                                List<ExternalOACommentInfoRes> comments = externalOAComment.getData().getComments();
+                                List<ExternalOACommentInfoRes> comments = oaRes.getComments();
                                 if (comments != null && !comments.isEmpty()) {
-                                    // 增加
                                     addFlowRecord(boilerTaskOrderItemReportDO, comments);
                                 }
-                                if ("处理中".equals(externalOAComment.getData().getState())) {
-
-                                } else if ("结束".equals(externalOAComment.getData().getState())) {
-                                    // 修改报告状态
+                                String state = oaRes.getState();
+                                // 检查是否有退回标识:isStepBack=true 或 评论中包含 EXT_ATT3=stepBack
+                                boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+                                        .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+//                                if ("处理中".equals(state) || "待处理".equals(state)) {
+//                                    // 流程处理中,不做操作
+//                                } else
+                                if ("结束".equals(state) && !isStepBack) {
+                                    // 流程正常结束,修改报告状态
                                     updateReportStatus(boilerTaskOrderItemReportDO, externalOAComment);
-                                } else if ("退回".equals(externalOAComment.getData().getState())) {
-                                    // 退回
-//                            boilerTaskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
-//                            taskOrderItemReportMapper.updateById(boilerTaskOrderItemReportDO);
-                                    orderItemRollback(boilerTaskOrderItemReportDO.getId(), externalOAComment.getData());
                                 }
+//                                else if ("退回".equals(state) || ("结束".equals(state) && isStepBack)) {
+//                                    // 流程退回(包括结束但被退回的情况)
+//                                    orderItemRollback(boilerTaskOrderItemReportDO.getId(), oaRes);
+//                                }
                             }
 
                         }
@@ -414,10 +418,11 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         LocalDateTime ratifyTime = null;
 
         if (comments != null && !comments.isEmpty()) {
-            // 拿到最近两个"同意"或"已阅"的评论
+            // 拿到最近两个"同意"或"已阅"的评论,排除退回操作
             List<ExternalOACommentInfoRes> approvalComments = comments.stream()
                     .filter(comment -> comment.getComment() != null &&
-                            (comment.getComment().contains("同意") || comment.getComment().contains("已阅")))
+                            (comment.getComment().contains("【同意】") || comment.getComment().contains("【已阅】"))
+                            && !"common.toolbar.stepBack.label".equals(comment.getExtAtt3()))
                     .sorted(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate).reversed())
                     .limit(2)
                     .toList();
@@ -711,8 +716,8 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
             }
 
 
-            Boolean isAllFinish = boilerTaskOrderItemDOList.stream().allMatch(item -> item.getTaskStatus() == TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue());
-            if (isAllFinish && boilerTaskOrderItemDOList != null && !boilerTaskOrderItemDOList.isEmpty()) {
+            boolean isAllFinish = boilerTaskOrderItemDOList.stream().allMatch(item -> item.getTaskStatus() == TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue());
+            if (isAllFinish && !boilerTaskOrderItemDOList.isEmpty()) {
                 BoilerTaskOrderItemDO boilerTaskOrderItemDO = boilerTaskOrderItemDOList.get(0);
                 // 任务完成
                 BoilerTaskOrderDO updateOrder = new BoilerTaskOrderDO();

+ 0 - 10
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAService.java

@@ -40,16 +40,6 @@ public interface ExternalOAService {
      */
     ExternalOAUploadAttachmentRes externalOAUploadAttachment(InputStream inputStream, String fileName);
 
-
-    /**
-     * 根据模板、实例id获取pdf附件
-     * @param templateId
-     * @param instanceId
-     * @return
-     * @throws Exception
-     */
-    byte[] pdf(String templateId, String instanceId) throws Exception;
-
     /**
      * 取消流程
      * @param summaryId

+ 4 - 113
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/ExternalOAServiceImpl.java

@@ -262,8 +262,9 @@ public class ExternalOAServiceImpl implements ExternalOAService {
             return CommonResult.error(400, "流程ID不能为空");
         }
 
-        // 回退目标状态:报告编制(520)
+        // 退回目标状态:记录录入(500)
         Integer rollbackStatus = TaskOrderStatusEnum.REPORT_PREPARE.getStatus();
+        String returnReason = returnFlowVO.getState();
 
         // 先在锅炉报告表中查找
         BoilerTaskOrderItemReportDO boilerReport = boilerTaskOrderItemReportMapper.selectOne(
@@ -274,7 +275,7 @@ public class ExternalOAServiceImpl implements ExternalOAService {
             LambdaUpdateWrapper<BoilerTaskOrderItemReportDO> updateObj = new LambdaUpdateWrapper<>();
             updateObj.eq(BoilerTaskOrderItemReportDO::getId, boilerReport.getId());
             updateObj.set(BoilerTaskOrderItemReportDO::getTaskStatus, rollbackStatus);
-            updateObj.set(BoilerTaskOrderItemReportDO::getReturnReason, returnFlowVO.getHandleType());
+            updateObj.set(BoilerTaskOrderItemReportDO::getReturnReason, returnReason);
             // 清空审批相关字段
             updateObj.set(BoilerTaskOrderItemReportDO::getApprovalId, null);
             updateObj.set(BoilerTaskOrderItemReportDO::getApprovalTime, null);
@@ -294,7 +295,7 @@ public class ExternalOAServiceImpl implements ExternalOAService {
             LambdaUpdateWrapper<PipeTaskOrderItemReportDO> updateObj = new LambdaUpdateWrapper<>();
             updateObj.eq(PipeTaskOrderItemReportDO::getId, pipeReport.getId());
             updateObj.set(PipeTaskOrderItemReportDO::getTaskStatus, rollbackStatus);
-            updateObj.set(PipeTaskOrderItemReportDO::getReturnReason, returnFlowVO.getHandleType());
+            updateObj.set(PipeTaskOrderItemReportDO::getReturnReason, returnReason);
             // 清空审批相关字段
             updateObj.set(PipeTaskOrderItemReportDO::getApprovalId, null);
             updateObj.set(PipeTaskOrderItemReportDO::getApprovalTime, null);
@@ -308,114 +309,4 @@ public class ExternalOAServiceImpl implements ExternalOAService {
         log.warn("OA退回流程:未找到summaryId={}对应的报告记录", summaryId);
         return CommonResult.error(500, "未找到对应的报告记录");
     }
-
-    @Override
-    public byte[] pdf(String templateId, String instanceId) throws Exception {
-        CommonResult<StandardTemplateRespDTO> standardTemplate = standardTemplateApi.getStandardTemplate(templateId);
-        String fileUrl = standardTemplate.getCheckedData().getFileUrl();
-        byte[] bytes = fileApi.getFileByPath(fileUrl).getCheckedData();
-        GrapeCityReqDTO grapeCityReqDTO = new GrapeCityReqDTO();
-        grapeCityReqDTO.setTemplateBytes(bytes);
-
-        List<DynamicTbValDO> list = dynamicTbValService.lambdaQuery().eq(DynamicTbValDO::getInsId, instanceId).list();
-        Map<String, Object> map = new HashMap<>();
-
-        for (DynamicTbValDO dynamicTbValDO : list) {
-            map.put(dynamicTbValDO.getColCode(), dynamicTbValDO.getValValue());
-        }
-        return this.fullPdf(bytes, map);
-    }
-
-    private byte[] fullPdf(byte[] templateBytes, Map<String, Object> data) throws Exception {
-
-        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
-        WorkbookOptions workbookOptions = new WorkbookOptions();
-        workbookOptions.setPixelBasedColumnWidth(true);
-        //Don't autofit row height
-        XlsxOpenOptions options = new XlsxOpenOptions();
-        options.setImportFlags(EnumSet.of(ImportFlags.Data));
-        options.setDoNotAutoFitAfterOpened(true);
-        Workbook workbook = new Workbook(workbookOptions);
-        InputStream inputStream = new ByteArrayInputStream(templateBytes);
-        workbook.open(inputStream, OpenFileFormat.Sjs);
-        int pageStart = 0;
-        for (int i = 0; i < workbook.getWorksheets().getCount(); i++) {
-            IWorksheet worksheet = workbook.getWorksheets().get(i);
-            worksheet.getPageSetup().setPrintHeadings(false);
-            worksheet.getPageSetup().setPaperSize(PaperSize.A4);
-            worksheet.getPageSetup().setLeftMargin(15); // 左边距
-            worksheet.getPageSetup().setRightMargin(15); // 右边距
-            worksheet.getPageSetup().setCenterHorizontally(true);
-            worksheet.setDataSource(new JsonDataSource(JSON.toJSONString(data)));
-            if (worksheet.getName().contains("封面") || worksheet.getName().contains("注意")) {
-                pageStart++;
-            } else {
-                if (pageStart == 0) {
-                    worksheet.getPageSetup().setCenterFooter("第&P页共&N页");
-                } else {
-                    worksheet.getPageSetup().setCenterFooter("第&P-1页共&N-" + pageStart + "页");
-                }
-                worksheet.getPageSetup().setIsAutoFirstPageNumber(true);
-            }
-            // 填充签名图片
-            for (int x = 0; x < worksheet.getRowCount(); x++) {
-                for (int y = 0; y < worksheet.getColumnCount(); y++) {
-                    IRange range = worksheet.getCells().get(x, y);
-                    if (range.getBindingPath() != null && range.getValue() != null) {
-                        String value = (String) range.getValue();
-                        if (value.endsWith(".png") || value.endsWith(".jpg")) {
-                            // 是非多张图片
-                            if(!value.contains(",")){
-                                byte[] bytes = fileApi.getFileByPath(value).getCheckedData();
-                                range.setValue(null);
-                                IRange mergeArea = range.getMergeArea();
-                                mergeArea.setBackgroundImage(bytes);
-                            }else {
-                                String[] split = value.split(",");
-                                byte[][] bytes = new byte[split.length][];
-                                for (int k = 0; k < split.length; k++) {
-                                    bytes[k] = fileApi.getFileByPath(split[k]).getCheckedData();
-                                }
-                                range.setValue(null);
-                                IRange mergeArea = range.getMergeArea();
-
-                                // 横向合并图片
-                                byte[] bytes1 = ImageUtil.mergeImages(bytes);
-                                mergeArea.setBackgroundImage(bytes1);
-                            }
-                        }
-                        if (range.getCellType() instanceof com.grapecity.documents.excel.CheckBoxCellType){
-                            if (!"true".equals(range.getValue())){
-                                range.setValue(null);
-                            }
-                        }
-                    }
-                }
-            }
-            // 浮动图片
-            if (data.get("Illustration") != null){
-                String illustration = (String) data.get("Illustration");
-                if (illustration.startsWith("[") && illustration.endsWith("]")) {
-                    JSONArray jsonArray = JSON.parseArray(illustration);
-                    List<JSONObject> list = new ArrayList<>();
-                    for (int k = 0; k < jsonArray.size(); k++) {
-                        JSONObject jsonObject = jsonArray.getJSONObject(k);
-                        if (jsonObject.getString("sheet").equals(worksheet.getName())){
-                            byte[] bytes = fileApi.getFileByPath(jsonObject.getString("url")).getCheckedData();
-                            InputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
-                            worksheet.getShapes().addPictureInPixel(byteArrayInputStream, ImageType.JPG, jsonObject.getDouble("x"), jsonObject.getDouble("y"), jsonObject.getDouble("width"), jsonObject.getDouble("height"));
-                        }else {
-                            list.add(jsonObject);
-                        }
-                    }
-                    data.put("Illustration", JSON.toJSONString(list));
-                }
-            }
-        }
-        PrintManager printManager = new PrintManager();
-        Workbook.FontsFolderPath = this.fontsFolderPath;
-        List<PageInfo> pages = printManager.paginate(workbook);
-        printManager.savePageInfosToPDF(byteArrayOutputStream, pages);
-        return byteArrayOutputStream.toByteArray();
-    }
 }

+ 6 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOACommentInfoRes.java

@@ -1,5 +1,6 @@
 package cn.start.tz.module.pressure2.service.externalOA.vo;
 
+import com.alibaba.fastjson2.annotation.JSONField;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -9,4 +10,9 @@ public class ExternalOACommentInfoRes {
     private String userName;
     private String comment;
     private LocalDateTime createDate;
+    @JSONField(name = "NODE_NAME")
+    private String nodeName;
+    @JSONField(name = "EXT_ATT3")
+    private String extAtt3;
+    private String userCode;
 }

+ 3 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderService.java

@@ -1,6 +1,7 @@
 package cn.start.tz.module.pressure2.service.pipetaskorder;
 
 import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.module.pressure2.api.taskorder.dto.UpdatePayStatusDTO;
 import cn.start.tz.module.pressure2.controller.admin.boilertaskorder.vo.*;
 import cn.start.tz.module.pressure2.controller.admin.bpmtaskinfo.vo.BpmTaskRespVO;
 import cn.start.tz.module.pressure2.controller.admin.costfield.vo.CostFieldRespVO;
@@ -198,4 +199,6 @@ public interface PipeTaskOrderService extends IService<PipeTaskOrderDO>  {
 
     void majorIssuesRecovery(@Valid TaskOrderMajorIssuesVO taskOrderMajorIssuesVO);
 
+    Boolean updatePayStatus(UpdatePayStatusDTO payInfo);
+
 }

+ 68 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java

@@ -10,6 +10,7 @@ import cn.start.tz.framework.common.exception.ServiceException;
 import cn.start.tz.framework.common.exception.enums.GlobalErrorCodeConstants;
 import cn.start.tz.framework.common.pojo.CommonResult;
 import cn.start.tz.framework.common.pojo.PageResult;
+import cn.start.tz.framework.common.util.date.DateUtils;
 import cn.start.tz.framework.common.util.object.BeanUtils;
 import cn.start.tz.framework.ip.core.Area;
 import cn.start.tz.framework.ip.core.utils.AreaUtils;
@@ -28,9 +29,11 @@ import cn.start.tz.module.member.api.templatesendlog.dto.TemplateSendLogDto;
 import cn.start.tz.module.member.api.templatesendlog.dto.TemplateSendLogRespDto;
 import cn.start.tz.module.member.api.user.MemberUserApi;
 import cn.start.tz.module.member.api.user.dto.MemberUserRespDTO;
+import cn.start.tz.module.pressure2.api.taskorder.dto.UpdatePayStatusDTO;
 import cn.start.tz.module.pressure2.controller.admin.appointmentconfirmorder.vo.TeamItemVO;
 import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerDeleteTask;
 import cn.start.tz.module.pressure2.controller.admin.pipetaskorderitemreport.vo.OrderItemReportUpdateVO;
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitem.BoilerTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.BoilerTaskOrderItemReportDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreportuser.BoilerTaskOrderItemReportUserDO;
 import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderreport.BoilerTaskOrderReportDO;
@@ -121,6 +124,7 @@ import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderreport.PipeTaskOrderR
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskordersecuritycheck.PipeTaskOrderSecurityCheckMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderuser.PipeTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.service.boilerconnectrecordreport.BoilerConnectRecordReportService;
+import cn.start.tz.module.pressure2.service.boilertaskorderissuereport.BoilerTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.common.RedisService;
 import cn.start.tz.module.pressure2.service.costfield.CostFieldService;
 import cn.start.tz.module.pressure2.service.dynamictbcol.DynamicTbColService;
@@ -136,6 +140,7 @@ import cn.start.tz.module.pressure2.service.inspectionnature.InspectionNatureTem
 import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
 import cn.start.tz.module.pressure2.service.pdf.PdfService;
 import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
+import cn.start.tz.module.pressure2.service.pipetaskorderissuereport.PipeTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.pipetaskorderitemreportversion.PipeTaskOrderItemReportVersionService;
 import cn.start.tz.module.pressure2.service.pipetaskorderoperation.PipeTaskOrderOperationService;
 import cn.start.tz.module.pressure2.service.pipetaskordersecuritycheck.PipeTaskOrderSecurityCheckService;
@@ -172,6 +177,7 @@ import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.BeanWrapper;
 import org.springframework.beans.BeanWrapperImpl;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -5282,4 +5288,66 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
         return "22";
     }
 
+    @Resource
+    @Lazy
+    PipeTaskOrderIssueReportService pipeTaskOrderIssueReportService;
+
+    @Override
+    public Boolean updatePayStatus(UpdatePayStatusDTO payInfo){
+        String orderNo = payInfo.getOrderNo();
+        PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectOne(new LambdaQueryWrapperX<PipeTaskOrderDO>().
+                eq(PipeTaskOrderDO::getOrderNo, orderNo), false);
+        if (pipeTaskOrderDO == null) {
+            log.error("任务单不存在");
+            return false;
+        }
+
+        // 取消支付
+        if (payInfo.getIsCancel() != null && payInfo.getIsCancel()) {
+            LambdaUpdateWrapper<PipeTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
+            wrap.eq(PipeTaskOrderDO::getId, pipeTaskOrderDO.getId());
+
+            wrap.set(PipeTaskOrderDO::getPaymentStatus, 0);
+            wrap.set(PipeTaskOrderDO::getPayAmount, 0);
+            wrap.set(PipeTaskOrderDO::getPayTime, null);
+            pipeTaskOrderMapper.update(wrap);
+            return true;
+        }
+
+        PipeTaskOrderDO updateOrder = new PipeTaskOrderDO();
+        updateOrder.setId(pipeTaskOrderDO.getId());
+        updateOrder.setPaymentStatus(1);
+        String chargeTime = payInfo.getChargeTime();
+        try {
+            LocalDateTime localDateTime = DateUtils.parseDateTimeWithMultipleFormats(chargeTime);
+            updateOrder.setPayTime(localDateTime);
+        } catch (Exception e) {
+            log.error("日期转换失败", e);
+            updateOrder.setPayTime(LocalDateTime.now());
+        }
+        try {
+            updateOrder.setPayAmount(payInfo.getChargeAmount());
+            if (payInfo.getChargeAmount() == null) {
+                updateOrder.setPayAmount(pipeTaskOrderDO.getActualAmount());
+            }
+
+        } catch (Exception e) {
+            log.error("payAmount 设置错误", e);
+        }
+
+        if (payInfo.getFeeType() != null) {
+            log.info("更新收费形式" + payInfo.getOrderNo());
+            updateOrder.setFeeType(payInfo.getFeeType());
+        }
+
+        pipeTaskOrderMapper.updateById(updateOrder);
+        //非合同收费并且不属于免征范围时结算回调后自动发放报告
+        if (Integer.valueOf(100).equals(pipeTaskOrderDO.getFeeType()) && (Integer.valueOf(200).equals(pipeTaskOrderDO.getFeeNature()) || pipeTaskOrderDO.getFeeNature() == null)) {
+            List<PipeTaskOrderItemDO> taskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().
+                    eq(PipeTaskOrderItemDO::getOrderId, pipeTaskOrderDO.getId()).
+                    ne(PipeTaskOrderItemDO::getTaskStatus, TaskOrderStatusEnum.CANCEL.getStatus()));
+            pipeTaskOrderIssueReportService.autoIssueTaskOrderReport(pipeTaskOrderDO, taskOrderItemDOList);
+        }
+        return true;
+    }
 }

+ 31 - 22
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java

@@ -21,11 +21,13 @@ import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorderitemreport.Boi
 import cn.start.tz.module.pressure2.dal.dataobject.equippipe.EquipPipeDO;
 import cn.start.tz.module.pressure2.dal.dataobject.equippipecheckhistory.EquipPipeCheckHistoryDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderinput.PipeTaskOrderInputDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreportrecord.PipeTaskOrderItemReportRecordDO;
 import cn.start.tz.module.pressure2.dal.mysql.equippipe.EquipPipeMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equippipecheckhistory.EquipPipeCheckHistoryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
+import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderinput.PipeTaskOrderInputMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
 import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitemreportrecord.PipeTaskOrderItemReportRecordMapper;
 import cn.start.tz.module.pressure2.framework.thread.CommonThread;
@@ -34,6 +36,7 @@ import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOACommentInfoR
 import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOACommentRes;
 import cn.start.tz.module.pressure2.service.externalOA.vo.ExternalOARes;
 import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
+import cn.start.tz.module.pressure2.service.pipetaskorderinput.PipeTaskOrderInputService;
 import cn.start.tz.module.pressure2.service.pipetaskorderissuereport.PipeTaskOrderIssueReportService;
 import cn.start.tz.module.pressure2.service.pushtaskorder.PushTaskOrderService;
 import cn.start.tz.module.pressure2.service.synchronization.SynchronizationService;
@@ -88,6 +91,9 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
     @Resource
     private PipeTaskOrderItemReportMapper pipeTaskOrderItemReportMapper;
 
+    @Resource
+    private PipeTaskOrderInputMapper pipeTaskOrderInputMapper;
+
     @Override
     public String createPipeTaskOrderItemReport(PipeTaskOrderItemReportSaveReqVO createReqVO) {
         // 插入
@@ -212,24 +218,28 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                         ExternalOACommentRes externalOAComment = externalOAService.getExternalOAComment(pipeTaskOrderItemReportDO.getSummaryId());
                         if (externalOAComment != null && externalOAComment.getData() != null) {
                             log.info("查询结果,{}", externalOAComment);
-                            if (externalOAComment.getData().getState() != null) {
+                            ExternalOARes oaRes = externalOAComment.getData();
+                            if (oaRes.getState() != null) {
                                 // 流程流转记录
-                                List<ExternalOACommentInfoRes> comments = externalOAComment.getData().getComments();
+                                List<ExternalOACommentInfoRes> comments = oaRes.getComments();
                                 if (comments != null && !comments.isEmpty()) {
-                                    // 增加
                                     addFlowRecord(pipeTaskOrderItemReportDO, comments);
                                 }
-                                if ("处理中".equals(externalOAComment.getData().getState())) {
-
-                                } else if ("结束".equals(externalOAComment.getData().getState())) {
-                                    // 修改报告状态
+                                String state = oaRes.getState();
+                                // 检查是否有退回标识:isStepBack=true 或 评论中包含 EXT_ATT3=stepBack
+                                boolean isStepBack = oaRes.isStepBack() || (comments != null && comments.stream()
+                                        .anyMatch(c -> "common.toolbar.stepBack.label".equals(c.getExtAtt3())));
+//                                if ("处理中".equals(state) || "待处理".equals(state)) {
+//                                    // 流程处理中,不做操作
+//                                } else
+                                if ("结束".equals(state) && !isStepBack) {
+                                    // 流程正常结束,修改报告状态
                                     updateReportStatus(pipeTaskOrderItemReportDO, comments);
-                                } else if ("退回".equals(externalOAComment.getData().getState())) {
-                                    // 退回
-//                            boilerTaskOrderItemReportDO.setTaskStatus(TaskOrderStatusEnum.ENTER.getStatus());
-//                            taskOrderItemReportMapper.updateById(boilerTaskOrderItemReportDO);
-                                    orderItemRollback(pipeTaskOrderItemReportDO.getId(), externalOAComment.getData());
                                 }
+//                                    else if ("退回".equals(state) || ("结束".equals(state) && isStepBack)) {
+//                                    // 流程退回(包括结束但被退回的情况)
+//                                    orderItemRollback(pipeTaskOrderItemReportDO.getId(), oaRes);
+//                                }
                             }
                         }
                     } catch (Exception e) {
@@ -290,7 +300,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
      * @param comments                  OA 流程评论列表
      */
     public void updateReportStatus(PipeTaskOrderItemReportDO pipeTaskOrderItemReportDO, List<ExternalOACommentInfoRes> comments) {
-        // 从OA评论中提取最近两个"同意"或"已阅"的评论,分别作为审核人和审批人
+        // 从OA评论中提取最近两个"同意"或"已阅"的评论,分别作为审核人和审批人
         String approvalId = null;
         String approvalName = null;
         LocalDateTime approvalTime = null;
@@ -300,7 +310,8 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
 
         List<ExternalOACommentInfoRes> approvalComments = comments.stream()
                 .filter(comment -> comment.getComment() != null &&
-                        (comment.getComment().contains("同意") || comment.getComment().contains("已阅")))
+                        (comment.getComment().contains("【同意】") || comment.getComment().contains("【已阅】"))
+                        && !"common.toolbar.stepBack.label".equals(comment.getExtAtt3()))
                 .sorted(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate).reversed())
                 .limit(2)
                 .toList();
@@ -458,11 +469,6 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         taskOrderItemReportMapper.updateById(updateObj);
 
         // 流转记录
-        PipeTaskOrderItemReportRecordDO taskOrderItemReportRecordDO = new PipeTaskOrderItemReportRecordDO();
-        taskOrderItemReportRecordDO.setReportId(id);
-        taskOrderItemReportRecordDO.setProcess(TaskOrderStatusEnum.REPORT_RATIFY.getStatus());
-        taskOrderItemReportRecordDO.setResult(100);
-        pipeTaskOrderItemReportRecordMapper.insert(taskOrderItemReportRecordDO);
 
 //        TaskOrderItemReportDO taskOrderItemReportDO = taskOrderItemReportMapper.selectById(orderItemRatifyVO.getId());
         if (taskOrderItemReportDO.getReportType() != null && taskOrderItemReportDO.getReportType() == 100) {
@@ -577,9 +583,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                 equipPipeCheckHistoryMapper.insert(historyDO);
             }
 
-
-            Boolean isAllFinish = pipeTaskOrderItemDOList.stream().allMatch(item -> item.getTaskStatus() == TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue());
-            if (isAllFinish && pipeTaskOrderItemDOList != null && !pipeTaskOrderItemDOList.isEmpty()) {
+            if (!pipeTaskOrderItemDOList.isEmpty()) {
                 PipeTaskOrderItemDO pipeTaskOrderItemDO = pipeTaskOrderItemDOList.get(0);
                 // 任务完成
                 PipeTaskOrderDO updateOrder = new PipeTaskOrderDO();
@@ -588,6 +592,11 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                 updateOrder.setConfirmDate(now());
                 pipeTaskOrderMapper.updateById(updateOrder);
 
+                pipeTaskOrderInputMapper.update(new LambdaUpdateWrapper<PipeTaskOrderInputDO>()
+                        .eq(PipeTaskOrderInputDO::getOrderId, pipeTaskOrderItemDO.getOrderId())
+                        .set(PipeTaskOrderInputDO::getTaskStatus, TaskOrderStatusEnum.REPORT_FINISH.getStatus())
+                );
+
                 //任务单办结后添加任务单非税开单申请
                 try {
                     taskOrderNonTaxApplyService.create(new TaskOrderNonTaxApplyCreateVO().setOrderId(pipeTaskOrderItemDO.getOrderId()));