|
@@ -22,6 +22,7 @@ import com.fs.store.service.IFsStoreOrderService;
|
|
|
import com.fs.store.service.IFsStoreProductService;
|
|
|
import com.fs.store.vo.FsStoreOrderItemVO;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringEscapeUtils;
|
|
|
import org.apache.http.util.Asserts;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -31,6 +32,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.HashMap;
|
|
|
|
|
@@ -64,7 +66,7 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
// 订单id
|
|
|
erpWdtTrade.setTid(order.getPlatform_code());
|
|
|
// 平台状态
|
|
|
- erpWdtTrade.setTradeStatus(TradeStatus.SHIPPED.getValue());
|
|
|
+ erpWdtTrade.setTradeStatus(TradeStatus.PAID_WAITING_FOR_SHIPMENT.getValue());
|
|
|
// 支付状态
|
|
|
erpWdtTrade.setPayStatus(PaymentStatus.FULLY_PAID.getValue());
|
|
|
// 发货条件
|
|
@@ -97,8 +99,11 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
erpWdtTrade.setSellerMemo(order.getSeller_memo());
|
|
|
// erpWdtTrade.setWarehouseNo(order.getWarehouse_code());
|
|
|
erpWdtTrade.setWarehouseNo("beiliyou2-test");
|
|
|
+
|
|
|
// 已付金额
|
|
|
FsStoreOrder fsStoreOrder = fsStoreOrderService.selectFsStoreOrderByOrderCode(order.getPlatform_code());
|
|
|
+ // 运费金额
|
|
|
+ erpWdtTrade.setPostAmount(fsStoreOrder.getFreightPrice());
|
|
|
if(ObjectUtils.isNotNull(fsStoreOrder)){
|
|
|
erpWdtTrade.setPaid(fsStoreOrder.getPayMoney());
|
|
|
}
|
|
@@ -106,10 +111,15 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
List<FsStoreOrderItemVO> fsStoreOrderItemVOS = fsStoreOrderItemService.selectFsStoreOrderItemListByOrderId(fsStoreOrder.getId());
|
|
|
List<ErpWdtOrder> erpWdtOrderList = new ArrayList<>();
|
|
|
|
|
|
+
|
|
|
+ // 优惠券金额
|
|
|
+ BigDecimal couponPrice = fsStoreOrder.getCouponPrice();
|
|
|
+ // 商品总价
|
|
|
+ BigDecimal totalPrice = fsStoreOrder.getTotalPrice();
|
|
|
for (FsStoreOrderItemVO fsStoreOrderItem : fsStoreOrderItemVOS) {
|
|
|
ErpWdtOrder erpWdtOrder = new ErpWdtOrder();
|
|
|
//平台订单货品表主键
|
|
|
- erpWdtOrder.setOid(String.valueOf(fsStoreOrderItem.getItemId()));
|
|
|
+ erpWdtOrder.setOid(String.format("%s%s",fsStoreOrderItem.getOrderCode(),fsStoreOrderItem.getItemId()));
|
|
|
erpWdtOrder.setNum(BigDecimal.valueOf(fsStoreOrderItem.getNum()));
|
|
|
FsStoreProduct fsStoreProduct = fsStoreProductService.selectFsStoreProductById(fsStoreOrderItem.getProductId());
|
|
|
Asserts.check(ObjectUtils.isNotNull(fsStoreProduct),"该产品不存在! 产品id: {} ",fsStoreOrderItem.getProductId());
|
|
@@ -123,7 +133,8 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
erpWdtOrder.setGoodsId(String.valueOf(fsStoreProduct.getProductId()));
|
|
|
JSONObject jsonObject = JSONObject.parseObject(fsStoreOrderItem.getJsonInfo());
|
|
|
erpWdtOrder.setSpecId(jsonObject.getString("sku"));
|
|
|
- erpWdtOrder.setGoodsNo(jsonObject.getString("sku"));
|
|
|
+ erpWdtOrder.setGoodsNo("WDTPOS");
|
|
|
+ erpWdtOrder.setSpecNo("BLACK007");
|
|
|
// 货品名称
|
|
|
erpWdtOrder.setGoodsName(fsStoreProduct.getProductName());
|
|
|
// 调整
|
|
@@ -131,12 +142,26 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
// 优惠
|
|
|
erpWdtOrder.setDiscount(BigDecimal.ZERO);
|
|
|
// 分摊优惠
|
|
|
- erpWdtOrder.setShareDiscount(BigDecimal.ZERO);
|
|
|
+ // 分摊比例
|
|
|
+ BigDecimal divide = fsStoreProduct.getPrice().divide(totalPrice, RoundingMode.HALF_UP);
|
|
|
+ erpWdtOrder.setShareDiscount(divide.multiply(couponPrice));
|
|
|
+
|
|
|
erpWdtOrderList.add(erpWdtOrder);
|
|
|
}
|
|
|
|
|
|
+ // 最后一个商品的分摊优惠等于总优惠减去前面分摊优惠之和
|
|
|
+ Asserts.check(CollectionUtils.isNotEmpty(erpWdtOrderList),"订单 {} 商品不能为空!",order.getPlatform_code());
|
|
|
+ long size = erpWdtOrderList.size();
|
|
|
+ if(size > 1) {
|
|
|
+ ErpWdtOrder erpWdtOrder = erpWdtOrderList.get(erpWdtOrderList.size() - 1);
|
|
|
+ erpWdtOrder.setShareDiscount(couponPrice.subtract(erpWdtOrderList.stream()
|
|
|
+ .limit(size - 1L)
|
|
|
+ .map(item -> Optional.ofNullable(item.getShareDiscount()).orElse(BigDecimal.ZERO))
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add)));
|
|
|
+ }
|
|
|
+
|
|
|
erpWdtTrade.setOrderList(erpWdtOrderList);
|
|
|
- erpWdtBusinessRequestParams.setTradeList(Arrays.asList(erpWdtTrade));
|
|
|
+ erpWdtBusinessRequestParams.setTradeList(new ArrayList<>(Arrays.asList(erpWdtTrade)));
|
|
|
|
|
|
Map<String,String> map = new HashMap<>();
|
|
|
map.put("shop_no",erpWdtBusinessRequestParams.getShopNo());
|
|
@@ -175,9 +200,9 @@ public class WdtErpOrderServiceImpl implements IErpOrderService {
|
|
|
public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
|
|
|
WdtClient client = WdtClient.getInstance();
|
|
|
Map<String,String> map = new HashMap<>();
|
|
|
- map.put("tid",param.getCode());
|
|
|
+ map.put("src_tid",param.getCode());
|
|
|
try {
|
|
|
- String execute = client.execute("sales_api_trade_query.php", map);
|
|
|
+ String execute = client.execute("sales_trade_query.php", map);
|
|
|
ParserConfig config = new ParserConfig();
|
|
|
config.propertyNamingStrategy = PropertyNamingStrategy.CamelCase;
|
|
|
ErpWdtTradeQueryResponse tradeQueryResponseDTO = JSON.parseObject(execute, ErpWdtTradeQueryResponse.class);
|