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 a9bb2e0..25a5277 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 @@ -557,4 +557,28 @@ public class OrderclusterService extends BaseService { return Db.paginate(pp.getPage(), pp.getSize(), "select * ", fromsql, salePara.toArray()); } + + /** + * 获取集团订单剩余成量 + * @param ordercluster_id + * @return + */ + public BigDecimal getOverWeight(int ordercluster_id){ + String sql = "select sum(a.weight) weight from ( \n " + + " select t.ordercluster_id, sum(t.weight) weight from order_sale t \n" + + " where t.state = ? \n" + + " and t.ordercluster_id = ? \n" + + " group by t.ordercluster_id \n" + + " union \n" + + " select t.ordercluster_id, sum(t.weight) weight from order_temp t \n" + + " where t.state = ? \n" + + " and t.ordercluster_id = ? \n" + + " group by t.ordercluster_id \n " + + " ) a \n" + + " group by a.ordercluster_id "; + + BigDecimal out = Db.queryBigDecimal(sql, OrderStateEnum.RECEIVED.getStateid(), ordercluster_id, OrderStateEnum.RECEIVED.getStateid(), ordercluster_id); + + return out == null ? new BigDecimal(0) : out; + } } diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/prepay/PrepayService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/prepay/PrepayService.java index b492320..14e7e80 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/prepay/PrepayService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/prepay/PrepayService.java @@ -174,8 +174,10 @@ public class PrepayService { " ,a.paid \n" + " ,a.customer_id \n" + " ,a.customer_name \n" + + " ,a.product_id \n" + + " ,a.product_name" + " from ( \n" + - " select t.sn, t.supermarket_id, t.truck_license, t.weight, t.total_price, t.paid, c.id customer_id, c.name customer_name \n" + + " select t.sn, t.supermarket_id, t.truck_license, t.weight, t.total_price, t.paid, c.id customer_id, c.name customer_name, t.product_id, t.product_name \n" + " from order_sale t \n" + " left join customer c on c.id = t.customer_id \n" + " where t.state = ? \n" + @@ -184,7 +186,7 @@ public class PrepayService { " and t.create_time >= ? \n" + " and t.create_time <= ? \n" + " union \n" + - " select t.sn, t.supermarket_id, t.truck_license, t.weight, t.total_price, t.paid, c.id customer_id, c.name customer_name \n" + + " select t.sn, t.supermarket_id, t.truck_license, t.weight, t.total_price, t.paid, c.id customer_id, c.name customer_name, t.product_id, t.product_name \n" + " from order_temp t \n" + " left join customer c on c.id = t.customer_id \n" + " where t.state = ? \n" + diff --git a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/customerdistance/SupermarketCustomerDistanceService.java b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/customerdistance/SupermarketCustomerDistanceService.java index 67a7048..a0880f7 100644 --- a/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/customerdistance/SupermarketCustomerDistanceService.java +++ b/ssjygl-xsx-common/src/main/java/com/cowr/ssjygl/supermarket/customerdistance/SupermarketCustomerDistanceService.java @@ -79,6 +79,8 @@ public class SupermarketCustomerDistanceService extends BaseService { String totalRowSql = "select count(*) " + fromsql; String findSql = selectsql + fromsql; + findSql += " order by t.id "; + Page page = Db.paginateByFullSql(pp.getPage(), pp.getSize(), totalRowSql, findSql, paraList.toArray()); List list = page.getList(); diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/base/BaseSyncService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/base/BaseSyncService.java index d3e8940..a6bcdf3 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/base/BaseSyncService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/base/BaseSyncService.java @@ -118,13 +118,21 @@ public class BaseSyncService extends BaseService { return Result.failed(false, "按主键未找到对应记录"); } + + BaseModel saveold = (BaseModel) oldobj.clone(); + // 将修改后的对象返回 + String[] keys = model._getAttrNames(); + for (String key : keys) { + oldobj.set(key, model.get(key)); + } + boolean ret = Db.tx(new IAtom() { @Override public boolean run() { try { - return model.update() - && SyncTaskService.me.save(new SyncTask().addUpdateData(model)) - && ModifyLogService.me.save(model, oldobj, Enums.DataOpType.UPDATE.getId(), sysuser); + return oldobj.update() + && SyncTaskService.me.save(new SyncTask().addUpdateData(oldobj)) + && ModifyLogService.me.save(model, saveold, Enums.DataOpType.UPDATE.getId(), sysuser); } catch (Exception e) { log.error(e.getMessage(), e); return false; @@ -132,12 +140,6 @@ public class BaseSyncService extends BaseService { } }); - // 将修改后的对象返回 - String[] keys = model._getAttrNames(); - for (String key : keys) { - oldobj.set(key, model.get(key)); - } - return ret ? Result.object(oldobj) : Result.failed(false, "修改失败"); } catch (Exception e) { log.error(e.getMessage(), e); 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 79325ea..9b040dd 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 @@ -9,6 +9,7 @@ import com.cowr.local.ssjygl.main.Config; import com.cowr.local.ssjygl.order.OrderService; import com.cowr.local.ssjygl.order.orderseq.OrderSeqService; import com.cowr.ssjygl.invoice.receive.InvoiceReceiveService; +import com.cowr.ssjygl.order.ordercluster.OrderclusterService; import com.cowr.ssjygl.supermarket.product.SupermarketProductService; import com.cowr.local.ssjygl.synctask.SyncTaskService; import com.cowr.local.ssjygl.system.sysuser.SysuserSyncService; @@ -85,7 +86,7 @@ public class OrderTempSyncService { } if (transport.getSecondWeight().compareTo(BigDecimal.valueOf(Config.configprop.getInt("weigh.max"))) > 0) { - return Result.failedstr("毛重不能超过 %.2f 吨", Config.configprop.getInt("weigh.max")); + return Result.failedstr("毛重不能超过 %d 吨", Config.configprop.getInt("weigh.max")); } BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 @@ -196,7 +197,7 @@ public class OrderTempSyncService { ret = invoiceLog.save(); - if(!ret){ + if (!ret) { return false; } @@ -300,6 +301,11 @@ public class OrderTempSyncService { } BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 + BigDecimal overweight = OrderclusterService.me.getOverWeight(ordercluster_id); // 集团订单剩余量 + // 不能超过集团订单剩余量 + if (net_weight.compareTo(overweight) <= 0) { + return Result.failedstr("净重 %.2f 吨,超过了剩余的 %.2f 余量", net_weight, overweight); + } if (req_receipt == 1) { // 需要同时开具发票 receive = InvoiceReceiveService.me.foremostReceive(transport.getSupermarketId()); @@ -396,7 +402,7 @@ public class OrderTempSyncService { return false; } - if(ordercluster.getState() == OrderStateEnum.INITIAL.getStateid()){ + if (ordercluster.getState() == OrderStateEnum.INITIAL.getStateid()) { ordercluster.setState(OrderStateEnum.ENTERED.getStateid()); ret = ordercluster.update(); @@ -446,7 +452,7 @@ public class OrderTempSyncService { ret = invoiceLog.save(); - if(!ret){ + if (!ret) { return false; } @@ -531,7 +537,7 @@ public class OrderTempSyncService { } if (transport.getSecondWeight().compareTo(BigDecimal.valueOf(Config.configprop.getInt("weigh.max"))) > 0) { - return Result.failedstr("毛重不能超过 %.2f 吨", Config.configprop.getInt("weigh.max")); + return Result.failedstr("毛重不能超过 %d 吨", Config.configprop.getInt("weigh.max")); } BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次 @@ -694,7 +700,7 @@ public class OrderTempSyncService { return false; } - if(ordercluster.getState() == OrderStateEnum.INITIAL.getStateid()){ + if (ordercluster.getState() == OrderStateEnum.INITIAL.getStateid()) { ordercluster.setState(OrderStateEnum.ENTERED.getStateid()); ret = ordercluster.update(); @@ -744,7 +750,7 @@ public class OrderTempSyncService { ret = invoiceLog.save(); - if(!ret){ + if (!ret) { return false; } diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportSyncService.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportSyncService.java index 617560f..cce00b7 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportSyncService.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/transport/TransportSyncService.java @@ -100,6 +100,14 @@ public class TransportSyncService { PostLicenseResult result = new PostLicenseResult(truck_license); try { + Blacklist bl = BlacklistService.me.truckInBlacklist(truck_license); + + if (bl != null) { + log.debug("【" + truck_license + "】在黑名单中"); + deleteImg(file); // 数据无效时,删除图片 + return result; + } + if (!Enums.CtrlFlowEnum.isValid(which)) { deleteImg(file); // 数据无效时,删除图片 return result; diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/base/BaseSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/base/BaseSyncService.java index 7c3115e..9c4b89e 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/base/BaseSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/base/BaseSyncService.java @@ -118,13 +118,20 @@ public class BaseSyncService extends BaseService { return Result.failed(false, "按主键未找到对应记录"); } + BaseModel saveold = (BaseModel) oldobj.clone(); + // 将修改后的对象返回 + String[] keys = model._getAttrNames(); + for (String key : keys) { + oldobj.set(key, model.get(key)); + } + boolean ret = Db.tx(new IAtom() { @Override public boolean run() { try { - return model.update() - && SyncTaskService.me.save(new SyncTask().addUpdateData(model)) - && ModifyLogService.me.save(model, oldobj, Enums.DataOpType.UPDATE.getId(), sysuser); + return oldobj.update() + && SyncTaskService.me.save(new SyncTask().addUpdateData(oldobj)) + && ModifyLogService.me.save(model, saveold, Enums.DataOpType.UPDATE.getId(), sysuser); } catch (Exception e) { log.error(e.getMessage(), e); return false; @@ -132,12 +139,6 @@ public class BaseSyncService extends BaseService { } }); - // 将修改后的对象返回 - String[] keys = model._getAttrNames(); - for (String key : keys) { - oldobj.set(key, model.get(key)); - } - return ret ? Result.object(oldobj) : Result.failed(false, "修改失败"); } catch (Exception e) { log.error(e.getMessage(), e); 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 6e35eb1..e15018d 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 @@ -228,39 +228,6 @@ public class OrderclusterSyncService extends BaseSyncService { return Result.failed("未配置商品单价"); } - SyncTask synctask = new SyncTask(); - Ordercluster model = new Ordercluster(); - model.setCustomerName(customer_name); - - // 判断是否需要开具发票 - if (req_receipt == 1) { - model.setCustomerTexpayerNum(customer_texpayer_num); - } - - model.setTransDistance(new BigDecimal(0)); - - model.setTotalWeight(new BigDecimal(total_weight)); - model.setCutoffTime(cutoff_time); - - model.setSupermarketId(supermarket_id); - model.setTimeInterval(1); - model.setMiniTruck(1); - - model.setProductId(product.getId()); - model.setProductName(product.getName()); - - model.setUnitPrice(unitprice); // 后端获取数据库中单价 - model.setCreateTime(new Date()); // 当前系统时间 - model.setCreateUserId(sysuser.getId()); // 当前用户id - model.setCreateUserName(sysuser.getName()); - model.setState(OrderStateEnum.INITIAL.getStateid()); // 新增固定为 1 - - model.setReqReceipt(req_receipt); // 固定供砂客户肯定是需要发票的,至于是普票还是专票,由客户信息决定 - model.setPayType(1); - model.setUuid(StrKit.getRandomUUID()); - - synctask.addSaveData(model); - List chk = new ArrayList<>(); String[] truckarr = trucks.split(","); List ts = new ArrayList<>(); @@ -296,6 +263,58 @@ public class OrderclusterSyncService extends BaseSyncService { return Result.failed(StrKit.join(ts, ",") + " 车牌号在黑名单中"); } + ts.add(0, DateTimeUtil.sdf.get().format(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 c.cutoff_time like ? \n" + + " and t.truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray()); + + if (chkduk != null && !chkduk.isEmpty()) { + ts = new ArrayList<>(); + + for (Record bl : chkduk) { + ts.add(bl.get("truck_license")); + } + + return Result.failed(StrKit.join(ts, ",") + " 车牌号已经分配给其他客户"); + } + + + SyncTask synctask = new SyncTask(); + Ordercluster model = new Ordercluster(); + model.setCustomerName(customer_name); + + // 判断是否需要开具发票 + if (req_receipt == 1) { + model.setCustomerTexpayerNum(customer_texpayer_num); + } + + model.setTransDistance(new BigDecimal(0)); + + model.setTotalWeight(new BigDecimal(total_weight)); + model.setCutoffTime(cutoff_time); + + model.setSupermarketId(supermarket_id); + model.setTimeInterval(1); + model.setMiniTruck(1); + + model.setProductId(product.getId()); + model.setProductName(product.getName()); + + model.setUnitPrice(unitprice); // 后端获取数据库中单价 + model.setCreateTime(new Date()); // 当前系统时间 + model.setCreateUserId(sysuser.getId()); // 当前用户id + model.setCreateUserName(sysuser.getName()); + model.setState(OrderStateEnum.INITIAL.getStateid()); // 新增固定为 1 + + model.setReqReceipt(req_receipt); // 固定供砂客户肯定是需要发票的,至于是普票还是专票,由客户信息决定 + model.setPayType(1); + model.setUuid(StrKit.getRandomUUID()); + + synctask.addSaveData(model); + boolean ret = Db.tx(new IAtom() { @Override public boolean run() { 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 6790788..783e70d 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 @@ -44,6 +44,7 @@ public class OrderclusterTruckSyncService extends BaseSyncService { List ts = new ArrayList<>(); List tsql = new ArrayList<>(); + // 检查提交上来的车辆字符串是否用重复的 for (String truck_license : truckarr) { if (chk.contains(truck_license)) { return Result.failedstr("车牌号 %s 重复", truck_license); @@ -55,6 +56,7 @@ public class OrderclusterTruckSyncService extends BaseSyncService { tsql.add("?"); } + // 检查是否还在黑名单中,未被移除 List list = Blacklist.dao.find( "select * from blacklist \n" + " where remove_user_id is null \n" + @@ -70,7 +72,24 @@ public class OrderclusterTruckSyncService extends BaseSyncService { return Result.failed(StrKit.join(ts, ",") + " 车牌号在黑名单中"); } + // 查询是否分配给其他集团订单 ts.add(0, ordercluster_id + ""); // 加到查询参数里面 + List chkduk = Db.find( + "select * from ordercluster_truck \n" + + " where ordercluster_id <> ? \n" + + " and truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray()); + + if (chkduk != null && !chkduk.isEmpty()) { + ts = new ArrayList<>(); + + for (Record bl : chkduk) { + ts.add(bl.get("truck_license")); + } + + return Result.failed(StrKit.join(ts, ",") + " 车牌号已经分配给其他客户"); + } + + // 查询已有的集团订单 List otlist = OrderclusterTruck.dao.find( "select * from ordercluster_truck \n" + " where ordercluster_id = ? \n", ordercluster_id); @@ -79,9 +98,9 @@ public class OrderclusterTruckSyncService extends BaseSyncService { List chkold = new ArrayList<>(); SyncTask synctask = new SyncTask(); + // 数据库中,提交上的数据中没有的,要删掉 for (OrderclusterTruck ot : otlist) { if(!chk.contains(ot.getTruckLicense())){ - // 数据库中,提交上的数据中没有的,要删掉 dellist.add(ot.getTruckLicense()); synctask.addDeleteData(ot); }else{ @@ -89,12 +108,6 @@ public class OrderclusterTruckSyncService extends BaseSyncService { } } - List oldot = OrderclusterTruck.dao.find("select * from ordercluster_truck where ordercluster_id = ? ", ordercluster_id); - - if (truckarr.length + oldot.size() < ordercluster.getMiniTruck()) { - return Result.failedstr("安排车辆总数不能小于 %d", ordercluster.getMiniTruck()); - } - List savelist = new ArrayList<>(); for (String truck_license : truckarr) { @@ -116,6 +129,11 @@ public class OrderclusterTruckSyncService extends BaseSyncService { return Result.failed("trucks 参数错误"); } + // 数据库中已有的总数 + 本次添加的 - 本次删掉的 不能小于要求的最小值 + if (otlist.size() + savelist.size() - dellist.size() < ordercluster.getMiniTruck()) { + return Result.failedstr("安排车辆总数不能小于 %d", ordercluster.getMiniTruck()); + } + Record logrecord = new Record(); logrecord.set("customer_id", ordercluster_id); logrecord.set("truckstr", trucks);