记得上下班打卡 | git大法好,push需谨慎

Commit 6c7fe5c6 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/jxl_1201_jifenDraw' into pre

parents 7e6a3ade 9530a0a7
......@@ -174,7 +174,7 @@ create table candy_mgt_coupon
coupon_id varchar(64) not null comment '~candy_coupon.coupon_id',
state tinyint comment '发放状态[0-未发放|1-已发放|2-无效|3-已取消|9-发放中|10-会员礼包初始模版]',
# bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换]',
# bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分商品]',
event_amt int comment '发放量',
event_type tinyint comment '发放类型[0-保留|1-会员|2-手机号|10-全体用户]',
event_limit text comment '`发放类型`为2-手机号时发放手机号以,分隔',
......@@ -203,7 +203,7 @@ create table candy_coupon
exclusive smallint comment '专享标识[0-常规|1-会员礼包]',
busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]',
cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分商品]',
discount decimal(8, 2) comment '折扣[8折即0.8]',
val_face decimal(8, 2) comment '面值',
......
......@@ -54,7 +54,7 @@ public class AdamRedisConst {
public static final String INCR_MEMBER_NO = PREFIX.concat("incr:member_no");
public static final String INCR_MEMBER_LIMITATION = PREFIX.concat("incr:member_limitation");
public static final String SWITCH_BUY_MEMBER = PREFIX.concat("switch:buy:member");
// public static final String SWITCH_BUY_MEMBER = PREFIX.concat("switch:buy:member");
public static final String SERIAL_NUMBER_MEMBER = PREFIX.concat("serial_no:");
......
......@@ -41,7 +41,7 @@ public class CandyMemberCouponBuildParam {
@ApiModelProperty(required = true, value = "券类型[1-代金券|2-满减券|101-优先券]", allowableValues = "1,2,101")
private Integer couType;
// @NotNull(message = "券领取方式不能为空")
// @ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]", allowableValues = "0,1,2,3,4")
// @ApiModelProperty(required = true, value = "领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]", allowableValues = "0,1,2,3,4")
// private Integer bindType;
// @ApiModelProperty(required = false, value = "折扣[8折即0.8]", example = "0.8")
// private BigDecimal discount;
......
......@@ -23,7 +23,7 @@ public class CandyCouponBasicVo implements Serializable, Cloneable {
private Integer busiType;
@ApiModelProperty(value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券 | 101-优先券]")
private Integer couType;
@ApiModelProperty(value = "[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]")
@ApiModelProperty(value = "[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]")
private Integer bindType;
@ApiModelProperty(value = "折扣")
private BigDecimal discount;
......
package com.liquidnet.service.candy.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel
public class CandyCouponPreviewVo implements Serializable, Cloneable {
/* --- --- --- CandyCoupon */
private String couponId;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "标注")
private String label;
@ApiModelProperty(value = "须知")
private String notice;
@ApiModelProperty(value = "业务类别[0-全场|1-演出|2-商品|3-优先购]")
private Integer busiType;
@ApiModelProperty(value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券 | 101-优先券]")
private Integer couType;
@ApiModelProperty(value = "[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]")
private Integer bindType;
@ApiModelProperty(value = "折扣")
private BigDecimal discount;
@ApiModelProperty(value = "面值")
private BigDecimal valFace;
@ApiModelProperty(value = "满减~满")
private BigDecimal valOver;
@ApiModelProperty(value = "满减~减")
private BigDecimal valMinus;
@ApiModelProperty(value = "有效天数")
private Integer validity;
@ApiModelProperty(value = "兑换有效天数")
private Integer redeemValidity;
/* --- --- --- CandyCouponRule */
private List<CandyCouponRulesVo> useRules;
private static final CandyCouponPreviewVo obj = new CandyCouponPreviewVo();
public static CandyCouponPreviewVo getNew() {
try {
return (CandyCouponPreviewVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new CandyCouponPreviewVo();
}
}
}
......@@ -29,7 +29,7 @@ public class CandyCouponVo implements Serializable, Cloneable {
private Integer busiType;
@ApiModelProperty(value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券 | 101-优先券]",example = "1")
private Integer couType;
@ApiModelProperty(value = "[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]",example = "1")
@ApiModelProperty(value = "[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]",example = "1")
private Integer bindType;
@ApiModelProperty(value = "折扣 可null",example = "0.5")
private BigDecimal discount;
......
......@@ -35,6 +35,11 @@
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-candy-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
package com.liquidnet.service.sweet.constant;
/**
* <p>
* sweet表状态常量定义
* </p>
*
* @author jiangxiulong
* @since 2021-12-03
*/
public class StatusConst {
// 积分抽奖 奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券
public static final Integer PRIZE_TYPE1 = 1;
public static final Integer PRIZE_TYPE2 = 2;
public static final Integer PRIZE_TYPE3 = 3;
public static final Integer PRIZE_TYPE4 = 4;
public static final Integer PRIZE_TYPE5 = 5;
}
......@@ -30,14 +30,15 @@ public class SweetConstant {
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_LIST = "sweet:integralActivity:list";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_INFO = "sweet:integralActivity:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM = "sweet:integralActivity:prizeNum:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_WINNERS_NUM = "sweet:integralActivity:prizeWinnersNum:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_ID = ":prizeId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_ALL_LIST = "sweet:integralActivity:Draw:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER = "sweet:integralActivity:Draw:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_IN_USER = "sweet:integralActivity:DrawIn:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER_KEY = ":userId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_INFO = "sweet:integralActivity:DrawInfo:drawId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_LOCK = "sweet:integralActivity:lock:userId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM = "sweet:integralActivity:estimatedNum:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_TOTAL_PRIZE_NUM = "sweet:integralActivity:totalPrizeNum:activityId:";
public static final String REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_BLACK = "sweet:integralActivity:drawBlack";
// 答题活动
public final static String REDIS_KEY_SWEET_ANSWER_PHONE = "sweet:answer:phone:";
// 城市投票活动
......
......@@ -50,6 +50,10 @@ public class SweetIntegralActivityFromParam implements Serializable, Cloneable {
@NotNull(message = "activityNum不能为空")
private Integer activityNum;
@ApiModelProperty(required = true, value = "预估玩此活动的总人数", example = "1")
@NotNull(message = "estimatedNum不能为空")
private Integer estimatedNum;
@ApiModelProperty(required = true, value = "活动时间类型 1长期 2开始结束时间", example = "1")
@NotNull(message = "timeType不能为空") @Min(value = 1, message = "timeType无效") @Max(value = 2, message = "timeType无效")
private Integer timeType;
......@@ -68,6 +72,10 @@ public class SweetIntegralActivityFromParam implements Serializable, Cloneable {
@NotBlank(message = "activityTitle不能为空")
private String activityRules;
@ApiModelProperty(required = true, value = "概率公示", example = "这里是概率公示")
@NotBlank(message = "probabilityPublicity不能为空")
private String probabilityPublicity;
@ApiModelProperty(required = true, value = "是否上线 1未上线 2已上线", example = "2")
@NotNull(message = "isOnline不能为空") @Min(value = 1, message = "isOnline无效") @Max(value = 2, message = "isOnline无效")
private Integer isOnline;
......@@ -95,6 +103,7 @@ public class SweetIntegralActivityFromParam implements Serializable, Cloneable {
sweetIntegralActivity.setActivityImg(source.getActivityImg());
sweetIntegralActivity.setActivityType(source.getActivityType());
sweetIntegralActivity.setActivityNum(source.getActivityNum());
sweetIntegralActivity.setEstimatedNum(source.getEstimatedNum());
sweetIntegralActivity.setTimeType(source.getTimeType());
if (null != source.getStartTime() && !source.getStartTime().isEmpty()) {
LocalDateTime startTime = DateUtil.Formatter.yyyyMMddHHmmss.parse(source.getStartTime());
......@@ -106,6 +115,7 @@ public class SweetIntegralActivityFromParam implements Serializable, Cloneable {
}
sweetIntegralActivity.setExpressFeeType(source.getExpressFeeType());
sweetIntegralActivity.setActivityRules(source.getActivityRules());
sweetIntegralActivity.setProbabilityPublicity(source.getProbabilityPublicity());
sweetIntegralActivity.setIsOnline(source.getIsOnline());
return sweetIntegralActivity;
}
......
......@@ -35,6 +35,9 @@ public class SweetIntegralActivityPrizeFormParam implements Serializable,Cloneab
@NotBlank(message = "prizeTitle不能为空")
private String prizeTitle;
@ApiModelProperty(required = false, value = "奖品描述", example = "奖品描述")
private String prizeDescribe;
@ApiModelProperty(required = true, value = "初始展示奖品图片", example = "test.png")
@NotBlank(message = "prizeImgInit不能为空")
private String prizeImgInit;
......@@ -43,23 +46,20 @@ public class SweetIntegralActivityPrizeFormParam implements Serializable,Cloneab
@NotBlank(message = "prizeImgSelect不能为空")
private String prizeImgSelect;
@ApiModelProperty(required = true, value = "奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物", example = "1")
@ApiModelProperty(required = true, value = "奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券", example = "1")
@NotNull(message = "prizeType不能为空")
private Integer prizeType;
@ApiModelProperty(required = false, value = "单次奖励数量如积分 中奖给多少物", example = "1")
private Integer prizeTypeNum;
@ApiModelProperty(value = "关联id 如商品id 券id 选择奖品的时候必传", example = "429803743878963206506461")
private String relationId;
@ApiModelProperty(required = true, value = "奖品数量", example = "100")
@NotNull(message = "prizeNum不能为空")
private Integer prizeNum;
@ApiModelProperty(required = true, value = "限制的中奖人数", example = "10")
@NotNull(message = "winnersNum不能为空")
private Integer winnersNum;
@ApiModelProperty(required = true, value = "是否是无限库存 1有限库存 2无限库存", example = "1")
@NotNull(message = "isInfinite不能为空")
private Integer isInfinite;
@ApiModelProperty(required = true, value = "中奖概率", example = "1")
@NotNull(message = "winningProbability不能为空")
......@@ -81,13 +81,13 @@ public class SweetIntegralActivityPrizeFormParam implements Serializable,Cloneab
sweetIntegralActivityPrize.setIntegralActivityId(source.getIntegralActivityId());
sweetIntegralActivityPrize.setPrizeId(source.getPrizeId());
sweetIntegralActivityPrize.setPrizeTitle(source.getPrizeTitle());
sweetIntegralActivityPrize.setPrizeDescribe(source.getPrizeDescribe());
sweetIntegralActivityPrize.setPrizeImgInit(source.getPrizeImgInit());
sweetIntegralActivityPrize.setPrizeImgSelect(source.getPrizeImgSelect());
sweetIntegralActivityPrize.setPrizeType(source.getPrizeType());
sweetIntegralActivityPrize.setPrizeTypeNum(source.getPrizeTypeNum());
sweetIntegralActivityPrize.setRelationId(source.getRelationId());
sweetIntegralActivityPrize.setPrizeNum(source.getPrizeNum());
sweetIntegralActivityPrize.setWinnersNum(source.getWinnersNum());
sweetIntegralActivityPrize.setIsInfinite(source.getIsInfinite());
sweetIntegralActivityPrize.setWinningProbability(source.getWinningProbability());
return sweetIntegralActivityPrize;
}
......
package com.liquidnet.service.sweet.dto.param.admin;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrizeRelation;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* <p>
* SweetIntegralActivityPrizeRelationFormParam
* </p>
*
* @author jiangxiulong
* @since 2021-12-02
*/
@Data
@ApiModel(value = "SweetIntegralActivityPrizeRelationFormParam", description = "积分活动创建奖品入参")
public class SweetIntegralActivityPrizeRelationFormParam implements Serializable, Cloneable {
private static final long serialVersionUID = -4381851476183020667L;
@ApiModelProperty(value = "活动主键id", example = "429803743878963206506461")
@NotBlank(message = "integralActivityId不能为空")
private String integralActivityId;
@ApiModelProperty(value = "奖品主键id", example = "429803743878963206506461")
@NotBlank(message = "prizeId不能为空")
private String prizeId;
@ApiModelProperty(value = "券id", example = "429803743878963206506461")
@NotBlank(message = "couponId不能为空")
private String couponId;
@ApiModelProperty(value = "券名称", example = "优惠券")
@NotBlank(message = "couponTitle不能为空")
private String couponTitle;
private static final SweetIntegralActivityPrizeRelationFormParam obj = new SweetIntegralActivityPrizeRelationFormParam();
public static SweetIntegralActivityPrizeRelationFormParam getNew() {
try {
return (SweetIntegralActivityPrizeRelationFormParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetIntegralActivityPrizeRelationFormParam();
}
}
public SweetIntegralActivityPrizeRelation copy(SweetIntegralActivityPrizeRelationFormParam source) {
SweetIntegralActivityPrizeRelation activityPrizeRelation = SweetIntegralActivityPrizeRelation.getNew();
if (null == source) return null;
activityPrizeRelation.setPrizeId(source.getPrizeId());
activityPrizeRelation.setCouponId(source.getCouponId());
activityPrizeRelation.setCouponTitle(source.getCouponTitle());
return activityPrizeRelation;
}
}
\ No newline at end of file
......@@ -29,7 +29,7 @@ public class IntegralActivityDrawVo implements Serializable, Cloneable {
@ApiModelProperty(value = "奖品名称")
private String prizeTitle;
@ApiModelProperty(value = "奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物")
@ApiModelProperty(value = "奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券惠顾 2积分 3代金券 4满减券 5优先购买券 6实物")
private Integer prizeType;
@ApiModelProperty(value = "关联id 如商品id 券id")
......@@ -65,15 +65,15 @@ public class IntegralActivityDrawVo implements Serializable, Cloneable {
@ApiModelProperty(value = "adam收货人详细地址")
private String receivingAddress;
@ApiModelProperty(value = "发放状态 1未发放 2已发放 3无需发放")
@ApiModelProperty(value = "发放状态 1未发放 2已发放")
private Integer receivingStatus;
@ApiModelProperty(value = "创建时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
@ApiModelProperty(value = "更新时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
// @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
@ApiModelProperty(value = "快递费用类型 1包邮 2到付")
......
package com.liquidnet.service.sweet.dto.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class IntegralActivityPrizeApiVo implements Serializable, Cloneable {
private static final long serialVersionUID = -303399210433737206L;
@ApiModelProperty(value = "奖品id")
private String prizeId;
@ApiModelProperty(value = "关联活动id")
private String integralActivityId;
@ApiModelProperty(value = "抽奖id")
private String drawId;
@ApiModelProperty(value = "奖品名称")
private String prizeTitle;
@ApiModelProperty(value = "奖品描述")
private String prizeDescribe;
@ApiModelProperty(value = "初始展示奖品图片")
private String prizeImgInit;
@ApiModelProperty(value = "中奖选中奖品图片")
private String prizeImgSelect;
@ApiModelProperty(value = "奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券")
private Integer prizeType;
@ApiModelProperty(value = "单次奖励数量如积分 中奖给多少物")
private Integer prizeTypeNum;
private static final IntegralActivityPrizeApiVo obj = new IntegralActivityPrizeApiVo();
public static IntegralActivityPrizeApiVo getNew() {
try {
return (IntegralActivityPrizeApiVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new IntegralActivityPrizeApiVo();
}
}
public IntegralActivityPrizeApiVo copy(IntegralActivityPrizeVo source) {
if (null == this) return this;
this.setIntegralActivityId(source.getIntegralActivityId());
this.setPrizeId(source.getPrizeId());
this.setIntegralActivityId(source.getIntegralActivityId());
this.setPrizeTitle(source.getPrizeTitle());
this.setPrizeDescribe(source.getPrizeDescribe());
this.setPrizeImgInit(source.getPrizeImgInit());
this.setPrizeImgSelect(source.getPrizeImgSelect());
this.setPrizeType(source.getPrizeType());
this.setPrizeTypeNum(source.getPrizeTypeNum());
return this;
}
}
package com.liquidnet.service.sweet.dto.vo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrizeRelation;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
public class IntegralActivityPrizeRelationVo implements Serializable, Cloneable {
private static final long serialVersionUID = -303399210433737206L;
@ApiModelProperty(value = "prize_relation_id")
private String prizeRelationId;
@ApiModelProperty(value = "prize_id")
private String prizeId;
@ApiModelProperty(value = "券id")
private String couponId;
@ApiModelProperty(value = "券名称")
private String couponTitle;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createdAt;
@ApiModelProperty(value = "更新时间")
private LocalDateTime updatedAt;
private static final IntegralActivityPrizeRelationVo obj = new IntegralActivityPrizeRelationVo();
public static IntegralActivityPrizeRelationVo getNew() {
try {
return (IntegralActivityPrizeRelationVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new IntegralActivityPrizeRelationVo();
}
}
public IntegralActivityPrizeRelationVo copy(SweetIntegralActivityPrizeRelation source) {
if (null == this) return this;
this.setPrizeRelationId(source.getPrizeRelationId());
this.setPrizeId(source.getPrizeId());
this.setCouponId(source.getCouponId());
this.setCouponTitle(source.getCouponTitle());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
return this;
}
}
package com.liquidnet.service.sweet.dto.vo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class IntegralActivityPrizeVo implements Serializable, Cloneable {
private static final long serialVersionUID = -303399210433737206L;
@ApiModelProperty(value = "奖品id")
private String prizeId;
@ApiModelProperty(value = "关联活动id")
private String integralActivityId;
@ApiModelProperty(value = "奖品名称")
private String prizeTitle;
@ApiModelProperty(value = "奖品描述")
private String prizeDescribe;
@ApiModelProperty(value = "初始展示奖品图片")
private String prizeImgInit;
@ApiModelProperty(value = "中奖选中奖品图片")
private String prizeImgSelect;
@ApiModelProperty(value = "奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券")
private Integer prizeType;
@ApiModelProperty(value = "单次奖励数量如积分 中奖给多少物")
private Integer prizeTypeNum;
@ApiModelProperty(value = "奖品数量")
private Integer prizeNum;
@ApiModelProperty(value = "是否是无限库存 1有限库存 2无限")
private Integer isInfinite;
@ApiModelProperty(value = "中奖概率")
private BigDecimal winningProbability;
@ApiModelProperty(value = "创建时间")
private LocalDateTime createdAt;
@ApiModelProperty(value = "更新时间")
private LocalDateTime updatedAt;
@ApiModelProperty(value = "券列表")
private List<IntegralActivityPrizeRelationVo> prizeRelationList;
private static final IntegralActivityPrizeVo obj = new IntegralActivityPrizeVo();
public static IntegralActivityPrizeVo getNew() {
try {
return (IntegralActivityPrizeVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new IntegralActivityPrizeVo();
}
}
public IntegralActivityPrizeVo copy(SweetIntegralActivityPrize source) {
if (null == this) return this;
this.setIntegralActivityId(source.getIntegralActivityId());
this.setPrizeId(source.getPrizeId());
this.setIntegralActivityId(source.getIntegralActivityId());
this.setPrizeTitle(source.getPrizeTitle());
this.setPrizeDescribe(source.getPrizeDescribe());
this.setPrizeImgInit(source.getPrizeImgInit());
this.setPrizeImgSelect(source.getPrizeImgSelect());
this.setPrizeType(source.getPrizeType());
this.setPrizeTypeNum(source.getPrizeTypeNum());
this.setPrizeNum(source.getPrizeNum());
this.setIsInfinite(source.getIsInfinite());
this.setWinningProbability(source.getWinningProbability());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
return this;
}
}
package com.liquidnet.service.sweet.dto.vo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivity;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
......@@ -29,6 +28,9 @@ public class IntegralActivityVo implements Serializable, Cloneable {
@ApiModelProperty(value = "活动玩一次所需积分")
private Integer activityNum;
@ApiModelProperty(value = "预估玩此活动的总人数")
private Integer estimatedNum;
@ApiModelProperty(value = "活动时间类型 1长期 2开始结束时间")
private Integer timeType;
......@@ -44,6 +46,9 @@ public class IntegralActivityVo implements Serializable, Cloneable {
@ApiModelProperty(value = "活动规则")
private String activityRules;
@ApiModelProperty(value = "概率公示")
private String probabilityPublicity;
@ApiModelProperty(value = "是否上线 1未上线 2已上线")
private Integer isOnline;
......@@ -54,7 +59,13 @@ public class IntegralActivityVo implements Serializable, Cloneable {
private LocalDateTime updatedAt;
@ApiModelProperty(value = "奖品列表")
private List<SweetIntegralActivityPrize> prizeList;
private List<IntegralActivityPrizeVo> prizeList;
@ApiModelProperty(value = "奖品列表 积分、券")
private List<IntegralActivityPrizeVo> prizeList1;
@ApiModelProperty(value = "奖品列表 实物、会员、优先购买券")
private List<IntegralActivityPrizeVo> prizeList2;
private static final IntegralActivityVo obj = new IntegralActivityVo();
public static IntegralActivityVo getNew() {
......@@ -72,11 +83,13 @@ public class IntegralActivityVo implements Serializable, Cloneable {
this.setActivityImg(source.getActivityImg());
this.setActivityType(source.getActivityType());
this.setActivityNum(source.getActivityNum());
this.setEstimatedNum(source.getEstimatedNum());
this.setTimeType(source.getTimeType());
this.setStartTime(source.getStartTime());
this.setEndTime(source.getEndTime());
this.setExpressFeeType(source.getExpressFeeType());
this.setActivityRules(source.getActivityRules());
this.setProbabilityPublicity(source.getProbabilityPublicity());
this.setIsOnline(source.getIsOnline());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
......
......@@ -35,26 +35,26 @@ public class SweetIntegralActivityPrizeVo implements Serializable, Cloneable {
@ApiModelProperty(value = "奖品名称")
private String prizeTitle;
@ApiModelProperty(value = "奖品描述")
private String prizeDescribe;
@ApiModelProperty(required = true, value = "初始展示奖品图片")
private String prizeImgInit;
@ApiModelProperty(required = true, value = "中奖选中奖品图片")
private String prizeImgSelect;
@ApiModelProperty(value = "奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物")
@ApiModelProperty(value = "奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券")
private Integer prizeType;
@ApiModelProperty(value = "单次奖励数量如积分 中奖给多少物")
private Integer prizeTypeNum;
@ApiModelProperty(value = "关联id 如商品id 券id")
private String relationId;
@ApiModelProperty(value = "奖品数量")
private Integer prizeNum;
@ApiModelProperty(value = "限制的中奖人数")
private Integer winnersNum;
@ApiModelProperty(value = "是否是无限库存 1有限库存 2无限")
private Integer isInfinite;
@ApiModelProperty(value = "中奖概率")
private BigDecimal winningProbability;
......@@ -85,13 +85,13 @@ public class SweetIntegralActivityPrizeVo implements Serializable, Cloneable {
this.setPrizeId(source.getPrizeId());
this.setIntegralActivityId(source.getIntegralActivityId());
this.setPrizeTitle(source.getPrizeTitle());
this.setPrizeDescribe(source.getPrizeDescribe());
this.setPrizeImgInit(source.getPrizeImgInit());
this.setPrizeImgSelect(source.getPrizeImgSelect());
this.setPrizeType(source.getPrizeType());
this.setPrizeTypeNum(source.getPrizeTypeNum());
this.setRelationId(source.getRelationId());
this.setPrizeNum(source.getPrizeNum());
this.setWinnersNum(source.getWinnersNum());
this.setIsInfinite(source.getIsInfinite());
this.setWinningProbability(source.getWinningProbability());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
......
......@@ -41,6 +41,9 @@ public class SweetIntegralActivityVo implements Serializable, Cloneable {
@ApiModelProperty(value = "活动玩一次所需积分")
private Integer activityNum;
@ApiModelProperty(value = "预估玩此活动的总人数")
private Integer estimatedNum;
@ApiModelProperty(value = "活动时间类型 1长期 2开始结束时间")
private Integer timeType;
......@@ -56,6 +59,9 @@ public class SweetIntegralActivityVo implements Serializable, Cloneable {
@ApiModelProperty(value = "活动规则")
private String activityRules;
@ApiModelProperty(value = "概率公示")
private String probabilityPublicity;
@ApiModelProperty(value = "是否上线 1未上线 2已上线")
private Integer isOnline;
......@@ -87,11 +93,13 @@ public class SweetIntegralActivityVo implements Serializable, Cloneable {
this.setActivityImg(source.getActivityImg());
this.setActivityType(source.getActivityType());
this.setActivityNum(source.getActivityNum());
this.setEstimatedNum(source.getEstimatedNum());
this.setTimeType(source.getTimeType());
this.setStartTime(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getStartTime()));
this.setEndTime(DateUtil.Formatter.yyyyMMddHHmmss.format(source.getEndTime()));
this.setExpressFeeType(source.getExpressFeeType());
this.setActivityRules(source.getActivityRules());
this.setProbabilityPublicity(source.getProbabilityPublicity());
this.setIsOnline(source.getIsOnline());
this.setCreatedAt(source.getCreatedAt());
this.setUpdatedAt(source.getUpdatedAt());
......
package com.liquidnet.service.sweet.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "SweetStoneIntegralParam", description = "添加减少积分入参")
@Data
public class SweetStoneIntegralParam implements Serializable {
private static final long serialVersionUID = 561985919908406636L;
@ApiModelProperty(required = true, value = "用户id", example = "34657843445")
private String uid;
@ApiModelProperty(required = true, value = "积分数量", example = "100")
private Integer score;
@ApiModelProperty(required = true, value = "描述", example = "抽奖加积分")
private String content;
@ApiModelProperty(required = true, value = "增减积分", example = "1增积分 2减积分")
private Integer type;
private static final SweetStoneIntegralParam obj = new SweetStoneIntegralParam();
public static SweetStoneIntegralParam getNew() {
try {
return (SweetStoneIntegralParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetStoneIntegralParam();
}
}
}
package com.liquidnet.service.sweet.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.candy.vo.CandyCouponPreviewVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeApiVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
......@@ -19,13 +20,17 @@ import java.util.List;
*/
public interface ISweetIntegralActivityDrawService extends IService<SweetIntegralActivityDraw> {
ResponseDto<SweetIntegralActivityPrizeVo> create(String integralActivityId);
ResponseDto<IntegralActivityPrizeApiVo> create(String integralActivityId);
ResponseDto<PagedResult<IntegralActivityDrawVo>> drawList(Integer type, String integralActivityId, Integer pageNum);
ResponseDto<PagedResult<IntegralActivityDrawVo>> drawList(String integralActivityId, Integer pageNum);
ResponseDto<List<IntegralActivityDrawVo>> winPrizeUser(String integralActivityId);
ResponseDto perfectAddress(String drawId, String receivingAddressesId);
ResponseDto<IntegralActivityDrawVo> detail(String drawId);
ResponseDto collectCoupon(String couponId, String drawId);
ResponseDto<List<CandyCouponPreviewVo>> couponList(String prizeId, String integralActivityId);
}
......@@ -20,4 +20,8 @@ public interface ISweetIntegralActivityService extends IService<SweetIntegralAct
ResponseDto<List<IntegralActivityVo>> getList();
ResponseDto<IntegralActivityVo> detail(String integralActivityId);
ResponseDto setDrawAllList(String integralActivityId);
ResponseDto drawBlack(String uidS);
}
......@@ -2,8 +2,8 @@ package com.liquidnet.service.sweet.utils;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.dto.vo.admin.SweetIntegralActivityPrizeVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityDraw;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize;
import java.util.ArrayList;
......@@ -11,6 +11,7 @@ import java.util.LinkedList;
public class SweetNewObjectUtil {
private static final ArrayList<SweetIntegralActivityPrizeVo> sweetIntegralActivityPrizeVoArrayList = new ArrayList<>();
private static final ArrayList<IntegralActivityPrizeVo> integralActivityPrizeVoArrayList = new ArrayList<>();
private static final ArrayList<SweetIntegralActivityPrize> sweetIntegralActivityPrizeArrayList = new ArrayList<>();
private static final LinkedList<IntegralActivityDrawVo> sweetIntegralActivityDrawVoLinkedList = new LinkedList<>();
private static final PagedResult<IntegralActivityDrawVo> sweetIntegralActivityDrawVoPagedResult = new PagedResult<>();
......@@ -31,4 +32,8 @@ public class SweetNewObjectUtil {
return (ArrayList<SweetIntegralActivityPrize>) sweetIntegralActivityPrizeArrayList.clone();
}
public static ArrayList<IntegralActivityPrizeVo> getIntegralActivityPrizeVoArrayList() {
return (ArrayList<IntegralActivityPrizeVo>) integralActivityPrizeVoArrayList.clone();
}
}
......@@ -56,13 +56,23 @@ public class BaseController
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
{
// if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
// {
// String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
PageHelper.startPage(pageNum, pageSize, orderBy);
// PageHelper.startPage(pageNum, pageSize, orderBy);
// }
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
} else {
PageHelper.startPage(1, 10, orderBy);
pageNum = 1;
pageSize = 10;
}
if (StringUtils.isEmpty(orderBy)) {
PageHelper.startPage(pageNum, pageSize);
} else {
PageHelper.startPage(pageNum, pageSize, orderBy);
}
}
......
......@@ -3,12 +3,16 @@ package com.liquidnet.client.admin.web.controller.zhengzai.candy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.pagehelper.PageHelper;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.core.page.PageDomain;
import com.liquidnet.client.admin.common.core.page.TableDataInfo;
import com.liquidnet.client.admin.common.core.page.TableSupport;
import com.liquidnet.client.admin.common.utils.StringUtils;
import com.liquidnet.client.admin.common.utils.sql.SqlUtil;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponRuleAdminService;
import com.liquidnet.service.candy.dto.admin.CandyCouponFilterDto;
import com.liquidnet.service.candy.dto.admin.CandyCouponListParam;
import com.liquidnet.service.candy.dto.admin.CandyCouponTemplateDto;
import com.liquidnet.service.candy.entity.CandyCoupon;
......@@ -17,7 +21,6 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
......@@ -25,8 +28,6 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
......@@ -44,47 +45,32 @@ public class CandyCouponAdminController extends BaseController {
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = false, dataType = "Integer", name = "busiType", value = "业务类别[0-全场|1-演出|2-商品|3-优先购]"),
@ApiImplicitParam(type = "form", required = false, dataType = "Integer", name = "couType", value = "券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]"),
@ApiImplicitParam(type = "form", required = false, dataType = "String", name = "bindType", value = "领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属],多种方式则以,分隔入参"),
@ApiImplicitParam(type = "form", required = false, dataType = "String", name = "keyword", value = "搜索关键字"),
@ApiImplicitParam(type = "form", required = false, dataType = "String", name = "bindType", value = "领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属],多种方式则以,分隔入参"),
@ApiImplicitParam(type = "form", required = false, dataType = "String", name = "keyword", value = "搜索关键字[支持检索标题title、描述notice、适用描述busiName]"),
})
@PostMapping("list")
@ResponseBody
public TableDataInfo list(CandyCouponListParam listParam) {
LambdaQueryWrapper<CandyCoupon> queryWrapper = Wrappers.lambdaQuery(CandyCoupon.class);
queryWrapper.eq(CandyCoupon::getState, 1);
queryWrapper.select(CandyCoupon::getCouponId, CandyCoupon::getTitle);
queryWrapper.orderByDesc(CandyCoupon::getCreatedAt);
if (null != listParam) {
if (StringUtils.isNotBlank(listParam.getKeyword())) {
queryWrapper.like(CandyCoupon::getTitle, listParam.getKeyword());
}
if (null != listParam.getBusiType()) {
queryWrapper.eq(CandyCoupon::getBusiType, listParam.getBusiType());
}
if (null != listParam.getCouType()) {
queryWrapper.eq(CandyCoupon::getCouType, listParam.getCouType());
}
// if (null != listParam.getBindType()) {
// queryWrapper.eq(CandyCoupon::getBindType, listParam.getBindType());
// }
if (null != listParam.getBindType() && Pattern.matches("^[\\d,]*$", listParam.getBindType())) {
String[] bindTypeArr = listParam.getBindType().split(",");
if (bindTypeArr.length > 0) {
queryWrapper.in(CandyCoupon::getBindType, Arrays.stream(bindTypeArr).toArray());
}
}
String bindType = listParam.getBindType();
if (StringUtils.isNotEmpty(bindType) && !Pattern.matches("^[\\d,]*$", bindType)) {
listParam.setBindType(null);
}
startPage();
List<CandyCoupon> list = candyCouponAdminService.list(queryWrapper);
TableDataInfo dataTable = getDataTable(list);
List<CandyCouponFilterDto> dtoList = new ArrayList<>();
list.forEach(r -> {
dtoList.add(CandyCouponFilterDto.getNew().copy(r));
});
dataTable.setRows(dtoList);
return dataTable;
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
if (com.liquidnet.client.admin.common.utils.StringUtils.isNotNull(pageNum) && com.liquidnet.client.admin.common.utils.StringUtils.isNotNull(pageSize)) {
} else {
pageNum = 1;
pageSize = 10;
}
if (StringUtils.isEmpty(orderBy)) {
PageHelper.startPage(pageNum, pageSize, "cc.created_at desc");
} else {
PageHelper.startPage(pageNum, pageSize, orderBy);
}
return getDataTable(candyCouponAdminService.listForCouponFilterDto(listParam));
}
@ApiOperation(value = "券详情")
......
......@@ -287,7 +287,7 @@ public class CandyMgtCouponAdminController extends BaseController {
// }
// }
switch (buildParam.getBindType()) {// 领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]
switch (buildParam.getBindType()) {// 领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]
case 0:
buildParam.setEventType(0);
buildParam.setEventLimit(null);
......@@ -303,8 +303,8 @@ public class CandyMgtCouponAdminController extends BaseController {
}
}
break;
case 4:// 新增券领取类型(4-会员专属)处理逻辑同(2-积分兑换
case 2:// TODO: 2021/11/9 PM上线前临时加的券领取类型(2-积分兑换
case 4:// 新增券领取类型(4-会员专属)处理逻辑同(2-积分商品
case 2:// TODO: 2021/11/9 PM上线前临时加的券领取类型(2-积分商品
buildParam.setEventType(0);
buildParam.setEventLimit(null);
break;
......
......@@ -44,7 +44,7 @@ public class SweetIntegralActivityDrawController extends BaseController {
@Autowired
private ISweetIntegralActivityDrawService iSweetIntegralActivityDrawService;
@Log(title = "积分活动奖列表数据", businessType = BusinessType.LIST)
@Log(title = "积分活动奖列表数据", businessType = BusinessType.LIST)
@RequiresPermissions("sweet:integralActivityDraw:list")
@ApiOperation(value = "积分活动中奖列表数据")
@PostMapping("list")
......@@ -54,8 +54,8 @@ public class SweetIntegralActivityDrawController extends BaseController {
return getDataTable(result.getList());
}
@Log(title = "积分活动导出奖列表数据", businessType = BusinessType.EXPORT)
@RequiresPermissions("kylin:integralActivityDraw:exportExcel")
@Log(title = "积分活动导出奖列表数据", businessType = BusinessType.EXPORT)
@RequiresPermissions("sweet:integralActivityDraw:exportExcel")
@PostMapping("/export")
@ResponseBody
public AjaxResult export(@RequestParam("ids") String integralActivityId) {
......
package com.liquidnet.client.admin.web.controller.zhengzai.sweet;
import com.liquidnet.client.admin.common.annotation.Log;
import com.liquidnet.client.admin.common.core.controller.BaseController;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.enums.BusinessType;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetIntegralActivityPrizeRelationService;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityPrizeRelationFormParam;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrizeRelation;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* <p>
* 积分活动表 前端控制器
* </p>
*
* @author jiangxiulong
* @since 2021-10-20
*/
@Api(tags = "积分活动管理")
@Validated
@Controller
@RequestMapping("/sweet/integralActivityPrizeRelation")
public class SweetIntegralActivityPrizeRelationController extends BaseController {
@Autowired
private ISweetIntegralActivityPrizeRelationService activityPrizeRelationService;
@Log(title = "积分活动奖品内部关联券等添加", businessType = BusinessType.INSERT)
@RequiresPermissions("sweet:integralActivityPrizeRelation:create")
@PostMapping("create")
@ApiOperation(value = "积分活动奖品内部关联券等添加")
@ResponseBody
public AjaxResult create(@Valid @RequestBody SweetIntegralActivityPrizeRelationFormParam param) {
Integer result = activityPrizeRelationService.createForm(param);
if (result > 0) {
return success("操作成功");
} else {
return error("操作失败");
}
}
@Log(title = "积分活动奖品内部关联券等删除", businessType = BusinessType.DELETE)
@RequiresPermissions("sweet:integralActivityPrizeRelation:delete")
@PutMapping("delete")
@ApiOperation(value = "积分活动奖品内部关联券等删除")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "prizeRelationId", value = "主键id", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "integralActivityId", value = "活动主键id", required = true),
})
public AjaxResult delete(@RequestParam() String prizeRelationId, @RequestParam() String integralActivityId) {
Integer result = activityPrizeRelationService.delete(prizeRelationId, integralActivityId);
if (result > 0) {
return success("操作成功");
} else {
return error("操作失败");
}
}
@Log(title = "积分活动奖品内部关联券等列表", businessType = BusinessType.LIST)
@RequiresPermissions("sweet:integralActivityPrizeRelation:list")
@GetMapping("list")
@ApiOperation(value = "积分活动奖品内部关联券等列表")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "prizeId", value = "奖品主键id", required = true)
})
public List<SweetIntegralActivityPrizeRelation> list(@RequestParam() String prizeId) {
List<SweetIntegralActivityPrizeRelation> result = activityPrizeRelationService.list(prizeId);
return result;
}
}
;(function ($) {
//这里放入插件代码
var RemoteSearchPerformance = function (element, options) {
this.$element = $(element);
this.options = $.extend(true, {}, $.fn.remoteSearchPerformance.defaults, options);
this.id = $(element).attr('id');
this.ulID = '#' + this.id + '_ul';
this.ulFoucus = false;
// Method overrides
this.render = this.options.render || this.render;
this.select = this.options.select || this.select;
this.ajax = $.extend({}, $.fn.remoteSearchPerformance.defaults.ajax, this.options.ajax);
this.listen();
}
RemoteSearchPerformance.prototype = {
listen: function () {
this.$element.on('blur', $.proxy(this.blur, this))
.on('keyup', $.proxy(this.keyup, this));
this.$element.parent('div.remote_wrapper').on('click',this.ulID, $.proxy(this.click, this));
},
blur: function (e) {
var that = this;
e.stopPropagation();
e.preventDefault();
setTimeout(function () {
if (!that.ulFoucus) {
that.$element.val(that.$element.attr('data-name'));
that.hide();
}
}, 150)
},
keyup: function (e) {
e.stopPropagation();
e.preventDefault();
switch (e.keyCode) {
case 40:
// down arrow
case 38:
// up arrow
break;
case 9:
// tab
case 13:
// enter
this.ajaxer();
case 27:
// escape
break;
default:
this.ajaxer();
}
},
hide: function () {
$(this.ulID).remove();
return this;
},
ajaxer: function () {
var that = this,
keyword = that.$element.val();
busiType = window.typeRadio;
couType = window.typeCoupe;
// Query changed
that.keyword = keyword;
// Cancel last timer if set
if (that.ajax.timerId) {
clearTimeout(that.ajax.timerId);
that.ajax.timerId = null;
}
// Query is good to send, set a timer
that.ajax.timerId = setTimeout(function() {
var params = {
keyword : keyword,
busiType: busiType,
couType: couType,
bindType: '1,4'
};
var jAjax = $.post;
jAjax(that.ajax.url, params, function(data){
return that.render(data.rows);
});
that.ajax.timerId = null;
}, that.ajax.timeout);
return that;
},
render: function (data) {
this.ulFoucus = false;
var liList = data || [];
var num = this._getNum();
//添加 ul
if($(this.ulID).length == 0) {
this.$element.after("<ul id='" + this.id + "_ul' class='remote_search remote_search_top'></ul>");
};
//添加li
var str = "";
if(num) {
if(liList.length) {
for(var i = 0; i < liList.length; i++) {
str += "<li data-id='"+liList[i].couponId+"' data-name='"+liList[i].title+"' title='"+liList[i].title+"' value='"+liList[i].couponId+"'>" + liList[i].title + "</li>";
}
} else {
str = "<li data-id='' data-name=''>搜索无数据</li>"
}
} else {
this.$element.attr('data-name',"");
this.$element.attr('data-id',"");
}
$(this.ulID).html(str);
var bodyHeight = $(document.body).height();
var offsetTop = this.$element.offset().top;
var height = $(this.ulID).outerHeight(true);
if(offsetTop + height > bodyHeight){
$(this.ulID).addClass('remote_search_bottom').removeClass('remote_search_top');
}else{
$(this.ulID).addClass('remote_search_top').removeClass('remote_search_bottom');
}
return this;
},
click: function (e) {
e.stopPropagation();
e.preventDefault();
var dataName = $(e.target).attr('data-name');
var dataID = $(e.target).attr('data-id');
this.$element.val(dataName);
this.$element.attr('data-name',dataName);
this.$element.attr('data-id',dataID);
this.options.chose(dataName,dataID);
this.ulFoucus = true;
return this.hide();
},
_getNum: function(){
return this.$element.val().length;
}
}
$.fn.remoteSearchPerformance = function (option) {
return this.each(function () {
var $this = $(this),
data = $this.data('remoteSearchPerformance'),
options = typeof option === 'object' && option;
if (!data) {
$this.data('remoteSearchPerformance', (data = new RemoteSearchPerformance(this, options)));
}
if (typeof option === 'string') {
data[option]();
}
});
}
$.fn.remoteSearchPerformance.defaults = {
hiddenVal: '',
chose: function () { },
ajax: {
url: null,
timeout: 300,
method: 'get',
timerId: null
},
success: function(res){
}
}
$.fn.remoteSearchPerformance.Constructor = RemoteSearchPerformance;
})(jQuery);
\ No newline at end of file
......@@ -43,6 +43,8 @@
<script th:src="@{/ruoyi/js/ry-ui.js?v=4.6.1}"></script>
<!--远程搜索下拉框-->
<script th:src="@{/js/remote-search-performance.js}"></script>
<!--远程搜索下拉框:积分抽奖配置使用-->
<script th:src="@{/js/remote-search-coupon-list.js}"></script>
<script th:src="@{/js/remote-search-coupon.js}"></script>
</div>
......
......@@ -25,7 +25,7 @@
}
.interests_item {
width: 500px;
height: 700px;
height: 950px;
float: left;
margin-left: 126px !important;
}
......@@ -92,6 +92,10 @@
background: #0d8ddb;
color: #fff;
}
.member-coupes-item {
max-height: 300px;
overflow-y: auto;
}
.member-coupes-item ul{
padding-left: 0;
text-align: left;
......@@ -138,6 +142,9 @@
.remote_search {
padding-left: 0;
}
.interestsDesc_inner {
height: 300px;
}
</style>
<body class="gray-bg" style="font: 14px Helvetica Neue, Helvetica, PingFang SC, 微软雅黑, Tahoma, Arial, sans-serif !important;">
<section class="section-content">
......@@ -290,7 +297,7 @@
</p>
<input type="text" class="form-control" id="interestsTitle" name="interestsTitle" placeholder="请输入标题"/>
<input type="text" class="form-control" id="interestsSubTitle" name="interestsSubTitle" placeholder="请输入副标题"/>
<textarea class="form-control" id="interestsDesc" name="interestsDesc" placeholder="详情内容"></textarea>
<textarea class="form-control interestsDesc_inner" id="interestsDesc" name="interestsDesc" placeholder="详情内容"></textarea>
<div class="member-coupes-item">
<ul>
<div class="member-coupes-inner">
......
......@@ -40,7 +40,7 @@
var updateFlag = [[${@permission.hasPermi('sweet:integralActivity:create')}]];
var isOnlineFlag = [[${@permission.hasPermi('sweet:integralActivity:isOnline')}]];
var drawListFlag = [[${@permission.hasPermi('sweet:integralActivityDraw:list')}]];
var exportExcelFlag = [[${@permission.hasPermi('sweet:integralActivityDraw:export')}]];
var exportExcelFlag = [[${@permission.hasPermi('sweet:integralActivityDraw:exportExcel')}]];
var prefix = ctx + "sweet/integralActivity";
......@@ -85,20 +85,31 @@
}
},
{
field: 'prizeNum',
title: '奖品数量'
field: '',
title: '实物数量',
formatter: function (value, row) {
var sureTotalPrizeNum = row.sureTotalPrizeNum;
var sureOutPrizeNum = row.sureOutPrizeNum;
return '实物总库存:'+sureTotalPrizeNum+'<br>'+'实物已发放数量:'+sureOutPrizeNum;
}
},
{
field: 'drawNum',
title: '已发出'
field: '',
title: '非实物数量',
formatter: function (value, row) {
var otherTotalPrizeNum = row.otherTotalPrizeNum;
var otherOutPrizeNum = row.otherOutPrizeNum;
return '非实物总库存:'+otherTotalPrizeNum+'<br>'+'非实物已发放数量:'+otherOutPrizeNum;
}
},
{
field: '',
title: '奖品剩余',
title: '抽奖次数',
formatter: function (value, row) {
var prizeNum = row.prizeNum;
var drawNum = row.drawNum;
return prizeNum - drawNum;
var estimatedNum = row.estimatedNum;
var totalDrawNum = row.totalDrawNum;
var notBlackDrawNum = row.notBlackDrawNum;
return '预计参与人数:'+estimatedNum+'<br>'+'已抽奖次数:'+totalDrawNum+'<br>'+'去除黑名单已抽奖次数:'+notBlackDrawNum;
}
},
{
......
......@@ -38,15 +38,6 @@
<option value="">全部</option>
<option value="1">未发放</option>
<option value="2">已发放</option>
<option value="3">无需发放</option>
</select>
</li>
<li>
<label>是否中奖:</label>
<select name="isWin">
<option value="">全部</option>
<option value="1">未中奖</option>
<option value="2">已中奖</option>
</select>
</li>
<li>
......@@ -129,9 +120,6 @@
case 2:
receivingStatus = "已发放";
break;
case 3:
receivingStatus = "无需发放";
break;
}
return receivingStatus;
}
......
package com.liquidnet.client.admin.zhengzai.candy.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.service.candy.dto.admin.CandyCouponFilterDto;
import com.liquidnet.service.candy.dto.admin.CandyCouponListParam;
import com.liquidnet.service.candy.entity.CandyCoupon;
import java.util.List;
public interface ICandyCouponAdminService extends IService<CandyCoupon> {
List<CandyCouponFilterDto> listForCouponFilterDto(CandyCouponListParam listParam);
}
......@@ -2,11 +2,22 @@ package com.liquidnet.client.admin.zhengzai.candy.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.client.admin.zhengzai.candy.service.ICandyCouponAdminService;
import com.liquidnet.service.candy.dto.admin.CandyCouponFilterDto;
import com.liquidnet.service.candy.dto.admin.CandyCouponListParam;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.mapper.CandyCouponMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class CandyCouponAdminServiceImpl extends ServiceImpl<CandyCouponMapper, CandyCoupon> implements ICandyCouponAdminService {
@Autowired
private CandyCouponMapper candyCouponMapper;
@Override
public List<CandyCouponFilterDto> listForCouponFilterDto(CandyCouponListParam listParam) {
return candyCouponMapper.selectMultiForCouponFilterDto(listParam);
}
}
......@@ -17,6 +17,9 @@ import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamMemberRightsCouponRuleVo;
import com.liquidnet.service.adam.dto.vo.AdamMemberRightsCouponVo;
import com.liquidnet.service.candy.constant.CandyRedisConst;
import com.liquidnet.service.candy.dto.CandyCouponInfoDto;
import com.liquidnet.service.candy.dto.CandyCouponRuleDto;
import com.liquidnet.service.candy.dto.admin.*;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.liquidnet.service.candy.entity.CandyCouponRule;
......@@ -25,6 +28,7 @@ import com.liquidnet.service.candy.mapper.CandyCouponMapper;
import com.liquidnet.service.candy.mapper.CandyMgtCouponMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -74,7 +78,7 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
// initCoupon.setExclusive(1);
// initCoupon.setBusiType(parameter.getBusiType());
// initCoupon.setCouType(parameter.getCouType());
// initCoupon.setBindType(1);// 领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]
// initCoupon.setBindType(1);// 领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]
// //initCoupon.setDiscount();
// initCoupon.setValFace(parameter.getValFace());
// initCoupon.setValOver(parameter.getValOver());
......@@ -383,8 +387,10 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
initCoupon.setRedeemStart(eventAt);
initCoupon.setRedeemStop(initCoupon.getRedeemStart().plusDays(redeemValidity).withHour(23).withMinute(59).withSecond(59));
}
initCoupon.setEffectAt(eventAt);
initCoupon.setExpireAt(initCoupon.getEffectAt().plusDays(parameter.getValidity()).withHour(23).withMinute(59).withSecond(59));
if (parameter.getBindType() != 2 && parameter.getBindType() != 4) {// 券领取方式[2-积分商品|4-会员专属],实际发放至用户时计算有效期
initCoupon.setEffectAt(eventAt);
initCoupon.setExpireAt(initCoupon.getEffectAt().plusDays(parameter.getValidity()).withHour(23).withMinute(59).withSecond(59));
}
initCoupon.setOperator(ShiroUtils.getLoginName());
initCoupon.setCreatedAt(nowTime);
......@@ -409,12 +415,13 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
initMgtCoupon.setMcouponId(IDGenerator.nextMilliId());
initMgtCoupon.setCouponId(initCoupon.getCouponId());
// initMgtCoupon.setState(0);
// initMgtCoupon.setState(initCoupon.getBindType() == 2 ? 1 : 0);// TODO: 2021/11/9 PM上线前临时加的券领取类型(2-积分兑换),这里根据发放类型设置该记录不执行发放
// initMgtCoupon.setState(initCoupon.getBindType() == 2 ? 1 : 0);// TODO: 2021/11/9 PM上线前临时加的券领取类型(2-积分商品),这里根据发放类型设置该记录不执行发放
initMgtCoupon.setState(Arrays.asList(2, 4).contains(initCoupon.getBindType()) ? 1 : 0);
initMgtCoupon.setEventAmt(parameter.getEventAmt());
initMgtCoupon.setEventType(parameter.getEventType());
initMgtCoupon.setEventLimit(parameter.getEventLimit());
initMgtCoupon.setEventAt(eventAt);
initMgtCoupon.setEventDriven(1);
initMgtCoupon.setOperator(initCoupon.getOperator());
initMgtCoupon.setCreatedAt(nowTime);
......@@ -442,6 +449,18 @@ public class CandyMgtCouponAdminServiceImpl extends ServiceImpl<CandyMgtCouponMa
throw new LiquidnetServiceException();
}
List<CandyCouponRuleDto> couponRuleDtoList = new ArrayList<>();
initCouponRuleList.forEach(r -> {
couponRuleDtoList.add(CandyCouponRuleDto.getNew().copy(r));
});
CandyCouponInfoDto couponInfoDto = new CandyCouponInfoDto();
BeanUtils.copyProperties(initCoupon, couponInfoDto);
couponInfoDto.setUseRules(couponRuleDtoList);
String couponInfoDtoKey = CandyRedisConst.BASIC_COUPON_INFO.concat(couponInfoDto.getCouponId());
redisDataSourceUtil.getRedisCandyUtil().set(couponInfoDtoKey, couponInfoDto);
// switch (initCoupon.getExclusive()) {
// case 0:
// break;
......
package com.liquidnet.client.admin.zhengzai.sweet.dto;
import com.liquidnet.client.admin.common.annotation.Excel;
import com.liquidnet.client.admin.common.utils.DictUtils;
import com.liquidnet.service.sweet.dto.SweetActivityDrawListDao;
import lombok.Data;
......@@ -54,31 +55,7 @@ public class SweetActivityDrawExcelListDao implements Serializable, Cloneable {
public SweetActivityDrawExcelListDao copy(SweetActivityDrawListDao source) {
if (null == source) return this;
this.setPrizeTitle(source.getPrizeTitle());
String prizeName = "";
switch (source.getPrizeType()) {
case 1:
prizeName = "谢谢惠顾";
break;
case 2:
prizeName = "积分";
break;
case 3:
prizeName = "代金券";
break;
case 4:
prizeName = "满减券";
break;
case 5:
prizeName = "优先购买券";
break;
case 6:
prizeName = "实物";
break;
default:
prizeName = "-";
break;
}
this.setPrizeName(prizeName);
this.setPrizeName(DictUtils.getDictLabel("zhengzai_sweet_draw_prize_type", String.valueOf(source.getPrizeType())));
this.setPrizeTypeNum(source.getPrizeTypeNum());
this.setNickname(source.getNickname());
this.setReceivingName(source.getReceivingName());
......
package com.liquidnet.client.admin.zhengzai.sweet.service;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityPrizeRelationFormParam;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrizeRelation;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 积分活动奖品里关联多奖品表 服务类
* </p>
*
* @author jiangxiulong
* @since 2021-12-02
*/
public interface ISweetIntegralActivityPrizeRelationService extends IService<SweetIntegralActivityPrizeRelation> {
Integer createForm(SweetIntegralActivityPrizeRelationFormParam param);
Integer delete(String prizeRelationId, String integralActivityId);
List<SweetIntegralActivityPrizeRelation> list(String prizeId);
}
......@@ -103,27 +103,14 @@ public class SweetIntegralActivityDrawServiceImpl extends ServiceImpl<SweetInteg
);
// 更新缓存
List<SweetIntegralActivityDraw> sweetIntegralActivityDrawInList = sweetIntegralActivityDrawMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityDraw.class)
.eq(SweetIntegralActivityDraw::getIntegralActivityId, sweetIntegralActivityDrawNew.getIntegralActivityId())
.eq(SweetIntegralActivityDraw::getUserId, sweetIntegralActivityDrawNew.getUserId())
.gt(SweetIntegralActivityDraw::getPrizeType, 1)
.orderByDesc(SweetIntegralActivityDraw::getMid)
.last(" limit 20 ")
);
LinkedList<IntegralActivityDrawVo> activityDrawArrayList = SweetNewObjectUtil.getSweetIntegralActivityDrawVoLinkedList();
for (SweetIntegralActivityDraw draw : sweetIntegralActivityDrawInList) {
IntegralActivityDrawVo integralActivityDrawVo = IntegralActivityDrawVo.getNew().copy(draw);
activityDrawArrayList.add(integralActivityDrawVo);
}
sweetRedisAdminUtils.setIntegralActivityDraw(activityDrawArrayList, sweetIntegralActivityDrawNew.getIntegralActivityId(), sweetIntegralActivityDrawNew.getUserId());
sweetRedisAdminUtils.delIntegralActivityDrawList(sweetIntegralActivityDrawNew.getIntegralActivityId(), sweetIntegralActivityDrawNew.getUserId());
sweetRedisAdminUtils.setIntegralActivityDrawInfo(drawId);
mongoTemplate.getCollection(IntegralActivityDrawVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("drawId").is(drawId)).getQueryObject(),
new Document("$set", new Document("receivingStatus", 2)
.append("updatedAt", DateUtil.Formatter.yyyyMMddHHmmss.format(LocalDateTime.now())))
.append("updatedAt", LocalDateTime.now()))
);
return update;
......
package com.liquidnet.client.admin.zhengzai.sweet.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.client.admin.zhengzai.sweet.service.ISweetIntegralActivityPrizeRelationService;
import com.liquidnet.client.admin.zhengzai.sweet.utils.SweetObjectAdminUtil;
import com.liquidnet.client.admin.zhengzai.sweet.utils.SweetRedisAdminUtils;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.sweet.constant.StatusConst;
import com.liquidnet.service.sweet.dto.param.admin.SweetIntegralActivityPrizeRelationFormParam;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeRelationVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import com.liquidnet.service.sweet.entity.SweetIntegralActivity;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrize;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrizeRelation;
import com.liquidnet.service.sweet.mapper.SweetIntegralActivityMapper;
import com.liquidnet.service.sweet.mapper.SweetIntegralActivityPrizeMapper;
import com.liquidnet.service.sweet.mapper.SweetIntegralActivityPrizeRelationMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* <p>
* 积分活动奖品里关联多奖品表 服务实现类
* </p>
*
* @author jiangxiulong
* @since 2021-12-02
*/
@Service
public class SweetIntegralActivityPrizeRelationServiceImpl extends ServiceImpl<SweetIntegralActivityPrizeRelationMapper, SweetIntegralActivityPrizeRelation> implements ISweetIntegralActivityPrizeRelationService {
@Autowired
private SweetIntegralActivityMapper sweetIntegralActivityMapper;
@Autowired
private SweetIntegralActivityPrizeMapper sweetIntegralActivityPrizeMapper;
@Autowired
private SweetIntegralActivityPrizeRelationMapper relationMapper;
@Autowired
private SweetRedisAdminUtils sweetRedisAdminUtils;
@Override
public Integer createForm(SweetIntegralActivityPrizeRelationFormParam param) {
try {
SweetIntegralActivityPrizeRelation prizeRelation = SweetIntegralActivityPrizeRelationFormParam.getNew().copy(param);
String relationId = IDGenerator.nextSnowId();
prizeRelation.setPrizeRelationId(relationId);
int insert = relationMapper.insert(prizeRelation);
// 活动redis处理
this.integralActivityList(param.getIntegralActivityId());
return insert;
} catch (Exception e) {
log.error("添加失败 [e:{}]", e);
return 0;
}
}
@Override
public Integer delete(String prizeRelationId, String integralActivityId) {
try {
int delete = relationMapper.delete(
Wrappers.lambdaUpdate(SweetIntegralActivityPrizeRelation.class).eq(SweetIntegralActivityPrizeRelation::getPrizeRelationId, prizeRelationId)
);
// 活动redis处理
this.integralActivityList(integralActivityId);
return delete;
} catch (Exception e) {
log.error("删除失败 [e:{}]", e);
return 0;
}
}
@Override
public List<SweetIntegralActivityPrizeRelation> list(String prizeId) {
List<SweetIntegralActivityPrizeRelation> prizeRelations = relationMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityPrizeRelation.class).eq(SweetIntegralActivityPrizeRelation::getPrizeId, prizeId)
);
return prizeRelations;
}
private void integralActivityList(String integralActivityId) {
// 活动列表
LambdaQueryWrapper<SweetIntegralActivity> queryWrapper = Wrappers.lambdaQuery(SweetIntegralActivity.class).eq(SweetIntegralActivity::getIsOnline, 2);
LocalDateTime now = LocalDateTime.now();
queryWrapper.eq(SweetIntegralActivity::getTimeType, 1).or().eq(SweetIntegralActivity::getIsOnline, 2).eq(SweetIntegralActivity::getTimeType, 2).gt(SweetIntegralActivity::getEndTime, now).lt(SweetIntegralActivity::getStartTime, now);
List<SweetIntegralActivity> sweetIntegralActivities = sweetIntegralActivityMapper.selectList(queryWrapper);
List<IntegralActivityVo> voList = SweetObjectAdminUtil.getSweetIntegralActivityVoList();
sweetIntegralActivities.forEach(r -> {
IntegralActivityVo copy = IntegralActivityVo.getNew().copy(r);
voList.add(copy);
});
sweetRedisAdminUtils.setIntegralActivityList(voList);
// 活动详情
SweetIntegralActivity sweetIntegralActivity = sweetIntegralActivityMapper.selectOne(
Wrappers.lambdaQuery(SweetIntegralActivity.class).eq(SweetIntegralActivity::getIntegralActivityId, integralActivityId)
);
IntegralActivityVo integralActivityVo = IntegralActivityVo.getNew().copy(sweetIntegralActivity);
// 详情奖品 全部
List<SweetIntegralActivityPrize> activityPrizes = sweetIntegralActivityPrizeMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityPrize.class).eq(SweetIntegralActivityPrize::getIntegralActivityId, integralActivityId)
);
List<IntegralActivityPrizeVo> prizeList = SweetObjectAdminUtil.getSweetIntegralActivityPrizeVoList();
activityPrizes.forEach(r -> {
IntegralActivityPrizeVo copy = IntegralActivityPrizeVo.getNew().copy(r);
// 奖品券列表
List<SweetIntegralActivityPrizeRelation> prizeRelations = relationMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityPrizeRelation.class).eq(SweetIntegralActivityPrizeRelation::getPrizeId, copy.getPrizeId())
);
ArrayList<IntegralActivityPrizeRelationVo> prizeRelationVoList = SweetObjectAdminUtil.getSweetIntegralActivityPrizeRelationVoList();
if (!CollectionUtils.isEmpty(prizeRelations)) {
prizeRelations.forEach(rr -> {
IntegralActivityPrizeRelationVo copyR = IntegralActivityPrizeRelationVo.getNew().copy(rr);
prizeRelationVoList.add(copyR);
});
}
copy.setPrizeRelationList(prizeRelationVoList);
prizeList.add(copy);
});
integralActivityVo.setPrizeList(prizeList);
// 详情奖品 积分和券
List<SweetIntegralActivityPrize> activityPrizes1 = sweetIntegralActivityPrizeMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityPrize.class).eq(SweetIntegralActivityPrize::getIntegralActivityId, integralActivityId)
.in(SweetIntegralActivityPrize::getPrizeType, Arrays.asList(StatusConst.PRIZE_TYPE1, StatusConst.PRIZE_TYPE2))
);
List<IntegralActivityPrizeVo> prizeList1 = SweetObjectAdminUtil.getSweetIntegralActivityPrizeVoList();
activityPrizes1.forEach(r -> {
IntegralActivityPrizeVo copy = IntegralActivityPrizeVo.getNew().copy(r);
// 奖品券列表
List<SweetIntegralActivityPrizeRelation> prizeRelations = relationMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityPrizeRelation.class).eq(SweetIntegralActivityPrizeRelation::getPrizeId, copy.getPrizeId())
);
ArrayList<IntegralActivityPrizeRelationVo> prizeRelationVoList = SweetObjectAdminUtil.getSweetIntegralActivityPrizeRelationVoList();
if (!CollectionUtils.isEmpty(prizeRelations)) {
prizeRelations.forEach(rr -> {
IntegralActivityPrizeRelationVo copyR = IntegralActivityPrizeRelationVo.getNew().copy(rr);
prizeRelationVoList.add(copyR);
});
}
copy.setPrizeRelationList(prizeRelationVoList);
prizeList1.add(copy);
});
integralActivityVo.setPrizeList1(prizeList1);
// 详情奖品 实物等
List<SweetIntegralActivityPrize> activityPrizes2 = sweetIntegralActivityPrizeMapper.selectList(
Wrappers.lambdaQuery(SweetIntegralActivityPrize.class).eq(SweetIntegralActivityPrize::getIntegralActivityId, integralActivityId)
.in(SweetIntegralActivityPrize::getPrizeType, Arrays.asList(StatusConst.PRIZE_TYPE3, StatusConst.PRIZE_TYPE4, StatusConst.PRIZE_TYPE5))
);
List<IntegralActivityPrizeVo> prizeList2 = SweetObjectAdminUtil.getSweetIntegralActivityPrizeVoList();
int totalPrizeNum = 0;
for (SweetIntegralActivityPrize prize : activityPrizes2) {
IntegralActivityPrizeVo copy = IntegralActivityPrizeVo.getNew().copy(prize);
prizeList2.add(copy);
int prizeNum = sweetRedisAdminUtils.getIntegralActivityPrizeNum(integralActivityId, prize.getPrizeId());
totalPrizeNum += prizeNum;
}
sweetRedisAdminUtils.setIntegralActivityTotalPrizeNum(integralActivityId, totalPrizeNum);
sweetRedisAdminUtils.setIntegralActivityInfo(integralActivityVo);
}
}
package com.liquidnet.client.admin.zhengzai.sweet.utils;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeRelationVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityPrizeVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import java.util.ArrayList;
public class SweetObjectAdminUtil {
private static final ArrayList<IntegralActivityVo> sweetIntegralActivityVoList = new ArrayList<>();
private static final ArrayList<IntegralActivityPrizeVo> sweetIntegralActivityPrizeVoList = new ArrayList<>();
private static final ArrayList<IntegralActivityPrizeVo> sweetIntegralActivityPrizeRelationVoList = new ArrayList<>();
public static ArrayList<IntegralActivityVo> getSweetIntegralActivityVoList() {
return (ArrayList<IntegralActivityVo>)sweetIntegralActivityVoList.clone();
}
public static ArrayList<IntegralActivityPrizeVo> getSweetIntegralActivityPrizeVoList() {
return (ArrayList<IntegralActivityPrizeVo>)sweetIntegralActivityPrizeVoList.clone();
}
public static ArrayList<IntegralActivityPrizeRelationVo> getSweetIntegralActivityPrizeRelationVoList() {
return (ArrayList<IntegralActivityPrizeRelationVo>)sweetIntegralActivityPrizeRelationVoList.clone();
}
}
......@@ -5,7 +5,6 @@ import com.liquidnet.service.sweet.constant.SweetConstant;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityDrawVo;
import com.liquidnet.service.sweet.dto.vo.IntegralActivityVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Component;
import java.util.LinkedList;
......@@ -14,8 +13,6 @@ import java.util.List;
@Component
public class SweetRedisAdminUtils {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private RedisDataSourceUtil redisDataSourceUtil;
......@@ -29,6 +26,9 @@ public class SweetRedisAdminUtils {
boolean set = redisDataSourceUtil.getRedisSweetUtil().set(redisKey, integralActivityVo);
}
/**
* 奖品库存
*/
public void incrIntegralActivityPrizeNum(String integralActivityId, String prizeId, Integer num) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM
.concat(integralActivityId)
......@@ -36,37 +36,46 @@ public class SweetRedisAdminUtils {
.concat(prizeId);
redisDataSourceUtil.getRedisSweetUtil().incr(redisKey, num);
}
public void incrIntegralActivityPrizeWinnersNum(String integralActivityId, String prizeId, Integer num) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_WINNERS_NUM
public void decrIntegralActivityPrizeNum(String integralActivityId, String prizeId, Integer num) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM
.concat(integralActivityId)
.concat(SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_ID)
.concat(prizeId);
redisDataSourceUtil.getRedisSweetUtil().incr(redisKey, num);
redisDataSourceUtil.getRedisSweetUtil().decr(redisKey, num);
}
public void decrIntegralActivityPrizeNum(String integralActivityId, String prizeId, Integer num) {
public void delIntegralActivityPrizeNum(String integralActivityId, String prizeId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM
.concat(integralActivityId)
.concat(SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_ID)
.concat(prizeId);
redisDataSourceUtil.getRedisSweetUtil().decr(redisKey, num);
redisDataSourceUtil.getRedisSweetUtil().del(redisKey);
}
public void decrIntegralActivityPrizeWinnersNum(String integralActivityId, String prizeId, Integer num) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_WINNERS_NUM
public int getIntegralActivityPrizeNum(String integralActivityId, String prizeId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_NUM
.concat(integralActivityId)
.concat(SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_PRIZE_ID)
.concat(prizeId);
redisDataSourceUtil.getRedisSweetUtil().decr(redisKey, num);
Object obj = redisDataSourceUtil.getRedisSweetUtil().get(redisKey);
if (null == obj) {
return 0;
} else {
return (int) obj;
}
}
public void setIntegralActivityDraw(LinkedList<IntegralActivityDrawVo> sweetIntegralActivityDraws, String integralActivityId, String userId) {
public void setIntegralActivityTotalPrizeNum(String integralActivityId, int totalPrizeNum) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_TOTAL_PRIZE_NUM
.concat(integralActivityId);
redisDataSourceUtil.getRedisSweetUtil().set(redisKey, totalPrizeNum);
}
public void delIntegralActivityDrawList(String uid, String integralActivityId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_IN_USER
.concat(integralActivityId)
.concat(":userId:")
.concat(userId);
redisDataSourceUtil.getRedisSweetUtil().set(redisKey, sweetIntegralActivityDraws);
.concat(SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_DRAW_USER_KEY)
.concat(uid);
redisDataSourceUtil.getRedisSweetUtil().del(redisKey);
}
public void setIntegralActivityDrawInfo(String drawId) {
......@@ -76,4 +85,30 @@ public class SweetRedisAdminUtils {
info.setReceivingStatus(2);
redisDataSourceUtil.getRedisSweetUtil().set(redisKeyDraw, info);
}
/**
* 预估人数
*/
public void incrIntegralActivityEstimatedNum(String integralActivityId, Integer num) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.concat(integralActivityId);
redisDataSourceUtil.getRedisSweetUtil().incr(redisKey, num);
}
public void decrIntegralActivityEstimatedNum(String integralActivityId, Integer num) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.concat(integralActivityId);
redisDataSourceUtil.getRedisSweetUtil().decr(redisKey, num);
}
public int getIntegralActivityEstimatedNum(String integralActivityId) {
String redisKey = SweetConstant.REDIS_KEY_SWEET_INTEGRAL_ACTIVITY_ESTIMATEDNUM
.concat(integralActivityId);
Object obj = redisDataSourceUtil.getRedisSweetUtil().get(redisKey);
if (null == obj) {
return 0;
} else {
return (int) obj;
}
}
}
......@@ -84,10 +84,11 @@ public class MQConst {
SWEET_TEMPLATE_MSG("sweet:stream:rk.sweetTemplateMsg", "group.sweetTemplateMsg", "发送模版消息"),
SWEET_CITY_VOTE("sweet:stream:rk.cityVote", "group.cityVote", "用户投票记录"),
SWEET_ANTIGENIC_QUESTION("sweet:stream:rk.antigenicQuestion", "group.antigenicQuestion", "防疫答题"),
SWEET_INTEGRAL_ACTIVITY_DRAW("sweet:stream:rk.integralActivityDraw", "group.integralActivityDraw", "积分抽奖"),
SWEET_POSTER("sweet:stream:rk.userLikeMusician", "group.userLikeMusician", "用户喜欢的音乐人"),
SWEET_WECHAT_MAODENG_TEXT_INSERT("sweet:stream:rk.textAndImgInsert", "group.sweetMaoDengInsert", "猫登天空"),
SWEET_INTEGRAL_ACTIVITY_DRAW("sweet:stream:rk.integralActivityDraw", "group.integralActivityDraw", "积分抽奖"),
SWEET_STONE_INTEGRAL("sweet:stream:rk.stoneIntegral", "group.stoneIntegral", "stone积分处理"),
;
private final String key;
......
......@@ -48,7 +48,7 @@ liquidnet:
database: 15
host: 39.107.71.112
port: 6379
password: PO@B!Iud32
password: 3Xa%8p
adam:
dbs: 0,16
database: 15
......
......@@ -112,6 +112,8 @@ global-auth:
- ${liquidnet.info.context}/integralActivityDraw/detail/*
- ${liquidnet.info.context}/integralActivityDraw/drawList
- ${liquidnet.info.context}/integralActivityDraw/perfectAddress
- ${liquidnet.info.context}/integralActivityDraw/collectCoupon
- ${liquidnet.info.context}/integralActivityDraw/couponList
# 手机号获取是否关注
- ${liquidnet.info.context}/wechatTemplate/followStatusPhone
# 做积分任务
......
package com.liquidnet.service.candy.dto;
import com.liquidnet.service.candy.entity.CandyCouponRule;
import lombok.Data;
import java.io.Serializable;
......@@ -25,4 +26,14 @@ public class CandyCouponRuleDto implements Serializable, Cloneable {
return new CandyCouponRuleDto();
}
}
public CandyCouponRuleDto copy(CandyCouponRule source) {
if (null == source) return this;
this.setCruleId(source.getCruleId());
this.setCouponId(source.getCouponId());
this.setUseScope(source.getUseScope());
this.setBusiName(source.getBusiName());
this.setBusiId(source.getBusiId());
return this;
}
}
package com.liquidnet.service.candy.dto.admin;
import com.liquidnet.service.candy.entity.CandyCoupon;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
@Data
public class CandyCouponFilterDto implements Serializable, Cloneable {
private static final long serialVersionUID = -3287018184399499549L;
private String couponId;
private String title;
private String notice;
private Integer busiType;
private Integer couType;
private Integer bindType;
private BigDecimal discount;
private BigDecimal valFace;
private BigDecimal valOver;
private BigDecimal valMinus;
private String busiName;
private static final CandyCouponFilterDto obj = new CandyCouponFilterDto();
......@@ -20,11 +30,4 @@ public class CandyCouponFilterDto implements Serializable, Cloneable {
return new CandyCouponFilterDto();
}
}
public CandyCouponFilterDto copy(CandyCoupon source) {
if (null == source) return this;
this.setCouponId(source.getCouponId());
this.setTitle(source.getTitle());
return this;
}
}
......@@ -10,7 +10,7 @@ public class CandyCouponListParam {
*/
private String keyword;
/**
* 领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]
* 领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]
* <p>
* 多种方式则以,分隔入参
* </p>
......
......@@ -12,7 +12,7 @@ public class CandyMgtCouponListParam {
*/
private String keyword;
/**
* 领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]
* 领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]
*/
private Integer bindType;
/**
......
......@@ -65,7 +65,7 @@ public class CandyCoupon implements Serializable {
private Integer couType;
/**
* 领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]
* 领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]
*/
private Integer bindType;
......
......@@ -57,6 +57,11 @@ public class CandyMgtCoupon implements Serializable {
*/
private LocalDateTime eventAt;
/**
* 任务驱动[0-系统自动,1-人为创建]
*/
private Integer eventDriven;
/**
* 专享标识[0-常规|1-会员专属]
* <p>
......
package com.liquidnet.service.candy.mapper;
import com.liquidnet.service.candy.dto.admin.CandyCouponFilterDto;
import com.liquidnet.service.candy.dto.admin.CandyCouponListParam;
import com.liquidnet.service.candy.entity.CandyCoupon;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* 券基础信息 Mapper 接口
......@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface CandyCouponMapper extends BaseMapper<CandyCoupon> {
List<CandyCouponFilterDto> selectMultiForCouponFilterDto(CandyCouponListParam listParam);
}
......@@ -2,4 +2,37 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.candy.mapper.CandyCouponMapper">
<select id="selectMultiForCouponFilterDto" parameterType="com.liquidnet.service.candy.dto.admin.CandyCouponListParam"
resultType="com.liquidnet.service.candy.dto.admin.CandyCouponFilterDto">
SELECT DISTINCT cc.coupon_id couponId,
cc.title,
cc.notice,
cc.cou_type couType,
cc.busi_type busiType,
cc.bind_type bindType,
cc.val_face valFace,
cc.val_over valOver,
cc.val_minus valMinus,
cc.discount,
ccr.busi_name busiName
FROM candy_coupon cc
LEFT JOIN candy_coupon_rule ccr ON cc.coupon_id = ccr.coupon_id
<where>
cc.state = 1 AND ccr.state = 1
<if test="couType != null">
AND cc.cou_type=#{couType,jdbcType=SMALLINT}
</if>
<if test="bindType != null">
AND cc.bind_type in (${bindType})
</if>
<if test="busiType != null">
AND cc.busi_type = #{busiType,jdbcType=SMALLINT}
</if>
<if test="keyword != null and keyword != ''">
AND INSTR(CONCAT(cc.title, cc.notice, ccr.busi_name), #{keyword,jdbcType=VARCHAR})
</if>
</where>
</select>
</mapper>
......@@ -119,7 +119,7 @@
FROM candy_mgt_coupon cmc
LEFT JOIN candy_coupon cc ON cmc.coupon_id = cc.coupon_id
WHERE cmc.state <![CDATA[<>]]> 2
AND cc.`exclusive` = 0
AND cmc.event_driven=1
<if test="mcouponId != null and mcouponId != ''">
AND cmc.mcoupon_id = #{mcouponId,jdbcType=VARCHAR}
</if>
......
......@@ -38,7 +38,7 @@ public class SweetActivityDrawListDao implements Serializable {
private String prizeTitle;
/**
* 奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物
* 奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券惠顾 2积分 3代金券 4满减券 5优先购买券 6实物
*/
private Integer prizeType;
......@@ -104,7 +104,7 @@ public class SweetActivityDrawListDao implements Serializable {
private String receivingAddressAll;
/**
* 发放状态 1未发放 2已发放 3无需发放
* 发放状态 1未发放 2已发放
*/
private Integer receivingStatus;
......
......@@ -34,6 +34,11 @@ public class SweetIntegralActivityDto {
*/
private Integer activityNum;
/**
* 预估玩此活动的总人数
*/
private Integer estimatedNum;
/**
* 活动时间类型 1长期 2开始结束时间
*/
......@@ -54,11 +59,6 @@ public class SweetIntegralActivityDto {
*/
private Integer expressFeeType;
/**
* 活动规则
*/
private String activityRules;
/**
* 是否上线 1未上线 2已上线
*/
......@@ -76,6 +76,32 @@ public class SweetIntegralActivityDto {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
private Integer prizeNum;
private Integer drawNum;
// private Integer prizeNum;
// private Integer drawNum;
/**
* 实物总库存
*/
private Integer sureTotalPrizeNum;
/**
* 实物已发放数量
*/
private Integer sureOutPrizeNum;
/**
* 已抽奖次数
*/
private Integer totalDrawNum;
/**
* 去除黑名单已抽奖次数
*/
private Integer notBlackDrawNum;
/**
* 非实物总库存
*/
private Integer otherTotalPrizeNum;
/**
* 非实物已发放数量
*/
private Integer otherOutPrizeNum;
}
......@@ -39,9 +39,6 @@ public class SweetIntegralActivityDrawListSearchParam implements Serializable {
@ApiModelProperty(value = "发放状态")
private Integer receivingStatus;
@ApiModelProperty(value = "是否中奖")
private Integer isWin;
@ApiModelProperty(value = "页数", example = "0")
private Integer pageSize;
......
......@@ -51,6 +51,11 @@ public class SweetIntegralActivity implements Serializable, Cloneable {
*/
private Integer activityNum;
/**
* 预估玩此活动的总人数
*/
private Integer estimatedNum;
/**
* 活动时间类型 1长期 2开始结束时间
*/
......@@ -76,6 +81,11 @@ public class SweetIntegralActivity implements Serializable, Cloneable {
*/
private String activityRules;
/**
* 概率公示
*/
private String probabilityPublicity;
/**
* 是否上线 1未上线 2已上线
*/
......
......@@ -54,7 +54,7 @@ public class SweetIntegralActivityDraw implements Serializable, Cloneable {
private String prizeTitle;
/**
* 奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物
* 奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券惠顾 2积分 3代金券 4满减券 5优先购买券 6实物
*/
private Integer prizeType;
......@@ -114,7 +114,7 @@ public class SweetIntegralActivityDraw implements Serializable, Cloneable {
private String receivingAddress;
/**
* 发放状态 1未发放 2已发放 3无需发放
* 发放状态 1未发放 2已发放
*/
private Integer receivingStatus;
......
package com.liquidnet.service.sweet.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* <p>
* 积分活动奖品表
......@@ -43,6 +41,11 @@ public class SweetIntegralActivityPrize implements Serializable, Cloneable {
*/
private String prizeTitle;
/**
* 奖品描述
*/
private String prizeDescribe;
/**
* 初始展示奖品图片
*/
......@@ -54,7 +57,7 @@ public class SweetIntegralActivityPrize implements Serializable, Cloneable {
private String prizeImgSelect;
/**
* 奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物
* 奖品类型 1积分 2优惠券 3实物 4登登登VIP
*/
private Integer prizeType;
......@@ -63,20 +66,15 @@ public class SweetIntegralActivityPrize implements Serializable, Cloneable {
*/
private Integer prizeTypeNum;
/**
* 关联id 如商品id 券id
*/
private String relationId;
/**
* 奖品数量
*/
private Integer prizeNum;
/**
* 限制的中奖人数
* 是否是无限库存 1有限库存 2无限
*/
private Integer winnersNum;
private Integer isInfinite;
/**
* 中奖概率
......
package com.liquidnet.service.sweet.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 积分活动奖品里关联多奖品表
* </p>
*
* @author jiangxiulong
* @since 2021-12-02
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class SweetIntegralActivityPrizeRelation implements Serializable, Cloneable {
private static final long serialVersionUID = 3400664786004300429L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* prize_relation_id
*/
private String prizeRelationId;
/**
* prize_id
*/
private String prizeId;
/**
* 券id
*/
private String couponId;
/**
* 券名称
*/
private String couponTitle;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
private static final SweetIntegralActivityPrizeRelation obj = new SweetIntegralActivityPrizeRelation();
public static SweetIntegralActivityPrizeRelation getNew() {
try {
return (SweetIntegralActivityPrizeRelation) obj.clone();
} catch (CloneNotSupportedException e) {
return new SweetIntegralActivityPrizeRelation();
}
}
}
......@@ -21,4 +21,10 @@ public interface SweetIntegralActivityDrawMapper extends BaseMapper<SweetIntegra
List<SweetActivityDrawListDao> selectExcelList(@Param("integralActivityId") String integralActivityId);
List<SweetActivityDrawListDao> searchLists(SweetIntegralActivityDrawListSearchParam listParam);
int sureOutPrizeNum(String activityId);
int totalDrawNum(String activityId);
int otherOutPrizeNum(String activityId);
}
......@@ -13,4 +13,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface SweetIntegralActivityPrizeMapper extends BaseMapper<SweetIntegralActivityPrize> {
int sureTotalPrizeNum(String activityId);
int otherTotalPrizeNum(String activityId);
}
package com.liquidnet.service.sweet.mapper;
import com.liquidnet.service.sweet.entity.SweetIntegralActivityPrizeRelation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 积分活动奖品里关联多奖品表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2021-12-02
*/
public interface SweetIntegralActivityPrizeRelationMapper extends BaseMapper<SweetIntegralActivityPrizeRelation> {
}
......@@ -43,13 +43,36 @@
<if test="receivingStatus != null and receivingStatus != ''">
and a.receiving_status = #{prizeTyreceivingStatuspe}
</if>
<if test="isWin == 1">
and a.prize_type = 1
</where>
ORDER BY a.mid DESC
</select>
<select id="sureOutPrizeNum" resultType="java.lang.Integer">
select COUNT(*)
from sweet_integral_activity_draw
<where>
<if test="integralActivityId != null and integralActivityId != ''">
and integral_activity_id = #{integralActivityId}
</if>
<if test="isWin == 2">
and a.prize_type != 1
and prize_type in (3, 4, 5)
</where>
</select>
<select id="totalDrawNum" resultType="java.lang.Integer">
select COUNT(*)
from sweet_integral_activity_draw
<where>
<if test="integralActivityId != null and integralActivityId != ''">
and integral_activity_id = #{integralActivityId}
</if>
</where>
ORDER BY a.mid DESC
</select>
<select id="otherOutPrizeNum" resultType="java.lang.Integer">
select COUNT(*)
from sweet_integral_activity_draw
<where>
<if test="integralActivityId != null and integralActivityId != ''">
and integral_activity_id = #{integralActivityId}
</if>
and prize_type in (1, 2)
</where>
</select>
</mapper>
......@@ -3,7 +3,7 @@
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetIntegralActivityMapper">
<select id="searchActivityList" resultType="com.liquidnet.service.sweet.dto.SweetIntegralActivityDto">
SELECT
<!--SELECT
d.*, sum(b.prize_num) AS prize_num
FROM (
SELECT a.*, count(c.prize_id) AS draw_num
......@@ -18,6 +18,15 @@
ORDER BY a.integral_activity_id DESC
) d
LEFT JOIN sweet_integral_activity_prize AS b ON d.integral_activity_id = b.integral_activity_id
GROUP BY d.integral_activity_id
GROUP BY d.integral_activity_id-->
SELECT
*
FROM sweet_integral_activity
<where>
<if test="activityTitle != null and activityTitle != ''">
and activity_title like concat('%', #{activityTitle}, '%')
</if>
</where>
ORDER BY mid DESC
</select>
</mapper>
......@@ -2,4 +2,24 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.sweet.mapper.SweetIntegralActivityPrizeMapper">
<select id="sureTotalPrizeNum" resultType="java.lang.Integer">
select ifnull(SUM(prize_num), 0)
from sweet_integral_activity_prize
<where>
<if test="integralActivityId != null and integralActivityId != ''">
and integral_activity_id = #{integralActivityId}
</if>
and prize_type in (3, 4, 5)
</where>
</select>
<select id="otherTotalPrizeNum" resultType="java.lang.Integer">
select ifnull(SUM(prize_num), 0)
from sweet_integral_activity_prize
<where>
<if test="integralActivityId != null and integralActivityId != ''">
and integral_activity_id = #{integralActivityId}
</if>
and prize_type in (1, 2)
</where>
</select>
</mapper>
......@@ -49,4 +49,7 @@ public interface FeignAdamBaseClient {
@RequestParam(value = "mobile") String mobile,
@NotBlank(message = "临时票据不能为空")
@RequestParam(value = "otp") String otp);
@GetMapping(value = "member/check/depth", headers = {"Inner-Required=1"})
ResponseDto<Boolean> isMember(@NotBlank(message = "用户ID不能为空") @RequestParam(value = "uid") String uid);
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>liquidnet-bus-feign</artifactId>
<groupId>com.liquidnet</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>liquidnet-api-feign-candy</artifactId>
<dependencies>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-candy-api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
\ No newline at end of file
package com.liquidnet.service.feign.candy.api;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.candy.vo.CandyCouponPreviewVo;
import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
@Component
@FeignClient(name = "liquidnet-service-candy",
contextId = "FeignCandyBaseClient", path = "",
url = "${liquidnet.service.candy.url}",
fallback = FallbackFactory.Default.class)
public interface FeignCandyBaseClient {
@PostMapping(value = "rsc/couinfo", headers = {"Inner-Required=1"})
ResponseDto<List<CandyCouponPreviewVo>> couponListById(
@RequestParam("couponIds") @NotNull @NotBlank String couponIds
);
}
\ No newline at end of file
......@@ -4,17 +4,20 @@ import com.liquidnet.service.base.ResponseDto;
import feign.hystrix.FallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Component
@FeignClient(name = "liquidnet-service-sweet",
contextId = "FeignSweetTaskClient", path = "",
contextId = "FeignSweetTaskClient", path = "sweet",
url = "${liquidnet.service.sweet.url}",
// url = "",
fallback = FallbackFactory.Default.class)
public interface FeignSweetTaskClient {
@PostMapping("sweet/sweetData/drawLuck/add")
@PostMapping("sweetData/drawLuck/add")
ResponseDto<Boolean> drawLuckAdd();
@GetMapping("integralActivity/setDrawAllList")
ResponseDto<Boolean> setDrawAllList(@RequestParam("integralActivityId") String integralActivityId);
}
......@@ -19,6 +19,7 @@
<module>liquidnet-api-feign-sweet</module>
<module>liquidnet-api-feign-chime</module>
<module>liquidnet-api-feign-stone</module>
<module>liquidnet-api-feign-candy</module>
<!-- <module>liquidnet-api-feign-sequence</module>-->
<!-- <module>liquidnet-api-feign-example</module>-->
<!-- <module>liquidnet-api-feign-account</module>-->
......
......@@ -10,7 +10,7 @@ create table candy_mgt_coupon
coupon_id varchar(64) not null comment '~candy_coupon.coupon_id',
state tinyint comment '发放状态[0-未发放|1-已发放|2-无效|3-已取消|9-发放中|10-会员礼包初始模版]',
# bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换]',
# bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分商品]',
event_amt int comment '发放量',
event_type tinyint comment '发放类型[0-保留|1-会员|2-手机号|10-全体用户]',
event_limit text comment '`发放类型`为2-手机号时发放手机号以,分隔',
......@@ -39,7 +39,7 @@ create table candy_coupon
exclusive smallint comment '专享标识[0-常规|1-会员礼包]',
busi_type smallint comment '业务类别[0-全场|1-演出|2-商品|3-优先购]',
cou_type smallint comment '券类型[1-代金券|2-满减券|3-兑换券|4-折扣券|101-优先券]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分兑换|3-发放需领取|4-会员专属]',
bind_type smallint comment '领取方式[0-用户输入兑换|1-发放至用户|2-积分商品|3-发放需领取|4-会员专属]',
discount decimal(8, 2) comment '折扣[8折即0.8]',
val_face decimal(8, 2) comment '面值',
......@@ -162,7 +162,8 @@ alter table candy_mgt_coupon add exclusively smallint default 0 null comment '
alter table candy_user_coupon add exclusive smallint null comment '专享标识[0-常规|1-会员礼包]' after coupon_id;
alter table candy_common_coupon add exclusive smallint null comment '专享标识[0-常规|1-会员礼包]' after coupon_id;
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------|20211208券发放任务表+区分后台人为创建与系统创建标识字段
alter table candy_mgt_coupon add event_driven tinyint default 0 null comment '任务驱动[0-系统自动,1-人为创建]' after event_at;
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
......
......@@ -2,8 +2,10 @@ package com.liquidnet.service.candy.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.candy.dto.CandyCouponInfoDto;
import com.liquidnet.service.candy.util.ObjectUtil;
import com.liquidnet.service.candy.util.RedisDataUtils;
import com.liquidnet.service.candy.vo.CandyCouponBasicVo;
import com.liquidnet.service.candy.vo.CandyCouponPreviewVo;
import com.liquidnet.service.candy.vo.CandyCouponVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -19,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
@Api(tags = "@API:RSC")
......@@ -32,12 +35,21 @@ public class CandyRscController {
@PostMapping("couinfo")
@ApiOperation("券基础详情")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", dataType = "String", name = "couponId", value = "券ID", required = true),
@ApiImplicitParam(type = "form", dataType = "String", name = "couponIds", value = "券ID,多个以,分割", required = true),
})
public ResponseDto<CandyCouponBasicVo> couponListById(@RequestParam("couponId") @NotNull @NotBlank String couponId) {
CandyCouponBasicVo couponBasicVo = CandyCouponBasicVo.getNew();
CandyCouponInfoDto couponInfoDto = redisDataUtils.getCouponInfo(couponId);
BeanUtils.copyProperties(couponInfoDto, couponBasicVo);
return ResponseDto.success(couponBasicVo);
public ResponseDto<List<CandyCouponPreviewVo>> couponListById(@RequestParam("couponIds") @NotNull @NotBlank String couponIds) {
String[] couponIdArr = couponIds.split(",");
ArrayList<CandyCouponPreviewVo> vos = ObjectUtil.getCandyCouponPreviewVoArrayList();
for (String couponId : couponIdArr) {
CandyCouponPreviewVo couponBasicVo = CandyCouponPreviewVo.getNew();
CandyCouponInfoDto couponInfoDto = redisDataUtils.getCouponInfo(couponId);
if (null == couponInfoDto) continue;
BeanUtils.copyProperties(couponInfoDto, couponBasicVo);
vos.add(couponBasicVo);
}
return ResponseDto.success(vos);
}
}
......@@ -2,11 +2,10 @@ package com.liquidnet.service.candy.util;
import com.liquidnet.service.candy.dto.CandyCommonCouponBasicDto;
import com.liquidnet.service.candy.dto.CandyUserCouponBasicDto;
import com.liquidnet.service.candy.vo.CandyCouponPreVo;
import com.liquidnet.service.candy.vo.CandyCouponRulesVo;
import com.liquidnet.service.candy.vo.CandyCouponVo;
import com.liquidnet.service.candy.vo.*;
import java.util.ArrayList;
import java.util.List;
public class ObjectUtil {
private static final ArrayList<CandyUserCouponBasicDto> candyUserCouponBasicDtoArrayList = new ArrayList<>();
......@@ -14,6 +13,8 @@ public class ObjectUtil {
private static final ArrayList<CandyCouponVo> candyCouponVoArrayList = new ArrayList<>();
private static final ArrayList<CandyCouponPreVo> candyCouponPreVoArrayList = new ArrayList<>();
private static final ArrayList<CandyCouponRulesVo> candyCouponRulesVos = new ArrayList<>();
private static final ArrayList<CandyCouponBasicVo> candyCouponBasicVoArrayList = new ArrayList<>();
private static final ArrayList<CandyCouponPreviewVo> candyCouponPreviewVoArrayList = new ArrayList<>();
public static ArrayList<CandyUserCouponBasicDto> getCandyUserCouponBasicDtoArrayList() {
return (ArrayList<CandyUserCouponBasicDto>) candyUserCouponBasicDtoArrayList.clone();
......@@ -34,4 +35,12 @@ public class ObjectUtil {
public static ArrayList<CandyCouponRulesVo> getCandyCouponRulesVos() {
return (ArrayList<CandyCouponRulesVo>) candyCouponRulesVos.clone();
}
public static ArrayList<CandyCouponBasicVo> getCandyCouponBasicVoArrayList() {
return (ArrayList<CandyCouponBasicVo>) candyCouponBasicVoArrayList.clone();
}
public static ArrayList<CandyCouponPreviewVo> getCandyCouponPreviewVoArrayList() {
return (ArrayList<CandyCouponPreviewVo>) candyCouponPreviewVoArrayList.clone();
}
}
......@@ -36,6 +36,11 @@
<artifactId>liquidnet-service-sweet-do</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-api-feign-stone</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
......
......@@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.core.env.Environment;
import java.net.InetAddress;
......@@ -15,6 +16,7 @@ import java.util.Arrays;
@Slf4j
@SpringBootApplication(scanBasePackages = {"com.liquidnet"})
@MapperScan(basePackages = {"com.liquidnet.service.sweet.mapper"})
@EnableFeignClients
public class ServiceConsumerSweetApplication implements CommandLineRunner {
@Autowired
private Environment environment;
......
package com.liquidnet.service.consumer.sweet.config;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerSweetStoneIntegralReceiver;
import com.liquidnet.service.consumer.sweet.receiver.ConsumerSweetTemplateMsgReceiver;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -16,11 +17,14 @@ import org.springframework.data.redis.stream.Subscription;
import java.time.Duration;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.SWEET_TEMPLATE_MSG;
import static com.liquidnet.service.base.constant.MQConst.SweetQueue.SWEET_STONE_INTEGRAL;
@Configuration
public class ConsumerSweetTemplateMsgStreamConfig {
public class ConsumerSweetOtherApiStreamConfig {
@Autowired
ConsumerSweetTemplateMsgReceiver consumerSweetTemplateMsgReceiver;
@Autowired
ConsumerSweetStoneIntegralReceiver consumerSweetStoneIntegralReceiver;
private StreamMessageListenerContainer<String, MapRecord<String, String, String>> buildStreamMessageListenerContainer(RedisConnectionFactory factory) {
var options = StreamMessageListenerContainer
......@@ -32,46 +36,73 @@ public class ConsumerSweetTemplateMsgStreamConfig {
}
/**
* 缺票登记
*
* @param listenerContainer
* @param t
* @return
* 模版消息
*/
private Subscription receiveSqlTemplateMsg(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
private Subscription receiveApiTemplateMsg(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_TEMPLATE_MSG.getGroup(), SWEET_TEMPLATE_MSG.name() + t),
StreamOffset.create(SWEET_TEMPLATE_MSG.getKey(), ReadOffset.lastConsumed()), consumerSweetTemplateMsgReceiver
);
}
/**
* 增减积分
*/
private Subscription receiveApiStoneIntgral(StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer, int t) {
return listenerContainer.receiveAutoAck(
Consumer.from(SWEET_STONE_INTEGRAL.getGroup(), SWEET_STONE_INTEGRAL.name() + t),
StreamOffset.create(SWEET_STONE_INTEGRAL.getKey(), ReadOffset.lastConsumed()), consumerSweetStoneIntegralReceiver
);
}
/* —————————————————————————— | —————————————————————————— | —————————————————————————— */
/*----------------------------------------------------------------------------------------------------------------*/
/*------------------模版消息------------------*/
@Bean
public Subscription subscriptionApiTemplateMsg(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveApiTemplateMsg(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | 缺票登记 */
@Bean
public Subscription subscriptionApiTemplateMsg2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveApiTemplateMsg(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlTemplateMsg(RedisConnectionFactory factory) {
public Subscription subscriptionApiTemplateMsg3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlTemplateMsg(listenerContainer, 1);
var subscription = receiveApiTemplateMsg(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/*------------------增减积分------------------*/
@Bean
public Subscription subscriptionSqlTemplateMsg2(RedisConnectionFactory factory) {
public Subscription subscriptionApiStoneIntgral(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlTemplateMsg(listenerContainer, 1);
var subscription = receiveApiStoneIntgral(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
@Bean
public Subscription subscriptionSqlTemplateMsg3(RedisConnectionFactory factory) {
public Subscription subscriptionApiStoneIntgral2(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveSqlTemplateMsg(listenerContainer, 1);
var subscription = receiveApiStoneIntgral(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
/* -------------------------------------------------------- | */
@Bean
public Subscription subscriptionApiStoneIntgral3(RedisConnectionFactory factory) {
var listenerContainer = this.buildStreamMessageListenerContainer(factory);
var subscription = receiveApiStoneIntgral(listenerContainer, 1);
listenerContainer.start();
return subscription;
}
}
package com.liquidnet.service.consumer.sweet.receiver;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.stone.api.FeignStoneIntegralClient;
import com.liquidnet.service.sweet.param.SweetStoneIntegralParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.stream.MapRecord;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.stereotype.Component;
import java.util.HashMap;
@Slf4j
@Component
public class ConsumerSweetStoneIntegralReceiver extends AbstractSqlRedisReceiver {
@Autowired
private FeignStoneIntegralClient feignStoneIntegralClient;
@Override
protected String getRedisStreamKey() {
return MQConst.SweetQueue.SWEET_STONE_INTEGRAL.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.SweetQueue.SWEET_STONE_INTEGRAL.getGroup();
}
@Override
public void onMessage(MapRecord<String, String, String> message) {
log.debug("CONSUMER SQL[streamKey:{},messageId:{},stream:{},body:{}]",
this.getRedisStreamKey(), message.getId(), message.getStream(), message.getValue());
boolean result = this.consumerSqlDaoHandler(message.getValue().get("message"));
log.info("CONSUMER SQL RESULT:{} ==> MESSAGE_ID:{}", result, message.getId());
try {
stringRedisTemplate.opsForStream().acknowledge(getRedisStreamGroup(), message);
stringRedisTemplate.opsForStream().delete(this.getRedisStreamKey(), message.getId());
} catch (Exception e) {
log.error("#CONSUMER SQL RESULT:{} ==> DEL_REDIS_QUEUE_MSG_EXCEPTION[MESSAGE_ID:{},MSG:{}]", result, message.getId(), JsonUtils.toJson(message), e);
} finally {
try {
stringRedisTemplate.opsForStream().acknowledge(getRedisStreamGroup(), message);
stringRedisTemplate.opsForStream().delete(this.getRedisStreamKey(), message.getId());
} catch (Exception ignored) {
}
}
}
private boolean consumerSqlDaoHandler(String msg) {
Boolean aBoolean = false;
try {
SweetStoneIntegralParam param = JsonUtils.fromJson(msg, SweetStoneIntegralParam.class);
if (param == null) {
aBoolean = true;
} else {
ResponseDto<String> res = null;
if (null == param.getType()) {
aBoolean = true;
return true;
}
if (param.getType() == 1) {
res = feignStoneIntegralClient.in2111(
param.getUid(),
param.getScore(),
param.getContent()
);
} else if (param.getType() == 2) {
res = feignStoneIntegralClient.de2111(
param.getUid(),
param.getScore(),
param.getContent()
);
}
if (null != res && res.getCode().equals("0")) {
aBoolean = true;
}
}
} catch (Exception e) {
log.error("CONSUMER SQL FAIL ==> {}", e.getMessage(), e);
} finally {
if (!aBoolean) {
HashMap<String, String> map = CollectionUtil.mapStringString();
map.put("message", msg);
stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(this.getRedisStreamKey()));
}
}
return aBoolean;
}
}
......@@ -2,6 +2,7 @@ package com.liquidnet.service.executor.main.handler;
import com.liquidnet.service.feign.sweet.task.FeignSweetTaskClient;
import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -33,4 +34,29 @@ public class SweetTaskHandler {
return ReturnT.FAIL;
}
}
@XxlJob(value = "sev-sweet:setDrawAllList")
public ReturnT<String> setDrawAllListHandler() {
try {
String jobParam = XxlJobHelper.getJobParam();//执行参数
log.info("jobParam = " + jobParam);
String[] paramArray = jobParam.split(",");
ReturnT<String> success = ReturnT.SUCCESS;
for (String id : paramArray) {
log.info("id = " + id);
Boolean data = feignSweetTaskClient.setDrawAllList(id).getData();
log.info("setDrawAllListHandler:结果:{}", data);
success.setMsg(String.valueOf(data));
}
return success;
} catch (Exception e) {
log.error("exception of handler:{}", e.getMessage(), e);
ReturnT<String> fail = ReturnT.FAIL;
fail.setMsg(e.getLocalizedMessage());
return fail;
}
}
}
......@@ -266,7 +266,6 @@ public class KylinPerformancesServiceImpl implements IKylinPerformancesService {
info.put("field_name", performancesInfo.getFieldName());
info.put("title", performancesInfo.getTitle());
info.put("appStatus", performancesInfo.getAppStatus());
info.put("buySwitch", dataUtils.getSwitch());
HashMap<String, Object> result = CollectionUtil.mapStringObject();
result.put("performancesInfo", info);
......
......@@ -572,11 +572,6 @@ public class DataUtils {
}
}
public Integer getSwitch() {
Integer i = (Integer) redisUtil.get(AdamRedisConst.SWITCH_BUY_MEMBER);
return null == i ? 1 : i;
}
/**
* 演出订单快递路由
*/
......
......@@ -2,20 +2,22 @@
drop TABLE if exists `sweet_integral_activity`;
CREATE TABLE `sweet_integral_activity`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`integral_activity_id` varchar(255) NOT NULL DEFAULT '' COMMENT '活动id',
`activity_title` varchar(255) NOT NULL DEFAULT '' COMMENT '活动名称',
`activity_img` varchar(255) NOT NULL DEFAULT '' COMMENT '活动图片',
`activity_type` tinyint NOT NULL DEFAULT 0 COMMENT '活动类型 1转盘',
`activity_num` int NOT NULL DEFAULT 0 COMMENT '活动玩一次所需积分',
`time_type` tinyint NOT NULL DEFAULT 0 COMMENT '活动时间类型 1长期 2开始结束时间',
`start_time` datetime NULL DEFAULT NULL COMMENT '如果活动有时间限制 开始时间',
`end_time` datetime NULL DEFAULT NULL COMMENT '如果活动有时间限制 结束时间',
`express_fee_type` tinyint NOT NULL DEFAULT 0 COMMENT '快递费用类型 1包邮 2到付',
`activity_rules` text NULL DEFAULT NULL COMMENT '活动规则',
`is_online` tinyint NOT NULL DEFAULT 0 COMMENT '是否上线 1未上线 2已上线',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`integral_activity_id` varchar(255) NOT NULL DEFAULT '' COMMENT '活动id',
`activity_title` varchar(255) NOT NULL DEFAULT '' COMMENT '活动名称',
`activity_img` varchar(255) NOT NULL DEFAULT '' COMMENT '活动图片',
`activity_type` tinyint NOT NULL DEFAULT 0 COMMENT '活动类型 1转盘',
`activity_num` int NOT NULL DEFAULT 0 COMMENT '活动玩一次所需积分',
`estimated_num` int NOT NULL DEFAULT 0 COMMENT '预估玩此活动的总人数',
`time_type` tinyint NOT NULL DEFAULT 0 COMMENT '活动时间类型 1长期 2开始结束时间',
`start_time` datetime NULL DEFAULT NULL COMMENT '如果活动有时间限制 开始时间',
`end_time` datetime NULL DEFAULT NULL COMMENT '如果活动有时间限制 结束时间',
`express_fee_type` tinyint NOT NULL DEFAULT 0 COMMENT '快递费用类型 1包邮 2到付',
`activity_rules` text NULL DEFAULT NULL COMMENT '活动规则',
`probability_publicity` text NULL DEFAULT NULL COMMENT '概率公示',
`is_online` tinyint NOT NULL DEFAULT 0 COMMENT '是否上线 1未上线 2已上线',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_integral_activity_id` (`integral_activity_id`),
KEY `sweet_integral_activity_title` (`activity_title`)
......@@ -32,13 +34,13 @@ CREATE TABLE `sweet_integral_activity_prize`
`prize_id` varchar(255) NOT NULL DEFAULT '' COMMENT '奖品id',
`integral_activity_id` varchar(255) NOT NULL DEFAULT '' COMMENT '关联活动id',
`prize_title` varchar(255) NOT NULL DEFAULT '' COMMENT '奖品名称',
`prize_describe` varchar(255) NOT NULL DEFAULT '' COMMENT '奖品描述',
`prize_img_init` varchar(255) NOT NULL DEFAULT '' COMMENT '初始展示奖品图片',
`prize_img_select` varchar(255) NOT NULL DEFAULT '' COMMENT '中奖选中奖品图片',
`prize_type` tinyint NOT NULL DEFAULT 0 COMMENT '奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物',
`relation_id` varchar(255) NOT NULL DEFAULT '' COMMENT '关联id 如商品id 券id',
`prize_type` tinyint NOT NULL DEFAULT 0 COMMENT '奖品类型 1积分 2优惠券 3实物 4登登登VIP',
`prize_type_num` int NOT NULL DEFAULT 0 COMMENT '单次奖励数量如积分 中奖给多少',
`prize_num` int NOT NULL DEFAULT 0 COMMENT '奖品数量',
`winners_num` int NOT NULL DEFAULT 0 COMMENT '限制的中奖人数',
`prize_num` int NOT NULL DEFAULT 0 COMMENT '奖品数量库存',
`is_infinite` tinyint NOT NULL DEFAULT 1 COMMENT '是否是无限库存 1有限库存 2无限库存',
`winning_probability` decimal(10, 2) NOT NULL DEFAULT 0 COMMENT '中奖概率',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
......@@ -50,6 +52,25 @@ CREATE TABLE `sweet_integral_activity_prize`
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '积分活动奖品表';
-- 积分活动奖品里关联多奖品表
drop TABLE if exists `sweet_integral_activity_prize_relation`;
CREATE TABLE `sweet_integral_activity_prize_relation`
(
`mid` bigint unsigned NOT NULL AUTO_INCREMENT,
`prize_relation_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'prize_relation_id',
`prize_id` varchar(255) NOT NULL DEFAULT '' COMMENT 'prize_id',
`coupon_id` varchar(255) NOT NULL DEFAULT '' COMMENT '券id',
`coupon_title` varchar(255) NOT NULL DEFAULT '' COMMENT '券名称',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
KEY `sweet_prize_relation_id` (`prize_relation_id`),
KEY `sweet_prize_id` (`prize_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT '积分活动奖品里关联多奖品表';
-- 积分活动抽奖记录表
drop TABLE if exists `sweet_integral_activity_draw`;
CREATE TABLE `sweet_integral_activity_draw`
......@@ -60,7 +81,7 @@ CREATE TABLE `sweet_integral_activity_draw`
`activity_num` int NOT NULL DEFAULT 0 COMMENT '活动玩一次所需积分',
`prize_id` varchar(255) NOT NULL DEFAULT '' COMMENT '关联奖品id',
`prize_title` varchar(255) NOT NULL DEFAULT '' COMMENT '奖品名称',
`prize_type` tinyint NOT NULL DEFAULT 0 COMMENT '奖品类型 1谢谢惠顾 2积分 3代金券 4满减券 5优先购买券 6实物',
`prize_type` tinyint NOT NULL DEFAULT 0 COMMENT '奖品类型 1积分 2优惠券 3实物 4登登登VIP 5优先购买券惠顾 2积分 3代金券 4满减券 5优先购买券 6实物',
`prize_type_num` int NOT NULL DEFAULT 0 COMMENT '单次奖励数量如积分 中奖给多少',
`relation_id` varchar(255) NOT NULL DEFAULT '' COMMENT '关联id 如商品id 券id',
`user_id` varchar(255) NOT NULL DEFAULT '' COMMENT '关联用户id',
......@@ -72,7 +93,7 @@ CREATE TABLE `sweet_integral_activity_draw`
`receiving_city` varchar(255) NOT NULL DEFAULT '' COMMENT 'adam收货人城市',
`receiving_county` varchar(255) NOT NULL DEFAULT '' COMMENT 'adam收货人区县',
`receiving_address` varchar(255) NOT NULL DEFAULT '' COMMENT 'adam收货人详细地址',
`receiving_status` smallint NOT NULL DEFAULT 1 COMMENT '发放状态 1未发放 2已发放 3无需发放',
`receiving_status` smallint NOT NULL DEFAULT 1 COMMENT '发放状态 1未发放 2已发放',
`created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`),
......
......@@ -36,6 +36,9 @@ XGROUP CREATE sweet:stream:rk.antigenicQuestion group.antigenicQuestion 0
-- 积分抽奖 --
XADD sweet:stream:rk.integralActivityDraw * 0 0
XGROUP CREATE sweet:stream:rk.integralActivityDraw group.integralActivityDraw 0
-- 积分抽奖积分处理 --
XADD sweet:stream:rk.stoneIntegral * 0 0
XGROUP CREATE sweet:stream:rk.stoneIntegral group.stoneIntegral 0
-- 2021草莓海报活动 --
XADD sweet:stream:rk.userLikeMusician * 0 0
......
......@@ -106,6 +106,11 @@
<artifactId>liquidnet-common-third-shumei</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-api-feign-candy</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
......
package com.liquidnet.service;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
public class MybatisPlusCodeGenerator {
/**
* @param moduleRootPath 项目模块根路径 到 /src 之前 ex:E:\projects\trlabs-bus-v1\trlabs-bus-service\trlabs-common\trlabs-mybatis
* @param dsc 数据源
* @param parentName 相当于业务模块名 com.liquidnet.service.adam 全限定类名
* @param tableNames 表名
*/
public static void doGenerator(String moduleRootPath,
DataSourceConfig dsc,
String parentName,
String[] tableNames) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置BankMybatisPlusCodeGenerator
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(moduleRootPath + "/src/main/java");
gc.setAuthor("liquidnet");
gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(parentName);
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return moduleRootPath + "/src/main/resources/com/liquidnet/service/sweet/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
strategy.setInclude(tableNames);
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
public static void main(String[] args) {
DataSourceConfig dsc = new DataSourceConfig();
// dsc.setSchemaName("public");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUrl("jdbc:mysql://39.106.122.201:3308/dev_ln_scene?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=CST");
dsc.setUsername("testmall");
dsc.setPassword("zhengzai!mYT");
String resourcePath = "/Users/hujiachen/Downloads/tmp";
String directory = "com.liquidnet.service.stone";
String[] dbTableArray = new String[]{"stone_score_logs", "stone_score_items", "stone_score_user","stone_score_order"};
doGenerator(resourcePath, dsc, directory, dbTableArray);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment