感觉是个人写的最费力的接口,记录一下。

为什么写接口慢……
感觉是个人写的最费力的接口,还不是mybatis框架,手拼sql语句

  * SELECT A.gbcode, D.district_name as gbname, NVL(B.needCount, 0) as needCount, NVL(C.overCount, 0) as overCount
     * FROM 
     *     (SELECT RPAD(SUBSTR(T.pataddress_Gbcode, 1, 4), 9, '0') AS gbcode
     *     FROM QUERY_FOLLOWUP T 
     *     WHERE SUBSTR(T.pataddress_Gbcode, 1, 4) LIKE '32__'
     *     GROUP BY SUBSTR(T.pataddress_Gbcode, 1, 4)) A
     * LEFT JOIN
     *     (SELECT RPAD(SUBSTR(T.pataddress_Gbcode, 1, 4), 9, '0') AS gbcode, COUNT(*) as needCount
     *     FROM QUERY_FOLLOWUP T 
     *     WHERE SUBSTR(T.pataddress_Gbcode, 1, 4) LIKE '32__'
     *     AND T.Next_Time >= to_date('2023-01-01','YYYY-MM-DD') 
     *     AND T.Next_Time <= to_date('2023-12-31','YYYY-MM-DD') 
     *     GROUP BY SUBSTR(T.pataddress_Gbcode, 1, 4)) B
     * ON A.gbcode = B.gbcode
     * LEFT JOIN
     *     (SELECT RPAD(SUBSTR(T.pataddress_Gbcode, 1, 4), 9, '0') AS gbcode, COUNT(*) as overCount
     *     FROM QUERY_FOLLOWUP T 
     *     WHERE SUBSTR(T.pataddress_Gbcode, 1, 4) LIKE '32__'
     *     AND T.Next_Time < SYSDATE
     *     GROUP BY SUBSTR(T.pataddress_Gbcode, 1, 4)) C
     * ON A.gbcode = C.gbcode
     * LEFT JOIN
     *     (SELECT district_code, district_name
     *     FROM t_s_district) D
     * ON A.gbcode = D.district_code
@Override
    public PageBo findNeedToFollow(WorkbenchFlowModuleReqBody reqBody) {
        final StringBuffer buffer = new StringBuffer();

        int cPageNo = reqBody.getCurrentPage();
        int pageSize = reqBody.getPageSize();
        PageBo pageBo = new PageBo(cPageNo, pageSize, true);
        String pataddressGbcode=reqBody.getPataddressGbcode();
        String result = pataddressGbcode.substring(0, 2);
        buffer.append("SELECT A.gbcode" +
                ", D.district_name as gbname" +
                ", NVL(B.needCount, 0) as needCount"+
                ", NVL(C.overCount, 0) as overCount\n" +
                "FROM \n" +
                "    (SELECT RPAD(SUBSTR(T.pataddress_Gbcode, 1, 4), 9, '0') AS gbcode\n" +
                "    FROM QUERY_FOLLOWUP T \n" +
                "    WHERE SUBSTR(T.pataddress_Gbcode, 1, 4) LIKE '"+result+"__'\n" +
                "    GROUP BY SUBSTR(T.pataddress_Gbcode, 1, 4)) A\n" +
                "LEFT JOIN\n" +
                "    (SELECT RPAD(SUBSTR(T.pataddress_Gbcode, 1, 4), 9, '0') AS gbcode, COUNT(*) as needCount\n" +
                "    FROM QUERY_FOLLOWUP T \n" +
                "    WHERE SUBSTR(T.pataddress_Gbcode, 1, 4) LIKE '"+result+"__'\n");
        String currentDay = DateApi.getCurrentDate();//当前时间
        // 获取当前日期
        if (reqBody.getMoudle()!=null) {
            //当前日
            if(reqBody.getMoudle().equals("day")) {
                buffer.append(SymbolApi.TAB).append("and T.Next_Time =to_date('"+currentDay+"','YYYY-MM-DD')");
                System.out.println(buffer);
            //当前周
            } else if (reqBody.getMoudle().equals("week")) {
                String sevenDay = DateApi.getNextNDay(6);// 当前时间+6天
                buffer.append(SymbolApi.TAB).append("and T.Next_Time >= to_date('"+currentDay+"','YYYY-MM-DD') " +
                        "AND T.Next_Time <= to_date('"+sevenDay+"','YYYY-MM-DD')");
            //当前月
            } else if (reqBody.getMoudle().equals("month")) {
                LocalDate nowDate = LocalDate.now();
                //获取当月第一天和最后一天
                LocalDate lastDay = nowDate.with(TemporalAdjusters.lastDayOfMonth());
                LocalDate firstDay = nowDate.with(TemporalAdjusters.firstDayOfMonth());

                buffer.append(SymbolApi.TAB).append("and T.Next_Time >= to_date('"+firstDay+"','YYYY-MM-DD') " +
                        "AND T.Next_Time <= to_date('"+lastDay+"','YYYY-MM-DD')");
                //当前年
            } else if (reqBody.getMoudle().equals("year")) {
                LocalDate nowDate = LocalDate.now();
                // 获取当年第一天和最后一天
                 LocalDate lastYearDay = nowDate.with(TemporalAdjusters.lastDayOfYear());
                 LocalDate firstYearDay = nowDate.with(TemporalAdjusters.firstDayOfYear());
                // System.out.println("当年第一天:"+firstYearDay + ";当月最后一天:" + lastYearDay);
                buffer.append(SymbolApi.TAB).append("and T.Next_Time >= to_date('"+firstYearDay+"','YYYY-MM-DD') " +
                        "AND T.Next_Time <= to_date('"+lastYearDay+"','YYYY-MM-DD')");
            }
        }else{
            //指定时间
            buffer.append(SymbolApi.TAB).append("and T.Next_Time >= to_date('"+reqBody.getNextStartTimeRecently()+"','YYYY-MM-DD')"+
                    "AND T.Next_Time <= to_date('"+reqBody.getNextEndTimeRecently()+"','YYYY-MM-DD')");

        }
        buffer.append(SymbolApi.TAB).append(" GROUP BY SUBSTR(T.pataddress_Gbcode, 1, 4)) B\n" +
                " ON A.gbcode = B.gbcode ");
        buffer.append(SymbolApi.TAB).append("LEFT JOIN\n" +
                "    (SELECT RPAD(SUBSTR(T.pataddress_Gbcode, 1, 4), 9, '0') AS gbcode, COUNT(*) as overCount \n" +
                "    FROM QUERY_FOLLOWUP T \n" +
                "    WHERE SUBSTR(T.pataddress_Gbcode, 1, 4) LIKE'"+result+"__' \n" );
        // 获取当前日期
        if (reqBody.getMoudle()!=null) {
            //当前日
            if(reqBody.getMoudle().equals("day")) {
                buffer.append(SymbolApi.TAB).append("and T.Next_Time <to_date('"+currentDay+"','YYYY-MM-DD') ");
                System.out.println(buffer);
                //当前周
            } else if (reqBody.getMoudle().equals("week")) {
                buffer.append(SymbolApi.TAB).append("and T.Next_Time <= to_date('"+currentDay+"','YYYY-MM-DD') ");
                //当前月
            } else if (reqBody.getMoudle().equals("month")) {
                LocalDate nowDate = LocalDate.now();
                //获取当月第一天和最后一天
                LocalDate firstDay = nowDate.with(TemporalAdjusters.firstDayOfMonth());

                buffer.append(SymbolApi.TAB).append("and T.Next_Time <= to_date('"+firstDay+"','YYYY-MM-DD') ");
                //当前年
            } else if (reqBody.getMoudle().equals("year")) {
                LocalDate nowDate = LocalDate.now();
                // 获取当年第一天和最后一天
                LocalDate firstYearDay = nowDate.with(TemporalAdjusters.firstDayOfYear());
                // System.out.println("当年第一天:"+firstYearDay + ";当月最后一天:" + lastYearDay);
                buffer.append(SymbolApi.TAB).append("and T.Next_Time <= to_date('"+firstYearDay+"','YYYY-MM-DD') ");
            }
        }else{
            //指定时间
            buffer.append(SymbolApi.TAB).append("and T.Next_Time <= to_date('"+reqBody.getNextStartTimeRecently()+"','YYYY-MM-DD') ");

        }

        buffer.append(SymbolApi.TAB).append(" GROUP BY SUBSTR(T.pataddress_Gbcode, 1, 4)) C \n" +
                "ON A.gbcode = C.gbcode ");
        buffer.append(SymbolApi.TAB).append(" LEFT JOIN\n" +
                "    (SELECT district_code, district_name\n" +
                "    FROM t_s_district) D\n" +
                "ON A.gbcode = D.district_code ");
        Query nativeQuery = entityManager.createNativeQuery(new String(buffer));
        nativeQuery.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
        final List<?> resultList = nativeQuery.getResultList();

        PageBo rPageBo = PageUtils.getInstance().buildPageBo(pageBo, 0, resultList);
        return rPageBo;
        }

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1赛前: 赛前的准备。其实这一阶段的主要工作就是储备:元器件的储备、软件程序的储备、硬 件电路的储备、各种经验的总结等等。具体如下: u 元器件:分门别类按芯片的功能将芯片进行储备,比如放大器、时钟电路、模数转换器 等u 软件程序:把一些单片机常用的外围芯片的驱动程序进行储备,比如键盘、显示等人机 接口的程序设计,模数转换器的驱动程序等等u 硬件电路:将一些典型的电路做成模块的形式,比如放大器、滤波器等这样做的好处是 ,在赛前对各种典型的单元电路、驱动程序都做到心中有数,到比赛时就可以得心应手 了,其实比赛和高考差不多,经过两年的储备,在四天三夜要把所学的知识技能融会贯 通,做出成绩来。所以功夫要在平时,否则比赛时是不会有奇迹出现的。资料多了,要 学会整理,不要所有的一切都放在一个文件下,这样管理起来很不方便。图1时我当时的 资料分类目录。可以根据自身情况设计你的目录,原则就是管理方便、清晰。简单介绍 一下:芯片文档:存放集成芯片的数据手册,设计电路程序时需要经常查阅。硬件电路 设计:存放电路图,包括原理图、PCB版图软件程序:各种芯片的驱动程序、项目的程序 ……其它资料:论文、经典电路图、程序……调试记录记录调试的现象、数据、失败的原 因……图1 资料分类目录图2是我的芯片文档目录,以单片机为中心,将外围器件分类储备: AD转换器:ADC0809、MAX197 ……DA转换器:DAC0832、MAX525、MAX532 ……时钟芯片:DS1302、DS1307、DS12887 ……特殊器件:AD9851、AD603 AD637……人机接口器件:LCD1602、HD7279、ZLG7289、MAX7219 ……存储器:DS1554、DS1556 ……运算放大器:NE5532、LM358、OP07、AD603、AD620 ……比较器:LM339、LM393 ……图2 芯片文档目录 几个技巧:Ø 技巧1:在阅读芯片手册时,可以在手册上面作上标记,(pdf 6.0以上的版本都支持文档中作笔记)比如工作电压、带宽、控制寄存器、公式 ……好处是下次阅读是可以直接找到重点,有的放矢。Ø 技巧2:调试记录目录里,最好按照日期和调试的内容来命名,不断更新,最好纪录一些 调试过程中出现的错误,这样以后就有了经验,避免同一个错误犯第二次。Ø 技巧3:芯片文档里面的器件最好都是使用过的,而且有相应的程序、电路图等,没有用 过的器件最好在新建一个目录存放,而比赛时最好使用平时用过的器件,心里有数,节 省时间。PS:这次竞赛时,我们队选了A题(正弦信号发生器),用到了上述的芯片有: AD9851、MAX532、LCD1602、HD7279、AD603、NE5532等。在硬件电路设计时我们可以做 到心中有数,直接就可以设计电路,而软件程序都是C语言编的,模块化设计,移植起 来也很方便,为我们节约了宝贵的时间。建议:赛前准备阶段的时间还是很长的,要好 好利用这段时间,尤其是寒暑假的大块时间,有条件的同学可以三个人一起组队,把往 年的赛题练习一下,很有好处的。2赛中:选题:拿到题目之后,第一步要做的就是选题 。选题可以说是整个比赛当中最为关键的一步,题目选的不好,很可能到最后连实物都 做不出来。具体的选题可以根据队伍的平时专攻方向,比如说你们平时就是搞电机控制 的,那选题时最好也选控制相关的题目,还可以咨询一下老师和学长们的意见。但是, 一旦题目确定下来之后就千万不要改题目了,毕竟我们的时间优先,只有4天3夜,在这 么短的时间里是容不得临时改题目。PS:记得当时我们看题的时候先看得是A题,结果 我们三个人就决定做这个题目了,以至于到比赛几天内,我都还不知道另外的几个题目 内容是什么。分工: 分工只有不同,没有高低之分,调程序需要人,整理文档同样需要人,这个时候是最能 体现团队的时候。我认为一个队中的三个人,最好能够有所侧重,一个负责硬件设计、 驱动程序编,一个负责上层软件程序的编,另外一人负责整理文档。以我们队为例 :我负责硬件电路的设计及驱动程序的编,尹同学负责上层界面的软件程序及双机通 信的程序,王同学负责电路板的制作、焊接、调试及文档的整理。我感觉正是我们三个 人的分工不同,侧重不同才能使我们的制作过程很顺利,当然其间也遇到过很多的困难 。论文: 论文一般是比赛时容易被忽略的一点,殊不知论文与作品一样举足轻重,因为论文同样 占有50分的,在作品差不多的情况下,比的就是论文了,撰论文建议参考《作品选编》 ,它是往届一等奖的作品论文选编,很有参考价值,这里说一下论文的时间,一般来 讲在第二个晚上就因该开始着手了,此时硬件上应该已经有所进展,剩下的就是攻关 了,所以此时就是论文的好时间。3其它:时间安排: 在选定题目之后,同样需要制定方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值