Ver Fonte

定时查询非税记录

xy há 1 semana atrás
pai
commit
79cbba7e00

+ 58 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/framework/cron/UpdateNonTaxPaymentStatusJob.java

@@ -0,0 +1,58 @@
+package cn.start.tz.module.pressure2.framework.cron;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.start.tz.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.start.tz.module.infra.api.config.ConfigApi;
+import cn.start.tz.module.pressure2.dal.dataobject.boilertaskorder.BoilerTaskOrderDO;
+import cn.start.tz.module.pressure2.dal.dataobject.taskordernontaxrecord.TaskOrderNonTaxRecordDO;
+import cn.start.tz.module.pressure2.dal.dataobject.taskordernontaxrecorditem.TaskOrderNonTaxRecordItemDO;
+import cn.start.tz.module.pressure2.service.synchronization.SynchronizationService;
+import cn.start.tz.module.pressure2.service.taskordernontaxrecord.TaskOrderNonTaxRecordService;
+import cn.start.tz.module.pressure2.service.thirdparty.financialsystem.vo.IncomepaymentData;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 设备更新定时任务类
+ * 负责定期执行设备数据同步任务,包括锅炉和管道设备数据的更新
+ */
+@Component
+@Slf4j
+public class UpdateNonTaxPaymentStatusJob {
+
+    @Resource
+    private TaskOrderNonTaxRecordService taskOrderNonTaxRecordService;
+
+    @Resource
+    ConfigApi configApi;
+    /**
+     * 非税缴费状态查询定时任务
+     * 定时查询非税记录的缴费状态并更新 30分钟执行一次
+     */
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void execute() {
+        String enable = configApi.getConfigValueByKey("is_enable_update_no_tax_status").getCheckedData();
+        if (!"true".equals(enable)) {
+            return;
+        }
+        log.info("========== 开始执行非税缴费状态查询定时任务 ==========");
+        long startTime = System.currentTimeMillis();
+
+        try {
+            taskOrderNonTaxRecordService.queryAndUpdatePaymentStatus();
+        } catch (Exception e) {
+            log.error("非税缴费状态查询任务执行异常", e);
+        }
+
+        long endTime = System.currentTimeMillis();
+        log.info("========== 非税缴费状态查询任务完成,总耗时: {}ms ==========", endTime - startTime);
+    }
+
+}

+ 1 - 1
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/mq/consumer/FsPayNoticeConsumer.java

@@ -20,7 +20,7 @@ import org.springframework.stereotype.Component;
 @Component
 @RocketMQMessageListener(
         topic = "tjy_fs_pay_notice",
-        consumerGroup = "tjy_fs_pay_notice" + "_" + "${spring.profiles.active}"
+        consumerGroup = "tjy_fs_pay_notice" + "_pressure2_" + "${spring.profiles.active}"
 )
 @Slf4j
 public class FsPayNoticeConsumer implements RocketMQListener<FsPayNoticeMessage> {

+ 2 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/taskordernontaxrecord/TaskOrderNonTaxRecordService.java

@@ -80,4 +80,6 @@ public interface TaskOrderNonTaxRecordService extends IService<TaskOrderNonTaxRe
     Boolean sendNonTaxPaymentEmail(String id, String email);
 
     Boolean nonTaxPayStatus(NonTaxPayStatusDTO nonTaxPayStatusDTO);
+
+    void queryAndUpdatePaymentStatus();
 }

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

@@ -869,4 +869,137 @@ public class TaskOrderNonTaxRecordServiceImpl extends ServiceImpl<TaskOrderNonTa
 
         return true;
     }
+
+    /**
+     * 查询并更新缴费状态
+     */
+    @Override
+    public void queryAndUpdatePaymentStatus() {
+
+        if(EnvConstants.ENV_UAT.equals(env) || EnvConstants.ENV_PROD.equals(env)){
+
+            log.info("开始查询并更新非税缴费状态");
+
+            // 查询条件:status=200 且 payStatus=100
+            LambdaQueryWrapperX<TaskOrderNonTaxRecordDO> queryWrapper = new LambdaQueryWrapperX<>();
+            queryWrapper.eq(TaskOrderNonTaxRecordDO::getStatus, 200)
+                    .eq(TaskOrderNonTaxRecordDO::getPayStatus, 100)
+                    .isNotNull(TaskOrderNonTaxRecordDO::getPaymentInstructionNo);
+
+            // 查询符合条件的记录
+            List<TaskOrderNonTaxRecordDO> records = taskOrderNonTaxRecordMapper.selectList(queryWrapper);
+
+            if (CollUtil.isEmpty(records)) {
+                log.info("没有需要查询缴费状态的记录");
+                return;
+            }
+
+            log.info("查询到 {} 条需要更新缴费状态的记录", records.size());
+
+            int successCount = 0;
+            int failCount = 0;
+            int paidCount = 0;
+
+            // 遍历每条记录,查询财务系统缴费状态
+            for (TaskOrderNonTaxRecordDO record : records) {
+                try {
+                    String paymentInstructionNo = record.getPaymentInstructionNo();
+
+                    if (paymentInstructionNo == null || paymentInstructionNo.trim().isEmpty()) {
+                        log.warn("记录 {} 的缴费通知书号为空,跳过", record.getId());
+                        failCount++;
+                        continue;
+                    }
+
+                    log.info("正在查询缴费通知书号 {} 的缴费状态", paymentInstructionNo);
+
+                    // 调用财务系统接口查询缴费状态
+                    // tag=2:按单位编码和缴款码查询
+                    IncomepaymentData queryData = new IncomepaymentData();
+                    queryData.setIncomepaymentData(paymentInstructionNo);
+                    IncomepaymentData result = financialSystemService.queryFinancialOutFeeInfo("2", queryData);
+
+                    if (result == null) {
+                        log.warn("查询缴费通知书号 {} 返回结果为空", paymentInstructionNo);
+                        failCount++;
+                        continue;
+                    }
+
+                    String paynoteStatus = result.getPaynoteStatus();
+                    log.info("缴费通知书号 {} 的状态: {}", paymentInstructionNo, paynoteStatus);
+
+                    // 判断是否已缴款(PaynoteStatus=3)
+                    if ("3".equals(paynoteStatus)) {
+                        log.info("缴费通知书号 {} 已缴款,开始更新记录", paymentInstructionNo);
+
+                        // 更新记录的缴费状态为已缴款(200)
+                        TaskOrderNonTaxRecordDO updateRecord = new TaskOrderNonTaxRecordDO();
+                        updateRecord.setId(record.getId());
+                        updateRecord.setPayStatus(200); // 已缴款
+
+                        // 设置缴费日期
+                        LocalDateTime payTime = result.getPayTime();
+                        if (payTime != null) {
+                            updateRecord.setPayDate(payTime);
+                        }else{
+                            payTime = LocalDateTime.now();
+                            updateRecord.setPayDate(payTime);
+                        }
+                        taskOrderNonTaxRecordMapper.updateById(updateRecord);
+
+                        log.info("成功更新记录 {} 的缴费状态为已缴款", record.getId());
+
+                        // 查询关联的task_order_non_tax_record_item记录
+                        LambdaQueryWrapperX<TaskOrderNonTaxRecordItemDO> itemQueryWrapper = new LambdaQueryWrapperX<>();
+                        itemQueryWrapper.eq(TaskOrderNonTaxRecordItemDO::getRecordId, record.getId());
+                        List<TaskOrderNonTaxRecordItemDO> itemList = taskOrderNonTaxRecordItemMapper.selectList(itemQueryWrapper);
+
+                        if (CollUtil.isNotEmpty(itemList)) {
+                            log.info("记录 {} 关联了 {} 个任务单", record.getId(), itemList.size());
+
+                            // 更新关联的task_order的支付状态
+                            for (TaskOrderNonTaxRecordItemDO item : itemList) {
+                                String orderId = item.getOrderId();
+                                if (orderId != null && !orderId.trim().isEmpty()) {
+                                    try {
+                                        BoilerTaskOrderDO taskOrder = taskOrderMapper.selectById(orderId);
+                                        if (taskOrder != null) {
+                                            // 更新任务单的缴费状态
+                                            BoilerTaskOrderDO updateTaskOrder = new BoilerTaskOrderDO();
+                                            updateTaskOrder.setId(orderId);
+                                            updateTaskOrder.setPaymentStatus(1); // 1=已缴费
+                                            updateTaskOrder.setPayTime(payTime);
+
+                                            taskOrderMapper.updateById(updateTaskOrder);
+                                            log.info("成功更新任务单 {} 的缴费状态为已缴费", orderId);
+                                        } else {
+                                            log.warn("任务单 {} 不存在", orderId);
+                                        }
+                                    } catch (Exception e) {
+                                        log.error("更新任务单 {} 缴费状态时发生异常: {}", orderId, e.getMessage(), e);
+                                    }
+                                }
+                            }
+                        } else {
+                            log.info("记录 {} 没有关联的任务单", record.getId());
+                        }
+
+                        paidCount++;
+                        successCount++;
+                    } else {
+                        log.debug("缴费通知书号 {} 尚未缴款,当前状态: {}", paymentInstructionNo, paynoteStatus);
+                        successCount++;
+                    }
+
+                } catch (Exception e) {
+                    log.error("处理记录 {} 时发生异常: {}", record.getId(), e.getMessage(), e);
+                    failCount++;
+                }
+            }
+
+            log.info("非税缴费状态查询完成。成功: {}, 已缴款: {}, 失败: {}", successCount, paidCount, failCount);
+        }
+
+    }
+
 }