Kaynağa Gözat

Merge remote-tracking branch 'origin/master'

wangming 15 saat önce
ebeveyn
işleme
c797d775e6

+ 10 - 0
yami-shop-api/src/main/java/com/yami/shop/api/controller/OrderRefundController.java

@@ -359,7 +359,17 @@ public class OrderRefundController {
                 }
             }
         }
+        BigDecimal refundTotalMoney=BigDecimal.ZERO;
+        for (OrderRefundSku orderRefundSku : orderRefundSkuList) {
+            int mul = (int) Arith.mul(orderRefundSku.getSkuPrice(), 100)*orderRefundSku.getProductCount();
+            refundTotalMoney= refundTotalMoney.add(BigDecimal.valueOf(mul));
+        }
+        //计算退款订单金额 整单退款需要退运费
+        if (orderRefundParam.getRefundType().equals(RefundType.ALL.value())){
+            refundTotalMoney= refundTotalMoney.add(BigDecimal.valueOf(Arith.mul(order.getFreightAmount(), 100)));
+        }
 
+        newOrderRefund.setRefundTotalMoney(BigDecimal.valueOf(Arith.div(refundTotalMoney.doubleValue(), 100,2)));
         newOrderRefund.setGoodsNum(orderRefundParam.getGoodsNum());
         newOrderRefund.setApplyType(orderRefundParam.getApplyType());
         if (Objects.equals(orderRefundParam.getApplyType(), 2)) {

+ 6 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/OrderRefund.java

@@ -15,6 +15,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -167,6 +168,11 @@ public class OrderRefund implements Serializable{
 
     private Double freightAmount;
 
+    /**
+     * 退款总金额
+     */
+    private BigDecimal refundTotalMoney;
+
     /**
      * 该退款单是否处理完成
      */

+ 11 - 0
yami-shop-bean/src/main/java/com/yami/shop/bean/model/ShopCategory.java

@@ -3,8 +3,12 @@ package com.yami.shop.bean.model;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
 import java.io.Serializable;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -94,6 +98,13 @@ public class ShopCategory implements Serializable {
      * 标签
      */
     private Long label;
+    /**
+     * 创建时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date recTime;
+
     /**
      * 标签名称
      */

+ 3 - 3
yami-shop-platform/src/main/java/com/yami/shop/platform/task/OrderTask.java

@@ -70,16 +70,16 @@ public class OrderTask {
         Date now = new Date();
         logger.info("取消超时未支付订单。。。");
         // 获取15分钟之前未支付的订单
-        List<Order> orders = orderService.cancelOrders(OrderStatus.UNPAY.value(),DateUtil.offsetMinute(now, -15));
+        List<Order> orders = orderService.selectCancelOrders(OrderStatus.UNPAY.value(),DateUtil.offsetMinute(now, -15));
         if (CollectionUtil.isEmpty(orders)) {
             return;
         }
 
-        List<Order>  cancelOrderList = this.chackOrders(orders);
+//        List<Order>  cancelOrderList = this.chackOrders(orders);
 
 
         //TODO zx定时任务加回积分待完善
-//        orderService.cancelOrders(orders);
+        orderService.cancelOrders(orders);
 
         // 移除缓存
         this.removeCache(orders);

+ 1 - 1
yami-shop-service/src/main/java/com/yami/shop/dao/OrderMapper.java

@@ -31,7 +31,7 @@ public interface OrderMapper extends BaseMapper<Order> {
     Order getOrderByOrderNumber(@Param("orderNumber") String orderNumber);
 
     List<Order> listUnRefundOrderAndOrderItems(@Param("orderStatus") Integer orderStatus, @Param("lessThanUpdateTime") DateTime lessThanUpdateTime);
-    List<Order> cancelOrders(@Param("orderStatus") Integer orderStatus, @Param("lessThanUpdateTime") DateTime lessThanUpdateTime);
+    List<Order> selectCancelOrders(@Param("orderStatus") Integer orderStatus, @Param("lessThanUpdateTime") DateTime lessThanUpdateTime);
 
     void cancelOrders(@Param("orders") List<Order> orders);
 

+ 4 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/PointsRecordMapper.java

@@ -2,8 +2,10 @@
 package com.yami.shop.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yami.shop.bean.dto.ScoreDataDto;
 import com.yami.shop.bean.model.PointsRecord;
+import com.yami.shop.common.util.PageParam;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -19,4 +21,6 @@ public interface PointsRecordMapper extends BaseMapper<PointsRecord> {
     ScoreDataDto statisticsAllScorePoint(@Param("userId") String userId, @Param("platform") Integer platform);
 
     List<PointsRecord> findByOrderNumber(@Param("orderNumber")String orderNumber,@Param("pointsType") Integer pointsType);
+
+    IPage<PointsRecord> findPage(PageParam<PointsRecord> page,@Param("userId") String userId,@Param("platform") Integer platform);
 }

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

@@ -94,7 +94,7 @@ public interface OrderService extends IService<Order> {
      * @param orderStatus 订单状态
      * @param lessThanUpdateTime 时间
      */
-    List<Order> cancelOrders(Integer orderStatus, DateTime lessThanUpdateTime);
+    List<Order> selectCancelOrders(Integer orderStatus, DateTime lessThanUpdateTime);
 
     void cancelOrders(List<Order> orders);
 

+ 2 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBFrontCategoryService.java

@@ -159,6 +159,8 @@ public class HBFrontCategoryService implements IHBFrontCategoryService {
         shopCategory.setIsLeaves(frontCategory.getIsLeaves());
 
         shopCategoryMapper.insert(shopCategory);
+
+
     }
 
     @Override

+ 74 - 56
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBGoodsService.java

@@ -198,7 +198,7 @@ public class HBGoodsService implements IHBGoodsService {
                 for (CategoryProdHb categoryProd : categoryProds) {
                     FrontCategory frontCategory = frontCategoryMapper.selectOne(new LambdaQueryWrapper<FrontCategory>()
                             .eq(FrontCategory::getCode, categoryProd.getCode()));
-                    addShopCategory(frontCategory, categoryProd.getProdId(),shopDetail.getShopId(), shopDetail.getHbStationId());
+                    addShopCategory(frontCategory, categoryProd.getProdId(), shopDetail.getShopId(), shopDetail.getHbStationId());
                 }
 
 
@@ -219,74 +219,91 @@ public class HBGoodsService implements IHBGoodsService {
      * @return
      */
     @Transactional(rollbackFor = Exception.class)
-    public void addShopCategory(FrontCategory frontCategory,Long prodId, Long shopId, String hbShopId) {
+    public void addShopCategory(FrontCategory frontCategory, Long prodId, Long shopId, String hbShopId) {
+        log.info("添加门店分类:{}", frontCategory);
         ShopCategory shopCategoryByCode = shopCategoryMapper.selectOne(new LambdaQueryWrapper<ShopCategory>()
                 .eq(ShopCategory::getCode, frontCategory.getCode())
                 .eq(ShopCategory::getShopId, shopId)
                 .eq(ShopCategory::getIsDelete, 0));
 
-        if (shopCategoryByCode != null) {
-            log.info("门店分类已存在,无需添加");
-            return;
-        }
-        ShopCategory shopCategory = new ShopCategory();
-        shopCategory.setCode(frontCategory.getCode());
-        shopCategory.setName(frontCategory.getName());
-        if (frontCategory.getParentCode() == null || frontCategory.getParentCode().equals("0")) {
-            shopCategory.setPid(0L);
-            shopCategory.setParentCode("0");
-        } else {
-            ShopCategory shopCategoryByCode1 = shopCategoryMapper.selectOne(new LambdaQueryWrapper<ShopCategory>()
-                    .eq(ShopCategory::getCode, frontCategory.getParentCode())
-                    .eq(ShopCategory::getShopId, shopId)
-                    .eq(ShopCategory::getIsDelete, 0));
-            if (shopCategoryByCode1 == null) {
-                //不存在门店分类父类目添加
-                FrontCategory frontCategoryParent = frontCategoryMapper.selectOne(new LambdaQueryWrapper<FrontCategory>()
-                        .eq(FrontCategory::getCode, frontCategory.getParentCode())
-                        .eq(FrontCategory::getIsDelete, 0));
-                addShopCategory(frontCategoryParent,prodId, shopId, hbShopId);
-
-                shopCategoryByCode1 = shopCategoryMapper.selectOne(new LambdaQueryWrapper<ShopCategory>()
+        if (shopCategoryByCode == null) {
+            ShopCategory shopCategory = new ShopCategory();
+            shopCategory.setCode(frontCategory.getCode());
+            shopCategory.setName(frontCategory.getName());
+            if (frontCategory.getParentCode() == null || frontCategory.getParentCode().equals("0")) {
+                shopCategory.setPid(0L);
+                shopCategory.setParentCode("0");
+            } else {
+                ShopCategory shopCategoryByCode1 = shopCategoryMapper.selectOne(new LambdaQueryWrapper<ShopCategory>()
                         .eq(ShopCategory::getCode, frontCategory.getParentCode())
                         .eq(ShopCategory::getShopId, shopId)
                         .eq(ShopCategory::getIsDelete, 0));
+                if (shopCategoryByCode1 == null) {
+                    //不存在门店分类父类目添加
+                    FrontCategory frontCategoryParent = frontCategoryMapper.selectOne(new LambdaQueryWrapper<FrontCategory>()
+                            .eq(FrontCategory::getCode, frontCategory.getParentCode())
+                            .eq(FrontCategory::getIsDelete, 0));
+                    addShopCategory(frontCategoryParent, prodId, shopId, hbShopId);
+
+                    shopCategoryByCode1 = shopCategoryMapper.selectOne(new LambdaQueryWrapper<ShopCategory>()
+                            .eq(ShopCategory::getCode, frontCategory.getParentCode())
+                            .eq(ShopCategory::getShopId, shopId)
+                            .eq(ShopCategory::getIsDelete, 0));
+                }
+                shopCategory.setPid(shopCategoryByCode1.getId());
+                shopCategory.setParentCode(shopCategoryByCode1.getCode());
             }
-            shopCategory.setPid(shopCategoryByCode1.getId());
-            shopCategory.setParentCode(shopCategoryByCode1.getCode());
-        }
-
-        shopCategory.setShopId(shopId);
-        shopCategory.setHbShopId(hbShopId);
-        shopCategory.setLabel(frontCategory.getLabel());
-        shopCategory.setIcon(frontCategory.getIcon());
-        shopCategory.setPic(frontCategory.getPic());
-        shopCategory.setLevel(frontCategory.getLevel());
-        shopCategory.setIsDelete(0);
-        shopCategory.setOperateUser("admin");
-        shopCategory.setNum(frontCategory.getNum());
-        shopCategory.setIsLeaves(frontCategory.getIsLeaves());
 
-        shopCategoryMapper.insert(shopCategory);
+            shopCategory.setShopId(shopId);
+            shopCategory.setHbShopId(hbShopId);
+            shopCategory.setLabel(frontCategory.getLabel());
+            shopCategory.setIcon(frontCategory.getIcon());
+            shopCategory.setPic(frontCategory.getPic());
+            shopCategory.setLevel(frontCategory.getLevel());
+            shopCategory.setIsDelete(0);
+            shopCategory.setOperateUser("admin");
+            shopCategory.setNum(frontCategory.getNum());
+            shopCategory.setIsLeaves(frontCategory.getIsLeaves());
+            shopCategory.setRecTime(new Date());
+
+            shopCategoryMapper.insert(shopCategory);
+            log.info("门店分类添加成功:{}", shopCategory);
+            //二级添加门店-分类绑定商品管理
+            addCategoryProd(prodId, shopCategory);
+        } else {
+            log.info("门店分类已存在,无需添加");
+            //二级添加门店-分类绑定商品管理
+            addCategoryProd(prodId, shopCategoryByCode);
+            return;
+        }
+    }
 
-        //二级添加门店-分类管理
+    /**
+     * 添加门店-分类绑定商品管理
+     *
+     * @param prodId       商品id
+     * @param shopCategory 门店分类
+     */
+    private void addCategoryProd(Long prodId, ShopCategory shopCategory) {
+        log.info("添加门店-分类绑定商品管理");
         if (shopCategory.getLevel() == 2) {
-           Integer count = categoryProdMapper.selectCount(new LambdaQueryWrapper<CategoryProd>()
-                    .eq(CategoryProd::getCode, shopCategory.getCode())
+            Integer count = categoryProdMapper.selectCount(new LambdaQueryWrapper<CategoryProd>()
                     .eq(CategoryProd::getIsDelete, 0)
+                    .eq(CategoryProd::getCode, shopCategory.getCode())
+                    .eq(CategoryProd::getProdId, prodId)
                     .eq(CategoryProd::getShopId, shopCategory.getShopId()));
 
-           if (count == 0){
-               CategoryProd categoryProd = new CategoryProd();
-               categoryProd.setProdId(prodId);
-               categoryProd.setCategoryId(shopCategory.getId());
-               categoryProd.setCode(shopCategory.getCode());
-               categoryProd.setShopId(shopCategory.getShopId());
-               categoryProd.setIsDelete(0);
-               categoryProd.setCreateTime(new Date());
-
-               categoryProdMapper.insert(categoryProd);
-           }
+            if (count == 0) {
+                CategoryProd categoryProd = new CategoryProd();
+                categoryProd.setProdId(prodId);
+                categoryProd.setCategoryId(shopCategory.getId());
+                categoryProd.setCode(shopCategory.getCode());
+                categoryProd.setShopId(shopCategory.getShopId());
+                categoryProd.setIsDelete(0);
+                categoryProd.setCreateTime(new Date());
+
+                categoryProdMapper.insert(categoryProd);
+            }
         }
     }
 
@@ -380,6 +397,7 @@ public class HBGoodsService implements IHBGoodsService {
                     shopSkuInfo.setRecTime(new Date());
                     shopSkuInfo.setUpdateTime(new Date());
                     shopSkuMapper.insert(shopSkuInfo);
+
                     log.info("库存添加成功");
                 } else {
                     shopSku.setSpuId(sku.getProdId());
@@ -624,13 +642,13 @@ public class HBGoodsService implements IHBGoodsService {
             if (StringUtils.isEmpty(ztFrontCategoryCodeLevel)) {
                 ztFrontCategoryCodeLevel = jsonObject.getString("ztFrontCategoryCode");
             }
-            addCategoryProd(spuId, ztFrontCategoryCodeLevel);
+            addCategoryProdHb(spuId, ztFrontCategoryCodeLevel);
 
 
         }
     }
 
-    private void addCategoryProd(Long spuId, String ztFrontCategoryCodeLevel) {
+    private void addCategoryProdHb(Long spuId, String ztFrontCategoryCodeLevel) {
         CategoryProdHb categoryProd = new CategoryProdHb();
         categoryProd.setCode(ztFrontCategoryCodeLevel);
         categoryProd.setProdId(spuId);

+ 56 - 34
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderServiceImpl.java

@@ -255,8 +255,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         return orderMapper.listUnRefundOrderAndOrderItems(orderStatus, lessThanUpdateTime);
     }
     @Override
-    public List<Order> cancelOrders(Integer orderStatus, DateTime lessThanUpdateTime) {
-        return orderMapper.cancelOrders(orderStatus, lessThanUpdateTime);
+    public List<Order> selectCancelOrders(Integer orderStatus, DateTime lessThanUpdateTime) {
+        return orderMapper.selectCancelOrders(orderStatus, lessThanUpdateTime);
     }
 
     @Override
@@ -991,21 +991,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                             po.setRefundMoney((int) Arith.mul(order.getActualTotal(), 100));
                             String s = wxProviderService.refundOrder(po);
                             System.out.println("微信退款结果:" + s);
-                            refundActual = BigDecimal.valueOf(Arith.add(order.getActualTotal(), order.getFreightAmount()));
+                            refundActual = BigDecimal.valueOf(order.getActualTotal());
                             //优先退未过期的积分,退积分
-                            List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
-                                    .eq(PointsRecord::getOrderNumber, order.getOrderNumber()).eq(PointsRecord::getPointsType, 2)
-                                    .and(wrapper -> wrapper
-                                            .gt(PointsRecord::getExpiryDate, LocalDateTime.now())
-                                            .or()
-                                            .isNull(PointsRecord::getExpiryDate)
-                                    ).orderByDesc(PointsRecord::getExpiryDate));
+//                            List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
+//                                    .eq(PointsRecord::getOrderNumber, order.getOrderNumber()).eq(PointsRecord::getPointsType, 2)
+//                                    .orderByDesc(PointsRecord::getExpiryDate));
+                            List<PointsRecord> pointsRecords = pointsRecordMapper.findByOrderNumber(order.getOrderNumber(), 2);
                             for (PointsRecord pointsRecord : pointsRecords) {
-                                refundScore = (long) (refundScore + Arith.add(order.getActualTotal(), order.getFreightAmount()));
+//                                refundScore =  (refundScore + order.getOffsetPoints());
                                 PointsRecord npr = new PointsRecord();
                                 BeanUtils.copyProperties(pointsRecord, npr);
                                 npr.setId(null);
                                 npr.setPointsType(3);
+                                npr.setPointsAudit(1);
                                 npr.setPoints(pointsRecord.getVariablePoints());
                                 npr.setVariablePoints(BigDecimal.valueOf(0));
                                 Long l = pointsRecordMapper.statisticsPoint(pointsRecord.getUserId(), Math.toIntExact(pointsRecord.getChannelId()));
@@ -1013,14 +1011,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                                     l = 0L;
                                 }
                                 if (null != pointsRecord.getVariablePoints()) {
-                                    npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
+                                    if (pointsRecord.getExpiryStatus()==1){
+                                        npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
+                                    }else {
+                                        npr.setCurrentlyAvailablePoints(BigDecimal.ZERO.add(BigDecimal.valueOf(l)));
+                                    }
+                                    if (pointsRecord.getExpiryStatus()==2){
+                                        refundExpiredScore += pointsRecord.getVariablePoints().longValue();
+                                    }
+                                    refundScore =  (refundScore + pointsRecord.getVariablePoints().intValue());
                                 } else {
-                                    npr.setCurrentlyAvailablePoints(BigDecimal.valueOf(0.0).add(BigDecimal.valueOf(l)));
+                                    npr.setCurrentlyAvailablePoints(BigDecimal.ZERO.add(BigDecimal.valueOf(l)));
                                 }
                                 npr.setCreationDate(new Date());
                                 pointsRecordMapper.insert(npr);
                             }
-                            refundExpiredScore = order.getOffsetPoints() - refundScore;
+//                            refundExpiredScore = order.getOffsetPoints() - refundScore;
                         } else {//仅微信支付
                             RefundInfoPo po = new RefundInfoPo();
                             po.setOutTradeNo(orderSettlement.getPayNo());
@@ -1032,18 +1038,16 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                         }
                     } else {
                         //退,积分【优先退未过期的积分】
-                        List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
-                                .eq(PointsRecord::getOrderNumber, order.getOrderNumber()).eq(PointsRecord::getPointsType, 2)
-                                .and(wrapper -> wrapper
-                                        .gt(PointsRecord::getExpiryDate, LocalDateTime.now())
-                                        .or()
-                                        .isNull(PointsRecord::getExpiryDate)
-                                ).orderByDesc(PointsRecord::getExpiryDate));
+//                        List<PointsRecord> pointsRecords = pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
+//                                .eq(PointsRecord::getOrderNumber, order.getOrderNumber()).eq(PointsRecord::getPointsType, 2)
+//                                .orderByDesc(PointsRecord::getExpiryDate));
+                        List<PointsRecord> pointsRecords = pointsRecordMapper.findByOrderNumber(order.getOrderNumber(), 2);
                         for (PointsRecord pointsRecord : pointsRecords) {
                             PointsRecord npr = new PointsRecord();
                             BeanUtils.copyProperties(pointsRecord, npr);
                             npr.setId(null);
                             npr.setPointsType(3);
+                            npr.setPointsAudit(1);
                             npr.setPoints(pointsRecord.getVariablePoints());
                             npr.setVariablePoints(BigDecimal.valueOf(0));
                             Long l = pointsRecordMapper.statisticsPoint(pointsRecord.getUserId(), Math.toIntExact(pointsRecord.getChannelId()));
@@ -1051,15 +1055,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                                 l = 0L;
                             }
                             if (null != pointsRecord.getVariablePoints()) {
-                                npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
+                                if (pointsRecord.getExpiryStatus()==1){
+                                    npr.setCurrentlyAvailablePoints(pointsRecord.getVariablePoints().add(BigDecimal.valueOf(l)));
+                                }else {
+                                    npr.setCurrentlyAvailablePoints(BigDecimal.valueOf(0.0).add(BigDecimal.valueOf(l)));
+                                }
+                                if (pointsRecord.getExpiryStatus()==2){
+                                    refundExpiredScore += pointsRecord.getVariablePoints().longValue();
+                                }
+                                refundScore =  (refundScore + pointsRecord.getVariablePoints().intValue());
                             } else {
-                                npr.setCurrentlyAvailablePoints(BigDecimal.valueOf(0.0).add(BigDecimal.valueOf(l)));
+                                npr.setCurrentlyAvailablePoints(BigDecimal.ZERO.add(BigDecimal.valueOf(l)));
                             }
                             npr.setCreationDate(new Date());
-                            refundScore = (long) (refundScore + Arith.add(order.getActualTotal(), order.getFreightAmount()));
                             pointsRecordMapper.insert(npr);
                         }
-                        refundExpiredScore = order.getOffsetPoints() - refundScore;
+//                        refundExpiredScore = order.getOffsetPoints() - refundScore;
                     }
                     break;
                 case 2://2:单个物品退款
@@ -1072,8 +1083,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     for (OrderRefund refund : orderRefundList) {
                         refundOffsetPoints += refund.getOffsetPoints();
                     }
-
-
 //                            pointsRecordMapper.selectList(new LambdaQueryWrapper<PointsRecord>()
 //                            .eq(PointsRecord::getOrderNumber, order.getOrderNumber())
 //                            .eq(PointsRecord::getPointsType, 2)
@@ -1167,21 +1176,34 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     }
                     //退钱
                     if (totalRefundActual > 0) {
+                        int refundMoney=0;//需要退款的金额
+                        if (totalRefundScore>0){
+                            if (totalRefundActual>=totalRefundScore){
+                                refundMoney = totalRefundScore;
+                            }else {
+                                System.out.println("退款金额大于支付金额");
+                            }
+                        }else if (totalRefundScore==0){
+                            refundMoney =(int) Arith.mul(totalRefundActual, 100);
+                        }else {
+                            System.out.println("单笔退款未知状态");
+                            break;
+                        }
                         OrderSettlement orderSettlement = orderSettlementMapper.selectOne(new LambdaQueryWrapper<OrderSettlement>()
                                 .eq(OrderSettlement::getOrderNumber, order.getOrderNumber())
                                 .eq(OrderSettlement::getPayType, 1));
                         RefundInfoPo po = new RefundInfoPo();
                         po.setOutTradeNo(orderSettlement.getPayNo());
-                        po.setTotal((int) Arith.mul(Arith.add(order.getTotal(), order.getFreightAmount()), 100));
-                        po.setRefundMoney((int) Arith.mul(totalRefundActual, 100));
-                        String s = wxProviderService.refundOrder(po);
-                        System.out.println("微信退款结果:" + s);
-                        refundActual = BigDecimal.valueOf(totalRefundActual);
+                        po.setTotal((int) Arith.mul(order.getActualTotal(), 100));
+                        po.setRefundMoney(refundMoney);
+                        if (refundMoney!=0){
+                            String s = wxProviderService.refundOrder(po);
+                            System.out.println("微信退款结果:" + s);
+                        }
+                        refundActual = BigDecimal.valueOf(refundMoney);
                     }
                     break;
             }
-
-
             if (1 == orderRefund.getRefundType()) {
                 order.setHbOrderStatus(OrderStatus.CLOSE.value());
             }else {

+ 1 - 1
yami-shop-service/src/main/resources/mapper/OrderMapper.xml

@@ -229,7 +229,7 @@
     and o.dvy_time &lt; #{lessThanUpdateTime}
   </select>
 
-    <select id="cancelOrders" resultMap="orderAndOrderItemMap">
+    <select id="selectCancelOrders" resultMap="orderAndOrderItemMap">
     select o.*,oi.*,oi.prod_name oi_prod_name,oi.actual_total as oi_actual_total from tz_order o
       join tz_order_item oi on o.order_number = oi.order_number
     where o.hb_order_status = #{orderStatus}  and o.create_time &lt; #{lessThanUpdateTime}

+ 6 - 0
yami-shop-service/src/main/resources/mapper/PointsRecordMapper.xml

@@ -66,5 +66,11 @@
                ELSE 2 END AS expiryStatus
         from tz_points_record where order_number = #{orderNumber} and points_type =#{pointsType} order by  expiry_date desc
     </select>
+    <select id="findPage" resultType="com.yami.shop.bean.model.PointsRecord">
+        select id,user_id,channel_id,order_number,points_id,`code`,parent_code,points,variable_points,points_type,points_audit,expiry_date,creation_date,currently_available_points from  tz_points_record where channel_id = #{platform}  and user_id = #{userId}
+        UNION ALL
+        SELECT id,user_id,channel_id,order_number,points_id,`code`,parent_code,(points-IFNULL(variable_points,0)) AS points,variable_points, 4 as  points_type,points_audit,expiry_date,creation_date,currently_available_points from tz_points_record  where channel_id =  #{platform}  and user_id = #{userId} and expiry_date &lt;=NOW() and points-IFNULL(variable_points,0) >0
+        order by  creation_date DESC
+    </select>
 
 </mapper>

+ 63 - 54
yami-shop-user/yami-shop-user-comment/src/main/java/com/yami/shop/user/comment/service/impl/UserScoreDetailServiceImpl.java

@@ -30,6 +30,7 @@ import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.ZoneId;
@@ -150,11 +151,8 @@ public class UserScoreDetailServiceImpl extends ServiceImpl<UserScoreDetailMappe
 
     @Override
     public IPage<PointsRecord> doGetScorePage(PageParam<PointsRecord> page, String userId, Integer platform) {
-        IPage<PointsRecord> pointsRecordIPage = pointsRecordMapper.selectPage(page, new LambdaQueryWrapper<PointsRecord>()
-                .eq(PointsRecord::getUserId, userId)
-                .eq(PointsRecord::getChannelId, platform)
-                .orderByDesc(PointsRecord::getCreationDate)
-        );
+        IPage<PointsRecord> pointsRecordIPage = pointsRecordMapper.findPage(page,userId,platform);
+        Long l = pointsRecordMapper.statisticsPoint(userId, platform);
         SimpleDateFormat sdf = new SimpleDateFormat("MM月dd日 HH:mm");
         List<PointsRecord> collect = pointsRecordIPage.getRecords().stream().flatMap((pointsRecord) -> {
             pointsRecord.setCreationDateStr(sdf.format(pointsRecord.getCreationDate()));
@@ -165,31 +163,31 @@ public class UserScoreDetailServiceImpl extends ServiceImpl<UserScoreDetailMappe
                 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 = "-";
-                        expiredRecord.setVariablePointsStr(mark +
-                                (pointsRecord.getVariablePoints() != null ?
-                                        pointsRecord.getVariablePoints() : pointsRecord.getPoints()));
-                        recordsToAdd.add(expiredRecord); // 添加复制对象
-                    }
+//                    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 = "-";
+//                        expiredRecord.setVariablePointsStr(mark +
+//                                (pointsRecord.getVariablePoints() != null ?
+//                                        pointsRecord.getVariablePoints() : pointsRecord.getPoints()));
+//                        recordsToAdd.add(expiredRecord); // 添加复制对象
+//                    }
                         pointsRecord.setPointsTypeStr("充值");
                         mark = "+";
                         pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
@@ -202,34 +200,45 @@ public class UserScoreDetailServiceImpl extends ServiceImpl<UserScoreDetailMappe
                                     pointsRecord.getVariablePoints() : "0"));
                     break;
                 case 3:
-                    if (isExpiredToday(pointsRecord.getExpiryDate())&&pointsRecord.getPointsAudit()!=3) {
-                        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("过期扣减"); // 示例:区分类型
-                        if (pointsRecord.getPointsAudit()==1){
-                            expiredRecord.setVariablePointsStr("-" + pointsRecord.getPoints()); // 示例:显示过期数量
-                        } else if (pointsRecord.getPointsAudit()==2) {
-                            expiredRecord.setVariablePointsStr("-" + (pointsRecord.getPoints().intValue()-pointsRecord.getVariablePoints().intValue())); // 示例:显示过期数量
-                        }
-
-                        // 设置原对象为过期记录
-                        expiredRecord.setPointsTypeStr("过期");
-                        recordsToAdd.add(expiredRecord); // 添加复制对象
-                    }
+//                    if (isExpiredToday(pointsRecord.getExpiryDate())&&pointsRecord.getPointsAudit()!=3) {
+//                        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("过期扣减"); // 示例:区分类型
+//                        if (pointsRecord.getPointsAudit()==1){
+//                            expiredRecord.setVariablePointsStr("-" + pointsRecord.getPoints()); // 示例:显示过期数量
+//                        } else if (pointsRecord.getPointsAudit()==2) {
+//                            expiredRecord.setVariablePointsStr("-" + (pointsRecord.getPoints().intValue()-pointsRecord.getVariablePoints().intValue())); // 示例:显示过期数量
+//                        }
+//
+//                        // 设置原对象为过期记录
+//                        expiredRecord.setPointsTypeStr("过期");
+//                        recordsToAdd.add(expiredRecord); // 添加复制对象
+//                    }
                     pointsRecord.setPointsTypeStr("退款");
                     mark = "+";
                     pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
                     break;
+                case 4:
+                    if (l==null){
+                        pointsRecord.setCurrentlyAvailablePoints(BigDecimal.ZERO);
+                    }else {
+                        pointsRecord.setCurrentlyAvailablePoints(BigDecimal.valueOf(l));
+                    }
+
+                    pointsRecord.setPointsTypeStr("过期");
+                    mark = "-";
+                    pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
+                    break;
             }
 
             // 设置可用积分(原对象和复制对象都会执行)