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