调整各砂站汇总统计

dev
lisai17@sina.com 2021-07-28 15:05:49 +08:00
parent 3923de4ccf
commit 131f160184
5 changed files with 365 additions and 305 deletions

View File

@ -20,6 +20,11 @@ public class DateTimeUtil {
return new SimpleDateFormat("yyyy-01-01");
}
};
public static final ThreadLocal<SimpleDateFormat> month_start = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {
return new SimpleDateFormat("yyyy-01-01");
}
};
public static final ThreadLocal<SimpleDateFormat> sdf = new ThreadLocal<SimpleDateFormat>() {
protected SimpleDateFormat initialValue() {

View File

@ -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<Object> 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<Record> 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<Record> 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<Record> 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" +

View File

@ -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<Record> mdstat(String tm,Integer supermarket_id) {
String paramsSql="";
if(supermarket_id!=null){
paramsSql="and t.supermarket_id = ? \n";
public List<Record> 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<Record> 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<Record> list = mdstat(tm,supermarket_id);
public Workbook mdstatExport(String tm, Integer supermarket_id) {
List<Record> 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<Record> 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<Record> list = data.get("data");
List<Supermarket> 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<Record> 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<Record> trafficStatisticsOfEachSandStation( String stm, String etm,Integer invoice_type){
List<Record> 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<Record> 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<Record>() {
@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<Record> 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<Integer, Record> salemap = new HashMap<>();
Map<Integer, List<Record>> 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<Record> 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<Record> 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<Supermarket> sups = Supermarket.dao.find("select * from supermarket where id <= 6");
typelist.sort(new Comparator<Record>() {
@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<Record> trafficStatistics(String stm, String etm,Integer invoice_type){
String paramsSql="";
if(invoice_type!=null){
paramsSql="and t.invoice_type=?\n";
public List<Record> 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<Record> 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;
}
}

View File

@ -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<String> delkeys = new ArrayList<>();
long st = System.currentTimeMillis();
List<String> prefixkeys = new ArrayList<String>() {{
add("ssjy/xsx/dbbak/ssjy_xsx_");
add("ssjy/dbbak/ssjy");
}};
// 每个超市的备份最后保留一个
for (Map.Entry<Integer, Supermarket> entry : SvrCacheData.SUP_CACHE.entrySet()) {
prefixkeys.add("ssjy/xsx/dbbak/ssjy_dbbak_" + entry.getKey());
}
List<String> 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<OSSObjectSummary> 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());

View File

@ -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));
}
}