From 4d756db62a276bc9521c769f3842964671666471 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期一, 30 十一月 2020 15:27:34 +0800
Subject: [PATCH] 抽奖服务完善

---
 service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java |  122 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 108 insertions(+), 14 deletions(-)

diff --git a/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java b/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java
index f5aa521..fced767 100644
--- a/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java
+++ b/service-lucky/src/main/java/com/ks/lucky/service/impl/remote/LuckyActivityOpenServiceImpl.java
@@ -1,36 +1,130 @@
 package com.ks.lucky.service.impl.remote;
 
+import com.ks.lucky.exception.LuckyActivityAwardException;
 import com.ks.lucky.exception.LuckyActivityException;
+import com.ks.lucky.mapper.LuckyActivityMapper;
 import com.ks.lucky.pojo.DO.LuckyActivity;
+import com.ks.lucky.pojo.DO.LuckyActivityAwards;
+import com.ks.lucky.pojo.DO.LuckyActivityOpenInfo;
 import com.ks.lucky.remote.service.LuckyActivityOpenService;
+import com.ks.lucky.service.impl.LuckyActivityAwardManager;
+import com.ks.lucky.service.impl.LuckyActivityAwardResultManager;
+import com.ks.lucky.service.impl.LuckyActivityJoinManager;
+import com.ks.lucky.service.impl.LuckyActivityOpenInfoManager;
+import com.ks.lucky.util.LuckyRunUtil;
 import org.apache.dubbo.config.annotation.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 @Service(version = "1.0")
 public class LuckyActivityOpenServiceImpl implements LuckyActivityOpenService {
-    @Override
-    public List<LuckyActivity> listValidActivity(String appKey, int page, int pageSize) {
-        return null;
+
+    @Resource
+    private LuckyActivityAwardManager luckyActivityAwardManager;
+
+    @Resource
+    private LuckyActivityMapper luckyActivityMapper;
+
+    @Resource
+    private LuckyActivityOpenInfoManager luckyActivityOpenInfoManager;
+
+    @Resource
+    private LuckyActivityJoinManager luckyActivityJoinManager;
+
+    @Resource
+    private LuckyActivityAwardResultManager luckyActivityAwardResultManager;
+
+
+    /**
+     * 鏄惁鍙互寮�濂栦簡
+     *
+     * @param activity
+     * @return
+     */
+    private boolean canOpen(LuckyActivity activity) throws LuckyActivityException {
+        long now = System.currentTimeMillis();
+
+        if (activity.getState() != LuckyActivity.STATE_FINISH) {
+            throw new LuckyActivityException(1, "娲诲姩灏氭湭缁撴潫");
+        }
+
+        LuckyActivityOpenInfo openInfo = luckyActivityOpenInfoManager.getOpenInfo(activity.getId());
+
+        //鏈揪鍒版渶浣庡紑濂栦汉鏁�
+        if (activity.getCurrentPersonCount() < openInfo.getMinPersonCount()) {
+            throw new LuckyActivityException(2, "灏氭湭杈惧埌鏈�浣庡紑濂栦汉鏁�");
+        }
+
+        //鍒拌揪鏈�浣庡紑濂栦汉鏁板氨寮�濂�
+        if (activity.getPreOpenTime() != null) {
+            if (activity.getPreOpenTime().getTime() > now) {
+                throw new LuckyActivityException(2, "灏氭湭杈惧埌寮�濂栨椂闂�");
+            }
+        }
+        return true;
     }
 
+
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public long countValidActivity(String appKey) {
-        return 0;
+    public void preOpenAward(Long activityId) throws LuckyActivityException, LuckyActivityAwardException {
+        //鍒ゆ柇娲诲姩鐘舵��
+        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
+        if (activity == null) {
+            throw new LuckyActivityException(LuckyActivityException.CODE_NOT_EXIST, "娲诲姩涓嶅瓨鍦�");
+        }
+
+
+        //鍒ゆ柇鏄惁杈惧埌寮�濂栨潯浠�
+        canOpen(activity);
+        //------------璁$畻寮�濂�-------------
+
+        //鑾峰彇濂栭」鏁版嵁
+        List<LuckyActivityAwards> awardsList = luckyActivityAwardManager.getAwardList(activityId);
+        if (awardsList == null || awardsList.size() == 0) {
+            throw new LuckyActivityAwardException(LuckyActivityAwardException.CODE_NOT_EXIST, "鏃犲椤逛俊鎭�");
+        }
+
+        //鑾峰彇鐢ㄦ埛鏁版嵁
+        Map<String, Integer> data = luckyActivityJoinManager.getJoinData(activityId);
+        for (LuckyActivityAwards awards : awardsList) {
+            //鑾峰彇涓鐢ㄦ埛ID
+            Set<String> uids = LuckyRunUtil.compute(data, awards.getCount());
+            //淇濆瓨寮�濂栫粨鏋�
+            luckyActivityAwardResultManager.addRecord(uids, awards.getActivityId(), awards.getId());
+        }
+
+
+        //鏇存柊鐘舵��
+        LuckyActivity update = new LuckyActivity();
+        update.setId(activityId);
+        update.setState(LuckyActivity.STATE_PRE_OPEND);
+        update.setStateRemarks("棰勫紑濂栨垚鍔�");
+        update.setUpdateTime(new Date());
+        luckyActivityMapper.updateByPrimaryKeySelective(update);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
-    public void createActivity(LuckyActivity activity) throws LuckyActivityException {
+    public void showOpenAward(Long activityId) throws LuckyActivityException {
+        LuckyActivity activity = luckyActivityMapper.selectByPrimaryKeyForUpdate(activityId);
+        if (activity.getState() != LuckyActivity.STATE_PRE_OPEND) {
+            throw new LuckyActivityException(1, "灏氭湭寮�濂�");
+        }
 
+        LuckyActivity update = new LuckyActivity();
+        update.setId(activityId);
+        update.setUpdateTime(new Date());
+        update.setState(LuckyActivity.STATE_OPENED);
+        update.setStateRemarks("宸插紑濂�");
+        luckyActivityMapper.updateByPrimaryKeySelective(update);
+        luckyActivityAwardResultManager.setResultShow(activityId);
     }
 
-    @Override
-    public LuckyActivity getActivityDetail(Long id) {
-        return null;
-    }
 
-    @Override
-    public void updateActivity(LuckyActivity activity) throws LuckyActivityException {
-
-    }
 }

--
Gitblit v1.8.0