20260529,日常开发-查老数据全量更新闭坑

问题描述

中午休息的时候,问题反馈群里说任务看不到。懒得理他,下午,还是优先看了这个问题。反正,还是老问题,列表查询的时候,有个字段明明应该为空,这样就查不到,偏偏有值,这样列表看不到。无法审核,检测师还在催。

问题解决

列表查询逻辑:待审核,查询审核结果为空的,此处没毛病。

java 复制代码
else if(vo.getPageType().equals(InsurenceAuditEnum.PageType._待审核.getKey())){
WHERE("B.status not in (10060, 10090, 10091, 10070, 10041, 10049)");
WHERE("A.status = 2 and A.result is null ");

驳回的时候,有这段代码,明明置空了,但是又单独注释了。不知道原因是什么,不敢贸然打开注释。注释掉肯定有原因

java 复制代码
    @Override
    public void clearReceiptorId(Long id, String orderNo) {
        log.info("新版流程-自营审核提交-驳回-清空审核人 id {}, orderNo {}", id, orderNo);
        if (!Check.notNull(id)) {
            log.info("新版流程-自营审核提交-驳回-清空审核人 id is null");
            return;
        }
        InsurenceAudit insurenceAudit = insurenceAuditDao.loadById(InsurenceAudit.class, id);
        if (Objects.isNull(insurenceAudit)) {
            log.info("新版流程-自营审核提交-驳回-清空审核人 insurenceAudit is null");
            return;
        }
        log.info("新版流程-自营审核提交-驳回-清空审核人 更新前 is {}", JSONObject.toJSONString(insurenceAudit));
        insurenceAudit.setStatus(null);
        insurenceAudit.setReceiptorId(null);
        insurenceAudit.setReceiveTime(null);
        insurenceAudit.setUpdateTime(new Date());
//        /**
//         * 新增清空审核结果 否则未处理看不到该订单
//         * QX 20250516 fix
//         */
//        insurenceAudit.setResult(null);
        Integer count = insurenceAuditDao.updateAll(insurenceAudit);
        log.info("新版流程-自营审核提交-驳回-清空审核人 更新成功{}", count);
    }

不敢动,很纠结。然后让,测试同学,在测试环境验证一下,结果没问题。看来,这个注释,是没有你问题的。就让服务组那边查问题,setResult为什么没有置空,他看了他那的代码,也没啥问题,查询到会更新这个字段。

哎,很神奇。我还在反思,不知道哪里的问题,还在找,他一口咬定是我这设置进去的。我看了crm的代码,嗨,确实是有更新。问题很可能就出现 在这里。

java 复制代码
log.info("自营审核检测订单自动分配-有历史驳回信息 直接领单,orderNo:{}", orderNo);
InsurenceAudit query = new InsurenceAudit();
query.setOrderNo(orderNo);
InsurenceAudit queryHist = CRPCService.INSURANCE_AUDIT_SERVICE.queryOneEntity(query);

autoAllotAct(queryHist, orderNo,  history.getOperatorId());


private void autoAllotAct(InsurenceAudit audit, String orderNo, Long receiptorId){
    audit.setReceiptorId(receiptorId);
    audit.setReceiveTime(new Date());
    audit.setStatus(2);
    /**
    * 记录分配动作
    */
    allotNew(audit.getOrderNo(), receiptorId);

    Boolean flag = CRPCService.INSURANCE_AUDIT_SERVICE.updateNotNull(audit);

一开始,我想在更新时,单独设置这个字段未null。无论如何,这个字段都会为空,这样问题就都解决了。

但是,一会,对方拿着dba给的执行的sql来了,确认了说我这里的更新。

本来想,直接设置那个字段,但是他提醒,除了这个字段还会有其他的字段,你都要注意一下。啊?这样不就又耦合(你那有这段逻辑,我这也有)了,解决不了根本问题。

java 复制代码
private void autoAllotAct(InsurenceAudit audit, String orderNo, Long receiptorId){
    /**
     * 记录分配动作
     */
    allotNew(audit.getOrderNo(), receiptorId);

    /**
     * 调整为更新需要更新的字段
     * QX 20260528
     */
    InsurenceAudit updateAudit = new InsurenceAudit();
    updateAudit.setReceiptorId(receiptorId);
    updateAudit.setReceiveTime(new Date());
    updateAudit.setStatus(2);
    updateAudit.setId(audit.getId());
    updateAudit.setUpdateTime(new Date());
    Boolean flag = CRPCService.INSURANCE_AUDIT_SERVICE.updateNotNull(updateAudit);

最后这样,new了一个对象,只更新我需要更新的字段,其他的字段,被更新了呗。而,原来是先查询旧数据,然后全量字段更新,这样就会有主从的问题,嗨,完美。

问题总结

1、需要时间,这问题没有时间,无法解决。

2、每次放假或者休息时间,找来,烦死了,必须解决

3、多和同事沟通,找定这个点,死磕。

相关推荐
圆山猫6 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
城管不管6 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨6 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡7 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖7 小时前
Java深入解析篇九之NIO详解
java·网络·nio
The Chosen One9857 小时前
高进度算法模板速记(待完善)
java·前端·算法
神龙天舞20018 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
极光代码工作室10 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
Leighteen10 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
名字还没想好☜11 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine