Quellcode durchsuchen

小亚通接口修改

wangxiaoming vor 5 Jahren
Ursprung
Commit
828c30cfc0

+ 158 - 0
watero-rst-service/src/main/java/com/iamberry/rst/service/order/OrderSyncLogServiceImpl.java

@@ -3,9 +3,13 @@ package com.iamberry.rst.service.order;
 import com.iamberry.app.tool.util.MD5;
 import com.iamberry.rst.core.cm.SalesOrder;
 import com.iamberry.rst.core.cm.SalesOrderItem;
+import com.iamberry.rst.core.dm.DealerChannel;
+import com.iamberry.rst.core.dm.DealerProduct;
 import com.iamberry.rst.core.order.*;
 import com.iamberry.rst.core.tools.LogisticsInfo;
 import com.iamberry.rst.faces.cm.SalesOrderService;
+import com.iamberry.rst.faces.dm.DealerChannelService;
+import com.iamberry.rst.faces.dm.DealerProductService;
 import com.iamberry.rst.faces.order.LogisticsInfoService;
 import com.iamberry.rst.faces.order.OrderBatchService;
 import com.iamberry.rst.faces.order.OrderSyncLogService;
@@ -57,6 +61,10 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
     private GenerateKeyUtil generateKeyUtil ;
     @Autowired
     private SalesOrderMapper salesOrderMapper ;
+    @Autowired
+    private DealerChannelService dealerChannelService;
+    @Autowired
+    private DealerProductService dealerProductService;
 
     //Map最大容量
     static int maxSize = 20;
@@ -867,6 +875,156 @@ public class OrderSyncLogServiceImpl implements OrderSyncLogService {
                         salesOrder.setSalesBatchId(batchId);
 
                         salesOrder.setSalesOrderItemList(salesOrderItemList);
+
+                        //处理客户信息-开始
+                        //因为 在一次导单中 下面循环里面会多次使用相同的条件查询产品供应价格list(smallDpList),所以使用list将他临时存储起来,
+                        List<Map<String,Object>> list = new ArrayList<>();
+
+                        DealerChannel dealerChannel = new DealerChannel();
+                        dealerChannel.setStoreId(salesOrder.getSalesStoreId());
+                        List<DealerChannel>  dealerChannelList = dealerChannelService.getDealerChannelList(dealerChannel);
+                        if(dealerChannelList!= null && dealerChannelList.size() > 0){
+                            dealerChannel = dealerChannelList.get(0);
+                        }else{
+                            throw new Exception("订单导入失败-查询店铺对应客户信息失败,店铺ID:"+salesOrder.getSalesStoreId()+"。");
+                        }
+
+                        List<DealerProduct> smallDpList = null;
+                        if(list.size() > 0){
+                            for (Map<String,Object> smap:list) {
+                                if(Objects.equals(dealerChannel.getDealerId(),smap.get("dealerId"))
+                                        && Objects.equals(dealerChannel.getDealChannelId(),smap.get("dealChannelId"))){
+                                    smallDpList = (List<DealerProduct>) smap.get("dpList");
+                                }
+                            }
+                        }
+                        if(smallDpList == null){
+                            DealerProduct smallDp = new DealerProduct();
+                            smallDp.setDealerId(dealerChannel.getDealerId());
+                            smallDp.setDealChannelId(dealerChannel.getDealChannelId());
+                            smallDpList = dealerProductService.getProductByChannelList(smallDp);
+
+                            Map<String,Object> smap = new HashMap<>();
+                            smap.put("dealerId",dealerChannel.getDealerId());
+                            smap.put("dealChannelId",dealerChannel.getDealChannelId());
+                            smap.put("dpList",smallDpList);
+                            list.add(smap);
+                        }
+
+                        //取出订单项价格不为零的订单项 -- 自营需要
+                        List<SalesOrderItem> noZeroSalesOrderItemList = new ArrayList<>();
+
+                        //查询店铺价格赋值在订单项中
+                        for (int p =0 ;p<salesOrder.getSalesOrderItemList().size(); p++ ){
+                            SalesOrderItem salesOrderItem = salesOrder.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{
+                                            newPrice = dp.getDealProdPrice();
+                                        }
+                                        isHaveColorId = true;
+                                    }
+                                }
+                                if(!isHaveColorId){
+                                    throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
+                                }
+                                salesOrderItem.setItemProductPrice(newPrice);
+                                salesOrderItem.setItemProductDiscount(newPrice);
+                                if(newPrice > 0){
+                                    noZeroSalesOrderItemList.add(salesOrderItem);
+                                }
+                            }else{
+                                throw new Exception("订单导入-未能从该客户中获取到对应产品的信息,客户名称:"+dealerChannel.getDealerName()+",---产品:"+ salesOrderItem.getItemProductName()+"("+ salesOrderItem.getItemProductColor() +")。");
+                            }
+                        }
+
+                        if(1 == dealerChannel.getDealerSelfOperated()) {
+                            //按照购买数量进行降序排序
+                            Collections.sort(noZeroSalesOrderItemList, new Comparator<SalesOrderItem>() {
+                                @Override
+                                public int compare(SalesOrderItem s1, SalesOrderItem s2) {
+                                    return s2.getItemNum().compareTo(s1.getItemNum());
+                                }
+
+                            });
+
+                            //计算订单总价(*数量) - 填写的客户价格计算的总价格
+                            Integer allPrice = 0;
+                            for (SalesOrderItem sdi : noZeroSalesOrderItemList) {
+                                for (DealerProduct dp : smallDpList) {
+                                    if (Objects.equals(dp.getColorId(), sdi.getItemColorId())) {
+                                        allPrice += sdi.getItemNum() * dp.getDealProdPrice();
+                                    }
+                                }
+                            }
+
+                            //1:自营
+                            Integer lastTotal = salesOrder.getSalesAmount();//自营使用 - 表示分配剩余总金额
+                            Integer total = salesOrder.getSalesAmount();//自营使用
+
+                            for (int f =0 ;f<noZeroSalesOrderItemList.size(); f++ ) {
+                                SalesOrderItem salesOrderItem = noZeroSalesOrderItemList.get(f);
+                                if ((f + 1) >= noZeroSalesOrderItemList.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;
+                                }
+                            }
+                        }else{
+                            //2:非自营
+                            Integer nonSelfEmployedAmount = 0; //非自营,需要加所有的订单项金额,最后赋值到订单价格
+                            for (int f =0 ;f<salesOrder.getSalesOrderItemList().size(); f++ ){
+                                SalesOrderItem salesOrderItem = salesOrder.getSalesOrderItemList().get(f);
+                                salesOrderItem.setItemTotal(salesOrderItem.getItemProductDiscount()*salesOrderItem.getItemNum());
+                                nonSelfEmployedAmount+=salesOrderItem.getItemTotal();
+                                if(f == salesOrder.getSalesOrderItemList().size()-1){
+                                    //非自营必须强行赋值
+                                    salesOrder.setSalesAmount(nonSelfEmployedAmount);
+                                    salesOrder.setSalesPayMoney(nonSelfEmployedAmount);
+                                }
+                            }
+                        }
+                        //处理客户信息-结束
+
                         String[] detectIds = {};
                         salesOrderService.addRstOrderinfo(salesOrder,new ArrayList<SalesOrder>(),detectIds);