From 131f160184594d14f2bbe7e906b106d75ed856eb Mon Sep 17 00:00:00 2001 From: "lisai17@sina.com" Date: Wed, 28 Jul 2021 15:05:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=84=E7=A0=82=E7=AB=99?= =?UTF-8?q?=E6=B1=87=E6=80=BB=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cowr/common/utils/DateTimeUtil.java | 5 + .../cowr/ssjygl/overall/OverallService.java | 185 ++------ .../ssjygl/stat/sale/OrderStatService.java | 421 ++++++++++++------ .../ssjygl/jobs/CleanOSSBakFileJob.java | 23 +- .../ssjygl/stat/sale/OrderStatController.java | 36 +- 5 files changed, 365 insertions(+), 305 deletions(-) diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java b/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java index 87ea4ba..f91cf90 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/common/utils/DateTimeUtil.java @@ -20,6 +20,11 @@ public class DateTimeUtil { return new SimpleDateFormat("yyyy-01-01"); } }; + public static final ThreadLocal month_start = new ThreadLocal() { + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-01-01"); + } + }; public static final ThreadLocal sdf = new ThreadLocal() { protected SimpleDateFormat initialValue() { diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/overall/OverallService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/overall/OverallService.java index a6639af..97092cb 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/overall/OverallService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/overall/OverallService.java @@ -126,165 +126,50 @@ group by date */ public Record stat(Integer supermarket_id) { - long st = System.currentTimeMillis(); - Record out = new Record(); - - Date now = new Date(); - List params2 = new ArrayList<>(); - - params2.add(OrderStateEnum.RECEIVED.getStateid()); - - - Calendar c = Calendar.getInstance(); + long st = System.currentTimeMillis(); + Record out = new Record(); + Date now = new Date(); + Calendar c = Calendar.getInstance(); c.setTime(now); - c.add(Calendar.DAY_OF_MONTH, -1); - String nowmonttm = DateTimeUtil.sd.get().format(now); // 当月 - String nowdaytm = DateTimeUtil.sdf.get().format(now); // 当日 - String predaytm = DateTimeUtil.sdf.get().format(c.getTime()); // 前一日 + c.set(Calendar.HOUR_OF_DAY, 0); + c.set(Calendar.MINUTE, 0); + c.set(Calendar.SECOND, 0); + c.set(Calendar.MILLISECOND, 0); + + Date day = c.getTime(); // 当日 c.add(Calendar.DAY_OF_MONTH, 1); - c.add(Calendar.MONTH, -1); + Date month = c.getTime(); // 当月 - String premonthtm = DateTimeUtil.sd.get().format(c.getTime()); // 前一月 + c.add(Calendar.MONTH, 1); + Date year = c.getTime(); // 当年 - String sql_ordercluster = "select \n" + - " ifnull(sum(t.weight), 0) total_weight, \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then t.weight end ), 0) month_total_weight, \n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then t.weight end ), 0) day_total_weight, \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then t.weight end ), 0) before_month_total_weight, \n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then t.weight end) , 0) before_day_total_weight,\n" + - " \n" + - " ifnull(sum(t.total_price), 0) total_price, \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then t.total_price end ), 0) month_total_price, \n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then t.total_price end ), 0) day_total_price, \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then t.total_price end ), 0) before_month_total_price, \n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then t.total_price end) , 0) before_day_total_price, \n" + - " \n" + - " ifnull(count(t.sn), 0) truck_cnt, \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then 1 else 0 end ), 0) month_truck_cnt, \n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then 1 else 0 end ), 0) day_truck_cnt, \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then 1 else 0 end ), 0) before_month_truck_cnt, \n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then 1 else 0 end) , 0) before_day_truck_cnt \n" + + String sql_ordercluster = "select\n" + + " ifnull(sum(t.weight), 0) total_weight,\n" + + " ifnull(sum(t.total_price), 0) total_price,\n" + + " ifnull(count(t.sn), 0) truck_cnt,\n" + + " \n" + + " ifnull(sum(case when t.create_time >= ? then t.weight end ), 0) year_total_weight,\n" + + " ifnull(sum(case when t.create_time >= ? then t.total_price end ), 0) year_total_price,\n" + + " ifnull(sum(case when t.create_time >= ? then 1 else 0 end ), 0) year_truck_cnt,\n" + + " \n" + + " ifnull(sum(case when t.create_time >= ? then t.weight end ), 0) month_total_weight,\n" + + " ifnull(sum(case when t.create_time >= ? then t.total_price end ), 0) month_total_price,\n" + + " ifnull(sum(case when t.create_time >= ? then 1 else 0 end ), 0) month_truck_cnt,\n" + + " \n" + + " \n" + + " ifnull(sum(case when t.create_time >= ? then t.weight end ), 0) day_total_weight,\n" + + " ifnull(sum(case when t.create_time >= ? then t.total_price end ), 0) day_total_price,\n" + + " ifnull(sum(case when t.create_time >= ? then 1 else 0 end ), 0) day_truck_cnt\n" + + " \n" + " from order_temp t\n" + " where t.state = ?"; - String sql_by_customer = "\n" + - " select\n" + - " t.customer_id,\n" + - " ifnull(max(case when t.customer_id is null then null else t.customer_name end), '零散客户') customer_name,\n" + - " sum(t.weight) weight,\n" + - " sum(t.total_price) total_price,\n" + - " count(*) truck_cnt,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then t.weight end), 0) month_weight,\n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then t.weight end), 0) day_weight,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then t.total_price end), 0) month_total_price,\n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then t.total_price end), 0) day_total_price,\n" + - " \n" + - " count(case when t.create_time like '" + nowmonttm + "%' then t.sn end) month_truck_cnt,\n" + - " count(case when t.create_time like '" + nowdaytm + "%' then t.sn end) day_truck_cnt,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then t.weight end), 0) before_month_weight,\n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then t.weight end), 0) before_day_weight,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then t.total_price end), 0) before_month_total_price,\n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then t.total_price end), 0) before_day_total_price,\n" + - " \n" + - " count(case when t.create_time like '" + premonthtm + "%' then t.sn end) before_month_truck_cnt,\n" + - " count(case when t.create_time like '" + predaytm + "%' then t.sn end) before_day_truck_cnt\n" + - " from order_temp t\n" + - " where t.state = ?\n"; - - String sql_by_supermarket = " select \n" + - " s.id supermarket_id,\n" + - " s.name supermarket_name,\n" + - " s.name2 supermarket_name2,\n" + - " ifnull(a.total_price, 0) total_price,\n" + - " ifnull(a.month_total_price, 0) month_total_price,\n" + - " ifnull(a.before_day_truck_cnt, 0) before_day_truck_cnt,\n" + - " ifnull(a.month_truck_cnt, 0) month_truck_cnt,\n" + - " ifnull(a.truck_cnt, 0) truck_cnt,\n" + - " ifnull(a.day_total_price, 0) day_total_price,\n" + - " ifnull(a.weight, 0) weight,\n" + - " ifnull(a.before_day_total_price, 0) before_day_total_price,\n" + - " ifnull(a.month_weight, 0) month_weight,\n" + - " ifnull(a.before_month_total_price, 0) before_month_total_price,\n" + - " ifnull(a.before_month_weight, 0) before_month_weight,\n" + - " ifnull(a.day_weight, 0) day_weight,\n" + - " ifnull(a.before_month_truck_cnt, 0) before_month_truck_cnt,\n" + - " ifnull(a.before_day_weight, 0) before_day_weight,\n" + - " ifnull(a.day_truck_cnt, 0) day_truck_cnt" + - " from supermarket s\n" + - " left join (\n" + - " select\n" + - " t.supermarket_id,\n" + - " sum(t.weight) weight,\n" + - " sum(t.total_price) total_price,\n" + - " count(*) truck_cnt,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then t.weight end), 0) month_weight,\n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then t.weight end), 0) day_weight,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + nowmonttm + "%' then t.total_price end), 0) month_total_price,\n" + - " ifnull(sum(case when t.create_time like '" + nowdaytm + "%' then t.total_price end), 0) day_total_price,\n" + - " \n" + - " count(case when t.create_time like '" + nowmonttm + "%' then t.sn end) month_truck_cnt,\n" + - " count(case when t.create_time like '" + nowdaytm + "%' then t.sn end) day_truck_cnt,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then t.weight end), 0) before_month_weight,\n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then t.weight end), 0) before_day_weight,\n" + - " \n" + - " ifnull(sum(case when t.create_time like '" + premonthtm + "%' then t.total_price end), 0) before_month_total_price,\n" + - " ifnull(sum(case when t.create_time like '" + predaytm + "%' then t.total_price end), 0) before_day_total_price,\n" + - " \n" + - " count(case when t.create_time like '" + premonthtm + "%' then t.sn end) before_month_truck_cnt,\n" + - " count(case when t.create_time like '" + predaytm + "%' then t.sn end) before_day_truck_cnt\n" + - " from order_temp t\n" + - " where t.state = ?\n"; - - - List by_supermarket_list; - - if (supermarket_id != null) { - sql_ordercluster += " and t.supermarket_id = ? "; - sql_by_customer += " and t.supermarket_id = ? "; - - params2.add(supermarket_id); - - by_supermarket_list = Db.find(sql_by_supermarket + - " and t.supermarket_id = ? " + - " group by t.supermarket_id\n" + - " ) a on a.supermarket_id = s.id \n" + - " where s.id = ? ", OrderStateEnum.RECEIVED.getStateid(), supermarket_id, supermarket_id); - } else { - by_supermarket_list = Db.find(sql_by_supermarket + - " group by t.supermarket_id\n" + - " ) a on a.supermarket_id = s.id", OrderStateEnum.RECEIVED.getStateid()); - } - - List suppeie = Db.find("select t.supermarket_id, sum(t.total_weight) total_weight from ordercluster t\n" + - "where t.cutoff_time like ? \n" + - "and t.state <= ? \n" + - "group by t.supermarket_id", nowdaytm + "%", OrderStateEnum.RECEIVED.getStateid()); - - for (Record record : by_supermarket_list) { - record.set("day_quota_total_price", 0); - - for (Record r : suppeie) { - if (r.getInt("supermarket_id") != null && r.getInt("supermarket_id").equals(record.getInt("supermarket_id"))) { - record.set("day_quota_total_price", r.get("total_weight")); - } - } - } - - Record ocout = Db.findFirst(sql_ordercluster, params2.toArray()); + Record ocout = Db.findFirst(sql_ordercluster, year, year, year, month, month, month, day, day, day, OrderStateEnum.RECEIVED.getStateid()); out.set("ordercluster", ocout); - out.set("by_customer", Db.find(sql_by_customer + " group by t.customer_id", params2.toArray())); - out.set("by_supermarket", by_supermarket_list); return out; } @@ -441,6 +326,12 @@ group by date DateTimeUtil.sdfhms.get().format(c.getTime())); } + /** + * 最后 30 条销售记录 + * + * @param supermarket_id + * @return + */ public List lastOrder(Integer supermarket_id) { if (supermarket_id != null) { return Db.find("select t.sn, t.customer_id, t.customer_name, t.truck_license, t.weight, t.total_price, t.create_time, t.supermarket_id, s.name supermarket_name \n" + diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/stat/sale/OrderStatService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/stat/sale/OrderStatService.java index 61106bd..aa8e4c0 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/stat/sale/OrderStatService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/stat/sale/OrderStatService.java @@ -11,7 +11,6 @@ import com.jfinal.kit.StrKit; import com.jfinal.log.Log; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; -import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -859,10 +858,10 @@ public class OrderStatService { * @param tm YYYY-MM * @return */ - public List mdstat(String tm,Integer supermarket_id) { - String paramsSql=""; - if(supermarket_id!=null){ - paramsSql="and t.supermarket_id = ? \n"; + public List mdstat(String tm, Integer supermarket_id) { + String paramsSql = ""; + if (supermarket_id != null) { + paramsSql = "and t.supermarket_id = ? \n"; } String sql = "select date_format(t.create_time, '%Y-%m-%d') as date, sum(t.weight) as weight, sum(t.total_price) as totalPrice\n" + @@ -870,22 +869,22 @@ public class OrderStatService { " select t.create_time, t.weight, t.paid, t.total_price\n" + " from order_sale t\n" + " where t.state = ? \n" + - paramsSql+ + paramsSql + " and t.create_time like ? \n" + " union all\n" + " select t.create_time, t.weight, t.paid, t.total_price\n" + " from order_temp t\n" + " where t.state = ? \n" + - paramsSql+ + paramsSql + " and t.create_time like ? \n" + ") t\n" + "group by date_format(t.create_time, '%Y-%m-%d')\n" + "order by date_format(t.create_time, '%Y-%m-%d')"; List dblist; - if(supermarket_id!=null){ - dblist = Db.find(sql, OrderStateEnum.RECEIVED.getStateid(),supermarket_id, tm + "%", OrderStateEnum.RECEIVED.getStateid(),supermarket_id, tm + "%"); + if (supermarket_id != null) { + dblist = Db.find(sql, OrderStateEnum.RECEIVED.getStateid(), supermarket_id, tm + "%", OrderStateEnum.RECEIVED.getStateid(), supermarket_id, tm + "%"); - }else { + } else { dblist = Db.find(sql, OrderStateEnum.RECEIVED.getStateid(), tm + "%", OrderStateEnum.RECEIVED.getStateid(), tm + "%"); } @@ -926,8 +925,8 @@ public class OrderStatService { * @param tm YYYY-MM * @return */ - public Workbook mdstatExport(String tm,Integer supermarket_id) { - List list = mdstat(tm,supermarket_id); + public Workbook mdstatExport(String tm, Integer supermarket_id) { + List list = mdstat(tm, supermarket_id); Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("销售月逐日统计"); @@ -1852,30 +1851,90 @@ public class OrderStatService { return wb; } - public Workbook trafficStatisticsOfEachSandStationExport(String stm, String etm,Integer invoice_type){ - List list=trafficStatisticsOfEachSandStation(stm, etm,invoice_type); - Workbook wb = new XSSFWorkbook(); + public Workbook trafficStatisticsOfEachSandStationExport(String stm, String etm, String tm, Integer invoice_type) { + Record data = trafficStatisticsOfEachSandStation(stm, etm, tm, invoice_type); + List list = data.get("data"); + List sups = data.get("supermarket"); + Workbook wb = new XSSFWorkbook(); - Sheet sheet = wb.createSheet(stm.substring(0, 10) + " ~ " + etm.substring(0, 10) + "各砂站运输量统计表"); - - sheet.setColumnWidth(1,40*256); - for(int i=2;i<30;i++){ - sheet.setColumnWidth(i,15*256); - } + Sheet sheet = wb.createSheet(stm.substring(0, 10) + " ~ " + etm.substring(0, 10) + "各砂站运输量统计表"); // 表头 start Row row = sheet.createRow(0); - sheet.addMergedRegion(new CellRangeAddress(0,1,0,0)); - sheet.addMergedRegion(new CellRangeAddress(0,1,1,1)); - sheet.addMergedRegion(new CellRangeAddress(0,1,2,2)); - sheet.addMergedRegion(new CellRangeAddress(0,1,3,3)); - int num = 4; - for(int i=0;i<13;i++){ - sheet.addMergedRegion(new CellRangeAddress(0,0,num,num+1)); - num=num+2; + + int a = 0; + row.createCell(a++).setCellValue("序号"); + row.createCell(a++).setCellValue("客户类型"); + row.createCell(a++).setCellValue("客户名称"); + row.createCell(a++).setCellValue("总销售量(吨)"); + row.createCell(a++).setCellValue("总销售额(元)"); + row.createCell(a++).setCellValue("总预付款(元)"); + row.createCell(a++).setCellValue("总余额(元)"); + + Row row2 = sheet.createRow(1); + int a2 = 7; + + for (Supermarket s : sups) { + row.createCell(a).setCellValue(s.getName()); + sheet.addMergedRegion(new CellRangeAddress(0, 0, a, a + 1)); + a += 2; + + row2.createCell(a2++).setCellValue("总销售量(吨)"); + row2.createCell(a2++).setCellValue("总销售额(元)"); + } + + sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0)); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1)); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2)); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3)); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4)); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 5, 5)); + sheet.addMergedRegion(new CellRangeAddress(0, 1, 6, 6)); + + int datalen = list.size(); + int colcnt = a; + int rowcnt = 2; + for (int i = 0; i < datalen; i++) { + int startrow = rowcnt; + Record sales = list.get(i); + row = sheet.createRow(rowcnt++); + List children = sales.get("children"); + + row.createCell(0).setCellValue(1); + row.createCell(1).setCellValue(sales.getStr("customer_type_name")); + + if (children == null) { + continue; + } + + for (int c = 0; c < children.size(); c++) { + if (c > 0) { + row = sheet.createRow(rowcnt++); + } + + Record record = children.get(c); + a = 0; + + row.createCell(a++).setCellValue(c + 1); + row.createCell(a++).setCellValue(record.getStr("customer_type_name")); + row.createCell(a++).setCellValue(record.getStr("customer_name")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(record, "weight")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(record, "total_price")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(record, "prepay_total_amount")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(record, "prepay_surplus")); + + for (Supermarket s : sups) { + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(record, "xsl_" + s.getId())); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(record, "xse_" + s.getId())); + } + } + + if (startrow + children.size() - 1 > startrow) { + sheet.addMergedRegion(new CellRangeAddress(startrow, startrow + children.size() - 1, 1, 1)); + } } // 通用单元格格式 - Font font = wb.createFont(); + Font font = wb.createFont(); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); cellStyle.setBorderLeft(BorderStyle.THIN); @@ -1885,74 +1944,12 @@ public class OrderStatService { cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 cellStyle.setFont(font); - num = 0; - row.createCell(0).setCellValue("序号"); - row.createCell(1).setCellValue("客户名称"); - row.createCell(2).setCellValue("总销售量(吨)"); - row.createCell(3).setCellValue("总销售额(元)"); - row.createCell(4).setCellValue("竹瓦"); - row.createCell(6).setCellValue("竹瓦水厂"); - row.createCell(8).setCellValue("竹瓦合计"); - row.createCell(10).setCellValue("团陂"); - row.createCell(12).setCellValue("城隍"); - row.createCell(14).setCellValue("石畈"); - row.createCell(16).setCellValue("融嘉"); - row.createCell(17).setCellValue("水利站"); - row.createCell(20).setCellValue("融嘉合计"); - row.createCell(22).setCellValue("盐港"); - row.createCell(24).setCellValue("永安"); - row.createCell(26).setCellValue("河东湾"); - row.createCell(28).setCellValue("盐港合计"); - - row = sheet.createRow(1); - num = 4; - for(int i=0;i<13;i++){ - row.createCell(num++).setCellValue("总销售量(吨)"); - row.createCell(num++).setCellValue("总销售额(元)"); - } - int datalen = list.size(); - for (int i = 0; i < datalen; i++) { - Record sales = list.get(i); - row = sheet.createRow(i + 2); - num = 0; - row.createCell(num++).setCellValue(i+1); - row.createCell(num++).setCellValue(sales.getStr("customer_name")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "weight")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "total_price")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "zw_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "zw_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "zwsc_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "zwsc_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "zwhj_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "zwhj_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "tp_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "tp_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "sc_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "sc_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "sb_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "sb_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "jr_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "jr_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "sl_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "sl_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "jrhj_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "jrhj_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "yg_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "yg_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "ya_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "ya_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "dhw_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "dhw_xse")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "yghj_xsl")); - row.createCell(num++).setCellValue(DataUtil.getDefaultByRecord(sales, "yghj_xse")); - } - - for (int r = 0; r < datalen + 2; r++) { + for (int r = 0; r < rowcnt; r++) { row = sheet.getRow(r); if (row == null) { row = sheet.createRow(r); } - for (int c = 0; c < 30; c++) { + for (int c = 0; c < colcnt; c++) { Cell cell = row.getCell(c); if (cell == null) { @@ -1961,29 +1958,204 @@ public class OrderStatService { cell.setCellStyle(cellStyle); } } + + for (int i = 1; i < 30; i++) { + sheet.setColumnWidth(i, 15 * 256); + } + + sheet.setColumnWidth(2, 40 * 256); + return wb; } /** * 各砂站运输量统计表 */ - public List trafficStatisticsOfEachSandStation( String stm, String etm,Integer invoice_type){ - List dataList = trafficStatistics(stm,etm,invoice_type); - if (dataList!=null&&!dataList.isEmpty()) { - for (Record oldRecord : dataList) { - Record newRecord =total(oldRecord); - oldRecord=newRecord; + public Record trafficStatisticsOfEachSandStation(String stm, String etm, String tm, Integer invoice_type) { + List customer_pre_list = Db.find("select\n" + + " a.customer_id,\n" + + " tp.id customer_type_id,\n" + + " tp.name customer_type_name,\n" + + " c.name customer_name,\n" + + " a.total_amount prepay_total_amount,\n" + + " p.surplus prepay_surplus\n" + + " from (\n" + + " select t.customer_id, sum(t.amount) total_amount from prepay_detail t\n" + + " where t.state = 2\n" + + " and t.verify_time > ?\n" + + " group by t.customer_id\n" + + " ) a\n" + + " left join customer c on c.id = a.customer_id\n" + + " left join customer_type tp on tp.id = c.customer_type_id\n" + + " left join prepay_customer p on p.customer_id = c.id\n" + + " union\n" + + " select 0 customer_id, 99 customer_type_id, '零散' customer_type_name, '零散客户' customer_name, null prepay_total_amount, null prepay_surplus", tm); + + customer_pre_list.sort(new Comparator() { + @Override + public int compare(Record o1, Record o2) { + if (o1.getInt("customer_type_id") == 0 || o2.getInt("customer_type_id") == 0) { + return -1; + } else { + return o1.getInt("customer_type_id") - o2.getInt("customer_type_id"); + } + } + }); + + String paramsSql = ""; + if (invoice_type != null) { + paramsSql = "and t.invoice_type = ? \n"; + } + + String sql = "select\n" + + " g.customer_id,\n" + + " ifnull(sum(g.weight), 0) weight,\n" + + " ifnull(sum(g.total_price), 0) total_price,\n" + + " ifnull(sum(case when g.supermarket_id = 1 or g.supermarket_id = 7 then g.weight end), 0) xsl_1,\n" + + " ifnull(sum(case when g.supermarket_id = 2 then g.weight end), 0) xsl_2,\n" + + " ifnull(sum(case when g.supermarket_id = 3 then g.weight end), 0) xsl_3,\n" + + " ifnull(sum(case when g.supermarket_id = 4 then g.weight end), 0) xsl_4,\n" + + " ifnull(sum(case when g.supermarket_id = 5 or g.supermarket_id = 9 then g.weight end), 0) xsl_5,\n" + + " ifnull(sum(case when g.supermarket_id = 6 or g.supermarket_id = 8 or g.supermarket_id = 10 then g.weight end), 0) xsl_6,\n" + + " ifnull(sum(case when g.supermarket_id = 1 or g.supermarket_id = 7 then g.total_price end), 0) xse_1,\n" + + " ifnull(sum(case when g.supermarket_id = 2 then g.total_price end), 0) xse_2,\n" + + " ifnull(sum(case when g.supermarket_id = 3 then g.total_price end), 0) xse_3,\n" + + " ifnull(sum(case when g.supermarket_id = 4 then g.total_price end), 0) xse_4,\n" + + " ifnull(sum(case when g.supermarket_id = 5 or g.supermarket_id = 9 then g.total_price end), 0) xse_5,\n" + + " ifnull(sum(case when g.supermarket_id = 6 or g.supermarket_id = 8 or g.supermarket_id = 10 then g.total_price end), 0) xse_6\n" + + " from (\n" + + " select\n" + + " ifnull(t.customer_id, 0) customer_id,\n" + + " t.supermarket_id,\n" + + " ifnull(sum(t.weight), 0) weight,\n" + + " ifnull(sum(t.total_price), 0) total_price\n" + + " from order_temp t\n" + + " where t.state = 5\n" + + " and t.create_time>= ? \n" + + " and t.create_time<= ?\n" + + paramsSql + + " group by t.customer_id, t.supermarket_id\n" + + " ) g\n" + + " group by g.customer_id\n"; + + List customer_sale_list; + + if (invoice_type != null) { + customer_sale_list = Db.find(sql, stm, etm, invoice_type); + } else { + customer_sale_list = Db.find(sql, stm, etm); + } + + Map salemap = new HashMap<>(); + Map> typemap = new HashMap<>(); + + for (Record record : customer_sale_list) { + salemap.put(record.getInt("customer_id"), record); + } + + for (Record record : customer_pre_list) { + Integer customer_id = record.getInt("customer_id"); + Integer customer_type_id = record.getInt("customer_type_id"); + + if (salemap.containsKey(customer_id)) { + Record sale = salemap.get(customer_id); + + record.setColumns(sale); + } + + if (!typemap.containsKey(customer_type_id)) { + typemap.put(customer_type_id, new ArrayList<>()); + } + + typemap.get(customer_type_id).add(record); + } + + List typelist = Db.find("select id customer_type_id, name customer_type_name from customer_type"); + + for (Record record : typelist) { + Integer customer_type_id = record.getInt("customer_type_id"); + + if (typemap.containsKey(customer_type_id)) { + List list = typemap.get(customer_type_id); + record.set("children", list); + + double prepay_total_amount = 0.0; + double prepay_surplus = 0.0; + double weight = 0.0; + double total_price = 0.0; + double xsl_1 = 0.0; + double xsl_2 = 0.0; + double xsl_3 = 0.0; + double xsl_4 = 0.0; + double xsl_5 = 0.0; + double xsl_6 = 0.0; + double xse_1 = 0.0; + double xse_2 = 0.0; + double xse_3 = 0.0; + double xse_4 = 0.0; + double xse_5 = 0.0; + double xse_6 = 0.0; + + for (Record r : list) { + prepay_total_amount = DataUtil.getDefaultByRecord(r, "prepay_total_amount"); + prepay_surplus = DataUtil.getDefaultByRecord(r, "prepay_surplus"); + weight = DataUtil.getDefaultByRecord(r, "weight"); + total_price = DataUtil.getDefaultByRecord(r, "total_price"); + xsl_1 = DataUtil.getDefaultByRecord(r, "xsl_1"); + xsl_2 = DataUtil.getDefaultByRecord(r, "xsl_2"); + xsl_3 = DataUtil.getDefaultByRecord(r, "xsl_3"); + xsl_4 = DataUtil.getDefaultByRecord(r, "xsl_4"); + xsl_5 = DataUtil.getDefaultByRecord(r, "xsl_5"); + xsl_6 = DataUtil.getDefaultByRecord(r, "xsl_6"); + xse_1 = DataUtil.getDefaultByRecord(r, "xse_1"); + xse_2 = DataUtil.getDefaultByRecord(r, "xse_2"); + xse_3 = DataUtil.getDefaultByRecord(r, "xse_3"); + xse_4 = DataUtil.getDefaultByRecord(r, "xse_4"); + xse_5 = DataUtil.getDefaultByRecord(r, "xse_5"); + xse_6 = DataUtil.getDefaultByRecord(r, "xse_6"); + } + + record.set("prepay_total_amount", prepay_total_amount); + record.set("prepay_surplus", prepay_surplus); + record.set("weight", weight); + record.set("total_price", total_price); + record.set("xsl_1", xsl_1); + record.set("xsl_2", xsl_2); + record.set("xsl_3", xsl_3); + record.set("xsl_4", xsl_4); + record.set("xsl_5", xsl_5); + record.set("xsl_6", xsl_6); + record.set("xse_1", xse_1); + record.set("xse_2", xse_2); + record.set("xse_3", xse_3); + record.set("xse_4", xse_4); + record.set("xse_5", xse_5); + record.set("xse_6", xse_6); } } - return dataList; + + List sups = Supermarket.dao.find("select * from supermarket where id <= 6"); + + typelist.sort(new Comparator() { + @Override + public int compare(Record o1, Record o2) { + if (o1.getInt("customer_type_id") == 0 || o2.getInt("customer_type_id") == 0) { + return -1; + } else { + return o1.getInt("customer_type_id") - o2.getInt("customer_type_id"); + } + } + }); + + return new Record().set("data", typelist).set("supermarket", sups); } - public List trafficStatistics(String stm, String etm,Integer invoice_type){ - String paramsSql=""; - if(invoice_type!=null){ - paramsSql="and t.invoice_type=?\n"; + public List trafficStatistics(String stm, String etm, Integer invoice_type) { + String paramsSql = ""; + if (invoice_type != null) { + paramsSql = "and t.invoice_type=?\n"; } - String sql="select\n" + + String sql = "select\n" + "\tg.customer_id,\n" + "\tifnull(c.name, '零散用户') customer_name,\n" + "\tifnull(sum(g.weight), 0) weight,\n" + @@ -2019,7 +2191,7 @@ public class OrderStatService { "\twhere t.state = 5\n" + "\tand t.create_time>= ?\n" + "\tand t.create_time<= ?\n" + - paramsSql+ + paramsSql + "\tgroup by t.customer_id, t.supermarket_id\n" + "\tunion all\n" + "\tselect\n" + @@ -2031,42 +2203,17 @@ public class OrderStatService { "\twhere t.state = 5\n" + "\tand t.create_time>= ?\n" + "\tand t.create_time<= ?\n" + - paramsSql+ + paramsSql + "\tgroup by t.customer_id, t.supermarket_id\n" + ") g\n" + "left join customer c on c.id = g.customer_id\n" + "group by g.customer_id"; List recordList; - if(invoice_type!=null) { - recordList = Db.find(sql, stm,etm,invoice_type, stm,etm,invoice_type); - }else { - recordList = Db.find(sql, stm,etm, stm,etm); + if (invoice_type != null) { + recordList = Db.find(sql, stm, etm, invoice_type, stm, etm, invoice_type); + } else { + recordList = Db.find(sql, stm, etm, stm, etm); } return recordList; } - /** - * 合计 - * @param record - * @return - */ - public Record total(Record record){ - //竹瓦合计 - BigDecimal zwhj_xsl=new BigDecimal(record.getStr("zw_xsl")).add(new BigDecimal(record.getStr("zwsc_xsl"))); - BigDecimal zwhj_xse=new BigDecimal(record.getStr("zw_xse")).add(new BigDecimal(record.getStr("zwsc_xse"))); - record.set("zwhj_xsl",zwhj_xsl); - record.set("zwhj_xse",zwhj_xse); - //融嘉合计 - BigDecimal jrhj_xsl=new BigDecimal(record.getStr("jr_xsl")).add(new BigDecimal(record.getStr("sl_xsl"))); - BigDecimal jrhj_xse=new BigDecimal(record.getStr("jr_xse")).add(new BigDecimal(record.getStr("sl_xse"))); - record.set("jrhj_xsl",jrhj_xsl); - record.set("jrhj_xse",jrhj_xse); - //盐港合计 - BigDecimal yghj_xsl=new BigDecimal(record.getStr("yg_xsl")).add(new BigDecimal(record.getStr("ya_xsl"))).add(new BigDecimal(record.getStr("hdw_xsl"))); - BigDecimal yghj_xse=new BigDecimal(record.getStr("yg_xse")).add(new BigDecimal(record.getStr("ya_xse"))).add(new BigDecimal(record.getStr("hdw_xse"))); - - record.set("yghj_xsl",yghj_xsl); - record.set("yghj_xse",yghj_xse); - return record; - } - } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/jobs/CleanOSSBakFileJob.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/jobs/CleanOSSBakFileJob.java index 67198f1..c3c1625 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/jobs/CleanOSSBakFileJob.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/jobs/CleanOSSBakFileJob.java @@ -3,7 +3,9 @@ package com.cowr.service.ssjygl.jobs; import com.aliyun.oss.model.OSSObjectSummary; import com.aliyun.oss.model.ObjectListing; import com.cowr.common.oss.OSSKit; +import com.cowr.model.Supermarket; import com.cowr.service.ssjygl.main.Config; +import com.cowr.service.ssjygl.main.SvrCacheData; import com.jfinal.kit.Prop; import com.jfinal.kit.PropKit; import com.jfinal.log.Log; @@ -12,6 +14,7 @@ import org.quartz.JobExecutionContext; import java.util.ArrayList; import java.util.List; +import java.util.Map; public class CleanOSSBakFileJob implements Job { private static Log log = Log.getLog(CleanOSSBakFileJob.class); @@ -20,9 +23,18 @@ public class CleanOSSBakFileJob implements Job { try { // 黄州和浠水的本地备份库 // 保留近两天的 - String[] prefixkeys = new String[]{"ssjy/xsx/dbbak/ssjy_xsx_", "ssjy/dbbak/ssjy"}; - List delkeys = new ArrayList<>(); - long st = System.currentTimeMillis(); + List prefixkeys = new ArrayList() {{ + add("ssjy/xsx/dbbak/ssjy_xsx_"); + add("ssjy/dbbak/ssjy"); + }}; + + // 每个超市的备份最后保留一个 + for (Map.Entry entry : SvrCacheData.SUP_CACHE.entrySet()) { + prefixkeys.add("ssjy/xsx/dbbak/ssjy_dbbak_" + entry.getKey()); + } + + List delkeys = new ArrayList<>(); + long st = System.currentTimeMillis(); for (String prefix : prefixkeys) { ObjectListing ret = OSSKit.list(prefix); @@ -34,6 +46,11 @@ public class CleanOSSBakFileJob implements Job { List list = ret.getObjectSummaries(); + if (list.size() <= 1) { + log.debug("没有找到相关数据。 %s", prefix); + continue; + } + for (OSSObjectSummary obj : list) { if (st - obj.getLastModified().getTime() > 2L * 24 * 60 * 60 * 1000) { // 超过两天的 delkeys.add(obj.getKey()); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/stat/sale/OrderStatController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/stat/sale/OrderStatController.java index 6667a22..aebaffc 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/stat/sale/OrderStatController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/stat/sale/OrderStatController.java @@ -2,20 +2,19 @@ package com.cowr.service.ssjygl.stat.sale; import com.cowr.common.base.BaseController; import com.cowr.common.enums.UserTypeEnum; +import com.cowr.common.utils.DateTimeUtil; import com.cowr.common.validator.DayValidator; import com.cowr.common.validator.MonthValidator; import com.cowr.common.validator.StartAndEndIntervalValidator; -import com.cowr.common.validator.YearValidator; import com.cowr.common.view.ExcelRender; import com.cowr.common.view.Result; import com.cowr.model.Sysuser; import com.cowr.service.ssjygl.system.sysuser.SysuserSyncService; import com.cowr.ssjygl.stat.sale.OrderStatService; import com.jfinal.aop.Before; -import com.jfinal.plugin.activerecord.Record; import org.apache.poi.ss.usermodel.Workbook; -import java.util.List; +import java.util.Date; public class OrderStatController extends BaseController { @@ -144,9 +143,9 @@ public class OrderStatController extends BaseController { */ @Before(DayValidator.class) public void daystatCustomer() { - String tm = get("tm"); + String tm = get("tm"); Integer invoice_type = getInt("invoice_type"); - int export = getInt("export", 0); + int export = getInt("export", 0); if (export == 0) { renderJson(Result.object(OrderStatService.me.salestatCustomer(tm, invoice_type))); } else { @@ -177,14 +176,14 @@ public class OrderStatController extends BaseController { */ @Before(MonthValidator.class) public void mdstat() { - String tm = get("tm"); - Integer supermarket_id=getInt("supermarket_id"); - int export = getInt("export", 0); + String tm = get("tm"); + Integer supermarket_id = getInt("supermarket_id"); + int export = getInt("export", 0); if (export == 0) { - renderJson(Result.object(OrderStatService.me.mdstat(tm,supermarket_id))); + renderJson(Result.object(OrderStatService.me.mdstat(tm, supermarket_id))); } else { - Workbook wb = OrderStatService.me.mdstatExport(tm,supermarket_id); + Workbook wb = OrderStatService.me.mdstatExport(tm, supermarket_id); render(new ExcelRender(tm + "_销售月逐日统计_" + System.currentTimeMillis() + ".xlsx", wb)); } } @@ -399,15 +398,16 @@ public class OrderStatController extends BaseController { /** * 各砂站运输量统计表 */ - public void trafficStatisticsOfEachSandStation(){ - String stm=get("stm"); - String etm=get("etm"); - Integer invoice_type=getInt("invoice_type"); - int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 + public void trafficStatisticsOfEachSandStation() { + String stm = get("stm"); + String etm = get("etm"); + String tm = get("tm", DateTimeUtil.year_start.get().format(new Date())); // 客户账户统计起始时间 + Integer invoice_type = getInt("invoice_type"); + int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 if (export == 0) { - renderJson(Result.object(OrderStatService.me.trafficStatisticsOfEachSandStation(stm, etm,invoice_type))); - }else { - Workbook wb = OrderStatService.me.trafficStatisticsOfEachSandStationExport(stm, etm,invoice_type); + renderJson(Result.object(OrderStatService.me.trafficStatisticsOfEachSandStation(stm, etm, tm, invoice_type))); + } else { + Workbook wb = OrderStatService.me.trafficStatisticsOfEachSandStationExport(stm, etm, tm, invoice_type); render(new ExcelRender("各砂站运输量统计表_" + System.currentTimeMillis() + ".xlsx", wb)); } }