From 9309e740b042b25d38d5262f4bb1943f355675d5 Mon Sep 17 00:00:00 2001 From: wuwenxiong <646448316@qq.com> Date: Mon, 3 Jan 2022 23:52:59 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=B9=B4=E7=BB=9F=E8=AE=A1=E7=9A=84=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E6=9D=A1=E4=BB=B6=E9=87=8C=E9=9D=A2=20=EF=BC=8C?= =?UTF-8?q?=E5=B9=B4=E9=80=89=E6=8B=A9=E6=A1=86=E7=9A=84=20allowClear=202.?= =?UTF-8?q?=E9=80=9A=E8=BF=87=20/local/transport/query/transportInfo=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=9A=84=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=88=A4=E6=96=AD=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=98=AF=E9=A2=84?= =?UTF-8?q?=E5=94=AE=E8=BD=A6=E8=BE=86=EF=BC=8C=E8=BF=99=E4=B8=AA=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E7=95=8C=E9=9D=A2=E5=B0=B1=E6=8D=A2=E6=88=90=E6=8F=90?= =?UTF-8?q?=E8=B4=A7=E7=95=8C=E9=9D=A2=203.=E9=A2=84=E5=94=AE=E5=8D=95?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2=E6=B7=BB=E5=8A=A0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=B7=B2=E6=8F=90=E8=B4=A7=E5=AE=8C=E6=88=90=E7=9A=84?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E7=AD=9B=E9=80=89=204.=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E4=B8=8B=E9=9D=A2=E7=9A=84=E8=BF=90=E8=BE=93=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=92=8C=E7=BB=9F=E8=AE=A1=E4=B8=8B=E9=9D=A2=E7=9A=84=E6=97=A5?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E9=83=BD=E5=8A=A0=E4=B8=8A=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E9=A2=84=E5=94=AE=E6=8F=90=E8=B4=A7=E7=9A=84=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E7=AD=9B=E9=80=89=205=E3=80=81=E5=81=9A=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E9=85=8D=E9=A2=9D=E9=99=90=E5=88=B6=EF=BC=8C=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E4=BE=9B=E7=A0=82=E9=85=8D=E9=A2=9D=E5=92=8C=E9=A2=84=E5=94=AE?= =?UTF-8?q?=E9=85=8D=E9=A2=9D=E4=BA=92=E6=96=A5=EF=BC=8C=E4=B8=8D=E8=83=BD?= =?UTF-8?q?=E5=90=8C=E6=97=B6=E9=83=BD=E6=9C=89=E8=BF=9B=E8=A1=8C=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=206=E3=80=81=E8=BF=90=E8=BE=93=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E8=AE=A2=E5=8D=95=E5=8F=96=E6=B6=88=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E8=A6=81=E5=90=8C=E6=AD=A5=E6=9B=B4=E6=96=B0=E9=A2=84?= =?UTF-8?q?=E5=94=AE=E5=8D=95=E4=B8=AD=E7=9A=84=E6=8F=90=E8=B4=A7=E9=A2=9D?= =?UTF-8?q?=EF=BC=8C=E5=B0=86=E5=8F=96=E6=B6=88=E7=9A=84=E9=A2=9D=E5=BA=A6?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ordercluster/OrderclusterService.java | 11 +- .../order/ordertemp/OrderTempService.java | 12 + .../presellorder/PresellOrderService.java | 20 +- .../ssjygl/stat/sale/OrderStatService.java | 39 +- .../order/ordertemp/OrderTempController.java | 29 +- .../order/ordertemp/OrderTempSyncService.java | 477 ++++++++++++++++-- .../presellorder/PresellOrderController.java | 26 +- .../ssjygl/stat/sale/OrderStatController.java | 7 +- .../ordercluster/OrderclusterSyncService.java | 6 +- .../order/ordertemp/OrderTempController.java | 6 +- .../order/ordertemp/OrderTempSyncService.java | 79 +-- .../presellorder/PresellOrderController.java | 26 +- .../ssjygl/stat/sale/OrderStatController.java | 7 +- 13 files changed, 610 insertions(+), 135 deletions(-) diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java index 23611e4..b5b44d3 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordercluster/OrderclusterService.java @@ -384,21 +384,24 @@ public class OrderclusterService extends BaseService { return Db.find(sql, ts.toArray()); } - public List undonlist(int supermarket_id, int customer_id, String start_time, String cutoff_time, int sale_type) { + public List undonlist(int supermarket_id, int customer_id, String start_time, String cutoff_time, Integer sale_type) { List ts = new ArrayList<>(); ts.add(OrderStateEnum.RECEIVED.getStateid()); ts.add(cutoff_time + " 23:59:59"); ts.add(start_time + " 00:00:00"); ts.add(supermarket_id); ts.add(customer_id); - ts.add(sale_type); String sql = "select * from ordercluster t \n" + " where t.state < ? \n" + " and t.start_time <= ? \n" + " and t.cutoff_time >= ? \n" + " and t.supermarket_id = ? \n" + - " and t.customer_id = ? \n" + - " and t.sale_type = ?"; + " and t.customer_id = ? \n"; + if (sale_type != null && (sale_type == 0 || sale_type == 1)) { + sql += " and t.sale_type = ?"; + ts.add(sale_type); + } + return Db.find(sql, ts.toArray()); } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordertemp/OrderTempService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordertemp/OrderTempService.java index 42efe98..e2c8470 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordertemp/OrderTempService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/order/ordertemp/OrderTempService.java @@ -89,6 +89,7 @@ public class OrderTempService extends BaseService { String etm, Integer isprepaid, Integer state, + Integer type, String invoice_code, Integer invoice_type, String ticket_code, @@ -167,6 +168,11 @@ public class OrderTempService extends BaseService { paraList.add(state); } + if (type != null && (type == 0 || type == 1)) { + fromsql += " and t.sale_type = ? \n"; + paraList.add(type); + } + if (invoice_type != null) { fromsql += " and t.invoice_type = ? \n"; paraList.add(invoice_type); @@ -253,6 +259,7 @@ public class OrderTempService extends BaseService { String etm, Integer isprepaid, Integer state, + Integer type, String invoice_code, Integer invoice_type, Integer product_id, @@ -329,6 +336,11 @@ public class OrderTempService extends BaseService { paraList.add(state); } + if (type != null && (type == 0 || type == 1)) { + fromsql += " and t.sale_type = ? \n"; + paraList.add(type); + } + if (invoice_type != null) { fromsql += " and t.invoice_type = ? \n"; paraList.add(invoice_type); diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/presellorder/PresellOrderService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/presellorder/PresellOrderService.java index 7dd30f6..8690f59 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/presellorder/PresellOrderService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/presellorder/PresellOrderService.java @@ -23,7 +23,7 @@ import java.util.List; public class PresellOrderService extends BaseService { public static final PresellOrderService me = new PresellOrderService(); - public Page find(PageParam pp, Integer customer_id, Integer supermarket_id, Integer del, String name, String stm, String etm) { + public Page find(PageParam pp, Integer customer_id, Integer supermarket_id, Integer del, String name, String stm, String etm, Integer type) { String selectsql = "select t.*, c.name customer_name, s.name supermarket_name, c.address, c.texpayer_name, c.texpayer_num, c.memo,\n" + " (t.presell_amount - t.pug_amount) as surplus \n"; String fromsql = " from presell_order t \n" + @@ -63,6 +63,14 @@ public class PresellOrderService extends BaseService { paraList.add(etm); } + if (type != null && (type == 0 || type == 1)) { + if (type == 0) { + fromsql += " and t.presell_amount > t.pug_amount \n"; + } else { + fromsql += " and t.presell_amount = t.pug_amount \n"; + } + } + String totalRowSql = "select count(*) " + fromsql; String findSql = selectsql + fromsql; @@ -82,7 +90,7 @@ public class PresellOrderService extends BaseService { return Db.paginateByFullSql(pp.getPage(), pp.getSize(), totalRowSql, findSql, paraList.toArray()); } - public List list(Integer customer_id, Integer supermarket_id, Integer del, String name, String stm, String etm) { + public List list(Integer customer_id, Integer supermarket_id, Integer del, String name, String stm, String etm, Integer type) { String sql = "select t.*, c.name customer_name, s.name supermarket_name, c.address, c.texpayer_name, c.texpayer_num, c.memo, \n" + " (t.presell_amount - t.pug_amount) as surplus\n" + " from presell_order t \n" + @@ -122,6 +130,14 @@ public class PresellOrderService extends BaseService { paraList.add(etm); } + if (type != null && (type == 0 || type == 1)) { + if (type == 0) { + sql += " and t.presell_amount > t.pug_amount \n"; + } else { + sql += " and t.presell_amount = t.pug_amount \n"; + } + } + return PresellOrder.dao.find(sql, paraList.toArray()); } 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 01e8091..1805114 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 @@ -45,7 +45,8 @@ public class OrderStatService { Integer isprepaid, Integer product_id, String sn, - Integer customer_type_id + Integer customer_type_id, + Integer sale_type ) { String temp_sql = " select\n" + " t.sn\n" + @@ -77,6 +78,11 @@ public class OrderStatService { paraTempList.add(OrderStateEnum.RECEIVED.getStateid()); paraTempList.add(tm + "%"); + if (sale_type != null && (sale_type == 0 || sale_type == 1)) { + temp_sql += " and t.sale_type = ? \n"; + paraTempList.add(sale_type); + } + if (supermarket_id != null && supermarket_id > 0) { temp_sql += " and t.supermarket_id = ? \n"; paraTempList.add(supermarket_id); @@ -166,7 +172,8 @@ public class OrderStatService { Integer isprepaid, Integer product_id, String sn, - Integer customer_type_id + Integer customer_type_id, + Integer sale_type ) { List list = daydetail(tm, supermarket_id, @@ -177,7 +184,8 @@ public class OrderStatService { isprepaid, product_id, sn, - customer_type_id + customer_type_id, + sale_type ); list.sort(new Comparator() { @@ -2869,7 +2877,10 @@ public class OrderStatService { } public Workbook yearsalestatExportBySup(String tm) { - String title = tm + "年销售统计"; + String title = "销售统计"; + if (!StrKit.isBlank(tm)) { + title = tm + "年销售统计"; + } String[] headers = {"name", "item_name", "product_name", "order_num", "weight", "total_price"}; String[] regions = {"name", "item_name"}; Map titleMap = new HashMap<>(); @@ -2921,6 +2932,16 @@ public class OrderStatService { "WHERE\n" + " id <= 6\n" + "OR id = 11"); + + List shParamsList = new ArrayList<>(); + shParamsList.add(OrderStateEnum.RECEIVED.getStateid()); + String shParams = ""; + String yhParams = ""; + if (!StrKit.isBlank(tm)) { + shParams += " and t.create_time like ? \n"; + yhParams += " and p.presell_date like '" + tm + "%'\n"; + shParamsList.add(tm + "%"); + } // 实售 List shList = Db.find( "select s.id, s.name, p.id product_id, p.`name` product_name, ifnull(a.orderCount, 0) as order_num, ifnull(a.totalPrice, 0) as total_price, ifnull(a.weight, 0) as weight\n" + @@ -2931,12 +2952,12 @@ public class OrderStatService { " select t.supermarket_id as id, t.paid, t.total_price, t.weight, t.product_id\n" + " from order_temp t\n" + " where t.state = ? \n" + - " and t.create_time like ? \n" + + shParams + " ) t\n" + " group by t.id, t.product_id\n" + " ) a on a.id = t.supermarket_id and a.product_id = t.product_id\n" + " left join supermarket s on s.id = t.supermarket_id\n" + - " left join product p on p.id = t.product_id", OrderStateEnum.RECEIVED.getStateid(), tm + "%"); + " left join product p on p.id = t.product_id", shParamsList.toArray()); // 预售 List yhList = Db.find( "SELECT\n" + @@ -2946,9 +2967,9 @@ public class OrderStatService { " `presell_order` p\n" + "WHERE\n" + " del = 0\n" + - "AND p.presell_date LIKE ?\n" + - "GROUP BY\n" + - " p.supermarket_id", tm + "%"); + yhParams + + " GROUP BY\n" + + " p.supermarket_id"); List retChildren = new ArrayList<>(); List retList = new ArrayList<>(); diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempController.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempController.java index 6ad570a..c6c1d7b 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempController.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempController.java @@ -36,6 +36,7 @@ public class OrderTempController extends BaseController { String customer_name = get("customer_name"); String sn = get("sn"); Integer state = getInt("state"); + Integer type = getInt("type"); Integer product_id = getInt("product_id"); Integer supermarket_id = getInt("supermarket_id"); Integer isprepaid = getInt("isprepaid"); @@ -44,7 +45,7 @@ public class OrderTempController extends BaseController { Integer invoice_type = getInt("invoice_type"); Integer customer_id = getInt("customer_id"); Boolean invoice_code_is_null = getBoolean("invoice_code_is_null"); - renderJson(Result.object(OrderTempService.me.find(pp, sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, invoice_code, invoice_type, ticket_code, product_id, invoice_code_is_null))); + renderJson(Result.object(OrderTempService.me.find(pp, sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, type, invoice_code, invoice_type, ticket_code, product_id, invoice_code_is_null))); } @Before(StartAndEndIntervalValidator.class) @@ -55,6 +56,7 @@ public class OrderTempController extends BaseController { String customer_name = get("customer_name"); String sn = get("sn"); Integer state = getInt("state"); + Integer type = getInt("type"); Integer product_id = getInt("product_id"); Integer supermarket_id = getInt("supermarket_id"); Integer isprepaid = getInt("isprepaid"); @@ -63,7 +65,7 @@ public class OrderTempController extends BaseController { Integer customer_id = getInt("customer_id"); Boolean invoice_code_is_null = getBoolean("invoice_code_is_null"); - Workbook wb = OrderTempService.me.export(sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, invoice_code, invoice_type, product_id, invoice_code_is_null); + Workbook wb = OrderTempService.me.export(sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, type, invoice_code, invoice_type, product_id, invoice_code_is_null); render(new ExcelRender("运输日志_" + System.currentTimeMillis() + ".xlsx", wb)); } @@ -137,6 +139,29 @@ public class OrderTempController extends BaseController { renderJson(OrderTempSyncService.me.prepay(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, ticket_code, product_id, memo, printer, tokenuser, req_receipt)); } + @Before(OrderTempPrepayValidator.class) + public void presellpay() { + Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); + + if (tokenuser == null) { + renderJson(Result.noauth()); + return; + } + + String uuid = get("uuid"); + String transport_id = get("transport_id"); + Integer ordercluster_id = getInt("ordercluster_id"); + String invoice_number = get("invoice_number"); + String invoice_code = get("invoice_code"); + String ticket_code = get("ticket_code"); + Integer product_id = getInt("product_id"); + String memo = get("memo"); + String printer = get("printer", Enums.PrinterIdEnum.printer1.name()); + int req_receipt = getInt("req_receipt", 0); // 是否需要发票,0 默认不需要,1需要 + + renderJson(OrderTempSyncService.me.presellpay(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, ticket_code, product_id, memo, printer, tokenuser, req_receipt)); + } + @Before(SnValidator.class) public void invoice() { Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token")); diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java index 2a93705..175a872 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/order/ordertemp/OrderTempSyncService.java @@ -735,9 +735,6 @@ public class OrderTempSyncService { } //账户可用余额 BigDecimal availableBalance = RefundDetailService.me.getAvailableBalance(prepayCustomer.getCustomerId(), prepayCustomer.getSurplus()); - if (ordercluster.getSaleType() == 1) { - availableBalance = PresellOrderService.me.getPresellCustomerSurplusById(ordercluster.getPresellOrderId()); - } if (availableBalance == null || availableBalance.compareTo(min) <= 0) { return Result.failed("客户余额不足"); } @@ -882,46 +879,415 @@ public class OrderTempSyncService { order.setPaid(new BigDecimal(0)); // 预付费的实际支付为 0 order.setPrepayCustomerId(prepayCustomer.getId()); - if (ordercluster.getSaleType() == 0) { - if (prepayCustomer.getSurplus().compareTo(order.getTotalPrice().setScale(2, BigDecimal.ROUND_HALF_UP)) < 0) { + if (prepayCustomer.getSurplus().compareTo(order.getTotalPrice().setScale(2, BigDecimal.ROUND_HALF_UP)) < 0) { + return false; + } + + synctask.addIncrementData( + prepayCustomer.getTablename(), + "id", + prepayCustomer.getId(), + new JSONObject().fluentPut("surplus", new BigDecimal(0).subtract(order.getTotalPrice())) // 结算完成,在原余额上加上一个负数 + ); + + // 只更新本地 prepayCustomer 的 surplus + prepayCustomer.setSurplus(prepayCustomer.getSurplus().subtract(order.getTotalPrice())); + + ret = prepayCustomer.update(); + + if (!ret) { + return false; + } + + + ret = order.save() && transport.update(); + + if (!ret) { + return false; + } + + if (ordercluster.getState() == OrderStateEnum.INITIAL.getStateid()) { + ordercluster.setState(OrderStateEnum.ENTERED.getStateid()); + + ret = ordercluster.update(); + + if (!ret) { return false; } + synctask.addUpdateData(ordercluster); + } + + Stock stock = Stock.dao.findByIds(transport.getSupermarketId(), order.getProductId()); + if (stock == null) { + log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId()); + + stock = new Stock(); + stock.setProductId(order.getProductId()); + stock.setSupermarketId(order.getSupermarketId()); + stock.setStockWeight(new BigDecimal(0).subtract(net_weight)); + ret = stock.save(); + + if (!ret) { + return false; + } + synctask.addSaveData(stock); + } else { + stock.setStockWeight(stock.getStockWeight().subtract(net_weight)); // 销售减库存 + ret = stock.update(); + + if (!ret) { + return false; + } + + synctask.addUpdateData(stock); + } + + +// if (finalReceive != null) { + if (customer.getInvoiceType() == 1) { +// if (req_receipt == 1) { // 需要同时开具发票 + // 这里的 finalReceive 在前面肯定验证过了 + ret = finalReceive.update(); + + if (!ret) { + log.error("发票领用信息更新失败", invoice_code); + return false; + } + + InvoiceLog invoiceLog = new InvoiceLog(); + invoiceLog.setId(StrKit.getRandomUUID()); + invoiceLog.setInvoiceReceiveId(finalReceive.getId()); + invoiceLog.setCode(invoice_code); + invoiceLog.setInvoiceNumber(invoice_number); + invoiceLog.setState(OrderStateEnum.RECEIVED.getStateid()); + invoiceLog.setSettlementTime(now); + invoiceLog.setSettlementUserId(order.getSettlementUserId()); + invoiceLog.setSettlementUserName(order.getSettlementUserName()); + invoiceLog.setOrderSn(order.getSn()); + invoiceLog.setType(OrderTypeEnum.TEMP.getTypeid()); + + ret = invoiceLog.save(); + + if (!ret) { + return false; + } + + synctask.addSaveData(invoiceLog); + synctask.addUpdateData(finalReceive); + } else { + // 不开发票的,要开结算单 + ret = finalTicketReceive.update(); + + if (!ret) { + log.error("结算单领用信息更新失败", ticket_code); + return false; + } + + TicketLog ticketLog = new TicketLog(); + ticketLog.setId(StrKit.getRandomUUID()); + ticketLog.setTicketReceiveId(finalTicketReceive.getId()); + ticketLog.setTicketCode(ticket_code); + ticketLog.setState(OrderStateEnum.RECEIVED.getStateid()); + ticketLog.setSettlementTime(now); + ticketLog.setSettlementUserId(order.getSettlementUserId()); + ticketLog.setSettlementUserName(order.getSettlementUserName()); + ticketLog.setOrderSn(order.getSn()); + ticketLog.setType(OrderTypeEnum.TEMP.getTypeid()); + + ret = ticketLog.save(); + + if (!ret) { + return false; + } + + synctask.addSaveData(ticketLog); + synctask.addUpdateData(finalTicketReceive); + } +// } + + // 在这里更新sn字段之后存入 + synctask.addSaveData(order); + synctask.addUpdateData(transport); + + return SyncTaskService.me.save(synctask); + } catch (Exception e) { + log.error(e.getMessage(), e); + return false; + } + } + }); + + // 数据库保存成功后,立即推送到服务端,及时更新各个地方的客户余额 + if (ret) { + SyncTaskService.me.send(synctask); + } + + return LocalOrderService.me.orderPayComplete(ret, order.toRecord(), transport, printerId); + } + + public Result presellpay( + String uuid, + String transport_id, + Integer ordercluster_id, + String invoice_number, + String invoice_code, + String ticket_code, + Integer product_id, + String memo, + String printerId, + Sysuser sysuser, + int req_receipt + ) { + OrderTemp order = new OrderTemp(); + order.setUuid(uuid); + + if (order.checkDuplicate("uuid")) { + return Result.failed("【%s】已经存在", uuid); + } + + BigDecimal min = new BigDecimal(0); + Transport transport = Transport.dao.findById(transport_id); + if (transport == null) { + return Result.failed("进出场记录不能为空"); + } + + if (transport.getState() >= OrderStateEnum.RECEIVED.getStateid()) { + return Result.failed("进出场记录已完结或者已作废,不能使用"); + } + + // 验证重量 + if (transport.getFirstWeight() == null + || transport.getSecondWeight() == null + || transport.getFirstWeight().compareTo(min) < 0 + || transport.getSecondWeight().compareTo(min) < 0 + || transport.getSecondWeight().subtract(transport.getFirstWeight()).doubleValue() <= 0 // 销售订单 第一重量要比第二次重量小, 即 毛重 > 皮重 + ) { + return Result.failedstr("重量数据有误,第一次称重:%.4f,第二次称重:%.4f", transport.getFirstWeight(), transport.getSecondWeight()); + } + + BigDecimal weightLimit = TruckWeightLimitSyncService.me.getMinTruckWeightLimit(transport.getTruckLicense()); + if (transport.getSecondWeight().compareTo(weightLimit) > 0) { + return Result.failedstr("毛重不能超过 %.2f 吨", weightLimit); + } + + BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 + + OrderclusterTruck ot = OrderclusterTruck.dao.findFirst("select * from ordercluster_truck t \n" + + " where t.truck_license = ? \n" + + " and t.ordercluster_id = ? ", + transport.getTruckLicense(), + ordercluster_id + ); + + if (ot == null) { + return Result.failedstr("【%s】不是今日预付费车辆", transport.getTruckLicense()); + } + + Ordercluster ordercluster = Ordercluster.dao.findById(ordercluster_id); + + if (ordercluster == null) { + return Result.failedstr("预售订单【%s】信息不存在", ordercluster_id); + } + + if (ordercluster.getState() == OrderStateEnum.INVALID.getStateid()) { + return Result.failedstr("预售订单【%s】已完结,请重新下单", ordercluster_id); + } + + if (!DateTimeUtil.isInAssignTimeSlot(ordercluster.getStartTime(), ordercluster.getCutoffTime())) { + return Result.failedstr("预售订单只能在%s至%s内使用", + DateTimeUtil.sdfymd.get().format(ordercluster.getStartTime()), DateTimeUtil.sdfymd.get().format(ordercluster.getCutoffTime())); + } + + if (ordercluster.getSupermarketId() != CliCacheData.SUP.getId()) { + return Result.failedstr("配额指定砂站(%s)和当前砂站不匹配(%s)", ordercluster.getSupermarketId(), CliCacheData.SUP.getId()); + } + + BigDecimal overweight = OrderclusterService.me.getOverWeight(ordercluster_id); // 集团订单已完成量 + // 不能超过集团订单剩余量 + if (net_weight.compareTo(ordercluster.getTotalWeight().subtract(overweight)) > 0) { + return Result.failedstr("净重 %.2f 吨,超过了剩余的 %.2f 余量", net_weight, ordercluster.getTotalWeight().subtract(overweight)); + } + + Customer customer = Customer.dao.findById(ordercluster.getCustomerId()); + + if (customer == null) { + return Result.failedstr("未找到有效的客户信息"); + } + + if (customer.getType() != 1) { + return Result.failed("不是预付费客户"); + } + + + PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(customer.getId()); + + if (prepayCustomer == null) { + return Result.failed("没有找到客户预付费信息"); + } + //账户可用余额 + BigDecimal availableBalance = PresellOrderService.me.getPresellCustomerSurplusById(ordercluster.getPresellOrderId()); + if (availableBalance == null || availableBalance.compareTo(min) <= 0) { + return Result.failed("客户余额不足"); + } + + InvoiceReceive receive = null; + TicketReceive ticketReceive = null; + + // 2020-09-29 需要开具专票的,先开具结算单,不打发票 + // 2020-10-12 所有砂站都可以开结算单 + if (customer.getInvoiceType() == 1) { + receive = InvoiceReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), invoice_number, invoice_code); + if (receive == null) { + return Result.failed("没有有效的发票领用记录,或者发票已经被使用"); + } + + InvoiceLog invoiceLog = InvoiceLogService.me.checkUseInvoiceLog(invoice_number, invoice_code); + if (invoiceLog != null) { + return Result.failedstr("发票 %s|%s 已使用!重新打开结算界面,获取新的发票信息。", invoice_number, invoice_code); + } + + receive.setSurplus(receive.getSurplus() - 1); + receive.setCurrentCode(invoice_code); + + // 不满足开专票的条件的,就必须开具冠名发票 +// if (req_receipt == 1) { // 需要同时开具发票 + order.setInvoiceCode(invoice_code); + order.setInvoiceNumber(invoice_number); + order.setInvoiceType(1); + order.setInvoiceSite(1); // 在砂站开具冠名发票 +// } + } else { + // 需要专票的,在结算开了专票之后,再修改 invoice_site 字段 + // 不开冠名发票的,必须使用结算单 + ticketReceive = TicketReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), ticket_code); + if (ticketReceive == null) { + return Result.failed("没有有效的结算单领用记录,或者结算单已经被使用"); + } + + TicketLog ticketLog = TicketLogService.me.checkUseTicketLog(ticket_code); + if (ticketLog != null) { + return Result.failedstr("结算单 %s 已使用", ticket_code); + } + + ticketReceive.setSurplus(ticketReceive.getSurplus() - 1); + ticketReceive.setCurrentCode(ticket_code); + order.setTicketCode(ticket_code); + order.setInvoiceType(2); // 不需要开发票的,都是要专票的 + } + + Product product = Product.dao.findById(ordercluster.getProductId()); + + if (product == null) { + return Result.failedstr("未找到有效的品类信息"); + } + + // 物流公司信息 + order.setTransCoId(ordercluster.getTransCoId()); + order.setTransCoAddress(ordercluster.getTransCoAddress()); + order.setTransCoBankAccount(ordercluster.getTransCoBankAccount()); + order.setTransCoBankName(ordercluster.getTransCoBankName()); + order.setTransCoName(ordercluster.getTransCoName()); + order.setTransCoPhone(ordercluster.getTransCoPhone()); + order.setTransCoTexpayerName(ordercluster.getTransCoTexpayerName()); + order.setTransCoTexpayerNum(ordercluster.getTransCoTexpayerNum()); + + transport.setTransCoId(ordercluster.getTransCoId()); + transport.setTransCoAddress(ordercluster.getTransCoAddress()); + transport.setTransCoBankAccount(ordercluster.getTransCoBankAccount()); + transport.setTransCoBankName(ordercluster.getTransCoBankName()); + transport.setTransCoName(ordercluster.getTransCoName()); + transport.setTransCoPhone(ordercluster.getTransCoPhone()); + transport.setTransCoTexpayerName(ordercluster.getTransCoTexpayerName()); + transport.setTransCoTexpayerNum(ordercluster.getTransCoTexpayerNum()); + +// BigDecimal up = CustomerSupermarketProductService.me.getUnitPrice(customer.getId(), transport.getSupermarketId(), product.getId()); + BigDecimal up = ordercluster.getUnitPrice(); // 集团订单是每天创建的,可以使用集团订单中确定的单价 + + if (up == null) { + return Result.failedstr("未查到有效的单价信息"); + } + + Date now = new Date(); + SyncTask synctask = new SyncTask(); + + order.setTransportId(transport.getId()); + order.setSupermarketId(transport.getSupermarketId()); + order.setTruckLicense(transport.getTruckLicense()); + + // 运输信息 + order.setProductId(product.getId()); + order.setProductName(product.getName()); + + // 支付信息 + order.setUnitPrice(up); + order.setWeight(net_weight); // 使用净重更新重量 + order.setTotalPrice(TransPriceService.me.caleTotalPrice(up, net_weight)); // 获取根据净重和单价计算的总价,作为应付金额 + order.setPaid(order.getTotalPrice()); // 如果有预付费,该字段根据预付费情况设置。实付金额 + order.setPayType(1); + order.setOrderclusterId(ordercluster_id); + + // 客户信息 + order.setCustomerId(customer.getId()); + order.setCustomerAddress(customer.getAddress()); + order.setCustomerBankAccount(customer.getBankAccount()); + order.setCustomerBankName(customer.getBankName()); + order.setCustomerName(customer.getName()); + order.setCustomerPhone(customer.getPhone()); + order.setCustomerTexpayerName(customer.getTexpayerName()); + order.setCustomerTexpayerNum(customer.getTexpayerNum()); + + order.setCreateUserId(sysuser.getId()); + order.setCreateUserName(sysuser.getName()); + order.setSettlementUserId(sysuser.getId()); + order.setSettlementUserName(sysuser.getName()); + + order.setState(OrderStateEnum.RECEIVED.getStateid()); // 直接完成,没有前面的过程 + order.setSaleType(ordercluster.getSaleType()); + order.setCreateTime(now); + order.setMemo(memo); // 备注 + + // 更新 transport 出入场信息 + transport.setState(OrderStateEnum.RECEIVED.getStateid()); // 标记 transport state 为 5 ,表示出入场记录完成 + transport.setArriveTime(now); + transport.setType(OrderTypeEnum.TEMP.getTypeid()); + + // 客户账户可用余额要可以支付本次订单 + if (availableBalance.compareTo(order.getTotalPrice().setScale(2, BigDecimal.ROUND_HALF_UP)) < 0) { + return Result.failedstr("总价 %.2f,客户可用余额(%.2f)不足以支付", order.getTotalPrice(), availableBalance); + } + + InvoiceReceive finalReceive = receive; + TicketReceive finalTicketReceive = ticketReceive; + boolean ret = Db.tx(new IAtom() { + @Override + public boolean run() { + try { + boolean ret = false; + order.setSn(OrderSeqService.me.getNextSn(transport.getSupermarketId(), OrderTypeEnum.TEMP.getTypeid())); + transport.setOrderSn(order.getSn()); + + order.setIsprepaid(1); + order.setPaid(new BigDecimal(0)); // 预付费的实际支付为 0 + order.setPrepayCustomerId(prepayCustomer.getId()); + + PresellOrder presellOrder = PresellOrder.dao.findById(ordercluster.getPresellOrderId()); + if (presellOrder == null) return false; + synctask.addIncrementData( - prepayCustomer.getTablename(), + presellOrder.getTablename(), "id", - prepayCustomer.getId(), - new JSONObject().fluentPut("surplus", new BigDecimal(0).subtract(order.getTotalPrice())) // 结算完成,在原余额上加上一个负数 + presellOrder.getId(), + new JSONObject().fluentPut("pug_amount", order.getTotalPrice()) // 结算完成,更新提货额 ); - // 只更新本地 prepayCustomer 的 surplus - prepayCustomer.setSurplus(prepayCustomer.getSurplus().subtract(order.getTotalPrice())); + // 更新本地presellOrder的pug_amount + presellOrder.setPugAmount(presellOrder.getPugAmount().add(order.getTotalPrice())); - ret = prepayCustomer.update(); + ret = presellOrder.update(); - if (!ret) { - return false; - } - } else { - PresellOrder presellOrder = PresellOrder.dao.findById(ordercluster.getPresellOrderId()); - if (presellOrder == null) return false; -// synctask.addIncrementData( -// presellOrder.getTablename(), -// "id", -// presellOrder.getId(), -// new JSONObject().fluentPut("pug_amount", order.getTotalPrice()) // 结算完成,更新提货额 -// ); - // 更新presellOrder 的 pug_amount - presellOrder.setPugAmount(presellOrder.getPugAmount().add(order.getTotalPrice())); - - ret = presellOrder.update(); - - if (!ret) { - return false; - } - - // 同步到其它砂站 - synctask.addUpdateData(presellOrder); + if (!ret) { + return false; } ret = order.save() && transport.update(); @@ -942,32 +1308,31 @@ public class OrderTempSyncService { synctask.addUpdateData(ordercluster); } - if (ordercluster.getSaleType() == 0) { - Stock stock = Stock.dao.findByIds(transport.getSupermarketId(), order.getProductId()); - if (stock == null) { - log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId()); + Stock stock = Stock.dao.findByIds(transport.getSupermarketId(), order.getProductId()); + if (stock == null) { + log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId()); - stock = new Stock(); - stock.setProductId(order.getProductId()); - stock.setSupermarketId(order.getSupermarketId()); - stock.setStockWeight(new BigDecimal(0).subtract(net_weight)); - ret = stock.save(); + stock = new Stock(); + stock.setProductId(order.getProductId()); + stock.setSupermarketId(order.getSupermarketId()); + stock.setStockWeight(new BigDecimal(0).subtract(net_weight)); + ret = stock.save(); - if (!ret) { - return false; - } - synctask.addSaveData(stock); - } else { - stock.setStockWeight(stock.getStockWeight().subtract(net_weight)); // 销售减库存 - ret = stock.update(); + if (!ret) { + return false; + } + synctask.addSaveData(stock); + } else { + stock.setStockWeight(stock.getStockWeight().subtract(net_weight)); // 销售减库存 + ret = stock.update(); - if (!ret) { - return false; - } + if (!ret) { + return false; + } + + synctask.addUpdateData(stock); + } - synctask.addUpdateData(stock); - } - } // if (finalReceive != null) { if (customer.getInvoiceType() == 1) { diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/presellorder/PresellOrderController.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/presellorder/PresellOrderController.java index b76c98c..95f5fcd 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/presellorder/PresellOrderController.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/presellorder/PresellOrderController.java @@ -18,14 +18,15 @@ public class PresellOrderController extends Controller { * 分页查找 presell_order */ public void find(){ - Integer customer_id = getInt("customer_id"); + Integer customer_id = getInt("customer_id"); Integer supermarket_id = getInt("supermarket_id"); - Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 - String name = get("name"); - String stm = get("stm"); - String etm = get("etm"); + Integer type = getInt("type"); + Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 + String name = get("name"); + String stm = get("stm"); + String etm = get("etm"); PageParam pp = getBean(PageParam.class, "", true); - renderJson(Result.object(PresellOrderService.me.find(pp, customer_id, supermarket_id, del, name, stm, etm))); + renderJson(Result.object(PresellOrderService.me.find(pp, customer_id, supermarket_id, del, name, stm, etm, type))); } @@ -33,12 +34,13 @@ public class PresellOrderController extends Controller { * 返回所有 presell_order */ public void list(){ - Integer customer_id = getInt("customer_id"); + Integer customer_id = getInt("customer_id"); Integer supermarket_id = getInt("supermarket_id"); - Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 - String name = get("name"); - String stm = get("stm"); - String etm = get("etm"); - renderJson(Result.object(PresellOrderService.me.list(customer_id, supermarket_id, del, name, stm, etm))); + Integer type = getInt("type"); + Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 + String name = get("name"); + String stm = get("stm"); + String etm = get("etm"); + renderJson(Result.object(PresellOrderService.me.list(customer_id, supermarket_id, del, name, stm, etm, type))); } } 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 d86b4d8..5300db5 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 @@ -27,6 +27,7 @@ public class OrderStatController extends BaseController { Integer isprepaid = getInt("isprepaid"); Integer product_id = getInt("product_id"); Integer customer_type_id = getInt("customer_type_id"); + Integer sale_type = getInt("sale_type"); int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 @@ -41,7 +42,8 @@ public class OrderStatController extends BaseController { isprepaid, product_id, sn, - customer_type_id + customer_type_id, + sale_type ))); } else { Workbook wb = OrderStatService.me.daydetailExport( @@ -54,7 +56,8 @@ public class OrderStatController extends BaseController { isprepaid, product_id, sn, - customer_type_id + customer_type_id, + sale_type ); render(new ExcelRender(tm + "_日销售明细_" + System.currentTimeMillis() + ".xlsx", wb)); } 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 aeb8bd6..29f028a 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 @@ -151,7 +151,7 @@ public class OrderclusterSyncService extends BaseSyncService { // 超时在指定时间段内还有未完成的配额 String query_start_time = DateTimeUtil.sdf.get().format(start_time); String query_cutoff_time = DateTimeUtil.sdf.get().format(cutoff_time); - List undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id, query_start_time, query_cutoff_time, 0); + List undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id, query_start_time, query_cutoff_time, null); if (undonlist != null && !undonlist.isEmpty()) { return Result.failedstr("客户[%s]在砂站[%s][%s]至[%s]内还有未完成的配额", customerObj.getName(), SvrCacheData.SUP_CACHE.get(supermarket_id).getName(), query_start_time, query_cutoff_time); @@ -577,7 +577,7 @@ public class OrderclusterSyncService extends BaseSyncService { return Result.failed("未获取到预售单"); } - List list = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), 1); + List list = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), null); if (list != null && !list.isEmpty()) { return Result.failed("还有未完成的预售订单"); @@ -602,7 +602,7 @@ public class OrderclusterSyncService extends BaseSyncService { // 超时在指定时间段内还有未完成的配额 String query_start_time = DateTimeUtil.sdf.get().format(model.getStartTime()); String query_cutoff_time = DateTimeUtil.sdf.get().format(model.getCutoffTime()); - List undonlist = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), query_start_time, query_cutoff_time, 1); + List undonlist = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), query_start_time, query_cutoff_time, null); if (undonlist != null && !undonlist.isEmpty()) { return Result.failedstr("客户[%s]在砂站[%s][%s]至[%s]内还有未完成的配额", diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempController.java index efd78e9..b9d7353 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempController.java @@ -39,6 +39,7 @@ public class OrderTempController extends BaseController { String customer_name = get("customer_name"); String sn = get("sn"); Integer state = getInt("state"); + Integer type = getInt("type"); String invoice_code = get("invoice_code"); String ticket_code = get("ticket_code"); Integer product_id = getInt("product_id"); @@ -58,7 +59,7 @@ public class OrderTempController extends BaseController { customer_id = tokenuser.getEntityId(); } - renderJson(Result.object(OrderTempService.me.find(pp, sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, invoice_code, invoice_type, ticket_code, product_id, invoice_code_is_null))); + renderJson(Result.object(OrderTempService.me.find(pp, sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, type, invoice_code, invoice_type, ticket_code, product_id, invoice_code_is_null))); } @Before(StartAndEndIntervalValidator.class) @@ -69,6 +70,7 @@ public class OrderTempController extends BaseController { String customer_name = get("customer_name"); String sn = get("sn"); Integer state = getInt("state"); + Integer type = getInt("type"); Integer product_id = getInt("product_id"); Integer supermarket_id = getInt("supermarket_id"); Integer isprepaid = getInt("isprepaid"); @@ -77,7 +79,7 @@ public class OrderTempController extends BaseController { Integer customer_id = getInt("customer_id"); Boolean invoice_code_is_null = getBoolean("invoice_code_is_null"); - Workbook wb = OrderTempService.me.export(sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, invoice_code, invoice_type, product_id, invoice_code_is_null); + Workbook wb = OrderTempService.me.export(sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, type, invoice_code, invoice_type, product_id, invoice_code_is_null); render(new ExcelRender("运输日志_" + System.currentTimeMillis() + ".xlsx", wb)); } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java index 351822b..a9cec6b 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java @@ -14,6 +14,7 @@ import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.IAtom; import com.jfinal.plugin.activerecord.Record; +import java.math.BigDecimal; import java.util.Date; public class OrderTempSyncService { @@ -162,28 +163,43 @@ public class OrderTempSyncService { log.error("关联预付费客户信息未找到,customer_id:【%s】", order.getCustomerId()); return false; } + if (order.getSaleType() == 0) { + PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(customer.getId()); + if (prepayCustomer != null) { + if (prepayCustomer.getSurplus() == null) { + prepayCustomer.setSurplus(order.getTotalPrice()); + } else { + prepayCustomer.setSurplus(prepayCustomer.getSurplus().add(order.getTotalPrice())); + } - PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(customer.getId()); + synctaskincrement.addIncrementData( + prepayCustomer.getTablename(), + "id", + prepayCustomer.getId(), + new JSONObject().fluentPut("surplus", order.getTotalPrice()) // 取消订单,在原余额上加上一个数 + ); + // 余额变化需要广播 + SyncTaskService.me.save(synctaskincrement); + ret = prepayCustomer.update(); - if (prepayCustomer != null) { - - if (prepayCustomer.getSurplus() == null) { - prepayCustomer.setSurplus(order.getTotalPrice()); - } else { - prepayCustomer.setSurplus(prepayCustomer.getSurplus().add(order.getTotalPrice())); } - - synctaskincrement.addIncrementData( - prepayCustomer.getTablename(), - "id", - prepayCustomer.getId(), - new JSONObject().fluentPut("surplus", order.getTotalPrice()) // 取消订单,在原余额上加上一个数 - ); - - // 余额变化需要广播 - SyncTaskService.me.save(synctaskincrement); - - ret = prepayCustomer.update(); + } else { + Ordercluster ordercluster = Ordercluster.dao.findById(order.getOrderclusterId()); + if (ordercluster != null) { + PresellOrder presellOrder = PresellOrder.dao.findById(ordercluster.getPresellOrderId()); + if (presellOrder != null) { + presellOrder.setPugAmount(presellOrder.getPugAmount().subtract(order.getTotalPrice())); + synctaskincrement.addIncrementData( + presellOrder.getTablename(), + "id", + presellOrder.getId(), + new JSONObject().fluentPut("pug_amount", new BigDecimal(0).subtract(order.getTotalPrice())) // 取消订单,在提货额上加上一个负数 + ); + // 余额变化需要广播 + SyncTaskService.me.save(synctaskincrement); + ret = presellOrder.update(); + } + } } } @@ -191,18 +207,23 @@ public class OrderTempSyncService { return false; } - Stock stock = Stock.dao.findByIds(order.getSupermarketId(), order.getProductId()); - if (stock == null) { - log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId()); - return false; - } + Stock stock = Stock.dao.findByIds(order.getSupermarketId(), order.getProductId()); + if (stock == null) { + log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId()); + return false; + } - stock.setStockWeight(stock.getStockWeight().add(order.getWeight())); // 取消销售加库存 - ret = stock.update(); + stock.setStockWeight(stock.getStockWeight().add(order.getWeight())); // 取消销售加库存 + ret = stock.update(); - synctask.addUpdateData(stock); + synctask.addUpdateData(stock); - return ret && SyncTaskService.me.save(synctask, order.getSupermarketId()) + if (order.getSaleType() == 0) { + return ret && SyncTaskService.me.save(synctask, order.getSupermarketId()) + && ModifyLogService.me.save(order.tablename, "sn", logrecord.toJson(), Enums.DataOpType.UPDATE.getId(), sysuser); + } + + return ret && SyncTaskService.me.save(synctask) && ModifyLogService.me.save(order.tablename, "sn", logrecord.toJson(), Enums.DataOpType.UPDATE.getId(), sysuser); } catch (Exception e) { log.error(e.getMessage(), e); @@ -211,7 +232,7 @@ public class OrderTempSyncService { } }); - if (ret) { + if (ret && order.getSaleType() == 0) { SyncTaskService.me.send(synctask); } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/presellorder/PresellOrderController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/presellorder/PresellOrderController.java index a6b35a8..3074c0b 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/presellorder/PresellOrderController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/presellorder/PresellOrderController.java @@ -85,26 +85,28 @@ public class PresellOrderController extends Controller { * 分页查找 presell_order */ public void find(){ - Integer customer_id = getInt("customer_id"); + Integer customer_id = getInt("customer_id"); Integer supermarket_id = getInt("supermarket_id"); - Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 - String name = get("name"); - String stm = get("stm"); - String etm = get("etm"); + Integer type = getInt("type"); + Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 + String name = get("name"); + String stm = get("stm"); + String etm = get("etm"); PageParam pp = getBean(PageParam.class, "", true); - renderJson(Result.object(PresellOrderService.me.find(pp, customer_id, supermarket_id, del, name, stm, etm))); + renderJson(Result.object(PresellOrderService.me.find(pp, customer_id, supermarket_id, del, name, stm, etm, type))); } /** * 返回所有 presell_order */ public void list(){ - Integer customer_id = getInt("customer_id"); + Integer customer_id = getInt("customer_id"); Integer supermarket_id = getInt("supermarket_id"); - Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 - String name = get("name"); - String stm = get("stm"); - String etm = get("etm"); - renderJson(Result.object(PresellOrderService.me.list(customer_id, supermarket_id, del, name, stm, etm))); + Integer type = getInt("type"); + Integer del = getInt("del", Const.LOGIC_DEL_VALID); // 默认显示未删除的 + String name = get("name"); + String stm = get("stm"); + String etm = get("etm"); + renderJson(Result.object(PresellOrderService.me.list(customer_id, supermarket_id, del, name, stm, etm, type))); } } 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 0546587..0f3f1ae 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 @@ -44,6 +44,7 @@ public class OrderStatController extends BaseController { Integer isprepaid = getInt("isprepaid"); Integer product_id = getInt("product_id"); Integer customer_type_id = getInt("customer_type_id"); + Integer sale_type = getInt("sale_type"); int export = getInt("export", 0); // 是否导出为exce 0 不导出,1 导出 @@ -58,7 +59,8 @@ public class OrderStatController extends BaseController { isprepaid, product_id, sn, - customer_type_id + customer_type_id, + sale_type ))); } else { Workbook wb = OrderStatService.me.daydetailExport( @@ -71,7 +73,8 @@ public class OrderStatController extends BaseController { isprepaid, product_id, sn, - customer_type_id + customer_type_id, + sale_type ); render(new ExcelRender(tm + "_日销售明细_" + System.currentTimeMillis() + ".xlsx", wb)); }