提交 86140a70 authored 作者: 吕本才's avatar 吕本才

feat(weChatMiniProgram): 完善抽奖活动与用户参与功能,查询活动列表、修改地址、参与抽奖等接口

上级 d0788b80
package com.link.hub.controller.bms;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.link.hub.domain.weChatMiniProgram.entity.LotteryActivity;
import com.link.hub.service.weChatMiniProgram.LotteryActivityService;
import com.sfa.common.core.domain.R;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* 后台管理-抽奖活动
*/
@RestController
@RequestMapping("/manager/query")
public class LotteryActivityQueryManagerController {
@Resource
private LotteryActivityService lotteryActivityService;
/**
* 查询活动列表
* 小程序端查询上线的list
*/
@GetMapping("/activity/list")
public List<LotteryActivity> listActivities() {
List<LotteryActivity> activityList = lotteryActivityService.queryActiveActivityList();
return activityList;
}
/**
* 查询活动列表
* 后台管理查询
*/
@GetMapping("/lottery/page")
public R<?> pageActivities(
@RequestParam(required = false) Integer status,
@RequestParam int pageNum,
@RequestParam int pageSize) {
IPage<LotteryActivity> page = lotteryActivityService.queryActiveActivities(status, pageNum, pageSize);
return R.ok(page);
}
/**
* 查询活动详情
*/
@GetMapping("/{id}")
// @ApiOperation("查询活动详情")
public LotteryActivity getActivityDetail(@PathVariable Long id) {
LotteryActivity activity = lotteryActivityService.getDetailById(id);
return activity;
}
/**
* 创建抽奖活动
*/
@PostMapping("/create")
// @ApiOperation("创建抽奖活动")
public Boolean createActivity(@RequestBody LotteryActivity activity) {
boolean result = lotteryActivityService.createActivity(activity);
return result;
}
/**
* 更新抽奖活动
*/
@PutMapping("/update")
// @ApiOperation("更新抽奖活动")
public Boolean updateActivity(@RequestBody LotteryActivity activity) {
boolean result = lotteryActivityService.updateActivity(activity);
return result;
}
}
......@@ -16,6 +16,8 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* 修改接口-参与抽奖、填写抽奖地址、填写用户信息
*
* @author : lvbencai
* @date : 2025-12-10
* @describe : 抽奖查询接口
......@@ -30,7 +32,8 @@ public class LotteryCoreController {
/**
* 用户参与抽奖活动
* 用户参与抽奖活动
*
* @param lotteryParticipateBo
* @return
*/
......@@ -40,7 +43,8 @@ public class LotteryCoreController {
}
/**
* 用户填写抽奖地址信息
* 用户填写-抽奖地址信息
*
* @param lotteryParticipateBo
* @return
*/
......@@ -50,7 +54,8 @@ public class LotteryCoreController {
}
/**
* 用户填写抽奖地址信息
* 用户填写用户头像信息
*
* @param mpUserBo
* @return
*/
......
package com.link.hub.controller.mp.query;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.link.hub.domain.weChatMiniProgram.entity.LotteryActivity;
import com.link.hub.service.weChatMiniProgram.LotteryActivityService;
import com.sfa.common.core.domain.R;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
......@@ -16,7 +14,6 @@ import java.util.List;
@RestController
@RequestMapping("/miniProgram/query")
public class LotteryActivityQueryController {
@Resource
private LotteryActivityService lotteryActivityService;
......@@ -25,56 +22,18 @@ public class LotteryActivityQueryController {
* 小程序端查询上线的list
*/
@GetMapping("/lottery/list")
public List<LotteryActivity> listActivities(
@RequestParam(required = false) Integer status,
@RequestParam int pageNum,
@RequestParam int pageSize) {
List<LotteryActivity> activityList = lotteryActivityService.queryActiveActivityList(status);
public List<LotteryActivity> listActivities() {
List<LotteryActivity> activityList = lotteryActivityService.queryActiveActivityList();
return activityList;
}
/**
* 查询活动列表
* 后台管理查询
*/
@GetMapping("/lottery/page")
public R<?> pageActivities(
@RequestParam(required = false) Integer status,
@RequestParam int pageNum,
@RequestParam int pageSize) {
IPage<LotteryActivity> page = lotteryActivityService.queryActiveActivities(status, pageNum, pageSize);
return R.ok(page);
}
/**
* 查询活动详情
*/
@GetMapping("/{id}")
// @ApiOperation("查询活动详情")
@GetMapping("/activity/info/{id}")
public LotteryActivity getActivityDetail(@PathVariable Long id) {
LotteryActivity activity = lotteryActivityService.getDetailById(id);
return activity;
}
/**
* 创建抽奖活动
*/
@PostMapping("/create")
// @ApiOperation("创建抽奖活动")
public Boolean createActivity(@RequestBody LotteryActivity activity) {
boolean result = lotteryActivityService.createActivity(activity);
return result;
}
/**
* 更新抽奖活动
*/
@PutMapping("/update")
// @ApiOperation("更新抽奖活动")
public Boolean updateActivity(@RequestBody LotteryActivity activity) {
boolean result = lotteryActivityService.updateActivity(activity);
return result;
}
}
......@@ -11,6 +11,7 @@ import javax.annotation.Resource;
import java.util.List;
/**
* 抽奖查询接口
* @author : lvbencai
* @date : 2025-12-10
* @describe : 抽奖查询接口
......@@ -23,7 +24,7 @@ public class LotteryParticipateQueryController {
/**
* 查询抽奖列表信息
* 查询抽奖公示信息-包含抽奖列表和详情
*/
@RequestMapping("/lottery/announcement")
public List<LotteryVo> announcementList() {
......@@ -36,17 +37,17 @@ public class LotteryParticipateQueryController {
* 查询抽奖信息
*/
@GetMapping("/lottery/info")
public LotteryVo info(Long lotteryId) {
public LotteryVo info(Long activityId) {
// 查询活动列表
LotteryVo lotteryVo = lotteryParticipateService.queryLotteryInfo(lotteryId);
LotteryVo lotteryVo = lotteryParticipateService.queryLotteryInfo(activityId);
return lotteryVo;
}
/**
* 查询抽奖历史记录
* 我的-查询抽奖历史记录
*/
@RequestMapping("/record")
@GetMapping("/lottery/record")
public List<MyLotteryVo> record() {
// 查询活动列表
List<MyLotteryVo> lotteryVos = lotteryParticipateService.queryMyRecord();
......
......@@ -39,7 +39,7 @@ public class WechatMiniProgramController {
*/
@GetMapping("/query/isSubscribe")
public Boolean isSubscribe(String openid) {
return wechatOfficeAccountService.isSubscribe(openid);
return wechatOfficeAccountService.checkIsSubscribe(openid);
}
......
......@@ -34,4 +34,5 @@ public interface LotteryActivityDao {
LotteryActivity selectById(Long activityId);
List<LotteryActivity> queryActiveActivityList();
}
......@@ -61,9 +61,9 @@ public interface LotteryParticipateDao {
long countParticipateByActivity(Long activityId);
LotteryDto queryLotteryInfo(Long lotteryId);
boolean hasWinning(Long activityId, Long userId);
List<LotteryVo> announcementList();
LotteryDto queryLotteryInfo(LotteryDto dto);
}
......@@ -48,4 +48,9 @@ public interface LotteryWinningDao {
* 查询未领取奖品记录
*/
List<LotteryWinning> queryUnreceivedPrizes(Long userId);
boolean hasWinning(Long activityId, Long userId);
LotteryWinning getWinningDetail(Long activityId, Long userId);
}
......@@ -8,10 +8,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.link.hub.domain.weChatMiniProgram.dao.LotteryActivityDao;
import com.link.hub.domain.weChatMiniProgram.entity.LotteryActivity;
import com.link.hub.domain.weChatMiniProgram.enums.ActivityStatus;
import com.link.hub.domain.weChatMiniProgram.mapper.LotteryActivityMapper;
import com.link.hub.domain.weChatMiniProgram.wq.LotteryWq;
import com.link.hub.pojo.mp.dto.LotteryActivityRelDto;
import com.link.hub.pojo.mp.dto.MyLotteryDto;
import com.sfa.common.core.utils.bean.BeanUtils;
import org.springframework.stereotype.Repository;
......@@ -42,11 +42,11 @@ public class LotteryActivityDaoImpl implements LotteryActivityDao {
new QueryWrapper<LotteryActivity>()
.lambda()
// 状态为进行中
.eq(LotteryActivity::getStatus, 1)
.eq(LotteryActivity::getStatus, ActivityStatus.ONGOING.getStatus())
// 开始时间 <= 当前时间
.ge(LotteryActivity::getStartTime, LocalDateTime.now())
.le(LotteryActivity::getStartTime, LocalDateTime.now())
// 结束时间 >= 当前时间
.le(LotteryActivity::getEndTime, LocalDateTime.now())
.ge(LotteryActivity::getEndTime, LocalDateTime.now())
// 未删除
.eq(LotteryActivity::getDeleteFlag, 0)
);
......@@ -60,9 +60,9 @@ public class LotteryActivityDaoImpl implements LotteryActivityDao {
.lambda()
.eq(ObjectUtil.isNotEmpty(wq.getStatus()), LotteryActivity::getStatus, wq.getStatus())
// 开始时间 <= 当前时间
// .ge(LotteryActivity::getStartTime, LocalDateTime.now())
.le(LotteryActivity::getStartTime, LocalDateTime.now())
// 结束时间 >= 当前时间
// .le(LotteryActivity::getEndTime, LocalDateTime.now())
.ge(LotteryActivity::getEndTime, LocalDateTime.now())
.eq(LotteryActivity::getDeleteFlag, 0)
.orderByDesc(LotteryActivity::getCreateTime)
);
......@@ -102,6 +102,29 @@ public class LotteryActivityDaoImpl implements LotteryActivityDao {
}
/**
* 查询活动列表
* @return
*/
@Override
public List<LotteryActivity> queryActiveActivityList() {
// 调用 MyBatis Mapper 方法
List<LotteryActivity> lotteryActivities = lotteryActivityMapper.selectList(
new QueryWrapper<LotteryActivity>()
.lambda()
// 状态为进行中
.eq(LotteryActivity::getStatus, ActivityStatus.ONGOING.getStatus())
// 开始时间 <= 当前时间
.le(LotteryActivity::getStartTime, LocalDateTime.now())
// 结束时间 >= 当前时间
.ge(LotteryActivity::getEndTime, LocalDateTime.now())
// 未删除
.eq(LotteryActivity::getDeleteFlag, 0)
.orderByDesc(LotteryActivity::getCreateTime)
);
return lotteryActivities;
}
private Wrapper<LotteryActivity> getWrapper(LotteryWq wq) {
LambdaQueryWrapper<LotteryActivity> lotteryActivityLambdaQueryWrapper = new LambdaQueryWrapper<>();
......
package com.link.hub.domain.weChatMiniProgram.dao.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.link.hub.domain.weChatMiniProgram.dao.LotteryParticipateDao;
......@@ -32,21 +33,21 @@ public class LotteryParticipateDaoImpl implements LotteryParticipateDao {
@Override
public List<LotteryParticipate> queryList(LotteryParticipateWq wq) {
QueryWrapper<LotteryParticipate> wrapper = new QueryWrapper<>();
LambdaQueryWrapper<LotteryParticipate> wrapper = new LambdaQueryWrapper<>();
if (wq.getActivityId() != null) {
wrapper.eq("activity_id", wq.getActivityId());
wrapper.eq(LotteryParticipate::getActivityId, wq.getActivityId());
}
if (wq.getUserId() != null) {
wrapper.eq("user_id", wq.getUserId());
wrapper.eq(LotteryParticipate::getUserId, wq.getUserId());
}
if (wq.getParticipateTimeStart() != null && wq.getParticipateTimeEnd() != null) {
wrapper.between("participate_time", wq.getParticipateTimeStart(), wq.getParticipateTimeEnd());
wrapper.between(LotteryParticipate::getParticipateTime, wq.getParticipateTimeStart(), wq.getParticipateTimeEnd());
}
if (wq.getSource() != null) {
wrapper.eq("source", wq.getSource());
wrapper.eq(LotteryParticipate::getSource, wq.getSource());
}
wrapper.eq("delete_flag", wq.getDeleteFlag());
wrapper.eq(LotteryParticipate::getDeleteFlag, wq.getDeleteFlag());
return lotteryParticipateMapper.selectList(wrapper);
}
......@@ -127,27 +128,21 @@ public class LotteryParticipateDaoImpl implements LotteryParticipateDao {
* @return
*/
@Override
public LotteryDto queryLotteryInfo(Long lotteryId) {
public LotteryDto queryLotteryInfo(LotteryDto dto) {
// 查询我的抽奖信息
LambdaQueryWrapper<LotteryParticipate> wrapper =new LambdaQueryWrapper<LotteryParticipate>();
wrapper.eq(LotteryParticipate::getId, lotteryId);
wrapper.eq(ObjectUtil.isNotEmpty(dto.getActivityId()),LotteryParticipate::getActivityId, dto.getActivityId());
wrapper.eq(LotteryParticipate::getUserId, dto.getUserId());
LotteryParticipate lotteryParticipate = lotteryParticipateMapper.selectOne(wrapper);
if (lotteryParticipate == null) {
return null;
}
LotteryDto myLotteryDto = LotteryDto.convert(lotteryParticipate);
return myLotteryDto;
}
@Override
public boolean hasWinning(Long activityId, Long userId) {
// 获取中奖信息
LambdaQueryWrapper<LotteryParticipate> wrapper =new LambdaQueryWrapper<LotteryParticipate>();
wrapper.eq(LotteryParticipate::getActivityId, activityId)
.eq(LotteryParticipate::getUserId, userId)
.eq(LotteryParticipate::getLotteryStatus, 1);
return false;
}
@Override
public List<LotteryVo> announcementList() {
......
......@@ -86,4 +86,25 @@ public class LotteryWinningDaoImpl implements LotteryWinningDao {
.eq(LotteryWinning::getDeleteFlag, 0);
return lotteryWinningMapper.selectList(wrapper);
}
@Override
public boolean hasWinning(Long activityId, Long userId) {
// 获取
LambdaQueryWrapper<LotteryWinning> wrapper =new LambdaQueryWrapper<LotteryWinning>();
wrapper.eq(LotteryWinning::getActivityId, activityId)
.eq(LotteryWinning::getUserId, userId);
if (lotteryWinningMapper.selectCount(wrapper) > 0) {
return true;
}
return false;
}
@Override
public LotteryWinning getWinningDetail(Long activityId, Long userId) {
LambdaQueryWrapper<LotteryWinning> wrapper =new LambdaQueryWrapper<LotteryWinning>();
wrapper.eq(LotteryWinning::getActivityId, activityId)
.eq(LotteryWinning::getUserId, userId)
.eq(LotteryWinning::getDeleteFlag, 0);
return lotteryWinningMapper.selectOne(wrapper);
}
}
......@@ -3,10 +3,11 @@ package com.link.hub.domain.weChatMiniProgram.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.Map;
/**
* 抽奖活动配置实体类
......@@ -33,12 +34,20 @@ public class LotteryActivity {
/**
* 活动开始时间
*/
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime;
/**
* 活动结束时间
*/
private Date endTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime endTime;
/**
* 开奖时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime lotteryTime;
/**
* 活动状态:0-未开始 1-进行中 2-已结束 3-已下架
......@@ -60,11 +69,6 @@ public class LotteryActivity {
*/
private Long totalParticipate;
/**
* 扩展字段(JSON格式)
*/
private Map<String, Object> extJson;
/**
* 创建时间
*/
......@@ -77,6 +81,7 @@ public class LotteryActivity {
// @TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
/**
* 创建人
*/
......
......@@ -21,6 +21,16 @@ public class LotteryParticipate {
@TableId(type = IdType.AUTO)
private Long id;
/**
* 活动标题
*/
private String title;
/**
* 活动开奖时间
*/
private LocalDateTime lotteryTime;
/**
* 关联活动ID
*/
......@@ -32,8 +42,9 @@ public class LotteryParticipate {
private Long userId;
/**
* 抽奖状态
* 0-未参与 1-已参与(待开奖) 2-未中奖, 3-已中奖 4、未填写收获地址 5已填写-待发货 6已发货
*/
* 1 已参与(待开奖) 2未中奖, 3已中奖 -未填写收获地址 4已中奖-已填写待发货 5已中奖-已发货 6已中奖-未领奖
* @see com.link.hub.domain.weChatMiniProgram.enums.LotteryStatusEnum
*/
private Integer lotteryStatus;
/**
......@@ -89,12 +100,14 @@ public class LotteryParticipate {
lotteryParticipate.setActivityId(dto.getActivityId());
lotteryParticipate.setUserId(dto.getUserId());
// 默认状态为1 已参与待开奖
// 默认状态为1 已参与待开奖
lotteryParticipate.setLotteryStatus(1);
lotteryParticipate.setParticipateTime(LocalDateTime.now());
lotteryParticipate.setIpAddress(dto.getIpAddress());
lotteryParticipate.setDeviceInfo(dto.getDeviceInfo());
lotteryParticipate.setSource(dto.getSource());
lotteryParticipate.setTitle(dto.getTitle());
lotteryParticipate.setLotteryTime(dto.getLotteryTime());
return lotteryParticipate;
}
}
......@@ -42,16 +42,15 @@ public class LotteryWinning {
* 是否领奖:0-未领奖 1-已领奖 2-已作废
*/
private Integer isReceive;
/**
* 领奖时间
* 领奖物流单号
*/
private LocalDateTime receiveTime;
private String logisticsNumber;
/**
* 扩展字段(如领奖地址、备注)
* 领奖时间
*/
private String extJson;
private LocalDateTime receiveTime;
/**
* 创建时间
......@@ -81,11 +80,19 @@ public class LotteryWinning {
@TableLogic
private Integer deleteFlag;
/**
* 中奖物品名称
*/
private String prizeName;
/**
* 中奖等级:1-一等奖 2-二等奖 3-三等奖
*/
private Integer winningLevel;
/**
* 中奖奖品图片URL
*/
private String prizeImg;
public static LotteryWinning convert(LotteryWinningDto lotteryWinningDto) {
if (lotteryWinningDto == null) {
return null;
}
LotteryWinning lotteryWinning = new LotteryWinning();
lotteryWinning.setId(lotteryWinningDto.getId());
......@@ -95,7 +102,6 @@ public class LotteryWinning {
lotteryWinning.setWinningTime(lotteryWinningDto.getWinningTime());
lotteryWinning.setIsReceive(lotteryWinningDto.getIsReceive());
lotteryWinning.setReceiveTime(lotteryWinningDto.getReceiveTime());
lotteryWinning.setExtJson(lotteryWinningDto.getExtJson());
return lotteryWinning;
}
}
......
package com.link.hub.domain.weChatMiniProgram.entity;
import cn.hutool.crypto.digest.DigestUtil;
import com.baomidou.mybatisplus.annotation.*;
import com.link.hub.pojo.mp.bo.LotteryWinningAddresssBo;
import com.sfa.common.security.utils.SecurityUtils;
import lombok.Data;
import java.time.LocalDateTime;
/**
......@@ -31,6 +34,10 @@ public class LotteryWinningAddress {
* 关联用户ID(便于查询用户所有地址)
*/
private Long userId;
/**
* 物流单号
*/
private String logisticsNumber;
/**
* 收货地址-省
......@@ -41,6 +48,10 @@ public class LotteryWinningAddress {
* 收货地址-市
*/
private String city;
/**
* 收货地址-区县
*/
private String district;
/**
* 收货地址-详细地址(区/街道/门牌号)
......@@ -92,16 +103,22 @@ public class LotteryWinningAddress {
public static LotteryWinningAddress create(LotteryWinningAddresssBo lotteryParticipateBo) {
LotteryWinningAddress address= new LotteryWinningAddress();
// 编辑时有id
address.setId(lotteryParticipateBo.getId());
// 编辑时有id 则为修改操作
if (lotteryParticipateBo.getId() != null) {
address.setId(lotteryParticipateBo.getId());
}
address.setActivityId(lotteryParticipateBo.getActivityId());
address.setUserId(lotteryParticipateBo.getUserId());
address.setUserId(SecurityUtils.getUserId());
address.setProvince(lotteryParticipateBo.getProvince());
address.setCity(lotteryParticipateBo.getCity());
address.setDistrict(lotteryParticipateBo.getDistrict());
address.setDetailAddress(lotteryParticipateBo.getDetailAddress());
address.setReceiverName(lotteryParticipateBo.getReceiverName());
address.setReceiverPhone(lotteryParticipateBo.getReceiverPhone());
// 手机号加密存储
String boReceiverPhone = lotteryParticipateBo.getReceiverPhone();
String encryptedPhone = DigestUtil.md5(boReceiverPhone, "UTF-8").toString();
address.setReceiverPhone(encryptedPhone);
address.setIsDefault(lotteryParticipateBo.getIsDefault());
return address;
......
package com.link.hub.domain.weChatMiniProgram.enums;
/**
* 活动状态
*/
//@Data
public enum ActivityStatus {
/**
* 待开始
*/
WAITING(0),
/**
* 进行中
*/
ONGOING(1),
/**
* 已结束
*/
ENDED(2);
private Integer status;
private ActivityStatus(Integer status) {
this.status = status;
}
public Integer getStatus() {
return status;
}
}
package com.link.hub.domain.weChatMiniProgram.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 抽奖活动状态枚举
*/
@Getter
@AllArgsConstructor
public enum LotteryStatusEnum {
/**
* 0未参与 1 已参与(待开奖) 2未中奖
* 3已中奖-未填写收获地址 4已中奖-已填写待发货
* 5已中奖-已发货 6已中奖-未领奖 7已中奖-已领奖
*/
NOT_PARTICIPATED(0, "未参与", false),
PARTICIPATED_PENDING(1, "已参与(待开奖)", false),
NOT_WIN(2, "未中奖", false),
WIN_NO_ADDRESS(3, "已中奖-未填写收获地址", true),
WIN_PENDING_SHIPMENT(4, "已中奖-已填写待发货", true),
WIN_SHIPPED(5, "已中奖-已发货", true),
WIN_NOT_RECEIVED(6, "已中奖-未领奖", true);
/**
* 状态码
*/
private final Integer code;
/**
* 状态描述
*/
private final String desc;
/**
* 是否中奖
*/
private final boolean isWinning;
/**
* 根据状态码获取枚举
*/
public static LotteryStatusEnum getEnumByCode(Integer code) {
for (LotteryStatusEnum status : values()) {
if (status.code.equals(code)) {
return status;
}
}
return null;
}
}
......@@ -132,6 +132,7 @@ public class WechatOfficialAccountUserDaoImpl implements WechatOfficialAccountUs
private LambdaQueryWrapper<WechatOfficialAccountUser> buildWrapper(WeChatOaUserQueryWq wq) {
LambdaQueryWrapper<WechatOfficialAccountUser> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ObjectUtil.isNotEmpty(wq.getUnionid()),WechatOfficialAccountUser::getUnionid, wq.getUnionid());
queryWrapper.eq(ObjectUtil.isNotEmpty(wq.getOpenid()),WechatOfficialAccountUser::getOpenid, wq.getOpenid());
return queryWrapper;
}
......
......@@ -3,6 +3,7 @@ package com.link.hub.pojo.mp.bo;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 用户参与抽奖BO类
......@@ -15,6 +16,18 @@ public class LotteryParticipateBo {
@NotNull(message = "活动ID不能为空")
private Long activityId;
/**
* 活动标题
*/
private String title;
/**
* 活动开奖时间
*/
private LocalDateTime lotteryTime;
/**
* 关联用户ID
*/
......
......@@ -17,12 +17,6 @@ public class LotteryWinningAddresssBo {
@NotNull(message = "活动ID不能为空")
private Long activityId;
/**
* 关联用户ID
*/
@NotNull(message = "用户ID不能为空")
private Long userId;
/**
* 收货地址-省
*/
......
......@@ -8,6 +8,7 @@ import com.sfa.common.security.utils.SecurityUtils;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
/**
* 用户参与抽奖记录DTO类
......@@ -40,16 +41,28 @@ public class LotteryParticipateDto {
* 参与来源:1微信小程序2抖音小程序
*/
private Integer source;
/**
* 活动标题
*/
private String title;
/**
* 活动开奖时间
*/
private LocalDateTime lotteryTime;
// 核心业务规则:创建订单(封装状态初始化、金额计算)
public static LotteryParticipateDto create(LotteryParticipateBo participateBo ) {
public static LotteryParticipateDto convert(LotteryParticipateBo participateBo ) {
LotteryParticipateDto dto = new LotteryParticipateDto();
dto.setActivityId(participateBo.getActivityId());
dto.setUserId(SecurityUtils.getUserId());
dto.setSource(ObjectUtil.defaultIfNull(participateBo.getSource(), SourceEnum.WECHAT_MINI_PROGRAM.getCode()));
dto.setIpAddress(IpUtils.getIpAddr());
dto.setLotteryTime(participateBo.getLotteryTime());
dto.setTitle(participateBo.getTitle());
return dto;
}
}
......@@ -45,10 +45,7 @@ public class LotteryWinningDto {
*/
private LocalDateTime receiveTime;
/**
* 扩展字段(如领奖地址、备注)
*/
private String extJson;
/**
* 创建时间
......@@ -91,7 +88,6 @@ public class LotteryWinningDto {
dto.setWinningTime(entity.getWinningTime());
dto.setIsReceive(entity.getIsReceive());
dto.setReceiveTime(entity.getReceiveTime());
dto.setExtJson(entity.getExtJson());
dto.setCreateTime(entity.getCreateTime());
dto.setUpdateTime(entity.getUpdateTime());
dto.setCreateBy(entity.getCreateBy());
......@@ -117,7 +113,6 @@ public class LotteryWinningDto {
entity.setWinningTime(dto.getWinningTime());
entity.setIsReceive(dto.getIsReceive());
entity.setReceiveTime(dto.getReceiveTime());
entity.setExtJson(dto.getExtJson());
entity.setCreateTime(dto.getCreateTime());
entity.setUpdateTime(dto.getUpdateTime());
entity.setCreateBy(dto.getCreateBy());
......
package com.link.hub.pojo.mp.vo;
import com.link.hub.domain.weChatMiniProgram.entity.LotteryParticipate;
import com.link.hub.domain.weChatMiniProgram.enums.SourceEnum;
import lombok.Data;
import java.time.LocalDateTime;
......@@ -38,4 +40,13 @@ public class LotteryParticipateVo {
* 参与来源名称
*/
private String sourceName;
public static LotteryParticipateVo convert(LotteryParticipate participate) {
LotteryParticipateVo vo = new LotteryParticipateVo();
vo.setId(participate.getId());
vo.setActivityId(participate.getActivityId());
vo.setParticipateTime(participate.getParticipateTime());
vo.setSourceName(SourceEnum.getSourceName(participate.getSource()));
return vo;
}
}
......@@ -34,6 +34,10 @@ public class LotteryVo {
private Integer status;
/**
* 未参与抽奖
* @return
*/
public static LotteryVo convertNoParticipate() {
LotteryVo lotteryVo = new LotteryVo();
lotteryVo.setStatus(0);
......
......@@ -2,7 +2,8 @@ package com.link.hub.pojo.mp.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.link.hub.pojo.mp.dto.MyLotteryDto;
import com.link.hub.domain.weChatMiniProgram.entity.LotteryParticipate;
import com.link.hub.domain.weChatMiniProgram.enums.LotteryStatusEnum;
import lombok.Data;
import java.time.LocalDateTime;
......@@ -14,7 +15,7 @@ public class MyLotteryVo {
*/
private Long id;
/**
* 抽奖名称
* 抽奖活动名称
*/
private String title;
/**
......@@ -37,7 +38,6 @@ public class MyLotteryVo {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime endTime;
/**
* 关联活动ID
*/
......@@ -49,26 +49,46 @@ public class MyLotteryVo {
private Long userId;
/**
* 抽奖状态
* 0-未参与 1-已参与(待开奖) 2-未中奖, 3-已中奖 4、未填写收获地址 5已填写-待发货 6已发货
* 0未参与 1 已参与(待开奖) 2未中奖, 3已中奖 -未填写收获地址 4已中奖-已填写待发货 5已中奖-已发货 6已中奖-未领奖
* @see LotteryStatusEnum
*/
private Integer lotteryStatus;
public static MyLotteryVo convert(MyLotteryDto myLotteryDto) {
/**
* 开奖时间
* @param participate
* @return
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime lotteryTime;
/**
* 中奖奖品名称
*/
private String lotteryPrizeName;
/**
* 中奖奖品图片
*/
private String lotteryPrizeImg;
/**
* 中奖等级
*/
private Integer winningLevel;
/**
* 物流单号
*/
private String logisticsNumber;
public static MyLotteryVo convert4LotteryParticipate(LotteryParticipate participate) {
MyLotteryVo vo = new MyLotteryVo();
vo.setId(participate.getId());
vo.setActivityId(participate.getActivityId());
vo.setUserId(participate.getUserId());
vo.setLotteryStatus(participate.getLotteryStatus());
vo.setLotteryTime(participate.getLotteryTime());
vo.setTitle(participate.getTitle());
MyLotteryVo myLotteryVo = new MyLotteryVo();
if(myLotteryDto == null){
}
myLotteryVo.setId(myLotteryDto.getId());
myLotteryVo.setTitle(myLotteryDto.getTitle());
myLotteryVo.setDescription(myLotteryDto.getDescription());
myLotteryVo.setCoverImg(myLotteryDto.getCoverImg());
myLotteryVo.setStartTime(myLotteryDto.getStartTime());
myLotteryVo.setEndTime(myLotteryDto.getEndTime());
myLotteryVo.setActivityId(myLotteryDto.getActivityId());
myLotteryVo.setUserId(myLotteryDto.getUserId());
myLotteryVo.setLotteryStatus(myLotteryDto.getLotteryStatus());
myLotteryVo.setCoverImg(myLotteryDto.getCoverImg());
return myLotteryVo ;
return vo;
}
}
......@@ -5,7 +5,7 @@ import com.link.hub.pojo.oa.dto.WechatOaUserDto;
import java.util.List;
public interface WechatOfficeAccountService {
Boolean isSubscribe(String openid);
Boolean checkIsSubscribe(String openid);
List<String> getUserList(String nextOpenId);
......
......@@ -14,6 +14,7 @@ import com.link.hub.service.officeAccount.WechatOfficeAccountService;
import com.link.hub.service.officeAccount.WechatOfficialAccountUserService;
import com.link.hub.service.weChatMiniProgram.WechatMiniProgramUserService;
import com.link.hub.util.WeChatPlatFormUtils;
import com.sfa.common.core.exception.ServiceException;
import com.sfa.common.redis.service.RedisService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
......@@ -42,9 +43,13 @@ public class WechatOfficeAccountServiceServiceImpl implements WechatOfficeAccoun
private WeChatOfficeAccountConfig accountConfig;
/**
* 检查用户是否关注公众号
* @param openid
* @return
*/
@Override
public Boolean isSubscribe(String openid) {
public Boolean checkIsSubscribe(String openid) {
// 使用 openid openid查询小程序用户
WeChatMpUserDto dto = new WeChatMpUserDto();
......@@ -52,18 +57,20 @@ public class WechatOfficeAccountServiceServiceImpl implements WechatOfficeAccoun
WechatMiniProgramUser user = miniProgramUserService.queryMiniProgramUserOne(dto);
log.info("unionid: {}", user);
// // 使用unionid查询微信公众号用户
if (user == null || user.getUnionid() == null) {
log.error("用户未关联小程序,openid: {}", openid);
throw new ServiceException("小程序用户错误");
}
// 使用unionid查询微信公众号用户
WeChatOaUserQueryDto oaUserDto = new WeChatOaUserQueryDto();
oaUserDto.setUnionid(user.getUnionid());
WechatOfficialAccountUser wechatOfficialAccountUser = oaUserService.selectOne(oaUserDto);
if (wechatOfficialAccountUser == null) {
log.error("用户还未关注公众号,openid: {},unionid: {}", openid,user.getUnionid());
// throw new ServiceException("用户还未关注公众号");
return false;
}
if(wechatOfficialAccountUser.getSubscribeStatus() == 0){
log.error("用户未关注公众号,状态是未关注,openid: {},unionid: {}", openid,user.getUnionid());
// throw new ServiceException("用户未关联公众号");
return false;
}
......
......@@ -112,6 +112,9 @@ public class WechatOfficialAccountUserServiceImpl
@Override
public WechatOfficialAccountUser selectOne(WeChatOaUserQueryDto oaUserDto) {
if (oaUserDto == null || (oaUserDto.getOpenid() == null && oaUserDto.getUnionid() == null)) {
return null;
}
WeChatOaUserQueryWq wq = new WeChatOaUserQueryWq();
wq.setUnionid(oaUserDto.getUnionid());
......
......@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.link.hub.domain.weChatMiniProgram.entity.LotteryActivity;
import com.link.hub.pojo.mp.vo.LotteryVo;
import com.link.hub.pojo.mp.vo.MyLotteryVo;
import java.util.List;
......@@ -41,7 +40,7 @@ public interface LotteryActivityService extends IService<LotteryActivity> {
* @return 是否成功
*/
boolean updateActivity(LotteryActivity activity);
List<LotteryActivity> queryActiveActivityList(Integer status);
List<LotteryActivity> queryActiveActivityList();
List<LotteryVo> queryList();
......
......@@ -49,7 +49,7 @@ public interface LotteryParticipateService extends IService<LotteryParticipate>
List<MyLotteryVo> queryMyRecord();
LotteryVo queryLotteryInfo(Long lotteryId);
LotteryVo queryLotteryInfo(Long activityId);
List<LotteryVo> queryList();
......
......@@ -64,5 +64,5 @@ public interface LotteryWinningAddressService extends IService<LotteryWinningAdd
*/
LotteryWinningAddress getDefaultAddress(Long userId);
LotteryWinningAddress hasAddressFilled(Long activityId, Long userId);
LotteryWinningAddress selectAddressOne(Long activityId, Long userId);
}
......@@ -55,4 +55,7 @@ public interface LotteryWinningService {
*/
boolean claimPrize(Long winningId);
boolean hasWinning(Long activityId, Long userId);
LotteryWinning selectWinningDetail(Long activityId, Long userId);
}
......@@ -12,7 +12,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
......@@ -30,8 +29,8 @@ public class LotteryActivityServiceImpl extends ServiceImpl<LotteryActivityMappe
LambdaQueryWrapper<LotteryActivity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(LotteryActivity::getDeleteFlag, 0)
.eq(status != null, LotteryActivity::getStatus, status)
.ge(LotteryActivity::getStartTime, new Date())
.le(LotteryActivity::getEndTime, new Date())
// .ge(LotteryActivity::getStartTime, new Date())
// .le(LotteryActivity::getEndTime, new Date())
.orderByDesc(LotteryActivity::getStartTime);
return lotteryActivityDao.selectPage(page, wrapper);
}
......@@ -63,14 +62,13 @@ public class LotteryActivityServiceImpl extends ServiceImpl<LotteryActivityMappe
/**
* 查询活动列表
* @param status
* @return
*/
@Override
public List<LotteryActivity> queryActiveActivityList(Integer status) {
public List<LotteryActivity> queryActiveActivityList() {
// 小程序端查询列表
return null;
List<LotteryActivity> list = lotteryActivityDao.queryActiveActivityList();
return list;
}
......
......@@ -41,16 +41,8 @@ public class LotteryWinningAddressServiceImpl extends ServiceImpl<LotteryWinning
@Transactional(rollbackFor = Exception.class)
public boolean saveOrUpdateAddress(LotteryWinningAddress address) {
if (address.getId() == null) {
// 新增地址时,如果是默认地址,则取消其他默认地址
// if (address.getIsDefault() != null && address.getIsDefault() == 1) {
// cancelOtherDefaultAddresses(address.getUserId());
// }
return lotteryWinningAddressDao.saveAddress(address);
} else {
// 更新地址时,如果是设置为默认地址,则取消其他默认地址
// if (address.getIsDefault() != null && address.getIsDefault() == 1) {
// cancelOtherDefaultAddresses(address.getUserId());
// }
return lotteryWinningAddressDao.updateAddress(address);
}
}
......@@ -69,9 +61,6 @@ public class LotteryWinningAddressServiceImpl extends ServiceImpl<LotteryWinning
@Override
@Transactional(rollbackFor = Exception.class)
public boolean setDefaultAddress(Long userId, Long addressId) {
// 先取消该用户的所有默认地址
cancelOtherDefaultAddresses(userId);
// 设置指定地址为默认地址
LotteryWinningAddress address = new LotteryWinningAddress();
address.setId(addressId);
......@@ -85,7 +74,7 @@ public class LotteryWinningAddressServiceImpl extends ServiceImpl<LotteryWinning
}
@Override
public LotteryWinningAddress hasAddressFilled(Long activityId, Long userId) {
public LotteryWinningAddress selectAddressOne(Long activityId, Long userId) {
LotteryWinningAddressWq wq = new LotteryWinningAddressWq();
wq.setActivityId(activityId);
wq.setUserId(userId);
......@@ -93,13 +82,5 @@ public class LotteryWinningAddressServiceImpl extends ServiceImpl<LotteryWinning
return address;
}
/**
* 取消用户其他默认地址
* @param userId 用户ID
*/
private void cancelOtherDefaultAddresses(Long userId) {
// 这里应该通过DAO更新数据库中的其他地址为非默认状态
// 实现细节根据具体业务需求确定
}
}
......@@ -110,4 +110,14 @@ public class LotteryWinningServiceImpl implements LotteryWinningService {
winning.setReceiveTime(LocalDateTime.now());
return lotteryWinningDao.updateById(winning) > 0;
}
@Override
public boolean hasWinning(Long activityId, Long userId) {
return lotteryWinningDao.hasWinning(activityId, userId);
}
@Override
public LotteryWinning selectWinningDetail(Long activityId, Long userId) {
return lotteryWinningDao.getWinningDetail(activityId, userId);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论