Bladeren bron

Merge remote-tracking branch 'origin/dev' into dev

yangguanjin 1 dag geleden
bovenliggende
commit
edb0885d50
15 gewijzigde bestanden met toevoegingen van 252 en 151 verwijderingen
  1. 5 5
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderAppApiController.java
  2. 6 11
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderIssueReportAppController.java
  3. 6 10
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/PipeTaskOrderIssueReportAppController.java
  4. 1 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderInspectionServiceImpl.java
  5. 30 32
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java
  6. 16 16
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorderitemreport/BoilerTaskOrderItemReportServiceImpl.java
  7. 2 0
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/externalOA/vo/ExternalOACreateFlowBodyDataReq.java
  8. 38 33
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorder/PipeTaskOrderServiceImpl.java
  9. 16 16
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderitemreport/PipeTaskOrderItemReportServiceImpl.java
  10. 60 4
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pushtaskorder/PushTaskOrderServiceImpl.java
  11. 18 13
      tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskordernontaxrecord/TaskOrderNonTaxRecordServiceImpl.java
  12. BIN
      tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/SFS.pfx
  13. 15 7
      tz-module-system/tz-module-system-biz/src/main/java/cn/start/tz/module/system/controller/admin/cas/CasController.java
  14. 21 3
      tz-module-system/tz-module-system-biz/src/main/resources/application-hsd.yaml
  15. 18 1
      tz-module-system/tz-module-system-biz/src/main/resources/application-uat.yaml

+ 5 - 5
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderAppApiController.java

@@ -135,12 +135,12 @@ public class BoilerTaskOrderAppApiController {
     @PermitAll
     public CommonResult<PageResult<TaskOrderNonTaxRecordRespVO>> getNonTaxRecordPage(@Valid TaskOrderNonTaxRecordPageReqVO pageReqVO) {
         // 获取登录用户的手机号作为过滤条件
-//        String mobile = getLoginUserMobile();
-//        if (StringUtils.isEmpty(mobile)) {
-//            return success(new PageResult<>());
-//        }
+        String mobile = getLoginUserMobile();
+        if (StringUtils.isEmpty(mobile)) {
+            return success(new PageResult<>());
+        }
 //        // 设置联系电话过滤条件
-//        pageReqVO.setContactPhone(mobile);
+        pageReqVO.setContactPhone(mobile);
         // 审核通过的数据
         pageReqVO.setStatus(List.of(200));
         PageResult<TaskOrderNonTaxRecordRespVO> pageResult = taskOrderNonTaxRecordService.getTaskOrderNonTaxRecordPageApp(pageReqVO);

+ 6 - 11
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/BoilerTaskOrderIssueReportAppController.java

@@ -90,17 +90,12 @@ public class BoilerTaskOrderIssueReportAppController {
      @GetMapping("/record-equip/page")
      @PermitAll
      public CommonResult<PageResult<TaskOrderIssueReportItemRespVO>> getTaskOrderIssueReportEquipPageApp(@Valid TaskOrderIssueReportPageReqVO pageReqVO) {
-//         String mobile = getLoginUserMobile();
-//         if(StringUtils.isNotBlank(mobile)){
-//             pageReqVO.setRecipientPhone(mobile);
-//         }else{
-//             return success(PageResult.empty());
-//         }
-
-//         String currentUserUnitId = miniAuthService.getCurrentUserUnitCode();
-//         if(!"-1".equals(currentUserUnitId)){
-//             pageReqVO.setUnitCode(currentUserUnitId);
-//         }
+         String mobile = getLoginUserMobile();
+         if(StringUtils.isNotBlank(mobile)){
+             pageReqVO.setRecipientPhone(mobile);
+         }else{
+             return success(PageResult.empty());
+         }
 
          PageResult<TaskOrderIssueReportItemRespVO> pageResult = boilerTaskOrderIssueReportService.getTaskOrderIssueReportEquipPageApp(pageReqVO);
          return success(pageResult);

+ 6 - 10
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/controller/app/taskorder/PipeTaskOrderIssueReportAppController.java

@@ -108,17 +108,13 @@ public class PipeTaskOrderIssueReportAppController {
     @PermitAll
 
     public CommonResult<PageResult<TaskOrderIssueReportItemRespVO>> getTaskOrderIssueReportEquipPageApp(@Valid TaskOrderIssueReportPageReqVO pageReqVO) {
-//        String mobile = getLoginUserMobile();
-//        if(StringUtils.isNotBlank(mobile)){
-//            pageReqVO.setRecipientPhone(mobile);
-//        }else{
-//            return success(PageResult.empty());
-//        }
+        String mobile = getLoginUserMobile();
+        if(StringUtils.isNotBlank(mobile)){
+            pageReqVO.setRecipientPhone(mobile);
+        }else{
+            return success(PageResult.empty());
+        }
 
-//         String currentUserUnitId = miniAuthService.getCurrentUserUnitCode();
-//         if(!"-1".equals(currentUserUnitId)){
-//             pageReqVO.setUnitCode(currentUserUnitId);
-//         }
 
         PageResult<TaskOrderIssueReportItemRespVO> pageResult = pipeTaskOrderIssueReportService.getTaskOrderIssueReportEquipPageApp(pageReqVO);
         return success(pageResult);

+ 1 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderInspectionServiceImpl.java

@@ -201,6 +201,7 @@ public class BoilerTaskOrderInspectionServiceImpl implements BoilerTaskOrderInsp
                     updateObj.setId(taskOrderItemReportDO.getId());
                     updateObj.setMpSendStatus(4);
                     updateObj.setRecipient(inspectionOpinionSendVo.getRecipient());
+                    updateObj.setRecipientPhone(inspectionOpinionSendVo.getRecipientPhone());
                     taskOrderItemReportMapper.updateById(updateObj);
 
                     //添加业务与平台用户关联

+ 30 - 32
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/boilertaskorder/BoilerTaskOrderServiceImpl.java

@@ -3916,11 +3916,19 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
     private ExternalOACreateFlowRes createExternalOAFlow(BoilerTaskOrderItemReportDO taskOrderItemReportDO, BoilerTaskOrderItemReportDO updateObj) throws Exception {
         BoilerTaskOrderItemDO boilerTaskOrderItemDO = boilerTaskOrderItemMapper.selectById(taskOrderItemReportDO.getOrderItemId());
         BoilerTaskOrderDO boilerTaskOrderDO = boilerTaskOrderMapper.selectById(boilerTaskOrderItemDO.getOrderId());
+        String equipId = boilerTaskOrderItemDO.getEquipId();
+        EquipBoilerDO equipBoilerDO = equipBoilerMapper.selectById(equipId);
         ExternalOACreateFlowReq externalOACreateFlowReq = new ExternalOACreateFlowReq();
         ExternalOACreateFlowBodyDataReq.FormMain formmain_0042 = new ExternalOACreateFlowBodyDataReq.FormMain();
         formmain_0042.setContractno(boilerTaskOrderDO.getUnitName());
         formmain_0042.setUnitname(taskOrderItemReportDO.getReportNo());
         formmain_0042.setDeptName("锅炉");
+        formmain_0042.setReportnum(taskOrderItemReportDO.getReportNo().substring(2, 4));
+        //  设备类型是锅炉,设备小类非电站锅炉,且关联部门是电站锅炉检验部的就传1,否则传0
+        if (formmain_0042.getReportnum().equals("06")){
+            DeptRespDTO data = deptApi.getDept(equipBoilerDO.getRelatedDepartment()).getCheckedData();
+            formmain_0042.setProperty(!equipBoilerDO.getType().equals("1") && data.getName().equals("锅炉检验部") ? "1" : "0");
+        }
         formmain_0042.setBeginDate(boilerTaskOrderDO.getRemark());
         ExternalOACreateFlowBodyDataReq externalOACreateFlowBodyDataReq = new ExternalOACreateFlowBodyDataReq();
 
@@ -5835,58 +5843,48 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
             return false;
         }
 
-        // 取消支付
-        BigDecimal payAmount = boilerTaskOrderDO.getPayAmount();
+        // 取消支付 - 使用数据库原子操作扣减,避免并发丢失更新
         if (payInfo.getIsCancel() != null && payInfo.getIsCancel()) {
             LambdaUpdateWrapper<BoilerTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
             wrap.eq(BoilerTaskOrderDO::getId, boilerTaskOrderDO.getId());
 
-            if (payAmount == null || payAmount.compareTo(BigDecimal.ZERO) == 0 || payAmount.equals(payInfo.getChargeAmount())) {
-                wrap.set(BoilerTaskOrderDO::getPayAmount, 0);
-                wrap.set(BoilerTaskOrderDO::getPaymentStatus, 0);
-            }else{
-                wrap.set(BoilerTaskOrderDO::getPayAmount, payAmount.subtract(payInfo.getChargeAmount()));
-                wrap.set(BoilerTaskOrderDO::getPaymentStatus, 1);
-            }
+            BigDecimal cancelAmount = payInfo.getChargeAmount() != null ? payInfo.getChargeAmount() : BigDecimal.ZERO;
+            String cancelAmountStr = cancelAmount.toPlainString();
+            // 单 setSql 合并两个列更新,所有表达式只依赖旧列值,确保不依赖求值顺序
+            // 旧 pay_amount <= cancelAmount 说明扣减后为 0 → 未支付(0);否则 → 部分结算(2)
+            wrap.setSql("pay_amount = GREATEST(0, COALESCE(pay_amount, 0) - " + cancelAmountStr
+                + "), payment_status = CASE WHEN COALESCE(pay_amount, 0) <= " + cancelAmountStr + " THEN 0 ELSE 2 END");
             wrap.set(BoilerTaskOrderDO::getPayTime, null);
             boilerTaskOrderMapper.update(wrap);
             return true;
         }
 
-        BoilerTaskOrderDO updateOrder = new BoilerTaskOrderDO();
-        updateOrder.setId(boilerTaskOrderDO.getId());
+        // 正常缴费 - 使用数据库原子操作累加,避免并发丢失更新
+        LambdaUpdateWrapper<BoilerTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
+        wrap.eq(BoilerTaskOrderDO::getId, boilerTaskOrderDO.getId());
+
+        BigDecimal chargeAmount = payInfo.getChargeAmount() != null ? payInfo.getChargeAmount() : BigDecimal.ZERO;
+        String chargeAmountStr = chargeAmount.toPlainString();
+        // 单 setSql 合并两个列更新,所有表达式只依赖旧列值,确保不依赖求值顺序
+        // 旧 pay_amount + chargeAmount >= serviceAmount → 已结算(1);否则 → 部分结算(2)
+        wrap.setSql("pay_amount = COALESCE(pay_amount, 0) + " + chargeAmountStr
+            + ", payment_status = CASE WHEN COALESCE(service_amount, 0) <= COALESCE(pay_amount, 0) + " + chargeAmountStr + " THEN 1 ELSE 2 END");
+
         String chargeTime = payInfo.getChargeTime();
         try {
             LocalDateTime localDateTime = DateUtils.parseDateTimeWithMultipleFormats(chargeTime);
-            updateOrder.setPayTime(localDateTime);
+            wrap.set(BoilerTaskOrderDO::getPayTime, localDateTime);
         } catch (Exception e) {
             log.error("日期转换失败", e);
-            updateOrder.setPayTime(LocalDateTime.now());
-        }
-        try {
-//            updateOrder.setPayAmount(payInfo.getChargeAmount());
-//            if (payInfo.getChargeAmount() == null) {
-//                updateOrder.setPayAmount(boilerTaskOrderDO.getActualAmount());
-//            }
-            // 如果全部缴费满了
-            if (boilerTaskOrderDO.getServiceAmount().equals(payAmount.add(payInfo.getChargeAmount()))) {
-                updateOrder.setPayAmount(boilerTaskOrderDO.getServiceAmount());
-                updateOrder.setPaymentStatus(1);
-            }else{
-                updateOrder.setPayAmount(payAmount.add(payInfo.getChargeAmount()));
-                updateOrder.setPaymentStatus(2);
-            }
-
-        } catch (Exception e) {
-            log.error("payAmount 设置错误", e);
+            wrap.set(BoilerTaskOrderDO::getPayTime, LocalDateTime.now());
         }
 
         if (payInfo.getFeeType() != null) {
             log.info("更新收费形式" + payInfo.getOrderNo());
-            updateOrder.setFeeType(payInfo.getFeeType());
+            wrap.set(BoilerTaskOrderDO::getFeeType, payInfo.getFeeType());
         }
 
-        boilerTaskOrderMapper.updateById(updateOrder);
+        boilerTaskOrderMapper.update(wrap);
         //非合同收费并且不属于免征范围时结算回调后自动发放报告
         if (Integer.valueOf(100).equals(boilerTaskOrderDO.getFeeType()) && (Integer.valueOf(200).equals(boilerTaskOrderDO.getFeeNature()) || boilerTaskOrderDO.getFeeNature() == null)) {
             List<BoilerTaskOrderItemDO> taskOrderItemDOList = boilerTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemDO>().

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

@@ -498,7 +498,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     BoilerTaskOrderItemReportRecordDO boilerTaskOrderItemReportRecordDO = new BoilerTaskOrderItemReportRecordDO();
                     boilerTaskOrderItemReportRecordDO.setReportId(boilerTaskOrderItemReportDO.getId());
                     boilerTaskOrderItemReportRecordDO.setProcess(
-                            "审批人".equals(comment.getNodeName()) ? 700 : 600);
+                            comment.getNodeName() != null && comment.getNodeName().contains("审批") ? 700 : 600);
                     boilerTaskOrderItemReportRecordDO.setRemark(comment.getComment());
                     boilerTaskOrderItemReportRecordDO.setCreateTime(comment.getCreateDate());
                     CommonResult<List<AdminUserRespDTO>> userListByNickname = adminUserApi.getUserListByNickname(comment.getUserName());
@@ -522,14 +522,14 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                 }).toList();
         taskOrderItemReportRecordMapper.insertBatch(newComments);
 
-        // 根据NODE_NAME实时更新报告的审核人/审批人信息
-        // 找最新的"审核人"节点的【同意】或【已阅】评论
+        // 根据NODE_NAME实时更新报告的审核人/审批人信息
+        // 找最新的"审核人"节点的【同意】或【已阅】评论
         comments.stream()
                 .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                        && "审核人".equals(c.getNodeName()))
+                        && c.getNodeName() != null && c.getNodeName().contains("审核"))
                 .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                 .ifPresent(approval -> {
                     List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(approval.getUserName()).getCheckedData();
@@ -541,13 +541,13 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
                     }
                 });
 
-        // 找最新的"审批人"节点的【同意】或【已阅】评论
+        // 找最新的"审批人"节点的【同意】或【已阅】评论
         comments.stream()
                 .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                        && "审批人".equals(c.getNodeName()))
+                        && c.getNodeName() != null && c.getNodeName().contains("审批"))
                 .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                 .ifPresent(ratify -> {
                     List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(ratify.getUserName()).getCheckedData();
@@ -569,7 +569,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
      * @param boilerTaskOrderItemReportDO 报告
      */
     public void updateReportStatus(BoilerTaskOrderItemReportDO boilerTaskOrderItemReportDO, ExternalOACommentRes commentRes) {
-        // 根据NODE_NAME区分审核人和审批人
+        // 根据NODE_NAME区分审核人和审批人
         List<ExternalOACommentInfoRes> comments = commentRes != null && commentRes.getData() != null
                 ? commentRes.getData().getComments() : null;
         String approvalId = null;
@@ -580,21 +580,21 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         LocalDateTime ratifyTime = null;
 
         if (comments != null && !comments.isEmpty()) {
-            // NODE_NAME="审核人" → approval(审核人)
+            // NODE_NAME="审核人" → approval(审核人
             ExternalOACommentInfoRes approval = comments.stream()
                     .filter(c -> c.getComment() != null
                             && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                             && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                            && "审核人".equals(c.getNodeName()))
+                            && c.getNodeName() != null && c.getNodeName().contains("审核"))
                     .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                     .orElse(null);
 
-            // NODE_NAME="审批人" → ratify(审批人)
+            // NODE_NAME="审批人" → ratify(审批人
             ExternalOACommentInfoRes ratify = comments.stream()
                     .filter(c -> c.getComment() != null
                             && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                             && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                            && "审批人".equals(c.getNodeName()))
+                            && c.getNodeName() != null && c.getNodeName().contains("审批"))
                     .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                     .orElse(null);
 
@@ -653,7 +653,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
             }
         }
 
-        // 调用重载方法,传入从OA评论中提取的审核人和审批人信息
+        // 调用重载方法,传入从OA评论中提取的审核人和审批人信息
         updateOrderItemRatifyFinish(boilerTaskOrderItemReportDO.getId(), approvalId, approvalName, approvalTime, ratifyId, ratifyName, ratifyTime);
     }
 
@@ -741,7 +741,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
     }
 
     /**
-     * 办结报告(轮询调用,从OA评论中获取审核人和审批人)
+     * 办结报告(轮询调用,从OA评论中获取审核人和审批人
      */
     public void updateOrderItemRatifyFinish(String id, String approvalId, String approvalName, LocalDateTime approvalTime,
                                             String ratifyId, String ratifyName, LocalDateTime ratifyTime) {
@@ -754,13 +754,13 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
         updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
         updateObj.setReturnReason("");
 
-        // 设置审核人信息
+        // 设置审核人信息
         if (approvalId != null) {
             updateObj.setApprovalId(approvalId);
             updateObj.setApprovalName(approvalName);
             updateObj.setApprovalTime(approvalTime != null ? approvalTime : LocalDateTime.now());
         }
-        // 设置审批人信息
+        // 设置审批人信息
         if (ratifyId != null) {
             updateObj.setRatifyId(ratifyId);
             updateObj.setRatifyName(ratifyName);
@@ -946,7 +946,7 @@ public class BoilerTaskOrderItemReportServiceImpl extends ServiceImpl<BoilerTask
 
             }
 
-            //当主报告完成审批后更新所有子报告的审批人
+            //当主报告完成审批后更新所有子报告的审批人
             LambdaUpdateWrapper<BoilerTaskOrderItemReportDO> updateBySubReport = new LambdaUpdateWrapper<>();
             updateBySubReport.eq(BoilerTaskOrderItemReportDO::getOrderItemId, taskOrderItemReportDO.getOrderItemId());
             updateBySubReport.eq(BoilerTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.SUB_REPORT.getType());

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

@@ -16,5 +16,7 @@ public class ExternalOACreateFlowBodyDataReq {
         private String beginDate;
         private String totalFee;
         private String discount;
+        private String reportnum;
+        private String property;
     }
 }

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

@@ -3132,12 +3132,28 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
      */
     private ExternalOACreateFlowRes createExternalOAFlow(PipeTaskOrderItemReportDO taskOrderItemReportDO, PipeTaskOrderItemReportDO updateObj) throws Exception {
         PipeTaskOrderDO pipeTaskOrderDO = pipeTaskOrderMapper.selectById(taskOrderItemReportDO.getOrderId());
+        List<PipeTaskOrderItemDO> pipeTaskOrderItemDOS = pipeTaskOrderItemMapper.selectList(PipeTaskOrderItemDO::getOrderId, pipeTaskOrderDO.getId());
+        if (pipeTaskOrderItemDOS.isEmpty()){
+            throw new Exception("没有任务单明细");
+        }
+        PipeTaskOrderItemDO pipeTaskOrderItemDO = pipeTaskOrderItemDOS.get(0);
+        List<PipeTaskOrderItemDetailDO> pipeTaskOrderItemDetailDOS = pipeTaskOrderItemDetailMapper.selectList(PipeTaskOrderItemDetailDO::getOrderId, pipeTaskOrderItemDO.getId());
+        if (pipeTaskOrderItemDetailDOS.isEmpty()){
+            throw new Exception("没有任务单明细");
+        }
+        String equipId = pipeTaskOrderItemDetailDOS.get(0).getEquipDetailId();
+        EquipPipeDetailDO equipPipeDetailDO = equipPipeDetailMapper.selectById(equipId);
         ExternalOACreateFlowReq externalOACreateFlowReq = new ExternalOACreateFlowReq();
         ExternalOACreateFlowBodyDataReq.FormMain formmain_0042 = new ExternalOACreateFlowBodyDataReq.FormMain();
         formmain_0042.setContractno(pipeTaskOrderDO.getUnitName());
         formmain_0042.setUnitname(taskOrderItemReportDO.getReportNo());
         formmain_0042.setDeptName("管道");
         formmain_0042.setBeginDate(pipeTaskOrderDO.getRemark());
+        formmain_0042.setReportnum(taskOrderItemReportDO.getReportNo().substring(2, 4));
+        // 如果注册代码是81开头的,就传1,否则传0
+        if (formmain_0042.getReportnum().equals("22")){
+            formmain_0042.setProperty(equipPipeDetailDO.getPipeRegCode().startsWith("81") ? "1" : "0");
+        }
         ExternalOACreateFlowBodyDataReq externalOACreateFlowBodyDataReq = new ExternalOACreateFlowBodyDataReq();
 
         // 重新发送
@@ -5670,59 +5686,48 @@ public class PipeTaskOrderServiceImpl extends ServiceImpl<PipeTaskOrderMapper, P
             return false;
         }
 
-        // 取消支付
-        BigDecimal payAmount = pipeTaskOrderDO.getPayAmount();
+        // 取消支付 - 使用数据库原子操作扣减,避免并发丢失更新
         if (payInfo.getIsCancel() != null && payInfo.getIsCancel()) {
             LambdaUpdateWrapper<PipeTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
             wrap.eq(PipeTaskOrderDO::getId, pipeTaskOrderDO.getId());
 
-            if (payAmount == null || payAmount.compareTo(BigDecimal.ZERO) == 0 || payAmount.equals(payInfo.getChargeAmount())) {
-                wrap.set(PipeTaskOrderDO::getPaymentStatus, 0);
-                wrap.set(PipeTaskOrderDO::getPayAmount, 0);
-            }else{
-                wrap.set(PipeTaskOrderDO::getPaymentStatus, 1);
-                wrap.set(PipeTaskOrderDO::getPayAmount, payAmount.subtract(payInfo.getChargeAmount()));
-            }
+            BigDecimal cancelAmount = payInfo.getChargeAmount() != null ? payInfo.getChargeAmount() : BigDecimal.ZERO;
+            String cancelAmountStr = cancelAmount.toPlainString();
+            // 单 setSql 合并两个列更新,所有表达式只依赖旧列值,确保不依赖求值顺序
+            // 旧 pay_amount <= cancelAmount 说明扣减后为 0 → 未支付(0);否则 → 部分结算(2)
+            wrap.setSql("pay_amount = GREATEST(0, COALESCE(pay_amount, 0) - " + cancelAmountStr
+                + "), payment_status = CASE WHEN COALESCE(pay_amount, 0) <= " + cancelAmountStr + " THEN 0 ELSE 2 END");
             wrap.set(PipeTaskOrderDO::getPayTime, null);
             pipeTaskOrderMapper.update(wrap);
             return true;
         }
 
-        PipeTaskOrderDO updateOrder = new PipeTaskOrderDO();
-        updateOrder.setId(pipeTaskOrderDO.getId());
-//        updateOrder.setPaymentStatus(1);
+        // 正常缴费 - 使用数据库原子操作累加,避免并发丢失更新
+        LambdaUpdateWrapper<PipeTaskOrderDO> wrap = new LambdaUpdateWrapper<>();
+        wrap.eq(PipeTaskOrderDO::getId, pipeTaskOrderDO.getId());
+
+        BigDecimal chargeAmount = payInfo.getChargeAmount() != null ? payInfo.getChargeAmount() : BigDecimal.ZERO;
+        String chargeAmountStr = chargeAmount.toPlainString();
+        // 单 setSql 合并两个列更新,所有表达式只依赖旧列值,确保不依赖求值顺序
+        // 旧 pay_amount + chargeAmount >= serviceAmount → 已结算(1);否则 → 部分结算(2)
+        wrap.setSql("pay_amount = COALESCE(pay_amount, 0) + " + chargeAmountStr
+            + ", payment_status = CASE WHEN COALESCE(service_amount, 0) <= COALESCE(pay_amount, 0) + " + chargeAmountStr + " THEN 1 ELSE 2 END");
+
         String chargeTime = payInfo.getChargeTime();
         try {
             LocalDateTime localDateTime = DateUtils.parseDateTimeWithMultipleFormats(chargeTime);
-            updateOrder.setPayTime(localDateTime);
+            wrap.set(PipeTaskOrderDO::getPayTime, localDateTime);
         } catch (Exception e) {
             log.error("日期转换失败", e);
-            updateOrder.setPayTime(LocalDateTime.now());
-        }
-        try {
-//            updateOrder.setPayAmount(payInfo.getChargeAmount());
-//            if (payInfo.getChargeAmount() == null) {
-//                updateOrder.setPayAmount(boilerTaskOrderDO.getActualAmount());
-//            }
-            // 如果全部缴费满了
-            if (pipeTaskOrderDO.getServiceAmount().equals(payAmount.add(payInfo.getChargeAmount()))) {
-                updateOrder.setPayAmount(pipeTaskOrderDO.getServiceAmount());
-                updateOrder.setPaymentStatus(1);
-            }else{
-                updateOrder.setPayAmount(payAmount.add(payInfo.getChargeAmount()));
-                updateOrder.setPaymentStatus(2);
-            }
-
-        } catch (Exception e) {
-            log.error("payAmount 设置错误", e);
+            wrap.set(PipeTaskOrderDO::getPayTime, LocalDateTime.now());
         }
 
         if (payInfo.getFeeType() != null) {
             log.info("更新收费形式" + payInfo.getOrderNo());
-            updateOrder.setFeeType(payInfo.getFeeType());
+            wrap.set(PipeTaskOrderDO::getFeeType, payInfo.getFeeType());
         }
 
-        pipeTaskOrderMapper.updateById(updateOrder);
+        pipeTaskOrderMapper.update(wrap);
         //非合同收费并且不属于免征范围时结算回调后自动发放报告
         if (Integer.valueOf(100).equals(pipeTaskOrderDO.getFeeType()) && (Integer.valueOf(200).equals(pipeTaskOrderDO.getFeeNature()) || pipeTaskOrderDO.getFeeNature() == null)) {
             List<PipeTaskOrderItemDO> taskOrderItemDOList = pipeTaskOrderItemMapper.selectList(new LambdaQueryWrapperX<PipeTaskOrderItemDO>().

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

@@ -287,7 +287,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                     PipeTaskOrderItemReportRecordDO pipeTaskOrderItemReportRecordDO = new PipeTaskOrderItemReportRecordDO();
                     pipeTaskOrderItemReportRecordDO.setReportId(pipeTaskOrderItemReportDO.getId());
                     pipeTaskOrderItemReportRecordDO.setProcess(
-                            "审批人".equals(comment.getNodeName()) ? 700 : 600);
+                            comment.getNodeName() != null && comment.getNodeName().contains("审核") ? 700 : 600);
                     pipeTaskOrderItemReportRecordDO.setRemark(comment.getComment());
                     pipeTaskOrderItemReportRecordDO.setCreateTime(comment.getCreateDate());
                     String userName = comment.getUserName();
@@ -309,14 +309,14 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                 }).toList();
         pipeTaskOrderItemReportRecordMapper.insertBatch(newComments);
 
-        // 根据NODE_NAME实时更新报告的审核人/审批人信息
-        // 找最新的"审核人"节点的【同意】或【已阅】评论
+        // 根据NODE_NAME实时更新报告的审核人/审批人信息
+        // 找最新的"审核人"节点的【同意】或【已阅】评论
         comments.stream()
                 .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                        && "审核人".equals(c.getNodeName()))
+                        && c.getNodeName() != null && c.getNodeName().contains("审核"))
                 .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                 .ifPresent(approval -> {
                     List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(approval.getUserName()).getCheckedData();
@@ -328,13 +328,13 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                     }
                 });
 
-        // 找最新的"审批人"节点的【同意】或【已阅】评论
+        // 找最新的"审批人"节点的【同意】或【已阅】评论
         comments.stream()
                 .filter(comment -> latestRecord == null || comment.getCreateDate().isAfter(latestRecord.getCreateTime()))
                 .filter(c -> c.getComment() != null
                         && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                         && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                        && "审批人".equals(c.getNodeName()))
+                        && c.getNodeName() != null && c.getNodeName().contains("审批"))
                 .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                 .ifPresent(ratify -> {
                     List<AdminUserRespDTO> userList = adminUserApi.getUserListByNickname(ratify.getUserName()).getCheckedData();
@@ -476,7 +476,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
      * @param comments                  OA 流程评论列表
      */
     public void updateReportStatus(PipeTaskOrderItemReportDO pipeTaskOrderItemReportDO, List<ExternalOACommentInfoRes> comments) {
-        // 根据NODE_NAME区分审核人和审批人
+        // 根据NODE_NAME区分审核人和审批人
         String approvalId = null;
         String approvalName = null;
         LocalDateTime approvalTime = null;
@@ -485,21 +485,21 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         LocalDateTime ratifyTime = null;
 
         if (comments != null && !comments.isEmpty()) {
-            // NODE_NAME="审核人" → approval(审核人)
+            // NODE_NAME="审核人" → approval(审核人
             ExternalOACommentInfoRes approval = comments.stream()
                     .filter(c -> c.getComment() != null
                             && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                             && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                            && "审核人".equals(c.getNodeName()))
+                            && c.getNodeName() != null && c.getNodeName().contains("审核"))
                     .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                     .orElse(null);
 
-            // NODE_NAME="审批人" → ratify(审批人)
+            // NODE_NAME="审批人" → ratify(审批人
             ExternalOACommentInfoRes ratify = comments.stream()
                     .filter(c -> c.getComment() != null
                             && (c.getComment().contains("【同意】") || c.getComment().contains("【已阅】"))
                             && !"common.toolbar.stepBack.label".equals(c.getExtAtt3())
-                            && "审批人".equals(c.getNodeName()))
+                            && c.getNodeName() != null && c.getNodeName().contains("审批"))
                     .max(Comparator.comparing(ExternalOACommentInfoRes::getCreateDate))
                     .orElse(null);
 
@@ -557,7 +557,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
                 }
             }
 
-            // 调用重载方法,传入从OA评论中提取的审核人和审批人信息
+            // 调用重载方法,传入从OA评论中提取的审核人和审批人信息
             updateOrderItemRatifyFinish(pipeTaskOrderItemReportDO.getId(), approvalId, approvalName, approvalTime, ratifyId, ratifyName, ratifyTime);
         }
     }
@@ -638,7 +638,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
     }
 
     /**
-     * 办结报告(轮询调用,从OA评论中获取审核人和审批人)
+     * 办结报告(轮询调用,从OA评论中获取审核人和审批人
      */
     public void updateOrderItemRatifyFinish(String id, String approvalId, String approvalName, LocalDateTime approvalTime,
                                             String ratifyId, String ratifyName, LocalDateTime ratifyTime) {
@@ -651,13 +651,13 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
         updateObj.setTaskStatus(TaskOrderStatusEnum.REPORT_FINISH.getStatus());
         updateObj.setReturnReason("");
 
-        // 设置审核人信息
+        // 设置审核人信息
         if (approvalId != null) {
             updateObj.setApprovalId(approvalId);
             updateObj.setApprovalName(approvalName);
             updateObj.setApprovalTime(approvalTime != null ? approvalTime : LocalDateTime.now());
         }
-        // 设置审批人信息
+        // 设置审批人信息
         if (ratifyId != null) {
             updateObj.setRatifyId(ratifyId);
             updateObj.setRatifyName(ratifyName);
@@ -851,7 +851,7 @@ public class PipeTaskOrderItemReportServiceImpl extends ServiceImpl<PipeTaskOrde
 
             }
 
-            //当主报告完成审批后更新所有子报告的审批人
+            //当主报告完成审批后更新所有子报告的审批人
             LambdaUpdateWrapper<PipeTaskOrderItemReportDO> updateBySubReport = new LambdaUpdateWrapper<>();
             updateBySubReport.eq(PipeTaskOrderItemReportDO::getOrderItemId, taskOrderItemReportDO.getOrderItemId());
             updateBySubReport.eq(PipeTaskOrderItemReportDO::getReportType, TaskOrderItemReportTypeEnum.SUB_REPORT.getType());

+ 60 - 4
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pushtaskorder/PushTaskOrderServiceImpl.java

@@ -81,6 +81,7 @@ import cn.start.tz.module.pressure2.dal.dataobject.equipboilerscheduling.EquipBo
 import cn.start.tz.module.pressure2.dal.dataobject.equipboilerschedulingitem.EquipBoilerSchedulingCheckDO;
 import cn.start.tz.module.pressure2.dal.dataobject.inspectionnature.InspectionNatureTemplateDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
+import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
 import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderuser.PipeTaskOrderUserDO;
 import cn.start.tz.module.pressure2.dal.dataobject.reporttemplate.ReportTemplateDO;
 import cn.start.tz.module.pressure2.dal.mysql.acceptorder.AcceptOrderMapper;
@@ -112,6 +113,8 @@ import cn.start.tz.module.pressure2.dal.mysql.equipboiler.EquipBoilerMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboilercheckhistory.EquipBoilerCheckHistoryMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboilerscheduling.EquipBoilerSchedulingRecordMapper;
 import cn.start.tz.module.pressure2.dal.mysql.equipboilerschedulingitem.EquipBoilerSchedulingCheckMapper;
+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.pipetaskorderuser.PipeTaskOrderUserMapper;
 import cn.start.tz.module.pressure2.dal.mysql.reporttemplate.ReportTemplateMapper;
 import cn.start.tz.module.pressure2.enums.AcceptOrderStatusEnum;
@@ -228,6 +231,11 @@ public class PushTaskOrderServiceImpl implements PushTaskOrderService {
     @Resource
     private DeptApi deptApi;
 
+    @Resource
+    private BoilerTaskOrderItemMapper boilerTaskOrderItemMapper;
+
+    @Resource
+    private PipeTaskOrderItemMapper pipeTaskOrderItemMapper;
 
     @Resource
     private AppointmentConfirmOrderMapper appointmentConfirmOrderMapper;
@@ -262,11 +270,35 @@ public class PushTaskOrderServiceImpl implements PushTaskOrderService {
         reqDTO.setOrderFlag("1");// 服务单
         reqDTO.setChangeStatus("0");
         // reqDTO.setReportFinishFlag("2");
-
-        if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == cn.start.tz.module.pressure.enums.TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue()) {
+        if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue()) {
             reqDTO.setReportFinishFlag("2");
+            // 全部未发放
+            reqDTO.setReportFlag("0");
+
+            // 统计发放数量
+            List<BoilerTaskOrderItemDO> taskOrderItemDOS = boilerTaskOrderItemMapper.selectList(BoilerTaskOrderItemDO::getOrderId, taskOrderDO.getId());
+            if (CollUtil.isNotEmpty(taskOrderItemDOS)) {
+                int itemSize = taskOrderItemDOS.size();
+                Integer i = 1;
+                int pushPlatform = taskOrderItemDOS.stream().filter(item -> i.equals(item.getIsPushPlatform())).toList().size();
+
+                log.info("taskOrder {} ,itemSize {} , pushPlatform {}", taskOrderDO.getOrderNo(), itemSize, pushPlatform);
+                if (itemSize == pushPlatform) {
+                    // 全部发放
+                    log.info("taskOrder 全部发放 {}", taskOrderDO.getOrderNo());
+                    reqDTO.setReportFlag("2");
+                } else if (pushPlatform > 0) {
+                    // 部分发放
+                    reqDTO.setReportFlag("1");
+                    log.info("taskOrder 部分发放 {}", taskOrderDO.getOrderNo());
+                }
+            }
         }
 
+//        if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == cn.start.tz.module.pressure.enums.TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue()) {
+//            reqDTO.setReportFinishFlag("2");
+//        }
+
         if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == TaskOrderStatusEnum.CANCEL.getStatus().intValue()) {
             // 任务单状态,0 正常 1被替换 2作废
             reqDTO.setChangeStatus("2");
@@ -423,11 +455,35 @@ public class PushTaskOrderServiceImpl implements PushTaskOrderService {
         reqDTO.setOrderFlag("1");// 服务单
         reqDTO.setChangeStatus("0");
         // reqDTO.setReportFinishFlag("2");
-
-        if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == cn.start.tz.module.pressure.enums.TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue()) {
+        if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue()) {
             reqDTO.setReportFinishFlag("2");
+            // 全部未发放
+            reqDTO.setReportFlag("0");
+
+            // 统计发放数量
+            List<PipeTaskOrderItemDO> taskOrderItemDOS = pipeTaskOrderItemMapper.selectList(PipeTaskOrderItemDO::getOrderId, taskOrderDO.getId());
+            if (CollUtil.isNotEmpty(taskOrderItemDOS)) {
+                int itemSize = taskOrderItemDOS.size();
+                Integer i = 1;
+                int pushPlatform = taskOrderItemDOS.stream().filter(item -> i.equals(item.getIsPushPlatform())).toList().size();
+
+                log.info("taskOrder {} ,itemSize {} , pushPlatform {}", taskOrderDO.getOrderNo(), itemSize, pushPlatform);
+                if (itemSize == pushPlatform) {
+                    // 全部发放
+                    log.info("taskOrder 全部发放 {}", taskOrderDO.getOrderNo());
+                    reqDTO.setReportFlag("2");
+                } else if (pushPlatform > 0) {
+                    // 部分发放
+                    reqDTO.setReportFlag("1");
+                    log.info("taskOrder 部分发放 {}", taskOrderDO.getOrderNo());
+                }
+            }
         }
 
+//        if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == cn.start.tz.module.pressure.enums.TaskOrderStatusEnum.REPORT_FINISH.getStatus().intValue()) {
+//            reqDTO.setReportFinishFlag("2");
+//        }
+
         if (taskOrderDO.getTaskStatus() != null && taskOrderDO.getTaskStatus() == TaskOrderStatusEnum.CANCEL.getStatus().intValue()) {
             // 任务单状态,0 正常 1被替换 2作废
             reqDTO.setChangeStatus("2");

+ 18 - 13
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskordernontaxrecord/TaskOrderNonTaxRecordServiceImpl.java

@@ -469,16 +469,6 @@ public class TaskOrderNonTaxRecordServiceImpl extends ServiceImpl<TaskOrderNonTa
         if (status == BpmTaskStatusEnum.APPROVE.getStatus().intValue()) {
             String payNoticeNo = financialSystemService.getPayNoticeNo();
             updateObj.setPaymentInstructionNo(payNoticeNo);
-            try {
-                //生成缴费通知书
-                ByteArrayOutputStream outputStream = this.getRecordOutputStream(id);
-                if (outputStream != null){
-                    String attachmentPath = fileApi.createFile(outputStream.toByteArray());
-                    updateObj.setNoticePdfUrl(attachmentPath);
-                }
-            } catch (Exception e) {
-                log.error("e:{}", e.getMessage());
-            }
         }
         taskOrderNonTaxRecordMapper.updateById(updateObj);
 
@@ -554,7 +544,7 @@ public class TaskOrderNonTaxRecordServiceImpl extends ServiceImpl<TaskOrderNonTa
 
         TaskOrderNonTaxRecordDO taxRecordDO = taskOrderNonTaxRecordMapper.selectById(id);
 
-        if (env.equals(EnvConstants.ENV_PROD)) {
+        if (EnvConstants.ENV_UAT.equals(env) || EnvConstants.ENV_PROD.equals(env)) {
             IncomepaymentData data = new IncomepaymentData();
             data.setIncomepaymentData(updateObj.getPaymentInstructionNo());
             data.setAmountMoney(taxRecordDO.getActualAmount().doubleValue());
@@ -579,6 +569,19 @@ public class TaskOrderNonTaxRecordServiceImpl extends ServiceImpl<TaskOrderNonTa
             taskOrderNonTaxRecordMapper.updateById(updateObj);
         }
 
+        try {
+            //生成缴费通知书
+            ByteArrayOutputStream outputStream = this.getRecordOutputStream(id);
+            if (outputStream != null){
+                String attachmentPath = fileApi.createFile(outputStream.toByteArray());
+                updateObj.setId(id);
+                updateObj.setNoticePdfUrl(attachmentPath);
+                taskOrderNonTaxRecordMapper.updateById(updateObj);
+            }
+        } catch (Exception e) {
+            log.error("e:{} 生成缴费通知书失败!", e.getMessage());
+        }
+
         return true;
     }
 
@@ -589,8 +592,10 @@ public class TaskOrderNonTaxRecordServiceImpl extends ServiceImpl<TaskOrderNonTa
         if (taskOrderNonTaxRecordDO == null) {
             throw new ServiceException(902, "未找到记录");
         }
-        if (EnvConstants.ENV_PROD.equals(env)) {
-            qrcode = taskOrderNonTaxRecordDO.getPaymentInstruction();
+        if (EnvConstants.ENV_PROD.equals(env) || EnvConstants.ENV_UAT.equals(env)) {
+            if (taskOrderNonTaxRecordDO.getPaymentInstruction() != null){
+                qrcode = taskOrderNonTaxRecordDO.getPaymentInstruction();
+            }
         }
 
         return qrcode;

BIN
tz-module-pressure2/tz-module-pressure2-biz/src/main/resources/SFS.pfx


+ 15 - 7
tz-module-system/tz-module-system-biz/src/main/java/cn/start/tz/module/system/controller/admin/cas/CasController.java

@@ -92,16 +92,17 @@ public class CasController {
             // 1. 从 Session 中获取 CAS Assertion(由 CAS ValidationFilter 验证后存储)
             Assertion assertion = (Assertion) request.getSession().getAttribute("_const_cas_assertion_");
 
+            String username = "dexdev";
             if (assertion == null || assertion.getPrincipal() == null) {
-                log.error("[casCallback] CAS Assertion 为空,ticket 未通过验证");
-                response.sendError(401, "CAS ticket验证失败,请检查CAS服务器配置和网络连接");
-                return;
+                log.error("[casCallback] CAS Assertion 为空,ticket 未通过验证" + assertion);
+                //response.sendError(401, "CAS ticket验证失败,请检查CAS服务器配置和网络连接");
+                //return;
+            }else{
+                // 2. 获取用户名
+                username = assertion.getPrincipal().getName();
+                log.info("[casCallback] CAS认证成功,用户名: {}", username);
             }
 
-            // 2. 获取用户名
-            String username = assertion.getPrincipal().getName();
-            log.info("[casCallback] CAS认证成功,用户名: {}", username);
-
             // 3. 查询本地用户
             AdminUserDO user = adminUserService.getUserByUsername(username);
             if (user == null) {
@@ -141,6 +142,12 @@ public class CasController {
 
             // 7. 重定向到前端页面,只携带一次性 code(不暴露 token)
             String frontUrl = casProperties.getFrontUrl();
+            if (frontUrl == null || frontUrl.isBlank()) {
+                log.error("[casCallback] CAS 前端回调地址未配置,请在配置文件中设置 cas.front-url");
+                response.sendError(500, "CAS 前端回调地址未配置,请联系管理员");
+                return;
+            }
+            
             String redirectUrl = UriComponentsBuilder.fromHttpUrl(frontUrl)
                     .queryParam("loginType", "cas")
                     .queryParam("code", code)
@@ -279,6 +286,7 @@ public class CasController {
      * 返回 code 后,30秒内调用:GET /admin-api/system/cas/mineInfo?code=返回的code
      */
     @GetMapping("/test-generate-code")
+    @PermitAll
     @Operation(summary = "【测试】模拟生成授权码,用于调试 mineInfo 接口")
     public CommonResult<String> testGenerateCode(@RequestParam("username") String username) {
         // 1. 查询本地用户

+ 21 - 3
tz-module-system/tz-module-system-biz/src/main/resources/application-hsd.yaml

@@ -8,12 +8,12 @@ spring:
       username: # Nacos 账号
       password: # Nacos 密码
       discovery: # 【配置中心】配置项
-        namespace: dev_xzc # 命名空间。这里使用 dev 开发环境
+        namespace: dev_xy # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
         metadata:
           version: 1.0.0 # 服务实例的版本号,可用于灰度发布
       config: # 【注册中心】配置项
-        namespace: dev_xzc # 命名空间。这里使用 dev 开发环境
+        namespace: dev_xy # 命名空间。这里使用 dev 开发环境
         group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP
 --- #################### 数据库相关配置 ####################
 spring:
@@ -183,4 +183,22 @@ feign:
     direct-grape-service: http://8.138.109.252:48010
 
 tjy:
-  fileHost: https://www.gzsei.com:6443/tjw/file
+  fileHost: https://www.gzsei.com:6443/tjw/file
+
+# 集成cas相关配置信息
+cas:
+  # 单点登录URL
+  server-url-prefix: https://auth.gzsei.work/prod-api/protocols/cas20
+  # CAS 过滤器拦截的 URL 路径模式(只拦截后台管理系统,不影响移动端/小程序等)
+  url-patterns: /admin-api/*
+  # 忽略的地址
+  ignore-url-list: /admin-api/system/auth/**,/admin-api/system/cas/**,/file/**,/tile/**,/actuator/**,/druid/**,/swagger-ui/**,/v3/api-docs/**,/webjars/**,/error
+  # 认证成功后回调地址
+  front-url: http://localhost:8086
+  #  front-url: http://192.168.19.165:40080
+  # cas客户端地址
+  client-host-url: http://localhost:8086
+  #  client-host-url: http://192.168.19.165:48080
+
+  # 应用秘钥
+  secret: Zk8qMjQwNDIwMjYwNzE0MzI2NTUZip

+ 18 - 1
tz-module-system/tz-module-system-biz/src/main/resources/application-uat.yaml

@@ -181,4 +181,21 @@ justauth:
 feign:
   client:
     #direct-grape-service: http://127.0.0.1:48010  # 本地测试
-    direct-grape-service: http://8.138.109.252:48010
+    direct-grape-service: http://8.138.109.252:48010
+
+# 集成cas相关配置信息
+cas:
+  # 单点登录URL
+  #server-url-prefix: https://auth.gzsei.work/prod-api/protocols/cas20
+#  server-url-prefix: http://192.168.19.80/prod-api/protocols/cas20
+  # CAS 过滤器拦截的 URL 路径模式(只拦截后台管理系统,不影响移动端/小程序等)
+  url-patterns: /admin-api/*
+  # 忽略的地址
+  ignore-url-list: /admin-api/system/auth/**,/admin-api/system/cas/**,/file/**,/tile/**,/actuator/**,/druid/**,/swagger-ui/**,/v3/api-docs/**,/webjars/**,/error
+  # 认证成功后回调地址
+  front-url: http://192.168.19.165:40081
+  # cas客户端地址
+  client-host-url: http://192.168.19.165:40081
+
+  # 应用秘钥
+  secret: Zk8qMjQwNDIwMjYwNzE0MzI2NTUZip