|
@@ -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("/");
|