From 051be87f3cc4d436fe628a3817fed3415af7dffc Mon Sep 17 00:00:00 2001 From: "lisai17@sina.com" Date: Mon, 2 Nov 2020 10:02:58 +0800 Subject: [PATCH] . --- .../cowr/common/view/ReportExcelStyle.java | 35 +++ .../truck/OrderclusterTruckService.java | 33 ++- .../cowr/ssjygl/overall/OverallService.java | 1 + .../ssjygl/stat/sale/OrderStatService.java | 193 +++++++++++++++- .../truck/OrderclusterTruckController.java | 8 +- .../ssjygl/stat/sale/OrderStatController.java | 23 ++ .../ssjygl/synctask/SyncTaskService.java | 14 ++ .../service/ssjygl/netty/NettyServer.java | 2 + .../EditTempClusterValidator.java | 21 ++ .../ordercluster/OrderclusterController.java | 15 ++ .../ordercluster/OrderclusterSyncService.java | 216 +++++++++++++++++- .../truck/OrderclusterTruckController.java | 8 +- .../truck/OrderclusterTruckSyncService.java | 38 ++- .../ssjygl/stat/sale/OrderStatController.java | 17 ++ .../ssjygl/synctask/SyncTaskService.java | 22 ++ 15 files changed, 626 insertions(+), 20 deletions(-) create mode 100644 ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/EditTempClusterValidator.java diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/common/view/ReportExcelStyle.java b/ssjygl-xsx-common/src/main/java/com/cowr/common/view/ReportExcelStyle.java index 671c4ba..4907f4b 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/common/view/ReportExcelStyle.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/common/view/ReportExcelStyle.java @@ -129,4 +129,39 @@ public class ReportExcelStyle { sheet.getLastRowNum() //end row ); } + + public static void setCommonCellStyle( + Workbook wb, + Sheet sheet, + int datalen, + int end_col + ){ + // 通用单元格格式 + Font font = wb.createFont(); + CellStyle cellStyle = wb.createCellStyle(); + font.setFontHeight((short) (10 * 20)); + font.setFontName("宋体"); + cellStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中 + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 + cellStyle.setFont(font); + + Row row; + + // 设置通用单元格格式 + for (int r = 0; r < datalen + 1; r++) { + row = sheet.getRow(r); + if (row == null) { + row = sheet.createRow(r); + } + + for (int c = 0; c < end_col + 1; c++) { + Cell cell = row.getCell(c); + + if (cell == null) { + cell = row.createCell(c); + } + cell.setCellStyle(cellStyle); + } + } + } } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/truck/OrderclusterTruckService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/truck/OrderclusterTruckService.java index 33ac5bd..33634d4 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/truck/OrderclusterTruckService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/truck/OrderclusterTruckService.java @@ -26,10 +26,32 @@ import java.util.List; public class OrderclusterTruckService extends BaseService { public static final OrderclusterTruckService me = new OrderclusterTruckService(); - public Page find(PageParam pp) { - String selectsql = "select * "; - String fromsql = "from ordercluster_truck t where 1=1 "; - List paraList = new ArrayList<>(); + public Page find(PageParam pp, String stm, String etm, String customer_name, String truck_license) { + String selectsql = "select * "; + String fromsql = "from ordercluster_truck t \n" + + " left join ordercluster c on c.id = t.ordercluster_id \n" + + " where 1=1 "; + List paraList = new ArrayList<>(); + + if (StrKit.notBlank(stm)) { + fromsql += " and c.cutoff_time >= ? \n"; + paraList.add(stm); + } + + if (StrKit.notBlank(etm)) { + fromsql += " and c.cutoff_time <= ? \n"; + paraList.add(etm); + } + + if (StrKit.notBlank(customer_name)) { + fromsql += " and c.customer_name like ? \n"; + paraList.add("%" + customer_name.trim() + "%"); + } + + if (StrKit.notBlank(truck_license)) { + fromsql += " and t.truck_license like ? \n"; + paraList.add("%" + truck_license.trim() + "%"); + } String totalRowSql = "select count(*) " + fromsql; String findSql = selectsql + fromsql; @@ -43,6 +65,8 @@ public class OrderclusterTruckService extends BaseService { } else { findSql += " " + Const.ORDER_BY_DESC; } + } else { + findSql += " order by c.cutoff_time desc"; } return Db.paginateByFullSql(pp.getPage(), pp.getSize(), totalRowSql, findSql, paraList.toArray()); @@ -54,6 +78,7 @@ public class OrderclusterTruckService extends BaseService { /** * 验证车牌号是不是再当天有运输任务 + * * @param supermarket_id * @param truck_license * @return 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 6b79f16..56c53bd 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 @@ -5,6 +5,7 @@ import com.cowr.common.utils.DateTimeUtil; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; 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 13d9669..57404b9 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 @@ -12,8 +12,10 @@ import com.jfinal.log.Log; import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Record; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import java.math.BigDecimal; import java.util.*; public class OrderStatService { @@ -285,8 +287,6 @@ public class OrderStatService { double sum_weight = 0.0; double sum_price = 0.0; - double sum_distance = 0.0; - double sum_trans_price = 0.0; double isprepaid_sum_price = 0.0; int datalen = list.size(); int end_col = sup_name == null ? 11 : 10; @@ -296,8 +296,6 @@ public class OrderStatService { sum_weight += DataUtil.getDefaultByRecord(order, "weight"); sum_price += DataUtil.getDefaultByRecord(order, "total_price"); - sum_distance += DataUtil.getDefaultByRecord(order, "trans_distance"); - sum_trans_price += DataUtil.getDefaultByRecord(order, "trans_price"); if (order.getInt("isprepaid") == 1) { isprepaid_sum_price += DataUtil.getDefaultByRecord(order, "total_price"); @@ -306,6 +304,11 @@ public class OrderStatService { row = sheet.createRow(i + 3); a = 0; row.createCell(a++).setCellValue(i + 1); + + if (order.get("in_time") == null) { + log.error("有 transport 未同步成功 %s", order.toJson()); + } + row.createCell(a++).setCellValue(DateTimeUtil.sdfhms.get().format(order.getDate("in_time"))); row.createCell(a++).setCellValue(order.getStr("sn")); row.createCell(a++).setCellValue(order.getStr("product_name")); @@ -1441,4 +1444,186 @@ public class OrderStatService { return wb; } + + public List yearStatBySup(String year) { + List list; + if (StrKit.notBlank(year)) { + list = Db.find("select s.name, a.* from supermarket s\n" + + "left join (\n" + + " select t.supermarket_id id, count(t.sn) cnt, sum(t.total_price) total_price, sum(weight) total_weight from order_temp t\n" + + " where t.state = 5\n" + + " and t.create_time like ? \n" + + " group by t.supermarket_id\n" + + ") a on s.id = a.id", year + "%"); + } else { + list = Db.find("select s.name, a.* from supermarket s\n" + + "left join (\n" + + " select t.supermarket_id id, count(t.sn) cnt, sum(t.total_price) total_price, sum(weight) total_weight from order_temp t\n" + + " where t.state = 5\n" + + " group by t.supermarket_id\n" + + ") a on s.id = a.id"); + } + + Record hj = new Record(); + hj.set("id", 0); + hj.set("name", "合计"); + hj.set("cnt", 0); + hj.set("total_price", new BigDecimal(0)); + hj.set("total_weight", new BigDecimal(0)); + + for (Record record : list) { + hj.set("cnt", hj.getInt("cnt") + record.getInt("cnt")); + hj.set("total_price", hj.getBigDecimal("total_price").add(record.getBigDecimal("total_price"))); + hj.set("total_weight", hj.getBigDecimal("total_weight").add(record.getBigDecimal("total_weight"))); + } + + list.add(hj); + + return list; + } + + public Workbook yearStatBySupExport(String year) { + List list = yearStatBySup(year); + Workbook wb = new XSSFWorkbook(); + Sheet sheet; + + if (StrKit.notBlank(year)) { + sheet = wb.createSheet(year + "年销售汇总"); + } else { + sheet = wb.createSheet("销售汇总"); + } + + + // 表头 start + Row row = sheet.createRow(0); + int a = 0; + row.createCell(a++).setCellValue("名称"); + row.createCell(a++).setCellValue("订单量"); + row.createCell(a++).setCellValue("总销售吨数"); + row.createCell(a++).setCellValue("总销售额"); + + int end_col = 4; + int datalen = list.size(); + for (int i = 0; i < datalen; i++) { + Record order = list.get(i); + + row = sheet.createRow(i + 1); + a = 0; + row.createCell(a++).setCellValue(order.getStr("name")); + row.createCell(a++).setCellValue(order.getInt("cnt")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(order, "total_weight")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(order, "total_price")); + } + + ReportExcelStyle.setCommonCellStyle(wb, sheet, datalen, end_col); + + return wb; + } + + public List yearStatByCustomer(String year) { + List list; + if (StrKit.notBlank(year)) { + list = Db.find("select ifnull(c.name, '零散') name, a.*, p.surplus total_surplus from (\n" + + " select ifnull(t.customer_id, -1) id, count(t.sn) cnt, sum(t.total_price) total_price, sum(weight) total_weight from order_temp t\n" + + " where t.state = 5\n" + + " and t.create_time like ? \n" + + " group by t.customer_id\n" + + " ) a\n" + + " left join customer c on c.id = a.id\n" + + " left join prepay_customer p on p.customer_id = a.id", year + "%"); + } else { + list = Db.find("select ifnull(c.name, '零散') name, a.*, p.surplus total_surplus from (\n" + + " select ifnull(t.customer_id, -1) id, count(t.sn) cnt, sum(t.total_price) total_price, sum(weight) total_weight from order_temp t\n" + + " where t.state = 5\n" + + " group by t.customer_id\n" + + " ) a\n" + + " left join customer c on c.id = a.id\n" + + " left join prepay_customer p on p.customer_id = a.id"); + } + + Record hj = new Record(); + hj.set("id", 0); + hj.set("name", "合计"); + hj.set("cnt", 0); + hj.set("total_price", new BigDecimal(0)); + hj.set("total_weight", new BigDecimal(0)); + hj.set("total_weight", new BigDecimal(0)); + hj.set("total_surplus", new BigDecimal(0)); + + for (Record record : list) { + hj.set("cnt", hj.getInt("cnt") + record.getInt("cnt")); + hj.set("total_price", hj.getBigDecimal("total_price").add(record.getBigDecimal("total_price"))); + hj.set("total_weight", hj.getBigDecimal("total_weight").add(record.getBigDecimal("total_weight"))); + + if (record.get("total_surplus") != null) { + hj.set("total_surplus", hj.getBigDecimal("total_surplus").add(record.getBigDecimal("total_surplus"))); + } + } + + hj.set("total_account_surplus", hj.getBigDecimal("total_surplus").add(hj.getBigDecimal("total_price"))); + + list.add(hj); + + return list; + } + + + public Workbook yearStatByCustomerExport(String year) { + List list = yearStatByCustomer(year); + Workbook wb = new XSSFWorkbook(); + Sheet sheet; + + if (StrKit.notBlank(year)) { + sheet = wb.createSheet(year + "年销售汇总"); + } else { + sheet = wb.createSheet("销售汇总"); + } + + + // 表头 start + Row row = sheet.createRow(0); + int a = 0; + row.createCell(a++).setCellValue("名称"); + row.createCell(a++).setCellValue("订单量"); + row.createCell(a++).setCellValue("总销售吨数"); + row.createCell(a++).setCellValue("总销售额"); + row.createCell(a++).setCellValue("客户总余额"); + + int end_col = 5; + int datalen = list.size(); + Record hj = null; + + for (int i = 0; i < datalen; i++) { + Record order = list.get(i); + + row = sheet.createRow(i + 1); + a = 0; + + if (order.getInt("id") == 0) { + hj = order; + } + + row.createCell(a++).setCellValue(order.getStr("name")); + row.createCell(a++).setCellValue(order.getInt("cnt")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(order, "total_weight")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(order, "total_price")); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(order, "total_surplus")); + } + + if (hj != null) { + row = sheet.createRow(datalen + 1); + a = 0; + + row.createCell(a++).setCellValue("账户总余额"); + row.createCell(a++).setCellValue(""); + row.createCell(a++).setCellValue(""); + row.createCell(a++).setCellValue(DataUtil.getDefaultByRecord(hj, "total_account_surplus")); + row.createCell(a++).setCellValue(""); + } + + sheet.addMergedRegion(new CellRangeAddress(datalen + 1, datalen + 1, 3, 4));// 下标从0开始 起始行号,终止行号, 起始列号,终止列号 + ReportExcelStyle.setCommonCellStyle(wb, sheet, datalen + 1, end_col); + + return wb; + } } diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java index 096edaf..f29b3f7 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java @@ -33,8 +33,12 @@ public class OrderclusterTruckController extends Controller { * 分页查找 ordercluster_truck 订单相关 - 订单派车 */ public void find() { - PageParam pp = getBean(PageParam.class, "", true); - renderJson(Result.object(OrderclusterTruckService.me.find(pp))); + PageParam pp = getBean(PageParam.class, "", true); + String stm = get("stm"); + String etm = get("etm"); + String customer_name = get("customer_name"); + String truck_license = get("truck_license"); + renderJson(Result.object(OrderclusterTruckService.me.find(pp, stm, etm, customer_name, truck_license))); } /** diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/stat/sale/OrderStatController.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/stat/sale/OrderStatController.java index 03b0e75..1f6b69a 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/stat/sale/OrderStatController.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/stat/sale/OrderStatController.java @@ -4,6 +4,7 @@ import com.cowr.common.base.BaseController; 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.ssjygl.stat.sale.OrderStatService; @@ -279,4 +280,26 @@ public class OrderStatController extends BaseController { render(new ExcelRender(stm + "_" + etm + "_砂站" + (isprepaid != null && isprepaid == 1 ? "预付费" : "") + "销售汇总表_" + System.currentTimeMillis() + ".xlsx", wb)); } } + + public void statYearCustomer() { + String tm = get("tm"); + int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 + if (export == 0) { + renderJson(Result.object(OrderStatService.me.yearStatByCustomer(tm))); + } else { + Workbook wb = OrderStatService.me.yearStatByCustomerExport(tm); + render(new ExcelRender("按客户统计总销售汇总表_" + System.currentTimeMillis() + ".xlsx", wb)); + } + } + + public void statYearBySup() { + String tm = get("tm"); + int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 + if (export == 0) { + renderJson(Result.object(OrderStatService.me.yearStatBySup(tm))); + } else { + Workbook wb = OrderStatService.me.yearStatBySupExport(tm); + render(new ExcelRender("按砂站总销售汇总表_" + System.currentTimeMillis() + ".xlsx", wb)); + } + } } diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/synctask/SyncTaskService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/synctask/SyncTaskService.java index b7855db..f719598 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/synctask/SyncTaskService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/synctask/SyncTaskService.java @@ -174,6 +174,13 @@ public class SyncTaskService { if (ret.length != list.size()) { return false; } + + for (int i : ret) { + // 必须是每条 sql 修改一条记录 + if (i != 1) { + return false; + } + } } } @@ -196,6 +203,13 @@ public class SyncTaskService { if (ret.length != list.size()) { return false; } + + for (int i : ret) { + // 必须是每条 sql 修改一条记录 + if (i != 1) { + return false; + } + } } } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java index 5ecf119..b97f9fc 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java @@ -221,6 +221,8 @@ public class NettyServer { .fluentPut("target", Enums.MsgTarget.SYNCRECV) .fluentPut("id", data.get("id")) .toJSONString()); + } else { + log.debug("数据接收后,入库失败:", msg); } } else if (Enums.MsgTarget.SYNCRECV.name().equals(target)) { SyncTaskService.me.syncComplete(json.getString("id")); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/EditTempClusterValidator.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/EditTempClusterValidator.java new file mode 100644 index 0000000..117affd --- /dev/null +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/EditTempClusterValidator.java @@ -0,0 +1,21 @@ +package com.cowr.service.ssjygl.order.ordercluster; + +import com.cowr.common.validator.CrudParamValidator; +import com.cowr.common.view.Result; +import com.jfinal.core.Controller; +import com.jfinal.kit.StrKit; + +public class EditTempClusterValidator extends CrudParamValidator { + @Override + protected void validate(Controller c) { + validateRequired("id", "id", "id 必填"); + validateInteger("id", 1, 2147483647, "id", "id 范围 1~2147483647"); + validateBigDecimal("total_weight", new java.math.BigDecimal("0.01"), new java.math.BigDecimal(9.9999999999E10), "total_weight", "total_weight 范围 0.01~9.9999999999E10"); + validateString("trucks", 1, 2000, "trucks", "trucks 长度 1~2000"); + } + + @Override + protected void handleError(Controller c) { + c.renderJson(Result.failed(getErrmsg())); + } +} diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterController.java index 036f968..204ff78 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterController.java @@ -94,6 +94,21 @@ public class OrderclusterController extends BaseController { renderJson(OrderclusterSyncService.me.update(model, tokenuser)); } + @Before(EditTempClusterValidator.class) + public void editTemp() { + Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); + + if (tokenuser == null) { + renderJson(Result.noauth()); + return; + } + + Ordercluster model = getModel(Ordercluster.class, "", true); // 忽略不在model中的字段 + String trucks = get("trucks"); + + renderJson(OrderclusterSyncService.me.updateTemp(model, trucks, tokenuser)); + } + /** * 分页查找 ordercluster 订单簇 - 集团客户订单 */ diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java index c96e9b0..35b1e62 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/OrderclusterSyncService.java @@ -245,8 +245,8 @@ public class OrderclusterSyncService extends BaseSyncService { String trucks, Sysuser sysuser ) { - String query_cutoff_time = DateTimeUtil.sdf.get().format(cutoff_time); - Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id); + String query_cutoff_time = DateTimeUtil.sdf.get().format(cutoff_time); + Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id); if (supermarket == null) { return Result.failed("砂站信息无效"); } @@ -315,16 +315,20 @@ public class OrderclusterSyncService extends BaseSyncService { " and t.truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray()); if (chkduk != null && !chkduk.isEmpty()) { - ts = new ArrayList<>(); + List outerr = new ArrayList<>(); for (Record bl : chkduk) { - ts.add(bl.get("truck_license")); + outerr.add(String.format( + "[%s]已经在[%s]分配给了[%s]", + bl.get("truck_license"), + DateTimeUtil.sdfymd.get().format(bl.get("cutoff_time")), + bl.get("customer_name") + )); } - return Result.failed(StrKit.join(ts, ",") + " 车牌号已经分配给其他客户"); + return Result.failed(StrKit.join(outerr, "。")); } - SyncTask synctask = new SyncTask(); Ordercluster model = new Ordercluster(); model.setCustomerName(customer_name); @@ -511,6 +515,202 @@ public class OrderclusterSyncService extends BaseSyncService { } } + + public Result updateTemp(Ordercluster model, String trucks, Sysuser sysuser) { + Ordercluster oldobj = model.findByPk(); + + if (oldobj == null) { + return Result.failed(false, "按主键未找到对应记录"); + } + + if (oldobj.getState() >= OrderStateEnum.RECEIVED.getStateid()) { + return Result.failed(false, "订单已完成,不能修改"); + } + + BigDecimal overweight = OrderclusterService.me.getOverWeight(model.getId()); // 集团订单已完成量 + + if (model.getTotalWeight().compareTo(overweight) < 0) { + return Result.failedstr("总量不能低于已运输量(%.2f)", overweight); + } else { + oldobj.setTotalWeight(model.getTotalWeight()); + } + + String query_cutoff_time = DateTimeUtil.sdf.get().format(oldobj.getCutoffTime()); + List chk = new ArrayList<>(); + String[] truckarr = trucks.split(","); + List ts = new ArrayList<>(); + List tsql = new ArrayList<>(); + + // 检查提交上来的车辆字符串是否用重复的 + for (String truck_license : truckarr) { + if (chk.contains(truck_license)) { + return Result.failedstr("车牌号 %s 重复", truck_license); + } + + chk.add(truck_license); + + ts.add(truck_license); + tsql.add("?"); + } + + // 检查是否还在黑名单中,未被移除 + List list = Blacklist.dao.find( + "select * from blacklist \n" + + " where remove_user_id is null \n" + + " and truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray()); + + if (list != null && !list.isEmpty()) { + List retts = new ArrayList<>(); + + for (Blacklist bl : list) { + retts.add(bl.getTruckLicense()); + } + + return Result.failed(StrKit.join(retts, ",") + " 车牌号在黑名单中"); + } + + ts.add(0, query_cutoff_time + "%"); + List chkduk = Db.find( + "select * from ordercluster_truck t \n" + + " left join ordercluster c on c.id = t.ordercluster_id\n" + + " where c.state < 5 \n" + // OrderStateEnum.RECEIVED.getStateid() + " and t.ordercluster_id <> " + oldobj.getId() + + " and c.cutoff_time like ? \n" + + " and t.truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray()); + + if (chkduk != null && !chkduk.isEmpty()) { + List outerr = new ArrayList<>(); + + for (Record bl : chkduk) { + outerr.add(String.format( + "[%s]已经在[%s]分配给了[%s]", + bl.get("truck_license"), + DateTimeUtil.sdfymd.get().format(bl.get("cutoff_time")), + bl.get("customer_name") + )); + } + + return Result.failed(StrKit.join(outerr, "。")); + } + + // 查询已有的集团订单分配的车辆 + List otlist = OrderclusterTruck.dao.find( + "select * from ordercluster_truck \n" + + " where ordercluster_id = ? \n", oldobj.getId()); + + List dellist = new ArrayList<>(); + List chktpsql = new ArrayList<>(); + List chkold = new ArrayList<>(); + SyncTask synctask = new SyncTask(); + + // 数据库中,提交上的数据中没有的,要删掉 + for (OrderclusterTruck ot : otlist) { + if (!chk.contains(ot.getTruckLicense())) { + dellist.add(ot.getTruckLicense()); + chktpsql.add("?"); + synctask.addDeleteData(ot); + } else { + chkold.add(ot.getTruckLicense()); + } + } + + // 要删除的车辆没有结算,不能删除 + if (!dellist.isEmpty()) { + List querydel = new ArrayList<>(); + querydel.add(oldobj.getSupermarketId().toString()); + querydel.add(DateTimeUtil.sdf.get().format(oldobj.getCutoffTime()) + "%"); + querydel.addAll(dellist); + + List chktp = Transport.dao.find("select * from transport t \n" + + " where t.state < 5 \n" + + " and t.supermarket_id = ? \n" + + " and t.in_time like ? \n" + + " and t.truck_license in(" + StrKit.join(chktpsql, ",") + ")", querydel.toArray()); + + if (!chktp.isEmpty()) { + List outerr = new ArrayList<>(); + + for (Transport tp : chktp) { + outerr.add(String.format("[%s]已进入[%s]砂站,删除后不能结算", tp.getTruckLicense(), SvrCacheData.SUP_CACHE.get(tp.getSupermarketId()).getName())); + } + + return Result.failed(StrKit.join(outerr, "\r\n")); + } + } + + List savelist = new ArrayList<>(); + + for (String truck_license : truckarr) { + // 已经在数据库中的,不再重复添加 + if (chkold.contains(truck_license)) { + continue; + } + + OrderclusterTruck oct = new OrderclusterTruck(); + oct.setId(StrKit.getRandomUUID()); + oct.setOrderclusterId(oldobj.getId()); + oct.setTruckLicense(truck_license); + + synctask.addSaveData(oct); + savelist.add(oct); + } + + try { + boolean ret = Db.tx(new IAtom() { + @Override + public boolean run() throws SQLException { + try { + if (!dellist.isEmpty()) { + int delret = Db.delete("delete from ordercluster_truck where ordercluster_id = " + oldobj.getId() + + " and truck_license in ('" + StrKit.join(dellist, "','") + "')"); + + log.debug("删除 ordercluster_truck %d", delret); + + if(delret != dellist.size()){ + return false; + } + } + + if (!savelist.isEmpty()) { + int[] ret = Db.batchSave(savelist, savelist.size()); + + for (int i : ret) { + // 必须是每条 sql 修改一条记录 + if (i != 1) { + return false; + } + } + } + + boolean ret = oldobj.update(); + + if (!ret) { + return false; + } + + synctask.addUpdateData(oldobj); + + return SyncTaskService.me.save(synctask, oldobj.getSupermarketId()) + && ModifyLogService.me.save(model, null, Enums.DataOpType.UPDATE.getId(), sysuser); + } catch (Exception e) { + log.error(e.getMessage(), e); + + return false; + } + } + }); + + if (ret) { + SyncTaskService.me.send(synctask); + } + + return ret ? Result.success(oldobj) : Result.failed("修改失败"); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.failed("修改失败"); + } + } + public Result update(Ordercluster model, Sysuser sysuser) { Ordercluster oldobj = model.findByPk(); @@ -593,6 +793,10 @@ public class OrderclusterSyncService extends BaseSyncService { } }); + if (ret) { + SyncTaskService.me.send(synctask); + } + return ret ? Result.success(oldobj) : Result.failed("修改失败"); } catch (Exception e) { log.error(e.getMessage(), e); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java index 84e1e9a..2a32a55 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckController.java @@ -70,8 +70,12 @@ public class OrderclusterTruckController extends Controller { * 分页查找 ordercluster_truck 订单相关 - 订单派车 */ public void find() { - PageParam pp = getBean(PageParam.class, "", true); - renderJson(Result.object(OrderclusterTruckService.me.find(pp))); + PageParam pp = getBean(PageParam.class, "", true); + String stm = get("stm"); + String etm = get("etm"); + String customer_name = get("customer_name"); + String truck_license = get("truck_license"); + renderJson(Result.object(OrderclusterTruckService.me.find(pp, stm, etm, customer_name, truck_license))); } /** diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckSyncService.java index c2d9be7..e5bbb6f 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordercluster/truck/OrderclusterTruckSyncService.java @@ -6,6 +6,7 @@ import com.cowr.common.utils.DateTimeUtil; import com.cowr.common.view.Result; import com.cowr.model.*; import com.cowr.service.ssjygl.base.BaseSyncService; +import com.cowr.service.ssjygl.main.SvrCacheData; import com.cowr.service.ssjygl.synctask.SyncTaskService; import com.cowr.ssjygl.modifylog.ModifyLogService; import com.jfinal.kit.StrKit; @@ -91,15 +92,20 @@ public class OrderclusterTruckSyncService extends BaseSyncService { retts.add(bl.get("truck_license")); } - return Result.failedstr("%s 已在[%s]分配", StrKit.join(retts, ","), DateTimeUtil.sdfymd.get().format(ordercluster.getCutoffTime())); + return Result.failedstr( + "%s 已在[%s]分配", + StrKit.join(retts, ","), + DateTimeUtil.sdfymd.get().format(ordercluster.getCutoffTime()) + ); } - // 查询已有的集团订单 + // 查询已有的集团订单分配的车辆 List otlist = OrderclusterTruck.dao.find( "select * from ordercluster_truck \n" + " where ordercluster_id = ? \n", ordercluster_id); List dellist = new ArrayList<>(); + List chktpsql = new ArrayList<>(); List chkold = new ArrayList<>(); SyncTask synctask = new SyncTask(); @@ -107,12 +113,36 @@ public class OrderclusterTruckSyncService extends BaseSyncService { for (OrderclusterTruck ot : otlist) { if (!chk.contains(ot.getTruckLicense())) { dellist.add(ot.getTruckLicense()); + chktpsql.add("?"); synctask.addDeleteData(ot); } else { chkold.add(ot.getTruckLicense()); } } + // 要删除的车辆没有结算,不能删除 + if(!dellist.isEmpty()){ + List querydel = new ArrayList<>(); + querydel.add(ordercluster.getSupermarketId().toString()); + querydel.add(DateTimeUtil.sdf.get().format(ordercluster.getCutoffTime()) + "%"); + querydel.addAll(dellist); + List chktp = Transport.dao.find("select * from transport t \n" + + " where t.state < 5 \n" + + " and t.supermarket_id = ? \n" + + " and t.in_time like ? \n" + + " and t.truck_license in(" + StrKit.join(chktpsql, ",") + ")", querydel.toArray()); + + if(!chktp.isEmpty()){ + List outerr = new ArrayList<>(); + + for(Transport tp : chktp){ + outerr.add(String.format("[%s]已进入[%s]砂站,删除后不能结算", tp.getTruckLicense(), SvrCacheData.SUP_CACHE.get(tp.getSupermarketId()).getName())); + } + + return Result.failed(StrKit.join(outerr, "\r\n")); + } + } + List savelist = new ArrayList<>(); for (String truck_license : truckarr) { @@ -151,6 +181,10 @@ public class OrderclusterTruckSyncService extends BaseSyncService { " and truck_license in ('" + StrKit.join(dellist, "','") + "')"); log.debug("删除 ordercluster_truck %d", delret); + + if(delret != dellist.size()){ + return false; + } } if (!savelist.isEmpty()) { 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 e9fe5ee..2992912 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 @@ -5,6 +5,7 @@ import com.cowr.common.enums.UserTypeEnum; 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; @@ -340,4 +341,20 @@ public class OrderStatController extends BaseController { render(new ExcelRender(stm + "_" + etm + "_砂站" + (isprepaid != null && isprepaid == 1 ? "预付费" : "") + "销售汇总表_" + System.currentTimeMillis() + ".xlsx", wb)); } } + + public void statYearCustomer() { + String tm = get("tm"); + int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 + if (export == 0) { + renderJson(Result.object(OrderStatService.me.yearStatByCustomer(tm))); + } + } + + public void statYearBySup() { + String tm = get("tm"); + int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 + if (export == 0) { + renderJson(Result.object(OrderStatService.me.yearStatBySup(tm))); + } + } } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java index 99803de..53dbd57 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/synctask/SyncTaskService.java @@ -161,6 +161,7 @@ public class SyncTaskService { /** * 按砂站ID去找未完成的,避免一个砂站有过多的未完成堆积,导致其他的不能下发 + * * @param supermarket_id */ public void task(int supermarket_id) { @@ -246,6 +247,13 @@ public class SyncTaskService { if (ret.length != list.size()) { return false; } + + for (int i : ret) { + // 必须是每条 sql 修改一条记录 + if (i != 1) { + return false; + } + } } } @@ -267,6 +275,13 @@ public class SyncTaskService { if (ret.length != list.size()) { return false; } + + for (int i : ret) { + // 必须是每条 sql 修改一条记录 + if (i != 1) { + return false; + } + } } } @@ -368,6 +383,13 @@ public class SyncTaskService { if (ret.length != sts.size()) { return false; } + + for (int i : ret) { + // 必须是每条 sql 修改一条记录 + if (i != 1) { + return false; + } + } } }