lisai17@sina.com 2021-03-16 14:15:25 +08:00
parent 8611125d4f
commit 8dead8a5f4
2 changed files with 79 additions and 87 deletions

View File

@ -4,7 +4,6 @@ import com.cowr.common.Const;
import com.cowr.common.base.BaseService;
import com.cowr.common.enums.OrderStateEnum;
import com.cowr.common.enums.UserTypeEnum;
import com.cowr.common.utils.DateTimeUtil;
import com.cowr.common.view.PageParam;
import com.cowr.common.view.Result;
import com.cowr.model.Ordercluster;
@ -21,7 +20,10 @@ import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import java.math.BigDecimal;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Generated by COWR Fri Apr 17 16:59:39 CST 2020
@ -637,7 +639,7 @@ public class OrderclusterService extends BaseService {
}
/**
*
*
*
* @param ordercluster_id
* @return
@ -696,7 +698,6 @@ public class OrderclusterService extends BaseService {
}
/**
*
*
@ -730,4 +731,40 @@ public class OrderclusterService extends BaseService {
return out == null ? new BigDecimal(0) : out;
}
/**
*
*
* @param customer_id
* @return
*/
public BigDecimal undoPrice(int customer_id) {
String sql = "select(\n" +
" select sum(t.`total_weight` * t.`unit_price`) `total_price`\n" +
" from `ordercluster` t\n" +
" where t.`customer_id`= ?\n" +
" and t.state < ? ) - (\n" +
" select sum(t.`weight` * t.`unit_price`) total_price\n" +
" from order_temp t\n" +
" where exists(\n" +
" select 1 from `ordercluster` o\n" +
" where o.`customer_id`= ?\n" +
" and o.id= t.`ordercluster_id`\n" +
" and o.`state`< ?" +
" )\n" +
" and t.`customer_id`= ?\n" +
" and t.`state`= ?)";
BigDecimal out = Db.queryBigDecimal(
sql,
customer_id,
OrderStateEnum.RECEIVED.getStateid(),
customer_id,
OrderStateEnum.RECEIVED.getStateid(),
customer_id,
OrderStateEnum.RECEIVED.getStateid()
);
return out == null ? new BigDecimal("0") : out;
}
}

View File

@ -9,6 +9,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.Config;
import com.cowr.service.ssjygl.main.SvrCacheData;
import com.cowr.service.ssjygl.sms.log.SmsService;
import com.cowr.service.ssjygl.synctask.SyncTaskService;
@ -120,36 +121,20 @@ public class OrderclusterSyncService extends BaseSyncService {
return Result.failed("未配置商品单价");
}
// 按客户查询未完成的订单量
List<Record> undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id);
if (undonlist != null && !undonlist.isEmpty()) {
BigDecimal plan_total_price = new BigDecimal(total_weight).multiply(unitprice); // 本次配额总价格
for (Record record : undonlist) {
Date record_cutoff_time = record.getDate("cutoff_time");
// 判断日期不是已经存在
if (record_cutoff_time.getTime() == cutoff_time.getTime()) {
return Result.failedstr("客户[%s][%s]在砂站[%s]还有未完成的配额", customerObj.getName(), DateTimeUtil.sdfymd.get().format(cutoff_time), SvrCacheData.SUP_CACHE.get(supermarket_id).getName());
} else {
// 累加总价
plan_total_price = plan_total_price.add(record.getBigDecimal("total_weight").multiply(record.getBigDecimal("unit_price")));
}
}
// 按客户统计已完成量
BigDecimal overTotalPrice = OrderclusterService.me.getOverTotalPriceByCustomer(customer_id); // 按客户找集团订单已完成量
if (plan_total_price.subtract(overTotalPrice).compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("剩余总配额 %.2f元,客户余额(%.2f元)不足", plan_total_price.subtract(overTotalPrice), prepayCustomer.getSurplus());
}
}
// 本次配额总价不能超过余额
if (unitprice.multiply(new BigDecimal(total_weight)).compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("余额 %.2f 不足以购买 %.2f 吨", prepayCustomer.getSurplus(), total_weight);
}
// 客户在所有砂站的未完成的配额中,未执行完成的总金额
BigDecimal undo_price = OrderclusterService.me.undoPrice(customer_id);
BigDecimal plan_total_price = new BigDecimal(total_weight).multiply(unitprice).add(undo_price); // 本次配额总价格
// 本次计划总额加上未完成的量,不能超过余额
if (plan_total_price.compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, prepayCustomer.getSurplus());
}
Ordercluster model = new Ordercluster();
model.setCustomerId(customerObj.getId());
model.setCustomerAddress(customerObj.getAddress());
@ -224,7 +209,7 @@ public class OrderclusterSyncService extends BaseSyncService {
});
// 保存成功后,发送配额提醒短信
if (ret) {
if (ret && !Config.isDev()) {
for (Ordercluster cluster : newlist) {
SmsService.me.sendPeiE(cluster);
}
@ -721,36 +706,6 @@ public class OrderclusterSyncService extends BaseSyncService {
return Result.failed(false, "订单已完成,不能修改");
}
if (oldobj.getCustomerId() != null) {
PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(oldobj.getCustomerId());
if (prepayCustomer == null) {
return Result.failed("不是预付费用户");
}
// 按客户查询未完成的订单量
List<Record> undonlist = OrderclusterService.me.undonlist(oldobj.getCustomerId());
if (undonlist != null && !undonlist.isEmpty()) {
BigDecimal plan_total_price = model.getTotalWeight().multiply(oldobj.getUnitPrice());
for (Record record : undonlist) {
if (model.getId().equals(record.getInt("id"))) {
continue; // 当前修改的记录已经做为初始值了,不再累计
}
// 累加总价
plan_total_price = plan_total_price.add(record.getBigDecimal("total_weight").multiply(record.getBigDecimal("unit_price")));
}
// 按客户统计已完成量
BigDecimal overTotalPrice = OrderclusterService.me.getOverTotalPriceByCustomer(oldobj.getCustomerId()); // 按客户找集团订单已完成量
if (plan_total_price.subtract(overTotalPrice).compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("剩余总配额 %.2f元,客户余额(%.2f元)不足", plan_total_price.subtract(overTotalPrice), prepayCustomer.getSurplus());
}
}
}
BigDecimal overweight = OrderclusterService.me.getOverWeight(model.getId()); // 集团订单已完成量
if (model.getTotalWeight().compareTo(overweight) < 0) {
@ -759,6 +714,21 @@ public class OrderclusterSyncService extends BaseSyncService {
oldobj.setTotalWeight(model.getTotalWeight());
}
if (oldobj.getCustomerId() != null) {
PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(oldobj.getCustomerId());
if (prepayCustomer == null) {
return Result.failed("不是预付费用户");
}
// 客户在所有砂站的未完成的配额中,未执行完成的总金额
BigDecimal undo_price = OrderclusterService.me.undoPrice(oldobj.getCustomerId());
BigDecimal plan_total_price = model.getTotalWeight().subtract(overweight).multiply(oldobj.getUnitPrice()).add(undo_price); // 修改重量时,减去已完成量
if (plan_total_price.compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, prepayCustomer.getSurplus());
}
}
if (model.getTimeInterval() != null) {
oldobj.setTimeInterval(model.getTimeInterval());
}
@ -954,29 +924,6 @@ public class OrderclusterSyncService extends BaseSyncService {
return Result.failed("不是预付费用户");
}
// 按客户查询未完成的订单量
List<Record> undonlist = OrderclusterService.me.undonlist(oldobj.getCustomerId());
if (undonlist != null && !undonlist.isEmpty()) {
BigDecimal plan_total_price = total_weight.multiply(oldobj.getUnitPrice());
for (Record record : undonlist) {
if (oldobj.getId().equals(record.getInt("id"))) {
continue; // 当前修改的记录已经做为初始值了,不再累计
}
// 累加总价
plan_total_price = plan_total_price.add(record.getBigDecimal("total_weight").multiply(record.getBigDecimal("unit_price")));
}
// 按客户统计已完成量
BigDecimal overTotalPrice = OrderclusterService.me.getOverTotalPriceByCustomer(oldobj.getCustomerId()); // 按客户找集团订单已完成量
if (plan_total_price.subtract(overTotalPrice).compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("剩余总配额 %.2f元,客户余额(%.2f元)不足", plan_total_price.subtract(overTotalPrice), prepayCustomer.getSurplus());
}
}
// 按客户统计已完成量
BigDecimal over_weight = OrderclusterService.me.getOverWeight(oldobj.getId()); // 按客户找集团订单已完成量
BigDecimal surplus_weight = oldobj.getTotalWeight().subtract(over_weight); // 剩余未完成量
@ -992,12 +939,20 @@ public class OrderclusterSyncService extends BaseSyncService {
oldobj.setTotalWeight(over_weight.add(surplus_weight.subtract(total_weight))); // 结转不完的,要留下
}
// 客户在所有砂站的未完成的配额中,未执行完成的总金额
BigDecimal undo_price = OrderclusterService.me.undoPrice(oldobj.getCustomerId());
BigDecimal plan_total_price = total_weight.subtract(over_weight).multiply(oldobj.getUnitPrice()).add(undo_price); // 本次转结的量,减去已完成量
if (plan_total_price.compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, prepayCustomer.getSurplus());
}
List<OrderclusterTruck> octs = OrderclusterTruck.dao.find("select * from ordercluster_truck t where t.ordercluster_id = ?", ordercluster_id);
if (!octs.isEmpty()) {
// 已有车辆的,在结转前,需要将已经分配其他集团订单的车辆去掉
List<Object> ts = new ArrayList<>();
List<String> tsql = new ArrayList<>();
List<Object> ts = new ArrayList<>();
List<String> tsql = new ArrayList<>();
Map<String, OrderclusterTruck> delmap = new HashMap<>();
// 检查提交上来的车辆字符串是否用重复的
@ -1122,7 +1077,7 @@ public class OrderclusterSyncService extends BaseSyncService {
if (ret) {
SyncTaskService.me.send(synctask);
if (forwardoldobj[0] != null && !isAuto) {
if (forwardoldobj[0] != null && !isAuto && !Config.isDev()) {
SmsService.me.sendPeiE(forwardoldobj[0]);
}
}