From d68eaea2f5e4a0d655b9e393c104cf35987b99f4 Mon Sep 17 00:00:00 2001 From: peng <peng.com> Date: 星期一, 29 九月 2025 23:16:25 +0800 Subject: [PATCH] 添加抽奖次数 --- framework/src/main/java/cn/lili/modules/lmk/enums/general/PrizeUserActionEnum.java | 16 framework/src/main/java/cn/lili/modules/lmk/mapper/AddNumCheekMapper.java | 34 +++ framework/src/main/resources/mapper/lmk/AddNumCheekMapper.xml | 44 ++++ framework/src/main/java/cn/lili/modules/lmk/domain/form/AddNumCheekForm.java | 46 ++++ framework/src/main/java/cn/lili/modules/lmk/domain/query/AddNumCheekQuery.java | 22 ++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/AddNumCheekVO.java | 43 +++ framework/src/main/java/cn/lili/modules/lmk/service/AddNumCheekService.java | 65 +++++ framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java | 232 +++++++++++++++++++- framework/src/main/java/cn/lili/modules/lmk/domain/entity/AddNumCheek.java | 34 +++ framework/src/main/java/cn/lili/modules/lmk/domain/form/AddPrizeNumForm.java | 2 framework/src/main/java/cn/lili/modules/lmk/service/impl/AddNumCheekServiceImpl.java | 119 ++++++++++ 11 files changed, 630 insertions(+), 27 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AddNumCheek.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AddNumCheek.java new file mode 100644 index 0000000..18406f3 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/AddNumCheek.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.domain.entity; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙 + * + * @author peng + * @since 2025-09-29 + */ +@Data +@TableName("lmk_add_num_cheek") +public class AddNumCheek extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("user_id") + /** 鐢ㄦ埛id */ + private String userId; + + @TableField("type") + /** 绫诲瀷 */ + private String type; + + @TableField("check_no") + /** 鏍¢獙缂栧彿 */ + private String checkNo; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddNumCheekForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddNumCheekForm.java new file mode 100644 index 0000000..965812d --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddNumCheekForm.java @@ -0,0 +1,46 @@ +package cn.lili.modules.lmk.domain.form; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import cn.lili.base.AbsForm; +import cn.lili.modules.lmk.domain.entity.AddNumCheek; +import org.springframework.beans.BeanUtils; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.lang.NonNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙琛ㄥ崟 + * + * @author peng + * @since 2025-09-29 + */ +@Data +@ApiModel(value = "AddNumCheek琛ㄥ崟", description = "鐢ㄦ埛澧炲姞娆℃暟鏍¢獙琛ㄥ崟") +public class AddNumCheekForm extends AbsForm { + + @NotNull(message = "鐢ㄦ埛id涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鐢ㄦ埛id") + private Long userId; + + @NotBlank(message = "绫诲瀷涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("绫诲瀷") + private String type; + + @NotBlank(message = "鏍¢獙缂栧彿涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鏍¢獙缂栧彿") + private String checkNo; + + public static AddNumCheek getEntityByForm(@NonNull AddNumCheekForm form, AddNumCheek entity) { + if(entity == null) { + entity = new AddNumCheek(); + } + BeanUtils.copyProperties(form, entity); + return entity; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddPrizeNumForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddPrizeNumForm.java index ac64b4a..6fd566d 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddPrizeNumForm.java +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/AddPrizeNumForm.java @@ -1,5 +1,6 @@ package cn.lili.modules.lmk.domain.form; +import cn.lili.modules.lmk.enums.general.PrizeUserActionEnum; import lombok.Data; @Data @@ -14,6 +15,7 @@ private String addType; /** *鎶藉娲诲姩id + * @see PrizeUserActionEnum */ private String prizeActivityId; /** diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/AddNumCheekQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/AddNumCheekQuery.java new file mode 100644 index 0000000..ea8b37e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/AddNumCheekQuery.java @@ -0,0 +1,22 @@ +package cn.lili.modules.lmk.domain.query; + +import cn.lili.base.AbsQuery; +import java.util.List; +import org.springframework.lang.NonNull; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙鏌ヨ + * + * @author peng + * @since 2025-09-29 + */ +@Data +@ApiModel(value = "AddNumCheek鏌ヨ鍙傛暟", description = "鐢ㄦ埛澧炲姞娆℃暟鏍¢獙鏌ヨ鍙傛暟") +public class AddNumCheekQuery extends AbsQuery { +} + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AddNumCheekVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AddNumCheekVO.java new file mode 100644 index 0000000..adf877c --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/AddNumCheekVO.java @@ -0,0 +1,43 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.base.AbsVo; +import cn.lili.modules.lmk.domain.entity.AddNumCheek; +import java.util.List; +import org.springframework.lang.NonNull; +import org.springframework.beans.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙灞曠ず + * + * @author peng + * @since 2025-09-29 + */ +@Data +@ApiModel(value = "鐢ㄦ埛澧炲姞娆℃暟鏍¢獙鍝嶅簲鏁版嵁", description = "鐢ㄦ埛澧炲姞娆℃暟鏍¢獙鍝嶅簲鏁版嵁") +public class AddNumCheekVO extends AbsVo { + + /** 鐢ㄦ埛id */ + @ApiModelProperty("鐢ㄦ埛id") + private Long userId; + + /** 绫诲瀷 */ + @ApiModelProperty("绫诲瀷") + private String type; + + /** 鏍¢獙缂栧彿 */ + @ApiModelProperty("鏍¢獙缂栧彿") + private String checkNo; + + public static AddNumCheekVO getVoByEntity(@NonNull AddNumCheek entity, AddNumCheekVO vo) { + if(vo == null) { + vo = new AddNumCheekVO(); + } + BeanUtils.copyProperties(entity, vo); + return vo; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/PrizeUserActionEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/PrizeUserActionEnum.java index de039e9..2c96105 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/enums/general/PrizeUserActionEnum.java +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/PrizeUserActionEnum.java @@ -10,13 +10,17 @@ /** * 鑾峰彇浼樻儬鍗风殑鏂瑰紡 */ - SYSTEM("绯荤粺璧犻��",1), - BUY("璐拱",1), - SHARE("鍒嗕韩",1), - SEE_SHOP("鐪嬪晢鍩�",1), - SEE_VIDEO("鐪嬭棰�",1); + SYSTEM("绯荤粺璧犻��"), + SHARE_GOODS_VIDEO("鍒嗕韩鍟嗗搧鎴栬棰戝唴瀹�(褰撴棩)"), + SHARE_USER_REGISTRY("鍒嗕韩鍚庡甫鏉ョ殑鏂扮敤鎴风殑娉ㄥ唽(褰撴棩)"), + SHARE_USER_SHOPPING("鍒嗕韩鍚庡甫鏉ョ殑鐢ㄦ埛鐨勬秷璐�(褰撴棩)"), + USER_STAY_TIME("鐢ㄦ埛鍦ㄥ钩鍙板仠鐣欑殑鏃堕暱(褰撴棩)"), + USER_PUBLISH_EXAMINE("鐢ㄦ埛鍦ㄥ钩鍙颁笂鍙戝竷鍐呭骞剁粡瀹℃牳閫氳繃(褰撴棩)"), + USER_BUY_SUM_PRICE("鐢ㄦ埛鍦ㄥ钩鍙颁笂鐨勮喘涔伴噾棰�(褰撴棩)"), + USER_SCAN_STORE("鐢ㄦ埛鍟嗘埛鐮佹坊鍔犳鏁�"), + USER_BUY_ORDER_NUM("鐢ㄦ埛鍦ㄥ钩鍙颁笂鐨勮鍗曟暟閲�(褰撴棩)"); + private final String description; - private final Integer sendNumber; public static PrizeUserActionEnum select(String name) { for (PrizeUserActionEnum prizeUserActionEnum : values()) { diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/AddNumCheekMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/AddNumCheekMapper.java new file mode 100644 index 0000000..a1850e4 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/AddNumCheekMapper.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.mapper; + +import cn.lili.modules.lmk.domain.entity.AddNumCheek; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.lili.modules.lmk.domain.vo.AddNumCheekVO; +import cn.lili.modules.lmk.domain.form.AddNumCheekForm; +import cn.lili.modules.lmk.domain.query.AddNumCheekQuery; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙 Mapper 鎺ュ彛 + * + * @author peng + * @since 2025-09-29 + */ +@Mapper +public interface AddNumCheekMapper extends BaseMapper<AddNumCheek> { + + /** + * id鏌ユ壘鐢ㄦ埛澧炲姞娆℃暟鏍¢獙 + * @param id + * @return + */ + AddNumCheekVO getById(String id); + + /** + * 鍒嗛〉 + */ + IPage getPage(IPage page, @Param("query") AddNumCheekQuery query); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/AddNumCheekService.java b/framework/src/main/java/cn/lili/modules/lmk/service/AddNumCheekService.java new file mode 100644 index 0000000..dd09d35 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/AddNumCheekService.java @@ -0,0 +1,65 @@ +package cn.lili.modules.lmk.service; + +import cn.lili.modules.lmk.domain.entity.AddNumCheek; +import com.baomidou.mybatisplus.extension.service.IService; +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.form.AddNumCheekForm; +import cn.lili.modules.lmk.domain.query.AddNumCheekQuery; +import java.util.List; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙 鏈嶅姟绫� + * + * @author peng + * @since 2025-09-29 + */ +public interface AddNumCheekService extends IService<AddNumCheek> { + + /** + * 娣诲姞 + * @param form + * @return + */ + Result add(AddNumCheekForm form); + + /** + * 淇敼 + * @param form + * @return + */ + Result update(AddNumCheekForm form); + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + Result remove(List<String> ids); + + /** + * id鍒犻櫎 + * @param id + * @return + */ + Result removeById(String id); + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + Result page(AddNumCheekQuery query); + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + Result detail(String id); + + /** + * 鍒楄〃 + * @return + */ + Result all(); +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/AddNumCheekServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/AddNumCheekServiceImpl.java new file mode 100644 index 0000000..a701e5a --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/AddNumCheekServiceImpl.java @@ -0,0 +1,119 @@ +package cn.lili.modules.lmk.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.lili.modules.lmk.domain.entity.AddNumCheek; +import cn.lili.modules.lmk.mapper.AddNumCheekMapper; +import cn.lili.modules.lmk.service.AddNumCheekService; +import cn.lili.base.Result; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.lili.modules.lmk.domain.form.AddNumCheekForm; +import cn.lili.modules.lmk.domain.vo.AddNumCheekVO; +import cn.lili.modules.lmk.domain.query.AddNumCheekQuery; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import cn.lili.utils.PageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 鐢ㄦ埛澧炲姞娆℃暟鏍¢獙 鏈嶅姟瀹炵幇绫� + * + * @author peng + * @since 2025-09-29 + */ +@Service +@RequiredArgsConstructor +public class AddNumCheekServiceImpl extends ServiceImpl<AddNumCheekMapper, AddNumCheek> implements AddNumCheekService { + + private final AddNumCheekMapper addNumCheekMapper; + + /** + * 娣诲姞 + * @param form + * @return + */ + @Override + public Result add(AddNumCheekForm form) { + AddNumCheek entity = AddNumCheekForm.getEntityByForm(form, null); + baseMapper.insert(entity); + return Result.ok("娣诲姞鎴愬姛"); + } + + /** + * 淇敼 + * @param form + * @return + */ + @Override + public Result update(AddNumCheekForm form) { + AddNumCheek entity = baseMapper.selectById(form.getId()); + + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + BeanUtils.copyProperties(form, entity); + baseMapper.updateById(entity); + return Result.ok("淇敼鎴愬姛"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @Override + public Result remove(List<String> ids) { + baseMapper.deleteBatchIds(ids); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * id鍒犻櫎 + * @param id + * @return + */ + @Override + public Result removeById(String id) { + baseMapper.deleteById(id); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + @Override + public Result page(AddNumCheekQuery query) { + IPage<AddNumCheekVO> page = PageUtil.getPage(query, AddNumCheekVO.class); + baseMapper.getPage(page, query); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + @Override + public Result detail(String id) { + AddNumCheekVO vo = baseMapper.getById(id); + Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); + return Result.ok().data(vo); + } + + /** + * 鍒楄〃 + * @return + */ + @Override + public Result all() { + List<AddNumCheek> entities = baseMapper.selectList(null); + List<AddNumCheekVO> vos = entities.stream() + .map(entity -> AddNumCheekVO.getVoByEntity(entity, null)) + .collect(Collectors.toList()); + return Result.ok().data(vos); + } +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java index 60c0963..fa8eda8 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java @@ -16,6 +16,8 @@ import cn.lili.modules.lmk.domain.vo.PrizeResultVO; import cn.lili.modules.lmk.enums.general.*; import cn.lili.modules.lmk.service.*; +import cn.lili.modules.order.order.entity.dos.Order; +import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.dos.Coupon; import cn.lili.modules.promotion.service.CouponService; import cn.lili.mybatis.BaseEntity; @@ -60,12 +62,18 @@ private final PrizeRecordService prizeRecordService; private static final String PRIZE_PREFIX = "prize_draw:"; private static final String PRIZE_NUMBER = "prize_number:"; + private static final String PRIZE_ADD_NUM = "prize_add_num:"; private final RedisTemplate<String, String> redisTemplate; private final RedissonClient redissonClient; private final RocketmqCustomProperties rocketmqCustomProperties; private final RocketMQTemplate rocketMQTemplate; private final COSUtil cosUtil; private final CouponService couponService; + private final AddPrizeRuleService addPrizeRuleService; + private final ActionRecordService actionRecordService; + private final ShareActionService shareActionService; + private final AddNumCheekService addNumCheekService; + private final OrderService orderService; @Override @Transactional(rollbackFor = Exception.class) @@ -390,13 +398,26 @@ try { lock.lock(); prizeNumberList = getPrizeNumberList(prizeId, userId); + //榛樿鐢熸垚 + boolean needGenerate = true; + for (PrizeNumber prizeNumber : prizeNumberList) { + String userAction = prizeNumber.getUserAction(); + if (PrizeUserActionEnum.SYSTEM.name().equals(userAction)) { + needGenerate = false; + break; + } + } // 褰撳墠鐢ㄦ埛娌℃湁鍒濆鍖栨娊濂栨暟鎹渶瑕佸垵濮嬪寲褰撳ぉ鎶藉鏁版嵁 - if (prizeNumberList == null || prizeNumberList.isEmpty()) { - //娌℃湁榛樿鎶藉娆℃暟鐩存帴杩斿洖0娆� + if (prizeNumberList.isEmpty() || needGenerate) { + //娌℃湁榛樿鎶藉娆℃暟涓嶇敓鎴愭娊濂栨鏁� + int size = prizeNumberList.size(); if (prizeNum == null || prizeNum <= 0) { - return Result.ok().data(0); + return Result.ok().data(size); } prizeNumberList = new ArrayList<>(); + if (size+prizeNum>activity.getMaxPrize()){ + prizeNum = activity.getMaxPrize()-size; + } //璁剧疆榛樿鎶藉娆℃暟骞惰繑鍥為粯璁ゆ娊濂栨鏁� for (int i = 0; i < prizeNum; i++) { PrizeNumber prizeNumber = new PrizeNumber(); @@ -408,13 +429,9 @@ } //娣诲姞鎶藉娆℃暟骞惰繑鍥� prizeNumberService.saveBatch(prizeNumberList); - return Result.ok().data(prizeNumberList.size()); + return Result.ok().data(prizeNumberList.size()+size); } - } finally { - if (lock.isHeldByCurrentThread()) { - lock.unlock(); - } - } + Integer maxPrize = activity.getMaxPrize(); //鍏朵粬鎯呭喌 int useNum = 0; @@ -431,6 +448,24 @@ return Result.ok().data(0); } else { return Result.ok().data(userPrizeNum > maxPrize ? maxPrize - useNum : notUseNum); + } + } finally { + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + + @Override + public void afterCompletion(int status) { + if (lock.isHeldByCurrentThread()) { + lock.unlock(); + } + } + }); + } } @@ -490,6 +525,28 @@ @Override public Result addPrizeNum(AddPrizeNumForm addPrizeNumForm) { + //鎸囧畾娲诲姩缁欐寚瀹氭椿鍔ㄦ坊鍔犳病鎸囧畾娲诲姩缁欓粯璁ゆ椿鍔ㄦ坊鍔� + String prizeActivityId = addPrizeNumForm.getPrizeActivityId(); + if (StringUtils.isBlank(prizeActivityId)) { + LambdaQueryWrapper<PrizeActivity> pop = Wrappers.<PrizeActivity>lambdaQuery() + .eq(PrizeActivity::getEnableStatus, PrizeActivityStatusEnum.ON.name()) + .eq(PrizeActivity::getPopup, true); + PrizeActivity one = prizeActivityService.getOne(pop); + if (one == null) { + return Result.ok().data(0); + } + addPrizeNumForm.setPrizeActivityId(one.getId()); + } + + AuthUser currentUser = UserContext.getCurrentUser(); + if (currentUser == null) { + return Result.ok().data(0); + } + //鎸囧畾鐢ㄦ埛缁欐寚瀹氱敤鎴锋坊鍔犳病鎸囧畾娲诲姩缁欏綋鍓嶇櫥褰曠敤鎴锋坊鍔� + if (StringUtils.isBlank(addPrizeNumForm.getUserId())) { + addPrizeNumForm.setUserId(currentUser.getId()); + + } PrizeActivity activity = prizeActivityService.getById(addPrizeNumForm.getPrizeActivityId()); if (activity == null) { throw new ServiceException("褰撳墠娲诲姩涓嶅瓨鍦�"); @@ -512,25 +569,158 @@ if (actionEnum == null) { throw new ServiceException("褰撳墠绫诲瀷涓嶅瓨鍦�"); } - //todo 杩涜鏁版嵁鏍¢獙 + AddPrizeRule addPrizeRule = getAddPrizeRule(actionEnum.name()); + if (addPrizeRule == null) { + return Result.ok().data(0); + } + List<PrizeNumber> needAdd = new ArrayList<>(); + Integer addNum = addPrizeRule.getAddNum(); + if (addNum == null) { + return Result.ok().data(0); + } + //鍒よ娣诲姞鍚庢槸鍚﹀ぇ浜庢渶澶ф鏁� + if (prizeNumberList.size()+addNum >= maxPrize){ + addNum = maxPrize-prizeNumberList.size(); + } + boolean addFlag = false; + //鍒ゆ柇璇ョ被鍨嬪綋澶╂槸鍚︽坊鍔犺繃浜� + for (PrizeNumber prizeNumber : prizeNumberList) { + if (actionEnum.name().equals(prizeNumber.getUserAction())) { + addFlag = true; + break; + } + } + String extend = addPrizeNumForm.getExtend(); + JSONObject jsonObject = JSONObject.parseObject(extend); + LambdaQueryWrapper<AddNumCheek> query = Wrappers.lambdaQuery(); + AddNumCheek addNumCheek = null; + String orderSn = null; + Order order = null; + String ruleValue= null; switch (actionEnum) { - case BUY: - System.err.println("BUY"); + case SHARE_GOODS_VIDEO: + String shareId = jsonObject.getString("shareId"); + ShareAction shareAction = shareActionService.getById(shareId); + if (shareAction == null) { + return Result.ok().data(0); + } + if (addFlag){ + log.info("褰撳墠鐢ㄦ埛褰撳ぉ宸茬粡娣诲姞杩囦簡鍒嗕韩娣诲姞娆℃暟浜�-------->{}",userId); + return Result.ok().data(0); + } break; - case SHARE: - //鐩存帴鑾峰緱鎶藉娆℃暟 - System.err.println("SHARE"); + case SHARE_USER_REGISTRY: + String memberId = jsonObject.getString("memberId"); + query.eq(AddNumCheek::getType,PrizeUserActionEnum.SHARE_USER_REGISTRY.name()) + .eq(AddNumCheek::getCheckNo, memberId); + if (addNumCheekService.getOne(query) != null) { + log.info("褰撳墠鐢ㄦ埛宸茬粡琚個璇疯繃浜�----------------->{}",memberId); + return Result.ok().data(0); + } + addNumCheek = new AddNumCheek(); + addNumCheek.setType(PrizeUserActionEnum.SHARE_USER_REGISTRY.name()); + addNumCheek.setUserId(userId); + addNumCheek.setCheckNo(memberId); + addNumCheekService.save(addNumCheek); break; - case SEE_SHOP: - System.err.println("SEE_SHOP"); + case SHARE_USER_SHOPPING: + orderSn = jsonObject.getString("orderSn"); + //鏍¢獙璁㈠崟鏄惁瀛樺湪 + order = orderService.getBySn(orderSn); + if (order == null) { + log.info("鍒嗕韩鐢ㄦ埛璐墿璁㈠崟涓嶅瓨鍦▄}",orderSn); + return Result.ok().data(0); + } + query.eq(AddNumCheek::getType,PrizeUserActionEnum.SHARE_USER_SHOPPING.name()) + .eq(AddNumCheek::getCheckNo, orderSn); + if (addNumCheekService.getOne(query) != null) { + log.info("褰撳墠閭�璇疯鍗曞凡缁忚棰嗗彇杩囦簡----------------->{}",orderSn); + return Result.ok().data(0); + } + addNumCheek = new AddNumCheek(); + addNumCheek.setType(PrizeUserActionEnum.SHARE_USER_SHOPPING.name()); + addNumCheek.setUserId(userId); + addNumCheek.setCheckNo(orderSn); + addNumCheekService.save(addNumCheek); break; - case SEE_VIDEO: - System.err.println("SEE_VIDEO"); + case USER_STAY_TIME: + //todo 閫氳繃鐢ㄦ埛琛屼负鍒嗘瀽鑾峰彇鏁版嵁杩涜鍒ゆ柇 + ruleValue = addPrizeRule.getRuleValue(); + + if (addFlag){ + log.info("褰撳墠鐢ㄦ埛褰撳ぉ宸茬粡娣诲姞杩囦簡鍋滅暀鏃堕棿娣诲姞娆℃暟浜�-------->{}",userId); + return Result.ok().data(0); + } break; - default: + case USER_BUY_SUM_PRICE: + orderSn = jsonObject.getString("orderSn"); + //鏍¢獙璁㈠崟鏄惁瀛樺湪 + order = orderService.getBySn(orderSn); + if (order == null) { + log.info("鐢ㄦ埛璐墿璁㈠崟涓嶅瓨鍦▄}",orderSn); + return Result.ok().data(0); + } + ruleValue = addPrizeRule.getRuleValue(); + double price = Double.parseDouble(ruleValue); + Double flowPrice = order.getFlowPrice(); + if (flowPrice < price) { + log.info("褰撳墠璐墿璁㈠崟閲戦灏忎簬娣诲姞瑕佹眰----------------->{}",orderSn); + return Result.ok().data(0); + } + query.eq(AddNumCheek::getType,PrizeUserActionEnum.USER_BUY_SUM_PRICE.name()) + .eq(AddNumCheek::getCheckNo, orderSn); + if (addNumCheekService.getOne(query) != null) { + log.info("褰撳墠璐墿璁㈠崟宸茬粡琚鍙栬繃浜�----------------->{}",orderSn); + return Result.ok().data(0); + } + addNumCheek = new AddNumCheek(); + addNumCheek.setType(PrizeUserActionEnum.USER_BUY_SUM_PRICE.name()); + addNumCheek.setUserId(userId); + addNumCheek.setCheckNo(orderSn); + addNumCheekService.save(addNumCheek); + break; + case USER_BUY_ORDER_NUM: + orderSn = jsonObject.getString("orderSn"); + //鏍¢獙璁㈠崟鏄惁瀛樺湪 + order = orderService.getBySn(orderSn); + if (order == null) { + log.info("鐢ㄦ埛璐墿鏁伴噺璁㈠崟涓嶅瓨鍦▄}",orderSn); + return Result.ok().data(0); + } + query.eq(AddNumCheek::getType,PrizeUserActionEnum.USER_BUY_ORDER_NUM.name()) + .eq(AddNumCheek::getCheckNo, orderSn); + if (addNumCheekService.getOne(query) != null) { + log.info("褰撳墠璐墿璁㈠崟鏁伴噺宸茬粡琚鍙栬繃浜�----------------->{}",orderSn); + return Result.ok().data(0); + } + addNumCheek = new AddNumCheek(); + addNumCheek.setType(PrizeUserActionEnum.USER_BUY_ORDER_NUM.name()); + addNumCheek.setUserId(userId); + addNumCheek.setCheckNo(orderSn); + addNumCheekService.save(addNumCheek); + break; + case USER_SCAN_STORE: + break; + case USER_PUBLISH_EXAMINE: break; + default: + return Result.ok().data(0); } - return null; + //璁剧疆榛樿鎶藉娆℃暟骞惰繑鍥為粯璁ゆ娊濂栨鏁� + for (int i = 0; i < addNum; i++) { + PrizeNumber prizeNumber = new PrizeNumber(); + prizeNumber.setActivityPrizeId(Long.parseLong(addPrizeNumForm.getPrizeActivityId())); + prizeNumber.setUserId(Long.parseLong(userId)); + prizeNumber.setUserAction(actionEnum.name()); + prizeNumber.setUseStatus(PrizeNumberUseEnum.WAIT.name()); + needAdd.add(prizeNumber); + } + prizeNumberService.saveBatch(needAdd); + return Result.ok().data(0); + } + public AddPrizeRule getAddPrizeRule(String ruleCode) { + LambdaQueryWrapper<AddPrizeRule> one = Wrappers.<AddPrizeRule>lambdaQuery().eq(AddPrizeRule::getRuleCode, ruleCode); + return addPrizeRuleService.getOne(one); } } diff --git a/framework/src/main/resources/mapper/lmk/AddNumCheekMapper.xml b/framework/src/main/resources/mapper/lmk/AddNumCheekMapper.xml new file mode 100644 index 0000000..e32e4a5 --- /dev/null +++ b/framework/src/main/resources/mapper/lmk/AddNumCheekMapper.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.lili.modules.lmk.mapper.AddNumCheekMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.AddNumCheekVO"> + <id column="id" property="id"/> + <result column="user_id" property="userId" /> + <result column="type" property="type" /> + <result column="check_no" property="checkNo" /> + </resultMap> + + + + + + + + <select id="getById" resultMap="BaseResultMap"> + SELECT + LANC.user_id, + LANC.type, + LANC.check_no, + LANC.id + FROM + lmk_add_num_cheek LANC + WHERE + LANC.id = #{id} AND LANC.delete_flag = 0 + </select> + + + <select id="getPage" resultMap="BaseResultMap"> + SELECT + LANC.user_id, + LANC.type, + LANC.check_no, + LANC.id + FROM + lmk_add_num_cheek LANC + WHERE + LANC.delete_flag = 0 + </select> + +</mapper> -- Gitblit v1.8.0