Commit 0ace76c0 authored by libin's avatar libin

抽奖

parent dd089133
...@@ -47,10 +47,8 @@ public class ActivityPrize implements Serializable { ...@@ -47,10 +47,8 @@ public class ActivityPrize implements Serializable {
private Date crtTime; private Date crtTime;
@Column(name = "upd_time") @Column(name = "upd_time")
private Date updTime; private Date updTime;
@Column(name = "is_entity")
private Integer isEntity;
@Column(name = "goods_id") @Column(name = "goods_id")
private Integer goodsId; private Integer goodsId;
@Column(name = "is_prize") @Column(name = "prize_goods_type")
private Integer isPrize; private Integer prizeGoodsType;
} }
...@@ -171,4 +171,8 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor ...@@ -171,4 +171,8 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
activityAttendanceRecordDTO.getPrizes(), activityAttendanceRecordDTO.getPrizes(),
timeStr}; timeStr};
} }
public void updateLotteryNumByActivityIdAndUserIdAndPrizeType(Integer activityId,Integer userId,Integer prizeType){
mapper.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityId,userId,prizeType);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.util.ReferralCodeUtil; import com.github.wxiaoqi.security.common.util.ReferralCodeUtil;
import com.xxfc.platform.activity.constant.PrizeTypeEnum; import com.xxfc.platform.activity.constant.PrizeTypeEnum;
...@@ -39,11 +40,15 @@ import java.util.stream.Collectors; ...@@ -39,11 +40,15 @@ import java.util.stream.Collectors;
public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize> { public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize> {
private final ActivityWinningRecordBiz activityWinningRecordBiz; private final ActivityWinningRecordBiz activityWinningRecordBiz;
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
private final UserCouponBiz userCouponBiz; private final UserCouponBiz userCouponBiz;
private final RedisTemplate<String,Object> redisTemplate;
private final RedisTemplate<String, Object> redisTemplate;
@Resource(name = "redisTemplate") @Resource(name = "redisTemplate")
private ValueOperations<String, Object> valueOperations; private ValueOperations<String, Object> valueOperations;
private final String LOTTERY_PRE_KEY ="lottery";
/** /**
* 查询奖品 * 查询奖品
* *
...@@ -74,7 +79,7 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize ...@@ -74,7 +79,7 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
//保存 //保存
List<ActivityPrize> activityPrizesOfSave = activityPrizeMap.get(Boolean.FALSE); List<ActivityPrize> activityPrizesOfSave = activityPrizeMap.get(Boolean.FALSE);
if (CollectionUtils.isNotEmpty(activityPrizesOfSave)) { if (CollectionUtils.isNotEmpty(activityPrizesOfSave)) {
activityPrizesOfSave.stream().peek(x->x.setCrtTime(new Date())).count(); activityPrizesOfSave.stream().peek(x -> x.setCrtTime(new Date())).count();
mapper.insertList(activityPrizesOfSave); mapper.insertList(activityPrizesOfSave);
} }
//更新 //更新
...@@ -97,7 +102,7 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize ...@@ -97,7 +102,7 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
Example example = new Example(ActivityPrize.class); Example example = new Example(ActivityPrize.class);
example.orderBy("serialNumber").asc(); example.orderBy("serialNumber").asc();
Example.Criteria criteria = example.createCriteria(); Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("type",prizeType); criteria.andEqualTo("type", prizeType);
List<ActivityPrize> activityPrizes = mapper.selectByExample(example); List<ActivityPrize> activityPrizes = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(activityPrizes)) { if (CollectionUtils.isEmpty(activityPrizes)) {
return Collections.EMPTY_LIST; return Collections.EMPTY_LIST;
...@@ -106,54 +111,90 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize ...@@ -106,54 +111,90 @@ public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize
} }
/** /**
* 抽奖 * 抽奖
* //todo * //todo
*
* @param activityId * @param activityId
* @param prizeType * @param prizeType
* @param appUserDTO * @param appUserDTO
* @return * @return
*/ */
public LotteryVo activityLottery(Integer activityId, Integer prizeType, AppUserDTO appUserDTO) { public LotteryVo activityLottery(Integer activityId, Integer prizeType, String lotteryDate,AppUserDTO appUserDTO) {
LotteryVo lotteryVo = new LotteryVo(); LotteryVo lotteryVo = new LotteryVo();
/* Boolean hasNum = activityAttendanceRecordBiz.hasNumberOfLuckyDrawByType(activityId, prizeType, appUserDTO.getUserid());
if (!hasNum){
lotteryVo.setPrizeName("谢谢惠顾");
lotteryVo.setSerialNumber(8);
return lotteryVo;
}*/
List<ActivityPrize> activityPrizes = findActivityPrizeByType(prizeType); List<ActivityPrize> activityPrizes = findActivityPrizeByType(prizeType);
ActivityPrize notActivityPrize = activityPrizes.stream().filter(x -> x.getIsPrize() == 1).findFirst().orElseGet(() -> { ActivityPrize notActivityPrize = activityPrizes.stream().filter(x -> x.getPrizeGoodsType() ==0).findFirst().orElseGet(() -> {
ActivityPrize activityPrize = new ActivityPrize(); ActivityPrize activityPrize = new ActivityPrize();
activityPrize.setName("谢谢参与"); activityPrize.setName("谢谢参与");
activityPrize.setIsPrize(0); activityPrize.setPrizeGoodsType(0);
activityPrize.setType(prizeType);
activityPrize.setSerialNumber(8);
return activityPrize; return activityPrize;
}); });
int index = LotteryUtils.getrandomIndex(activityPrizes); int index = LotteryUtils.getrandomIndex(activityPrizes);
ActivityPrize activityPrize = activityPrizes.get(index); ActivityPrize activityPrize = activityPrizes.get(index);
if (activityPrize.getTotalStock() == 0){
lotteryVo.setPrizeName(notActivityPrize.getName()); //库存为0
if (activityPrize.getPrizeGoodsType()!=0 && activityPrize.getTotalStock() == 0) {
activityPrize = notActivityPrize;
}
if (activityPrize.getDayMaxUse()!=null){
String key = String.format("%s:%s:%d:%s",lotteryDate,LOTTERY_PRE_KEY, activityId, activityPrize.getSerialNumber());
Long prizeDayUseStock = valueOperations.increment(key);
//达到日上限
if (prizeDayUseStock.intValue() > activityPrize.getDayMaxUse()){
activityPrize = notActivityPrize;
}
} }
ActivityWinningRecord activityWinningRecord = new ActivityWinningRecord(); ActivityWinningRecord activityWinningRecord = new ActivityWinningRecord();
activityWinningRecord.setActivityId(activityId); activityWinningRecord.setActivityId(activityId);
activityWinningRecord.setPrizeType(prizeType); activityWinningRecord.setPrizeType(prizeType);
activityWinningRecord.setUserId(appUserDTO.getUserid()); activityWinningRecord.setUserId(appUserDTO.getUserid());
activityWinningRecord.setIconPath(activityPrize.getIconPath()); activityWinningRecord.setHasWinning(0);
if (activityPrize.getIsPrize()==1 && activityPrize.getTotalStock()!=0){ if (activityPrize.getPrizeGoodsType() !=0 && activityPrize.getTotalStock() != 0) {
if (PrizeTypeEnum.LOCALE.getCode()==prizeType){ if (PrizeTypeEnum.LOCALE.getCode() == prizeType) {
//兑奖码生成 //兑奖码生成
String expiryDateCode = ReferralCodeUtil.encode(valueOperations.increment(String.valueOf(activityId)).intValue()); String expiryDateCode = ReferralCodeUtil.encode(valueOperations.increment(String.valueOf(activityId)).intValue());
activityWinningRecord.setExpiryDateCode(expiryDateCode); activityWinningRecord.setExpiryDateCode(expiryDateCode);
lotteryVo.setExpiryDateCode(expiryDateCode); lotteryVo.setExpiryDateCode(expiryDateCode);
} }
//发放优惠券 //发放优惠券
if (activityPrize.getIsEntity() == 0){ if (activityPrize.getPrizeGoodsType() == 0) {
UserCouponSendDTO userCouponSendDTO = new UserCouponSendDTO(); UserCouponSendDTO userCouponSendDTO = new UserCouponSendDTO();
userCouponSendDTO.setCouponId(activityPrize.getGoodsId()); userCouponSendDTO.setCouponId(activityPrize.getGoodsId());
userCouponSendDTO.setCouponNum(1); userCouponSendDTO.setCouponNum(1);
userCouponSendDTO.setPhone(appUserDTO.getUsername()); userCouponSendDTO.setPhone(appUserDTO.getUsername());
userCouponBiz.sendCoupon(userCouponSendDTO); userCouponBiz.sendCoupon(userCouponSendDTO);
activityWinningRecord.setGoodsId(activityPrize.getGoodsId());
} }
//更改抽奖次数
activityAttendanceRecordBiz.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityId, appUserDTO.getUserid(), prizeType);
//更新库存
updatePrizeStock(prizeType, activityPrize.getSerialNumber());
//设置为已中奖
activityWinningRecord.setHasWinning(1);
activityWinningRecord.setIconPath(activityPrize.getIconPath());
} }
activityWinningRecordBiz.saveRecord(activityWinningRecord); activityWinningRecordBiz.saveRecord(activityWinningRecord);
lotteryVo.setSerialNumber(activityPrize.getSerialNumber());
return lotteryVo; return lotteryVo;
} }
/**
* 更新库存
*
* @param prizeType
* @param serialNumber
*/
private void updatePrizeStock(Integer prizeType, Integer serialNumber) {
mapper.updatePrizeStock(prizeType, serialNumber);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* ${DESCRIPTION}
*
* @author wanghaobin
* @create 2017-06-21 8:39
*/
@Configuration
@Primary
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> userRedisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
...@@ -3,6 +3,7 @@ package com.xxfc.platform.activity.mapper; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO; import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO; import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.xxfc.platform.activity.entity.ActivityAttendanceRecord; import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
...@@ -17,4 +18,8 @@ import java.util.List; ...@@ -17,4 +18,8 @@ import java.util.List;
public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> { public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> {
List<ActivityAttendanceRecordDTO> selectActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO); List<ActivityAttendanceRecordDTO> selectActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO);
void updateLotteryNumByActivityIdAndUserIdAndPrizeType(@Param("activityId") Integer activityId,
@Param("userId") Integer userId,
@Param("prizeType") Integer prizeType);
} }
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPrize; import com.xxfc.platform.activity.entity.ActivityPrize;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.insert.InsertListMapper; import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -12,5 +13,7 @@ import tk.mybatis.mapper.common.Mapper; ...@@ -12,5 +13,7 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-12-03 16:46:02 * @date 2019-12-03 16:46:02
*/ */
public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> { public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> {
void updatePrizeStock(@Param("prizeType") Integer prizeType,
@Param("serialNumber") Integer serialNumber);
} }
...@@ -48,8 +48,9 @@ public class ActivityPrizeController { ...@@ -48,8 +48,9 @@ public class ActivityPrizeController {
@PostMapping("/lottery/{activityId}/{prizeType}") @PostMapping("/lottery/{activityId}/{prizeType}")
public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId, public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType, @PathVariable(value = "prizeType") Integer prizeType,
@RequestParam(value = "lottery") String lottery,
AppUserDTO appUserDTO) { AppUserDTO appUserDTO) {
LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,appUserDTO); LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,lottery,appUserDTO);
return ObjectRestResponse.succ(lotteryVo); return ObjectRestResponse.succ(lotteryVo);
} }
......
...@@ -64,4 +64,21 @@ ...@@ -64,4 +64,21 @@
order by apu.current_progress desc order by apu.current_progress desc
</select> </select>
<update id="updateLotteryNumByActivityIdAndUserIdAndPrizeType">
update `activity_attendance_record`
<if test="prizeType==1">
set `online_lottery_num`=`online_lottery_num`-1
</if>
<if test="prizeType==2">
set `locale_lottery_num`=`locale_lottery_num`-1
</if>
where `activity_id`=#{activityId} and `user_id`=#{userId}
<if test="prizeType==1">
and `online_lottery_num`>0
</if>
<if test="prizeType==2">
and `locale_lottery_num`>0
</if>
</update>
</mapper> </mapper>
\ No newline at end of file
...@@ -14,9 +14,12 @@ ...@@ -14,9 +14,12 @@
<result property="probability" column="probability"/> <result property="probability" column="probability"/>
<result property="type" column="type"/> <result property="type" column="type"/>
<result property="crtTime" column="crt_time"/> <result property="crtTime" column="crt_time"/>
<result property="isEntity" column="is_entity"/>
<result property="goodsId" column="goods_id"/> <result property="goodsId" column="goods_id"/>
<result property="isPrize" column="is_prize"/> <result property="prizeGoodsType" column="prize_goods_type"/>
</resultMap> </resultMap>
<update id="updatePrizeStock">
update `activity_prize` set `total_stock`=`total_stock`-1 where `type`=#{prizeType} and `serial_number`=#{serialNumber} and `total_stock`>0;
</update>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment