瀏覽代碼

Merge branch 'dev_v1.3.4_20220909'

# Conflicts:
#	cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
Eric 2 年之前
父節點
當前提交
cd7a172f4a
共有 24 個文件被更改,包括 402 次插入58 次删除
  1. 1 0
      cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/RewardTypeEnum.java
  2. 9 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderItem.java
  3. 9 0
      cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderReturnApply.java
  4. 18 3
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderItemMapper.xml
  5. 18 3
      cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderReturnApplyMapper.xml
  6. 1 1
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java
  7. 12 4
      cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java
  8. 2 2
      cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalOrderItemDao.xml
  9. 9 0
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityRewardController.java
  10. 1 1
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java
  11. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityRewardDao.java
  12. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java
  13. 25 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java
  14. 15 6
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanReward.java
  15. 24 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityReward.java
  16. 34 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/activity/ActivityRankingRuleEnum.java
  17. 0 7
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponInfoService.java
  18. 37 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java
  19. 38 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java
  20. 72 11
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java
  21. 1 13
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponInfoServiceImp.java
  22. 27 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRewardVo.java
  23. 2 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml
  24. 38 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityRewardMapper.xml

+ 1 - 0
cooleshow-common/src/main/java/com/yonge/cooleshow/common/enums/RewardTypeEnum.java

@@ -14,6 +14,7 @@ public enum RewardTypeEnum implements BaseEnum<String, RewardTypeEnum> {
     ACTUAL("实物"),
     VIP("小酷AI会员"),
     PIAMO_ROOM("琴房时长"),
+    COUPON("优惠券"),
     ;
 
     @EnumValue

+ 9 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderItem.java

@@ -69,8 +69,17 @@ public class OmsOrderItem implements Serializable {
     @ApiModelProperty("退货状态:-1 ->未退款;0->待处理;1->退货中;2->已完成;3->已拒绝")
     private Integer returnStatus;
 
+    private BigDecimal precisionAmount;
+
     private static final long serialVersionUID = 1L;
 
+    public BigDecimal getPrecisionAmount() {
+        return precisionAmount;
+    }
+
+    public void setPrecisionAmount(BigDecimal precisionAmount) {
+        this.precisionAmount = precisionAmount;
+    }
 
     public Long getPromoterId() {
         return promoterId;

+ 9 - 0
cooleshow-mall/mall-mbg/src/main/java/com/yonge/cooleshow/mbg/model/OmsOrderReturnApply.java

@@ -92,8 +92,17 @@ public class OmsOrderReturnApply implements Serializable {
     @ApiModelProperty("退货单号")
     private String deliverySn;
 
+    private BigDecimal precisionAmount;
+
     private static final long serialVersionUID = 1L;
 
+    public BigDecimal getPrecisionAmount() {
+        return precisionAmount;
+    }
+
+    public void setPrecisionAmount(BigDecimal precisionAmount) {
+        this.precisionAmount = precisionAmount;
+    }
 
     public Long getOrderItemId() {
         return orderItemId;

+ 18 - 3
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderItemMapper.xml

@@ -26,6 +26,7 @@
     <result column="returnStatus" jdbcType="INTEGER" property="returnStatus" />
     <result column="promoter_id" jdbcType="INTEGER" property="promoterId" />
     <result column="share_proportion_" jdbcType="INTEGER" property="shareProportion" />
+    <result column="precision_amount" jdbcType="INTEGER" property="precisionAmount" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -89,7 +90,7 @@
     id, order_id, order_sn, product_id, product_pic, product_name, product_brand, product_sn, 
     product_price, product_quantity, product_sku_id, product_sku_code, product_category_id, 
     promotion_name, promotion_amount, coupon_amount, integration_amount, real_amount, 
-    gift_integration, gift_growth, product_attr,promoter_id,share_proportion_
+    gift_integration, gift_growth, product_attr,promoter_id,share_proportion_,precision_amount
   </sql>
   <select id="selectByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderItemExample" resultMap="BaseResultMap">
     select a.*,if(oora.status is null,-1,oora.status) as returnStatus from  (
@@ -133,14 +134,14 @@
       product_sku_id, product_sku_code, product_category_id, 
       promotion_name, promotion_amount, coupon_amount, 
       integration_amount, real_amount, gift_integration, 
-      gift_growth, product_attr,promoter_id,share_proportion_)
+      gift_growth, product_attr,promoter_id,share_proportion_,precision_amount)
     values (#{orderId,jdbcType=BIGINT}, #{orderSn,jdbcType=VARCHAR}, #{productId,jdbcType=BIGINT}, 
       #{productPic,jdbcType=VARCHAR}, #{productName,jdbcType=VARCHAR}, #{productBrand,jdbcType=VARCHAR}, 
       #{productSn,jdbcType=VARCHAR}, #{productPrice,jdbcType=DECIMAL}, #{productQuantity,jdbcType=INTEGER}, 
       #{productSkuId,jdbcType=BIGINT}, #{productSkuCode,jdbcType=VARCHAR}, #{productCategoryId,jdbcType=BIGINT}, 
       #{promotionName,jdbcType=VARCHAR}, #{promotionAmount,jdbcType=DECIMAL}, #{couponAmount,jdbcType=DECIMAL}, 
       #{integrationAmount,jdbcType=DECIMAL}, #{realAmount,jdbcType=DECIMAL}, #{giftIntegration,jdbcType=INTEGER}, 
-      #{giftGrowth,jdbcType=INTEGER}, #{productAttr,jdbcType=VARCHAR},#{promoterId},#{shareProportion})
+      #{giftGrowth,jdbcType=INTEGER}, #{productAttr,jdbcType=VARCHAR},#{promoterId},#{shareProportion},#{precisionAmount})
   </insert>
   <insert id="insertSelective" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderItem">
     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
@@ -214,6 +215,9 @@
       <if test="shareProportion != null">
         share_proportion_,
       </if>
+      <if test="precisionAmount != null">
+        precision_amount,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="orderId != null">
@@ -282,6 +286,9 @@
       <if test="shareProportion != null">
         #{shareProportion,jdbcType=VARCHAR},
       </if>
+      <if test="precisionAmount != null">
+        #{precisionAmount},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderItemExample" resultType="java.lang.Long">
@@ -362,6 +369,9 @@
       <if test="record.shareProportion != null">
         share_proportion_ = #{record.shareProportion,jdbcType=VARCHAR},
       </if>
+      <if test="record.precisionAmount != null">
+        precision_amount = #{record.precisionAmount,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -391,6 +401,7 @@
       gift_growth = #{record.giftGrowth,jdbcType=INTEGER},
       promoter_id = #{record.promoterId,jdbcType=INTEGER},
       share_proportion_ = #{record.shareProportion},
+      precision_amount = #{record.precisionAmount},
       product_attr = #{record.productAttr,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -465,6 +476,9 @@
       <if test="shareProportion != null">
         share_proportion_ = #{shareProportion,jdbcType=VARCHAR},
       </if>
+      <if test="precisionAmount != null">
+        precision_amount = #{precisionAmount,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -491,6 +505,7 @@
       gift_growth = #{giftGrowth,jdbcType=INTEGER},
       promoter_id = #{promoterId,jdbcType=INTEGER},
     share_proportion_ = #{shareProportion},
+    precision_amount = #{precisionAmount},
       product_attr = #{productAttr,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>

+ 18 - 3
cooleshow-mall/mall-mbg/src/main/resources/config/mybatis/OmsOrderReturnApplyMapper.xml

@@ -11,6 +11,7 @@
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
     <result column="member_username" jdbcType="VARCHAR" property="memberUsername" />
     <result column="return_amount" jdbcType="DECIMAL" property="returnAmount" />
+    <result column="precision_amount" jdbcType="DECIMAL" property="precisionAmount" />
     <result column="return_name" jdbcType="VARCHAR" property="returnName" />
     <result column="return_phone" jdbcType="VARCHAR" property="returnPhone" />
     <result column="status" jdbcType="INTEGER" property="status" />
@@ -94,7 +95,7 @@
     id, order_id, company_address_id, product_id, order_sn, create_time, member_username, 
     return_amount, return_name, return_phone, status, handle_time, product_pic, product_name, 
     product_brand, product_attr, product_count, product_price, product_real_price, reason, 
-    description, proof_pics, handle_note, handle_man, receive_man, receive_time, receive_note,delivery_sn,order_item_id
+    description, proof_pics, handle_note, handle_man, receive_man, receive_time, receive_note,delivery_sn,order_item_id,precision_amount
   </sql>
   <select id="selectByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample" resultMap="BaseResultMap">
     select
@@ -138,7 +139,7 @@
       product_count, product_price, product_real_price, 
       reason, description, proof_pics, 
       handle_note, handle_man, receive_man, 
-      receive_time, receive_note,delivery_sn,order_item_id)
+      receive_time, receive_note,delivery_sn,order_item_id,precision_amount)
     values (#{orderId,jdbcType=BIGINT}, #{companyAddressId,jdbcType=BIGINT}, #{productId,jdbcType=BIGINT}, 
       #{orderSn,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{memberUsername,jdbcType=VARCHAR}, 
       #{returnAmount,jdbcType=DECIMAL}, #{returnName,jdbcType=VARCHAR}, #{returnPhone,jdbcType=VARCHAR}, 
@@ -147,7 +148,7 @@
       #{productCount,jdbcType=INTEGER}, #{productPrice,jdbcType=DECIMAL}, #{productRealPrice,jdbcType=DECIMAL}, 
       #{reason,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{proofPics,jdbcType=VARCHAR}, 
       #{handleNote,jdbcType=VARCHAR}, #{handleMan,jdbcType=VARCHAR}, #{receiveMan,jdbcType=VARCHAR}, 
-      #{receiveTime,jdbcType=TIMESTAMP}, #{receiveNote,jdbcType=VARCHAR},#{deliverySn},#{orderItemId})
+      #{receiveTime,jdbcType=TIMESTAMP}, #{receiveNote,jdbcType=VARCHAR},#{deliverySn},#{orderItemId},#{precisionAmount})
   </insert>
   <insert id="insertSelective" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApply">
     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Long">
@@ -239,6 +240,9 @@
       <if test="orderItemId != null">
         order_item_id,
       </if>
+      <if test="precisionAmount != null">
+        precision_amount,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="orderId != null">
@@ -325,6 +329,9 @@
       <if test="orderItemId != null">
         #{orderItemId},
       </if>
+      <if test="precisionAmount != null">
+        #{precisionAmount},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.yonge.cooleshow.mbg.model.OmsOrderReturnApplyExample" resultType="java.lang.Long">
@@ -423,6 +430,9 @@
       <if test="record.orderItemId != null">
         order_item_id = #{record.orderItemId},
       </if>
+      <if test="record.precisionAmount != null">
+        precision_amount = #{record.precisionAmount},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -458,6 +468,7 @@
       receive_time = #{record.receiveTime,jdbcType=TIMESTAMP},
       receive_note = #{record.receiveNote,jdbcType=VARCHAR},
       order_item_id = #{record.orderItemId},
+      precision_amount = #{record.precisionAmount},
       delivery_sn = #{record.deliverySn,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -550,6 +561,9 @@
       <if test="orderItemId != null">
         order_item_id = #{orderItemId},
       </if>
+      <if test="precisionAmount != null">
+        precision_amount = #{precisionAmount},
+      </if>
     </set>
     where id = #{id,jdbcType=BIGINT}
   </update>
@@ -582,6 +596,7 @@
       receive_time = #{receiveTime,jdbcType=TIMESTAMP},
       receive_note = #{receiveNote,jdbcType=VARCHAR},
       order_item_id = #{orderItemId},
+      precision_amount = #{precisionAmount},
       delivery_sn = #{deliverySn,jdbcType=VARCHAR}
     where id = #{id,jdbcType=BIGINT}
   </update>

+ 1 - 1
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderReturnApplyServiceImpl.java

@@ -90,7 +90,7 @@ public class OmsPortalOrderReturnApplyServiceImpl implements OmsPortalOrderRetur
         }
         realApply.setProductPrice(omsOrderItem.getProductPrice());
         realApply.setProductRealPrice(omsOrderItem.getRealAmount());
-
+        realApply.setPrecisionAmount(omsOrderItem.getPrecisionAmount());
         realApply.setCreateTime(new Date());
         realApply.setStatus(0);
         return returnApplyMapper.insert(realApply);

+ 12 - 4
cooleshow-mall/mall-portal/src/main/java/com/yonge/cooleshow/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -380,7 +380,8 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             }
             MallOrderItemDto teacherShareDto = new MallOrderItemDto();
             BeanUtils.copyProperties(omsOrderItem,teacherShareDto);
-            teacherShareDto.setRealAmount(omsOrderItem.getRealAmount().multiply(BigDecimal.valueOf(omsOrderItem.getProductQuantity())));
+            teacherShareDto.setRealAmount(omsOrderItem.getRealAmount().multiply(BigDecimal.valueOf(omsOrderItem.getProductQuantity()))
+                                                      .subtract(omsOrderItem.getPrecisionAmount()));
             teacherShareDto.setStatus(status);
             teacherShareDto.setUserId(detail.getMemberId());
             list.add(teacherShareDto);
@@ -1281,7 +1282,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
      * 对优惠券优惠进行处理
      *
      * @param orderItemList       order_item列表
-     * @param couponHistoryDetail 可用优惠券详情
+     * @param couponAmount 可用优惠券详情
      */
     private void handleCouponAmount(List<OmsOrderItem> orderItemList, BigDecimal couponAmount) {
         // SmsCoupon coupon = couponHistoryDetail.getCoupon();
@@ -1311,11 +1312,18 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         for (OmsOrderItem orderItem : orderItemList) {
             //(商品价格/可用商品总价)*优惠券面额
             BigDecimal couponAmount = orderItem.getProductPrice()
-                                               .divide(totalAmount, 3, BigDecimal.ROUND_DOWN)
+                                               .divide(totalAmount, 2, BigDecimal.ROUND_DOWN)
                                                .multiply(coupon);
             orderItem.setCouponAmount(couponAmount);
-            LOG.info("coupon :{}",couponAmount);
+
+            orderItem.setPrecisionAmount(BigDecimal.ZERO);
         }
+        BigDecimal reduce = orderItemList.stream()
+                                         .map(omsOrderItem -> omsOrderItem.getCouponAmount().multiply(BigDecimal.valueOf(omsOrderItem.getProductQuantity())))
+                                         .reduce(BigDecimal.ZERO, BigDecimal::add);
+        OmsOrderItem omsOrderItem = orderItemList.get(0);
+        omsOrderItem.setPrecisionAmount(coupon.subtract(reduce));
+
     }
 
     /**

+ 2 - 2
cooleshow-mall/mall-portal/src/main/resources/config/mybatis/PortalOrderItemDao.xml

@@ -7,7 +7,7 @@
         product_sn, product_price, product_quantity,
         product_sku_id, product_category_id, product_sku_code,promotion_name,
         promotion_amount, coupon_amount, integration_amount,
-        real_amount,product_attr,promoter_id,share_proportion_) values
+        real_amount,product_attr,promoter_id,share_proportion_,precision_amount) values
         <foreach collection="list" item="item" separator="," index="index">
             (#{item.orderId,jdbcType=BIGINT}, #{item.orderSn,jdbcType=VARCHAR}, #{item.productId,jdbcType=BIGINT},
             #{item.productPic,jdbcType=VARCHAR}, #{item.productName,jdbcType=VARCHAR}, #{item.productBrand,jdbcType=VARCHAR},
@@ -16,7 +16,7 @@
             #{item.promotionName,jdbcType=VARCHAR},
             #{item.promotionAmount,jdbcType=DECIMAL}, #{item.couponAmount,jdbcType=DECIMAL},
             #{item.integrationAmount,jdbcType=DECIMAL},
-            #{item.realAmount,jdbcType=DECIMAL},#{item.productAttr,jdbcType=VARCHAR},#{item.promoterId},#{item.shareProportion})
+            #{item.realAmount,jdbcType=DECIMAL},#{item.productAttr,jdbcType=VARCHAR},#{item.promoterId},#{item.shareProportion},#{item.precisionAmount})
         </foreach>
     </insert>
 </mapper>

+ 9 - 0
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ActivityRewardController.java

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.cooleshow.common.enums.YesOrNoEnum;
 import com.yonge.toolset.base.exception.BizException;
 import com.yonge.toolset.base.page.PageInfo;
@@ -30,6 +31,7 @@ import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
 
 import java.util.List;
+import java.util.Optional;
 
 @RestController
 @RequestMapping("/activityReward")
@@ -94,6 +96,13 @@ public class ActivityRewardController extends BaseController {
         if (user == null || null == user.getId()) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
+
+        // 校验请求参数
+        if (RewardTypeEnum.COUPON == activityReward.getRewardType()
+                && Optional.ofNullable(activityReward.getCouponId()).orElse(0L) <= 0) {
+            return failed("无效的优惠券ID");
+        }
+
         return status(activityRewardService.submit(activityReward, user));
     }
 

+ 1 - 1
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/open/AdminClient.java

@@ -137,7 +137,7 @@ public class AdminClient extends BaseController {
                                    .collect(Collectors.toList());
         request.setIssueIds(collect);
         // 更新受影响优惠券数据
-        int ret = couponInfoService.updateCouponOrderInfo(CouponOrderWrapper.from(request.jsonString()));
+        int ret = couponInfoService.updateUserOrderCouponInfo(CouponOrderWrapper.from(request.jsonString()));
 
         return succeed(ret > 0);
     }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ActivityRewardDao.java

@@ -4,6 +4,7 @@ import java.util.List;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
@@ -55,4 +56,11 @@ public interface ActivityRewardDao extends BaseMapper<ActivityReward> {
      * @return
      */
     Boolean userRewarded(@Param("userId") Long userId, @Param("activityId") Long activityId);
+
+    /**
+     * 奖品关联活动统计
+     * @param rewardIds 奖品ID
+     * @return List<StatGroupWrapper>
+     */
+    List<StatGroupWrapper> selectRewardActivityStatInfo(@Param("rewardIds") List<Long> rewardIds);
 }

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ActivityPlanDto.java

@@ -25,7 +25,7 @@ import java.util.Optional;
  * @Data: 2022-08-04 10:19:49
  */
 @ApiModel(value = "ActivityPlanDto对象", description = "活动计划表数据传输对象")
-public class ActivityPlanDto extends ActivityPlan{
+public class ActivityPlanDto extends ActivityPlan {
 	private static final long serialVersionUID = 1L;
 
 	@ApiModelProperty(value = "操作人id",hidden = true)

+ 25 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlan.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.activity.ActivityRankingRuleEnum;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.RegistrationMethodEnum;
 import io.swagger.annotations.ApiModel;
@@ -109,6 +110,14 @@ public class ActivityPlan implements Serializable {
     @TableField(value = "update_by_")
     private Long updateBy;
 
+    @ApiModelProperty("奖励名次 ")
+    @TableField(value = "ranking_")
+    private Integer ranking;
+
+    @ApiModelProperty("名次规则: EVALUATIONS_NUMBER(评测次数) EVALUATIONS_TIME(评测时间) ")
+    @TableField(value = "ranking_rule_")
+    private ActivityRankingRuleEnum rankingRule;
+
     public Long getId() {
         return id;
     }
@@ -292,4 +301,20 @@ public class ActivityPlan implements Serializable {
     public void setActivityClient(ClientEnum activityClient) {
         this.activityClient = activityClient;
     }
+
+    public Integer getRanking() {
+        return ranking;
+    }
+
+    public void setRanking(Integer ranking) {
+        this.ranking = ranking;
+    }
+
+    public ActivityRankingRuleEnum getRankingRule() {
+        return rankingRule;
+    }
+
+    public void setRankingRule(ActivityRankingRuleEnum rankingRule) {
+        this.rankingRule = rankingRule;
+    }
 }

+ 15 - 6
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityPlanReward.java

@@ -4,17 +4,15 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Positive;
 import javax.validation.constraints.PositiveOrZero;
+import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 活动计划奖品表
@@ -45,6 +43,10 @@ public class ActivityPlanReward implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date createTime;
 
+    @ApiModelProperty("奖品分组 ")
+    @TableField(value = "group_")
+    private String group;
+
 	public Long getId() {
         return id;
     }
@@ -84,5 +86,12 @@ public class ActivityPlanReward implements Serializable {
     public void setCreateTime(Date createTime) {
         this.createTime = createTime;
     }
-    
+
+    public String getGroup() {
+        return group;
+    }
+
+    public void setGroup(String group) {
+        this.group = group;
+    }
 }

+ 24 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ActivityReward.java

@@ -41,7 +41,7 @@ public class ActivityReward implements Serializable {
     @TableField(value = "reward_name_")
     @NotBlank(message = "奖品名称不能为空")
     private String rewardName;
-    @ApiModelProperty("奖品类型:  ACTUAL 实物 VIP 小酷AI会员 PIAMO_ROOM 琴房时长 ")
+    @ApiModelProperty("奖品类型:  ACTUAL 实物 VIP 小酷AI会员 PIAMO_ROOM 琴房时长 COUPON(优惠券)")
     @TableField(value = "reward_type_")
     @NotNull(message = "奖品类型不能为空")
     private RewardTypeEnum rewardType;
@@ -92,6 +92,14 @@ public class ActivityReward implements Serializable {
     @TableField(value = "discount_price_")
     private BigDecimal discountPrice;
 
+    @ApiModelProperty("优惠券ID")
+    @TableField(value = "coupon_id_")
+    private Long couponId;
+
+    @ApiModelProperty(value = "奖品分组 ", hidden = true)
+    @TableField(exist = false)
+    private String group;
+
     public BigDecimal getDiscountPrice() {
         return discountPrice;
     }
@@ -220,4 +228,19 @@ public class ActivityReward implements Serializable {
         this.updateBy = updateBy;
     }
 
+    public String getGroup() {
+        return group;
+    }
+
+    public void setGroup(String group) {
+        this.group = group;
+    }
+
+    public Long getCouponId() {
+        return couponId;
+    }
+
+    public void setCouponId(Long couponId) {
+        this.couponId = couponId;
+    }
 }

+ 34 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/activity/ActivityRankingRuleEnum.java

@@ -0,0 +1,34 @@
+package com.yonge.cooleshow.biz.dal.enums.activity;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.yonge.toolset.base.enums.BaseEnum;
+
+/**
+ * 活动获奖排名规则
+ *
+ * @Author: Eric
+ * @Data: 2022/3/16 10:19
+ */
+public enum ActivityRankingRuleEnum implements BaseEnum<String, ActivityRankingRuleEnum> {
+
+    EVALUATIONS_NUMBER("评测次数"),
+    EVALUATIONS_TIME("评测时间"),
+    ;
+    @EnumValue
+    private String code;
+    private String name;
+
+    ActivityRankingRuleEnum(String name) {
+        this.code = this.name();
+        this.name = name;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 0 - 7
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/CouponInfoService.java

@@ -68,13 +68,6 @@ public interface CouponInfoService extends IService<CouponInfo> {
     int updateUserOrderCouponInfo(CouponOrderWrapper wrapper);
 
     /**
-     * 更新用户订单优惠券状态
-     * @param wrapper CouponOrderWrapper
-     * @return int 受影响的行数
-     */
-    int updateCouponOrderInfo( CouponOrderWrapper wrapper);
-
-    /**
      * 新增优惠券库存量调整信息
      * @param inventory CouponInventory
      * @return int 入库行数

+ 37 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityEvaluationServiceImpl.java

@@ -13,7 +13,6 @@ import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -27,9 +26,11 @@ import com.yonge.cooleshow.biz.dal.dto.search.ActivityEvaluationSearch;
 import com.yonge.cooleshow.biz.dal.dto.search.MusicSheetSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityEvaluation;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
 import com.yonge.cooleshow.biz.dal.entity.Subject;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationRecordService;
 import com.yonge.cooleshow.biz.dal.service.ActivityEvaluationService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
 import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
 import com.yonge.cooleshow.biz.dal.service.SubjectService;
 import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
@@ -42,6 +43,20 @@ import com.yonge.cooleshow.common.enums.ActivityResourceEnum;
 import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
 import com.yonge.cooleshow.common.enums.EStatus;
 import com.yonge.toolset.base.exception.BizException;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@Slf4j
 @Service
 public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluationDao, ActivityEvaluation> implements ActivityEvaluationService {
 
@@ -54,6 +69,12 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
     @Autowired
     private SubjectService subjectService;
 
+    @Autowired
+    private ActivityEvaluationService activityEvaluationService;
+
+    @Autowired
+    private ActivityPlanRewardService activityPlanRewardService;
+
     @Override
     public ActivityEvaluationVo detail(Long id) {
         return baseMapper.detail(id);
@@ -69,6 +90,7 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
         return baseMapper.selectAll(query);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public Boolean addBatch(ActivityEvaluationDto param, SysUser user) {
 
@@ -150,6 +172,20 @@ public class ActivityEvaluationServiceImpl extends ServiceImpl<ActivityEvaluatio
                     .eq(ActivityPlan::getId,param.getActivityId())
             );
         }
+
+        // 更新评测活动奖品数
+        if (ActivityTypeEnum.EVALUATION == activity.getActivityType()) {
+
+            // 当前活动曲目数
+            int ret = activityEvaluationService.count(Wrappers.<ActivityEvaluation>lambdaQuery()
+                    .eq(ActivityEvaluation::getActivityId, activity.getId())
+                    .eq(ActivityEvaluation::getResourceType, ActivityResourceEnum.MUSIC_SHEET));
+
+            activityPlanRewardService.update(Wrappers.<ActivityPlanReward>lambdaUpdate()
+                            .set(ActivityPlanReward::getRewardNum, ret)
+                    .eq(ActivityPlanReward::getActivityId, activity.getId()));
+        }
+
         return true;
     }
 

+ 38 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanServiceImpl.java

@@ -85,6 +85,9 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
     private ActivityPlanRewardService activityPlanRewardService;
 
     @Autowired
+    private ActivityPlanDao activityPlanDao;
+
+    @Autowired
     private ActivityRewardService activityRewardService;
 
     @Resource
@@ -622,9 +625,42 @@ public class ActivityPlanServiceImpl extends ServiceImpl<ActivityPlanDao, Activi
             updateRewardDtoList = new ArrayList<>();
         }
 
+        // 活动信息
+        ActivityPlan activityPlan = activityPlanDao.selectById(activityId);
+        if (Objects.isNull(activityPlan)) {
+            throw new BizException("无效的活动ID");
+        }
+
+        int ret = 0;
+        if (ActivityTypeEnum.EVALUATION == activityPlan.getActivityType()) {
+
+            // 当前活动曲目数
+            ret = activityEvaluationService.count(Wrappers.<ActivityEvaluation>lambdaQuery()
+                    .eq(ActivityEvaluation::getActivityId, activityId)
+                    .eq(ActivityEvaluation::getResourceType, ActivityResourceEnum.MUSIC_SHEET));
+        }
+
+        ActivityPlanReward planReward;
+        for (ActivityPlanRewardDto item : updateRewardDtoList) {
+            // activityPlanRewardService.saveOrUpdateReward(item);
 
-        for (ActivityPlanRewardDto rewardDto : updateRewardDtoList) {
-            activityPlanRewardService.saveOrUpdateReward(rewardDto);
+            // 评测活动
+            if (ActivityTypeEnum.EVALUATION == activityPlan.getActivityType()) {
+                item.setRewardNum(ret);
+            }
+            planReward = activityPlanRewardService.detailByActivityIdAndRewardId(item.getActivityId(), item.getRewardId());
+
+            if (Objects.isNull(planReward)) {
+
+                // 新增
+                activityPlanRewardService.save(item);
+            } else {
+
+                // 更新
+                item.setId(planReward.getId());
+
+                activityPlanRewardService.updateById(item);
+            }
         }
         //还有删除的
         List<Long> rewardIds = updateRewardDtoList.stream().map(ActivityPlanRewardDto::getRewardId).collect(Collectors.toList());

+ 72 - 11
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityRewardServiceImpl.java

@@ -1,44 +1,60 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Maps;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
+import com.yonge.cooleshow.biz.dal.dao.ActivityRewardDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.ActivityRewardDto;
 import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardChangeStockSearch;
+import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
+import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
 import com.yonge.cooleshow.biz.dal.entity.ActivityRewardChangeStock;
-import com.yonge.cooleshow.biz.dal.entity.*;
+import com.yonge.cooleshow.biz.dal.entity.CouponInfo;
+import com.yonge.cooleshow.biz.dal.entity.PianoRoomChangeRecord;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
 import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
-import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.*;
+import com.yonge.cooleshow.biz.dal.mapper.CouponInfoMapper;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
+import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
+import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
+import com.yonge.cooleshow.biz.dal.service.MemberPriceSettingsService;
+import com.yonge.cooleshow.biz.dal.service.PianoRoomChangeRecordService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.vo.ActivityRewardChangeStockVo;
+import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
+import com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper;
 import com.yonge.cooleshow.common.enums.CacheNameEnum;
 import com.yonge.cooleshow.common.enums.RewardTypeEnum;
 import com.yonge.cooleshow.common.enums.UnitEnum;
 import com.yonge.toolset.base.exception.BizException;
-import com.yonge.toolset.base.util.StringUtil;
 import com.yonge.toolset.payment.util.DistributedLock;
 import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
 import org.apache.commons.collections.CollectionUtils;
 import org.redisson.RedissonMultiLock;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.yonge.cooleshow.biz.dal.vo.ActivityRewardVo;
-import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
-import com.yonge.cooleshow.biz.dal.dao.ActivityRewardDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 
@@ -62,6 +78,8 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
     @Autowired
     private PianoRoomChangeRecordService pianoRoomChangeRecordService;
 
+    @Autowired
+    private CouponInfoMapper couponInfoMapper;
 
     @Autowired
     private ActivityPlanRewardService activityPlanRewardService;
@@ -81,7 +99,43 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
 
     @Override
     public IPage<ActivityRewardVo> selectPage(IPage<ActivityRewardVo> page, ActivityRewardSearch query) {
-        return page.setRecords(baseMapper.selectPage(page, query));
+
+        List<ActivityRewardVo> rewardInfos = baseMapper.selectPage(page, query);
+
+        if (CollectionUtils.isEmpty(rewardInfos)) {
+            // 直接返回请求结果
+            return page.setRecords(rewardInfos);
+        }
+
+        // 优惠券奖品,查询优惠券名称
+        List<Long> couponIds = rewardInfos.stream()
+                .filter(x -> RewardTypeEnum.COUPON == x.getRewardType())
+                .map(ActivityReward::getCouponId)
+                .filter(x -> Optional.ofNullable(x).orElse(0L) > 0)
+                .distinct().collect(Collectors.toList());
+
+        // 优惠券名称
+        Map<Long, String> couponNameMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(couponIds)) {
+
+            couponNameMap = couponInfoMapper.selectBatchIds(couponIds).stream()
+                    .collect(Collectors.toMap(CouponInfo::getId, CouponInfo::getName, (o, n) -> n));
+        }
+
+        // 奖品关联活动统计
+        List<Long> rewardIds = rewardInfos.stream()
+                .map(ActivityReward::getId).distinct().collect(Collectors.toList());
+
+        Map<Long, Integer> collect = getBaseMapper().selectRewardActivityStatInfo(rewardIds).stream()
+                .collect(Collectors.toMap(StatGroupWrapper::getId, StatGroupWrapper::getTotal, (o, n) -> n));
+
+        for (ActivityRewardVo item : rewardInfos) {
+
+            item.activityNum(collect.getOrDefault(item.getId(), 0))
+                    .setCouponName(couponNameMap.getOrDefault(item.getCouponId(), ""));
+        }
+
+        return page.setRecords(rewardInfos);
     }
 
     @Override
@@ -108,6 +162,13 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
             activityReward.setStock(null);
             activityReward.setUpdateBy(user.getId());
 
+            // 校验奖品与活动是否存在关联
+            int count = activityPlanRewardService.count(Wrappers.<ActivityPlanReward>lambdaQuery()
+                    .eq(ActivityPlanReward::getRewardId, activityReward.getId()));
+            if (count > 0) {
+                throw new BizException("请先解除与活动奖品关联关系");
+            }
+
             baseMapper.updateById(activityReward);
         }
         return true;

+ 1 - 13
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CouponInfoServiceImp.java

@@ -310,6 +310,7 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
      * @param wrapper CouponOrderWrapper
      * @return int 受影响的行数
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public int updateUserOrderCouponInfo( CouponOrderWrapper wrapper) {
 
@@ -359,19 +360,6 @@ public class CouponInfoServiceImp extends ServiceImpl<CouponInfoMapper, CouponIn
     }
 
     /**
-     * 更新用户订单优惠券状态
-     * 1、增加批量更新事务边界
-     * @param wrapper CouponOrderWrapper
-     * @return int 受影响的行数
-     */
-    @Transactional(rollbackFor = Exception.class)
-    @Override
-    public int updateCouponOrderInfo(CouponOrderWrapper wrapper) {
-
-        return updateUserOrderCouponInfo(wrapper);
-    }
-
-    /**
      * 新增优惠券库存量调整信息
      *
      * @param inventory CouponInventory

+ 27 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/ActivityRewardVo.java

@@ -17,6 +17,12 @@ public class ActivityRewardVo extends ActivityReward{
 	@ApiModelProperty(value = "是否有活动引用")
 	private Boolean useFlag;
 
+	@ApiModelProperty(value = "优惠券名称")
+	private String couponName;
+
+	@ApiModelProperty(value = "奖品关联活动数")
+	private Integer activityNum;
+
 	public String getUpdateByName() {
 		return updateByName;
 	}
@@ -32,4 +38,25 @@ public class ActivityRewardVo extends ActivityReward{
 	public void setUseFlag(Boolean useFlag) {
 		this.useFlag = useFlag;
 	}
+
+	public String getCouponName() {
+		return couponName;
+	}
+
+	public void setCouponName(String couponName) {
+		this.couponName = couponName;
+	}
+
+	public Integer getActivityNum() {
+		return activityNum;
+	}
+
+	public void setActivityNum(Integer activityNum) {
+		this.activityNum = activityNum;
+	}
+
+	public ActivityRewardVo activityNum(Integer activityNum) {
+		this.activityNum = activityNum;
+		return this;
+	}
 }

+ 2 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityPlanMapper.xml

@@ -43,6 +43,8 @@
         , t.registration_price_ as registrationPrice
         , t.share_rate_ as shareRate
         , t.share_type_ as shareType
+        , t.ranking_ as ranking
+        , t.ranking_rule_ as rankingRule
         , t.draft_flag_ as draftFlag
         , if(t.activity_state_ = 1, 1, 0) as activityState
         , t.create_time_ as createTime

+ 38 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ActivityRewardMapper.xml

@@ -8,6 +8,7 @@
         <result column="reward_name_" property="rewardName" />
         <result column="reward_type_" property="rewardType" />
         <result column="reward_describe_" property="rewardDescribe" />
+        <result column="coupon_id_" property="couponId" />
         <result column="img_url_" property="imgUrl" />
         <result column="stock_" property="stock" />
         <result column="num_" property="num" />
@@ -28,6 +29,7 @@
         , t.reward_name_ as rewardName
         , t.reward_type_ as rewardType
         , t.reward_describe_ as rewardDescribe
+        , t.coupon_id_ as couponId
         , t.img_url_ as imgUrl
         , t.stock_ as stock
         , t.num_ as num
@@ -94,8 +96,29 @@
         <include refid="selectSql"/>
     </select>
 
-    <select id="getActivityReward" resultMap="BaseResultMap">
-        select ar.*
+
+    <resultMap id="ActivityRewardResultMap" type="com.yonge.cooleshow.biz.dal.entity.ActivityReward">
+        <result column="id_" property="id" />
+        <result column="activity_id_" property="activityId" />
+        <result column="reward_client_" property="rewardClient" />
+        <result column="reward_name_" property="rewardName" />
+        <result column="reward_type_" property="rewardType" />
+        <result column="reward_describe_" property="rewardDescribe" />
+        <result column="img_url_" property="imgUrl" />
+        <result column="stock_" property="stock" />
+        <result column="num_" property="num" />
+        <result column="unit_" property="unit" />
+        <result column="status_" property="status" />
+        <result column="create_time_" property="createTime" />
+        <result column="create_by_" property="createBy" />
+        <result column="update_time_" property="updateTime" />
+        <result column="update_by_" property="updateBy" />
+        <result column="discount_price_" property="discountPrice" />
+
+        <result column="group_" property="group" />
+    </resultMap>
+    <select id="getActivityReward" resultMap="ActivityRewardResultMap">
+        select ar.*, apr.group_
         from activity_plan_reward apr
         left join activity_reward ar on apr.reward_id_ = ar.id_
         where apr.activity_id_ = #{activityPlanId}
@@ -105,4 +128,17 @@
         select (count(1)>0) as flag from activity_user_reward
         where activity_id_ = #{activityId} and user_id_ = #{userId}
     </select>
+
+    <!--奖品关联活动统计-->
+    <select id="selectRewardActivityStatInfo"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.StatGroupWrapper">
+        SELECT t1.reward_id_ AS id, COUNT(DISTINCT t1.id_) AS total FROM activity_plan_reward t1
+        <where>
+            <if test="rewardIds != null">
+                AND t1.reward_id_ IN (<foreach collection="rewardIds" separator="," item="item">#{item}</foreach>)
+            </if>
+        </where>
+        GROUP BY t1.reward_id_
+    </select>
+    <!--奖品关联活动统计-->
 </mapper>