Эх сурвалжийг харах

增加订单详情积分的计算

wang 1 өдөр өмнө
parent
commit
5b772832ea

+ 9 - 7
yami-shop-api/src/main/java/com/yami/shop/api/controller/MyOrderController.java

@@ -119,12 +119,12 @@ public class MyOrderController {
 
         //计算订单使用积分
         Integer score = 0;
-        for (OrderItem orderItem : orderItems) {
-            score += orderItem.getUseScore();
-        }
-        if (score > 0) {
-            score = (int) (score + order.getFreightAmount());
-        }
+//        for (OrderItem orderItem : orderItems) {
+//            score += orderItem.getUseScore();
+//        }
+//        if (score > 0) {
+//            score = (int) (score + order.getFreightAmount());
+//        }
 
         List<OrderItemDto> orderItemDtoList = mapperFacade.mapAsList(orderItems, OrderItemDto.class);
         //加上运费
@@ -139,9 +139,12 @@ public class MyOrderController {
         orderShopDto.setTransfee(order.getFreightAmount());
 //        Math.abs
         Long l = pointsRecordMapper.statisticsPoint(userId, Math.toIntExact(order.getChannelId()));
+        //当前剩余总可用的积分
         orderShopDto.setTotalAvailableScore(l);
         if (null != order.getOffsetPoints()) {
+            //当前订单抵扣的积分转换成钱
             orderShopDto.setReduceAmount(Arith.div(Double.valueOf(order.getOffsetPoints()), 100));
+            //当前订单使用了多少积分
             orderShopDto.setTotalUsableScore(Double.valueOf(order.getOffsetPoints()));
         }
         orderShopDto.setCreateTime(order.getCreateTime());
@@ -309,7 +312,6 @@ public class MyOrderController {
         if (!Objects.equals(order.getHbOrderStatus(), OrderStatus.UNPAY.value())) {
             throw new GlobalException("订单已支付,无法取消订单");
         }
-
         List<OrderItem> orderItems = orderItemService.getOrderItemsByOrderNumber(orderNumber);
         order.setOrderItems(orderItems);
         // 取消订单

+ 2 - 3
yami-shop-api/src/main/java/com/yami/shop/api/listener/ConfirmOrderListener.java

@@ -102,7 +102,6 @@ public class ConfirmOrderListener {
             totalCount = shopCartItem.getProdCount() + totalCount;
             total = Arith.add(shopCartItem.getProductTotalAmount(), total);
             // 用户地址如果为空,则表示该用户从未设置过任何地址相关信息
-            // TODO wangjian 计算积分抵现和分摊,报错
             shopCartItem.setActualTotal(shopCartItem.getProductTotalAmount());
             shopCartOrderDto.setTotalWeight(Arith.add(shopCartOrderDto.getTotalWeight(), Arith.mul(shopCartItem.getWeight(), shopCartItem.getProdCount())));
         }
@@ -132,11 +131,12 @@ public class ConfirmOrderListener {
                         //   2         3         4
                         //  5*2+5     5*3+5     5*4+5
                         int num = 1;
-                        while (sub > (1 << num) * 10) {
+                        while (sub > (1 << num) * 1000) {//单位g
                             num++;
                             transfee = Arith.add(transfee, Arith.mul(transfee, num));
                         }
                     }
+                    System.out.println(transfee);
                     break;
                 case 2: //夫妻店,B端只走物流
                     orderParam.setDvyType(DvyType.DELIVERY.value());
@@ -150,7 +150,6 @@ public class ConfirmOrderListener {
         }
 
 
-        //TODO wangjian 减免运费
         Double freeTransfee = 0.0;
 //        List<FreightFeeReduction> feeReductions = freightFeeReductionService.list(new LambdaQueryWrapper<FreightFeeReduction>()
 //                        .eq(FreightFeeReduction::getStatus, 1)

+ 3 - 24
yami-shop-api/src/main/java/com/yami/shop/api/listener/SubmitOrderListener.java

@@ -141,8 +141,8 @@ public class SubmitOrderListener {
                 order.setIsPayed(0);
                 order.setHbOrderStatus(OrderStatus.UNPAY.value());
                 order.setOrderType(OrderType.ORDINARY.value());
-                //加运费
-                double actualTotal = Arith.add(shopCartOrderDto.getActualTotal(),shopCartOrderDto.getTransfee());
+                //这个运费是已经算过的了
+                double actualTotal = shopCartOrderDto.getActualTotal();
                 //企业用户才进这个判断,并且该用户的积分必须大于0
                 if (1 == mergerOrder.getPlatform() && null != point && point > 0) {
                     order.setOrderType(OrderType.SCORE.value());
@@ -159,8 +159,8 @@ public class SubmitOrderListener {
                     } else {
                         //积分不够抵扣
                         double sub = Arith.sub(mul, vp);
+                        order.setOffsetPoints(point);
                         //剩下需要付的钱
-                        order.setOffsetPoints(Long.valueOf(String.valueOf(sub).split("\\.")[0]));
                         actualTotal = sub / 100;
                         mergerOrder.setNextPay(Boolean.TRUE);
                     }
@@ -286,27 +286,6 @@ public class SubmitOrderListener {
         if (!basketIds.isEmpty()) {
             basketMapper.deleteShopCartItemsByBasketIds(userId, basketIds);
         }
-
-//        现在不用维护库存
-//        // 更新sku库存
-//        skuStocksMap.forEach((key, sku) -> {
-//
-//            if (skuMapper.updateStocks(sku) == 0) {
-//                skuService.removeSkuCacheBySkuId(key, sku.getProdId());
-//                productService.removeProductCacheByProdId(sku.getProdId());
-//                throw new GlobalException("商品:[" + sku.getProdName() + "]库存不足");
-//            }
-//        });
-//
-//        //更新商品库存
-//        prodStocksMap.forEach((prodId, prod) -> {
-//
-//            if (productMapper.updateStocks(prod) == 0) {
-//                productService.removeProductCacheByProdId(prodId);
-//                throw new GlobalException("商品:[" + prod.getProdName() + "]库存不足");
-//            }
-//        });
-
     }
 
     @SuppressWarnings({"Duplicates"})

+ 3 - 3
yami-shop-bean/src/main/java/com/yami/shop/bean/dto/OrderRefundDto.java

@@ -97,11 +97,11 @@ public class OrderRefundDto extends OrderRefund implements Serializable {
      */
     private Boolean isCancel;
 
-    private Double freightAmount;
+    private Double freightAmount = 0.0;
 
-    private Long offsetPoints;
+    private Long offsetPoints = 0L;
 
     private Double goodsTotal;
     //过期的积分
-    private Long refundExpiredScore;
+    private Long refundExpiredScore = 0L;
 }

+ 1 - 1
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderRefundServiceImpl.java

@@ -114,7 +114,7 @@ public class OrderRefundServiceImpl extends ServiceImpl<OrderRefundMapper, Order
         // 如果是单项退款,且订单状态为待发货,则判断退款操作是否可以取消
         if (orderRefundDto.getRefundType().equals(RefundType.SINGLE.value()) && orderRefundDto.getStatus().equals(OrderStatus.PADYED.value())) {
             Integer orderRefundNums = orderRefundMapper.getOrderRefundCountByRefundSn(orderRefundDto.getRefundSn());
-            Integer orderItemNums = orderItemService.count(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, orderRefundDto.getOrderNumber()));
+            int orderItemNums = orderItemService.count(new LambdaQueryWrapper<OrderItem>().eq(OrderItem::getOrderNumber, orderRefundDto.getOrderNumber()));
             //订单退款项等于订单项(多个订单项) -> 该订单已全部进行退款申请 -> 不能进行取消退款操作
             if (orderItemNums > 1 && orderRefundNums.equals(orderItemNums)) {
                 orderRefundDto.setIsCancel(false);

+ 12 - 11
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderServiceImpl.java

@@ -276,7 +276,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             allOrderItems.addAll(orderItems);
             eventPublisher.publishEvent(new CancelOrderEvent(order));
             // 判定是不是积分订单,如果是或者包含积分则退积分
-            if (Objects.equals(OrderType.ORDINARY.value(), order.getOrderType())) {
+            if (Objects.equals(OrderType.SCORE.value(), order.getOrderType())) {
                 List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
                         .eq(PointsRecord::getOrderNumber, order.getOrderNumber())
                         .eq(PointsRecord::getPointsType, 2)//购物的积分
@@ -292,8 +292,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     pointsRecord.setPoints(pointsRecord.getVariablePoints());
                     pointsRecord.setVariablePoints(BigDecimal.valueOf(0));
                     pointsRecord.setPointsType(3);
-                    pointsRecord.setCurrentlyAvailablePoints(BigDecimal.valueOf(l).add(pointsRecord.getPoints()));
-                    pointsRecordMapper.updateById(pointsRecord);
+                    pointsRecord.setPointsAudit(1);
+                    pointsRecord.setCurrentlyAvailablePoints(BigDecimal.valueOf(null != l ? l : 0).add(pointsRecord.getPoints()));
+                    pointsRecordMapper.insert(pointsRecord);
                 }
             }
         }
@@ -341,8 +342,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Override
     public IPage<Order> deliverList(PageParam<Order> page, BackendOrderParam orderParam) {
         List<Order> orderList = orderMapper.deliverList(new PageAdapter(page), orderParam);
-        if (!orderList.isEmpty()){
-            orderList.forEach(c-> {
+        if (!orderList.isEmpty()) {
+            orderList.forEach(c -> {
                 List<OrderItem> orderItems = orderItemMapper.getListByOrderNumber(c.getOrderNumber());
                 c.setOrderItems(orderItems);
                 c.setGoodsTotalCount(orderItems.stream().map(OrderItem::getProdCount).reduce(0, Integer::sum));
@@ -1146,12 +1147,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Override
     public Map<String, Integer> deliverListStatusNum() {
         Map<String, Integer> map = new LinkedTreeMap<>();
-        map.put("all",orderMapper.statusCount(Lists.newArrayList(0, 1,20,30,40,50,60,70,80)));
-        map.put("paddingPay",orderMapper.statusCount(Lists.newArrayList(0)));
-        map.put("paddingShipped",orderMapper.statusCount(Lists.newArrayList(1)));
-        map.put("paddingReceived",orderMapper.statusCount(Lists.newArrayList(20,30,40,50,70)));
-        map.put("completed",orderMapper.statusCount(Lists.newArrayList(80)));
-        map.put("cancel",orderMapper.statusCount(Lists.newArrayList(60)));
+        map.put("all", orderMapper.statusCount(Lists.newArrayList(0, 1, 20, 30, 40, 50, 60, 70, 80)));
+        map.put("paddingPay", orderMapper.statusCount(Lists.newArrayList(0)));
+        map.put("paddingShipped", orderMapper.statusCount(Lists.newArrayList(1)));
+        map.put("paddingReceived", orderMapper.statusCount(Lists.newArrayList(20, 30, 40, 50, 70)));
+        map.put("completed", orderMapper.statusCount(Lists.newArrayList(80)));
+        map.put("cancel", orderMapper.statusCount(Lists.newArrayList(60)));
         return map;
     }
 

+ 7 - 3
yami-shop-service/src/main/java/com/yami/shop/service/impl/QnhServiceImpl.java

@@ -24,6 +24,7 @@ import com.yami.shop.bean.vo.StoreListVo;
 import com.yami.shop.common.exception.GlobalException;
 import com.yami.shop.common.exception.YamiShopBindException;
 import com.yami.shop.dao.ShopDetailMapper;
+import com.yami.shop.dao.ShopSkuMapper;
 import com.yami.shop.service.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -89,6 +90,9 @@ public class QnhServiceImpl implements IQnhService {
     @Resource
     private ShopDetailMapper shopDetailMapper;
 
+    @Resource
+    private ShopSkuMapper shopSkuMapper;
+
     @Override
     public List<StoreListVo> getStores(StoreDto dto) {
         Map<String, Object> body = bulidMap();
@@ -201,11 +205,11 @@ public class QnhServiceImpl implements IQnhService {
         if (ObjectUtils.isNotEmpty(shopDetail)) {
             jsonObject.put("poi_code", shopDetail.getThirdPartyCode());
         }
+        ShopSku shopSku = shopSkuMapper.selectByShopAndProd(one1.getSkuId(), byId.getShopId());
         jsonObject.put("sku_code", skuCode);
         jsonObject.put("page_size", 50);
-        //TODO wangjian 原先查询牵牛花的库存,现在需要替换成海博的
-        one1.setStocks(9999);
-        one1.setActualStocks(9999);
+        one1.setStocks(shopSku.getShopSkuStocks());
+        one1.setActualStocks(shopSku.getShopSkuStocks());
         return Boolean.TRUE;
 //        HttpResponse execute = getExecute(body, jsonObject, GET_SKU_STOCK);
 //        JSONObject result = JSONObject.parseObject(execute.body());

+ 51 - 22
yami-shop-user/yami-shop-user-comment/src/main/java/com/yami/shop/user/comment/service/impl/UserScoreDetailServiceImpl.java

@@ -153,38 +153,67 @@ public class UserScoreDetailServiceImpl extends ServiceImpl<UserScoreDetailMappe
         IPage<PointsRecord> pointsRecordIPage = pointsRecordMapper.selectPage(page, new LambdaQueryWrapper<PointsRecord>()
                 .eq(PointsRecord::getUserId, userId)
                 .eq(PointsRecord::getChannelId, platform)
+                .orderByAsc(PointsRecord::getCreationDate)
         );
         SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm");
-        List<PointsRecord> collect = pointsRecordIPage.getRecords().stream().peek((pointsRecord) -> {
+        List<PointsRecord> collect = pointsRecordIPage.getRecords().stream().flatMap((pointsRecord) -> {
             pointsRecord.setCreationDateStr(sdf.format(pointsRecord.getCreationDate()));
             String mark = "";
-            if (isExpiredToday(pointsRecord.getExpiryDate())) {
-                pointsRecord.setPointsTypeStr("过期");
-                mark = "-";
-                pointsRecord.setVariablePointsStr(mark + (null!=pointsRecord.getVariablePoints()?pointsRecord.getVariablePoints():"0"));
-            } else {
-                switch (pointsRecord.getPointsType()) {
-                    case 1:
-                        pointsRecord.setPointsTypeStr("充值");
-                        mark = "+";
-                        pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
-                        break;
-                    case 2:
-                        pointsRecord.setPointsTypeStr("购物");
+            List<PointsRecord> recordsToAdd = new ArrayList<>();
+            recordsToAdd.add(pointsRecord); // 先添加原对象
+            switch (pointsRecord.getPointsType()) {
+                case 1:
+                    int variablePoints = pointsRecord.getVariablePoints() != null ?
+                            pointsRecord.getVariablePoints().intValue() : 0;
+                    int remainingPoints = pointsRecord.getPoints().intValue() - variablePoints;
+
+                    if (remainingPoints > 0 && isExpiredToday(pointsRecord.getExpiryDate())) {
+
+                        PointsRecord expiredRecord = new PointsRecord();
+                        // 复制关键属性(根据实际属性补充)
+                        expiredRecord.setId(pointsRecord.getId()); // 若ID唯一需注意业务逻辑
+                        expiredRecord.setCreationDate(pointsRecord.getCreationDate());
+                        expiredRecord.setPointsType(pointsRecord.getPointsType());
+                        expiredRecord.setPoints(pointsRecord.getPoints());
+                        expiredRecord.setVariablePoints(pointsRecord.getVariablePoints());
+                        expiredRecord.setExpiryDate(pointsRecord.getExpiryDate());
+                        expiredRecord.setCurrentlyAvailablePoints(pointsRecord.getCurrentlyAvailablePoints());
+
+                        // 设置复制对象的显示属性
+                        expiredRecord.setCreationDateStr(pointsRecord.getCreationDateStr()); // 复用已格式化的日期
+                        expiredRecord.setPointsTypeStr("过期扣减"); // 示例:区分类型
+                        expiredRecord.setVariablePointsStr("-" + remainingPoints); // 示例:显示过期数量
+                        // 设置原对象为过期记录
+                        expiredRecord.setPointsTypeStr("过期");
                         mark = "-";
-                        pointsRecord.setVariablePointsStr(mark + (null!=pointsRecord.getVariablePoints()?pointsRecord.getVariablePoints():"0"));
-                        break;
-                    case 3:
-                        pointsRecord.setPointsTypeStr("退款");
+                        expiredRecord.setVariablePointsStr(mark +
+                                (pointsRecord.getVariablePoints() != null ?
+                                        pointsRecord.getVariablePoints() : pointsRecord.getPoints()));
+                        recordsToAdd.add(expiredRecord); // 添加复制对象
+                    }
+                        pointsRecord.setPointsTypeStr("充值");
                         mark = "+";
                         pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
-                        break;
-                }
+                    break;
+                case 2:
+                    pointsRecord.setPointsTypeStr("购物");
+                    mark = "-";
+                    pointsRecord.setVariablePointsStr(mark +
+                            (pointsRecord.getVariablePoints() != null ?
+                                    pointsRecord.getVariablePoints() : "0"));
+                    break;
+                case 3:
+                    pointsRecord.setPointsTypeStr("退款");
+                    mark = "+";
+                    pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
+                    break;
             }
-            //此时当前可用
-            if(null!=pointsRecord.getCurrentlyAvailablePoints()){
+
+            // 设置可用积分(原对象和复制对象都会执行)
+            if (pointsRecord.getCurrentlyAvailablePoints() != null) {
                 pointsRecord.setTotalAvailablePoints(pointsRecord.getCurrentlyAvailablePoints().longValue());
             }
+            return recordsToAdd.stream();
         }).collect(Collectors.toList());
         pointsRecordIPage.setRecords(collect);
         return pointsRecordIPage;