Explorar o código

Merge remote-tracking branch 'origin/doubleEleven2020' into doubleEleven2020

周箭河 %!s(int64=4) %!d(string=hai) anos
pai
achega
7c28c6de3b

+ 8 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/LuckDrawPrizeDao.java

@@ -20,11 +20,18 @@ public interface LuckDrawPrizeDao extends BaseDAO<Integer, LuckDrawPrize> {
 	 * @return
 	 */
 	LuckDrawPrize getLock(Integer id);
-	
+
 	/**
 	 * 批量新增
 	 * @param luckDrawPrizeList
 	 * @return
 	 */
 	int batchInsert(List<LuckDrawPrize> luckDrawPrizeList);
+
+	/**
+	 * 查询默认奖品
+	 * @param group
+	 * @return
+	 */
+	List<LuckDrawPrize> queryDefaultPrize(int group);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/LuckDrawPrize.java

@@ -65,6 +65,8 @@ public class LuckDrawPrize {
 	private Date modifyOn;
 
 	private Integer groupId;
+	
+	private Boolean isDefault;
 
 	public Integer getId() {
 		return id;
@@ -145,4 +147,12 @@ public class LuckDrawPrize {
 	public void setGroupId(Integer groupId) {
 		this.groupId = groupId;
 	}
+
+	public Boolean getIsDefault() {
+		return isDefault;
+	}
+
+	public void setIsDefault(Boolean isDefault) {
+		this.isDefault = isDefault;
+	}
 }

+ 17 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/LuckDrawPrizeServiceImpl.java

@@ -2,10 +2,6 @@ package com.ym.mec.biz.service.impl;
 
 import java.util.Date;
 import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.FutureTask;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.math.RandomUtils;
@@ -100,15 +96,14 @@ public class LuckDrawPrizeServiceImpl extends BaseServiceImpl<Integer, LuckDrawP
 			int randomNum = RandomUtils.nextInt(DRAW_BASE_NUMBER);
 			double start = 0;
 			double chances = 0;
-			ExecutorService executor = Executors.newCachedThreadPool();
 			for (LuckDrawPrize luckDraw : luckDraws) {
 				chances += luckDraw.getChances();
 				// 抽中了
 				if (start <= randomNum && randomNum < (chances * DRAW_BASE_NUMBER)) {
-					final LuckDrawPrize syncLuckDraw = luckDrawPrizeDao.getLock(luckDraw.getId());
+					LuckDrawPrize syncLuckDraw = luckDrawPrizeDao.getLock(luckDraw.getId());
+					Date date = new Date();
 					// 检查库存
-					if (syncLuckDraw.getStock() > 0) {
-						Date date = new Date();
+					if (syncLuckDraw.getIsDefault() == true || syncLuckDraw.getStock() > 0) {
 						// 减库存
 						syncLuckDraw.setStock(syncLuckDraw.getStock() - 1);
 						syncLuckDraw.setModifyOn(date);
@@ -116,34 +111,22 @@ public class LuckDrawPrizeServiceImpl extends BaseServiceImpl<Integer, LuckDrawP
 						// 抽奖记录
 						luckDrawLogService.add(userId, syncLuckDraw.getId(), group);
 
-						// 给奖励
-						FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
-							@Override
-							public String call() throws Exception {
-
-								switch (syncLuckDraw.getRewardType()) {
-								case COUPON:
-									break;
-
-								case POINTS:
-									break;
-
-								case CASH:
-									break;
-
-								default:
-									break;
-								}
-
-								return null;
-							}
-						});
-						executor.submit(task);
-						executor.shutdown();
-
 						return syncLuckDraw;
 					} else {
-						throw new BizException("系统繁忙,请重试");
+						// 库存不足,抽中默认奖品
+						List<LuckDrawPrize> defaultPrizeList = luckDrawPrizeDao.queryDefaultPrize(group);
+						if (defaultPrizeList != null && defaultPrizeList.size() > 0) {
+							syncLuckDraw = luckDrawPrizeDao.getLock(defaultPrizeList.get(0).getId());
+							// 减库存
+							syncLuckDraw.setStock(syncLuckDraw.getStock() - 1);
+							syncLuckDraw.setModifyOn(date);
+							update(syncLuckDraw);
+							// 抽奖记录
+							luckDrawLogService.add(userId, syncLuckDraw.getId(), group);
+							return syncLuckDraw;
+						} else {
+							throw new BizException("系统繁忙,请重试");
+						}
 					}
 				}
 				start = luckDraw.getChances() * DRAW_BASE_NUMBER;

+ 16 - 5
mec-biz/src/main/resources/config/mybatis/LuckDrawPrizeMapper.xml

@@ -10,12 +10,13 @@
 		<result column="reward_type_" property="rewardType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
 		<result column="memo_" property="memo" jdbcType="VARCHAR" />
 		<result column="group_id_" property="groupId" jdbcType="INTEGER" />
+		<result column="is_default_" property="isDefault" />
 		<result column="create_on_" property="createOn" jdbcType="TIMESTAMP" />
 		<result column="modify_on_" property="modifyOn" jdbcType="TIMESTAMP" />
 	</resultMap>
 
 	<sql id="Base_Column_List">
-		id_, name_, chances_, stock_, enabled_, reward_type_, memo_, group_id_, create_on_, modify_on_
+		id_, name_, chances_, stock_, enabled_, reward_type_, memo_, group_id_, is_default_, create_on_, modify_on_
 	</sql>
 
 	<sql id="queryCondition">
@@ -57,24 +58,24 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.LuckDrawPrize" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
 		insert into luck_draw_prize (id_, name_, chances_,
-		stock_, enabled_, reward_type_, memo_, group_id_, create_on_,
+		stock_, enabled_, reward_type_, memo_, group_id_, is_default_, create_on_,
 		modify_on_)
 		values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
 		#{chances,jdbcType=DOUBLE},
-		#{stock,jdbcType=INTEGER}, #{enabled,jdbcType=BIT},#{rewardType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo,jdbcType=VARCHAR}, #{groupId,jdbcType=INTEGER}, #{createOn,jdbcType=TIMESTAMP},
+		#{stock,jdbcType=INTEGER}, #{enabled,jdbcType=BIT},#{rewardType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{memo,jdbcType=VARCHAR}, #{groupId,jdbcType=INTEGER}, #(isDefault), #{createOn,jdbcType=TIMESTAMP},
 		#{modifyOn,jdbcType=TIMESTAMP})
 	</insert>
 
 	<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
 		insert into luck_draw_prize (id_, name_, chances_,
-		stock_, enabled_, reward_type_, memo_, group_id_, create_on_,
+		stock_, enabled_, reward_type_, memo_, group_id_, is_default_, create_on_,
 		modify_on_) values 
 		<foreach collection="list" item="item" separator=",">
 		(#{item.id,jdbcType=INTEGER}, #{item.name,jdbcType=VARCHAR},
 		#{item.chances,jdbcType=DOUBLE}, #{item.stock,jdbcType=INTEGER}, 
 		#{item.enabled,jdbcType=BIT},#{item.rewardType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-		#{item.memo,jdbcType=VARCHAR}, #{item.groupId,jdbcType=INTEGER}, now(), now())
+		#{item.memo,jdbcType=VARCHAR}, #{item.groupId,jdbcType=INTEGER}, #{item.isDefault}, now(), now())
 		</foreach>
 	</insert>
 
@@ -102,6 +103,9 @@
 			<if test="groupId != null">
 				group_id_ = #{groupId,jdbcType=INTEGER},
 			</if>
+			<if test="isDefault != null">
+				is_default_ = #{isDefault},
+			</if>
 			<if test="createOn != null">
 				create_on_ = #{createOn,jdbcType=TIMESTAMP},
 			</if>
@@ -130,4 +134,11 @@
 		from luck_draw_prize
 		where enabled_ = 1 and group_id_ = #{group} order by id_ asc
 	</select>
+
+	<select id="queryDefaultPrize" resultMap="BaseResultMap" parameterType="int">
+		select
+		<include refid="Base_Column_List" />
+		from luck_draw_prize
+		where enabled_ = 1 and group_id_ = #{group} and is_default_ = 1 order by id_ asc
+	</select>
 </mapper>