Ver código fonte

Merge branch 'master' of http://git.iamberry.com/hexiugang/iamberry-common-parent

# Conflicts:
#	watero-rst-core/src/main/java/com.iamberry.rst.core/tools/KuaiDi100.java
wangxiaoming 5 anos atrás
pai
commit
46b408603f

+ 1 - 1
watero-rst-service/src/main/java/com/iamberry/rst/service/cm/SalesOrderServiceImpl.java

@@ -1987,7 +1987,7 @@ public class SalesOrderServiceImpl implements SalesOrderService {
             salesPayMoney += soi.getItemTotal();
         }
 
-        if(salesOrder != null && salesPayMoney!=0){
+        if(salesOrder != null){
             salesOrder.setSalesAmount(salesAmount);
             salesOrder.setSalesPayMoney(salesPayMoney);
         }

+ 148 - 108
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AdminOrderController.java

@@ -1064,122 +1064,162 @@ public class AdminOrderController {
             try{
                 DealerChannel dealerChannel = new DealerChannel();
                 boolean flag = true;
-                if(salesOrders.getSalesStoreId() != null){
-                    dealerChannel.setStoreId(salesOrders.getSalesStoreId());
-                    List<DealerChannel>  dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
-                    if(dealerChannelList!= null && dealerChannelList.size() > 0){
-                        dealerChannel = dealerChannelList.get(0);
+                if(salesOrders.getSalesStoreId() == null){
+                    salesOrders.setSalesDealCode("1");
+                    throw new Exception("订单导入-获取店铺ID失败,店铺ID:"+salesOrders.getSalesStoreId()+"。");
+                }
+
+                dealerChannel.setStoreId(salesOrders.getSalesStoreId());
+                List<DealerChannel>  dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+                if(dealerChannelList!= null && dealerChannelList.size() > 0){
+                    dealerChannel = dealerChannelList.get(0);
+                }else{
+                    salesOrders.setSalesDealCode("1");
+                    throw new Exception("订单导入失败-查询店铺对应客户信息失败,店铺ID:"+salesOrders.getSalesStoreId()+"。");
+                }
+
+                DealerProduct smallDp = new DealerProduct();
+                smallDp.setDealerId(dealerChannel.getDealerId());
+                smallDp.setDealChannelId(dealerChannel.getDealChannelId());
+                List<DealerProduct> smallDpList = dealerProductService.getProductByChannelList(smallDp);
+
+                //取出订单项价格不为零的订单项 -- 自营需要
+                List<SalesOrderItem> salesOrderItemList = new ArrayList<>();
+
+                //查询店铺价格赋值在订单项中
+                for (int p =0 ;p<salesOrders.getSalesOrderItemList().size(); p++ ){
+                    SalesOrderItem salesOrderItem = salesOrders.getSalesOrderItemList().get(p);
+                    //获取当前该产品对应客户的价格
+                    Integer newPrice=0;
+                    if(smallDpList != null && smallDpList.size() > 0){
+                        boolean isHaveColorId = false;
+                        for (DealerProduct dp:smallDpList) {
+                            if(Objects.equals(dp.getColorId(), salesOrderItem.getItemColorId())){
+                                if(1 == dp.getDealProdStoreArea()){
+                                    // 1:全部店铺
+                                    newPrice = dp.getDealProdPrice();
+                                }else{
+                                    // 2:部分店铺
+                                    //for (DealerProductStore dps:dp.getDealerProductStoreList()) {
+                                    //if(salesOrders.getSalesStoreId().equals(dps.getStoreId())){
+                                    //   newPrice = dp.getDealProdPrice();
+                                    //}
+                                    //}
+                                    newPrice = dp.getDealProdPrice();
+                                }
+                                isHaveColorId = true;
+                            }
+                        }
+                        if(!isHaveColorId){
+                            salesOrders.setSalesDealCode("1");
+                            throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
+                        }
+                        salesOrderItem.setItemProductPrice(newPrice);
+                        salesOrderItem.setItemProductDiscount(newPrice);
+                        if(newPrice > 0){
+                            salesOrderItemList.add(salesOrderItem);
+                        }
                     }else{
                         salesOrders.setSalesDealCode("1");
-                        throw new Exception("订单导入失败-查询店铺对应客户信息失败,店铺ID:"+salesOrders.getSalesStoreId()+"。");
+                        throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
+                    }
+                }
+
+                if(1 == dealerChannel.getDealerSelfOperated()) {
+                    //按照购买数量进行降序排序
+                    Collections.sort(salesOrderItemList, new Comparator<SalesOrderItem>() {
+                        @Override
+                        public int compare(SalesOrderItem s1, SalesOrderItem s2) {
+                            /**
+                             * 升序排的话就是第一个参数.compareTo(第二个参数);
+                             * 降序排的话就是第二个参数.compareTo(第一个参数);
+                             */
+                            return s2.getItemNum().compareTo(s1.getItemNum());
+                        }
+
+                    });
+
+                    //计算订单总价(*数量) - 填写的客户价格计算的总价格
+                    Integer allPrice = 0;
+                    for (SalesOrderItem sdi : salesOrderItemList) {
+                        for (DealerProduct dp : smallDpList) {
+                            if (Objects.equals(dp.getColorId(), sdi.getItemColorId())) {
+                                allPrice += sdi.getItemNum() * dp.getDealProdPrice();
+                            }
+                        }
                     }
 
-                    DealerProduct smallDp = new DealerProduct();
-                    smallDp.setDealerId(dealerChannel.getDealerId());
-                    smallDp.setDealChannelId(dealerChannel.getDealChannelId());
-                    List<DealerProduct> smallDpList = dealerProductService.getProductByChannelList(smallDp);
-
-                     //表示分配剩余总金额
-                     Integer lastTotal = salesOrders.getSalesAmount();
-                     Integer total = salesOrders.getSalesAmount();
-                     for (int p =0 ;p<salesOrders.getSalesOrderItemList().size(); p++ ){
-                         SalesOrderItem salesOrderItem = salesOrders.getSalesOrderItemList().get(p);
-
-                         //获取当前该产品对应客户的价格
-                         Integer newPrice=0;
-                         if(smallDpList != null && smallDpList.size() > 0){
-                             boolean isHaveColorId = false;
-                             for (DealerProduct dp:smallDpList) {
-                                 if(Objects.equals(dp.getColorId(), salesOrderItem.getItemColorId())){
-                                     if(1 == dp.getDealProdStoreArea()){
-                                         // 1:全部店铺
-                                         newPrice = dp.getDealProdPrice();
-                                     }else{
-                                         // 2:部分店铺
-                                         //for (DealerProductStore dps:dp.getDealerProductStoreList()) {
-                                         //if(salesOrders.getSalesStoreId().equals(dps.getStoreId())){
-                                         //   newPrice = dp.getDealProdPrice();
-                                         //}
-                                         //}
-                                         newPrice = dp.getDealProdPrice();
-                                     }
-                                     isHaveColorId = true;
-                                 }
-                             }
-                             if(!isHaveColorId){
-                                 salesOrders.setSalesDealCode("1");
-                                 throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
-                             }
-                         }else{
-                             salesOrders.setSalesDealCode("1");
-                             throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
-                         }
-
-                         if(flag){
-                             if(1 == dealerChannel.getDealerSelfOperated()){
-                                 //是否自营 1:自营
-
-                                 if((p+1) >= salesOrders.getSalesOrderItemList().size() ) {
-                                     //最后一个赋值剩余值,防止出现少一分的情况
-                                     salesOrderItem.setItemTotal(lastTotal);
-                                 }else{
-                                     //计算订单总价(*数量)  因为上面判断了单个,所以订单项最低也会有一个,不可能为0
-                                     Integer allPrice = 0;
-                                     for ( SalesOrderItem sdi : salesOrders.getSalesOrderItemList()){
-                                         for (DealerProduct dp:smallDpList) {
-                                            if(Objects.equals(dp.getColorId(),sdi.getItemColorId())){
-                                                allPrice += sdi.getItemNum()*dp.getDealProdPrice();
-                                            }
-                                         }
-                                     }
-
-                                     //当前产品总价
-                                     Integer aoncePrice = newPrice*salesOrderItem.getItemNum();
-
-                                     //计算比例
-                                     Double priceRate = Double.valueOf(aoncePrice) / Double.valueOf(allPrice);
-
-                                     //当前订单项按照比例得出的实际总价
-                                     Double itemTotalByDouble = total * priceRate;
-                                     Integer itemTotal = itemTotalByDouble.intValue();
-                                     salesOrderItem.setItemTotal(itemTotal);
-                                     //减去当前订单项的金额
-                                     lastTotal -= itemTotal;
-                                 }
-                             }else{
-                                 //2:非自营
-                                 salesOrderItem.setItemProductDiscount(newPrice);
-                                 salesOrderItem.setItemProductPrice(newPrice);
-                                 salesOrderItem.setItemTotal(newPrice*salesOrderItem.getItemNum());
-                             }
-                         }
-                     }
-                     }else{
-                         salesOrders.setSalesDealCode("1");
-                         throw new Exception("订单导入-获取店铺ID失败,店铺ID:"+salesOrders.getSalesStoreId()+"。");
-                     }
-
-                    //计算订单总金额
-                    //Integer itemProductPrice=0;   //产品市场价
-                    //Integer itemProductDiscount=0; //产品折扣价
-                    for (SalesOrderItem salesOrderItem:salesOrders.getSalesOrderItemList()) {
-                        salesOrderItem.setItemProductPrice(0);
-                        salesOrderItem.setItemProductDiscount(0);
+                    //1:自营
+                    Integer lastTotal = salesOrders.getSalesAmount();//自营使用 - 表示分配剩余总金额
+                    Integer total = salesOrders.getSalesAmount();//自营使用
+
+                    for (int f =0 ;f<salesOrderItemList.size(); f++ ) {
+                        SalesOrderItem salesOrderItem = salesOrderItemList.get(f);
+                        if ((f + 1) >= salesOrderItemList.size()) {
+                            //最后一个赋值剩余值,防止出现少一分的情况
+                            salesOrderItem.setItemTotal(lastTotal);
+
+                            Double itemLastTotal = lastTotal.doubleValue();
+                            Double itemPrice = itemLastTotal/salesOrderItem.getItemNum();
+                            salesOrderItem.setItemProductDiscount(itemPrice.intValue());
+                            salesOrderItem.setItemProductPrice(itemPrice.intValue());
+                        } else {
+                            //当前产品总价
+                            Integer aoncePrice = salesOrderItem.getItemProductDiscount() * salesOrderItem.getItemNum();
+
+                            //计算比例
+                            Double priceRate = Double.valueOf(aoncePrice) / Double.valueOf(allPrice);
+
+                            //当前订单项按照比例得出的实际总价
+                            Double itemTotalByDouble = total * priceRate;
+                            itemTotalByDouble = Math.floor(itemTotalByDouble);//去掉小数
+
+                            //尽量保证订单项能够除尽
+                            Integer itemNum = salesOrderItem.getItemNum();
+                            while (salesOrderItem.getItemNum()>1 && itemTotalByDouble%salesOrderItem.getItemNum() > 0
+                                    && itemNum >=0){
+                                itemTotalByDouble ++;
+                                itemNum--;
+                            }
+
+                            Integer itemTotal = itemTotalByDouble.intValue();
+                            salesOrderItem.setItemTotal(itemTotal);
+
+                            Double itemPrice = itemTotalByDouble/salesOrderItem.getItemNum();
+                            salesOrderItem.setItemProductDiscount(itemPrice.intValue());
+                            salesOrderItem.setItemProductPrice(itemPrice.intValue());
+
+                            //减去当前订单项的金额
+                            lastTotal -= itemTotal;
+                        }
                     }
-                    salesOrders.setSalesPayMoney(salesOrders.getSalesAmount());
-                    bl = salesOrderService.addRstOrderinfo(salesOrders,new ArrayList<SalesOrder>(),null);
-                }catch (Exception e){
-                    e.printStackTrace();
-                    logger.info("插入订单失败;错误信息" + e.getMessage());
-                    for(EfastOrder efastOrderStyle:orderEfasts){
-                        if(salesDealCode.equals(efastOrderStyle.getPlatformOrderId())){
-                            efastOrderStyle.setStyleColor("color:red;");
-                            String msg = efastOrderStyle.getReturnMsg()==null?"":efastOrderStyle.getReturnMsg();
-                            efastOrderStyle.setReturnMsg(msg +"-"+e.getMessage());
+                }else{
+                    //2:非自营
+                    Integer nonSelfEmployedAmount = 0; //非自营,需要加所有的订单项金额,最后赋值到订单价格
+                    for (int f =0 ;f<salesOrders.getSalesOrderItemList().size(); f++ ){
+                        SalesOrderItem salesOrderItem = salesOrders.getSalesOrderItemList().get(f);
+                        salesOrderItem.setItemTotal(salesOrderItem.getItemProductDiscount()*salesOrderItem.getItemNum());
+                        nonSelfEmployedAmount+=salesOrderItem.getItemTotal();
+                        if(f == salesOrders.getSalesOrderItemList().size()-1){
+                            //非自营必须强行赋值
+                            salesOrders.setSalesAmount(nonSelfEmployedAmount);
+                            salesOrders.setSalesPayMoney(nonSelfEmployedAmount);
                         }
                     }
-                    newFaultNum ++;
                 }
+                bl = salesOrderService.addRstOrderinfo(salesOrders,new ArrayList<SalesOrder>(),null);
+            }catch (Exception e){
+                e.printStackTrace();
+                logger.info("插入订单失败;错误信息" + e.getMessage());
+                for(EfastOrder efastOrderStyle:orderEfasts){
+                    if(salesDealCode.equals(efastOrderStyle.getPlatformOrderId())){
+                        efastOrderStyle.setStyleColor("color:red;");
+                        String msg = efastOrderStyle.getReturnMsg()==null?"":efastOrderStyle.getReturnMsg();
+                        efastOrderStyle.setReturnMsg(msg +"-"+e.getMessage());
+                    }
+                }
+                newFaultNum ++;
+            }
          }
 
         String webPath = request.getSession().getServletContext().getRealPath("/");

+ 13 - 11
watero-rst-web/src/main/webapp/common/js/salesOrder/salesOrder.js

@@ -134,18 +134,20 @@ $(function(){
                     return false;
                 }
             }
-            var salesAmountTest = cufteInt($("#salesAmountTest").val());
+
+            //不花里胡哨,就一个价格,其他的不操作
+            // var salesAmountTest = cufteInt($("#salesAmountTest").val());
             var salesPayMoneyTest = cufteInt($("#salesPayMoneyTest").val());
-            var salesDiscountMoneyTest = cufteInt($("#salesDiscountMoneyTest").val());
-            var salesWaitMoneyTest = cufteInt($("#salesWaitMoneyTest").val());
-            var salesLastMoneyTest = cufteInt($("#salesLastMoneyTest").val());
-            var salesShippingFeeTest = cufteInt($("#salesShippingFeeTest").val());
-            $("#salesAmount").val(accMul(salesAmountTest,100));
+            //var salesDiscountMoneyTest = cufteInt($("#salesDiscountMoneyTest").val());
+            //var salesWaitMoneyTest = cufteInt($("#salesWaitMoneyTest").val());
+            //var salesLastMoneyTest = cufteInt($("#salesLastMoneyTest").val());
+            //var salesShippingFeeTest = cufteInt($("#salesShippingFeeTest").val());
+            $("#salesAmount").val(accMul(salesPayMoneyTest,100));
             $("#salesPayMoney").val(accMul(salesPayMoneyTest,100));
-            $("#salesDiscountMoney").val(accMul(salesDiscountMoneyTest,100));
-            $("#salesWaitMoney").val(accMul(salesWaitMoneyTest,100));
-            $("#salesLastMoney").val(accMul(salesLastMoneyTest,100));
-            $("#salesShippingFee").val(accMul(salesShippingFeeTest,100));
+            $("#salesDiscountMoney").val(0);
+            $("#salesWaitMoney").val(0);
+            $("#salesLastMoney").val(0);
+            $("#salesShippingFee").val(0);
 
             $("#orderItemString").val(JSON.stringify(orderItemArray));
             //判断客服人员没有更改默认的店铺,系统需要提示客服人员按需选择
@@ -491,7 +493,7 @@ function calculatePrice(){
         var newColorPrice = accMul(colorPrice,itemNum);
         colorPriceAll = accAdd(colorPriceAll,newColorPrice);
     });
-    $("#salesAmountTest").val(colorPriceAll);
+    $("#salesAmountTest").val(colorDiscountAll);
     $("#salesPayMoneyTest").val(colorDiscountAll);
     $("#salesDiscountMoneyTest").val(accSub(colorPriceAll,colorDiscountAll));
     $("#salesLastMoneyTest").val(colorDiscountAll);