Commit c4499b84 authored by jiaorz's avatar jiaorz

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

parents ae0762da 2a93467a
...@@ -16,6 +16,7 @@ import javax.validation.Validator; ...@@ -16,6 +16,7 @@ import javax.validation.Validator;
import javax.validation.executable.ExecutableValidator; import javax.validation.executable.ExecutableValidator;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.lang.reflect.Parameter; import java.lang.reflect.Parameter;
import java.util.Collection;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
...@@ -62,8 +63,13 @@ public class ValidParamAop { ...@@ -62,8 +63,13 @@ public class ValidParamAop {
for (int i =0;i<argLength;i++){ for (int i =0;i<argLength;i++){
BeanValid beanValidAnnotation = parameters[i].getDeclaredAnnotation(BeanValid.class); BeanValid beanValidAnnotation = parameters[i].getDeclaredAnnotation(BeanValid.class);
if (Objects.nonNull(beanValidAnnotation)){ if (Objects.nonNull(beanValidAnnotation)){
if (args[i].getClass().isArray()){ if ((args[i] instanceof Collection) || (args[i].getClass().isArray())){
Object[] arrayArg =(Object[])args[i]; Object[] arrayArg = null;
if(args[i] instanceof Collection){
arrayArg = ((Collection)args[i]).toArray();
}else {
arrayArg = (Object[])args[i];
}
for (Object item:arrayArg){ for (Object item:arrayArg){
Set<ConstraintViolation<Object>> validateResult = this.validator.validate(item, beanValidAnnotation.value()); Set<ConstraintViolation<Object>> validateResult = this.validator.validate(item, beanValidAnnotation.value());
if (!validateResult.isEmpty()){ if (!validateResult.isEmpty()){
......
...@@ -10,6 +10,8 @@ import lombok.Data; ...@@ -10,6 +10,8 @@ import lombok.Data;
*/ */
@Data @Data
public class InviteMemberBO { public class InviteMemberBO {
private Integer userId;
private Integer parentId;
private String username; private String username;
private String headUrl; private String headUrl;
private Long joinTime; private Long joinTime;
......
...@@ -23,4 +23,6 @@ public interface AppUserRelationMapper extends Mapper<AppUserRelation> { ...@@ -23,4 +23,6 @@ public interface AppUserRelationMapper extends Mapper<AppUserRelation> {
public int countByParentId(@Param("parentId")Integer parentId,@Param("bindTime")Long bindTime); public int countByParentId(@Param("parentId")Integer parentId,@Param("bindTime")Long bindTime);
List<AppUserRelation> selectByUserIds(@Param("userIds") List<Integer> userIds); List<AppUserRelation> selectByUserIds(@Param("userIds") List<Integer> userIds);
List<AppUserRelation> selectCountByLeaderId(Integer userId);
} }
...@@ -21,4 +21,8 @@ ...@@ -21,4 +21,8 @@
#{userId} #{userId}
</foreach> </foreach>
</select> </select>
<select id="selectCountByLeaderId" resultType="com.github.wxiaoqi.security.admin.entity.AppUserRelation">
select * from `app_user_relation` as `aur` inner join `app_user_login` as `aul` on aul.id=aur.user_id where aur.is_del=0 and aul.isdel=0 and aur.parent_id=#{userId}
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
IFNULL(ausww.income,0) AS `income` IFNULL(ausww.income,0) AS `income`
FROM FROM
`app_user_relation` AS `aur` `app_user_relation` AS `aur`
INNER JOIN (select `id` from `app_user_login` where isdel=0)as `aul` ON aul.id=aur.user_id
LEFT JOIN (SELECT DISTINCT LEFT JOIN (SELECT DISTINCT
`source_id` AS userId, `source_id` AS userId,
IFNULL( IFNULL(
...@@ -148,29 +149,29 @@ FROM ...@@ -148,29 +149,29 @@ FROM
<if test="userName!=null and userName!=' '"> <if test="userName!=null and userName!=' '">
WHERE `realname` LIKE CONCAT('%',#{userName},'%') OR `nickname` LIKE CONCAT('%',#{userName},'%') WHERE `realname` LIKE CONCAT('%',#{userName},'%') OR `nickname` LIKE CONCAT('%',#{userName},'%')
</if>) AS audd ON audd.userid = ausw.user_id </if>) AS audd ON audd.userid = ausw.user_id
ORDER BY ausw.crt_time DESC ORDER BY ausw.crt_time DESC
</select> </select>
<select id="statisticsStatffSellerWaterByUserIdsAndTime" <select id="statisticsStatffSellerWaterByUserIdsAndTime"
resultType="com.github.wxiaoqi.security.admin.dto.AppUserSellingWaterDTO"> resultType="com.github.wxiaoqi.security.admin.dto.AppUserSellingWaterDTO">
SELECT SELECT
`auswu`.user_id, ( IFNULL(auswu.upIncome,0) - IFNULL(auswd.dowIncome,0) ) AS `commission` `auswu`.user_id, ( IFNULL(auswu.upIncome,0) - IFNULL(auswd.dowIncome,0) ) AS `commission`
FROM FROM
( SELECT `user_id` as `userId`, IFNULL(SUM( commission ),0) AS upIncome FROM `app_user_selling_water` where STATUS = 0 and waiting=1 ( SELECT `user_id` as `userId`, IFNULL(SUM( commission ),0) AS upIncome FROM `app_user_selling_water` where STATUS = 0 and waiting=1
AND `crt_time` between #{startTime} and #{endTime} AND `crt_time` between #{startTime} and #{endTime}
<if test="userIds!=null and userIds.size!=0"> <if test="userIds!=null and userIds.size!=0">
AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=","> AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId} #{userId}
</foreach> </foreach>
</if> group by user_id) AS `auswu` </if> group by user_id) AS `auswu`
left join left join
( SELECT `user_id`,IFNULL(SUM( commission ),0) AS `dowIncome` FROM `app_user_selling_water` where STATUS = 1 and waiting=1 ( SELECT `user_id`,IFNULL(SUM( commission ),0) AS `dowIncome` FROM `app_user_selling_water` where STATUS = 1 and waiting=1
and `crt_time` between #{startTime} and #{endTime} and `crt_time` between #{startTime} and #{endTime}
<if test="userIds!=null and userIds.size!=0"> <if test="userIds!=null and userIds.size!=0">
AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=","> AND `user_id` IN <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
#{userId} #{userId}
</foreach> </foreach>
</if> group by user_id) AS `auswd` </if> group by user_id) AS `auswd`
on auswd.user_id=auswu.user_id on auswd.user_id=auswu.user_id
</select> </select>
</mapper> </mapper>
\ No newline at end of file
package com.xxfc.platform.activity.constant;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/6 12:11
*/
public enum PrizeGoodsTypeEnum {
PRIZE(1,"奖品"),
COUPON(2,"优惠券"),
NO_PRIZE(0,"谢谢惠顾");
private int code;
private String desc;
PrizeGoodsTypeEnum(int code, String desc) {
this.code = code;
this.desc = desc;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
...@@ -8,6 +8,8 @@ import javax.persistence.Column; ...@@ -8,6 +8,8 @@ import javax.persistence.Column;
import javax.persistence.GeneratedValue; import javax.persistence.GeneratedValue;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
...@@ -25,32 +27,47 @@ public class ActivityPrize implements Serializable { ...@@ -25,32 +27,47 @@ public class ActivityPrize implements Serializable {
@Id @Id
@GeneratedValue(generator = "JDBC") @GeneratedValue(generator = "JDBC")
private Integer id; private Integer id;
@NotNull(message = "编号不能为null")
@ApiModelProperty("编号") @ApiModelProperty("编号")
@Column(name = "serial_number") @Column(name = "serial_number")
private Integer serialNumber; private Integer serialNumber;
@NotEmpty(message = "奖品名称不能为空")
@Column(name = "name") @Column(name = "name")
private String name; private String name;
@NotEmpty(message = "奖品地址不能为空")
@ApiModelProperty("奖品图片地址") @ApiModelProperty("奖品图片地址")
@Column(name = "icon_path") @Column(name = "icon_path")
private String iconPath; private String iconPath;
@ApiModelProperty("每天最多中奖份数") @ApiModelProperty("每天最多中奖份数")
@Column(name = "day_max_use") @Column(name = "day_max_use")
private Integer dayMaxUse; private Integer dayMaxUse;
@NotNull(message = "奖品库存不能为null")
@Column(name = "total_stock") @Column(name = "total_stock")
private Integer totalStock; private Integer totalStock;
@NotNull(message = "权重|概率不能为null")
@Column(name = "probability") @Column(name = "probability")
private Double probability; private Double probability;
@NotNull(message = "奖品设置类型不能null")
@ApiModelProperty("1:线上 2:现场") @ApiModelProperty("1:线上 2:现场")
@Column(name = "type") @Column(name = "type")
private Integer type; private Integer type;
@Column(name = "crt_time") @Column(name = "crt_time")
private Date crtTime; private Date crtTime;
@Column(name = "upd_time") @Column(name = "upd_time")
private Date updTime; private Date updTime;
@Column(name = "is_entity")
private Integer isEntity;
@Column(name = "goods_id") @Column(name = "goods_id")
private Integer goodsId; private Integer goodsId;
@Column(name = "is_prize")
private Integer isPrize; @NotNull(message = "奖品类型不能为null")
@Column(name = "prize_goods_type")
private Integer prizeGoodsType;
} }
...@@ -19,6 +19,7 @@ import java.util.Date; ...@@ -19,6 +19,7 @@ import java.util.Date;
public class ActivityWinningRecordVo { public class ActivityWinningRecordVo {
private String userName; private String userName;
private String phone;
private String positionName; private String positionName;
@ApiModelProperty("1:线上 2:现场") @ApiModelProperty("1:线上 2:现场")
private Integer prizeType; private Integer prizeType;
......
...@@ -16,5 +16,7 @@ import lombok.NoArgsConstructor; ...@@ -16,5 +16,7 @@ import lombok.NoArgsConstructor;
public class LotteryVo { public class LotteryVo {
private String prizeName; private String prizeName;
private Integer serialNumber;
private String expiryDateCode; private String expiryDateCode;
private String message;
} }
...@@ -9,6 +9,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; ...@@ -9,6 +9,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
import tk.mybatis.spring.annotation.MapperScan; import tk.mybatis.spring.annotation.MapperScan;
...@@ -22,8 +24,11 @@ import tk.mybatis.spring.annotation.MapperScan; ...@@ -22,8 +24,11 @@ import tk.mybatis.spring.annotation.MapperScan;
"com.xxfc.platform", "com.xxfc.platform",
"com.github.wxiaoqi.security.common.handler", "com.github.wxiaoqi.security.common.handler",
"com.github.wxiaoqi.security.common.log", "com.github.wxiaoqi.security.common.log",
"com.github.wxiaoqi.security.admin.support.aop" "com.github.wxiaoqi.security.admin.support.aop",
"com.github.wxiaoqi.security.common.support"
}) })
@EnableAspectJAutoProxy(exposeProxy = true)
@EnableAsync
@EnableDiscoveryClient @EnableDiscoveryClient
@EnableScheduling @EnableScheduling
@EnableAceAuthClient @EnableAceAuthClient
......
...@@ -13,6 +13,7 @@ import com.xxfc.platform.activity.entity.ActivityAttendanceRecord; ...@@ -13,6 +13,7 @@ import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import com.xxfc.platform.activity.mapper.ActivityAttendanceRecordMapper; import com.xxfc.platform.activity.mapper.ActivityAttendanceRecordMapper;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordTotalVo; import com.xxfc.platform.activity.vo.ActivityAttendanceRecordTotalVo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordVo; import com.xxfc.platform.activity.vo.ActivityAttendanceRecordVo;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
...@@ -20,18 +21,22 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; ...@@ -20,18 +21,22 @@ import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.assertj.core.util.Lists; import org.assertj.core.util.Lists;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import java.io.IOException; import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.*;
import java.util.Date; import java.util.concurrent.TimeUnit;
import java.util.List;
import java.util.Objects;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -44,19 +49,38 @@ import java.util.stream.Stream; ...@@ -44,19 +49,38 @@ import java.util.stream.Stream;
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@Service @Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecordMapper,ActivityAttendanceRecord> { public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecordMapper,ActivityAttendanceRecord> {
@Resource(name = "redisTemplate")
private ValueOperations<String, Object> valueOperations;
private final RedisTemplate<String,Object> redisTemplate;
@Value("${lottery.expire.days:60}")
private int expirDays;
public void attendActivity(Integer activityId, String activityName,AppUserDTO appUserDTO) { public void attendActivity(Integer activityId, String activityName,AppUserDTO appUserDTO) {
ActivityAttendanceRecord activityAttendanceRecord = new ActivityAttendanceRecord(); ActivityAttendanceRecord record = new ActivityAttendanceRecord();
activityAttendanceRecord.setActivityId(activityId); record.setActivityId(activityId);
activityAttendanceRecord.setActivityName(activityName); record.setUserId(appUserDTO.getUserid());
activityAttendanceRecord.setUserId(appUserDTO.getUserid()); int num = mapper.selectCount(record);
activityAttendanceRecord.setPhone(appUserDTO.getUsername()); if (num==0) {
activityAttendanceRecord.setUserName(StringUtils.isEmpty(appUserDTO.getRealname())?appUserDTO.getNickname():appUserDTO.getRealname()); ActivityAttendanceRecord activityAttendanceRecord = new ActivityAttendanceRecord();
activityAttendanceRecord.setPositionId(appUserDTO.getPositionId()); activityAttendanceRecord.setActivityId(activityId);
activityAttendanceRecord.setPositionName(appUserDTO.getPositionName()); activityAttendanceRecord.setActivityName(activityName);
activityAttendanceRecord.setCrtTime(new Date()); activityAttendanceRecord.setUserId(appUserDTO.getUserid());
mapper.insertSelective(activityAttendanceRecord); activityAttendanceRecord.setPhone(appUserDTO.getUsername());
activityAttendanceRecord.setUserName(StringUtils.isEmpty(appUserDTO.getRealname()) ? appUserDTO.getNickname() : appUserDTO.getRealname());
activityAttendanceRecord.setPositionId(appUserDTO.getPositionId());
activityAttendanceRecord.setPositionName(appUserDTO.getPositionName());
activityAttendanceRecord.setCrtTime(new Date());
mapper.insertSelective(activityAttendanceRecord);
String onlineKey = String.format("%s%d:%d:%d", ActivityPrizeBiz.USER_LOTTERY_PRE_KEY,appUserDTO.getUserid(), activityId, PrizeTypeEnum.ONLINE.getCode());
String localeKey = String.format("%s%d:%d:%d",ActivityPrizeBiz.USER_LOTTERY_PRE_KEY,appUserDTO.getUserid(), activityId, PrizeTypeEnum.LOCALE.getCode());
redisTemplate.delete(Arrays.asList(onlineKey,localeKey));
valueOperations.set(onlineKey, 1L,expirDays, TimeUnit.DAYS);
valueOperations.set(localeKey, 1L,expirDays, TimeUnit.DAYS);
}
} }
...@@ -99,6 +123,10 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor ...@@ -99,6 +123,10 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
} }
public Boolean hasNumberOfLuckyDrawByType(Integer activityId, Integer prizeType, Integer userid) { public Boolean hasNumberOfLuckyDrawByType(Integer activityId, Integer prizeType, Integer userid) {
Object lotteryNum = valueOperations.get(String.format("%s%d:%d:%d",ActivityPrizeBiz.USER_LOTTERY_PRE_KEY,userid, activityId, prizeType));
if (lotteryNum!=null){
return Integer.valueOf(lotteryNum.toString()) >0;
}
ActivityAttendanceRecord activityAttendanceRecord = new ActivityAttendanceRecord(); ActivityAttendanceRecord activityAttendanceRecord = new ActivityAttendanceRecord();
activityAttendanceRecord.setActivityId(activityId); activityAttendanceRecord.setActivityId(activityId);
activityAttendanceRecord.setUserId(userid); activityAttendanceRecord.setUserId(userid);
...@@ -107,9 +135,11 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor ...@@ -107,9 +135,11 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
return false; return false;
} }
if (prizeType == PrizeTypeEnum.ONLINE.getCode()){ if (prizeType == PrizeTypeEnum.ONLINE.getCode()){
valueOperations.set(String.format("%s%d:%d:%d",ActivityPrizeBiz.USER_LOTTERY_PRE_KEY, userid, activityId, prizeType),activityAttendanceRecord.getOnlineLotteryNum(),expirDays, TimeUnit.DAYS);
return activityAttendanceRecord.getOnlineLotteryNum()>0; return activityAttendanceRecord.getOnlineLotteryNum()>0;
} }
if (prizeType ==PrizeTypeEnum.LOCALE.getCode()){ if (prizeType ==PrizeTypeEnum.LOCALE.getCode()){
valueOperations.set(String.format("%s%d:%d:%d",ActivityPrizeBiz.USER_LOTTERY_PRE_KEY,userid, activityId, prizeType),activityAttendanceRecord.getLocaleLotteryNum(),expirDays, TimeUnit.DAYS);
return activityAttendanceRecord.getLocaleLotteryNum()>0; return activityAttendanceRecord.getLocaleLotteryNum()>0;
} }
return false; return false;
...@@ -171,4 +201,9 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor ...@@ -171,4 +201,9 @@ public class ActivityAttendanceRecordBiz extends BaseBiz<ActivityAttendanceRecor
activityAttendanceRecordDTO.getPrizes(), activityAttendanceRecordDTO.getPrizes(),
timeStr}; timeStr};
} }
@Async
public void updateLotteryNumByActivityIdAndUserIdAndPrizeType(Integer activityId,Integer userId,Integer prizeType){
mapper.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityId,userId,prizeType);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.nio.charset.Charset;
/**
* ${DESCRIPTION}
*
* @author wanghaobin
* @create 2017-06-21 8:39
*/
@Configuration
@Primary
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(factory);
RedisSerializer<String> stringSerializer = new StringRedisSerializer(Charset.forName("UTF-8"));
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}
package com.xxfc.platform.activity.config;
import org.redisson.api.*;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @author libin
* @version 1.0
* @description TODO
* @data 2019/6/20 16:51
*/
@Component
public class RedissonLock {
@Resource
private RedissonClient redissonClient;
/**
* 获取锁
* @param key
* @return
*/
public RLock getRLock(String key){
return redissonClient.getLock(key);
}
/**
* 获取读写锁
* @param key
* @return
*/
public RReadWriteLock getRWLock(String key){
return redissonClient.getReadWriteLock(key);
}
/**
* 获取记数锁
* @param key
* @return
*/
public RCountDownLatch getRCountDownLatch(String key){
return redissonClient.getCountDownLatch(key);
}
/**
* 获取消息的Topic
* @param key
* @return
*/
public RTopic getRTopic(String key){
RTopic rTopic = redissonClient.getTopic(key);
return rTopic;
}
}
...@@ -3,6 +3,7 @@ package com.xxfc.platform.activity.mapper; ...@@ -3,6 +3,7 @@ package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO; import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO; import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.xxfc.platform.activity.entity.ActivityAttendanceRecord; import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List; import java.util.List;
...@@ -17,4 +18,8 @@ import java.util.List; ...@@ -17,4 +18,8 @@ import java.util.List;
public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> { public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> {
List<ActivityAttendanceRecordDTO> selectActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO); List<ActivityAttendanceRecordDTO> selectActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO);
void updateLotteryNumByActivityIdAndUserIdAndPrizeType(@Param("activityId") Integer activityId,
@Param("userId") Integer userId,
@Param("prizeType") Integer prizeType);
} }
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPrize; import com.xxfc.platform.activity.entity.ActivityPrize;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.insert.InsertListMapper; import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
...@@ -12,5 +13,7 @@ import tk.mybatis.mapper.common.Mapper; ...@@ -12,5 +13,7 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-12-03 16:46:02 * @date 2019-12-03 16:46:02
*/ */
public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> { public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> {
void updatePrizeStock(@Param("prizeType") Integer prizeType,
@Param("serialNumber") Integer serialNumber);
} }
...@@ -4,7 +4,6 @@ import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; ...@@ -4,7 +4,6 @@ import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz; import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize; import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import com.xxfc.platform.activity.vo.LotteryVo; import com.xxfc.platform.activity.vo.LotteryVo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -48,8 +47,9 @@ public class ActivityPrizeController { ...@@ -48,8 +47,9 @@ public class ActivityPrizeController {
@PostMapping("/lottery/{activityId}/{prizeType}") @PostMapping("/lottery/{activityId}/{prizeType}")
public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId, public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType, @PathVariable(value = "prizeType") Integer prizeType,
@RequestParam(value = "lottery") String lottery,
AppUserDTO appUserDTO) { AppUserDTO appUserDTO) {
LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,appUserDTO); LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,lottery,appUserDTO);
return ObjectRestResponse.succ(lotteryVo); return ObjectRestResponse.succ(lotteryVo);
} }
......
package com.xxfc.platform.activity.rest.admin; package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.annotation.BeanValid;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse; import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz; import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize; import com.xxfc.platform.activity.entity.ActivityPrize;
...@@ -24,7 +25,7 @@ public class ActivityPrizeAdminController { ...@@ -24,7 +25,7 @@ public class ActivityPrizeAdminController {
private final ActivityPrizeBiz activityPrizeBiz; private final ActivityPrizeBiz activityPrizeBiz;
@PostMapping("/save") @PostMapping("/save")
public ObjectRestResponse<Void> savePrize(@RequestBody List<ActivityPrize> activityPrizes) { public ObjectRestResponse<Void> savePrize(@BeanValid @RequestBody List<ActivityPrize> activityPrizes) {
activityPrizeBiz.saveActivityPrizes(activityPrizes); activityPrizeBiz.saveActivityPrizes(activityPrizes);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
aar.user_name as `userName`, aar.user_name as `userName`,
aar.phone, aar.phone,
aar.position_name as `positionName`, aar.position_name as `positionName`,
apr.inviteNum, IFNULL(apr.inviteNum,0),
awr.prizes awr.prizes
from (select `user_id`,`popularize_id`,`current_progress`,`status`,`crt_time` from activity_popularize_user where from (select `user_id`,`popularize_id`,`current_progress`,`status`,`crt_time` from activity_popularize_user where
`popularize_id`=#{activityId} `popularize_id`=#{activityId}
...@@ -64,4 +64,21 @@ ...@@ -64,4 +64,21 @@
order by apu.current_progress desc order by apu.current_progress desc
</select> </select>
<update id="updateLotteryNumByActivityIdAndUserIdAndPrizeType">
update `activity_attendance_record`
<if test="prizeType==1">
set `online_lottery_num`=`online_lottery_num`-1
</if>
<if test="prizeType==2">
set `locale_lottery_num`=`locale_lottery_num`-1
</if>
where `activity_id`=#{activityId} and `user_id`=#{userId}
<if test="prizeType==1">
and `online_lottery_num`>0
</if>
<if test="prizeType==2">
and `locale_lottery_num`>0
</if>
</update>
</mapper> </mapper>
\ No newline at end of file
...@@ -14,9 +14,12 @@ ...@@ -14,9 +14,12 @@
<result property="probability" column="probability"/> <result property="probability" column="probability"/>
<result property="type" column="type"/> <result property="type" column="type"/>
<result property="crtTime" column="crt_time"/> <result property="crtTime" column="crt_time"/>
<result property="isEntity" column="is_entity"/>
<result property="goodsId" column="goods_id"/> <result property="goodsId" column="goods_id"/>
<result property="isPrize" column="is_prize"/> <result property="prizeGoodsType" column="prize_goods_type"/>
</resultMap> </resultMap>
<update id="updatePrizeStock">
update `activity_prize` set `total_stock`=`total_stock`-1 where `type`=#{prizeType} and `serial_number`=#{serialNumber} and `total_stock`>0;
</update>
</mapper> </mapper>
\ No newline at end of file
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
</resultMap> </resultMap>
<select id="selectActivityWinningRecord" resultType="com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO"> <select id="selectActivityWinningRecord" resultType="com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO">
select * from `activity_winning_record` as `awr` select aar.user_id as `userId`,aar.user_name as `userName`, aar.phone as `phone`,aar.position_name as `positionName`,awr.* from `activity_winning_record` as `awr`
left join `activity_attendance_record` as `aar` ON aar.user_id=awr.user_id and aar.activity_id=awr.activity_id left join `activity_attendance_record` as `aar` ON aar.user_id=awr.user_id and aar.activity_id=awr.activity_id
where 1=1 where 1=1
<if test="activityId!=null"> <if test="activityId!=null">
......
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