|
@@ -40,6 +40,7 @@ import com.caimei.modules.user.utils.UserUtils;
|
|
|
import com.caimei.po.ProductLadderPrice;
|
|
|
import com.caimei.po.neworder.CmShopOrder;
|
|
|
import com.caimei.utils.*;
|
|
|
+import com.google.common.util.concurrent.AtomicDouble;
|
|
|
import com.thinkgem.jeesite.common.config.Global;
|
|
|
import com.thinkgem.jeesite.common.persistence.Page;
|
|
|
import com.thinkgem.jeesite.common.service.CrudService;
|
|
@@ -47,6 +48,7 @@ import com.thinkgem.jeesite.common.utils.DateUtils;
|
|
|
import com.thinkgem.jeesite.common.utils.StringUtils;
|
|
|
import com.thinkgem.jeesite.modules.sys.utils.DictUtils;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
+import org.h2.util.New;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
@@ -124,6 +126,8 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
private CmCouponClubDao cmCouponClubDao;
|
|
|
@Autowired
|
|
|
private HeHeNewOrderDao heHeNewOrderDao;
|
|
|
+ @Autowired
|
|
|
+ private WeChatService weChatService;
|
|
|
|
|
|
@Transactional(readOnly = false)
|
|
|
public void updateClauseContent(NewOrder newOrder) {
|
|
@@ -136,6 +140,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
synchronized (NewOrderService.class) {
|
|
|
NewOrder dbOrder = newOrderDao.findByOrderID(newOrder.getOrderID());
|
|
|
boolean flag = false;// 是否新增标志
|
|
|
+ boolean onlinePay = true; // 能否线上支付
|
|
|
if (newOrder.getOrderID() == null) {
|
|
|
flag = true;
|
|
|
newOrder.setOrderNo(OrderUtil.geneAdminOrderNo());
|
|
@@ -172,6 +177,14 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
if (newOrder.getAffirmPaymentFlag() == null) {
|
|
|
newOrder.setAffirmPaymentFlag("0");
|
|
|
}
|
|
|
+ // 有赠品不能线上支付
|
|
|
+ if (newOrder.getPresentCount() > 0 || newOrder.getPromotionalGiftsCount() > 0) {
|
|
|
+ onlinePay = false;
|
|
|
+ }
|
|
|
+ // 用余额不能线上支付
|
|
|
+ if (newOrder.getBalancePayFee() != null && newOrder.getBalancePayFee() > 0) {
|
|
|
+ onlinePay = false;
|
|
|
+ }
|
|
|
// 协销订单设置会所信息
|
|
|
if (newOrder.getBpOrderUserinfo() != null && newOrder.getBpOrderUserinfo().getClubId() != null) {
|
|
|
newOrder.setClubID(newOrder.getBpOrderUserinfo().getClubId().intValue());
|
|
@@ -199,6 +212,12 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
|
|
|
//采购中选中保存的订单商品
|
|
|
List<NewOrderProduct> orderProducts = newOrder.getOrderProduct();
|
|
|
+ for (NewOrderProduct orderProduct : orderProducts) {
|
|
|
+ if (StringUtils.isEmpty(orderProduct.getSplitCode())) {
|
|
|
+ onlinePay = false;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
double preferential = 0d;
|
|
|
double discountFee = 0d;
|
|
|
double productTotalFee = 0D;
|
|
@@ -343,53 +362,20 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
isUpdateUserMoney = true;
|
|
|
}
|
|
|
if (newOrder.getBalancePayFee() != null && newOrder.getBalancePayFee() > 0) {
|
|
|
- //线上余额>0优先抵扣
|
|
|
- Double onlineMoney = cmUserDao.findOnlineMoney(newOrder.getUserID());
|
|
|
- Double userMoney = cmUserDao.findUserMoney(newOrder.getUserID());
|
|
|
- //线上使用余额
|
|
|
- Double onlineUseMoney = 0d;
|
|
|
- //线下使用余额
|
|
|
- Double userUseMoney = 0d;
|
|
|
- //可用余额
|
|
|
- Double ableUserMoney = cmUserDao.findAbleUserMoney(newOrder.getUserID());
|
|
|
- if (onlineMoney > newOrder.getBalancePayFee()) {
|
|
|
- onlineUseMoney = newOrder.getBalancePayFee();
|
|
|
- } else {
|
|
|
- userUseMoney = newOrder.getBalancePayFee() - onlineMoney;
|
|
|
- onlineUseMoney = onlineMoney;
|
|
|
- }
|
|
|
-// ableUserMoney = MathUtil.sub(ableUserMoney, MathUtil.add(onlineUseMoney, userUseMoney)).doubleValue();
|
|
|
-// onlineMoney = MathUtil.sub(onlineMoney, onlineUseMoney).doubleValue();
|
|
|
-// userMoney = MathUtil.sub(userMoney, userUseMoney).doubleValue();
|
|
|
if (!isUpdateUserMoney) {
|
|
|
- // 只更新用户可用余额,不从user表减线上/线下余额
|
|
|
+ // 更新用户余额
|
|
|
cmUserDao.updateAbleUserMoney(newOrder.getBpOrderUserinfo());
|
|
|
}
|
|
|
- Date date = new Date();
|
|
|
- if (onlineUseMoney > 0) {
|
|
|
- //添加余额收支记录
|
|
|
- CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
|
|
|
- cmUserBalanceRecord.setUserId(newOrder.getUserID());
|
|
|
- cmUserBalanceRecord.setType("2");
|
|
|
- cmUserBalanceRecord.setBalanceType("10");
|
|
|
- cmUserBalanceRecord.setAddDate(date);
|
|
|
- cmUserBalanceRecord.setAmount(String.valueOf(onlineUseMoney));
|
|
|
- cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
|
|
|
- cmUserBalanceRecord.setDelFlag("0");
|
|
|
- cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
- }
|
|
|
- if (userUseMoney > 0) {
|
|
|
- //添加余额收支记录
|
|
|
- CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
|
|
|
- cmUserBalanceRecord.setUserId(newOrder.getUserID());
|
|
|
- cmUserBalanceRecord.setType("2");
|
|
|
- cmUserBalanceRecord.setBalanceType("1");
|
|
|
- cmUserBalanceRecord.setAddDate(date);
|
|
|
- cmUserBalanceRecord.setAmount(String.valueOf(userUseMoney));
|
|
|
- cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
|
|
|
- cmUserBalanceRecord.setDelFlag("0");
|
|
|
- cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
- }
|
|
|
+ //添加余额收支记录
|
|
|
+ CmUserBalanceRecord cmUserBalanceRecord = new CmUserBalanceRecord();
|
|
|
+ cmUserBalanceRecord.setUserId(newOrder.getUserID());
|
|
|
+ cmUserBalanceRecord.setType("2");
|
|
|
+ cmUserBalanceRecord.setBalanceType("1");
|
|
|
+ cmUserBalanceRecord.setAddDate(new Date());
|
|
|
+ cmUserBalanceRecord.setAmount(String.valueOf(newOrder.getBalancePayFee()));
|
|
|
+ cmUserBalanceRecord.setOrderId(newOrder.getOrderID());
|
|
|
+ cmUserBalanceRecord.setDelFlag("0");
|
|
|
+ cmUserBalanceRecordService.insertUserBalanceRecord(cmUserBalanceRecord);
|
|
|
}
|
|
|
|
|
|
//订单客户
|
|
@@ -439,7 +425,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
//新增加的订单,那么删除原有的子订单 和订单商品信息
|
|
|
newOrderProductDao.deleteByOrderID(newOrder.getOrderID());
|
|
|
newShopOrderDao.deleteByOrderID(newOrder.getOrderID());
|
|
|
- OrderUtil.orderSplit(newOrder);
|
|
|
+ OrderUtil.orderSplit(newOrder, onlinePay);
|
|
|
// 重新生成这些子订单 和订单商品信息
|
|
|
for (NewShopOrder shopOrder : newOrder.getNewShopOrders()) {
|
|
|
shopOrder.setOrderID(newOrder.getOrderID());
|
|
@@ -456,7 +442,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
for (NewOrderProduct orderProduct : shopOrder.getNewOrderProducts()) {
|
|
|
productName.append(orderProduct.getName());
|
|
|
// 没有折扣时促销才生效
|
|
|
- if (orderProduct.getDiscount() >= 100d) {
|
|
|
+ if (orderProduct.getDiscount() >= 100d && !onlinePay) {
|
|
|
if (null != promotionsList && promotionsList.size() > 0) {
|
|
|
for (CmPromotion promotion : promotionsList) {
|
|
|
if ("3".equals(promotion.getType())) {
|
|
@@ -512,19 +498,87 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
shopOrder.setShouldPayShopAmount(shopProductAmount + shopTaxFee);
|
|
|
shopOrder.setPayedShopAmount(0D);
|
|
|
shopOrder.setShopOtherFee(0D);
|
|
|
+ }
|
|
|
+ if (onlinePay) {
|
|
|
+ //线上支付分摊优惠总和到子订单
|
|
|
+ //经理折扣+优惠券+满减
|
|
|
+ double allDiscount = MathUtil.add(MathUtil.add(newOrder.getCouponAmount(), newOrder.getPromotionFullReduction()), newOrder.getDiscountFee()).doubleValue();
|
|
|
+ // 分摊优惠前总佣金
|
|
|
+ AtomicDouble oldBrokerage = new AtomicDouble(0);
|
|
|
+ List<NewShopOrder> shopOrderList = newOrder.getNewShopOrders();
|
|
|
+ shopOrderList.forEach(shopOrder -> {
|
|
|
+ oldBrokerage.set(MathUtil.add(oldBrokerage.get(), shopOrder.getBrokerage()).doubleValue());
|
|
|
+ });
|
|
|
+ // 按分摊前的佣金排序
|
|
|
+ shopOrderList.sort((o1, o2) -> o2.getBrokerage().compareTo(o1.getBrokerage()));
|
|
|
+ // 前面子订单的分摊优惠总和
|
|
|
+ AtomicDouble allReduction = new AtomicDouble(0);
|
|
|
+ if (allDiscount > 0) {
|
|
|
+ for (int i = 0; i < shopOrderList.size(); i++) {
|
|
|
+ NewShopOrder shopOrder = shopOrderList.get(i);
|
|
|
+ if (i < shopOrderList.size() - 1) {
|
|
|
+ //最终支付金额=分摊前支付金额oldprice-折扣*(分摊前佣金/分摊前总佣金)
|
|
|
+ //优惠分摊金额
|
|
|
+ double v = MathUtil.mul(allDiscount, MathUtil.div(shopOrder.getBrokerage(), oldBrokerage.get()), 2).doubleValue();
|
|
|
+ shopOrder.setEachDiscount(v);
|
|
|
+ //子订单真实支付金额
|
|
|
+ double realPay = MathUtil.round(MathUtil.sub(shopOrder.getNeedPayAmount(), v), 2).doubleValue();
|
|
|
+ shopOrder.setRealPay(realPay);
|
|
|
+ allReduction.set(MathUtil.add(v, allReduction.get()).doubleValue());
|
|
|
+ }
|
|
|
+ if (i == shopOrderList.size() - 1) {
|
|
|
+ //最后一个子订单的分摊优惠金额=全优惠allDiscount-已分摊
|
|
|
+ double v = MathUtil.sub(allDiscount, allReduction.get()).doubleValue();
|
|
|
+ shopOrder.setEachDiscount(v);
|
|
|
+ shopOrder.setRealPay(MathUtil.round(MathUtil.sub(shopOrder.getNeedPayAmount(), v), 2).doubleValue());
|
|
|
+ }
|
|
|
+ //有优惠金额,最高手续费=支付金额*0.65%>10取0.65,不大于取10(合利宝最高0.65%)
|
|
|
+ double realPay = shopOrder.getRealPay();
|
|
|
+ double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
|
|
|
+ //佣金>最高手续费可以线上,否则线下
|
|
|
+ double bro = MathUtil.sub(realPay, shopOrder.getShouldPayShopAmount()).doubleValue();
|
|
|
+ if (bro < charge) {
|
|
|
+ onlinePay = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //无优惠金额
|
|
|
+ for (int i = 0; i < shopOrderList.size(); i++) {
|
|
|
+ NewShopOrder shopOrder = shopOrderList.get(i);
|
|
|
+ double realPay = shopOrder.getNeedPayAmount();
|
|
|
+ shopOrder.setRealPay(realPay);
|
|
|
+ shopOrder.setEachDiscount(0d);
|
|
|
+ double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
|
|
|
+ double bro = shopOrder.getBrokerage();
|
|
|
+ shopOrder.setRealPay(realPay);
|
|
|
+ shopOrder.setEachDiscount(0d);
|
|
|
+ if (bro < charge) {
|
|
|
+ onlinePay = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 更新主订单线上支付按钮
|
|
|
+ * onlinePayFlag:0可以 1不可以
|
|
|
+ */
|
|
|
+ Integer onlinePayFlag = onlinePay ? 0 : 1;
|
|
|
+ newOrder.setOnlinePayFlag(onlinePayFlag.toString());
|
|
|
+ // 更新子订单信息
|
|
|
+ for (NewShopOrder shopOrder : newOrder.getNewShopOrders()) {
|
|
|
newShopOrderDao.update(shopOrder);
|
|
|
}
|
|
|
} else {
|
|
|
// 重新保存逻辑
|
|
|
//把从页面上传过来的orderProduct 根据 shopID 来分组
|
|
|
- Map<Integer, List<NewOrderProduct>> orderProductMap = new HashMap<>();
|
|
|
+ Map<String, List<NewOrderProduct>> orderProductMap = new HashMap<>();
|
|
|
for (NewOrderProduct op : newOrder.getOrderProduct()) {
|
|
|
- if (orderProductMap.containsKey(op.getShopID())) {
|
|
|
- orderProductMap.get(op.getShopID()).add(op);
|
|
|
+ if (orderProductMap.containsKey(onlinePay ? op.getSplitCode() + "-" + op.getShopID() : op.getShopID().toString())) {
|
|
|
+ orderProductMap.get(onlinePay ? op.getSplitCode() + "-" + op.getShopID() : op.getShopID().toString()).add(op);
|
|
|
} else {
|
|
|
List<NewOrderProduct> l = new ArrayList<>();
|
|
|
l.add(op);
|
|
|
- orderProductMap.put(op.getShopID(), l);
|
|
|
+ orderProductMap.put(onlinePay ? op.getSplitCode() + "-" + op.getShopID() : op.getShopID().toString(), l);
|
|
|
}
|
|
|
}
|
|
|
// orderProduct 分组完成
|
|
@@ -534,7 +588,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
//删除多余的shopOrder记录
|
|
|
for (NewShopOrder s : dbShopOrders) {
|
|
|
// 说明这个重新选择的orderProduct已经不包含这个供应商shopID的商品了
|
|
|
- if (!orderProductMap.containsKey(s.getShopID())) {
|
|
|
+ if (!orderProductMap.containsKey(onlinePay ? s.getSplitCode() + "-" + s.getShopID() : s.getShopID().toString())) {
|
|
|
newShopOrderDao.delete(s);
|
|
|
}
|
|
|
s.setSendOutStatus("1");
|
|
@@ -542,17 +596,18 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
shopOrderNoIndex = shopOrderNoIndex < shopOrderIndex ? shopOrderIndex : shopOrderNoIndex;
|
|
|
}
|
|
|
//更新其余的shopOrder的信息
|
|
|
+ List<NewShopOrder> newShopOrderList = new ArrayList<>();
|
|
|
A:
|
|
|
- for (Map.Entry<Integer, List<NewOrderProduct>> entry : orderProductMap.entrySet()) {
|
|
|
+ for (Map.Entry<String, List<NewOrderProduct>> entry : orderProductMap.entrySet()) {
|
|
|
for (NewShopOrder s : dbShopOrders) {
|
|
|
- if (s.getShopID().intValue() == entry.getKey().intValue()) {
|
|
|
- OrderUtil.updateShopOrderInfo(s, entry.getValue(), newOrder.getPromotions());
|
|
|
- newShopOrderDao.update(s);
|
|
|
+ if ((onlinePay ? s.getSplitCode() + "-" + s.getShopID() : s.getShopID().toString()).equals(entry.getKey())) {
|
|
|
+ OrderUtil.updateShopOrderInfo(s, entry.getValue(), newOrder.getPromotions(), onlinePay);
|
|
|
+ newShopOrderList.add(s);
|
|
|
continue A;
|
|
|
}
|
|
|
}
|
|
|
NewShopOrder newShopOrder = new NewShopOrder();
|
|
|
- OrderUtil.updateShopOrderInfo(newShopOrder, entry.getValue(), newOrder.getPromotions());
|
|
|
+ OrderUtil.updateShopOrderInfo(newShopOrder, entry.getValue(), newOrder.getPromotions(), onlinePay);
|
|
|
newShopOrder.setShopOrderNo(OrderUtil.getshopOrderNo(newOrder.getOrderNo(), ++shopOrderNoIndex));
|
|
|
newShopOrder.setSendOutStatus("1");
|
|
|
newShopOrder.setOrderNo(newOrder.getOrderNo());
|
|
@@ -586,12 +641,93 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
newShopOrder.setDelFlag("0");
|
|
|
newShopOrder.setPayFlag("0");
|
|
|
newShopOrder.setSplitFlag("1");// 订单默认可拆分
|
|
|
- newShopOrderDao.insert(newShopOrder);
|
|
|
- for (NewOrderProduct product : orderProducts) {
|
|
|
- if (product.getShopID().intValue() == newShopOrder.getShopID().intValue()) {
|
|
|
- product.setShopOrderID(newShopOrder.getShopOrderID());
|
|
|
- product.setShopOrderNo(newShopOrder.getShopOrderNo());
|
|
|
- product.setOrderPromotionsId(product.getOrderPromotionsId());
|
|
|
+ newShopOrder.setShopReceiptStatus("3".equals(newOrder.getReceiptStatus()) ? 3 : 1);
|
|
|
+ newShopOrder.setRealPay(0d);
|
|
|
+ newShopOrder.setEachDiscount(0d);
|
|
|
+ newShopOrder.setReceiptAmount(0d);
|
|
|
+ NewOrderProduct orderProduct = orderProducts.get(0);
|
|
|
+ if (null != orderProduct) {
|
|
|
+ newShopOrder.setSplitCode(orderProduct.getSplitCode());
|
|
|
+ }
|
|
|
+ newShopOrderList.add(newShopOrder);
|
|
|
+
|
|
|
+ }
|
|
|
+ if (onlinePay) {
|
|
|
+ //线上支付分摊优惠总和到子订单
|
|
|
+ //经理折扣+优惠券+满减
|
|
|
+ double allDiscount = MathUtil.add(MathUtil.add(newOrder.getCouponAmount(), newOrder.getPromotionFullReduction()), newOrder.getDiscountFee()).doubleValue();
|
|
|
+ // 分摊优惠前总佣金
|
|
|
+ AtomicDouble oldBrokerage = new AtomicDouble(0);
|
|
|
+ newShopOrderList.forEach(shopOrder -> {
|
|
|
+ oldBrokerage.set(MathUtil.add(oldBrokerage.get(), shopOrder.getBrokerage()).doubleValue());
|
|
|
+ });
|
|
|
+ // 按分摊前的佣金排序
|
|
|
+ newShopOrderList.sort((o1, o2) -> o2.getBrokerage().compareTo(o1.getBrokerage()));
|
|
|
+ // 前面子订单的分摊优惠总和
|
|
|
+ AtomicDouble allReduction = new AtomicDouble(0);
|
|
|
+ if (allDiscount > 0) {
|
|
|
+ for (int i = 0; i < newShopOrderList.size(); i++) {
|
|
|
+ NewShopOrder shopOrder = newShopOrderList.get(i);
|
|
|
+ if (i < newShopOrderList.size() - 1) {
|
|
|
+ //最终支付金额=分摊前支付金额oldprice-折扣*(分摊前佣金/分摊前总佣金)
|
|
|
+ //优惠分摊金额
|
|
|
+ double v = MathUtil.mul(allDiscount, MathUtil.div(shopOrder.getBrokerage(), oldBrokerage.get()), 2).doubleValue();
|
|
|
+ shopOrder.setEachDiscount(v);
|
|
|
+ //子订单真实支付金额
|
|
|
+ double realPay = MathUtil.round(MathUtil.sub(shopOrder.getNeedPayAmount(), v), 2).doubleValue();
|
|
|
+ shopOrder.setRealPay(realPay);
|
|
|
+ allReduction.set(MathUtil.add(v, allReduction.get()).doubleValue());
|
|
|
+ }
|
|
|
+ if (i == newShopOrderList.size() - 1) {
|
|
|
+ //最后一个子订单的分摊优惠金额=全优惠allDiscount-已分摊
|
|
|
+ double v = MathUtil.sub(allDiscount, allReduction.get()).doubleValue();
|
|
|
+ shopOrder.setEachDiscount(v);
|
|
|
+ shopOrder.setRealPay(MathUtil.round(MathUtil.sub(shopOrder.getNeedPayAmount(), v), 2).doubleValue());
|
|
|
+ }
|
|
|
+ //有优惠金额,最高手续费=支付金额*0.65%>10取0.65,不大于取10(合利宝最高0.65%)
|
|
|
+ double realPay = shopOrder.getRealPay();
|
|
|
+ double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
|
|
|
+ //佣金>最高手续费可以线上,否则线下
|
|
|
+ double bro = MathUtil.sub(realPay, shopOrder.getShouldPayShopAmount()).doubleValue();
|
|
|
+ if (bro < charge) {
|
|
|
+ onlinePay = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //无优惠金额
|
|
|
+ for (int i = 0; i < newShopOrderList.size(); i++) {
|
|
|
+ NewShopOrder shopOrder = newShopOrderList.get(i);
|
|
|
+ double realPay = shopOrder.getNeedPayAmount();
|
|
|
+ shopOrder.setRealPay(realPay);
|
|
|
+ shopOrder.setEachDiscount(0d);
|
|
|
+ double charge = MathUtil.mul(realPay, 0.0065, 2).doubleValue() > 10 ? MathUtil.mul(realPay, 0.0065, 2).doubleValue() : 10;
|
|
|
+ double bro = shopOrder.getBrokerage();
|
|
|
+ shopOrder.setRealPay(realPay);
|
|
|
+ shopOrder.setEachDiscount(0d);
|
|
|
+ if (bro < charge) {
|
|
|
+ onlinePay = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 更新主订单线上支付按钮
|
|
|
+ * onlinePayFlag:0可以 1不可以
|
|
|
+ */
|
|
|
+ Integer onlinePayFlag = onlinePay ? 0 : 1;
|
|
|
+ newOrder.setOnlinePayFlag(onlinePayFlag.toString());
|
|
|
+ // 保存子订单
|
|
|
+ for (NewShopOrder newShopOrder : newShopOrderList) {
|
|
|
+ if (null != newShopOrder.getShopOrderID()) {
|
|
|
+ newShopOrderDao.update(newShopOrder);
|
|
|
+ } else {
|
|
|
+ newShopOrderDao.insert(newShopOrder);
|
|
|
+ for (NewOrderProduct product : orderProducts) {
|
|
|
+ if (product.getShopID().intValue() == newShopOrder.getShopID().intValue() && (onlinePay && product.getSplitCode().equals(newShopOrder.getSplitCode()))) {
|
|
|
+ product.setShopOrderID(newShopOrder.getShopOrderID());
|
|
|
+ product.setShopOrderNo(newShopOrder.getShopOrderNo());
|
|
|
+ product.setOrderPromotionsId(product.getOrderPromotionsId());
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -715,7 +851,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
newShopOrderDao.delete(freightShopOrder);
|
|
|
newOrderProductDao.delete(freightOrderProduct);
|
|
|
}
|
|
|
- if (newOrder.getFreePostFlag() != null && newOrder.getFreePostFlag().equals("1")) {
|
|
|
+ if (newOrder.getFreePostFlag() != null && "1".equals(newOrder.getFreePostFlag())) {
|
|
|
setFreightShopOrder(newOrder);
|
|
|
}
|
|
|
List<NewShopOrder> shopOrders = newShopOrderDao.findListByOrderID(newOrder.getOrderID());
|
|
@@ -955,6 +1091,11 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
newShopOrder.setTotalAmount(newOrder.getFreight());
|
|
|
newShopOrder.setNeedPayAmount(newOrder.getFreight());
|
|
|
newShopOrder.setDiscountAmount(0D);
|
|
|
+ newShopOrder.setEachDiscount(0D);
|
|
|
+ newShopOrder.setRealPay(newOrder.getFreight());
|
|
|
+ newShopOrder.setReceiptAmount(0D);
|
|
|
+ newShopOrder.setSplitCode(product.getSplitCode());
|
|
|
+ newShopOrder.setReceiptStatus("1");
|
|
|
if ("1".equals(pOrder.getPostageOrderFlag())) {
|
|
|
newShopOrder.setPayFlag("1");
|
|
|
newShopOrder.setPayStatus("3");
|
|
@@ -1171,19 +1312,6 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
newOrder.setOrderInvoice(orderInvoice);
|
|
|
}
|
|
|
}
|
|
|
- //线上/下余额赋值
|
|
|
- Double userMoney = cmDiscernReceiptDao.findUserMoney(id);
|
|
|
- Double onlineMoney = cmDiscernReceiptDao.findOnlineMoney(id);
|
|
|
- if(null==userMoney){
|
|
|
- newOrder.setUserMoney(0d);
|
|
|
- }else{
|
|
|
- newOrder.setUserMoney(userMoney);
|
|
|
- }
|
|
|
- if(null == onlineMoney){
|
|
|
- newOrder.setOnlineMoney(0d);
|
|
|
- }else{
|
|
|
- newOrder.setOnlineMoney(onlineMoney);
|
|
|
- }
|
|
|
return newOrder;
|
|
|
}
|
|
|
|
|
@@ -1227,6 +1355,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
}
|
|
|
}
|
|
|
List<NewShopOrder> shopOrders = newShopOrderDao.findListByOrderID(cmReturnedPurchase.getOrderID());
|
|
|
+ logger.info("shopOrders》》》》》" + shopOrders.toString());
|
|
|
if (CollectionUtils.isNotEmpty(shopOrders)) {
|
|
|
for (NewShopOrder shopOrder : shopOrders) {
|
|
|
//获取退货退款记录
|
|
@@ -1531,6 +1660,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
}
|
|
|
int num = entry.getValue().stream().mapToInt(NewOrderProduct::getThisTimePostNum).sum();
|
|
|
if (outStoreNum + num > (shopOrder.getItemCount() + shopOrder.getPresentNum())) {
|
|
|
+
|
|
|
throw new Exception("发货数量异常");
|
|
|
}
|
|
|
shopOrder.setOutStoreNum(outStoreNum + num);//更新子订单总的出库数量
|
|
@@ -1549,6 +1679,7 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
} else {
|
|
|
autoCloseTimeMills += cfg.getValue() * 60 * 1000;
|
|
|
}
|
|
|
+
|
|
|
shopOrder.setAutoReceiveTimeMills(autoCloseTimeMills);
|
|
|
}
|
|
|
shopOrder.setSplitFlag("0");//发货以后拆单标识订单无法拆分
|
|
@@ -1560,13 +1691,63 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
NewOrder order = newOrderDao.findByOrderID(orderID);
|
|
|
String sendOutStatus = order.getSendOutStatus();
|
|
|
List<NewShopOrder> shopOrders = newShopOrderDao.findListByOrderID(order.getOrderID());
|
|
|
-
|
|
|
+ Integer count = 0;
|
|
|
String statusSuffix = "";
|
|
|
if (shopOrders.stream().allMatch(s -> "3".equals(s.getSendOutStatus()))) {
|
|
|
+ //推送次数多次发货不推送(只推送一次)
|
|
|
+ Date date = new Date();
|
|
|
+ logger.info("****************************发货微信消息推送************************************");
|
|
|
+ if ("1".equals(order.getSendOutStatus())) {
|
|
|
+ if ("0".equals(order.getSecondHandOrderFlag()) && "0".equals(order.getRebateFlag()) && !"6060".equals(newShopOrderDao.getProductOrder(order.getOrderID())) && !"0".equals(order.getOrderType())) {
|
|
|
+ try {
|
|
|
+
|
|
|
+ Integer orderId = order.getOrderID();
|
|
|
+ String unionid = newShopOrderDao.FromUnionId(orderId);
|
|
|
+ List<String> openidList = newShopOrderDao.getOpenidListByPermission(unionid);
|
|
|
+ logger.info("userid>>>>>>>>>>>>>>>" + orderId + "unionid》》》》》》》》》》" + unionid + "openid》》》》》》》》》" + openidList);
|
|
|
+ String accessToken = weChatService.getAccessToken();
|
|
|
+ String orderNo = order.getOrderNo();
|
|
|
+ String time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
+ String company = StringUtils.strip(logisticsInfo.keySet().toString(), "[]");
|
|
|
+ String companyno = StringUtils.strip(logisticsInfo.values().toString(), "[]");
|
|
|
+ String pagePath = "pages/user/order/order-details?type=share&orderId=" + order.getOrderID();
|
|
|
+ for (String openid : openidList) {
|
|
|
+ weChatService.sendTemplateMsgy(accessToken, openid, orderNo, time, company, companyno, pagePath);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("【订单发货通知】获取微信公众号access_token异常!", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
//所有的子订单都已经完成发货了
|
|
|
statusSuffix = "3";
|
|
|
order.setSendOutStatus("3");
|
|
|
+ count++;
|
|
|
} else {
|
|
|
+ //推送次数多次发货不推送(只推送一次)
|
|
|
+ Date date = new Date();
|
|
|
+ logger.info("**************************发货微信消息推送************************************");
|
|
|
+ if ("0".equals(order.getSecondHandOrderFlag()) && "0".equals(order.getRebateFlag()) && !newShopOrderDao.getProductOrder(order.getOrderID()).contains(6060) && !"0".equals(order.getOrderType())) {
|
|
|
+ try {
|
|
|
+
|
|
|
+ Integer orderId = order.getOrderID();
|
|
|
+ String unionid = newShopOrderDao.FromUnionId(orderId);
|
|
|
+ List<String> openidList = newShopOrderDao.getOpenidListByPermission(unionid);
|
|
|
+ System.out.println("userid>>>>>>>>>>>>>>>" + orderId + "unionid》》》》》》》》》》" + newShopOrderDao.getOpenidListByPermission(unionid) + "openid》》》》》》》》》" + openidList);
|
|
|
+ String accessToken = weChatService.getAccessToken();
|
|
|
+ String orderNo = order.getOrderNo();
|
|
|
+ String time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(date);
|
|
|
+ String company = StringUtils.strip(logisticsInfo.keySet().toString(), "[]");
|
|
|
+ String companyno = StringUtils.strip(logisticsInfo.values().toString(), "[]");
|
|
|
+ String pagePath = "pages/user/order/order-details?orderId=" + order.getOrderID();
|
|
|
+ for (String openid : openidList) {
|
|
|
+ weChatService.sendTemplateMsgy(accessToken, openid, orderNo, time, company, companyno, pagePath);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("【订单发货通知】获取微信公众号access_token异常!", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//代码走到这里订单肯定是有发货了 整个订单里面的商品没有全部发完 那就是部分发货了
|
|
|
statusSuffix = "2";
|
|
|
order.setSendOutStatus("2");
|
|
@@ -1633,32 +1814,34 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /*try {
|
|
|
- //发货短信推送(取消推送)
|
|
|
- CmUser user = cmUserDao.get(order.getUserID().toString());
|
|
|
- if (user != null && StringUtils.isNotBlank(user.getBindMobile()) && "0".equals(order.getRebateFlag())) {
|
|
|
- String wwwServer = Global.getConfig("wwwServer");
|
|
|
- boolean sendSms = false;
|
|
|
- if ("2".equals(order.getSendOutStatus()) && "1".equals(sendOutStatus)) {
|
|
|
- //部分发货
|
|
|
- String shortLink = getShortLink(8, 7, wwwServer + "user/order/detail.html?orderId=" + order.getOrderID());
|
|
|
- String content = "您的订单(订单编号:" + order.getOrderNo() + ")已部分发货。您可关注采美公众号或者访问采美微信小程序和网站查看订单。平台公众号:微信搜索“采美365网”; " +
|
|
|
- "微信小程序:微信搜索“采美采购商城”;网址:www.caimei365.com/t/" + shortLink;
|
|
|
- sendSms = getSendSms(7, user.getBindMobile(), content);
|
|
|
- } else if ("3".equals(order.getSendOutStatus())) {
|
|
|
- //已发货
|
|
|
- String shortLink = getShortLink(8, 8, wwwServer + "user/order/detail.html?orderId=" + order.getOrderID());
|
|
|
- String content = "您的订单(订单编号:" + order.getOrderNo() + ")已发货完毕。您可关注采美公众号或者访问采美微信小程序和网站查看订单。平台公众号:微信搜索“采美365网”; " +
|
|
|
- "微信小程序:微信搜索“采美采购商城”;网址:www.caimei365.com/t/" + shortLink;
|
|
|
- sendSms = getSendSms(8, user.getBindMobile(), content);
|
|
|
- }
|
|
|
- if (!sendSms) {
|
|
|
- logger.info("发货短信推送失败,订单id>>>>" + order.getOrderID());
|
|
|
+ if (count == 1) {
|
|
|
+ try {
|
|
|
+ //发货短信推送(取消推送)
|
|
|
+ CmUser user = cmUserDao.get(order.getUserID().toString());
|
|
|
+ if (user != null && StringUtils.isNotBlank(user.getBindMobile()) && "0".equals(order.getRebateFlag())) {
|
|
|
+ String wwwServer = Global.getConfig("wwwServer");
|
|
|
+ boolean sendSms = false;
|
|
|
+ if ("2".equals(order.getSendOutStatus()) && "1".equals(sendOutStatus)) {
|
|
|
+ //部分发货
|
|
|
+ String shortLink = getShortLink(8, 7, wwwServer + "user/order/detail.html?orderId=" + order.getOrderID());
|
|
|
+ String content = "您的订单(订单编号:" + order.getOrderNo() + ")已部分发货。您可关注采美公众号或者访问采美微信小程序和网站查看订单。平台公众号:微信搜索“采美365网”; " +
|
|
|
+ "微信小程序:微信搜索“采美采购商城”;网址:www.caimei365.com/t/" + shortLink;
|
|
|
+ sendSms = getSendSms(7, user.getBindMobile(), content);
|
|
|
+ } else if ("3".equals(order.getSendOutStatus())) {
|
|
|
+ //已发货
|
|
|
+ String shortLink = getShortLink(8, 8, wwwServer + "user/order/detail.html?orderId=" + order.getOrderID());
|
|
|
+ String content = "您的订单(订单编号:" + order.getOrderNo() + ")已发货完毕。您可关注采美公众号或者访问采美微信小程序和网站查看订单。平台公众号:微信搜索“采美365网”; " +
|
|
|
+ "微信小程序:微信搜索“采美采购商城”;网址:www.caimei365.com/t/" + shortLink;
|
|
|
+ sendSms = getSendSms(8, user.getBindMobile(), content);
|
|
|
+ }
|
|
|
+ if (!sendSms) {
|
|
|
+ logger.info("发货短信推送失败,订单id>>>>" + order.getOrderID());
|
|
|
+ }
|
|
|
}
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }*/
|
|
|
+ }
|
|
|
return lb.getId();
|
|
|
}
|
|
|
|
|
@@ -1692,9 +1875,9 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
}
|
|
|
dbShopOrder.setSplitFlag("0");// 拆分后订单无法再次拆分
|
|
|
newShopOrder.setSplitFlag("0");
|
|
|
- OrderUtil.updateShopOrderInfo(dbShopOrder, oldOrderProductList, null); // 根据拆分后的订单商品重新统计子订单信息
|
|
|
+ OrderUtil.updateShopOrderInfo(dbShopOrder, oldOrderProductList, null, true); // 根据拆分后的订单商品重新统计子订单信息
|
|
|
newShopOrderDao.updateByShopOrderID(dbShopOrder);// 更新原来的子订单
|
|
|
- OrderUtil.updateShopOrderInfo(newShopOrder, newOrderProductList, null);
|
|
|
+ OrderUtil.updateShopOrderInfo(newShopOrder, newOrderProductList, null, true);
|
|
|
newShopOrder.setShopOrderNo(OrderUtil.getshopOrderNo(dbShopOrder.getOrderNo(), ++bigNum));
|
|
|
newShopOrderDao.insert(newShopOrder);// 插入新增的拆分订单
|
|
|
String orderProductIDs = "";
|
|
@@ -1789,13 +1972,13 @@ public class NewOrderService extends CrudService<NewOrderDao, NewOrder> {
|
|
|
for (Map.Entry<Integer, List<NewOrderProduct>> entry : orderProductMap.entrySet()) {
|
|
|
for (NewShopOrder s : dbShopOrders) {
|
|
|
if (s.getShopID().intValue() == entry.getKey().intValue()) {
|
|
|
- OrderUtil.updateShopOrderInfo(s, entry.getValue(), null);
|
|
|
+ OrderUtil.updateShopOrderInfo(s, entry.getValue(), null, true);
|
|
|
newShopOrderDao.update(s);
|
|
|
continue A;
|
|
|
}
|
|
|
}
|
|
|
NewShopOrder newShopOrder = new NewShopOrder();
|
|
|
- OrderUtil.updateShopOrderInfo(newShopOrder, entry.getValue(), null);
|
|
|
+ OrderUtil.updateShopOrderInfo(newShopOrder, entry.getValue(), null, true);
|
|
|
newShopOrder.setShopOrderNo(OrderUtil.getshopOrderNo(newOrder.getOrderNo(), ++shopOrderNoIndex));
|
|
|
newShopOrder.setOrderNo(newOrder.getOrderNo());
|
|
|
newShopOrder.setOrderID(newOrder.getOrderID());
|