Quellcode durchsuchen

添加本地生活抽奖,加积分接口

wangzhijun vor 1 Woche
Ursprung
Commit
369ede7391

+ 2 - 2
nightFragrance-admin/src/main/java/com/ylx/web/controller/massage/ProductSelectionController.java → nightFragrance-admin/src/main/java/com/ylx/web/controller/api/ApiProductSelectionController.java

@@ -1,4 +1,4 @@
-package com.ylx.web.controller.massage;
+package com.ylx.web.controller.api;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ylx.common.core.domain.R;
@@ -19,7 +19,7 @@ import javax.annotation.Resource;
 @Slf4j
 @RestController
 @RequestMapping("/api/products") // 假设的基础路径
-public class ProductSelectionController {
+public class ApiProductSelectionController {
 
     @Resource
     private ProductSelectionService productSelectionService;

+ 31 - 0
nightFragrance-admin/src/main/java/com/ylx/web/controller/api/ApiUserPointController.java

@@ -0,0 +1,31 @@
+package com.ylx.web.controller.api;
+
+import com.ylx.common.core.domain.R;
+import com.ylx.point.domain.dto.ApiAddPointsDTO;
+import com.ylx.point.service.IPointAccountService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/api/user/point")
+@Api(tags = {"用户积分"})
+public class ApiUserPointController {
+
+    @Resource
+    private IPointAccountService pointAccountService;
+
+    @ApiOperation("本地生活抽奖,用户获得积分")
+    @PostMapping(value = "/add")
+    public R addPoints(@RequestBody @Validated ApiAddPointsDTO dto) {
+        this.pointAccountService.apiAddPoints(dto);
+        return R.ok();
+    }
+
+}

+ 21 - 0
nightFragrance-massage/src/main/java/com/ylx/point/domain/dto/ApiAddPointsDTO.java

@@ -0,0 +1,21 @@
+package com.ylx.point.domain.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel("本地生活抽奖加积分DTO")
+public class ApiAddPointsDTO {
+
+    @NotNull(message = "用户id不能为空")
+    @ApiModelProperty(value = "用户id", required = true)
+    private String userId;
+
+    @NotNull(message = "积分变动值不能为空")
+    @ApiModelProperty(value = "积分变动值", required = true)
+    private Integer points;
+
+}

+ 3 - 1
nightFragrance-massage/src/main/java/com/ylx/point/enums/TaskNameEnum.java

@@ -26,7 +26,9 @@ public enum TaskNameEnum {
      */
     GOODS_CONSUME(8, "商城消费"),
 
-    POINT_EXPIRE(9, "积分到期");
+    POINT_EXPIRE(9, "积分到期"),
+
+    LOCAL_LIVE_LOTTERY(10, "抽奖");
 
     private final Integer code;
     private final String info;

+ 4 - 0
nightFragrance-massage/src/main/java/com/ylx/point/service/IPointAccountService.java

@@ -1,5 +1,7 @@
 package com.ylx.point.service;
 
+import com.ylx.point.domain.dto.ApiAddPointsDTO;
+
 public interface IPointAccountService {
 
     /**
@@ -40,4 +42,6 @@ public interface IPointAccountService {
      * @return 变动后的余额
      */
     Integer refundPoints(String openId, int pointsToRefund, String bizOrderNo, String activityName);
+
+    void apiAddPoints(ApiAddPointsDTO dto);
 }

+ 44 - 0
nightFragrance-massage/src/main/java/com/ylx/point/service/impl/PointAccountServiceImpl.java

@@ -1,11 +1,15 @@
 package com.ylx.point.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ylx.common.exception.ServiceException;
+import com.ylx.massage.domain.TWxUser;
+import com.ylx.massage.service.TWxUserService;
 import com.ylx.point.domain.PointActivity;
 import com.ylx.point.domain.PointActivityExpirePolicy;
 import com.ylx.point.domain.PointUserLog;
+import com.ylx.point.domain.dto.ApiAddPointsDTO;
 import com.ylx.point.enums.TaskNameEnum;
 import com.ylx.point.enums.PointActivityExpirePolicyEnum;
 import com.ylx.point.mapper.PointUserLogMapper;
@@ -13,6 +17,7 @@ import com.ylx.point.service.IPointAccountService;
 import com.ylx.point.service.IPointActivityExpirePolicyService;
 import com.ylx.point.service.IPointActivityService;
 import com.ylx.point.service.IPointUserLogService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -22,6 +27,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Optional;
 
+@Slf4j
 @Service
 public class PointAccountServiceImpl implements IPointAccountService {
 
@@ -33,6 +39,8 @@ public class PointAccountServiceImpl implements IPointAccountService {
     private IPointActivityService pointActivityService;
     @Resource
     private IPointActivityExpirePolicyService pointActivityExpirePolicyService;
+    @Resource
+    private TWxUserService wxUserService;
 
     /**
      * 增加用户积分(无账户表版本)
@@ -207,6 +215,42 @@ public class PointAccountServiceImpl implements IPointAccountService {
         return newBalance;
     }
 
+    @Override
+    public void apiAddPoints(ApiAddPointsDTO dto) {
+
+        // 根据userId查询用户信息
+        TWxUser user = this.wxUserService.getById(dto.getUserId());
+        if (ObjUtil.isEmpty(user)) {
+            log.error("用户信息不存在, userId: {}", dto.getUserId());
+            throw new ServiceException("用户信息不存在");
+        }
+
+        String openId = user.getcOpenid();
+
+        // 1. 获取当前余额 (变动前)
+        Integer currentBalance = getBalance(openId);
+
+        // 2. 写入积分流水表 (point_user_log)
+        PointUserLog log = new PointUserLog();
+        log.setOpenId(openId);
+        log.setTaskType(3);
+        log.setPoints(dto.getPoints());
+        log.setOpType(1);        // 1-收入
+        log.setIsExpired(0);
+        log.setActivityName(TaskNameEnum.LOCAL_LIVE_LOTTERY.getInfo());
+        log.setMonth(DateUtil.format(new Date(), "yyyyMM"));
+
+        // 计算变动后余额 (快照)
+        Integer newBalance = currentBalance + dto.getPoints();
+        log.setBalanceAfter(newBalance);
+
+        boolean saveSuccess = pointUserLogService.save(log);
+        if (!saveSuccess) {
+            throw new ServiceException("积分流水记录失败");
+        }
+
+    }
+
     /**
      * 获取用户当前可用积分余额
      * 逻辑:未过期收入总和 + 支出总和(支出为负数,直接相加)