dev
wuwenxiong 2022-01-03 14:36:51 +08:00
parent e16d12a92e
commit 545a12f3ee
16 changed files with 444 additions and 81 deletions

View File

@ -1134,5 +1134,22 @@ public abstract class BaseOrderTemp<M extends BaseOrderTemp<M>> extends BaseMode
return getStr("ticket_code");
}
/**
*
* @param saleType 01
*/
@JSONField(name = "sale_type")
public void setSaleType(Integer saleType) {
set("sale_type", saleType);
}
/**
*
* @return 01
*/
@JSONField(name = "sale_type")
public Integer getSaleType() {
return getInt("sale_type");
}
}

View File

@ -66,6 +66,29 @@ public abstract class BaseOrdercluster<M extends BaseOrdercluster<M>> extends Ba
return getStr("uuid");
}
/**
* name: presell_order_id
* type: CHAR(32)
* isNullable: NO
* isPrimaryKey: NO
* defaultValue:
*
* @param presellOrderId
*/
@JSONField(name = "presell_order_id")
public void setPresellOrderId(String presellOrderId) {
set("presell_order_id", presellOrderId);
}
/**
* @return presell_order_id
*/
@JSONField(name = "presell_order_id")
public String getPresellOrderId() {
return getStr("presell_order_id");
}
/**
* name: total_weight
* type: DECIMAL(12,2)
@ -1003,4 +1026,22 @@ public abstract class BaseOrdercluster<M extends BaseOrdercluster<M>> extends Ba
public Integer getMaxTruck() {
return getInt("max_truck");
}
/**
*
* @param saleType 01
*/
@JSONField(name = "sale_type")
public void setSaleType(Integer saleType) {
set("sale_type", saleType);
}
/**
*
* @return 01
*/
@JSONField(name = "sale_type")
public Integer getSaleType() {
return getInt("sale_type");
}
}

View File

@ -65,7 +65,8 @@ public class OrderclusterService extends BaseService {
String stm,
String etm,
Integer state,
Integer product_id
Integer product_id,
Integer sale_type
) {
String selectsql = "select t.*, s.name supermarket_name ";
String fromsql = "from ordercluster t \n" +
@ -93,6 +94,11 @@ public class OrderclusterService extends BaseService {
paraList.add(product_id);
}
if (sale_type != null && (sale_type == 0 || sale_type == 1)) {
fromsql += " and t.sale_type = ? \n";
paraList.add(sale_type);
}
if (StrKit.notBlank(stm)) {
fromsql += " and t.cutoff_time >= ? \n";
paraList.add(stm);
@ -136,7 +142,8 @@ public class OrderclusterService extends BaseService {
String stm,
String etm,
Integer state,
Integer product_id
Integer product_id,
Integer sale_type
) {
String selectsql = "select t.*, s.name supermarket_name ";
String fromsql = "from ordercluster t \n" +
@ -184,6 +191,11 @@ public class OrderclusterService extends BaseService {
paraList.add(product_id);
}
if (sale_type != null && (sale_type == 0 || sale_type == 1)) {
fromsql += " and t.sale_type = ? \n";
paraList.add(sale_type);
}
String totalRowSql = "select count(*) " + fromsql;
String findSql = selectsql + fromsql;
@ -296,14 +308,25 @@ public class OrderclusterService extends BaseService {
* @param customer_id
* @return
*/
public List<Ordercluster> undonlist(int supermarket_id, Integer customer_id, String date) {
public List<Ordercluster> undonlist(int supermarket_id, Integer customer_id, String date, Integer sale_type) {
String sql = "select * from ordercluster t \n" +
" where t.state < ? \n" +
" and t.supermarket_id = ? \n" +
" and t.customer_id = ? \n" +
" and t.cutoff_time like ? \n";
return Ordercluster.dao.find(sql, OrderStateEnum.RECEIVED.getStateid(), supermarket_id, customer_id, date + "%");
List<Object> paramsList = new ArrayList<>();
paramsList.add(OrderStateEnum.RECEIVED.getStateid());
paramsList.add(supermarket_id);
paramsList.add(customer_id);
paramsList.add(date + "%");
if (sale_type != null && (sale_type == 0 || sale_type == 1)) {
sql += "and t.sale_type = ? \n";
paramsList.add(sale_type);
}
return Ordercluster.dao.find(sql, paramsList.toArray());
}
public List<Record> undonlist(Integer customer_id) {
@ -324,7 +347,7 @@ public class OrderclusterService extends BaseService {
* @param customer_id
* @return
*/
public List<Record> undonlist(int supermarket_id, Integer customer_id) {
public List<Record> undonlist(int supermarket_id, Integer customer_id, Integer sale_type) {
String sql = "select * from ordercluster t \n" +
" where t.state < ? \n" +
" and t.supermarket_id = ? \n";
@ -337,6 +360,11 @@ public class OrderclusterService extends BaseService {
paraList.add(customer_id);
}
if (sale_type != null && (sale_type == 0 || sale_type == 1)) {
sql += " and t.sale_type = ? \n";
paraList.add(sale_type);
}
return Db.find(sql, paraList.toArray());
}
@ -356,19 +384,21 @@ public class OrderclusterService extends BaseService {
return Db.find(sql, ts.toArray());
}
public List<Record> undonlist(int supermarket_id, int customer_id, String start_time, String cutoff_time) {
public List<Record> undonlist(int supermarket_id, int customer_id, String start_time, String cutoff_time, int sale_type) {
List<Object> 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 = ? ";
" and t.customer_id = ? \n" +
" and t.sale_type = ?";
return Db.find(sql, ts.toArray());
}
@ -380,8 +410,8 @@ public class OrderclusterService extends BaseService {
* @param customer_id
* @return
*/
public List<Record> undoneOrdercluster(int supermarket_id, Integer customer_id) {
List<Record> list = undonlist(supermarket_id, customer_id);
public List<Record> undoneOrdercluster(int supermarket_id, Integer customer_id, Integer sale_type) {
List<Record> list = undonlist(supermarket_id, customer_id, sale_type);
setOverWeight(list);
@ -688,31 +718,34 @@ public class OrderclusterService extends BaseService {
* @param customer_id
* @return
*/
public BigDecimal undoPrice(int customer_id) {
public BigDecimal undoPrice(int customer_id, int sale_type) {
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" +
" and t.state < ? and t.sale_type = ?) - (\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`< ?" +
" and o.`state`< ? and o.sale_type = ?" +
" )\n" +
" and t.`customer_id`= ?\n" +
" and t.`state`= ?)";
" and t.`state`= ? and t.sale_type = ?)";
BigDecimal out = Db.queryBigDecimal(
sql,
customer_id,
OrderStateEnum.RECEIVED.getStateid(),
sale_type,
customer_id,
OrderStateEnum.RECEIVED.getStateid(),
sale_type,
customer_id,
OrderStateEnum.RECEIVED.getStateid()
OrderStateEnum.RECEIVED.getStateid(),
sale_type
);
return out == null ? new BigDecimal("0") : out;

View File

@ -0,0 +1,57 @@
package com.cowr.ssjygl.order.ordercluster;
import com.cowr.common.utils.DateTimeUtil;
import com.cowr.common.validator.CrudParamValidator;
import com.cowr.common.view.Result;
import com.cowr.model.Ordercluster;
import com.jfinal.core.Controller;
/**
* Generated by COWR Fri Apr 17 16:59:39 CST 2020
* TableName: ordercluster
* Remarks: -
* PrimaryKey: id
*/
public class PresellOrderclusterValidator extends CrudParamValidator {
@Override
protected void validate(Controller c) {
validateString("uuid", 1, 32, "uuid", "uuid 长度 1~32");
validateString("presell_order_id", 1, 32, "presell_order_id", "presell_order_id 长度 1~32");
validateBigDecimal("total_weight", new java.math.BigDecimal(0), new java.math.BigDecimal(9.9999999999E10), "total_weight", "total_weight 范围 0~9.9999999999E10");
validateDate("start_time", "yyyy-MM-dd HH:mm:ss", true, "start_time", "start_time 格式 yyyy-MM-dd HH:mm:ss"); // 默认时间时间字符串格式,生成后根据情况调整
validateDate("cutoff_time", "yyyy-MM-dd HH:mm:ss", true, "cutoff_time", "cutoff_time 格式 yyyy-MM-dd HH:mm:ss"); // 默认时间时间字符串格式,生成后根据情况调整
if (DateTimeUtil.isEarlyToday(c.get("start_time"))) {
addError("start_time", "起始时间不能早于今天");
}
if (!DateTimeUtil.isStmLtEtm(c.get("start_time"), c.get("cutoff_time"))) {
addError("start_time", "起始时间不能早于截止时间");
}
validateInteger("customer_id", 1, 2147483647, "customer_id", "customer_id 范围 1~2147483647");
validateInteger("supermarket_id", 1, 2147483647, "supermarket_id", "supermarket_id 范围 1~2147483647");
validateInteger("product_id", 1, 2147483647, "product_id", "product_id 范围 1~2147483647");
validateInteger("mini_truck", 1, 2147483647, "mini_truck", "mini_truck 范围 1~2147483647");
validateInteger("max_truck", 1, 2147483647, "max_truck", "max_truck 范围 1~2147483647");
validateInteger("time_interval", 1, 3, "time_interval", "time_interval 范围 1~3");
if (c.getInt("mini_truck") > c.getInt("max_truck")) {
addError("mini_truck", "最低运输车辆不能超过最高运输车辆数");
}
// 使用 model 更新时model 不能只有主键有值
// 这里用 getActionMethodName 写死,判断是 update 时,才做验证
// 如果确实是需要将主键外的字段置为 null可以在代码生成后删掉这段
if ("edit".equals(getActionMethodName())) {
validateUpdateModel(Ordercluster.class, "", true); // 忽略不在model中的字段
}
}
protected void handleError(Controller c) {
c.renderJson(Result.failed(getErrmsg()));
}
}

View File

@ -10,6 +10,7 @@ import com.cowr.model.*;
import com.cowr.ssjygl.CacheData;
import com.cowr.ssjygl.prepay.prepaycustomer.PrepayCustomerService;
import com.cowr.ssjygl.prepay.refunddetail.RefundDetailService;
import com.cowr.ssjygl.presellorder.PresellOrderService;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;
@ -139,6 +140,9 @@ public class PrepayService {
Record out = new Record();
//获取账户可用余额
BigDecimal availableBalance = RefundDetailService.me.getAvailableBalance(prepayCustomer.getCustomerId(), prepayCustomer.getSurplus());
if (ordercluster.getSaleType() == 1) {
availableBalance = PresellOrderService.me.getPresellCustomerSurplusById(ordercluster.getPresellOrderId());
}
out.set("prepay_truck", true);
out.set("prepay_threshold", prepayCustomer.getThreshold());
out.set("prepay_truck_type", OrderTypeEnum.TEMP.getTypeid()); // 浠水固定只有外销

View File

@ -2,6 +2,7 @@ package com.cowr.ssjygl.presellorder;
import com.cowr.common.Const;
import com.cowr.common.base.BaseService;
import com.cowr.common.enums.OrderStateEnum;
import com.cowr.common.view.PageParam;
import com.cowr.model.PresellOrder;
import com.jfinal.kit.StrKit;
@ -23,7 +24,8 @@ public class PresellOrderService extends BaseService {
public static final PresellOrderService me = new PresellOrderService();
public Page<Record> find(PageParam pp, Integer customer_id, Integer supermarket_id, Integer del, String name, String stm, String etm) {
String selectsql = "select t.*, c.name customer_name, s.name supermarket_name, c.address, c.texpayer_name, c.texpayer_num, c.memo, p.surplus \n";
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" +
" left join customer c on t.customer_id = c.id \n" +
" left join prepay_customer p on t.customer_id = p.customer_id \n" +
@ -81,7 +83,8 @@ public class PresellOrderService extends BaseService {
}
public List<PresellOrder> list(Integer customer_id, Integer supermarket_id, Integer del, String name, String stm, String etm) {
String sql = "select t.*, c.name customer_name, s.name supermarket_name, c.address, c.texpayer_name, c.texpayer_num, c.memo, p.surplus \n" +
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" +
" left join customer c on t.customer_id = c.id \n" +
" left join prepay_customer p on t.customer_id = p.customer_id \n" +
@ -122,5 +125,9 @@ public class PresellOrderService extends BaseService {
return PresellOrder.dao.find(sql, paraList.toArray());
}
public BigDecimal getPresellCustomerSurplusById(String id) {
String sql = "select t.presell_amount - t.pug_amount as surplus from presell_order t\n" +
"WHERE t.id = ?";
return Db.queryBigDecimal(sql, id);
}
}

View File

@ -2546,7 +2546,7 @@ public class OrderStatService {
return recordList;
}
public Record yearStatisticsByCustomerId(String year, Integer customer_id, String customer_name, Integer type) {
public Record yearStatisticsByCustomerId(String year, Integer customer_id, String customer_name, Integer type, Integer sale_type) {
String sql;
Record rec;
if (type == 1) { // 固定配额
@ -3036,6 +3036,11 @@ public class OrderStatService {
} else if(yhList2.size() == 1) {
yhList1.addAll(yhList2);
}
} else {
for (Record s : sups) {
Record p = new Record().set("id", s.getInt("id")).set("total_price", new BigDecimal(0));
yhList1.add(p);
}
}
if (sups.size() > 0) {
for (Record s : sups) {

View File

@ -15,7 +15,7 @@ import com.jfinal.aop.Before;
public class OrderclusterController extends BaseController {
/**
* ordercluster -
* ordercluster -
*/
public void findTemp() {
PageParam pp = getBean(PageParam.class, "", true);
@ -23,6 +23,7 @@ public class OrderclusterController extends BaseController {
String etm = get("etm");
String customer_name = get("customer_name");
Integer supermarket_id = getInt("supermarket_id");
Integer sale_type = getInt("sale_type", 0);
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
@ -34,7 +35,7 @@ public class OrderclusterController extends BaseController {
Integer state = getInt("state");
Integer product_id = getInt("product_id");
renderJson(Result.object(OrderclusterService.me.findTemp(pp, supermarket_id, customer_name, stm, etm, state, product_id)));
renderJson(Result.object(OrderclusterService.me.findTemp(pp, supermarket_id, customer_name, stm, etm, state, product_id, sale_type)));
}
/**
@ -47,6 +48,7 @@ public class OrderclusterController extends BaseController {
String customer_name = get("customer_name");
Integer supermarket_id = getInt("supermarket_id");
Integer customer_id = getInt("customer_id");
Integer sale_type = getInt("sale_type");
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
@ -61,7 +63,7 @@ public class OrderclusterController extends BaseController {
Integer state = getInt("state");
Integer product_id = getInt("product_id");
Integer trans_co_id = getInt("trans_co_id");
renderJson(Result.object(OrderclusterService.me.findCluster(pp, supermarket_id, trans_co_id, customer_id, customer_name, stm, etm, state, product_id)));
renderJson(Result.object(OrderclusterService.me.findCluster(pp, supermarket_id, trans_co_id, customer_id, customer_name, stm, etm, state, product_id, sale_type)));
}
/**
@ -115,7 +117,8 @@ public class OrderclusterController extends BaseController {
public void undoneOrdercluster() {
Integer supermarket_id = getInt("supermarket_id");
Integer customer_id = getInt("customer_id");
Integer sale_type = getInt("sale_type", 0);
renderJson(Result.object(OrderclusterService.me.undoneOrdercluster(supermarket_id, customer_id)));
renderJson(Result.object(OrderclusterService.me.undoneOrdercluster(supermarket_id, customer_id, sale_type)));
}
}

View File

@ -19,6 +19,7 @@ import com.cowr.ssjygl.invoice.log.InvoiceLogService;
import com.cowr.ssjygl.invoice.receive.InvoiceReceiveService;
import com.cowr.ssjygl.order.ordercluster.OrderclusterService;
import com.cowr.ssjygl.prepay.refunddetail.RefundDetailService;
import com.cowr.ssjygl.presellorder.PresellOrderService;
import com.cowr.ssjygl.supermarket.product.SupermarketProductService;
import com.cowr.ssjygl.prepay.prepaycustomer.PrepayCustomerService;
import com.cowr.ssjygl.ticket.log.TicketLogService;
@ -734,6 +735,9 @@ 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("客户余额不足");
}
@ -850,6 +854,7 @@ public class OrderTempSyncService {
order.setSettlementUserName(sysuser.getName());
order.setState(OrderStateEnum.RECEIVED.getStateid()); // 直接完成,没有前面的过程
order.setSaleType(ordercluster.getSaleType());
order.setCreateTime(now);
order.setMemo(memo); // 备注
@ -877,24 +882,46 @@ public class OrderTempSyncService {
order.setPaid(new BigDecimal(0)); // 预付费的实际支付为 0
order.setPrepayCustomerId(prepayCustomer.getId());
if (prepayCustomer.getSurplus().compareTo(order.getTotalPrice().setScale(2, BigDecimal.ROUND_HALF_UP)) < 0) {
return false;
}
if (ordercluster.getSaleType() == 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())) // 结算完成,在原余额上加上一个负数
);
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()));
// 只更新本地 prepayCustomer 的 surplus
prepayCustomer.setSurplus(prepayCustomer.getSurplus().subtract(order.getTotalPrice()));
ret = prepayCustomer.update();
ret = prepayCustomer.update();
if (!ret) {
return false;
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);
}
ret = order.save() && transport.update();
@ -915,30 +942,32 @@ public class OrderTempSyncService {
synctask.addUpdateData(ordercluster);
}
Stock stock = Stock.dao.findByIds(transport.getSupermarketId(), order.getProductId());
if (stock == null) {
log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId());
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 = 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) {

View File

@ -366,6 +366,7 @@ public class OrderStatController extends BaseController {
Integer customer_id = getInt("customer_id");
String customer_name = get("customer_name");
Integer type = getInt("type");
renderJson(Result.object(OrderStatService.me.yearStatisticsByCustomerId(year, customer_id, customer_name, type)));
Integer sale_type = getInt("sale_type", 0);
renderJson(Result.object(OrderStatService.me.yearStatisticsByCustomerId(year, customer_id, customer_name, type, sale_type)));
}
}

View File

@ -11,10 +11,10 @@ import com.cowr.service.ssjygl.system.sysuser.SysuserSyncService;
import com.cowr.ssjygl.order.ordercluster.OrderclusterPKValidator;
import com.cowr.ssjygl.order.ordercluster.OrderclusterService;
import com.cowr.ssjygl.order.ordercluster.OrderclusterValidator;
import com.cowr.ssjygl.order.ordercluster.PresellOrderclusterValidator;
import com.jfinal.aop.Before;
import com.jfinal.log.Log;
import java.math.BigDecimal;
import java.util.Date;
public class OrderclusterController extends BaseController {
@ -82,6 +82,22 @@ public class OrderclusterController extends BaseController {
renderJson(OrderclusterSyncService.me.save(model, tokenuser));
}
/**
* ordercluster -
*/
@Before(PresellOrderclusterValidator.class)
public void savePresell() {
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
if (tokenuser == null) {
renderJson(Result.noauth());
return;
}
Ordercluster model = getModel(Ordercluster.class, "", true); // 忽略不在model中的字段
renderJson(OrderclusterSyncService.me.savePresell(model, tokenuser));
}
/**
* ordercluster -
*/
@ -122,6 +138,7 @@ public class OrderclusterController extends BaseController {
String etm = get("etm");
String customer_name = get("customer_name");
Integer supermarket_id = getInt("supermarket_id");
Integer sale_type = getInt("sale_type", 0);
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
@ -133,7 +150,7 @@ public class OrderclusterController extends BaseController {
Integer state = getInt("state");
Integer product_id = getInt("product_id");
renderJson(Result.object(OrderclusterService.me.findTemp(pp, supermarket_id, customer_name, stm, etm, state, product_id)));
renderJson(Result.object(OrderclusterService.me.findTemp(pp, supermarket_id, customer_name, stm, etm, state, product_id, sale_type)));
}
/**
@ -146,6 +163,7 @@ public class OrderclusterController extends BaseController {
String customer_name = get("customer_name");
Integer supermarket_id = getInt("supermarket_id");
Integer customer_id = getInt("customer_id");
Integer sale_type = getInt("sale_type");
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
@ -160,7 +178,7 @@ public class OrderclusterController extends BaseController {
Integer state = getInt("state");
Integer product_id = getInt("product_id");
Integer trans_co_id = getInt("trans_co_id");
renderJson(Result.object(OrderclusterService.me.findCluster(pp, supermarket_id, trans_co_id, customer_id, customer_name, stm, etm, state, product_id)));
renderJson(Result.object(OrderclusterService.me.findCluster(pp, supermarket_id, trans_co_id, customer_id, customer_name, stm, etm, state, product_id, sale_type)));
}
/**
@ -249,6 +267,8 @@ public class OrderclusterController extends BaseController {
public void getMaximumConfiguration(){
String unit_price = get("unit_price");
int customer_id=getInt("customer_id");
renderJson(OrderclusterSyncService.me.getMaximumConfiguration(customer_id, unit_price));
int sale_type = getInt("sale_type");
String presell_order_id = get("presell_order_id");
renderJson(OrderclusterSyncService.me.getMaximumConfiguration(customer_id, unit_price, presell_order_id, sale_type));
}
}

View File

@ -140,7 +140,7 @@ public class OrderclusterSyncService extends BaseSyncService {
}
// 客户在所有砂站的未完成的配额中,未执行完成的总金额
BigDecimal undo_price = OrderclusterService.me.undoPrice(customer_id);
BigDecimal undo_price = OrderclusterService.me.undoPrice(customer_id, 0);
BigDecimal plan_total_price = (new BigDecimal(total_weight).setScale(decimal, BigDecimal.ROUND_HALF_UP)).multiply(unitprice).add(undo_price); // 本次配额总价格
// 本次计划总额加上未完成的量,不能超过余额
@ -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<Record> undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id, query_start_time, query_cutoff_time);
List<Record> undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id, query_start_time, query_cutoff_time, 0);
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);
@ -189,6 +189,7 @@ public class OrderclusterSyncService extends BaseSyncService {
model.setReqReceipt(customerObj.getInvoiceType() == 1 ? 1 : 0); // 客户是普票,这里就开发票, req_receipt 设为 1客户是专票的这里开结算单req_receipt 设置为 0
model.setPayType(2);
model.setSaleType(0);
model.setUuid(StrKit.getRandomUUID());
newlist.add(model);
@ -467,7 +468,7 @@ public class OrderclusterSyncService extends BaseSyncService {
model.setCustomerTexpayerNum(customerObj.getTexpayerNum());
}
List<Record> list = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId());
List<Record> list = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), model.getSaleType());
if (list != null && !list.isEmpty()) {
return Result.failed("还有未完成的集团订单");
@ -530,6 +531,129 @@ public class OrderclusterSyncService extends BaseSyncService {
}
}
/**
*
* @param model
* @param sysuser
* @return
*/
public Result savePresell(Ordercluster model, Sysuser sysuser) {
if (model.checkDuplicate("uuid")) {
return Result.failed(false, "新增失败, uuid 已存在");
}
Supermarket supermarket = SvrCacheData.SUP_CACHE.get(model.getSupermarketId());
if (supermarket == null) {
return Result.failed("砂站信息无效");
}
if (supermarket.getIsdeploy() == 0) {
return Result.failedstr("[%s]砂站还未部署", supermarket.getName());
}
Customer customerObj = Customer.dao.findById(model.getCustomerId());
if (customerObj == null) {
return Result.failed("客户信息错误");
}
PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(model.getCustomerId());
if (prepayCustomer == null) {
return Result.failed("不是预付费用户");
}
Product product = Product.dao.findById(model.getProductId());
if (product == null) {
return Result.failedstr("没有找到商品信息【%s】", model.getProductId());
}
BigDecimal unitprice = CustomerSupermarketProductService.me.getUnitPrice(model.getCustomerId(), model.getSupermarketId(), model.getProductId());
if (unitprice == null) {
return Result.failed("未配置商品单价");
}
// 获取预售单中的预售金额
PresellOrder presellOrder = PresellOrder.dao.findById(model.getPresellOrderId());
if (presellOrder == null) {
return Result.failed("未获取到预售单");
}
List<Record> list = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), 1);
if (list != null && !list.isEmpty()) {
return Result.failed("还有未完成的预售订单");
}
// 余额
BigDecimal surplus = presellOrder.getPresellAmount().subtract(presellOrder.getPugAmount());
if (unitprice.multiply(model.getTotalWeight()).compareTo(surplus) > 0) {
return Result.failedstr("余额 %.2f 不足以购买 %.2f 吨 %s", surplus, model.getTotalWeight(), product.getName());
}
// 客户在所有砂站的未完成的配额中,未执行完成的总金额
BigDecimal undo_price = OrderclusterService.me.undoPrice(model.getCustomerId(), 1);
BigDecimal plan_total_price = model.getTotalWeight().multiply(unitprice).add(undo_price); // 本次配额总价格
// 本次计划总额加上未完成的量,不能超过余额
if (plan_total_price.compareTo(surplus) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, surplus);
}
// 超时在指定时间段内还有未完成的配额
String query_start_time = DateTimeUtil.sdf.get().format(model.getStartTime());
String query_cutoff_time = DateTimeUtil.sdf.get().format(model.getCutoffTime());
List<Record> undonlist = OrderclusterService.me.undonlist(model.getSupermarketId(), model.getCustomerId(), query_start_time, query_cutoff_time, 1);
if (undonlist != null && !undonlist.isEmpty()) {
return Result.failedstr("客户[%s]在砂站[%s][%s]至[%s]内还有未完成的配额",
customerObj.getName(), SvrCacheData.SUP_CACHE.get(model.getSupermarketId()).getName(), query_start_time, query_cutoff_time);
}
// 客户信息
model.setCustomerId(customerObj.getId());
model.setCustomerAddress(customerObj.getAddress());
model.setCustomerBankAccount(customerObj.getBankAccount());
model.setCustomerBankName(customerObj.getBankName());
model.setCustomerName(customerObj.getName());
model.setCustomerPhone(customerObj.getPhone());
model.setCustomerTexpayerName(customerObj.getTexpayerName());
model.setCustomerTexpayerNum(customerObj.getTexpayerNum());
// TODO 最少车辆数需要在前端计算,计算结果用户可以修改
model.setTransDistance(SupermarketReceiverDistanceService.me.getDistance(model.getSupermarketId(), model.getCustomerId()));
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.setPayType(2);
model.setSaleType(1);
model.setReqReceipt(customerObj.getInvoiceType() == 1 ? 1 : 0); // 客户是普票,这里就开发票, req_receipt 设为 1客户是专票的这里开结算单req_receipt 设置为 0
try {
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() throws SQLException {
try {
return model.save()
&& SyncTaskService.me.save(new SyncTask().addSaveData(model))
&& ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), sysuser);
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
});
return ret ? Result.success(model) : Result.failed("保存失败");
} catch (Exception e) {
log.error(e.getMessage(), e);
return Result.failed("保存失败");
}
}
public Result updateTemp(Ordercluster model, String trucks, Sysuser sysuser) {
Ordercluster oldobj = model.findByPk();
@ -753,7 +877,7 @@ public class OrderclusterSyncService extends BaseSyncService {
}
// 客户在所有砂站的未完成的配额中,未执行完成的总金额
BigDecimal undo_price = OrderclusterService.me.undoPrice(oldobj.getCustomerId());
BigDecimal undo_price = OrderclusterService.me.undoPrice(oldobj.getCustomerId(), 0);
BigDecimal plan_total_price;
if (model.getTotalWeight().compareTo(oldobj.getTotalWeight()) > 0) { // 修改后,比原来的大
BigDecimal ofsset_weight = model.getTotalWeight().subtract(oldobj.getTotalWeight()); // 本次修改增加的重量
@ -765,8 +889,20 @@ public class OrderclusterSyncService extends BaseSyncService {
plan_total_price = undo_price.subtract(offset_total_price); // 剩余未完成金额加上本次增加的金额
}
if (plan_total_price.compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, prepayCustomer.getSurplus());
if (oldobj.getSaleType() == 0) {
if (plan_total_price.compareTo(prepayCustomer.getSurplus()) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, prepayCustomer.getSurplus());
}
} else {
PresellOrder order = PresellOrder.dao.findById(oldobj.getPresellOrderId());
if (order == null) {
return Result.failed(false, "未获取到订单信息");
}
// 余额
BigDecimal surplus = order.getPresellAmount().subtract(order.getPugAmount());
if (plan_total_price.compareTo(surplus) > 0) {
return Result.failedstr("共计总配额达 %.2f元,客户余额(%.2f元)不足", plan_total_price, surplus);
}
}
}
@ -973,17 +1109,26 @@ public class OrderclusterSyncService extends BaseSyncService {
* @param unit_price
* @return
*/
public Map getMaximumConfiguration(int customer_id, String unit_price) {
public Map getMaximumConfiguration(int customer_id, String unit_price, String presell_order_id, int sale_type) {
Map result = new HashMap();
Integer count = Db.queryInt("select count(distinct s.name) from ordercluster t \n" +
" join supermarket s on s.id = t.supermarket_id \n" +
" where t.state<5 and t.customer_id =?", customer_id);
" where t.state<5 and t.customer_id =? and sale_type = ?", customer_id, sale_type);
result.put("count", count);
//当前用户如果只在一个沙场里面买沙,就计算最大可购买重量
if (count <= 1) {
PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(customer_id);
BigDecimal maximumConfiguration = new BigDecimal(0);
BigDecimal availableBalance = RefundDetailService.me.getAvailableBalance(prepayCustomer.getCustomerId(), prepayCustomer.getSurplus());
BigDecimal maximumConfiguration = availableBalance.divide(new BigDecimal(unit_price), 2, BigDecimal.ROUND_DOWN);
if (sale_type == 0) {
maximumConfiguration = availableBalance.divide(new BigDecimal(unit_price), 2, BigDecimal.ROUND_DOWN);
} else {
PresellOrder order = PresellOrder.dao.findById(presell_order_id);
if (order != null) {
availableBalance = order.getPresellAmount().subtract(order.getPugAmount());
maximumConfiguration = availableBalance.divide(new BigDecimal(unit_price), 2, BigDecimal.ROUND_DOWN);
}
}
result.put("maximumConfiguration", maximumConfiguration);
}
return result;

View File

@ -80,12 +80,14 @@ public class OrderclusterTruckSyncService extends BaseSyncService {
ts.add(0, start_time); // 加到查询参数里面
ts.add(0, cutoff_time); // 加到查询参数里面
ts.add(0, ordercluster.getSaleType());
ts.add(0, ordercluster_id); // 加到查询参数里面
List<Record> chkduk = Db.find(
"select * from ordercluster_truck t\n" +
" left join ordercluster o on o.id = t.ordercluster_id\n" +
" where t.ordercluster_id <> ? \n" +
" and o.state < 5 \n" +
" and o.sale_type < ? \n" +
" and o.start_time <= ? \n" +
" and o.cutoff_time >= ? \n" +
" and t.truck_license in (" + StrKit.join(tsql, ",") + ")", ts.toArray());

View File

@ -40,7 +40,7 @@ public class PrepayTruckSyncService extends BaseSyncService {
return Result.failed("砂站信息无效");
}
List<Ordercluster> undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id, DateTimeUtil.sdf.get().format(valid_date));
List<Ordercluster> undonlist = OrderclusterService.me.undonlist(supermarket_id, customer_id, DateTimeUtil.sdf.get().format(valid_date), 0);
if (undonlist == null || undonlist.isEmpty()) {
return Result.failed("未找到有效的集团订单信息");
@ -163,7 +163,7 @@ public class PrepayTruckSyncService extends BaseSyncService {
}
String valid_date = DateTimeUtil.sdf.get().format(old.getValidDate());
List<Ordercluster> undonlist = OrderclusterService.me.undonlist(old.getSupermarketId(), old.getCustomerId(), valid_date);
List<Ordercluster> undonlist = OrderclusterService.me.undonlist(old.getSupermarketId(), old.getCustomerId(), valid_date, 0);
if (undonlist == null || undonlist.isEmpty()) {
return Result.failed("未找到有效的集团订单信息");

View File

@ -3,10 +3,10 @@ package com.cowr.service.ssjygl.presellorder;
import com.alibaba.fastjson.JSONObject;
import com.cowr.common.Const;
import com.cowr.common.enums.Enums;
import com.cowr.common.enums.OrderStateEnum;
import com.cowr.common.view.Result;
import com.cowr.model.*;
import com.cowr.service.ssjygl.base.BaseSyncService;
import com.cowr.service.ssjygl.presellpugdetail.PresellPugDetailService;
import com.cowr.service.ssjygl.synctask.SyncTaskService;
import com.cowr.ssjygl.modifylog.ModifyLogService;
import com.cowr.ssjygl.prepay.prepaycustomer.PrepayCustomerService;
@ -104,13 +104,10 @@ public class PresellOrderSyncService extends BaseSyncService {
return false;
}
return SyncTaskService.me.save(synctask, model.getSupermarketId())
return SyncTaskService.me.save(synctask)
&& ModifyLogService.me.save(model, null, Enums.DataOpType.SAVE.getId(), tokenuser);
}
});
if (ret) {
SyncTaskService.me.send(synctask);
}
// todo客户余额变更时需短信通知
return ret ? Result.object(model) : Result.failed(false, "新增失败");
@ -146,7 +143,7 @@ public class PresellOrderSyncService extends BaseSyncService {
}
synctask.addUpdateData(oldobj);
return SyncTaskService.me.save(synctask, model.getSupermarketId())
return SyncTaskService.me.save(synctask)
&& ModifyLogService.me.save(model, saveold, Enums.DataOpType.UPDATE.getId(), tokenuser);
} catch (Exception e) {
log.error(e.getMessage(), e);
@ -180,7 +177,8 @@ public class PresellOrderSyncService extends BaseSyncService {
}
// 如果预售单已经进行了配额则不能删除
List<PresellPugDetail> list = PresellPugDetailService.me.getByPresellOrderId(model.getId());
List<Ordercluster> list = Ordercluster.dao.find("select * from ordercluster where presell_order_id = ? and state != ?",
model.getId(), OrderStateEnum.INVALID.getStateid());
if (list.size() > 0) {
return Result.failed(false, "预售单已配额");
}
@ -233,7 +231,7 @@ public class PresellOrderSyncService extends BaseSyncService {
synctask.addUpdateData(oldobj);
return SyncTaskService.me.save(synctask, saveold.getSupermarketId())
return SyncTaskService.me.save(synctask)
&& ModifyLogService.me.save(oldobj, saveold, Enums.DataOpType.UPDATE.getId(), tokenuser);
} catch (Exception e) {
log.error(e.getMessage(), e);

View File

@ -452,7 +452,8 @@ public class OrderStatController extends BaseController {
Integer customer_id = getInt("customer_id");
String customer_name = get("customer_name");
Integer type = getInt("type");
renderJson(Result.object(OrderStatService.me.yearStatisticsByCustomerId(year, customer_id, customer_name, type)));
Integer sale_type = getInt("sale_type", 0);
renderJson(Result.object(OrderStatService.me.yearStatisticsByCustomerId(year, customer_id, customer_name, type, sale_type)));
}
/**