Selaa lähdekoodia

支付采美后台part2

Aslee 3 vuotta sitten
vanhempi
commit
365d91dd83

+ 2 - 0
src/main/java/com/caimei/modules/order/dao/NewOrderDao.java

@@ -216,4 +216,6 @@ public interface NewOrderDao extends CrudDao<NewOrder> {
     void insertSplitAccount(SplitAccountPo splitAccount);
 
     Date findSplitTime();
+
+    void updateOnlinePayFlag(@Param("onlinePayFlag") Integer onlinePayFlag,@Param("orderId") Integer orderId);
 }

+ 9 - 0
src/main/java/com/caimei/modules/order/entity/NewOrderProduct.java

@@ -118,6 +118,7 @@ public class NewOrderProduct extends DataEntity<NewOrderProduct> {
     private String commodityType;//商品属性:1产品,2仪器
     private Double svipReduction;//超级会员优惠
     private Double svipTaxReduction;//超级会员税费优惠
+    private String splitCode;// 商品分账号
 
     public Integer getLadderPriceFlag() {
         return ladderPriceFlag;
@@ -1007,4 +1008,12 @@ public class NewOrderProduct extends DataEntity<NewOrderProduct> {
     public void setSvipTaxReduction(Double svipTaxReduction) {
         this.svipTaxReduction = svipTaxReduction;
     }
+
+    public String getSplitCode() {
+        return splitCode;
+    }
+
+    public void setSplitCode(String splitCode) {
+        this.splitCode = splitCode;
+    }
 }

+ 9 - 0
src/main/java/com/caimei/modules/order/entity/NewShopOrder.java

@@ -50,6 +50,7 @@ public class NewShopOrder extends DataEntity<NewShopOrder> {
     private Double receiptAmount;       // 已付金额
     private Double restAmount;      // 待付金额
     private Integer shopReceiptStatus;      // 子订单收款状态:1待收款,2部分收款,3已收款
+    private String splitCode;   // 分账号
     private Double canRefundAmount;//   float comment '退款金额',
     private Double refundAmount;//   float,
     private Integer clubID;//  int(11),
@@ -1192,4 +1193,12 @@ public class NewShopOrder extends DataEntity<NewShopOrder> {
     public void setShopReceiptStatus(Integer shopReceiptStatus) {
         this.shopReceiptStatus = shopReceiptStatus;
     }
+
+    public String getSplitCode() {
+        return splitCode;
+    }
+
+    public void setSplitCode(String splitCode) {
+        this.splitCode = splitCode;
+    }
 }

+ 189 - 22
src/main/java/com/caimei/modules/order/service/NewOrderService.java

@@ -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;
@@ -138,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());
@@ -174,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());
@@ -201,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;
@@ -408,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());
@@ -425,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())) {
@@ -481,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 分组完成
@@ -503,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");
@@ -511,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());
@@ -555,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());
+                            }
                         }
                     }
                 }
@@ -1698,9 +1865,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 = "";
@@ -1795,13 +1962,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());

+ 12 - 7
src/main/java/com/caimei/modules/order/utils/OrderUtil.java

@@ -34,18 +34,18 @@ public class OrderUtil {
      *
      * @param order
      */
-    public static void orderSplit(NewOrder order) {
+    public static void orderSplit(NewOrder order,boolean payOnline) {
         int shopOrderNoIndex = 0;
         List<NewOrderProduct> orderProducts = order.getOrderProduct();
         // 促销
         List<CmPromotion> promotionsList = order.getPromotions();
         List<NewShopOrder> newShopOrders = new ArrayList<>();
-        Map<Integer, NewShopOrder> map = new HashMap<>();
+        Map<String, NewShopOrder> map = new HashMap<>();
         // 把订单中的商品根据供应商不同进行分组,生成子订单
         for (NewOrderProduct o : orderProducts) {
             //子订单存在了 追加orderProduct 到 shopOrder
-            if (map.containsKey(o.getShopID())) {
-                NewShopOrder shopOrder = map.get(o.getShopID());
+            if (map.containsKey(payOnline ? o.getSplitCode() + "-" + o.getShopID() : o.getShopID().toString())) {
+                NewShopOrder shopOrder = map.get(payOnline ? o.getSplitCode() + "-" + o.getShopID() : o.getShopID().toString());
                 shopOrder.getNewOrderProducts().add(o);
                 shopOrder.setItemCount(o.getNum() + shopOrder.getItemCount()); // 子订单下商品数量统计 购买数量
                 shopOrder.setPresentNum(o.getPresentNum() + shopOrder.getPresentNum());
@@ -98,6 +98,11 @@ public class OrderUtil {
                 shopOrder.setTotalAmount(o.getTotalFee());
                 shopOrder.setNeedPayAmount(o.getShouldPayFee());
                 shopOrder.setOutStoreNum(0);
+                shopOrder.setShopReceiptStatus("3".equals(order.getReceiptStatus()) ? 3 : 1);
+                shopOrder.setRealPay(0d);
+                shopOrder.setEachDiscount(0d);
+                shopOrder.setReceiptAmount(0d);
+                shopOrder.setSplitCode(o.getSplitCode());
                 // 计算超级会员优惠
                 if (null != o.getSvipPriceFlag() && 1 == o.getSvipPriceFlag()) {
                     BigDecimal productTotalReduction = MathUtil.mul(o.getSvipReduction(), o.getNum(), 2);
@@ -105,7 +110,7 @@ public class OrderUtil {
                 } else {
                     shopOrder.setSvipShopReduction(0d);
                 }
-                map.put(o.getShopID(), shopOrder);
+                map.put(payOnline ? o.getSplitCode() + "-" + o.getShopID() : o.getShopID().toString(), shopOrder);
                 newShopOrders.add(shopOrder); //在主订单中保存子订单的引用
             }
         }
@@ -116,7 +121,7 @@ public class OrderUtil {
     /**
      * 根据 orderProducts里面的orderProduct 信息重新统计 shopOrder
      */
-    public static void updateShopOrderInfo(NewShopOrder shopOrder, List<NewOrderProduct> orderProducts, List<CmPromotion> promotionsList) {
+    public static void updateShopOrderInfo(NewShopOrder shopOrder, List<NewOrderProduct> orderProducts, List<CmPromotion> promotionsList, boolean onlinePay) {
         if (orderProducts == null || orderProducts.size() == 0) return;
         int itemCount = 0; //商品数量统计 (不含赠品)
         double productAmount = 0D;// 商品总金额 = 总价
@@ -141,7 +146,7 @@ public class OrderUtil {
         double svipShopReduction = 0d;
         for (NewOrderProduct o : orderProducts) {
             // 没有折扣时促销才生效
-            if (o.getDiscount() == 100d) {
+            if (o.getDiscount() == 100d && onlinePay) {
                 for (CmPromotion promotion : promotionsList) {
                     if ("3".equals(promotion.getType())) {
                         shopOrder.setOrderPromotionsId(o.getOrderPromotionsId());

+ 1 - 0
src/main/java/com/caimei/modules/order/web/NewOrderController.java

@@ -380,6 +380,7 @@ public class NewOrderController extends BaseController {
                     if (ladderPriceFlag != null && !"".equals(ladderPriceFlag)) {
                         o.setLadderPriceFlag(Integer.valueOf(ladderPriceFlag));
                     }
+                    o.setSplitCode(productDao.getSplitCodeByProductId(o.getProductID())) ;
                     if ("0".equals(productType)) {
                         o.setPreferential((o.getPrice() - o.getDiscountPrice()) * o.getNum());//折扣
                         o.setDiscountFee(BigDecimal.valueOf(o.getTotalFee()).subtract(BigDecimal.valueOf(o.getShouldPayFee())).doubleValue());//经理折扣

+ 2 - 0
src/main/java/com/caimei/modules/product/dao/ProductDao.java

@@ -183,4 +183,6 @@ public interface ProductDao extends CrudDao<Product> {
     List<Shop> findSepcialShopList();
 
     void updateMainImage(Product product);
+
+    String getSplitCodeByProductId(Integer productID);
 }

+ 14 - 0
src/main/java/com/caimei/modules/product/service/ProductNewService.java

@@ -284,6 +284,7 @@ public class ProductNewService extends CrudService<ProductNewDao, Product> {
             Integer shopId = productNewDao.getShopIdByName("采美奥泰特殊供应商");
             if (null != shopId) {
                 product.setId(null);
+                product.setSplitCode("E1807085606");
                 product.setShopID(shopId);
                 // 置为冻结状态
                 product.setValidFlag("10");
@@ -317,4 +318,17 @@ public class ProductNewService extends CrudService<ProductNewDao, Product> {
             }
         });
     }
+
+    public void backHeheProducts() {
+        List<CmHeheProduct> heheProductList = cmHeheProductDao.findList(new CmHeheProduct());
+        heheProductList.forEach(heheProduct -> {
+            Product product = new Product();
+            product.setName(heheProduct.getName());
+            List<Product> list = productNewDao.findList(product);
+            Product preProduct = list.get(1);
+            // 将呵呵商品关联到新商品上
+            cmHeheProductDao.updateProductId(Integer.parseInt(heheProduct.getId()), preProduct.getProductID());
+        });
+
+    }
 }

+ 10 - 0
src/main/java/com/caimei/modules/product/web/ProductNewController.java

@@ -1087,5 +1087,15 @@ public class ProductNewController extends BaseController {
         productNewService.moveHeheProducts();
         return "success";
     }
+
+    /**
+     * 恢复呵呵商品原来对应的采美商品id
+     */
+    @RequestMapping("/hehe/back")
+    @ResponseBody
+    public String backHeheProducts(){
+        productNewService.backHeheProducts();
+        return "success";
+    }
 }
 

+ 5 - 0
src/main/resources/mappings/modules/order/OrderMapper.xml

@@ -750,6 +750,7 @@
                                         mode,
                                         touchPrice,
                                         reducedPrice,
+                                        discount,
                                         status,
                                         beginTime,
                                         endTime)
@@ -761,6 +762,7 @@
                 #{mode},
                 #{touchPrice},
                 #{reducedPrice},
+                #{discount},
                 #{status},
                 #{beginTime},
                 #{endTime})
@@ -956,6 +958,9 @@
         SET payStatus=3
         WHERE orderID = #{orderId}
     </update>
+    <update id="updateOnlinePayFlag">
+        update cm_order set onlinePayFlag = #{onlinePayFlag} where orderID = #{orderId}
+    </update>
 
     <delete id="deleteCouponOrderRecord">
         DELETE

+ 29 - 3
src/main/resources/mappings/modules/order/ShopOrderMapper.xml

@@ -23,6 +23,7 @@
 			a.finishTime AS finishTime,
 			a.refundStatus AS  refundStatus,
 			a.needPayAmount AS  needPayAmount,
+            a.splitCode,
             a.realPay AS realPay,
             a.eachDiscount AS eachDiscount,
             a.receiptAmount AS receiptAmount,
@@ -145,7 +146,12 @@
                                   orderPromotionsId,
                                   promotionFullReduction,
                                   zeroCostFlag,
-                                  svipShopReduction)
+                                  svipShopReduction,
+                                  realPay,
+                                  eachDiscount,
+                                  receiptStatus,
+                                  receiptAmount,
+                                  splitCode)
         VALUES (#{orderID},
                 #{shopOrderNo},
                 #{orderNo},
@@ -197,7 +203,12 @@
                 #{orderPromotionsId},
                 #{promotionFullReduction},
                 #{zeroCostFlag},
-                #{svipShopReduction})
+                #{svipShopReduction},
+                #{realPay},
+                #{eachDiscount},
+                #{shopReceiptStatus},
+                #{receiptAmount},
+                #{splitCode})
     </insert>
 
     <select id="findByShopOrderID" resultType="newShopOrder">
@@ -453,7 +464,22 @@
                 zeroCostFlag = #{zeroCostFlag},
             </if>
             <if test="svipShopReduction != null">
-                svipShopReduction = #{svipShopReduction}
+                svipShopReduction = #{svipShopReduction},
+            </if>
+            <if test="realPay != null">
+                realPay = #{realPay},
+            </if>
+            <if test="eachDiscount != null">
+                eachDiscount = #{eachDiscount},
+            </if>
+            <if test="receiptStatus != null">
+                receiptStatus = #{receiptStatus},
+            </if>
+            <if test="receiptAmount != null">
+                receiptAmount = #{receiptAmount},
+            </if>
+            <if test="splitCode != null">
+                splitCode = #{splitCode},
             </if>
         </set>
         <where>

+ 3 - 3
src/main/resources/mappings/modules/product/CmPromotionMapper.xml

@@ -124,7 +124,7 @@
                s.name             shopName,
                s.`shopID`         shopId,
                p.name             purchaseProductName,
-               p.`price1`         price,
+               p.`price`         price,
                p.`productID`      productId,
                p.productCode      productNo,
                p.mainImage        image
@@ -132,7 +132,7 @@
                p.costCheckFlag    costCheckFlag,
                p.costPrice        costPrice,
                p.costProportional costProportional,
-               p.price0    AS     normalPrice,
+               p.normalPrice    AS     normalPrice,
                cpg.number  AS     num,
                cp.discount as     discounts
         FROM cm_promotions cp
@@ -412,7 +412,7 @@
         limit 1
     </select>
     <select id="getPresentPriceById" resultType="java.lang.Double">
-        select price1
+        select price
         from product
         where productID = #{productId}
     </select>

+ 4 - 1
src/main/resources/mappings/modules/product/ProductMapper.xml

@@ -450,7 +450,7 @@
 					 #{onlineTime},
 					 #{downlineTime},
 					 #{freePostFlag},
-					 #{SqlCostPrice},
+					 #{costPrice},
 					 #{costProportional},
 					 #{costCheckFlag},
 					 #{precisehKey},
@@ -1890,4 +1890,7 @@
 	<select id="findSepcialShopList" resultType="com.caimei.po.Shop">
 		select name,shopId from shop where shopType=2
 	</select>
+    <select id="getSplitCodeByProductId" resultType="java.lang.String">
+		select splitCode from product where productID = #{productID}
+	</select>
 </mapper>

+ 3 - 1
src/main/webapp/static/modules/bulkpurchase/orderForm.js

@@ -144,6 +144,7 @@ $(function () {
         product_index = 0;
         var productList = [];
         $('.productTable tbody tr:not(.gift)').each(function (index, element) {
+            debugger
             var data = JSON.parse($(this).attr("data-value"));
             data.shopId = data.shopID ? data.shopID : data.shopId;
             data.productId = data.productID ? data.productID : data.productId;
@@ -156,7 +157,8 @@ $(function () {
                     mode: data.productPromotion.mode,
                     touchPrice: data.productPromotion.touchPrice,
                     reducedPrice: data.productPromotion.reducedPrice,
-                    status: data.productPromotion.status
+                    status: data.productPromotion.status,
+                    discount: data.productPromotion.discount
                 };
                 var tempProduct = {
                     shopId: data.shopId,