Browse Source

Merge remote-tracking branch 'origin/master'

wangming 1 month ago
parent
commit
e53de4d4e6

+ 67 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/task/ExpiredPointsTask.java

@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.yami.shop.platform.task;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.shop.bean.bo.PayInfoBo;
+import com.yami.shop.bean.enums.OrderStatus;
+import com.yami.shop.bean.model.Order;
+import com.yami.shop.bean.model.OrderItem;
+import com.yami.shop.bean.model.OrderSettlement;
+import com.yami.shop.common.enums.PayType;
+import com.yami.shop.service.*;
+import com.yami.shop.service.hb.IHBOrderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 积分过期定时任务执行
+ */
+@Component("expiredPointsTask")
+public class ExpiredPointsTask {
+
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private PointsRecordService pointsRecordService;
+
+    /**
+     * 过期积分定时任务规则
+     */
+    public void expiredPoints(){
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        // 获取当天0点
+        LocalDateTime todayStartLocal = LocalDate.now().atStartOfDay();
+        String todayStr = todayStartLocal.format(formatter);
+
+        //获取前一天0点
+        LocalDateTime yesterday = LocalDate.now().minusDays(1).atStartOfDay();
+        String yesterdayStr = todayStartLocal.format(formatter);
+        logger.info("积分过期定时任务执行开始");
+        pointsRecordService.expiredPoints(todayStr,yesterdayStr);
+        logger.info("积分过期定时任务执行完成");
+
+    }
+
+}

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

@@ -8,6 +8,7 @@ import com.yami.shop.bean.model.PointsRecord;
 import com.yami.shop.common.util.PageParam;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -23,4 +24,7 @@ public interface PointsRecordMapper extends BaseMapper<PointsRecord> {
     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);
+
+    List<PointsRecord> findByExpiredPoints(@Param("today")Date today,@Param("yesterday") Date yesterday);
+
 }

+ 2 - 0
yami-shop-service/src/main/java/com/yami/shop/service/PointsRecordService.java

@@ -12,4 +12,6 @@ import com.yami.shop.bean.model.PointsRecord;
  */
 public interface PointsRecordService extends IService<PointsRecord> {
 
+    void expiredPoints(String todayStr,String yesterdayStr);
+
 }

+ 71 - 0
yami-shop-service/src/main/java/com/yami/shop/service/impl/PointsRecordServiceImpl.java

@@ -5,8 +5,17 @@ import com.yami.shop.bean.model.PointsRecord;
 import com.yami.shop.dao.PointsRecordMapper;
 import com.yami.shop.service.PointsRecordService;
 import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 积分记录详细 Service实现类
  *
@@ -19,4 +28,66 @@ public class PointsRecordServiceImpl extends ServiceImpl<PointsRecordMapper, Poi
 
     private final PointsRecordMapper pointsRecordMapper;
 
+    /**
+     * 生成所有用户的当天过期定时任务
+     */
+    @Override
+    public void expiredPoints(String todayStr, String yesterdayStr) {
+
+        Date today = getDate(todayStr, true);
+        if (today == null) {
+            throw new ClassCastException("当天定时任务时间类型转换异常");
+        }
+        Date yesterday = getDate(yesterdayStr, false);
+        if (yesterday == null) {
+            throw new ClassCastException("昨天定时任务时间类型转换异常");
+        }
+        List<PointsRecord> pointsRecords= pointsRecordMapper.findByExpiredPoints(today,yesterday);
+        if (pointsRecords==null||pointsRecords.isEmpty()){
+            System.out.println("当前时间没有过期积分,开始时间:"+yesterdayStr+";结束时间:"+todayStr);
+            return;
+        }
+        System.out.println("处理数据长度"+pointsRecords.size());
+        for (PointsRecord pointsRecord : pointsRecords) {
+            pointsRecord.setId(null);
+            Long l = pointsRecordMapper.statisticsPoint(pointsRecord.getUserId(), pointsRecord.getChannelId().intValue());
+            if (l==null){
+                pointsRecord.setCurrentlyAvailablePoints(BigDecimal.ZERO);
+            }else {
+                pointsRecord.setCurrentlyAvailablePoints(BigDecimal.valueOf(l));
+            }
+            pointsRecordMapper.insert(pointsRecord);
+        }
+    }
+
+    /**
+     * @param dateStr string类型的时间
+     * @param type    标识是否为当天
+     * @return
+     */
+    private Date getDate(String dateStr, Boolean type) {
+        Date date = null;
+        // 获取前一天0点
+        if (StringUtils.isNotEmpty(dateStr)) {
+            SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            //将当前时间转换为date类型
+            try {
+                date = sdf1.parse(dateStr);
+            } catch (ParseException e) {
+                return null;
+            }
+        } else {
+            LocalDate today = LocalDate.now();
+            if (type) {
+                // 获取当天0点
+                date = Date.from(today.atStartOfDay(ZoneId.systemDefault()).toInstant());
+            } else {
+                LocalDate yesterday = today.minusDays(1);
+                date = Date.from(yesterday.atStartOfDay(ZoneId.systemDefault()).toInstant());
+            }
+
+        }
+
+        return date;
+    }
 }

+ 44 - 3
yami-shop-service/src/main/resources/mapper/PointsRecordMapper.xml

@@ -67,10 +67,51 @@
         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}
+        select * from (
+
+        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 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 and points_type =3
+
+        ) a
+        order by a.creation_date DESC,a.order_number
+
+    </select>
+    <select id="findByExpiredPoints" resultType="com.yami.shop.bean.model.PointsRecord">
+        select  * from   (
+                             SELECT id,user_id,channel_id,null as order_number,points_id,`code`,parent_code,
+                                    (GREATEST(
+                                             SUM(
+                                                     CASE WHEN expiry_date =#{today} and creation_date &lt; #{today} THEN
+                                                              CASE
+                                                                  WHEN points_type = 1 OR points_type = 3 THEN points
+                                                                  WHEN points_type = 2 THEN -variable_points
+                                                                  ELSE 0
+                                                                  END
+                                                          ELSE 0 END
+                                                 ),
+                                             0
+                                         ) -- 今天之前已过期的  =0
+                                        - GREATEST(
+                                             SUM(
+                                                     CASE WHEN expiry_date = #{yesterday}  and creation_date &lt; #{yesterday} THEN
+                                                              CASE
+                                                                  WHEN points_type = 1 OR points_type = 3 THEN points
+                                                                  WHEN points_type = 2 THEN -variable_points
+                                                                  ELSE 0
+                                                                  END
+                                                          ELSE 0 END
+                                                 ),
+                                             0
+                                         ) -- 昨天之前已过期的
+                                        -
+                                     GREATEST(
+                                             SUM(CASE WHEN points_type = 3 and  creation_date &gt;= #{yesterday}  and creation_date &lt; #{today} and expiry_date = #{yesterday}  THEN points ELSE 0 END),
+                                             0
+                                         ) -- 昨天过期退款的金额
+                                        ) as
+                                        points,variable_points, 4 as points_type,points_audit,expiry_date,expiry_date as creation_date,currently_available_points from tz_points_record   where   expiry_date =#{today}  GROUP BY user_id ,channel_id
+                         ) a where a.points>0
     </select>
 
 </mapper>

+ 56 - 0
yami-shop-user/yami-shop-user-api/src/main/java/com/yami/shop/user/api/controller/TaskSolveController.java

@@ -0,0 +1,56 @@
+package com.yami.shop.user.api.controller;
+/*
+ * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
+ *
+ * https://www.gz-yami.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.bean.SysConfig;
+import com.yami.shop.common.config.Constant;
+import com.yami.shop.common.util.PageParam;
+import com.yami.shop.security.api.util.SecurityUtils;
+import com.yami.shop.service.PointsRecordService;
+import com.yami.shop.service.SysConfigService;
+import com.yami.shop.user.comment.service.UserScoreDetailService;
+import com.yami.shop.user.comment.service.UserScoreLogService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Objects;
+
+/**
+ * 定时任务处理模块
+ *
+ * @author LHD
+ * @version 1.0.0
+ * @since 2019-03-18
+ */
+@RestController
+@RequestMapping("/solve")
+@Api(tags = "定时任务处理模块")
+@AllArgsConstructor
+public class TaskSolveController {
+
+    @Autowired
+    private PointsRecordService pointsRecordService;
+
+    @GetMapping("/scoreInfo")
+    @ApiOperation(value = "定时任务处理模块", notes = "定时任务处理模块")
+    public ResponseEntity<String> scoreInfo(@RequestParam("todayStr") String todayStr,@RequestParam("yesterdayStr") String yesterdayStr) {
+        pointsRecordService.expiredPoints(todayStr, yesterdayStr);
+        return ResponseEntity.ok("处理成功");
+    }
+
+}

+ 7 - 4
yami-shop-user/yami-shop-user-comment/src/main/java/com/yami/shop/user/comment/service/impl/UserScoreDetailServiceImpl.java

@@ -161,8 +161,8 @@ public class UserScoreDetailServiceImpl extends ServiceImpl<UserScoreDetailMappe
             recordsToAdd.add(pointsRecord); // 先添加原对象
             switch (pointsRecord.getPointsType()) {
                 case 1:
-                    int variablePoints = pointsRecord.getVariablePoints() != null ?
-                            pointsRecord.getVariablePoints().intValue() : 0;
+//                    int variablePoints = pointsRecord.getVariablePoints() != null ?
+//                            pointsRecord.getVariablePoints().intValue() : 0;
 //                    int remainingPoints = pointsRecord.getPoints().intValue() - variablePoints;
 //
 //                    if (remainingPoints > 0 && isExpiredToday(pointsRecord.getExpiryDate())) {
@@ -234,8 +234,11 @@ public class UserScoreDetailServiceImpl extends ServiceImpl<UserScoreDetailMappe
                     }else {
                         pointsRecord.setCurrentlyAvailablePoints(BigDecimal.valueOf(l));
                     }
-
-                    pointsRecord.setPointsTypeStr("过期");
+                    if (pointsRecord.getOrderNumber()!=null){
+                        pointsRecord.setPointsTypeStr("退款过期");
+                    }else {
+                        pointsRecord.setPointsTypeStr("过期");
+                    }
                     mark = "-";
                     pointsRecord.setVariablePointsStr(mark + pointsRecord.getPoints());
                     break;