Statistics monthly report data every day (use insert into duplicate key update)

1. Add a unique index to the table, according to their actual situation, because these data have classification, so it is based on the establishment of the only so many fields, otherwise no way to use insert into duplicate key update

zdy_unix	source_name, source, payment, year, month	UNIQUE	0	A	248			0	

2. logic implementation

   public void runPieChartMonthForEveryDay() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //查询所有的商圈信息
        List<ReportTradingKu> list = basicMerchantKuMapper.selectReportListKu();
        if(list != null && list.size()>0){
            //获取昨天的日期
            Date yesterday = DateUtils.convert2TransDay(-1);
            String date = format.format(yesterday);
            logger.info("--------昨日日期:【"+date+"】--------");
            //遍历所有的商圈
            for (ReportTradingKu tradingKu : list) {
                logger.info("----------开始配置:【"+tradingKu.getMerKuName()+"】商圈------------");
                NamedParameterJdbcTemplate namedJdbcTemplate = getNamedJdbc(tradingKu.getMerKuAddress(), tradingKu.getMerKuPort(), tradingKu.getMerKuName(), tradingKu.getUserName(), tradingKu.getUserPassword());
                mrtStsService.getPieDataMonthEveryDay(namedJdbcTemplate,tradingKu,date);
            }

        }
    }

3. Methods


    public void getPieDataMonthEveryDay(NamedParameterJdbcTemplate namedJdbcTemplate, ReportTradingKu tradingKu, String date) {
        //获取年
        String year = date.substring(0,4);
        //获取月
        String month = date.substring(5,7);
        //获取日
        String day = date.substring(8,10);
        //获取昨日的开始时间戳
        long lastDayStartMills = DateStrUtil.getLastDayStartMills()/1000;
        logger.info("--------【lastDayStartMills:"+lastDayStartMills+"】---------");
        String sql = "SELECT\n" +
                "\tsource_name,\n" +
                "\tsource,\n" +
                "\tSUM( IFNULL( t1.order_total, 0 ) ) AS order_total,\n" +
                "\tSUM( IFNULL( t1.order_amount, 0 ) ) AS order_amount,\n" +
                "\tpayment \n" +
                "FROM\n" +
                "\tsdb_pie_chart_data AS t1 \n" +
                "WHERE\n" +
                "\tt1.createtime >= '"+lastDayStartMills+"' \n" +
                "GROUP BY\n" +
                "\tsource_name,\n" +
                "\tsource,\n" +
                "\tpayment";
        //查询数据
        List<PieChartDataMonth> list = namedJdbcTemplate.query(sql, new BeanPropertyRowMapper<>(PieChartDataMonth.class));
        if(list!=null && list.size()>0){
            //外卖的订单没有支付方式,给个默认值,否则影响操作
            for (PieChartDataMonth pm : list) {
                String source = pm.getSource();
                String payment = pm.getPayment();
                if(source.equals("eleme") || source.equals("meituan")){
                    payment = "waimai";
                    pm.setPayment(payment);
                }
            }
            SqlParameterSource[] params = SqlParameterSourceUtils.createBatch(list.toArray());
            String insertSql = null;
            if(day.equals("01")){
                //应该做新的插入,因为是新的月份的开始
                insertSql = "insert into sdb_pie_chart_data_month(source_name,source,order_total,order_amount,payment,year,month,date)values(:source_name,:source,:order_total,:order_amount,:payment,'"+year+"','"+month+"','"+date+"')";
            }else{
                insertSql = "insert into sdb_pie_chart_data_month(source_name,source,order_total,order_amount,payment,year,month,date)values(:source_name,:source,:order_total,:order_amount,:payment,'"+year+"','"+month+"','"+date+"') on duplicate key update order_total = (values(order_total)+order_total),order_amount = (values(order_amount)+ order_amount),year=values(year),month=values(month),date=values(date)";
            }
            int[] ints = namedJdbcTemplate.batchUpdate(insertSql, params);
            logger.info("------------插入【"+tradingKu.getMerKuName()+"】总计【"+ints.length+"】条数据------------");
        }else{
            logger.info("无数据可操作");
        }

    }

 

Guess you like

Origin blog.csdn.net/LuckFairyLuckBaby/article/details/90608416