提交 0578e7d0 authored 作者: douxy's avatar douxy

修改重客抽奖小程序,用户信息存储逻辑

上级 ca0f3eb5
......@@ -20,7 +20,7 @@ public class LotteryController {
*/
@PostMapping("/init")
public LotteryRecordDto init(@RequestBody LotteryRecordVo lotteryRecordVo) {
return lotteryService.initLottery(lotteryRecordVo.getLongitude(), lotteryRecordVo.getLatitude(), lotteryRecordVo.getReceiptImageUrl(), lotteryRecordVo.getUserInfo());
return lotteryService.initLottery(lotteryRecordVo.getLongitude(), lotteryRecordVo.getLatitude(), lotteryRecordVo.getReceiptImageUrl(), lotteryRecordVo.getWxOpenId());
}
/**
......@@ -28,7 +28,7 @@ public class LotteryController {
*/
@PostMapping("/draw")
public LotteryRecordDto draw(@RequestBody LotteryRecordVo lotteryRecordVo) {
return lotteryService.doDraw(lotteryRecordVo.getId());
return lotteryService.doDraw(lotteryRecordVo.getId(), lotteryRecordVo.getUserInfo());
}
@PostMapping("/upload-receipt")
......
......@@ -2,6 +2,7 @@ package com.wangxiaolu.promotion.domain.lottery.dao;
import com.wangxiaolu.promotion.domain.lottery.entity.LotteryUserInfo;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryRecordDto;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryUserInfoDto;
/**
* @Author: DouXinYu
......@@ -9,7 +10,7 @@ import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryRecordDto;
* @Description:
*/
public interface LotteryCoreDao {
LotteryRecordDto doDraw(Long recordId);
LotteryRecordDto doDraw(Long recordId, LotteryUserInfoDto userInfo);
LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, LotteryUserInfo userInfo);
LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, String wxOpenId);
}
......@@ -10,6 +10,7 @@ import com.wangxiaolu.promotion.domain.lottery.mapper.LotteryMapper;
import com.wangxiaolu.promotion.domain.lottery.mapper.LotteryUserInfoMapper;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryRecordDto;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryUserInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.utils.TencentMapUtil;
import org.apache.poi.ss.formula.functions.Now;
......@@ -42,7 +43,7 @@ public class LotteryCoreDaoImpl implements LotteryCoreDao {
* 初始化抽奖记录
*/
@Override
public LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, LotteryUserInfo userInfo) {
public LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, String wxOpenId) {
// 腾讯地图逆地址解析
Map<String, String> location = tencentMapUtil.getAddressMapByLngLat(longitude, latitude);
......@@ -56,22 +57,11 @@ public class LotteryCoreDaoImpl implements LotteryCoreDao {
record.setDistrict(location.get("district"));
record.setAddress(location.get("address"));
record.setReceiptImageUrl(receiptImage);
if (Objects.nonNull(userInfo) && userInfo.getOpenId() != null) {
LambdaQueryWrapper<LotteryUserInfo> eq = new LambdaQueryWrapper<LotteryUserInfo>()
.eq(LotteryUserInfo::getOpenId, userInfo.getOpenId());
LotteryUserInfo lotteryUserInfo = lotteryUserInfoMapper.selectOne(eq);
if (lotteryUserInfo == null) {
// 保存用户信息
lotteryUserInfoMapper.insert(userInfo);
record.setWxOpenId(userInfo.getOpenId());
}else {
record.setWxOpenId(userInfo.getOpenId());
}
}
record.setStatus("pending");
record.setWxOpenId(wxOpenId);
lotteryMapper.insert(record);
LotteryRecordDto result = BeanUtils.transitionDto(record, LotteryRecordDto.class);
ArrayList<String> prizeList = new ArrayList<>();
prizeList.add("三等奖");
prizeList.add("一等奖");
......@@ -90,7 +80,7 @@ public class LotteryCoreDaoImpl implements LotteryCoreDao {
* 执行抽奖(动态概率核心)
*/
@Override
public LotteryRecordDto doDraw(Long recordId) {
public LotteryRecordDto doDraw(Long recordId, LotteryUserInfoDto userInfo) {
LotteryRecord record = lotteryMapper.selectById(recordId);
if (record == null) {
throw new ParamException(RCode.LOTTERY_RECORD_NOT_EXIST);
......@@ -100,11 +90,17 @@ public class LotteryCoreDaoImpl implements LotteryCoreDao {
throw new ParamException(RCode.LOTTERY_RECORD_ERROR);
}
LotteryUserInfo lotteryUserInfo = new LotteryUserInfo();
lotteryUserInfo = BeanUtils.transitionDto(userInfo, LotteryUserInfo.class);
lotteryUserInfoMapper.insert(lotteryUserInfo);
// 动态概率
int prizeLevel = simpleDynamicPrize();
record.setPrizeLevel(prizeLevel);
lotteryMapper.updateById(record);
return BeanUtils.transitionDto(record, LotteryRecordDto.class);
LotteryRecordDto result = new LotteryRecordDto();
result = BeanUtils.transitionDto(record, LotteryRecordDto.class);
result.setUserInfo(userInfo);
return result ;
}
/**
......
......@@ -18,6 +18,7 @@ public class LotteryUserInfo {
private String country;
private String province;
private String city;
private String phone;
private Date createTime;
private Date updateTime;
private Integer isDeleted;
......
package com.wangxiaolu.promotion.pojo.lottery.dto;
import lombok.Data;
/**
* @Author: DouXinYu
* @Date: 2026-04-27 17:25
* @Description:
*/
@Data
public class LotteryUserInfoDto {
private Long id;
private String openId;
private String nickName;
private String avatarUrl;
private String gender;
private String language;
private String country;
private String province;
private String city;
private String phone;
}
......@@ -3,6 +3,7 @@ package com.wangxiaolu.promotion.pojo.lottery.vo;
import cn.hutool.system.UserInfo;
import com.wangxiaolu.promotion.domain.lottery.entity.LotteryUserInfo;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryUserInfoDto;
import lombok.Data;
import java.util.List;
......@@ -47,9 +48,14 @@ public class LotteryRecordVo {
*/
private String receiptImageUrl;
/**
* 微信OpenId
*/
private String wxOpenId;
/**
* 用户信息
*/
private LotteryUserInfo userInfo;
private LotteryUserInfoDto userInfo;
}
\ No newline at end of file
package com.wangxiaolu.promotion.service.lottery;
import com.wangxiaolu.promotion.domain.lottery.entity.LotteryUserInfo;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryRecordDto;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryUserInfoDto;
/**
* @Author: DouXinYu
......@@ -9,7 +9,7 @@ import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryRecordDto;
* @Description:
*/
public interface LotteryCoreService {
LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, LotteryUserInfo userInfo);
LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, String wxOpenId);
LotteryRecordDto doDraw(Long recordId);
LotteryRecordDto doDraw(Long recordId, LotteryUserInfoDto userInfo);
}
......@@ -7,6 +7,7 @@ import com.wangxiaolu.promotion.domain.lottery.entity.LotteryUserInfo;
import com.wangxiaolu.promotion.domain.lottery.mapper.LotteryMapper;
import com.wangxiaolu.promotion.exception.ParamException;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryRecordDto;
import com.wangxiaolu.promotion.pojo.lottery.dto.LotteryUserInfoDto;
import com.wangxiaolu.promotion.result.basedata.RCode;
import com.wangxiaolu.promotion.service.lottery.LotteryCoreService;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -42,16 +43,15 @@ public class LotteryCoreServiceImpl implements LotteryCoreService {
* 1. 初始化:保存位置信息
*/
@Override
public LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, LotteryUserInfo userInfo) {
return lotteryCoreDao.initLottery(longitude, latitude, receiptImage, userInfo);
public LotteryRecordDto initLottery(Double longitude, Double latitude, String receiptImage, String wxOpenId) {
return lotteryCoreDao.initLottery(longitude, latitude, receiptImage, wxOpenId);
}
/**
* 2. 抽奖:根据地址动态计算概率
*/
@Override
public LotteryRecordDto doDraw(Long recordId) {
return lotteryCoreDao.doDraw(recordId);
public LotteryRecordDto doDraw(Long recordId, LotteryUserInfoDto userInfo) {
return lotteryCoreDao.doDraw(recordId,userInfo);
}
}
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论