|
@@ -44,6 +44,7 @@ import com.yami.shop.service.OrderItemService;
|
|
|
import com.yami.shop.service.OrderRefundService;
|
|
|
import com.yami.shop.service.OrderService;
|
|
|
import com.yami.shop.service.OrderSettlementService;
|
|
|
+import com.yami.shop.service.hb.IHBOrderService;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
@@ -87,6 +88,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
private Snowflake snowflake;
|
|
|
|
|
|
|
|
|
+ private final IHBOrderService hbOrderService;
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
public Order getOrderByOrderNumber(String orderNumber) {
|
|
|
return orderMapper.getOrderByOrderNumber(orderNumber);
|
|
@@ -106,7 +110,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
public OrderPayParam getPayUserCountByshopId(Long shopId, Date startTime, Date endTime) {
|
|
|
OrderPayParam nowOrderPay = orderMapper.getOrderCountByShopId(shopId, startTime, endTime);
|
|
|
StatisticsRefundParam refundParam = orderRefundMapper.getRefundByShopId(shopId, startTime, endTime);
|
|
|
- Double onePrice = (nowOrderPay.getPayUserCount() == 0) ? 0 : (Arith.div(nowOrderPay.getPayActualTotal(), nowOrderPay.getPayUserCount(),2));
|
|
|
+ Double onePrice = (nowOrderPay.getPayUserCount() == 0) ? 0 : (Arith.div(nowOrderPay.getPayActualTotal(), nowOrderPay.getPayUserCount(), 2));
|
|
|
if (nowOrderPay.getPayActualTotal() == null) {
|
|
|
nowOrderPay.setPayActualTotal(0.00);
|
|
|
}
|
|
@@ -135,10 +139,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
OrderPayParam param = new OrderPayParam();
|
|
|
for (int i = 0; i < 24; i++) {
|
|
|
if (payMap.get(i) != null) {
|
|
|
- sum = Arith.add(sum,payMap.get(i));
|
|
|
+ sum = Arith.add(sum, payMap.get(i));
|
|
|
}
|
|
|
if (yesterdayPayMap.get(i) != null) {
|
|
|
- yesterdaySum = Arith.add(yesterdaySum,yesterdayPayMap.get(i));
|
|
|
+ yesterdaySum = Arith.add(yesterdaySum, yesterdayPayMap.get(i));
|
|
|
}
|
|
|
payYesterdayActualTotal.add(Arith.round(yesterdaySum, 2));
|
|
|
nowActualTotal.add(Arith.round(sum, 2));
|
|
@@ -157,9 +161,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
Double sum = 0.00;
|
|
|
for (OrderPayParam orderPayParam : actualTotal) {
|
|
|
DateTime time = DateTime.of(orderPayParam.getDates(), "yyyy-MM-dd");
|
|
|
- if(DateUtil.compare(time,dateTime) > 0){
|
|
|
- sum = Arith.add(sum,orderPayParam.getPayActualTotal());
|
|
|
- orderPayParam.setOnePrice(Arith.round(sum,2));
|
|
|
+ if (DateUtil.compare(time, dateTime) > 0) {
|
|
|
+ sum = Arith.add(sum, orderPayParam.getPayActualTotal());
|
|
|
+ orderPayParam.setOnePrice(Arith.round(sum, 2));
|
|
|
}
|
|
|
actualTotalByDay.add(orderPayParam);
|
|
|
}
|
|
@@ -194,16 +198,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public List<Order> submit(String userId, ShopCartOrderMergerDto mergerOrder) {
|
|
|
List<Order> orderList = new ArrayList<>();
|
|
|
-
|
|
|
// 提交订单
|
|
|
eventPublisher.publishEvent(new SubmitOrderEvent(mergerOrder, orderList));
|
|
|
// 插入订单
|
|
|
- orderList.forEach(order -> orderMapper.insert(order));
|
|
|
+ orderList.forEach(orderMapper::insert);
|
|
|
List<OrderItem> orderItems = orderList.stream()
|
|
|
.flatMap(order -> order.getOrderItems().stream()
|
|
|
)
|
|
@@ -214,9 +216,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if (mergerOrder.getIsScorePay() != null && mergerOrder.getIsScorePay() == 1) {
|
|
|
eventPublisher.publishEvent(new SubmitScoreOrderEvent(mergerOrder, orderList));
|
|
|
}
|
|
|
+ for (Order order : orderList) {
|
|
|
+ //推送海博订单
|
|
|
+ if (!order.getNextPay()) {
|
|
|
+ hbOrderService.createOrderAsync(order.getOrderNumber());
|
|
|
+ }
|
|
|
+ }
|
|
|
return orderList;
|
|
|
}
|
|
|
- public static void main(String[] args) throws Exception{
|
|
|
+
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
String json = "{'buyPrice':10,'buyOrder':1}";
|
|
|
ObjectMapper om = new ObjectMapper();
|
|
|
// 允许单引号(非标准)
|
|
@@ -346,7 +355,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
.eq(Order::getOrderId, order.getOrderId())
|
|
|
.eq(Order::getOrderNumber, order.getOrderNumber())
|
|
|
);
|
|
|
- if (!Objects.equals(orderDb.getStatus(), OrderStatus.UNPAY.value())){
|
|
|
+ if (!Objects.equals(orderDb.getStatus(), OrderStatus.UNPAY.value())) {
|
|
|
throw new GlobalException("订单状态异常,无法更改订单金额");
|
|
|
}
|
|
|
//减少金额
|
|
@@ -355,45 +364,45 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
double platformAmount = 0.00;
|
|
|
Map<Long, OrderItem> collect = order.getOrderItems().stream().collect(Collectors.toMap(OrderItem::getOrderItemId, orderItem -> orderItem));
|
|
|
List<OrderItem> orderItemList = orderItemService.list(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, order.getOrderNumber()));
|
|
|
- for (OrderItem orderItemDb:orderItemList){
|
|
|
+ for (OrderItem orderItemDb : orderItemList) {
|
|
|
OrderItem orderItem = collect.get(orderItemDb.getOrderItemId());
|
|
|
- if (orderItem.getChageAmount() >= orderItemDb.getActualTotal() || orderItem.getChageAmount() < 0){
|
|
|
+ if (orderItem.getChageAmount() >= orderItemDb.getActualTotal() || orderItem.getChageAmount() < 0) {
|
|
|
throw new GlobalException("订单金额必须大于0,或者数据发生变化(请刷新后重试)");
|
|
|
}
|
|
|
- if (Objects.isNull(orderItem.getChageAmount()) || Objects.equals(orderItem.getChageAmount(),0.00)){
|
|
|
+ if (Objects.isNull(orderItem.getChageAmount()) || Objects.equals(orderItem.getChageAmount(), 0.00)) {
|
|
|
continue;
|
|
|
}
|
|
|
//修改平台优惠金额
|
|
|
double playformItemAmount = 0.00;
|
|
|
- if (orderItemDb.getPlatformShareReduce() > 0){
|
|
|
+ if (orderItemDb.getPlatformShareReduce() > 0) {
|
|
|
//金额减少比例 = 减少金额 % 总金额
|
|
|
- double proportion = Arith.div(orderItem.getChageAmount(),orderItemDb.getProductTotalAmount(),6);
|
|
|
+ double proportion = Arith.div(orderItem.getChageAmount(), orderItemDb.getProductTotalAmount(), 6);
|
|
|
//平台优惠金额减少金额 = 减少比例 * 原平台优惠金额
|
|
|
- playformItemAmount = Arith.round(Arith.mul(proportion,orderItemDb.getPlatformShareReduce()),2);
|
|
|
+ playformItemAmount = Arith.round(Arith.mul(proportion, orderItemDb.getPlatformShareReduce()), 2);
|
|
|
//平台优惠金额 = 原平台优惠金额 - 对应比例的金额
|
|
|
- orderItemDb.setPlatformShareReduce(Arith.sub(orderItemDb.getPlatformShareReduce(),playformItemAmount));
|
|
|
+ orderItemDb.setPlatformShareReduce(Arith.sub(orderItemDb.getPlatformShareReduce(), playformItemAmount));
|
|
|
}
|
|
|
//实际金额 = 原实际金额 - 变化金额
|
|
|
- orderItemDb.setActualTotal(Arith.sub(orderItemDb.getActualTotal(),orderItem.getChageAmount()));
|
|
|
+ orderItemDb.setActualTotal(Arith.sub(orderItemDb.getActualTotal(), orderItem.getChageAmount()));
|
|
|
//总优惠金额 = 变化金额 + 原总优惠金额
|
|
|
- orderItemDb.setShareReduce(Arith.add(orderItem.getChageAmount(),orderItemDb.getShareReduce()));
|
|
|
+ orderItemDb.setShareReduce(Arith.add(orderItem.getChageAmount(), orderItemDb.getShareReduce()));
|
|
|
|
|
|
- amount = Arith.add(amount,orderItem.getChageAmount());
|
|
|
- platformAmount = Arith.add(platformAmount,playformItemAmount);
|
|
|
+ amount = Arith.add(amount, orderItem.getChageAmount());
|
|
|
+ platformAmount = Arith.add(platformAmount, playformItemAmount);
|
|
|
}
|
|
|
orderItemService.updateBatchById(orderItemList);
|
|
|
OrderSettlement orderSettlement = orderSettlementService.getOne(new LambdaQueryWrapper<OrderSettlement>().eq(OrderSettlement::getOrderNumber, order.getOrderNumber()));
|
|
|
//修改订单信息
|
|
|
- orderDb.setActualTotal(Arith.sub(orderDb.getActualTotal(),amount));
|
|
|
- orderDb.setReduceAmount(Arith.add(orderDb.getReduceAmount(),amount));
|
|
|
- orderDb.setPlatformAmount(Arith.sub(orderDb.getPlatformAmount(),platformAmount));
|
|
|
+ orderDb.setActualTotal(Arith.sub(orderDb.getActualTotal(), amount));
|
|
|
+ orderDb.setReduceAmount(Arith.add(orderDb.getReduceAmount(), amount));
|
|
|
+ orderDb.setPlatformAmount(Arith.sub(orderDb.getPlatformAmount(), platformAmount));
|
|
|
//初始化
|
|
|
amount = 0.00;
|
|
|
// 计算运费变化金额
|
|
|
- if(!Objects.equals(orderDb.getFreightAmount(),order.getFreightAmount())){
|
|
|
- amount = Arith.add(amount,Arith.sub(order.getFreightAmount(),orderDb.getFreightAmount()));
|
|
|
+ if (!Objects.equals(orderDb.getFreightAmount(), order.getFreightAmount())) {
|
|
|
+ amount = Arith.add(amount, Arith.sub(order.getFreightAmount(), orderDb.getFreightAmount()));
|
|
|
}
|
|
|
- orderDb.setActualTotal(Arith.add(orderDb.getActualTotal(),amount));
|
|
|
+ orderDb.setActualTotal(Arith.add(orderDb.getActualTotal(), amount));
|
|
|
orderSettlement.setPayAmount(orderDb.getActualTotal());
|
|
|
orderSettlementService.updateById(orderSettlement);
|
|
|
//修改运费信息
|
|
@@ -436,7 +445,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
mergeIfNeed(writer, firstRow, lastRow, ++col, col, addr.getReceiver());
|
|
|
// "手机"
|
|
|
mergeIfNeed(writer, firstRow, lastRow, ++col, col, addr.getMobile());
|
|
|
- addrInfo=(StringUtils.isEmpty(addr.getAddress())?"":addr.getAddress())+(StringUtils.isEmpty(addr.getAddressName())?"":addr.getAddressName())+(StringUtils.isEmpty(addr.getAddrDetail())?"":addr.getAddrDetail());
|
|
|
+ addrInfo = (StringUtils.isEmpty(addr.getAddress()) ? "" : addr.getAddress()) + (StringUtils.isEmpty(addr.getAddressName()) ? "" : addr.getAddressName()) + (StringUtils.isEmpty(addr.getAddrDetail()) ? "" : addr.getAddrDetail());
|
|
|
// "收货地址"
|
|
|
mergeIfNeed(writer, firstRow, lastRow, ++col, col, addrInfo);
|
|
|
int prodNameCol = ++col;
|
|
@@ -455,15 +464,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
// 订单实付
|
|
|
mergeIfNeed(writer, firstRow, lastRow, ++col, col, dbOrder.getActualTotal());
|
|
|
//订单状态
|
|
|
- String[] statusValue = {"","待付款","待发货","待收货","待评价","成功","失败","待成团",""};
|
|
|
+ String[] statusValue = {"", "待付款", "待发货", "待收货", "待评价", "成功", "失败", "待成团", ""};
|
|
|
String status = statusValue[dbOrder.getStatus()];
|
|
|
|
|
|
String refundStatus = "";
|
|
|
- String[] refundStatusValue = {"","申请退款","退款成功","退款成功","退款失败"};
|
|
|
+ String[] refundStatusValue = {"", "申请退款", "退款成功", "退款成功", "退款失败"};
|
|
|
mergeIfNeed(writer, firstRow, lastRow, ++col, col, status);
|
|
|
- if (!Objects.isNull(dbOrder.getRefundStatus())){
|
|
|
+ if (!Objects.isNull(dbOrder.getRefundStatus())) {
|
|
|
refundStatus = refundStatusValue[dbOrder.getRefundStatus()];
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
refundStatus = "暂无售后";
|
|
|
}
|
|
|
mergeIfNeed(writer, firstRow, lastRow, ++col, col, refundStatus);
|
|
@@ -478,24 +487,24 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
|
|
|
@Override
|
|
|
public Order getOrderDetailByOrderNumberAndShopId(String orderNumber, Long shopId) {
|
|
|
- return orderMapper.getOrderDetailByOrderNumberAndShopId(orderNumber,shopId);
|
|
|
+ return orderMapper.getOrderDetailByOrderNumberAndShopId(orderNumber, shopId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public Map<Long, Integer> getOrderItemMap(Long orderId) {
|
|
|
List<OrderRefund> orderRefunds = orderRefundMapper.selectList(new LambdaQueryWrapper<OrderRefund>()
|
|
|
.eq(OrderRefund::getOrderId, orderId)
|
|
|
- .lt(OrderRefund::getReturnMoneySts,6)
|
|
|
- .gt(OrderRefund::getReturnMoneySts,0)
|
|
|
+ .lt(OrderRefund::getReturnMoneySts, 6)
|
|
|
+ .gt(OrderRefund::getReturnMoneySts, 0)
|
|
|
);
|
|
|
Map<Long, Integer> map = Maps.newHashMap();
|
|
|
|
|
|
- for (OrderRefund orderRefund:orderRefunds){
|
|
|
- if (orderRefund.getRefundType() == 1){
|
|
|
- map.put(0L,orderRefund.getReturnMoneySts());
|
|
|
+ for (OrderRefund orderRefund : orderRefunds) {
|
|
|
+ if (orderRefund.getRefundType() == 1) {
|
|
|
+ map.put(0L, orderRefund.getReturnMoneySts());
|
|
|
return map;
|
|
|
}
|
|
|
- map.put(orderRefund.getOrderItemId(),orderRefund.getReturnMoneySts());
|
|
|
+ map.put(orderRefund.getOrderItemId(), orderRefund.getReturnMoneySts());
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
@@ -513,7 +522,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
// String userId = SecurityUtils.getUser().getUserId();
|
|
|
// 获取订单信息
|
|
|
// Order order = orderService.getOrderByOrderNumberAndUserId(orderRefundParam.getOrderNumber(), userId, true);
|
|
|
- Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber,orderRefundParam.getOrderNumber()));
|
|
|
+ Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, orderRefundParam.getOrderNumber()));
|
|
|
if (!Objects.equals(order.getIsPayed(), 1)) {
|
|
|
throw new GlobalException("当前订单还未付款,无法取消");
|
|
|
}
|
|
@@ -542,8 +551,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
|
|
|
//待收货 -> 整单退款 -> 退款金额 < 订单金额 - 运费金额
|
|
|
if (Objects.equals(order.getStatus(), OrderStatus.CONSIGNMENT.value()) && orderRefundParam.getRefundType().equals(RefundType.ALL.value())) {
|
|
|
- Double refundAmount = Arith.sub(order.getActualTotal(),order.getFreightAmount());
|
|
|
- if (orderRefundParam.getRefundAmount() > refundAmount){
|
|
|
+ Double refundAmount = Arith.sub(order.getActualTotal(), order.getFreightAmount());
|
|
|
+ if (orderRefundParam.getRefundAmount() > refundAmount) {
|
|
|
throw new GlobalException("退款金额已超出订单金额,无法申请");
|
|
|
}
|
|
|
}
|
|
@@ -551,10 +560,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
if (!checkRefundDate(order)) {
|
|
|
throw new GlobalException("当前订单已确认收货超过" + Constant.MAX_FINALLY_REFUND_TIME + "天,无法退款");
|
|
|
}
|
|
|
- if (Objects.equals(order.getOrderType(),Constant.ORDER_TYPE_SCORE)) {
|
|
|
+ if (Objects.equals(order.getOrderType(), Constant.ORDER_TYPE_SCORE)) {
|
|
|
throw new GlobalException("积分商品,无法退款");
|
|
|
}
|
|
|
- if (Objects.equals(orderRefundParam.getRefundType(),RefundType.ALL.value()) && (!Objects.isNull(order.getRefundStatus()) && !Objects.equals(order.getRefundStatus(), RefundStatusEnum.DISAGREE.value()))) {
|
|
|
+ if (Objects.equals(orderRefundParam.getRefundType(), RefundType.ALL.value()) && (!Objects.isNull(order.getRefundStatus()) && !Objects.equals(order.getRefundStatus(), RefundStatusEnum.DISAGREE.value()))) {
|
|
|
throw new GlobalException("该订单已有商品正在退款中,不能再进行整单退款");
|
|
|
}
|
|
|
// 生成退款单信息
|
|
@@ -564,7 +573,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
List<OrderRefund> orderRefunds = orderRefundMapper.getProcessingOrderRefundByOrderId(order.getOrderId());
|
|
|
|
|
|
for (OrderRefund orderRefund : orderRefunds) {
|
|
|
- if (Objects.equals(RefundType.ALL.value(),orderRefund.getRefundType())) {
|
|
|
+ if (Objects.equals(RefundType.ALL.value(), orderRefund.getRefundType())) {
|
|
|
throw new GlobalException("该订单正在进行整单退款,无法进行新的退款操作");
|
|
|
}
|
|
|
if (Objects.equals(orderRefund.getOrderItemId(), orderRefundParam.getOrderItemId())) {
|
|
@@ -592,7 +601,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
boolean isCanRefund = false;
|
|
|
// 查看是否有支付金额和积分都为空的订单,有则抛出异常
|
|
|
for (OrderItem item : orderItemList) {
|
|
|
- if(item.getActualTotal() <= 0.0 && item.getUseScore() <= 0.0){
|
|
|
+ if (item.getActualTotal() <= 0.0 && item.getUseScore() <= 0.0) {
|
|
|
isCanRefund = true;
|
|
|
break;
|
|
|
}
|
|
@@ -643,23 +652,23 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
newOrderRefund.setRefundType(orderRefundParam.getRefundType());
|
|
|
|
|
|
newOrderRefund.setRefundAmount(orderRefundParam.getRefundAmount());
|
|
|
- if (Objects.equals(RefundType.ALL.value(),orderRefundParam.getRefundType())) {
|
|
|
+ if (Objects.equals(RefundType.ALL.value(), orderRefundParam.getRefundType())) {
|
|
|
newOrderRefund.setOrderItemId(0L);
|
|
|
} else {
|
|
|
newOrderRefund.setOrderItemId(orderRefundParam.getOrderItemId());
|
|
|
// 待发货状态-最后一件商品进行退款,退款金额 = 商品金额 + 订单运费金额
|
|
|
- if (Objects.equals(order.getStatus(),OrderStatus.PADYED.value()) && order.getFreightAmount() > 0){
|
|
|
+ if (Objects.equals(order.getStatus(), OrderStatus.PADYED.value()) && order.getFreightAmount() > 0) {
|
|
|
int orderItenCount = orderItemService.count(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, order.getOrderNumber()));
|
|
|
- if (Objects.equals(orderRefunds.size(),orderItenCount - 1)){
|
|
|
- newOrderRefund.setRefundAmount(Arith.add(newOrderRefund.getRefundAmount(),order.getFreightAmount()));
|
|
|
+ if (Objects.equals(orderRefunds.size(), orderItenCount - 1)) {
|
|
|
+ newOrderRefund.setRefundAmount(Arith.add(newOrderRefund.getRefundAmount(), order.getFreightAmount()));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
newOrderRefund.setGoodsNum(orderRefundParam.getGoodsNum());
|
|
|
newOrderRefund.setApplyType(orderRefundParam.getApplyType());
|
|
|
- if (Objects.equals(orderRefundParam.getApplyType(),2)){
|
|
|
+ if (Objects.equals(orderRefundParam.getApplyType(), 2)) {
|
|
|
newOrderRefund.setIsReceiver(true);
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
newOrderRefund.setIsReceiver(orderRefundParam.getIsReceiver());
|
|
|
}
|
|
|
newOrderRefund.setBuyerReason(orderRefundParam.getBuyerReason());
|
|
@@ -707,6 +716,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
|
|
|
}
|
|
|
|
|
|
}
|
|
|
+
|
|
|
private void writeExcel(HttpServletResponse response, ExcelWriter writer) {
|
|
|
//response为HttpServletResponse对象
|
|
|
response.setContentType("application/vnd.ms-excel;charset=utf-8");
|