Commit 278d3155 by huluobin

采购回调 参数调整 jackson设置

parent 43909d2a
...@@ -2,6 +2,7 @@ package com.bailuntec.ana.application.order; ...@@ -2,6 +2,7 @@ package com.bailuntec.ana.application.order;
import com.bailuntec.ana.domain.order.Order; import com.bailuntec.ana.domain.order.Order;
import com.bailuntec.ana.domain.order.OrderDetail; import com.bailuntec.ana.domain.order.OrderDetail;
import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List; import java.util.List;
...@@ -41,4 +42,14 @@ public interface IOrderDetailService extends IService<OrderDetail> { ...@@ -41,4 +42,14 @@ public interface IOrderDetailService extends IService<OrderDetail> {
* @param order 订单 * @param order 订单
*/ */
void setOrderDetail(Order order); void setOrderDetail(Order order);
/**
* <p>
* 聚合订单详情
* </p>
*
* @param purchaseOrderDetailList purchaseOrderDetailList
*/
void setPurchaseOrderDetailOrderDetail(List<PurchaseOrderDetail> purchaseOrderDetailList);
} }
...@@ -4,6 +4,7 @@ import com.bailuntec.ana.application.order.IOrderDetailService; ...@@ -4,6 +4,7 @@ import com.bailuntec.ana.application.order.IOrderDetailService;
import com.bailuntec.ana.application.order.IOrderSpecificationService; import com.bailuntec.ana.application.order.IOrderSpecificationService;
import com.bailuntec.ana.domain.order.Order; import com.bailuntec.ana.domain.order.Order;
import com.bailuntec.ana.domain.order.OrderDetail; import com.bailuntec.ana.domain.order.OrderDetail;
import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail;
import com.bailuntec.ana.infrastructure.common.util.ListUtil; import com.bailuntec.ana.infrastructure.common.util.ListUtil;
import com.bailuntec.ana.infrastructure.mapper.order.OrderDetailMapper; import com.bailuntec.ana.infrastructure.mapper.order.OrderDetailMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
...@@ -53,6 +54,23 @@ public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, Order ...@@ -53,6 +54,23 @@ public class OrderDetailServiceImpl extends ServiceImpl<OrderDetailMapper, Order
} }
} }
@Override
public void setPurchaseOrderDetailOrderDetail(List<PurchaseOrderDetail> purchaseOrderDetailList) {
List<String> orderDetailIdList = purchaseOrderDetailList.stream().map(PurchaseOrderDetail::getOrderDetailId).collect(Collectors.toList());
if (ListUtil.isNotEmpty(orderDetailIdList)) {
List<OrderDetail> orderDetailList = this.listByIds(orderDetailIdList);
orderSpecificationService.setOrderSpecification(orderDetailList);
Map<String, OrderDetail> orderDetailMap = orderDetailList.stream()
.collect(Collectors.toMap(OrderDetail::getOrderId, orderDetail -> orderDetail, (k1, k2) -> k1));
purchaseOrderDetailList.forEach(purchaseOrderDetail -> purchaseOrderDetail.setOrderDetail(orderDetailMap.get(purchaseOrderDetail.getOrderDetailId())));
}
}
@Override @Override
public void setOrderDetail(Order order) { public void setOrderDetail(Order order) {
List<OrderDetail> orderDetailList = baseMapper.selectByOrderId(order.getId()); List<OrderDetail> orderDetailList = baseMapper.selectByOrderId(order.getId());
......
package com.bailuntec.ana.application.purchase; package com.bailuntec.ana.application.purchase;
import com.bailuntec.ana.domain.purchase.PurchaseOrder;
import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail; import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
...@@ -13,4 +16,14 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +16,14 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IPurchaseOrderDetailService extends IService<PurchaseOrderDetail> { public interface IPurchaseOrderDetailService extends IService<PurchaseOrderDetail> {
/**
* <p>
* 设置采购订单详情
* </p>
*
* @param purchaseOrderList purchaseOrderList
*/
void setPurchaseOrderDetail(List<PurchaseOrder> purchaseOrderList);
} }
...@@ -5,6 +5,8 @@ import com.bailuntec.ana.vo.purchase.PmsCallBackResult; ...@@ -5,6 +5,8 @@ import com.bailuntec.ana.vo.purchase.PmsCallBackResult;
import com.bailuntec.ana.vo.purchase.PurchaseCallBackRequest; import com.bailuntec.ana.vo.purchase.PurchaseCallBackRequest;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 服务类 * 服务类
...@@ -23,4 +25,15 @@ public interface IPurchaseOrderService extends IService<PurchaseOrder> { ...@@ -23,4 +25,15 @@ public interface IPurchaseOrderService extends IService<PurchaseOrder> {
* @param request callback * @param request callback
*/ */
void callBackPurchaseOrder(PmsCallBackResult<PurchaseCallBackRequest> request); void callBackPurchaseOrder(PmsCallBackResult<PurchaseCallBackRequest> request);
/**
* <p>
* 查询平台订单对应的所有采购订单
* </p>
*
* @param orderId 平台订单
* @return 采购订单
*/
List<PurchaseOrder> listByOrderId(String orderId);
} }
package com.bailuntec.ana.application.purchase.impl; package com.bailuntec.ana.application.purchase.impl;
import com.bailuntec.ana.application.purchase.IPurchaseOrderDetailService;
import com.bailuntec.ana.domain.purchase.PurchaseOrder;
import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail; import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail;
import com.bailuntec.ana.infrastructure.common.util.ListUtil;
import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderDetailMapper; import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderDetailMapper;
import com.bailuntec.ana.application.purchase.IPurchaseOrderDetailService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
* 服务实现类 * 服务实现类
...@@ -17,4 +24,20 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +24,20 @@ import org.springframework.stereotype.Service;
@Service @Service
public class PurchaseOrderDetailServiceImpl extends ServiceImpl<PurchaseOrderDetailMapper, PurchaseOrderDetail> implements IPurchaseOrderDetailService { public class PurchaseOrderDetailServiceImpl extends ServiceImpl<PurchaseOrderDetailMapper, PurchaseOrderDetail> implements IPurchaseOrderDetailService {
@Override
public void setPurchaseOrderDetail(List<PurchaseOrder> purchaseOrderList) {
List<String> purchaseOrderIdList = purchaseOrderList.stream().map(PurchaseOrder::getId).collect(Collectors.toList());
if (ListUtil.isNotEmpty(purchaseOrderIdList)) {
List<PurchaseOrderDetail> purchaseOrderDetailList = baseMapper.selectList(new LambdaQueryWrapper<PurchaseOrderDetail>()
.in(PurchaseOrderDetail::getPurchaseOrderId, purchaseOrderIdList));
Map<String, List<PurchaseOrderDetail>> listMap = purchaseOrderDetailList.stream()
.collect(Collectors.groupingBy(PurchaseOrderDetail::getPurchaseOrderId));
purchaseOrderList.forEach(purchaseOrder -> {
purchaseOrder.setPurchaseOrderDetailList(listMap.get(purchaseOrder.getId()));
});
}
}
} }
package com.bailuntec.ana.application.purchase.impl; package com.bailuntec.ana.application.purchase.impl;
import com.bailuntec.ana.application.order.IOrderDetailService; import com.bailuntec.ana.application.order.IOrderDetailService;
import com.bailuntec.ana.application.order.IOrderService;
import com.bailuntec.ana.application.purchase.IPurchaseOrderDetailService;
import com.bailuntec.ana.application.purchase.IPurchaseOrderService; import com.bailuntec.ana.application.purchase.IPurchaseOrderService;
import com.bailuntec.ana.domain.order.Order;
import com.bailuntec.ana.domain.order.OrderDetail; import com.bailuntec.ana.domain.order.OrderDetail;
import com.bailuntec.ana.domain.purchase.PurchaseOrder; import com.bailuntec.ana.domain.purchase.PurchaseOrder;
import com.bailuntec.ana.domain.purchase.PurchaseOrderDetail;
import com.bailuntec.ana.domain.purchase.PurchaseTask; import com.bailuntec.ana.domain.purchase.PurchaseTask;
import com.bailuntec.ana.infrastructure.common.exception.BizRuntimeException;
import com.bailuntec.ana.infrastructure.common.exception.ErrorCode;
import com.bailuntec.ana.infrastructure.feign.OmsApi;
import com.bailuntec.ana.infrastructure.mapper.order.OrderDetailMapper; import com.bailuntec.ana.infrastructure.mapper.order.OrderDetailMapper;
import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderDetailMapper;
import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderMapper; import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderMapper;
import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseTaskDetailMapper; import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseTaskDetailMapper;
import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseTaskMapper; import com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseTaskMapper;
import com.bailuntec.ana.vo.order.Currency;
import com.bailuntec.ana.vo.order.resp.PublishOrderCallBackRequest;
import com.bailuntec.ana.vo.order.resp.PurchaseInfo;
import com.bailuntec.ana.vo.purchase.CallBackPurchaseOrderDetail;
import com.bailuntec.ana.vo.purchase.PmsCallBackResult; import com.bailuntec.ana.vo.purchase.PmsCallBackResult;
import com.bailuntec.ana.vo.purchase.PurchaseCallBackRequest; import com.bailuntec.ana.vo.purchase.PurchaseCallBackRequest;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
...@@ -36,33 +51,131 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P ...@@ -36,33 +51,131 @@ public class PurchaseOrderServiceImpl extends ServiceImpl<PurchaseOrderMapper, P
OrderDetailMapper orderDetailMapper; OrderDetailMapper orderDetailMapper;
@Resource @Resource
IOrderDetailService orderDetailService; IOrderDetailService orderDetailService;
@Resource
IOrderService orderService;
@Resource
OmsApi omsApi;
@Resource
PurchaseOrderDetailMapper purchaseOrderDetailMapper;
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void callBackPurchaseOrder(PmsCallBackResult<PurchaseCallBackRequest> request) { public void callBackPurchaseOrder(PmsCallBackResult<PurchaseCallBackRequest> request) {
String purchaseTaskId = request.getId(); String purchaseTaskId = request.getId();
//采购任务对应的订单详情列表
List<OrderDetail> orderDetailList = orderDetailMapper.selectByTaskId(purchaseTaskId); List<OrderDetail> orderDetailList = orderDetailMapper.selectByTaskId(purchaseTaskId);
PurchaseTask purchaseTask = purchaseTaskMapper.selectById(purchaseTaskId); PurchaseTask purchaseTask = purchaseTaskMapper.selectById(purchaseTaskId);
if (!request.getData().getSuccess()) { if (!request.getData().getSuccess()) {
//采购任务失败
purchaseTask.setStatus(PurchaseTask.STATUS_FAILED); purchaseTask.setStatus(PurchaseTask.STATUS_FAILED);
purchaseTask.setMessage(request.getData().getMessage()); purchaseTask.setMessage(request.getData().getMessage());
purchaseTaskMapper.updateById(purchaseTask); purchaseTaskMapper.updateById(purchaseTask);
//订单详情采购状态采购失败
orderDetailList.forEach(orderDetail -> { orderDetailList.forEach(orderDetail -> {
if (!orderDetail.getPurchaseStatus().equals(OrderDetail.PURCHASE_STATUS_PURCHASING)) {
throw new BizRuntimeException(ErrorCode.PU_10001);
}
orderDetail.setPurchaseStatus(OrderDetail.PURCHASE_STATUS_FAILED); orderDetail.setPurchaseStatus(OrderDetail.PURCHASE_STATUS_FAILED);
orderDetail.setPurchaseMessage(request.getData().getMessage()); orderDetail.setPurchaseMessage(request.getData().getMessage());
orderDetailMapper.updateById(orderDetail); orderDetailMapper.updateById(orderDetail);
}); });
} else { } else {
//采购成功
purchaseTask.setStatus(PurchaseTask.STATUS_SUCCESS); purchaseTask.setStatus(PurchaseTask.STATUS_SUCCESS);
purchaseTaskMapper.updateById(purchaseTask); purchaseTaskMapper.updateById(purchaseTask);
//订单详情采购状态采购成功
orderDetailList.forEach(orderDetail -> { orderDetailList.forEach(orderDetail -> {
if (!orderDetail.getPurchaseStatus().equals(OrderDetail.PURCHASE_STATUS_PURCHASING)) {
throw new BizRuntimeException(ErrorCode.PU_10001);
}
orderDetail.setPurchaseStatus(OrderDetail.PURCHASE_STATUS_SUCCESS);
orderDetailMapper.updateById(orderDetail);
});
//生成采购订单
request.getData().getProducts().forEach((purchaseOrderNo, callBackPurchaseOrderDetailList) -> {
BigDecimal totalPrice = callBackPurchaseOrderDetailList.stream().map(CallBackPurchaseOrderDetail::getPrice).map(Currency::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalTax = callBackPurchaseOrderDetailList.stream().map(CallBackPurchaseOrderDetail::getTax).map(Currency::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal totalShip = callBackPurchaseOrderDetailList.stream().map(CallBackPurchaseOrderDetail::getShip).map(Currency::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
PurchaseOrder purchaseOrder = new PurchaseOrder();
purchaseOrder.setOrderNo(purchaseOrderNo);
purchaseOrder.setPurchaseTaskId(purchaseTaskId);
purchaseOrder.setTotalTax(new Currency(totalTax));
purchaseOrder.setTotalPrice(new Currency(totalPrice));
purchaseOrder.setTotalShipCost(new Currency(totalShip));
purchaseOrder.setOrderId(purchaseTask.getOrderId());
baseMapper.insert(purchaseOrder);
//采购订单详情
callBackPurchaseOrderDetailList.forEach(callBackPurchaseOrderDetail -> {
OrderDetail orderDetail = orderDetailList.stream().filter(item -> item.getPurchaseAsin().equals(callBackPurchaseOrderDetail.getAsin())
&& item.getPurchaseSkuNo().equals(callBackPurchaseOrderDetail.getSku()))
.findAny()
.orElseThrow(() -> new BizRuntimeException(ErrorCode.PU_10002));
PurchaseOrderDetail purchaseOrderDetail = new PurchaseOrderDetail();
purchaseOrderDetail.setAsin(callBackPurchaseOrderDetail.getAsin());
purchaseOrderDetail.setMerchantId(callBackPurchaseOrderDetail.getMerchant_id());
purchaseOrderDetail.setPurchaseOrderId(purchaseOrder.getId());
purchaseOrderDetail.setPrice(callBackPurchaseOrderDetail.getPrice());
purchaseOrderDetail.setTax(callBackPurchaseOrderDetail.getTax());
purchaseOrderDetail.setShipCost(callBackPurchaseOrderDetail.getShip());
purchaseOrderDetail.setSku(callBackPurchaseOrderDetail.getSku());
purchaseOrderDetail.setOrderDetailId(orderDetail.getId());
purchaseOrderDetailMapper.insert(purchaseOrderDetail);
orderDetail.setPurchaseStatus(OrderDetail.PURCHASE_STATUS_SUCCESS); orderDetail.setPurchaseStatus(OrderDetail.PURCHASE_STATUS_SUCCESS);
orderDetailMapper.updateById(orderDetail); orderDetailMapper.updateById(orderDetail);
}); });
//todo 回调oms });
Order order = orderService.queryDetail(purchaseTask.getOrderId());
boolean isPartialPurchase = order.getOrderDetailList().stream().anyMatch(orderDetail -> !orderDetail.getPurchaseStatus().equals(OrderDetail.PURCHASE_STATUS_SUCCESS));
order.setPurchaseStatus(isPartialPurchase ? PublishOrderCallBackRequest.PURCHASE_STATUS_PARTIAL_PURCHASE : Order.PURCHASE_STATUS_SUCCESS);
orderService.updateById(order);
//回调oms系统
PublishOrderCallBackRequest callBackRequest = new PublishOrderCallBackRequest();
callBackRequest.setStatus(isPartialPurchase ? PublishOrderCallBackRequest.PURCHASE_STATUS_PARTIAL_PURCHASE : PublishOrderCallBackRequest.PURCHASE_STATUS_SUCCESS);
callBackRequest.setPdsAccountId(order.getPdsAccountId());
List<PurchaseOrder> purchaseOrderList = this.listByOrderId(order.getId());
callBackRequest.setPurchaseInfos(purchaseOrderList.stream().map(purchaseOrder -> {
PurchaseInfo purchaseInfo = new PurchaseInfo();
purchaseInfo.setPurchaseOrderNo(purchaseOrder.getOrderNo());
purchaseInfo.setTax(purchaseOrder.getTotalTax());
purchaseInfo.setShippingCost(purchaseOrder.getTotalShipCost());
purchaseInfo.setPlatSkus(purchaseOrder.getPurchaseOrderDetailList().stream().map(purchaseOrderDetail -> purchaseOrderDetail.getOrderDetail()
.getSkuNo()).collect(Collectors.toList()));
return purchaseInfo;
})
.collect(Collectors.toList()));
omsApi.updateOrderStatusForAna(callBackRequest);
}
} }
@Resource
IPurchaseOrderDetailService purchaseOrderDetailService;
@Override
public List<PurchaseOrder> listByOrderId(String orderId) {
List<PurchaseOrder> purchaseOrderList = baseMapper.selectByOrderId(orderId);
purchaseOrderDetailService.setPurchaseOrderDetail(purchaseOrderList);
return purchaseOrderList;
} }
} }
...@@ -80,7 +80,7 @@ public class OrderDetail extends BaseModel { ...@@ -80,7 +80,7 @@ public class OrderDetail extends BaseModel {
@Valid @Valid
@NotNull(groups = OrderValidGroup.Purchase.class, message = "采购成本还未从刊登系统同步完成") @NotNull(groups = OrderValidGroup.Purchase.class, message = "采购成本还未从刊登系统同步完成")
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
@ApiModelProperty(value = "采购成本") @ApiModelProperty(value = "采购预计成本")
private Currency costPrice; private Currency costPrice;
@NotNull(groups = OrderValidGroup.Purchase.class, message = "成本容忍范围为空") @NotNull(groups = OrderValidGroup.Purchase.class, message = "成本容忍范围为空")
......
package com.bailuntec.ana.domain.purchase; package com.bailuntec.ana.domain.purchase;
import com.bailuntec.ana.infrastructure.common.base.BaseModel; import com.bailuntec.ana.infrastructure.common.base.BaseModel;
import com.bailuntec.ana.vo.order.Currency;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/** /**
* <p> * <p>
* *
...@@ -19,7 +22,7 @@ import lombok.EqualsAndHashCode; ...@@ -19,7 +22,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value="PurchaseOrder对象", description="") @ApiModel(value = "PurchaseOrder对象", description = "")
public class PurchaseOrder extends BaseModel { public class PurchaseOrder extends BaseModel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -30,11 +33,20 @@ public class PurchaseOrder extends BaseModel { ...@@ -30,11 +33,20 @@ public class PurchaseOrder extends BaseModel {
@ApiModelProperty(value = "采购订单号") @ApiModelProperty(value = "采购订单号")
private String orderNo; private String orderNo;
@ApiModelProperty(value = "税") @ApiModelProperty(value = "采购单加权平均税")
private String tax; private Currency totalTax;
@ApiModelProperty(value = "采购单加权平均邮费")
private Currency totalShipCost;
private Currency totalPrice;
@ApiModelProperty(value = "采购任务id") @ApiModelProperty(value = "采购任务id")
private String purchaseTaskId; private String purchaseTaskId;
@ApiModelProperty(value = "平台订单id")
private String orderId;
@TableField(exist = false)
private List<PurchaseOrderDetail> purchaseOrderDetailList;
} }
package com.bailuntec.ana.domain.purchase; package com.bailuntec.ana.domain.purchase;
import com.bailuntec.ana.domain.order.OrderDetail;
import com.bailuntec.ana.infrastructure.common.base.BaseModel; import com.bailuntec.ana.infrastructure.common.base.BaseModel;
import com.bailuntec.ana.vo.order.Currency;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.Version; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -19,7 +21,7 @@ import lombok.EqualsAndHashCode; ...@@ -19,7 +21,7 @@ import lombok.EqualsAndHashCode;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ApiModel(value="PurchaseOrderDetail对象", description="") @ApiModel(value = "PurchaseOrderDetail对象", description = "")
public class PurchaseOrderDetail extends BaseModel { public class PurchaseOrderDetail extends BaseModel {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -31,17 +33,29 @@ public class PurchaseOrderDetail extends BaseModel { ...@@ -31,17 +33,29 @@ public class PurchaseOrderDetail extends BaseModel {
@ApiModelProperty(value = "采购订单平台skuId") @ApiModelProperty(value = "采购订单平台skuId")
private String purchaseOrderId; private String purchaseOrderId;
@ApiModelProperty(value = "平台订单详情id")
private String orderDetailId;
@ApiModelProperty(value = "采购skuNo") @ApiModelProperty(value = "采购skuNo")
private String sku; private String sku;
@ApiModelProperty(value = "采购listing页面爬虫需要的id 亚马逊是skuId、ebay是spuId") @ApiModelProperty(value = "采购listing页面爬虫需要的id 亚马逊是skuId、ebay是spuId")
private String asin; private String asin;
@ApiModelProperty(value = "实际成本(单价 * 数量 + 加权平均邮费)采购系统回调") @ApiModelProperty(value = "实际成本(单价 * 数量)采购系统回调")
private String price; private Currency price;
@ApiModelProperty(value = "加权平均邮费")
private Currency shipCost;
@ApiModelProperty(value = "加权平均税")
private Currency tax;
@ApiModelProperty(value = "卖家ID 采购系统回调回传") @ApiModelProperty(value = "卖家ID 采购系统回调回传")
private String merchantId; private String merchantId;
@TableField(exist = false)
private OrderDetail orderDetail;
} }
...@@ -10,7 +10,7 @@ import lombok.EqualsAndHashCode; ...@@ -10,7 +10,7 @@ import lombok.EqualsAndHashCode;
/** /**
* <p> * <p>
* * 采购任务
* </p> * </p>
* *
* @author robbendev * @author robbendev
......
package com.bailuntec.ana.infrastructure.common.base; package com.bailuntec.ana.infrastructure.common.base;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
...@@ -11,6 +12,7 @@ import lombok.Data; ...@@ -11,6 +12,7 @@ import lombok.Data;
* @author robbendev * @author robbendev
* @since 2020/7/7 9:33 上午 * @since 2020/7/7 9:33 上午
*/ */
@JsonInclude()
@Data @Data
@AllArgsConstructor @AllArgsConstructor
public class BaseResult<T> { public class BaseResult<T> {
......
...@@ -12,9 +12,14 @@ public enum ErrorCode { ...@@ -12,9 +12,14 @@ public enum ErrorCode {
OR_00001("OR_00001", "订单采购状态异常"), OR_00001("OR_00001", "订单采购状态异常"),
OR_00002("OR_00002", "无法获取刊登帐号id"), OR_00002("OR_00002", "无法获取刊登帐号id"),
OR_10003("OR_10003", "找不到对应订单"),
PU_10001("PU_10001", "订单详情采购状态异常"),
PU_10002("PU_10002", "回调订单详情采购sku不存在"),
; ;
private String code; private String code;
private String message; private String message;
......
...@@ -109,6 +109,7 @@ public class GlobalExceptionHandler { ...@@ -109,6 +109,7 @@ public class GlobalExceptionHandler {
result.setCode("500"); result.setCode("500");
result.setMessage(ex.getMessage()); result.setMessage(ex.getMessage());
result.setData("");
RequestBakRequestWrapper bakRequestWrapper = (RequestBakRequestWrapper) request; RequestBakRequestWrapper bakRequestWrapper = (RequestBakRequestWrapper) request;
......
...@@ -3,6 +3,8 @@ package com.bailuntec.ana.infrastructure.mapper.purchase; ...@@ -3,6 +3,8 @@ package com.bailuntec.ana.infrastructure.mapper.purchase;
import com.bailuntec.ana.domain.purchase.PurchaseOrder; import com.bailuntec.ana.domain.purchase.PurchaseOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/** /**
* <p> * <p>
* Mapper 接口 * Mapper 接口
...@@ -13,4 +15,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -13,4 +15,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface PurchaseOrderMapper extends BaseMapper<PurchaseOrder> { public interface PurchaseOrderMapper extends BaseMapper<PurchaseOrder> {
/**
* <p>
* 根据平台订单id查询采购订单
* </p>
*
* @param orderId 平台订单id
* @return 采购订单
*/
List<PurchaseOrder> selectByOrderId(String orderId);
} }
...@@ -26,7 +26,7 @@ public class Schedule { ...@@ -26,7 +26,7 @@ public class Schedule {
* 从pams同步订单里面的刊登帐号信息 * 从pams同步订单里面的刊登帐号信息
* </p> * </p>
*/ */
@Scheduled(cron = "*/5 * * * * ?") @Scheduled(cron = "*/30 * * * * ?")
public void syncOrderPdsAccount() { public void syncOrderPdsAccount() {
List<Order> orderList = orderService.queryUnSyncPdsAccountOrder(); List<Order> orderList = orderService.queryUnSyncPdsAccountOrder();
...@@ -47,7 +47,7 @@ public class Schedule { ...@@ -47,7 +47,7 @@ public class Schedule {
* 从刊登系统同步订单详情销售sku对应的采购item,采购sku,成本 * 从刊登系统同步订单详情销售sku对应的采购item,采购sku,成本
* </p> * </p>
*/ */
@Scheduled(cron = "*/5 * * * * ?") @Scheduled(cron = "*/30 * * * * ?")
public void syncOrderDetails() { public void syncOrderDetails() {
List<Order> orderList = orderService.queryUnSyncDetailsOrder(); List<Order> orderList = orderService.queryUnSyncDetailsOrder();
if (ListUtil.isNotEmpty(orderList)) { if (ListUtil.isNotEmpty(orderList)) {
......
...@@ -5,12 +5,15 @@ import com.bailuntec.ana.application.order.IOrderService; ...@@ -5,12 +5,15 @@ import com.bailuntec.ana.application.order.IOrderService;
import com.bailuntec.ana.application.purchase.IPurchaseTaskService; import com.bailuntec.ana.application.purchase.IPurchaseTaskService;
import com.bailuntec.ana.domain.order.Order; import com.bailuntec.ana.domain.order.Order;
import com.bailuntec.ana.infrastructure.common.base.BaseResult; import com.bailuntec.ana.infrastructure.common.base.BaseResult;
import com.bailuntec.ana.infrastructure.common.exception.BizRuntimeException;
import com.bailuntec.ana.infrastructure.common.exception.ErrorCode;
import com.bailuntec.ana.infrastructure.common.util.lock.OrderIdLock; import com.bailuntec.ana.infrastructure.common.util.lock.OrderIdLock;
import com.bailuntec.ana.vo.order.req.OrderQueryPageRequest; import com.bailuntec.ana.vo.order.req.OrderQueryPageRequest;
import com.bailuntec.ana.vo.order.req.RefundOrderRequest; import com.bailuntec.ana.vo.order.req.RefundOrderRequest;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -36,7 +39,11 @@ public class OrderController { ...@@ -36,7 +39,11 @@ public class OrderController {
@ApiOperation("oms推送订单") @ApiOperation("oms推送订单")
@PostMapping("/publishOrder") @PostMapping("/publishOrder")
public BaseResult<Void> publishOrder(@RequestBody @Validated(value = OrderValidGroup.PublishOrder.class) Order order) { public BaseResult<Void> publishOrder(@RequestBody @Validated(value = OrderValidGroup.PublishOrder.class) Order order) {
try {
orderService.publishOrder(order); orderService.publishOrder(order);
} catch (DuplicateKeyException ex) {
throw new BizRuntimeException(ErrorCode.OR_10003);
}
return BaseResult.success(); return BaseResult.success();
} }
......
...@@ -3,9 +3,7 @@ package com.bailuntec.ana.vo.order; ...@@ -3,9 +3,7 @@ package com.bailuntec.ana.vo.order;
import com.bailuntec.ana.interfaces.order.OrderValidGroup; import com.bailuntec.ana.interfaces.order.OrderValidGroup;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.DecimalMin; import javax.validation.constraints.DecimalMin;
...@@ -19,8 +17,7 @@ import java.math.BigDecimal; ...@@ -19,8 +17,7 @@ import java.math.BigDecimal;
* @author robbendev * @author robbendev
* @since 2020-07-31 * @since 2020-07-31
*/ */
@AllArgsConstructor
@NoArgsConstructor
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
@ApiModel(value = "Currency对象", description = "") @ApiModel(value = "Currency对象", description = "")
...@@ -40,4 +37,28 @@ public class Currency { ...@@ -40,4 +37,28 @@ public class Currency {
public static final Currency TEST = new Currency(BigDecimal.ONE, BigDecimal.ONE, "CNY"); public static final Currency TEST = new Currency(BigDecimal.ONE, BigDecimal.ONE, "CNY");
/**
* <p>
* 默认货币构造器:CNY
* </p>
*
* @param amount 金额
*/
public Currency(BigDecimal amount) {
exchangeRate = BigDecimal.ONE;
amount = amount;
currencyCode = "CNY";
}
public Currency() {
}
public Currency(BigDecimal exchangeRate, BigDecimal amount, String currencyCode) {
this.exchangeRate = exchangeRate;
this.amount = amount;
this.currencyCode = currencyCode;
}
} }
package com.bailuntec.ana.vo.order.resp; package com.bailuntec.ana.vo.order.resp;
import com.bailuntec.ana.vo.order.Currency;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -18,6 +17,15 @@ import java.util.List; ...@@ -18,6 +17,15 @@ import java.util.List;
@Data @Data
public class PublishOrderCallBackRequest { public class PublishOrderCallBackRequest {
//部分采购
public static final Integer PURCHASE_STATUS_PARTIAL_PURCHASE = 0;
//全部已采购
public static final Integer PURCHASE_STATUS_SUCCESS = 1;
//部分发货
public static final Integer DELIVERY_STATUS_PARTIAL_DELIVERY = 2;
//全部已发货
public static final Integer DELIVERY_STATUS_SUCCESS = 3;
@JsonProperty("OriginalOrderNo") @JsonProperty("OriginalOrderNo")
@ApiModelProperty("平台单号") @ApiModelProperty("平台单号")
private String originalOrderNo; private String originalOrderNo;
...@@ -26,15 +34,11 @@ public class PublishOrderCallBackRequest { ...@@ -26,15 +34,11 @@ public class PublishOrderCallBackRequest {
@ApiModelProperty("平台帐号id") @ApiModelProperty("平台帐号id")
private String pdsAccountId; private String pdsAccountId;
@ApiModelProperty("状态 0-已下单 1-已发货") @JsonProperty("Status")
@ApiModelProperty("状态 状态 0:部分下单,1:完全下单,2:部分发货,3:完全发货,这个有改动了,注意一下")
private Integer status; private Integer status;
@ApiModelProperty("物流跟踪号") @JsonProperty("PurchaseInfos")
private List<String> trackingNos; @ApiModelProperty("采购信息")
private List<PurchaseInfo> purchaseInfos;
@ApiModelProperty("总实际采购成本")
private Currency totalPrice;
@ApiModelProperty("税")
private Currency tax;
} }
package com.bailuntec.ana.vo.order.resp;
import com.bailuntec.ana.vo.order.Currency;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author robbendev
* @since 2020/8/5 1:34 下午
*/
@Data
public class PurchaseInfo {
@JsonProperty("PurchaseOrderNo")
@ApiModelProperty("采购单号")
private String purchaseOrderNo;
@JsonProperty("TrackingNo")
@ApiModelProperty("采购单号")
private String trackingNo;
@JsonProperty("Provider")
@ApiModelProperty("物流商")
private String provider;
@JsonProperty("PlatSkus")
@ApiModelProperty("对应的oms平台sku")
private List<String> platSkus;
@JsonProperty("TotalPrice")
@ApiModelProperty("订单总价(不含税")
private Currency totalPrice;
@JsonProperty("Tax")
@ApiModelProperty("税额")
private Currency tax;
@JsonProperty("ShippingCost")
@ApiModelProperty("运费")
private Currency shippingCost;
}
package com.bailuntec.ana.vo.purchase; package com.bailuntec.ana.vo.purchase;
import com.bailuntec.ana.vo.order.Currency;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
...@@ -14,7 +15,7 @@ import java.math.BigDecimal; ...@@ -14,7 +15,7 @@ import java.math.BigDecimal;
* @since 2020/7/31 4:32 下午 * @since 2020/7/31 4:32 下午
*/ */
@Data @Data
public class CallBackPurchaseOrder { public class CallBackPurchaseOrderDetail {
@ApiModelProperty("商品asin") @ApiModelProperty("商品asin")
private String asin; private String asin;
...@@ -23,7 +24,13 @@ public class CallBackPurchaseOrder { ...@@ -23,7 +24,13 @@ public class CallBackPurchaseOrder {
private String sku; private String sku;
@ApiModelProperty("实际成本(单价 * 数量 + 加权平均邮费)") @ApiModelProperty("实际成本(单价 * 数量 + 加权平均邮费)")
private BigDecimal price; private Currency price;
@ApiModelProperty("加权平均税费")
private Currency tax;
@ApiModelProperty("加权平均邮费")
private Currency ship;
private String merchant_id; private String merchant_id;
......
package com.bailuntec.ana.vo.purchase; package com.bailuntec.ana.vo.purchase;
import com.bailuntec.ana.vo.order.Currency;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -25,8 +25,8 @@ public class PurchaseCallBackRequest { ...@@ -25,8 +25,8 @@ public class PurchaseCallBackRequest {
private String message; private String message;
@ApiModelProperty("税") @ApiModelProperty("税")
private BigDecimal tax; private Currency tax;
@ApiModelProperty("回调订单 key-订单号 value-订单详情") @ApiModelProperty("回调订单 key-订单号 value-订单详情")
private Map<String, List<CallBackPurchaseOrder>> products; private Map<String, List<CallBackPurchaseOrderDetail>> products;
} }
...@@ -2,4 +2,9 @@ ...@@ -2,4 +2,9 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderMapper"> <mapper namespace="com.bailuntec.ana.infrastructure.mapper.purchase.PurchaseOrderMapper">
<select id="selectByOrderId" resultType="com.bailuntec.ana.domain.purchase.PurchaseOrder">
select *
from purchase_order
where order_id = #{orderId}
</select>
</mapper> </mapper>
package com.bailuntec.ana.infrastructure.feign; package com.bailuntec.ana.infrastructure.feign;
import com.bailuntec.ana.infrastructure.common.util.JsonUtilByFsJson; import com.bailuntec.ana.infrastructure.common.util.JsonUtilByFsJson;
import com.bailuntec.ana.vo.order.Currency;
import com.bailuntec.ana.vo.order.resp.OmsBaseResult; import com.bailuntec.ana.vo.order.resp.OmsBaseResult;
import com.bailuntec.ana.vo.order.resp.PublishOrderCallBackRequest; import com.bailuntec.ana.vo.order.resp.PublishOrderCallBackRequest;
import com.google.common.collect.Lists;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal;
/** /**
* <p> * <p>
...@@ -34,9 +31,9 @@ public class OmsApiTest { ...@@ -34,9 +31,9 @@ public class OmsApiTest {
request.setOriginalOrderNo("OR000001"); request.setOriginalOrderNo("OR000001");
request.setPdsAccountId("pds0001"); request.setPdsAccountId("pds0001");
request.setStatus(1); request.setStatus(1);
request.setTax(new Currency(BigDecimal.ONE, new BigDecimal("1.0001"), "CNY")); // request.setTax(new Currency(BigDecimal.ONE, new BigDecimal("1.0001"), "CNY"));
request.setTotalPrice(new Currency(BigDecimal.ONE, new BigDecimal("100.0001"), "CNY")); // request.setTotalPrice(new Currency(BigDecimal.ONE, new BigDecimal("100.0001"), "CNY"));
request.setTrackingNos(Lists.newArrayList("TRA00001", "TRA00002")); // request.setTrackingNos(Lists.newArrayList("TRA00001", "TRA00002"));
OmsBaseResult<Void> result = omsApi.updateOrderStatusForAna(request); OmsBaseResult<Void> result = omsApi.updateOrderStatusForAna(request);
System.out.println(JsonUtilByFsJson.beanToJson(result)); System.out.println(JsonUtilByFsJson.beanToJson(result));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment