Commit 54c89714 authored by libin's avatar libin

Merge branch 'luck_draw_feature'

# Conflicts:
#	xx-universal/xx-universal-server/src/main/java/com/xxfc/platform/universal/biz/OrderRefundBiz.java
parents e8eba62a 983f05db
...@@ -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()){
......
package com.github.wxiaoqi.security.common.util.excel;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 18:37
*/
public class ExcelUtils {
private XSSFWorkbook hssfWorkbook;
private XSSFSheet sheet;
public ExcelUtils(String sheetName){
hssfWorkbook = new XSSFWorkbook();
sheet = hssfWorkbook.createSheet(sheetName);
}
public void createCellData(Sheet sheet, int startRowIndex, CellStyle cellStyle, List<String[]> datas) {
for (String[] data : datas) {
Row row = sheet.createRow(startRowIndex++);
createCellCount(row, 0, data, cellStyle);
}
}
private void createCellCount(Row row, int CellStartIndex, String[] data, CellStyle cellStyle) {
for (int i = CellStartIndex, y = 0; y < data.length; i++, y++) {
Cell cell = row.createCell(i);
cell.setCellStyle(cellStyle);
cell.setCellValue(data[y]);
}
}
public void createHeader(Row row, int cellStartIndex, String[] header, CellStyle cellStyle) {
for (int i = 0; i < header.length; i++) {
Cell cell = row.createCell(cellStartIndex);
cell.setCellValue(header[i]);
cell.setCellStyle(cellStyle);
cellStartIndex += 1;
}
}
public CellStyle createGeneralCellStyle() {
CellStyle cellStyleGeneral = createHeaderCellStyle();
cellStyleGeneral.setWrapText(true);
XSSFFont generalFont = createFont();
generalFont.setBold(false);
cellStyleGeneral.setFont(generalFont);
return cellStyleGeneral;
}
public CellStyle createHeaderCellStyle() {
XSSFCellStyle cellStyleHeader = hssfWorkbook.createCellStyle();
cellStyleHeader.setAlignment(HorizontalAlignment.CENTER);
cellStyleHeader.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyleHeader.setLocked(false);
XSSFFont headerFont = createFont();
cellStyleHeader.setFont(headerFont);
return cellStyleHeader;
}
public XSSFFont createFont() {
XSSFFont font = hssfWorkbook.createFont();
font.setFontName("黑体");
font.setBold(true);
return font;
}
public XSSFWorkbook getHssfWorkbook() {
return hssfWorkbook;
}
public void setHssfWorkbook(XSSFWorkbook hssfWorkbook) {
this.hssfWorkbook = hssfWorkbook;
}
public XSSFSheet getSheet() {
return sheet;
}
public void setSheet(XSSFSheet sheet) {
this.sheet = sheet;
}
}
...@@ -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;
......
...@@ -34,7 +34,7 @@ import java.util.stream.Collectors; ...@@ -34,7 +34,7 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@Slf4j @Slf4j
public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRelation> { public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper, AppUserRelation> {
@Autowired @Autowired
AppUserRelationTempBiz relationTempBiz; AppUserRelationTempBiz relationTempBiz;
...@@ -60,12 +60,13 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -60,12 +60,13 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
/** /**
* 关系绑定 * 关系绑定
* 规则A->B (B无有效上线+无有效下线) * 规则A->B (B无有效上线+无有效下线)
*
* @param userId * @param userId
* @param parentId * @param parentId
*/ */
public void bindRelation(Integer userId,Integer parentId,Integer type){ public void bindRelation(Integer userId, Integer parentId, Integer type) {
if (userId.equals(parentId)){ if (userId.equals(parentId)) {
log.info("----userId==="+userId+"----parentId===="+parentId+"----自己不能成为自己的上线"); log.info("----userId===" + userId + "----parentId====" + parentId + "----自己不能成为自己的上线");
return; return;
} }
...@@ -74,34 +75,34 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -74,34 +75,34 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
log.info("----userId==="+userId+"----parentId===="+parentId+"----该用户不存在"); log.info("----userId==="+userId+"----parentId===="+parentId+"----该用户不存在");
return; return;
}*/ }*/
AppUserVo appUserVo=userDetailBiz.getUserInfoById(parentId); AppUserVo appUserVo = userDetailBiz.getUserInfoById(parentId);
if (appUserVo==null){ if (appUserVo == null) {
log.info("----userId==="+userId+"----parentId===="+parentId+"----该上线用户不存在"); log.info("----userId===" + userId + "----parentId====" + parentId + "----该上线用户不存在");
return; return;
} }
AppUserRelation relation=getMyBiz().getRelationByUserId(parentId); AppUserRelation relation = getMyBiz().getRelationByUserId(parentId);
Long time=System.currentTimeMillis(); Long time = System.currentTimeMillis();
if(relation==null){ if (relation == null) {
relation=new AppUserRelation(); relation = new AppUserRelation();
relation.setUserId(parentId); relation.setUserId(parentId);
relation.setBindType(type); relation.setBindType(type);
insertSelective(relation); insertSelective(relation);
} }
Long bindTime=time-validTime; Long bindTime = time - validTime;
//判断用户是否有有效的下线 //判断用户是否有有效的下线
if (getCountByParentId(userId,bindTime)==0L){ if (getCountByParentId(userId, bindTime) == 0L) {
relation=getMyBiz().getRelationByUserId(userId); relation = getMyBiz().getRelationByUserId(userId);
if(relation==null){ if (relation == null) {
relation=new AppUserRelation(); relation = new AppUserRelation();
relation.setUserId(userId); relation.setUserId(userId);
relation.setParentId(parentId); relation.setParentId(parentId);
relation.setBindType(type); relation.setBindType(type);
relation.setBindTime(time); relation.setBindTime(time);
insertSelective(relation); insertSelective(relation);
}else { } else {
//判断用户是否有有效的上线 //判断用户是否有有效的上线
log.info("----userId==="+userId+"----bindTime===="+bindTime+"----relation.getBindTime()==="+relation.getBindTime()); log.info("----userId===" + userId + "----bindTime====" + bindTime + "----relation.getBindTime()===" + relation.getBindTime());
if(relation.getParentId()==null||relation.getParentId()==0||(relation.getIsForever()!=1&&validTime>0&&relation.getBindTime()<bindTime)){ if (relation.getParentId() == null || relation.getParentId() == 0 || (relation.getIsForever() != 1 && validTime > 0 && relation.getBindTime() < bindTime)) {
relation.setParentId(parentId); relation.setParentId(parentId);
relation.setBindType(type); relation.setBindType(type);
relation.setBindTime(time); relation.setBindTime(time);
...@@ -110,65 +111,69 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -110,65 +111,69 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
} }
} }
} }
//首页关系绑定 //首页关系绑定
public ObjectRestResponse appBindRelation(Integer userId,String code){ public ObjectRestResponse appBindRelation(Integer userId, String code) {
Integer parentId=0; Integer parentId = 0;
if (StringUtils.isNotBlank(code)){ if (StringUtils.isNotBlank(code)) {
//判断处理活动关键字 //判断处理活动关键字
String[] codes = code.split("_"); String[] codes = code.split("_");
if(codes.length > 1) { if (codes.length > 1) {
code = codes[0]; code = codes[0];
} }
parentId=appUserDetailBiz.getUserByCode(code); parentId = appUserDetailBiz.getUserByCode(code);
} }
if (parentId!=null&&parentId>0&&userId!=null&&userId>0){ if (parentId != null && parentId > 0 && userId != null && userId > 0) {
getMyBiz().bindRelation(userId,parentId,1); getMyBiz().bindRelation(userId, parentId, 1);
} }
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
//后台关系绑定 //后台关系绑定
public ObjectRestResponse adminBindRelation(UserRelationDTO relationDTO){ public ObjectRestResponse adminBindRelation(UserRelationDTO relationDTO) {
String phone=relationDTO.getPhone(); String phone = relationDTO.getPhone();
Integer userId=relationDTO.getUserId(); Integer userId = relationDTO.getUserId();
if (StringUtils.isBlank(phone)||userId==null||userId==0){ if (StringUtils.isBlank(phone) || userId == null || userId == 0) {
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE,"参数不能为空"); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数不能为空");
} }
AppUserLogin userLogin=appUserLoginBiz.checkeUserLogin(phone); AppUserLogin userLogin = appUserLoginBiz.checkeUserLogin(phone);
if (userLogin==null){ if (userLogin == null) {
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE,"该上级不存在"); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "该上级不存在");
} }
Integer parentId=userLogin.getId(); Integer parentId = userLogin.getId();
getMyBiz().bindRelation(userId,parentId,1); getMyBiz().bindRelation(userId, parentId, 1);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
//永久稳定关系 //永久稳定关系
public void foreverBind(Integer user_id ){ public void foreverBind(Integer user_id) {
AppUserRelation relation=getMyBiz().getRelationByUserId(user_id); AppUserRelation relation = getMyBiz().getRelationByUserId(user_id);
if(relation!=null&&relation.getIsForever()==0&&relation.getParentId()!=null&&relation.getParentId()>0){ if (relation != null && relation.getIsForever() == 0 && relation.getParentId() != null && relation.getParentId() > 0) {
relation.setIsForever(1); relation.setIsForever(1);
getMyBiz().updRelation(relation); getMyBiz().updRelation(relation);
} }
} }
/** /**
* 小程序分享上下线绑定 * 小程序分享上下线绑定
*
* @param userid 当前人小程序id * @param userid 当前人小程序id
* @param pid 分享人id * @param pid 分享人id
* @param platform_userid 当前人统一平台id * @param platform_userid 当前人统一平台id
*/ */
public ObjectRestResponse shareParentByUserId(Integer userid, Integer pid, Integer platform_userid){ public ObjectRestResponse shareParentByUserId(Integer userid, Integer pid, Integer platform_userid) {
if(pid==null||pid==0||((platform_userid==null||platform_userid==0)&&(userid==0||userid==null))){ if (pid == null || pid == 0 || ((platform_userid == null || platform_userid == 0) && (userid == 0 || userid == null))) {
return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空"); return ObjectRestResponse.createFailedResult(ResultCode.NULL_CODE, "参数为空");
} }
if(platform_userid==null||platform_userid==0){ if (platform_userid == null || platform_userid == 0) {
upRelationTemp(pid,userid); upRelationTemp(pid, userid);
}else { } else {
AppUserVo userVo=userDetailBiz.getUserInfoById(platform_userid); AppUserVo userVo = userDetailBiz.getUserInfoById(platform_userid);
if(userVo==null){ if (userVo == null) {
upRelationTemp(pid,userid); upRelationTemp(pid, userid);
}else { } else {
bindRelation(platform_userid,pid,2); bindRelation(platform_userid, pid, 2);
} }
} }
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
...@@ -177,17 +182,18 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -177,17 +182,18 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
/** /**
* 新增临时关系 * 新增临时关系
*
* @param pid * @param pid
* @param userid * @param userid
*/ */
public void upRelationTemp(Integer pid,Integer userid){ public void upRelationTemp(Integer pid, Integer userid) {
AppUserRelationTemp relationTemp=new AppUserRelationTemp(); AppUserRelationTemp relationTemp = new AppUserRelationTemp();
relationTemp.setTempId(userid); relationTemp.setTempId(userid);
relationTemp.setIsDel(0); relationTemp.setIsDel(0);
relationTemp.setType(1); relationTemp.setType(1);
AppUserRelationTemp relationTemp1= relationTempBiz.selectOne(relationTemp); AppUserRelationTemp relationTemp1 = relationTempBiz.selectOne(relationTemp);
if(relationTemp1==null){ if (relationTemp1 == null) {
relationTemp.setUserId(pid); relationTemp.setUserId(pid);
relationTempBiz.insertSelective(relationTemp); relationTempBiz.insertSelective(relationTemp);
} }
...@@ -196,67 +202,69 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -196,67 +202,69 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
/** /**
* 小程序上下线绑定 * 小程序上下线绑定
*
* @param platform_userid 当前人统一平台id * @param platform_userid 当前人统一平台id
* @param userid 当前人小程序id * @param userid 当前人小程序id
*/ */
public void bindByUserId(Integer platform_userid,Integer userid){ public void bindByUserId(Integer platform_userid, Integer userid) {
if(platform_userid==null||platform_userid==0||userid==null||userid==0){ if (platform_userid == null || platform_userid == 0 || userid == null || userid == 0) {
return; return;
} }
AppUserRelationTemp relationTemp =new AppUserRelationTemp(); AppUserRelationTemp relationTemp = new AppUserRelationTemp();
relationTemp.setTempId(userid); relationTemp.setTempId(userid);
relationTemp.setIsValid(0); relationTemp.setIsValid(0);
relationTemp.setType(1); relationTemp.setType(1);
relationTemp.setIsDel(0); relationTemp.setIsDel(0);
relationTemp=relationTempBiz.selectOne(relationTemp); relationTemp = relationTempBiz.selectOne(relationTemp);
if(relationTemp==null){ if (relationTemp == null) {
return; return;
} }
Integer parentId=relationTemp.getUserId(); Integer parentId = relationTemp.getUserId();
bindRelation(platform_userid,parentId,2); bindRelation(platform_userid, parentId, 2);
} }
/** /**
* 获取用户的上线关系 * 获取用户的上线关系
*
* @param userId * @param userId
* @return * @return
*/ */
@Cache(key="user:relation{1}") @Cache(key = "user:relation{1}")
public AppUserRelation getRelationByUserId(Integer userId){ public AppUserRelation getRelationByUserId(Integer userId) {
AppUserRelation relation=new AppUserRelation(); AppUserRelation relation = new AppUserRelation();
relation.setUserId(userId); relation.setUserId(userId);
return selectOne(relation); return selectOne(relation);
} }
//获取有效的上线 //获取有效的上线
public AppUserRelation getRelationByIdUserIdAndTime(Integer userId){ public AppUserRelation getRelationByIdUserIdAndTime(Integer userId) {
AppUserRelation userRelation= getMyBiz().getRelationByUserId(userId); AppUserRelation userRelation = getMyBiz().getRelationByUserId(userId);
if (userRelation==null){ if (userRelation == null) {
return null; return null;
} }
log.info("---userId==="+userId+"-----isForever==="+userRelation.getIsForever()); log.info("---userId===" + userId + "-----isForever===" + userRelation.getIsForever());
if (validTime==null||validTime==0){ if (validTime == null || validTime == 0) {
return userRelation; return userRelation;
} }
Long time=System.currentTimeMillis()-validTime; Long time = System.currentTimeMillis() - validTime;
if (userRelation.getIsForever()==1||userRelation.getBindTime()>time){ if (userRelation.getIsForever() == 1 || userRelation.getBindTime() > time) {
return userRelation; return userRelation;
} }
log.info("---userId==="+userId+"-----time==="+time+"----userRelation.getBindTime()==="+userRelation.getBindTime()); log.info("---userId===" + userId + "-----time===" + time + "----userRelation.getBindTime()===" + userRelation.getBindTime());
return null; return null;
} }
//获取用户的下线总数 //获取用户的下线总数
public int getCountByParentId(Integer parentId,Long time){ public int getCountByParentId(Integer parentId, Long time) {
if (validTime<=0){ if (validTime <= 0) {
time= validTime; time = validTime;
} }
return mapper.countByParentId(parentId,time); return mapper.countByParentId(parentId, time);
} }
@CacheClear(key="user:relation{1.userId}") @CacheClear(key = "user:relation{1.userId}")
public int updRelation(AppUserRelation appUserRelation){ public int updRelation(AppUserRelation appUserRelation) {
return super.updateSelectiveByIdRe(appUserRelation); return super.updateSelectiveByIdRe(appUserRelation);
} }
...@@ -273,16 +281,16 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -273,16 +281,16 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
InviteMemberVo inviteMemberVo = new InviteMemberVo(); InviteMemberVo inviteMemberVo = new InviteMemberVo();
inviteMemberVo.setPage(page); inviteMemberVo.setPage(page);
inviteMemberVo.setLimit(limit); inviteMemberVo.setLimit(limit);
inviteMemberVo.setFailureTime(failureTime*24*60*60); inviteMemberVo.setFailureTime(failureTime * 24 * 60 * 60);
Example example = new Example(AppUserRelation.class); Example example = new Example(AppUserRelation.class);
Example.Criteria criteria = example.createCriteria(); Example.Criteria criteria = example.createCriteria();
if (state!=null) { if (state != null) {
criteria.andEqualTo("isForever", state); criteria.andEqualTo("isForever", state);
} }
criteria.andEqualTo("parentId",leaderId); criteria.andEqualTo("parentId", leaderId);
PageDataVO<AppUserRelation> pageDataVO = PageDataVO.pageInfo(page, limit, () -> mapper.selectByExample(example)); PageDataVO<AppUserRelation> pageDataVO = PageDataVO.pageInfo(page, limit, () -> mapper.selectByExample(example));
List<AppUserRelation> appUserRelations = pageDataVO.getData(); List<AppUserRelation> appUserRelations = pageDataVO.getData();
if (CollectionUtils.isEmpty(appUserRelations)){ if (CollectionUtils.isEmpty(appUserRelations)) {
inviteMemberVo.setInviteMembers(Collections.EMPTY_LIST); inviteMemberVo.setInviteMembers(Collections.EMPTY_LIST);
return inviteMemberVo; return inviteMemberVo;
} }
...@@ -294,14 +302,16 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -294,14 +302,16 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
List<InviteMemberBO> inviteMemberBOS = new ArrayList<>(); List<InviteMemberBO> inviteMemberBOS = new ArrayList<>();
InviteMemberBO inviteMemberBO; InviteMemberBO inviteMemberBO;
for (AppUserRelation appUserRelation : appUserRelations) { for (AppUserRelation appUserRelation : appUserRelations) {
if (userIdAndUserLoginMap==null || userIdAndUserDetailMap==null){ if (userIdAndUserLoginMap == null || userIdAndUserDetailMap == null) {
continue; continue;
} }
inviteMemberBO = new InviteMemberBO(); inviteMemberBO = new InviteMemberBO();
inviteMemberBO.setUserId(appUserRelation.getUserId());
inviteMemberBO.setParentId(appUserRelation.getParentId());
inviteMemberBO.setBindTime(appUserRelation.getBindTime()); inviteMemberBO.setBindTime(appUserRelation.getBindTime());
inviteMemberBO.setJoinTime(appUserRelation.getBindTime()); inviteMemberBO.setJoinTime(appUserRelation.getBindTime());
inviteMemberBO.setUsername(userIdAndUserLoginMap==null?"":userIdAndUserLoginMap.get(appUserRelation.getUserId())==null?"":userIdAndUserLoginMap.get(appUserRelation.getUserId()).getUsername()); inviteMemberBO.setUsername(userIdAndUserLoginMap == null ? "" : userIdAndUserLoginMap.get(appUserRelation.getUserId()) == null ? "" : userIdAndUserLoginMap.get(appUserRelation.getUserId()).getUsername());
inviteMemberBO.setHeadUrl(userIdAndUserDetailMap==null?"":userIdAndUserDetailMap.get(appUserRelation.getUserId())==null?"":userIdAndUserDetailMap.get(appUserRelation.getUserId()).getHeadimgurl()); inviteMemberBO.setHeadUrl(userIdAndUserDetailMap == null ? "" : userIdAndUserDetailMap.get(appUserRelation.getUserId()) == null ? "" : userIdAndUserDetailMap.get(appUserRelation.getUserId()).getHeadimgurl());
inviteMemberBOS.add(inviteMemberBO); inviteMemberBOS.add(inviteMemberBO);
} }
inviteMemberVo.setTotalCount(pageDataVO.getTotalCount().intValue()); inviteMemberVo.setTotalCount(pageDataVO.getTotalCount().intValue());
...@@ -313,65 +323,66 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel ...@@ -313,65 +323,66 @@ public class AppUserRelationBiz extends BaseBiz<AppUserRelationMapper,AppUserRel
public Integer findLeaderIdByMemberId(Integer userId) { public Integer findLeaderIdByMemberId(Integer userId) {
Example example = new Example(AppUserRelation.class); Example example = new Example(AppUserRelation.class);
Example.Criteria criteria = example.createCriteria(); Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId",userId); criteria.andEqualTo("userId", userId);
List<AppUserRelation> appUserRelations = mapper.selectByExample(example); List<AppUserRelation> appUserRelations = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(appUserRelations)){ if (CollectionUtils.isEmpty(appUserRelations)) {
return 0; return 0;
} }
return appUserRelations.get(0).getParentId(); return appUserRelations.get(0).getParentId();
} }
public Map<Integer, Integer> findMemberSateAndCountMapByLeaderId(Integer userId) { public Map<Integer, Integer> findMemberSateAndCountMapByLeaderId(Integer userId) {
Map<Integer,Integer> memberSateAndCountMap = new HashMap<>(); Map<Integer, Integer> memberSateAndCountMap = new HashMap<>();
AppUserRelation appUserRelation = new AppUserRelation(); List<AppUserRelation> appUserRelationList = mapper.selectCountByLeaderId(userId);
appUserRelation.setParentId(userId); if (CollectionUtils.isEmpty(appUserRelationList)){
appUserRelation.setIsForever(0); memberSateAndCountMap.put(0, 0);
int totalCount = mapper.selectCount(appUserRelation); memberSateAndCountMap.put(1, 0);
appUserRelation.setIsForever(1); }
int activityCount = mapper.selectCount(appUserRelation); Map<Boolean, Long> resultMap = appUserRelationList.stream().collect(Collectors.partitioningBy(x -> x.getIsForever() == 0, Collectors.counting()));
memberSateAndCountMap.put(0,totalCount); memberSateAndCountMap.put(0, resultMap.get(Boolean.TRUE)==null?0:resultMap.get(Boolean.TRUE).intValue());
memberSateAndCountMap.put(1,activityCount); memberSateAndCountMap.put(1, resultMap.get(Boolean.FALSE)==null?0:resultMap.get(Boolean.FALSE).intValue());
return memberSateAndCountMap; return memberSateAndCountMap;
} }
public void deleteByMemberIds(Collection<Integer> userIds) { public void deleteByMemberIds(Collection<Integer> userIds) {
Example example = new Example(AppUserRelation.class); Example example = new Example(AppUserRelation.class);
Example.Criteria criteria = example.createCriteria(); Example.Criteria criteria = example.createCriteria();
criteria.andIn("parentId",userIds); criteria.andIn("parentId", userIds);
List<AppUserRelation> list=mapper.selectByExample(example); List<AppUserRelation> list = mapper.selectByExample(example);
for (AppUserRelation appUserRelation:list){ for (AppUserRelation appUserRelation : list) {
getMyBiz().delRelation(appUserRelation.getUserId()); getMyBiz().delRelation(appUserRelation.getUserId());
} }
mapper.deleteByExample(example); mapper.deleteByExample(example);
Example example2 = new Example(AppUserRelation.class); Example example2 = new Example(AppUserRelation.class);
Example.Criteria criteria1 = example2.createCriteria(); Example.Criteria criteria1 = example2.createCriteria();
criteria1.andIn("userId",userIds); criteria1.andIn("userId", userIds);
mapper.deleteByExample(example2); mapper.deleteByExample(example2);
for (Integer userId:userIds){ for (Integer userId : userIds) {
getMyBiz().delRelation(userId); getMyBiz().delRelation(userId);
} }
} }
@CacheClear(key="user:relation{1}")
public void delRelation(Integer userId){ @CacheClear(key = "user:relation{1}")
public void delRelation(Integer userId) {
} }
public List<AppUserRelation> findLeaderByUserIds(List<Integer> userIds) { public List<AppUserRelation> findLeaderByUserIds(List<Integer> userIds) {
List<AppUserRelation> appUserRelationList = mapper.selectByUserIds(userIds); List<AppUserRelation> appUserRelationList = mapper.selectByUserIds(userIds);
return appUserRelationList==null?Collections.EMPTY_LIST:appUserRelationList; return appUserRelationList == null ? Collections.EMPTY_LIST : appUserRelationList;
} }
public void initParentId(AppUserDTO userDTO, Integer userid) { public void initParentId(AppUserDTO userDTO, Integer userid) {
AppUserRelation relation = getRelationByIdUserIdAndTime(userid); AppUserRelation relation = getRelationByIdUserIdAndTime(userid);
Integer parentId=0; Integer parentId = 0;
if (relation!=null){ if (relation != null) {
parentId=relation.getParentId(); parentId = relation.getParentId();
} }
userDTO.setParentId(parentId); userDTO.setParentId(parentId);
if (parentId!=null&&parentId>0){ if (parentId != null && parentId > 0) {
AppUserPositionTemp positionTemp= positionTempBiz.getOne(parentId); AppUserPositionTemp positionTemp = positionTempBiz.getOne(parentId);
if (positionTemp!=null){ if (positionTemp != null) {
userDTO.setParentPositionId(positionTemp.getPositionId()); userDTO.setParentPositionId(positionTemp.getPositionId());
userDTO.setParentPositionTempId(positionTemp.getId()); userDTO.setParentPositionTempId(positionTemp.getId());
userDTO.setParentCompanyId(positionTemp.getCompanyId()); userDTO.setParentCompanyId(positionTemp.getCompanyId());
......
...@@ -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);
} }
package com.github.wxiaoqi.security.admin.rpc.service; package com.github.wxiaoqi.security.admin.rpc.service;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.ace.cache.annotation.CacheClear;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.biz.*; import com.github.wxiaoqi.security.admin.biz.*;
import com.github.wxiaoqi.security.admin.constant.RedisKey; import com.github.wxiaoqi.security.admin.constant.RedisKey;
...@@ -252,9 +251,16 @@ public class AppPermissionService { ...@@ -252,9 +251,16 @@ public class AppPermissionService {
if (StringUtils.isBlank(username) || StringUtils.isBlank(password) || StringUtils.isBlank(mobilecode)) { if (StringUtils.isBlank(username) || StringUtils.isBlank(password) || StringUtils.isBlank(mobilecode)) {
return JsonResultUtil.createFailedResult(ResultCode.NULL_CODE, "参数为空"); return JsonResultUtil.createFailedResult(ResultCode.NULL_CODE, "参数为空");
} }
if(StringUtils.isNotBlank(code)&&appUserDetailBiz.getUserByCode(code)==0){ if (StringUtils.isNotBlank(code)){
//判断处理活动关键字
String[] codes = code.split("_");
if(codes.length > 1) {
String userCode = codes[0];
if(appUserDetailBiz.getUserByCode(userCode)==0) {
return JsonResultUtil.createFailedResult(ResultCode.NOTEXIST_CODE, "邀请人不存在"); return JsonResultUtil.createFailedResult(ResultCode.NOTEXIST_CODE, "邀请人不存在");
} }
}
}
String redisLockKey = RedisKey.CONSTANT_CODE_PREFIX + username + mobilecode; String redisLockKey = RedisKey.CONSTANT_CODE_PREFIX + username + mobilecode;
String mobilecodeRedis = userRedisTemplate.opsForValue().get(redisLockKey) == null ? "" : userRedisTemplate.opsForValue().get(redisLockKey).toString(); String mobilecodeRedis = userRedisTemplate.opsForValue().get(redisLockKey) == null ? "" : userRedisTemplate.opsForValue().get(redisLockKey).toString();
log.info("注册接口,获取redis中的验证码:" + mobilecodeRedis+"---time===="+System.currentTimeMillis()/1000L); log.info("注册接口,获取redis中的验证码:" + mobilecodeRedis+"---time===="+System.currentTimeMillis()/1000L);
......
...@@ -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(
......
package com.xxfc.platform.activity.bo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordTotalVo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:19
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordBo {
private Integer totalPage;
private Long totalCount;
private Integer pageNum;
private Integer pageSize;
private List<ActivityAttendanceRecordVo> activityAttendanceRecordVos;
private ActivityAttendanceRecordTotalVo activityAttendanceRecordTotalVo;
public Integer getTotalPage() {
return totalPage==null?0:totalPage;
}
public Long getTotalCount() {
return totalCount==null?0:totalCount;
}
public Integer getPageNum() {
return pageNum==null?1:pageNum;
}
public Integer getPageSize() {
return pageSize==null?0:pageSize;
}
public List<ActivityAttendanceRecordVo> getActivityAttendanceRecordVos() {
return CollectionUtils.isEmpty(activityAttendanceRecordVos)? Collections.EMPTY_LIST:activityAttendanceRecordVos;
}
public ActivityAttendanceRecordTotalVo getActivityAttendanceRecordTotalVo() {
return activityAttendanceRecordTotalVo==null?new ActivityAttendanceRecordTotalVo():activityAttendanceRecordTotalVo;
}
}
package com.xxfc.platform.activity.bo;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 8:40
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordBo implements Serializable {
private Integer totalPage;
private Long totalCount;
private Integer pageNum;
private Integer pageSize;
private List<ActivityWinningRecordVo> activityWinningRecords;
private ActivityWinningRecordTotalVo activityWinningRecordTotalVo;
public Integer getTotalPage() {
return totalPage==null?0:totalPage;
}
public Long getTotalCount() {
return totalCount==null?0:totalCount;
}
public Integer getPageNum() {
return pageNum==null?0:pageNum;
}
public Integer getPageSize() {
return pageSize==null?0:pageSize;
}
public List<ActivityWinningRecordVo> getActivityWinningRecords() {
return CollectionUtils.isEmpty(activityWinningRecords)? Collections.EMPTY_LIST:activityWinningRecords;
}
public ActivityWinningRecordTotalVo getActivityWinningRecordTotalVo() {
return activityWinningRecordTotalVo==null?new ActivityWinningRecordTotalVo():activityWinningRecordTotalVo;
}
}
package com.xxfc.platform.activity.bo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 9:45
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordTotalVo {
private Integer onLineNum;
private Integer onLineWineNum;
private Integer localeNum;
private Integer localeWineNum;
public Integer getOnLineNum() {
return onLineNum==null?0:onLineNum;
}
public Integer getOnLineWineNum() {
return onLineWineNum==null?0:onLineWineNum;
}
public Integer getLocaleNum() {
return localeNum==null?0:localeNum;
}
public Integer getLocaleWineNum() {
return localeWineNum==null?0:localeWineNum;
}
}
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;
}
}
package com.xxfc.platform.activity.constant;
/**
* @author libin
* @version 1.0
* @description 奖品类型
* @data 2019/12/4 18:24
*/
public enum PrizeTypeEnum {
ONLINE(1,"线上"),
LOCALE(2,"现场");
private int code;
private String desc;
PrizeTypeEnum(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;
}
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 16:48
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Integer userId;
private String userName;
private String phone;
private String positionName;
private Integer status;
private BigDecimal amount;
private Integer inviteNum;
private String prizes;
private Long attendTime;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:32
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordFindDTO extends PageParam {
private Integer activityId;
private Long startTime;
private Long endTime;
private String phone;
private Integer status;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 18:56
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityLuckDrawFindDTO extends PageParam {
private Date startTime;
private Date endTime;
private String phone;
private Integer activityId;
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:21
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordDTO {
private Integer userId;
private Integer activityId;
private String activityName;
private String prizeName;
private String iconPath;
private Integer prizeType;
private Integer hasWinning;
private String expiryDateCode;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 8:36
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordFindDTO extends PageParam {
private Integer activityId;
private Date startTime;
private Date endTime;
private String phone;
private Integer hasWinning;
private Integer prizeType;
private Integer state;
}
package com.xxfc.platform.activity.dto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:08
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordPageDTO {
private Integer userId;
private String userName;
private String phone;
private String positionName;
private Integer prizeType;
private String prizeName;
private String iconPath;
private Integer hasWinning;
private String expiryDateCode;
private Date crtTime;
private Date lotteryTime;
}
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.Data;
@Data
public class QueryLogDto extends PageParam {
Integer popularizeId;
Integer userId;
}
\ No newline at end of file
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:34
*/
@Data
@Table(name = "activity_attendance_record")
public class ActivityAttendanceRecord {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "user_name")
private String userName;
@Column(name = "phone")
private String phone;
@Column(name = "activity_id")
private Integer activityId;
@Column(name = "activity_name")
private String activityName;
@Column(name = "position_id")
private Integer positionId;
@Column(name = "position_name")
private String positionName;
@ApiModelProperty("线上抽奖次数")
@Column(name = "online_lottery_num")
private Integer onlineLotteryNum;
@ApiModelProperty("现场抽奖次数")
@Column(name = "locale_lottery_num")
private Integer localeLotteryNum;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.activity.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 报名
* @data 2019/12/3 15:06
*/
@Data
@Table(name = "activity_lucky_draw")
public class ActivityLuckyDraw implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator= "JDBC")
private Long id;
@Column(name = "user_name")
private String userName;
@Column(name = "phone")
private String phone;
private Integer activityId;
@Column(name = "activity_name")
private String activityName;
@Column(name = "ticket_num")
private Integer ticketNum;
@Column(name = "user_id")
private Integer userId;
@Column(name = "crt_time")
private Date crtTime;
}
package com.xxfc.platform.activity.entity; package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* 用户参与推广活动(邀请有礼)的活动记录的记录(日志) * 用户参与推广活动(邀请有礼)的活动记录的记录(日志)
...@@ -84,4 +85,27 @@ public class ActivityPopularizeLog implements Serializable { ...@@ -84,4 +85,27 @@ public class ActivityPopularizeLog implements Serializable {
@ApiModelProperty(value = "状态 0--未完成;1--完成;-1--失败") @ApiModelProperty(value = "状态 0--未完成;1--完成;-1--失败")
private Integer status; private Integer status;
/**
* 昵称
*/
@Transient
private String nickname;
/**
* 头像
*/
@Transient
private String headimgurl;
/**
* 邀请的第几个用户
*/
@Transient
private Integer num;
/**
* 邀请的第几个用户的奖金
*/
@Transient
private BigDecimal amount;
} }
package com.xxfc.platform.activity.entity; package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* 活动的参与者关系表 * 活动的参与者关系表
...@@ -62,5 +66,11 @@ public class ActivityPopularizeRelation implements Serializable { ...@@ -62,5 +66,11 @@ public class ActivityPopularizeRelation implements Serializable {
@ApiModelProperty(value = "活动id") @ApiModelProperty(value = "活动id")
private Integer popularizeId; private Integer popularizeId;
@Column(name = "num")
@ApiModelProperty(value = "第几个用户")
private Integer num;
@Column(name = "amount")
@ApiModelProperty(value = "获得奖励金额")
private BigDecimal amount;
} }
package com.xxfc.platform.activity.entity; package com.xxfc.platform.activity.entity;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
/** /**
* 用户与推广活动(邀请有礼)的关系表 * 用户与推广活动(邀请有礼)的关系表
...@@ -60,14 +64,14 @@ public class ActivityPopularizeUser implements Serializable { ...@@ -60,14 +64,14 @@ public class ActivityPopularizeUser implements Serializable {
*/ */
@Column(name = "end_progress") @Column(name = "end_progress")
@ApiModelProperty(value = "一共需要的进度") @ApiModelProperty(value = "一共需要的进度")
private Integer endProgress; private BigDecimal endProgress;
/** /**
* 当前进度 * 当前进度
*/ */
@Column(name = "current_progress") @Column(name = "current_progress")
@ApiModelProperty(value = "当前进度") @ApiModelProperty(value = "当前进度")
private Integer currentProgress; private BigDecimal currentProgress;
/** /**
* 推广活动id * 推广活动id
......
...@@ -8,6 +8,7 @@ import tk.mybatis.mapper.code.IdentityDialect; ...@@ -8,6 +8,7 @@ import tk.mybatis.mapper.code.IdentityDialect;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient;
import java.math.BigInteger; import java.math.BigInteger;
@Data @Data
...@@ -61,4 +62,7 @@ public class ActivityPopup { ...@@ -61,4 +62,7 @@ public class ActivityPopup {
@Column(name = "time_type") @Column(name = "time_type")
private Integer timeType; private Integer timeType;
@Column(name = "activity_id")
private Integer activityId;
} }
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 奖品、设置
* @data 2019/12/3 15:21
*/
@Data
@Table(name = "activity_prize")
@ApiModel
public class ActivityPrize implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
@NotNull(message = "编号不能为null")
@ApiModelProperty("编号")
@Column(name = "serial_number")
private Integer serialNumber;
@NotEmpty(message = "奖品名称不能为空")
@Column(name = "name")
private String name;
@NotEmpty(message = "奖品地址不能为空")
@ApiModelProperty("奖品图片地址")
@Column(name = "icon_path")
private String iconPath;
@ApiModelProperty("每天最多中奖份数")
@Column(name = "day_max_use")
private Integer dayMaxUse;
@Column(name = "total_stock")
private Integer totalStock;
@NotNull(message = "权重|概率不能为null")
@Column(name = "probability")
private Double probability;
@NotNull(message = "奖品设置类型不能null")
@ApiModelProperty("1:线上 2:现场")
@Column(name = "type")
private Integer type;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "upd_time")
private Date updTime;
@Column(name = "goods_id")
private Integer goodsId;
@NotNull(message = "奖品类型不能为null")
@Column(name = "prize_goods_type")
private Integer prizeGoodsType;
}
package com.xxfc.platform.activity.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description 中奖记录
* @data 2019/12/3 16:14
*/
@Data
@Table(name = "activity_winning_record")
public class ActivityWinningRecord implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
@Column(name = "user_id")
private Integer userId;
@Column(name = "activity_id")
private Integer activityId;
@ApiModelProperty("1:线上 2:现场")
@Column(name = "prize_type")
private Integer prizeType;
@Column(name = "prize_name")
private String prizeName;
@Column(name = "icon_path")
private String iconPath;
@ApiModelProperty("是否中奖 1:是 0:否")
@Column(name = "has_winning")
private Integer hasWinning;
@ApiModelProperty("兑奖码")
@Column(name = "expiry_date_code")
private String expiryDateCode;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "lottery_time")
private Date lotteryTime;
@Column(name = "goods_id")
private Integer goodsId;
}
package com.xxfc.platform.activity.entity;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Table(name = "ticket_collection_record")
@Data
public class TicketCollectionRecord {
@Id
private Integer id;
/**
* 领取人姓名
*/
private String name;
/**
* 领取人手机号
*/
private String phone;
@Column(name = "crt_time")
private Date crtTime;
@Column(name = "upd_time")
private Date updTime;
/**
* 门票类型
*/
private Integer type;
}
\ No newline at end of file
package com.xxfc.platform.activity.util;
import com.xxfc.platform.activity.entity.ActivityPrize;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 20:01
*/
public class LotteryUtils {
public static int getrandomIndex(List<ActivityPrize> prizes) {
int random = -1;
try {
//计算总权重
double sumWeight = 0;
for (ActivityPrize p : prizes) {
sumWeight += p.getProbability();
}
//产生随机数
double randomNumber;
randomNumber = Math.random();
//根据随机数在所有奖品分布的区域并确定所抽奖品
double d1 = 0;
double d2 = 0;
for (int i = 0; i < prizes.size(); i++) {
d2 += Double.parseDouble(String.valueOf(prizes.get(i).getProbability())) / sumWeight;
if (i == 0) {
d1 = 0;
} else {
d1 += Double.parseDouble(String.valueOf(prizes.get(i - 1).getProbability())) / sumWeight;
}
if (randomNumber >= d1 && randomNumber <= d2) {
random = i;
break;
}
}
} catch (Exception e) {
System.out.println("生成抽奖随机数出错,出错原因:" + e.getMessage());
}
return random;
}
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:21
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordTotalVo {
private Integer attendNum;
private Integer finishNum;
private BigDecimal amount;
public Integer getAttendNum() {
return attendNum==null?0:attendNum;
}
public Integer getFinishNum() {
return finishNum==null?0:finishNum;
}
public BigDecimal getAmount() {
return amount==null?BigDecimal.ZERO:amount;
}
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 15:20
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityAttendanceRecordVo implements Serializable {
private static final long serialVersionUID = 1L;
private String userName;
private String phone;
private String positionName;
private Integer status;
private BigDecimal amount;
private Integer inviteNum;
private String prizes;
private Long attendTime;
}
package com.xxfc.platform.activity.vo;
import com.xxfc.platform.activity.entity.ActivityPrize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import java.util.Collections;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 17:27
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityPrizeVo {
private List<ActivityPrize> onlinePrize;
private List<ActivityPrize> localePrize;
public List<ActivityPrize> getOnlinePrize() {
return CollectionUtils.isEmpty(onlinePrize)? Collections.EMPTY_LIST:onlinePrize;
}
public List<ActivityPrize> getLocalePrize() {
return CollectionUtils.isEmpty(localePrize)? Collections.EMPTY_LIST:localePrize;
}
}
package com.xxfc.platform.activity.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 9:47
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ActivityWinningRecordVo {
private String userName;
private String phone;
private String positionName;
@ApiModelProperty("1:线上 2:现场")
private Integer prizeType;
private String prizeName;
private String iconPath;
@ApiModelProperty("是否中奖 1:是 0:否")
private Integer hasWinning;
@ApiModelProperty("兑奖码")
private String expiryDateCode;
private Date lotteryTime;
}
package com.xxfc.platform.activity.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class LotteryVo {
private String prizeName;
private Integer serialNumber;
private String expiryDateCode;
private String message;
}
package com.xxfc.platform.activity.vo.popularize; package com.xxfc.platform.activity.vo.popularize;
import com.xxfc.platform.activity.entity.ActivityPopularize; import com.xxfc.platform.activity.entity.ActivityPopularize;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem; import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
...@@ -10,4 +10,5 @@ import java.util.List; ...@@ -10,4 +10,5 @@ import java.util.List;
public class PopularizeVO extends ActivityPopularize { public class PopularizeVO extends ActivityPopularize {
List<ItemVO> items; List<ItemVO> items;
List<UserVO> userVOs; List<UserVO> userVOs;
ActivityPopularizeUser activityPopularizeUser;
} }
...@@ -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
......
package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.bo.ActivityAttendanceRecordBo;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import com.xxfc.platform.activity.mapper.ActivityAttendanceRecordMapper;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordTotalVo;
import com.xxfc.platform.activity.vo.ActivityAttendanceRecordVo;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.assertj.core.util.Lists;
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.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;
import java.util.stream.Stream;
/**
* 参与活动数据
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-04 14:54:06
*/
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
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) {
ActivityAttendanceRecord record = new ActivityAttendanceRecord();
record.setActivityId(activityId);
record.setUserId(appUserDTO.getUserid());
int num = mapper.selectCount(record);
if (num==0) {
ActivityAttendanceRecord activityAttendanceRecord = new ActivityAttendanceRecord();
activityAttendanceRecord.setActivityId(activityId);
activityAttendanceRecord.setActivityName(activityName);
activityAttendanceRecord.setUserId(appUserDTO.getUserid());
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);
}
}
public ActivityAttendanceRecordBo listActivityAttendanceRecord(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO){
ActivityAttendanceRecordBo activityAttendanceRecordBo = new ActivityAttendanceRecordBo();
PageDataVO<ActivityAttendanceRecordDTO> dataVO = PageDataVO.pageInfo(activityAttendanceRecordFindDTO.getPage(), activityAttendanceRecordFindDTO.getLimit(),
() -> mapper.selectActivityAttendanceRecord(activityAttendanceRecordFindDTO));
List<ActivityAttendanceRecordDTO> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)){
return activityAttendanceRecordBo;
}
ActivityAttendanceRecordTotalVo activityAttendanceRecordTotal = getActivityAttendanceRecordTotal(activityAttendanceRecordFindDTO);
List<ActivityAttendanceRecordVo> activityAttendanceRecordVos = new ArrayList<>(data.size());
ActivityAttendanceRecordVo activityAttendanceRecordVo = null;
for (ActivityAttendanceRecordDTO attendanceRecordDTO : data) {
activityAttendanceRecordVo = new ActivityAttendanceRecordVo();
BeanUtils.copyProperties(attendanceRecordDTO,activityAttendanceRecordVo);
activityAttendanceRecordVos.add(activityAttendanceRecordVo);
}
activityAttendanceRecordBo.setPageNum(dataVO.getPageNum());
activityAttendanceRecordBo.setPageSize(dataVO.getPageSize());
activityAttendanceRecordBo.setTotalPage(dataVO.getTotalPage());
activityAttendanceRecordBo.setTotalCount(dataVO.getTotalCount());
activityAttendanceRecordBo.setActivityAttendanceRecordVos(activityAttendanceRecordVos);
activityAttendanceRecordBo.setActivityAttendanceRecordTotalVo(activityAttendanceRecordTotal);
return activityAttendanceRecordBo;
}
private ActivityAttendanceRecordTotalVo getActivityAttendanceRecordTotal(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO){
ActivityAttendanceRecordTotalVo activityAttendanceRecordTotalVo = new ActivityAttendanceRecordTotalVo();
List<ActivityAttendanceRecordDTO> activityAttendanceRecordDTOS = mapper.selectActivityAttendanceRecord(activityAttendanceRecordFindDTO);
if (CollectionUtils.isEmpty(activityAttendanceRecordDTOS)){
return activityAttendanceRecordTotalVo;
}
activityAttendanceRecordTotalVo.setAttendNum(activityAttendanceRecordDTOS.size());
Supplier<Stream<ActivityAttendanceRecordDTO>> activityAttendanceRecordDTOStream = ()->activityAttendanceRecordDTOS.stream().filter(x->x.getStatus() == 1);
activityAttendanceRecordTotalVo.setFinishNum(Long.valueOf(activityAttendanceRecordDTOStream.get().count()).intValue());
activityAttendanceRecordTotalVo.setAmount(activityAttendanceRecordDTOStream.get().map(ActivityAttendanceRecordDTO::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
return activityAttendanceRecordTotalVo;
}
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.setActivityId(activityId);
activityAttendanceRecord.setUserId(userid);
activityAttendanceRecord = mapper.selectOne(activityAttendanceRecord);
if (Objects.isNull(activityAttendanceRecord)){
return false;
}
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;
}
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 false;
}
public void exportActivityAttendanceRecordData(ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO, ServletOutputStream outputStream) throws IOException {
ExcelUtils excelUtils = new ExcelUtils("中奖列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
List<ActivityAttendanceRecordDTO> activityAttendanceRecordDTOS = mapper.selectActivityAttendanceRecord(activityAttendanceRecordFindDTO);
ActivityAttendanceRecordTotalVo activityAttendanceRecordTotalVo = getActivityAttendanceRecordTotal(activityAttendanceRecordFindDTO);
String[] header1 = {"参与人数","完成人数","已发放现金总额(元)"};
Row headerRow1 = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
excelUtils.createHeader(headerRow1,0,header1,headerCellStyle);
String[] headerValue = {activityAttendanceRecordTotalVo.getAttendNum().toString(),
activityAttendanceRecordTotalVo.getFinishNum().toString(),
activityAttendanceRecordTotalVo.getAmount().toString()};
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
ArrayList<String[]> headerData = Lists.newArrayList();
headerData.add(headerValue);
excelUtils.createCellData(sheet,1,generalCellStyle,headerData);
CellRangeAddress cellRangeAddress = new CellRangeAddress(2, 2, 0, 7);
sheet.addMergedRegion(cellRangeAddress);
String[] header2 = {"用户名","电话","身份","状态","当前金额(元)","邀请人数","抽奖礼品","参与时间"};
Row header2Row = sheet.createRow(3);
excelUtils.createHeader(header2Row,0,header2,headerCellStyle);
List<String[]> activityAttendanceRecordList = getActivityAttendanceRecordDataList(activityAttendanceRecordDTOS);
excelUtils.createCellData(sheet,4,generalCellStyle,activityAttendanceRecordList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
public List<String[]> getActivityAttendanceRecordDataList(List<ActivityAttendanceRecordDTO> activityAttendanceRecordDTOS){
List<String[]> activityAttendanceRecordDataList = new ArrayList<>(activityAttendanceRecordDTOS.size());
for (ActivityAttendanceRecordDTO activityAttendanceRecordDTO : activityAttendanceRecordDTOS) {
String[] activityAttendanceRecordData = getActivityAttendanceRecordData(activityAttendanceRecordDTO);
activityAttendanceRecordDataList.add(activityAttendanceRecordData);
}
return activityAttendanceRecordDataList;
}
public String[] getActivityAttendanceRecordData(ActivityAttendanceRecordDTO activityAttendanceRecordDTO){
String state= activityAttendanceRecordDTO.getStatus() == 1?"已完成":activityAttendanceRecordDTO.getStatus()==0?"进行中":"失败";
String timeStr = DateUtil.format(new Date(activityAttendanceRecordDTO.getAttendTime()),"yyyy-MM-dd HH:mm:ss");
return new String[]{activityAttendanceRecordDTO.getUserName(),
activityAttendanceRecordDTO.getPhone(),
activityAttendanceRecordDTO.getPositionName(),
state,
activityAttendanceRecordDTO.getAmount()==null?BigDecimal.ZERO.toString():activityAttendanceRecordDTO.getAmount().toString(),
activityAttendanceRecordDTO.getInviteNum()==null?"0":activityAttendanceRecordDTO.getInviteNum().toString(),
activityAttendanceRecordDTO.getPrizes(),
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.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* 活动抽奖报名表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class ActivityLuckyDrawBiz extends BaseBiz<ActivityLuckyDrawMapper, ActivityLuckyDraw> {
/**
* 报名
*
* @param activityLuckyDraw
*/
public void signUp(ActivityLuckyDraw activityLuckyDraw) {
activityLuckyDraw.setCrtTime(new Date());
mapper.insertSelective(activityLuckyDraw);
}
/**
* 分页查询报名列表
*
* @param activityLuckDrawFindDTO
* @return
*/
public PageDataVO<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> dataVO = PageDataVO.pageInfo(activityLuckDrawFindDTO.getPage(), activityLuckDrawFindDTO.getLimit(), () -> mapper.listLuckDrawWithPage(activityLuckDrawFindDTO));
List<ActivityLuckyDraw> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = new PageDataVO<>();
activityLuckyDrawPageDataVO.setPageNum(activityLuckDrawFindDTO.getPage());
activityLuckyDrawPageDataVO.setPageSize(activityLuckDrawFindDTO.getLimit());
return activityLuckyDrawPageDataVO;
}
return dataVO;
}
public void exportActivityLuckDrawData(ActivityLuckDrawFindDTO activityLuckDrawFindDTO, ServletOutputStream outputStream) throws IOException {
List<ActivityLuckyDraw> activityLuckyDraws = listActivityLuckDraw(activityLuckDrawFindDTO);
ExcelUtils excelUtils = new ExcelUtils("报名列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
Row headerRow = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
String[] headers = {"姓名","电话","人数","报名时间"};
excelUtils.createHeader(headerRow,0,headers,headerCellStyle);
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
List<String[]> activityLuckDrawDataList = getActivityLuckDrawDataList(activityLuckyDraws);
excelUtils.createCellData(sheet,1,generalCellStyle,activityLuckDrawDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getActivityLuckDrawDataList(List<ActivityLuckyDraw> activityLuckyDraws){
List<String[]> activityLuckDrawDataList = new ArrayList<>(activityLuckyDraws.size());
for (ActivityLuckyDraw activityLuckyDraw : activityLuckyDraws) {
String[] activityLuckDrawData = getActivityLuckDrawData(activityLuckyDraw);
activityLuckDrawDataList.add(activityLuckDrawData);
}
return activityLuckDrawDataList;
}
private String[] getActivityLuckDrawData(ActivityLuckyDraw activityLuckyDraw){
Date crtTime = activityLuckyDraw.getCrtTime();
String timeStr = DateUtil.format(crtTime, "yyyy-MM-dd HH:mm:ss");
return new String[]{activityLuckyDraw.getUserName(),activityLuckyDraw.getPhone(),activityLuckyDraw.getTicketNum()+"",timeStr};
}
public List<ActivityLuckyDraw> listActivityLuckDraw(ActivityLuckDrawFindDTO activityLuckDrawFindDTO){
List<ActivityLuckyDraw> activityLuckyDraws = mapper.listLuckDrawWithPage(activityLuckDrawFindDTO);
if (CollectionUtils.isEmpty(activityLuckyDraws)){
return Collections.EMPTY_LIST;
}
return activityLuckyDraws;
}
}
\ No newline at end of file
...@@ -3,28 +3,26 @@ package com.xxfc.platform.activity.biz; ...@@ -3,28 +3,26 @@ package com.xxfc.platform.activity.biz;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.dto.RegisterQueueDTO; import com.github.wxiaoqi.security.admin.dto.RegisterQueueDTO;
import com.github.wxiaoqi.security.admin.entity.MyWalletDetail; import com.github.wxiaoqi.security.admin.entity.MyWalletDetail;
import com.github.wxiaoqi.security.admin.feign.UserFeign; import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO; import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant; import com.github.wxiaoqi.security.common.config.rabbit.RabbitConstant;
import com.xxfc.platform.activity.dto.ApLogDTO; import com.xxfc.platform.activity.dto.ApLogDTO;
import com.xxfc.platform.activity.dto.AwardDTO; import com.xxfc.platform.activity.entity.*;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog; import com.xxfc.platform.activity.mapper.ActivityPopularizeMapper;
import com.xxfc.platform.activity.entity.ActivityPopularizeRelation;
import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import com.xxfc.platform.universal.feign.MQSenderFeign; import com.xxfc.platform.universal.feign.MQSenderFeign;
import com.xxfc.platform.universal.feign.ThirdFeign;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularize;
import com.xxfc.platform.activity.mapper.ActivityPopularizeMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import java.util.List;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
...@@ -38,7 +36,7 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TR ...@@ -38,7 +36,7 @@ import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TR
*/ */
@Service @Service
@Slf4j @Slf4j
public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,ActivityPopularize> { public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper, ActivityPopularize> {
@Autowired @Autowired
ActivityPopularizeRelationBiz relationBiz; ActivityPopularizeRelationBiz relationBiz;
...@@ -52,6 +50,9 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti ...@@ -52,6 +50,9 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti
@Autowired @Autowired
ActivityPopularizeLogBiz popularizeLogBiz; ActivityPopularizeLogBiz popularizeLogBiz;
@Autowired
ActivityPopularizeItemBiz activityPopularizeItemBiz;
@Autowired @Autowired
UserFeign userFeign; UserFeign userFeign;
...@@ -65,46 +66,70 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti ...@@ -65,46 +66,70 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti
public static final Integer INVITE_ITEMID = 3; public static final Integer INVITE_ITEMID = 3;
public void handleRegister(RegisterQueueDTO registerQueueDTO) { public void handleRegister(RegisterQueueDTO registerQueueDTO) {
log.info("活动码注册成功:registerQueueDTO = {}", registerQueueDTO.toString());
String activityCode = registerQueueDTO.getInParamDTO().getActivityCode().replace(PREFIX, ""); if (StringUtils.isNotBlank(registerQueueDTO.getInParamDTO().getActivityCode())) {
String activityCode = registerQueueDTO.getInParamDTO().getActivityCode().replace(PREFIX, "").replace("p", "");
AppUserDTO appUserDTO = userFeign.userDetailById(registerQueueDTO.getAppUserId()).getData(); AppUserDTO appUserDTO = userFeign.userDetailById(registerQueueDTO.getAppUserId()).getData();
//获取活动code,并且注册来源是app 并且 非普通登录 //获取活动code,并且注册来源是app 并且 非普通登录
if(POPULARIZE_0101.equals(activityCode) if (!RegisterQueueDTO.SIGN_LOGIN.equals(registerQueueDTO.getSign()) && StringUtils.isNotBlank(activityCode)) {
&& !RegisterQueueDTO.SIGN_LOGIN.equals(registerQueueDTO.getSign())) {
//查询出活动 //查询出活动
ActivityPopularize activityPopularize = popularizeBiz.selectOne(new ActivityPopularize(){{ ActivityPopularize activityPopularize = popularizeBiz.selectOne(new ActivityPopularize() {{
setCode(activityCode); setCode(activityCode);
}}); }});
log.info("活动邀请注册:activityPopularize = {}", activityPopularize.toString());
if (activityPopularize != null) {
List<ActivityPopularizeItem> activityPopularizeItems = activityPopularizeItemBiz.selectByPopularizeId(activityPopularize.getId());
ActivityPopularizeItem activityPopularizeItem = activityPopularizeItems.get(activityPopularizeItems.size() - 1);
Date now = DateUtil.date(); Date now = DateUtil.date();
Date start = DateUtil.date(activityPopularize.getStartTime()); Date start = DateUtil.date(activityPopularize.getStartTime());
Date end = DateUtil.date(activityPopularize.getEndTime()); Date end = DateUtil.date(activityPopularize.getEndTime());
//判断是否活动超时 //判断是否活动超时
if(now.before(start) || now.after(end)) { if (now.before(start) || now.after(end)) {
log.error("不在活动范围内 入参Json:"+ JSONUtil.toJsonStr(registerQueueDTO)); log.error("不在活动范围内 入参Json:" + JSONUtil.toJsonStr(registerQueueDTO));
return; return;
} }
Integer majorUserId = Integer.valueOf(appUserDTO.getInviterAccount()); Integer majorUserId = Integer.valueOf(appUserDTO.getInviterAccount());
ActivityPopularizeRelation activityPopularizeRelation = new ActivityPopularizeRelation() {{
setMajorUserId(majorUserId);
setPopularizeId(activityPopularize.getId());
}};
//新增第几个邀请人和邀请金额字段
Integer num = relationBiz.getByUserIdAndPopularizeId(activityPopularizeRelation);
double amount = 0;
JSONObject jsonObject = JSONObject.parseObject(activityPopularizeItem.getDetail());
if (jsonObject != null && StringUtils.isNotBlank(jsonObject.getString("detail"))) {
JSONArray jsonArray = JSONArray.parseArray(jsonObject.getString("detail"));
if (jsonArray != null) {
JSONObject jsonObject1 = jsonArray.getJSONObject(num - 1);
if (jsonObject1 != null) {
double amountString = jsonObject1.getDouble("amount");
amount = amount + amountString;
}
}
}
double a = amount;
//添加活动关系 //添加活动关系
relationBiz.insertSelective(new ActivityPopularizeRelation(){{ relationBiz.insertSelective(new ActivityPopularizeRelation() {{
setPopularizeId(activityPopularize.getId()); setPopularizeId(activityPopularize.getId());
setMajorUserId(majorUserId); setMajorUserId(majorUserId);
setMinorUserId(appUserDTO.getUserid()); setMinorUserId(appUserDTO.getUserid());
setNum(num);
setAmount(new BigDecimal(a));
}}); }});
ApLogDTO apLogDTO = popularizeLogBiz.selectOneApLogDTO(new ActivityPopularizeLog(){{ ApLogDTO apLogDTO = popularizeLogBiz.selectOneApLogDTO(new ActivityPopularizeLog() {{
setUserId(majorUserId); setUserId(majorUserId);
setItemId(INVITE_ITEMID); setItemId(activityPopularizeItem.getId());
}}); }});
//生成任务项 //生成任务项
if(null == apLogDTO){ if (null == apLogDTO) {
popularizeLogBiz.insertSelectiveRe(new ActivityPopularizeLog(){{ popularizeLogBiz.insertSelectiveRe(new ActivityPopularizeLog() {{
setItemId(INVITE_ITEMID); setItemId(activityPopularizeItem.getId());
setUserId(majorUserId); setUserId(majorUserId);
setStatus(SYS_FALSE); setStatus(SYS_FALSE);
setPopularizeId(activityPopularize.getId()); setPopularizeId(activityPopularize.getId());
...@@ -112,25 +137,31 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti ...@@ -112,25 +137,31 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti
} }
//查出majorUser参与活动信息 //查出majorUser参与活动信息
ActivityPopularizeUser activityPopularizeUser = popularizeUserBiz.selectOne(new ActivityPopularizeUser(){{ ActivityPopularizeUser activityPopularizeUser = popularizeUserBiz.selectOne(new ActivityPopularizeUser() {{
setUserId(majorUserId); setUserId(majorUserId);
setPopularizeId(activityPopularize.getId()); setPopularizeId(activityPopularize.getId());
}}); }});
double currentProgress = activityPopularizeUser.getCurrentProgress().doubleValue();
log.info("用户原活动进度:currentProgress = {}", currentProgress);
currentProgress += Double.parseDouble(a + "");
BigDecimal bigDecimal = new BigDecimal(currentProgress);
log.info("用户现活动进度:newCurrentProgress = {}", currentProgress);
//修改当前进度
activityPopularizeUser.setCurrentProgress(bigDecimal);
popularizeUserBiz.updateSelectiveById(activityPopularizeUser);
//任务没有完成 //任务没有完成
if(!SYS_TRUE.equals(activityPopularizeUser.getStatus())) { if (!SYS_TRUE.equals(activityPopularizeUser.getStatus())) {
// AwardDTO awardDTO = JSONUtil.toBean(activityPopularize.getValue(), AwardDTO.class); // AwardDTO awardDTO = JSONUtil.toBean(activityPopularize.getValue(), AwardDTO.class);
//检查是否满足奖励 //检查是否满足奖励
if(relationBiz.selectList(new ActivityPopularizeRelation(){{ if (relationBiz.selectList(new ActivityPopularizeRelation() {{
setMajorUserId(majorUserId); setMajorUserId(majorUserId);
setPopularizeId(activityPopularize.getId()); setPopularizeId(activityPopularize.getId());
}}).size() >= 2) { }}).size() >= 10) {
apLogDTO.setStatus(SYS_TRUE); apLogDTO.setStatus(SYS_TRUE);
popularizeLogBiz.updateSelectiveById(BeanUtil.toBean(apLogDTO, ActivityPopularizeLog.class)); popularizeLogBiz.updateSelectiveById(BeanUtil.toBean(apLogDTO, ActivityPopularizeLog.class));
activityPopularizeUser.setStatus(SYS_TRUE); activityPopularizeUser.setStatus(SYS_TRUE);
activityPopularizeUser.setCurrentProgress(apLogDTO.getItem().getProgress());
popularizeUserBiz.updateSelectiveById(activityPopularizeUser); popularizeUserBiz.updateSelectiveById(activityPopularizeUser);
mqSenderFeign.sendMessage(RabbitConstant.ADMIN_TOPIC, RabbitConstant.KEY_WALLET_ADD, JSONUtil.toJsonStr(new MyWalletDetail(){{ mqSenderFeign.sendMessage(RabbitConstant.ADMIN_TOPIC, RabbitConstant.KEY_WALLET_ADD, JSONUtil.toJsonStr(new MyWalletDetail() {{
setAmount(new BigDecimal("50")); setAmount(new BigDecimal("50"));
setSource(SOURCE_ACTIVITY); setSource(SOURCE_ACTIVITY);
setUserId(majorUserId); setUserId(majorUserId);
...@@ -143,4 +174,6 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti ...@@ -143,4 +174,6 @@ public class ActivityPopularizeBiz extends BaseBiz<ActivityPopularizeMapper,Acti
} }
} }
} }
}
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import org.springframework.stereotype.Service; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem; import com.xxfc.platform.activity.entity.ActivityPopularizeItem;
import com.xxfc.platform.activity.mapper.ActivityPopularizeItemMapper; import com.xxfc.platform.activity.mapper.ActivityPopularizeItemMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.List;
/** /**
* 推广活动项,一个活动对应多个项 * 推广活动项,一个活动对应多个项
...@@ -15,4 +17,12 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -15,4 +17,12 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
*/ */
@Service @Service
public class ActivityPopularizeItemBiz extends BaseBiz<ActivityPopularizeItemMapper,ActivityPopularizeItem> { public class ActivityPopularizeItemBiz extends BaseBiz<ActivityPopularizeItemMapper,ActivityPopularizeItem> {
public List<ActivityPopularizeItem> selectByPopularizeId(Integer popularizeId) {
Example example = new Example(ActivityPopularizeItem.class);
example.createCriteria().andEqualTo("popularizeId", popularizeId);
example.orderBy("sort").asc();
return mapper.selectByExample(example);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.dto.ApLogDTO; import com.xxfc.platform.activity.dto.ApLogDTO;
import com.xxfc.platform.activity.entity.ActivityPopularizeItem; import com.xxfc.platform.activity.dto.QueryLogDto;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog;
import com.xxfc.platform.activity.mapper.ActivityPopularizeLogMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog; import javax.servlet.http.HttpServletRequest;
import com.xxfc.platform.activity.mapper.ActivityPopularizeLogMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
/** /**
* 用户参与推广活动(邀请有礼)的活动记录的记录(日志) * 用户参与推广活动(邀请有礼)的活动记录的记录(日志)
...@@ -18,11 +26,18 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -18,11 +26,18 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
* @date 2019-07-05 15:23:04 * @date 2019-07-05 15:23:04
*/ */
@Service @Service
public class ActivityPopularizeLogBiz extends BaseBiz<ActivityPopularizeLogMapper,ActivityPopularizeLog> { @Slf4j
public class ActivityPopularizeLogBiz extends BaseBiz<ActivityPopularizeLogMapper,ActivityPopularizeLog>{
@Autowired @Autowired
ActivityPopularizeItemBiz activityPopularizeItemBiz; ActivityPopularizeItemBiz activityPopularizeItemBiz;
@Autowired
UserFeign userFeign;
@Autowired
HttpServletRequest request;
public ApLogDTO selectOneApLogDTO(ActivityPopularizeLog entity){ public ApLogDTO selectOneApLogDTO(ActivityPopularizeLog entity){
ActivityPopularizeLog apl = mapper.selectOne(entity); ActivityPopularizeLog apl = mapper.selectOne(entity);
if(null != apl) { if(null != apl) {
...@@ -33,4 +48,36 @@ public class ActivityPopularizeLogBiz extends BaseBiz<ActivityPopularizeLogMappe ...@@ -33,4 +48,36 @@ public class ActivityPopularizeLogBiz extends BaseBiz<ActivityPopularizeLogMappe
return null; return null;
} }
} }
public ActivityPopularizeLog selectByUserIdAndPopularIdAndItemId(ActivityPopularizeLog entity) {
Example example = new Example(ActivityPopularizeLog.class);
example.createCriteria().andEqualTo("userId", entity.getUserId()).andEqualTo("itemId", entity.getItemId()).andEqualTo("popularizeId", entity.getPopularizeId());
return mapper.selectOneByExample(example);
}
public PageDataVO<ApLogDTO> selectByUserId(QueryLogDto queryLogDto) {
String token = request.getHeader("Authorization");
AppUserDTO appUserDTO = null;
if (StringUtils.isNotBlank(token)) {
appUserDTO = userFeign.userDetailByToken(token).getData();
} else {
return new PageDataVO<>();
}
Integer page = queryLogDto.getPage() == null ? 1 : queryLogDto.getPage();
Integer limit = queryLogDto.getLimit() == null ? 5 : queryLogDto.getLimit();
queryLogDto.setUserId(appUserDTO.getUserid());
queryLogDto.setPage(page);
queryLogDto.setLimit(limit);
Query query = new Query(queryLogDto);
PageDataVO<ApLogDTO> pageDataVO = PageDataVO.pageInfo(query, () -> mapper.selectByUserId(query.getSuper()));
if (pageDataVO.getData() != null) {
pageDataVO.getData().parallelStream().forEach(result -> {
result.setItem(activityPopularizeItemBiz.selectById(result.getItemId()));
});
}
return pageDataVO;
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO; import com.xxfc.platform.activity.dto.ActivityPopularizeRelationDTO;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.ActivityPopularizeRelation; import com.xxfc.platform.activity.entity.ActivityPopularizeRelation;
import com.xxfc.platform.activity.mapper.ActivityPopularizeRelationMapper; import com.xxfc.platform.activity.mapper.ActivityPopularizeRelationMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -29,4 +28,9 @@ public class ActivityPopularizeRelationBiz extends BaseBiz<ActivityPopularizeRel ...@@ -29,4 +28,9 @@ public class ActivityPopularizeRelationBiz extends BaseBiz<ActivityPopularizeRel
} }
return activityPopularizeRelationDTOS; return activityPopularizeRelationDTOS;
} }
public Integer getByUserIdAndPopularizeId(ActivityPopularizeRelation activityPopularizeRelation) {
Integer num = mapper.getByUserIdAndPopularizeId(activityPopularizeRelation);
return num == null ? 1 : num + 1 ;
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException; import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode; import com.github.wxiaoqi.security.common.util.process.ResultCode;
import org.springframework.stereotype.Service; import com.google.common.collect.Maps;
import com.xxfc.platform.activity.entity.ActivityPopularizeUser; import com.xxfc.platform.activity.entity.ActivityPopularizeUser;
import com.xxfc.platform.activity.mapper.ActivityPopularizeUserMapper; import com.xxfc.platform.activity.mapper.ActivityPopularizeUserMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 用户与推广活动(邀请有礼)的关系表 * 用户与推广活动(邀请有礼)的关系表
...@@ -19,11 +20,11 @@ import java.util.List; ...@@ -19,11 +20,11 @@ import java.util.List;
* @date 2019-07-05 15:23:04 * @date 2019-07-05 15:23:04
*/ */
@Service @Service
public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMapper,ActivityPopularizeUser> { public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMapper, ActivityPopularizeUser> {
public ActivityPopularizeUser insertSelectiveReT(ActivityPopularizeUser entity) { public ActivityPopularizeUser insertSelectiveReT(ActivityPopularizeUser entity) {
if(insertSelectiveRe(entity) > 0) { if (insertSelectiveRe(entity) > 0) {
return selectById(entity.getId()); return selectById(entity.getId());
}else { } else {
throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE); throw new BaseException(ResultCode.DB_OPERATION_FAIL_CODE);
} }
} }
...@@ -31,7 +32,27 @@ public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMap ...@@ -31,7 +32,27 @@ public class ActivityPopularizeUserBiz extends BaseBiz<ActivityPopularizeUserMap
public void deleteByUserIds(List<Integer> userIds) { public void deleteByUserIds(List<Integer> userIds) {
Example example = new Example(ActivityPopularizeUser.class); Example example = new Example(ActivityPopularizeUser.class);
Example.Criteria criteria = example.createCriteria(); Example.Criteria criteria = example.createCriteria();
criteria.andIn("userId",userIds); criteria.andIn("userId", userIds);
mapper.deleteByExample(example); mapper.deleteByExample(example);
} }
public Map<Integer, Boolean> getByUserIdAndPopularizeId(Integer userId, List<Integer> popularizeIds) {
Map<Integer, Boolean> activityIds = Maps.newHashMap();
if (userId == null || popularizeIds == null) {
return activityIds;
}
popularizeIds.parallelStream().forEach(id -> {
Example example = new Example(ActivityPopularizeUser.class);
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("userId", userId);
criteria.andEqualTo("popularizeId", id);
ActivityPopularizeUser activityPopularizeUsers = mapper.selectOneByExample(example);
if (activityPopularizeUsers != null) {
activityIds.put(id, true);
} else {
activityIds.put(id, false);
}
});
return activityIds;
}
} }
\ No newline at end of file
...@@ -7,6 +7,7 @@ import com.xxfc.platform.activity.entity.ActivityPopup; ...@@ -7,6 +7,7 @@ import com.xxfc.platform.activity.entity.ActivityPopup;
import com.xxfc.platform.activity.entity.ActivityPopupUser; import com.xxfc.platform.activity.entity.ActivityPopupUser;
import com.xxfc.platform.activity.mapper.ActivityPopupMapper; import com.xxfc.platform.activity.mapper.ActivityPopupMapper;
import com.xxfc.platform.activity.mapper.ActivityPopupUserMapper; import com.xxfc.platform.activity.mapper.ActivityPopupUserMapper;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -16,10 +17,8 @@ import tk.mybatis.mapper.weekend.WeekendSqls; ...@@ -16,10 +17,8 @@ import tk.mybatis.mapper.weekend.WeekendSqls;
import javax.swing.plaf.synth.SynthEditorPaneUI; import javax.swing.plaf.synth.SynthEditorPaneUI;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.time.Instant;
import java.util.Arrays; import java.util.*;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -38,6 +37,9 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup ...@@ -38,6 +37,9 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup
@Autowired @Autowired
private ActivityPopupUserBiz activityPopupUserBiz; private ActivityPopupUserBiz activityPopupUserBiz;
@Autowired
private ActivityPopularizeUserBiz activityPopularizeUserBiz;
/** /**
* 获取活动弹窗,根据是否登录 * 获取活动弹窗,根据是否登录
* *
...@@ -50,7 +52,7 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup ...@@ -50,7 +52,7 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup
if (activityPopups == null || activityPopups.size() == 0) { if (activityPopups == null || activityPopups.size() == 0) {
return activityPopups; return activityPopups;
} }
List<Integer> collect = activityPopups.parallelStream().map(ActivityPopup::getId).collect(Collectors.toList()); /* List<Integer> collect = activityPopups.parallelStream().map(ActivityPopup::getId).collect(Collectors.toList());
Example exaple = Example.builder(ActivityPopupUser.class) Example exaple = Example.builder(ActivityPopupUser.class)
.where(WeekendSqls.<ActivityPopupUser>custom() .where(WeekendSqls.<ActivityPopupUser>custom()
.andEqualTo(ActivityPopupUser::getUserId, userInfo.getUserid()) .andEqualTo(ActivityPopupUser::getUserId, userInfo.getUserid())
...@@ -60,13 +62,22 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup ...@@ -60,13 +62,22 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup
if (activityPopupUsers == null || activityPopupUsers.size() == 0) { if (activityPopupUsers == null || activityPopupUsers.size() == 0) {
return activityPopups; return activityPopups;
} }
Set<Integer> popupIdSet = activityPopupUsers.parallelStream().map(ActivityPopupUser::getPopupId).collect(Collectors.toSet()); Set<Integer> popupIdSet = activityPopupUsers.parallelStream().map(ActivityPopupUser::getPopupId).collect(Collectors.toSet());*/
List<ActivityPopup> result = new ArrayList<>(); List<ActivityPopup> result = new ArrayList<>();
List<Integer> activityIds = activityPopups.stream().map(ActivityPopup::getActivityId).collect(Collectors.toList());
activityIds = CollectionUtils.isEmpty(activityIds)? Collections.EMPTY_LIST:activityIds;
Map<Integer, Boolean> activityPopularizeUserMap = activityPopularizeUserBiz.getByUserIdAndPopularizeId(userInfo.getUserid(), activityIds);
for (ActivityPopup activityPopup : activityPopups) { for (ActivityPopup activityPopup : activityPopups) {
if (popupIdSet.add(activityPopup.getId())) { /*if (popupIdSet.add(activityPopup.getId())) {*/
boolean flag = activityPopularizeUserMap.isEmpty() ||
activityPopularizeUserMap.get(activityPopup.getActivityId()) == null ||
activityPopularizeUserMap.get(activityPopup.getActivityId()).equals(Boolean.FALSE);
if (flag) {
result.add(activityPopup); result.add(activityPopup);
} }
// }
} }
return result; return result;
} else { } else {
...@@ -85,17 +96,16 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup ...@@ -85,17 +96,16 @@ public class ActivityPopupBiz extends BaseBiz<ActivityPopupMapper, ActivityPopup
private List<ActivityPopup> getActivityPopupByTypes(String Types) { private List<ActivityPopup> getActivityPopupByTypes(String Types) {
long timeMillis = System.currentTimeMillis(); long timeMillis = System.currentTimeMillis();
//获取有期限的弹窗timeType=1 //获取有期限的弹窗timeType=1
Example exa = Example.builder(ActivityPopup.class) Example exa = new Example(ActivityPopup.class);
.where( Example.Criteria criteria = exa.createCriteria();
WeekendSqls.<ActivityPopup>custom() exa.orderBy("sort").asc();
.andEqualTo(ActivityPopup::getTimeType, 1) criteria.andEqualTo("timeType",1);
.andGreaterThanOrEqualTo(ActivityPopup::getEndTime, BigInteger.valueOf(timeMillis)) criteria.andIn("type",Arrays.asList(Types.split(",")));
.andLessThanOrEqualTo(ActivityPopup::getStartTime, BigInteger.valueOf(timeMillis)) criteria.andEqualTo("status",1);
.andIn(ActivityPopup::getType, Arrays.asList(Types.split(","))) criteria.andEqualTo("isDel",0);
.andEqualTo(ActivityPopup::getStatus, 1) criteria.andLessThanOrEqualTo("startTime",BigInteger.valueOf(timeMillis));
.andEqualTo(ActivityPopup::getIsDel, 0) criteria.andGreaterThanOrEqualTo("endTime",BigInteger.valueOf(timeMillis));
).orderByAsc("sort").build();
List<ActivityPopup> activityPopups = mapper.selectByExample(exa); List<ActivityPopup> activityPopups = mapper.selectByExample(exa);
//获取永久的弹窗timeType=0 //获取永久的弹窗timeType=0
......
package com.xxfc.platform.activity.biz;
import com.ace.cache.annotation.Cache;
import com.ace.cache.annotation.CacheClear;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.ReferralCodeUtil;
import com.xxfc.platform.activity.config.RedissonLock;
import com.xxfc.platform.activity.constant.PrizeGoodsTypeEnum;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.dto.CouponDTO;
import com.xxfc.platform.activity.dto.UserCouponSendDTO;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import com.xxfc.platform.activity.mapper.ActivityPrizeMapper;
import com.xxfc.platform.activity.util.LotteryUtils;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import com.xxfc.platform.activity.vo.LotteryVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.redisson.api.RLock;
import org.springframework.aop.framework.AopContext;
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.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 奖品设置
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Slf4j
@Transactional(rollbackFor = Exception.class)
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeBiz extends BaseBiz<ActivityPrizeMapper, ActivityPrize> {
private final ActivityWinningRecordBiz activityWinningRecordBiz;
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
private final UserCouponBiz userCouponBiz;
private final CouponBiz couponBiz;
private final RedisTemplate<String, Object> redisTemplate;
@Resource(name = "redisTemplate")
private ValueOperations<String, Object> valueOperations;
private final RedissonLock redissonLock;
@Value("${lottery.expire.days:60}")
private int expirDays;
private static final String LOTTERY_PRE_KEY = "lottery:";
public static final String USER_LOTTERY_PRE_KEY = "user:lottery:";
/**
* 查询奖品
*
* @return
*/
public ActivityPrizeVo selectActivitys() {
ActivityPrizeVo activityPrizeVo = new ActivityPrizeVo();
List<ActivityPrize> activityPrizes = mapper.selectAll();
if (CollectionUtils.isEmpty(activityPrizes)) {
return activityPrizeVo;
}
Map<Integer, List<ActivityPrize>> activityPrizeMap = activityPrizes.stream().collect(Collectors.groupingBy(ActivityPrize::getType, Collectors.toList()));
activityPrizeVo.setOnlinePrize(activityPrizeMap.get(PrizeTypeEnum.ONLINE.getCode()));
activityPrizeVo.setLocalePrize(activityPrizeMap.get(PrizeTypeEnum.LOCALE.getCode()));
return activityPrizeVo;
}
/**
* 保存奖品设置
*
* @param activityPrizes
*/
@CacheClear(pre = LOTTERY_PRE_KEY)
public void saveActivityPrizes(List<ActivityPrize> activityPrizes) {
if (CollectionUtils.isEmpty(activityPrizes)) {
throw new BaseException("奖品不能为空");
}
List<Integer> ids = activityPrizes.stream().filter(x -> Objects.nonNull(x.getGoodsId())).map(ActivityPrize::getGoodsId).collect(Collectors.toList());
List<CouponDTO> coupons = new ArrayList<>();
if (CollectionUtils.isNotEmpty(ids)){
coupons = couponBiz.findCouponsByIds(ids);
}
Map<Integer, String> couponMap = coupons.stream().collect(Collectors.toMap(CouponDTO::getId, CouponDTO::getTitle));
Map<Boolean, List<ActivityPrize>> activityPrizeMap = activityPrizes.stream().collect(Collectors.partitioningBy(x -> Objects.nonNull(x.getId()), Collectors.toList()));
//保存
List<ActivityPrize> activityPrizesOfSave = activityPrizeMap.get(Boolean.FALSE);
if (CollectionUtils.isNotEmpty(activityPrizesOfSave)) {
activityPrizesOfSave.stream().peek(x -> {x.setCrtTime(new Date());
if (Objects.nonNull(x.getGoodsId())){
x.setName(couponMap==null?"":couponMap.get(x.getGoodsId()));
}
}).count();
mapper.insertList(activityPrizesOfSave);
}
//更新
List<ActivityPrize> activityPrizesOfUpdate = activityPrizeMap.get(Boolean.TRUE);
if (CollectionUtils.isNotEmpty(activityPrizesOfUpdate)) {
for (ActivityPrize activityPrize : activityPrizesOfUpdate) {
activityPrize.setUpdTime(new Date());
if (Objects.nonNull(activityPrize.getGoodsId())){
activityPrize.setName(couponMap==null?"":couponMap.get(activityPrize.getGoodsId()));
}
mapper.updateByPrimaryKey(activityPrize);
}
}
}
/**
* 根据奖品类型查询
*
* @param prizeType
* @return
*/
@Cache(key = LOTTERY_PRE_KEY + "{1}")
public List<ActivityPrize> findActivityPrizeByType(Integer prizeType) {
Example example = new Example(ActivityPrize.class);
example.orderBy("serialNumber").asc();
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("type", prizeType);
List<ActivityPrize> activityPrizes = mapper.selectByExample(example);
if (CollectionUtils.isEmpty(activityPrizes)) {
return Collections.EMPTY_LIST;
}
for (ActivityPrize activityPrize : activityPrizes) {
if (activityPrize.getTotalStock() != null) {
String prizeStockKey = String.format("%s%d:%d", LOTTERY_PRE_KEY, prizeType, activityPrize.getSerialNumber());
redisTemplate.delete(prizeStockKey);
valueOperations.set(prizeStockKey, Integer.valueOf(activityPrize.getTotalStock().toString()), expirDays, TimeUnit.DAYS);
}
}
return activityPrizes;
}
/**
* 抽奖
*
* @param activityId
* @param prizeType
* @param appUserDTO
* @return
*/
public LotteryVo activityLottery(Integer activityId, Integer prizeType, String lotteryDate, AppUserDTO appUserDTO) {
LotteryVo lotteryVo = new LotteryVo();
List<ActivityPrize> activityPrizes = ((ActivityPrizeBiz) AopContext.currentProxy()).findActivityPrizeByType(prizeType);
ActivityPrize notActivityPrize = activityPrizes.stream().filter(x -> x.getPrizeGoodsType() == 0).findFirst().orElseGet(() -> {
ActivityPrize activityPrize = new ActivityPrize();
activityPrize.setName("谢谢参与");
activityPrize.setPrizeGoodsType(PrizeGoodsTypeEnum.NO_PRIZE.getCode());
activityPrize.setType(prizeType);
activityPrize.setSerialNumber(8);
return activityPrize;
});
String lotteryNumKey = String.format("%s%d:%d:%d",USER_LOTTERY_PRE_KEY, appUserDTO.getUserid(), activityId, prizeType);
Object lotteryNum = valueOperations.get(lotteryNumKey);
boolean hasLotteryNum = lotteryNum == null ? activityAttendanceRecordBiz.hasNumberOfLuckyDrawByType(activityId, prizeType, appUserDTO.getUserid()) : ((Integer) lotteryNum) > 0;
if (hasLotteryNum) {
//抽奖
int index = LotteryUtils.getrandomIndex(activityPrizes);
//获取对应的奖品
ActivityPrize activityPrize = activityPrizes.get(index);
//判断是否设置最大奖品数(谢谢参与排除)
if (activityPrize.getDayMaxUse() != null && activityPrize.getPrizeGoodsType() != PrizeGoodsTypeEnum.NO_PRIZE.getCode()) {
String key = String.format("%s:%s%d:%s", lotteryDate, LOTTERY_PRE_KEY, activityId, activityPrize.getSerialNumber());
Long prizeDayUseStock = valueOperations.increment(key);
//第一次时设置每天奖品份数的过期时间为1天
if (prizeDayUseStock.intValue() == 1) {
redisTemplate.expire(key, 1, TimeUnit.DAYS);
}
//达到日上限
if (prizeDayUseStock.intValue() > activityPrize.getDayMaxUse()) {
activityPrize = notActivityPrize;
}
}
//根据商品key获取库存
String prizeStockKey = String.format("%s%d:%d", LOTTERY_PRE_KEY, prizeType, activityPrize.getSerialNumber());
Object prizeStock = valueOperations.get(prizeStockKey);
if (activityPrize.getPrizeGoodsType() != PrizeGoodsTypeEnum.NO_PRIZE.getCode() && activityPrize.getTotalStock() != null) {
//库存为0
if (prizeStock == null || (Integer) prizeStock == 0) {
activityPrize = notActivityPrize;
}
}
ActivityWinningRecord activityWinningRecord = new ActivityWinningRecord();
activityWinningRecord.setActivityId(activityId);
activityWinningRecord.setPrizeType(prizeType);
activityWinningRecord.setUserId(appUserDTO.getUserid());
activityWinningRecord.setHasWinning(0);
boolean hasStock = activityPrize.getPrizeGoodsType() != PrizeGoodsTypeEnum.NO_PRIZE.getCode()
&& activityPrize.getTotalStock() != null
&& activityPrize.getTotalStock()!=0
&& prizeStock != null
&& (Integer) prizeStock != 0;
if (hasStock) {
String lockKey = String.format("%s%d:%d:%d", LOTTERY_PRE_KEY, activityId, prizeType, activityPrize.getSerialNumber());
RLock rLock = redissonLock.getRLock(lockKey);
try {
boolean isSuccess = rLock.tryLock(1, 2, TimeUnit.SECONDS);
if (isSuccess) {
prizeStock = valueOperations.get(prizeStockKey);
log.info("tryLock success, key = [{}]", lockKey);
try {
if (prizeStock != null && (Integer) prizeStock > 0) {
//更新库存
((ActivityPrizeBiz) AopContext.currentProxy()).updatePrizeStock(prizeType, activityPrize.getSerialNumber());
//更新缓存库存
valueOperations.decrement(prizeStockKey);
//设置为已中奖
activityWinningRecord.setHasWinning(1);
activityWinningRecord.setIconPath(activityPrize.getIconPath());
activityWinningRecord.setLotteryTime(new Date());
} else {
activityPrize = notActivityPrize;
}
} catch (Exception ex) {
log.error("抽奖失败:【{}】", ex);
rLock.unlock();
} finally {
rLock.unlock();
log.info("releaseLock success, key = [{}]", lockKey);
}
} else {
// 获取锁失败
log.info("tryLock fail, key = [{}]", lockKey);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
if (PrizeTypeEnum.LOCALE.getCode() == prizeType) {
//兑奖码生成
String expireDateCodeKey = String.format("%s:%s%d",lotteryDate.substring(0,4),LOTTERY_PRE_KEY, activityId);
Long expireDateCodeCounter = valueOperations.increment(expireDateCodeKey);
if (expireDateCodeCounter == 1) {
redisTemplate.expire(expireDateCodeKey, expirDays, TimeUnit.DAYS);
}
String expiryDateCode = ReferralCodeUtil.encode(expireDateCodeCounter.intValue());
activityWinningRecord.setExpiryDateCode(expiryDateCode);
lotteryVo.setExpiryDateCode(expiryDateCode);
}
//发放优惠券
if (activityPrize.getPrizeGoodsType() == PrizeGoodsTypeEnum.COUPON.getCode()) {
UserCouponSendDTO userCouponSendDTO = new UserCouponSendDTO();
userCouponSendDTO.setCouponId(activityPrize.getGoodsId());
userCouponSendDTO.setCouponNum(1);
userCouponSendDTO.setPhone(appUserDTO.getUsername());
userCouponBiz.sendCoupon(userCouponSendDTO);
activityWinningRecord.setGoodsId(activityPrize.getGoodsId());
}
}
activityWinningRecord.setPrizeName(activityPrize.getName());
activityWinningRecordBiz.saveRecord(activityWinningRecord);
lotteryVo.setSerialNumber(activityPrize.getSerialNumber());
//更改对应抽奖类型的抽奖次数
activityAttendanceRecordBiz.updateLotteryNumByActivityIdAndUserIdAndPrizeType(activityId, appUserDTO.getUserid(), prizeType);
valueOperations.decrement(lotteryNumKey);
} else {
lotteryVo.setMessage("抽奖次数已用完!!!");
}
return lotteryVo;
}
/**
* 更新库存
*
* @param prizeType
* @param serialNumber
*/
@Async
public void updatePrizeStock(Integer prizeType, Integer serialNumber) {
mapper.updatePrizeStock(prizeType, serialNumber);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import cn.hutool.core.date.DateUtil;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.util.excel.ExcelUtils;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.google.common.collect.Lists;
import com.xxfc.platform.activity.bo.ActivityWinningRecordBo;
import com.xxfc.platform.activity.bo.ActivityWinningRecordTotalVo;
import com.xxfc.platform.activity.constant.PrizeTypeEnum;
import com.xxfc.platform.activity.dto.ActivityWinningRecordDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import com.xxfc.platform.activity.mapper.ActivityWinningRecordMapper;
import com.xxfc.platform.activity.vo.ActivityWinningRecordVo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 中奖记录
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
@Transactional(rollbackFor = Exception.class)
@Service
public class ActivityWinningRecordBiz extends BaseBiz<ActivityWinningRecordMapper, ActivityWinningRecord> {
/**
* 保存
*
* @param activityWinningRecord
*/
public void saveRecord(ActivityWinningRecord activityWinningRecord) {
activityWinningRecord.setCrtTime(new Date());
mapper.insertSelective(activityWinningRecord);
}
public ActivityWinningRecordBo listActivityWinningRecordWithPage(ActivityWinningRecordFindDTO activityWinningRecordFindDTO) {
ActivityWinningRecordBo activityWinningRecordBo = new ActivityWinningRecordBo();
PageDataVO<ActivityWinningRecordPageDTO> dataVO = PageDataVO.pageInfo(activityWinningRecordFindDTO.getPage(), activityWinningRecordFindDTO.getLimit(),
() -> mapper.selectActivityWinningRecord(activityWinningRecordFindDTO));
ActivityWinningRecordTotalVo activityWinningRecordTotalVo = getActivityWinningRecordTotal(activityWinningRecordFindDTO);
List<ActivityWinningRecordPageDTO> data = dataVO.getData();
if (CollectionUtils.isEmpty(data)){
activityWinningRecordBo.setActivityWinningRecordTotalVo(activityWinningRecordTotalVo);
return activityWinningRecordBo;
}
List<ActivityWinningRecordVo> activityWinningRecordVos = new ArrayList<>();
ActivityWinningRecordVo activityWinningRecordVo = null;
for (ActivityWinningRecordPageDTO activityWinningRecord : data) {
activityWinningRecordVo = new ActivityWinningRecordVo();
BeanUtils.copyProperties(activityWinningRecord,activityWinningRecordVo);
activityWinningRecordVos.add(activityWinningRecordVo);
}
activityWinningRecordBo.setPageNum(dataVO.getPageNum());
activityWinningRecordBo.setPageSize(dataVO.getPageSize());
activityWinningRecordBo.setTotalPage(dataVO.getTotalPage());
activityWinningRecordBo.setTotalCount(dataVO.getTotalCount());
activityWinningRecordBo.setActivityWinningRecordTotalVo(activityWinningRecordTotalVo);
activityWinningRecordBo.setActivityWinningRecords(activityWinningRecordVos);
return activityWinningRecordBo;
}
private ActivityWinningRecordTotalVo getActivityWinningRecordTotal(ActivityWinningRecordFindDTO activityWinningRecordFindDTO){
activityWinningRecordFindDTO.setHasWinning(null);
ActivityWinningRecordTotalVo activityWinningRecordTotalVo = new ActivityWinningRecordTotalVo();
List<ActivityWinningRecordPageDTO> activityWinningRecords = mapper.selectActivityWinningRecord(activityWinningRecordFindDTO);
if (CollectionUtils.isEmpty(activityWinningRecords)){
return activityWinningRecordTotalVo;
}
AtomicInteger onlineCounter = new AtomicInteger(0);
AtomicInteger onlineWinCounter= new AtomicInteger(0);
AtomicInteger localeCounter = new AtomicInteger(0);
AtomicInteger localeWineCounter = new AtomicInteger(0);
for (ActivityWinningRecordPageDTO activityWinningRecord : activityWinningRecords) {
if (activityWinningRecord.getPrizeType()==1){
onlineCounter.incrementAndGet();
if (activityWinningRecord.getHasWinning()==1){
onlineWinCounter.incrementAndGet();
}
}
if (activityWinningRecord.getPrizeType()==2){
localeCounter.incrementAndGet();
if (activityWinningRecord.getHasWinning()==1){
localeWineCounter.incrementAndGet();
}
}
}
activityWinningRecordTotalVo.setOnLineNum(onlineCounter.get());
activityWinningRecordTotalVo.setOnLineWineNum(onlineWinCounter.get());
activityWinningRecordTotalVo.setLocaleNum(localeCounter.get());
activityWinningRecordTotalVo.setLocaleWineNum(localeWineCounter.get());
return activityWinningRecordTotalVo;
}
public void exportActivityWinngingData(ActivityWinningRecordFindDTO activityWinningRecordFindDTO, ServletOutputStream outputStream) throws IOException {
ExcelUtils excelUtils = new ExcelUtils("中奖列表");
XSSFWorkbook hssfWorkbook = excelUtils.getHssfWorkbook();
XSSFSheet sheet = excelUtils.getSheet();
List<ActivityWinningRecordPageDTO> activityWinningRecordPageDTOS = mapper.selectActivityWinningRecord(activityWinningRecordFindDTO);
ActivityWinningRecordTotalVo activityWinningRecordTotal = getActivityWinningRecordTotal(activityWinningRecordFindDTO);
String[] header1 = {"线上抽奖触发数","线上中奖个数","现场上抽奖触发数","现场中奖个数"};
Row headerRow1 = sheet.createRow(0);
CellStyle headerCellStyle = excelUtils.createHeaderCellStyle();
excelUtils.createHeader(headerRow1,0,header1,headerCellStyle);
String[] headerValue = {activityWinningRecordTotal.getOnLineNum()+"",activityWinningRecordTotal.getOnLineWineNum()+"",activityWinningRecordTotal.getLocaleNum()+"",activityWinningRecordTotal.getLocaleWineNum()+""};
CellStyle generalCellStyle = excelUtils.createGeneralCellStyle();
ArrayList<String[]> headerData = Lists.newArrayList();
headerData.add(headerValue);
excelUtils.createCellData(sheet,1,generalCellStyle,headerData);
CellRangeAddress cellRangeAddress = new CellRangeAddress(2, 2, 0, 6);
sheet.addMergedRegion(cellRangeAddress);
String[] header2 = {"用户名","电话","身份","发放类型","抽奖礼品","兑奖码","中奖时间"};
Row header2Row = sheet.createRow(3);
excelUtils.createHeader(header2Row,0,header2,headerCellStyle);
List<String[]> activityWinngingDataList = getActivityWinngingDataList(activityWinningRecordPageDTOS);
excelUtils.createCellData(sheet,4,generalCellStyle,activityWinngingDataList);
hssfWorkbook.write(outputStream);
hssfWorkbook.close();
}
private List<String[]> getActivityWinngingDataList(List<ActivityWinningRecordPageDTO> activityWinningRecordDTOS){
List<String[]> activityWinngingDataList = new ArrayList<>();
for (ActivityWinningRecordPageDTO activityWinningRecordDTO : activityWinningRecordDTOS) {
String[] activityWinngingData = getActivityWinngingData(activityWinningRecordDTO);
activityWinngingDataList.add(activityWinngingData);
}
return activityWinngingDataList;
}
private String[] getActivityWinngingData(ActivityWinningRecordPageDTO activityWinningRecordPageDTO){
String prizeType= activityWinningRecordPageDTO.getPrizeType()== PrizeTypeEnum.ONLINE.getCode()?"线上":"现场";
String expiryDateCode = StringUtils.hasText(activityWinningRecordPageDTO.getExpiryDateCode())?activityWinningRecordPageDTO.getExpiryDateCode():"无";
String timeStr = DateUtil.format(activityWinningRecordPageDTO.getLotteryTime(),"yyyy-MM-dd HH:mm:ss");
return new String[]{activityWinningRecordPageDTO.getUserName(),activityWinningRecordPageDTO.getPhone(),
activityWinningRecordPageDTO.getPositionName(),prizeType,activityWinningRecordPageDTO.getPrizeName(),
expiryDateCode,timeStr};
}
}
\ No newline at end of file
...@@ -143,4 +143,12 @@ public class CouponBiz extends BaseBiz<CouponMapper, Coupon> { ...@@ -143,4 +143,12 @@ public class CouponBiz extends BaseBiz<CouponMapper, Coupon> {
return mapper.couponsByTickerNoList(tickerNoList); return mapper.couponsByTickerNoList(tickerNoList);
} }
public List<CouponDTO> findCouponsByIds(List<Integer> ids){
List<CouponDTO> couponDTOS = mapper.findCouponsByIds(ids);
if (CollectionUtils.isEmpty(couponDTOS)){
return Collections.EMPTY_LIST;
}
return couponDTOS;
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.biz;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.entity.TicketCollectionRecord;
import com.xxfc.platform.activity.mapper.TicketCollectionRecordMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Service
@Slf4j
public class TicketCollectionRecordBiz extends BaseBiz<TicketCollectionRecordMapper, TicketCollectionRecord> {
@Autowired
UserFeign userFeign;
@Autowired
HttpServletRequest request;
public ObjectRestResponse<List<TicketCollectionRecord>> selectAllByType(Integer type) {
Integer newType = type == null ? 1 : type;
List<TicketCollectionRecord> list = mapper.selectAllByType(new TicketCollectionRecord() {{
setType(newType);
}});
return ObjectRestResponse.succ(list);
}
public ObjectRestResponse add(TicketCollectionRecord ticketCollectionRecord) {
if (ticketCollectionRecord == null) {
return ObjectRestResponse.paramIsEmpty();
}
if (ticketCollectionRecord.getPhone() == null && request.getHeader("Authorization") != null) {
AppUserDTO appUserDTO = userFeign.userDetailByToken(request.getHeader("Authorization")).getData();
if (appUserDTO != null) {
ticketCollectionRecord.setPhone(appUserDTO.getUsername());
}
}
if (ticketCollectionRecord.getType() == null){
ticketCollectionRecord.setType(1);
}
TicketCollectionRecord oldValue = selectByPhoneAndType(ticketCollectionRecord.getPhone(), ticketCollectionRecord.getType());
if (oldValue == null) {
insertSelectiveRe(ticketCollectionRecord);
} else {
BeanUtil.copyProperties(ticketCollectionRecord, oldValue, CopyOptions.create().setIgnoreNullValue(true).setIgnoreError(true));
updateSelectiveByIdRe(oldValue);
}
return ObjectRestResponse.succ();
}
public TicketCollectionRecord selectByPhoneAndType(String phone, Integer type) {
Example example = new Example(TicketCollectionRecord.class);
example.createCriteria().andEqualTo("phone", phone).andEqualTo("type", type);
return mapper.selectOneByExample(example);
}
}
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;
}
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.xxfc.platform.activity.entity.ActivityAttendanceRecord;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 参与活动数据
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-04 14:54:06
*/
public interface ActivityAttendanceRecordMapper extends Mapper<ActivityAttendanceRecord> {
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;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 活动抽奖报名表
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityLuckyDrawMapper extends Mapper<ActivityLuckyDraw> {
List<ActivityLuckyDraw> listLuckDrawWithPage(ActivityLuckDrawFindDTO activityLuckDrawFindDTO);
}
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ApLogDTO;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog; import com.xxfc.platform.activity.entity.ActivityPopularizeLog;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
/** /**
* 用户参与推广活动(邀请有礼)的活动记录的记录(日志) * 用户参与推广活动(邀请有礼)的活动记录的记录(日志)
* *
...@@ -11,5 +15,5 @@ import tk.mybatis.mapper.common.Mapper; ...@@ -11,5 +15,5 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2019-07-05 15:23:04 * @date 2019-07-05 15:23:04
*/ */
public interface ActivityPopularizeLogMapper extends Mapper<ActivityPopularizeLog> { public interface ActivityPopularizeLogMapper extends Mapper<ActivityPopularizeLog> {
List<ApLogDTO> selectByUserId(Map<String, Object> param);
} }
...@@ -17,4 +17,6 @@ import java.util.List; ...@@ -17,4 +17,6 @@ import java.util.List;
public interface ActivityPopularizeRelationMapper extends Mapper<ActivityPopularizeRelation> { public interface ActivityPopularizeRelationMapper extends Mapper<ActivityPopularizeRelation> {
List<ActivityPopularizeRelationDTO> findActivityPopularizeRelationsByActivityIdAndTime(@Param("activityId") Integer activityId, @Param("startTime") Long startTime, @Param("endTime") Long endTime); List<ActivityPopularizeRelationDTO> findActivityPopularizeRelationsByActivityIdAndTime(@Param("activityId") Integer activityId, @Param("startTime") Long startTime, @Param("endTime") Long endTime);
Integer getByUserIdAndPopularizeId(ActivityPopularizeRelation activityPopularizeRelation);
} }
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.ActivityPrize;
import org.apache.ibatis.annotations.Param;
import tk.mybatis.mapper.additional.insert.InsertListMapper;
import tk.mybatis.mapper.common.Mapper;
/**
* 奖品设置
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityPrizeMapper extends Mapper<ActivityPrize>, InsertListMapper<ActivityPrize> {
void updatePrizeStock(@Param("prizeType") Integer prizeType,
@Param("serialNumber") Integer serialNumber);
}
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO;
import com.xxfc.platform.activity.entity.ActivityWinningRecord;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
/**
* 中奖记录
*
* @author libin
* @email 18178966185@163.com
* @date 2019-12-03 16:46:02
*/
public interface ActivityWinningRecordMapper extends Mapper<ActivityWinningRecord> {
List<ActivityWinningRecordPageDTO> selectActivityWinningRecord(ActivityWinningRecordFindDTO activityWinningRecordFindDTO);
}
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.dto.CouponDTO;
import com.xxfc.platform.activity.entity.Coupon; import com.xxfc.platform.activity.entity.Coupon;
import com.xxfc.platform.activity.vo.CouponTitleVo; import com.xxfc.platform.activity.vo.CouponTitleVo;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -24,4 +25,6 @@ public interface CouponMapper extends Mapper<Coupon> { ...@@ -24,4 +25,6 @@ public interface CouponMapper extends Mapper<Coupon> {
List<Coupon> couponsByTickerNoList(@Param(value = "tickerNoList") List<String> tickerNoList); List<Coupon> couponsByTickerNoList(@Param(value = "tickerNoList") List<String> tickerNoList);
List<CouponDTO> findCouponsByIds(@Param("ids") List<Integer> ids);
} }
package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.TicketCollectionRecord;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface TicketCollectionRecordMapper extends Mapper<TicketCollectionRecord> {
List<TicketCollectionRecord> selectAllByType(TicketCollectionRecord ticketCollectionRecord);
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:56
*/
@RestController
@RequestMapping("activityAttendanceRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
/**
* 判断是否还有抽奖机会
*
* @param activityId
* @param prizeType
* @param appUserDTO
* @return
*/
@GetMapping("/number_of_luckydraw/{activityId}/{prizeType}")
public ObjectRestResponse<Boolean> hasNumberOfLuckyDrawByType(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType,
AppUserDTO appUserDTO) {
Boolean state = activityAttendanceRecordBiz.hasNumberOfLuckyDrawByType(activityId,prizeType,appUserDTO.getUserid());
return ObjectRestResponse.succ(state);
}
@PostMapping("/attend/{activityId}")
public ObjectRestResponse<Void> attendActivity(@PathVariable(value = "activityId") Integer activityId,
@RequestParam(value = "activityName",required = false) String activityName, AppUserDTO appUserDTO){
activityAttendanceRecordBiz.attendActivity(activityId,activityName,appUserDTO);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("activityLuckyDraw")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityLuckyDrawController {
private final ActivityLuckyDrawBiz activityLuckyDrawBiz;
/**
* 报名
* @param activityLuckyDraw
* @param appUserDTO
* @return
*/
@PostMapping("/sign_up")
public ObjectRestResponse<Void> signUP(@RequestBody ActivityLuckyDraw activityLuckyDraw, AppUserDTO appUserDTO){
activityLuckyDraw.setUserId(appUserDTO.getUserid());
activityLuckyDraw.setPhone(appUserDTO.getUsername());
activityLuckyDrawBiz.signUp(activityLuckyDraw);
return ObjectRestResponse.succ();
}
}
\ No newline at end of file
...@@ -28,13 +28,14 @@ import org.springframework.web.bind.annotation.*; ...@@ -28,13 +28,14 @@ import org.springframework.web.bind.annotation.*;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.weekend.WeekendSqls; import tk.mybatis.mapper.weekend.WeekendSqls;
import java.util.ArrayList; import java.math.BigDecimal;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.*; import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_FALSE;
import static com.github.wxiaoqi.security.common.constant.CommonConstants.SYS_TRUE;
@RestController @RestController
@RequestMapping("activityPopularize") @RequestMapping("activityPopularize")
...@@ -101,6 +102,7 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular ...@@ -101,6 +102,7 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
UserVO userVO = BeanUtil.toBean(userFeign.userDetailById(pr.getMinorUserId()).getData(), UserVO.class); UserVO userVO = BeanUtil.toBean(userFeign.userDetailById(pr.getMinorUserId()).getData(), UserVO.class);
return userVO; return userVO;
}).collect(Collectors.toList())); }).collect(Collectors.toList()));
vo.setActivityPopularizeUser(apu[0]);
} }
//设置任务项 //设置任务项
...@@ -111,12 +113,23 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular ...@@ -111,12 +113,23 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
.stream().map(item -> { .stream().map(item -> {
ItemVO itemVO = BeanUtil.toBean(item, ItemVO.class); ItemVO itemVO = BeanUtil.toBean(item, ItemVO.class);
itemVO.setStatus(SYS_FALSE); itemVO.setStatus(SYS_FALSE);
if(null != apu[0]) { if(null != apu[0]) {
ActivityPopularizeLog log = aplMap[0].get(item.getId()); ActivityPopularizeLog log = aplMap[0].get(item.getId());
if(null != log && SYS_TRUE.equals(log.getStatus())) { if(null != log && SYS_TRUE.equals(log.getStatus())) {
itemVO.setStatus(SYS_TRUE); itemVO.setStatus(SYS_TRUE);
} }
} }
if (null != appUserDTO) {
ActivityPopularizeLog activityPopularizeLog = popularizeLogBiz.selectByUserIdAndPopularIdAndItemId(new ActivityPopularizeLog(){{
setUserId(appUserDTO.getUserid());
setPopularizeId(v.getId());
setItemId(item.getId());
}});
if (activityPopularizeLog != null) {
itemVO.setStatus(activityPopularizeLog.getStatus());
}
}
return itemVO; return itemVO;
}).collect(Collectors.toList())); }).collect(Collectors.toList()));
return vo; return vo;
...@@ -149,14 +162,17 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular ...@@ -149,14 +162,17 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
activityPopularizeUser = popularizeUserBiz.insertSelectiveReT(new ActivityPopularizeUser(){{ activityPopularizeUser = popularizeUserBiz.insertSelectiveReT(new ActivityPopularizeUser(){{
setPopularizeId(itemAddDTO.getPopularizeId()); setPopularizeId(itemAddDTO.getPopularizeId());
setUserId(getAppUser().getUserid()); setUserId(getAppUser().getUserid());
setEndProgress(ap.getProgress()); setEndProgress(new BigDecimal(ap.getProgress()));
}}); }});
} }
//判断是否已经添加过 //判断是否已经添加过
ActivityPopularizeLog itemLog = BeanUtil.toBean(itemAddDTO, ActivityPopularizeLog.class); ActivityPopularizeLog itemLog = BeanUtil.toBean(itemAddDTO, ActivityPopularizeLog.class);
itemLog.setUserId(getAppUser().getUserid()); itemLog.setUserId(getAppUser().getUserid());
XxBizAssert.isNull(popularizeLogBiz.selectOne(itemLog)); ActivityPopularizeLog activityPopularizeLog = popularizeLogBiz.selectOne(itemLog);
if(activityPopularizeLog != null) {
return ObjectRestResponse.createFailedResult(1023, "参加成功,请勿重复参加!");
}
//添加活动日志 //添加活动日志
itemLog.setStatus(SYS_TRUE); itemLog.setStatus(SYS_TRUE);
...@@ -176,7 +192,7 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular ...@@ -176,7 +192,7 @@ public class ActivityPopularizeController extends BaseController<ActivityPopular
ActivityPopularizeItem item1 = popularizeItemBiz.selectById(al.getItemId()); ActivityPopularizeItem item1 = popularizeItemBiz.selectById(al.getItemId());
progress += item1.getProgress(); progress += item1.getProgress();
} }
activityPopularizeUser.setCurrentProgress(progress); activityPopularizeUser.setCurrentProgress(new BigDecimal(progress));
popularizeUserBiz.updateSelectiveById(activityPopularizeUser); popularizeUserBiz.updateSelectiveById(activityPopularizeUser);
return ObjectRestResponse.succ(); return ObjectRestResponse.succ();
} }
......
package com.xxfc.platform.activity.rest; package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController; import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.ActivityPopularizeLogBiz; import com.xxfc.platform.activity.biz.ActivityPopularizeLogBiz;
import com.xxfc.platform.activity.dto.QueryLogDto;
import com.xxfc.platform.activity.entity.ActivityPopularizeLog; import com.xxfc.platform.activity.entity.ActivityPopularizeLog;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -11,4 +13,9 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -11,4 +13,9 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("activityPopularizeLog") @RequestMapping("activityPopularizeLog")
public class ActivityPopularizeLogController extends BaseController<ActivityPopularizeLogBiz,ActivityPopularizeLog> { public class ActivityPopularizeLogController extends BaseController<ActivityPopularizeLogBiz,ActivityPopularizeLog> {
@GetMapping(value = "/getByUser")
public ObjectRestResponse selectByUserId(QueryLogDto queryLogDto) {
return ObjectRestResponse.succ(baseBiz.selectByUserId(queryLogDto));
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.admin.feign.dto.AppUserDTO;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.LotteryVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("activityPrize")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeController {
private final ActivityPrizeBiz activityPrizeBiz;
/**
* 奖品类型获取
*
* @param prizeType
* @return
*/
@GetMapping("/find_prize")
public ObjectRestResponse<List<ActivityPrize>> findActivityPrizeByType(@RequestParam(value = "prizeType") Integer prizeType) {
List<ActivityPrize> activityPrizes = activityPrizeBiz.findActivityPrizeByType(prizeType);
return ObjectRestResponse.succ(activityPrizes);
}
/**
* 抽奖
*
* @param activityId
* @param appUserDTO
* @return
*/
@PostMapping("/lottery/{activityId}/{prizeType}")
public ObjectRestResponse<LotteryVo> activityLottery(@PathVariable(value = "activityId") Integer activityId,
@PathVariable(value = "prizeType") Integer prizeType,
@RequestParam(value = "lottery") String lottery,
AppUserDTO appUserDTO) {
LotteryVo lotteryVo = activityPrizeBiz.activityLottery(activityId,prizeType,lottery,appUserDTO);
return ObjectRestResponse.succ(lotteryVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("activityWinningRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
}
\ No newline at end of file
package com.xxfc.platform.activity.rest;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.xxfc.platform.activity.biz.TicketCollectionRecordBiz;
import com.xxfc.platform.activity.entity.TicketCollectionRecord;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping(value = "ticketCollection")
public class TicketCollectionRecordController extends BaseController<TicketCollectionRecordBiz, TicketCollectionRecord> {
@PostMapping(value = "/app/unauth/add")
public ObjectRestResponse add(@RequestBody TicketCollectionRecord ticketCollectionRecord) {
return baseBiz.add(ticketCollectionRecord);
}
@GetMapping(value = "/app/unauth/getAll")
public ObjectRestResponse<List<TicketCollectionRecord>> getAll(Integer type) {
return baseBiz.selectAllByType(type);
}
}
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityAttendanceRecordBiz;
import com.xxfc.platform.activity.bo.ActivityAttendanceRecordBo;
import com.xxfc.platform.activity.dto.ActivityAttendanceRecordFindDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/4 14:56
*/
@RestController
@RequestMapping("admin/activityAttendanceRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityAttendanceRecordAdminController {
private final ActivityAttendanceRecordBiz activityAttendanceRecordBiz;
@PostMapping("/page")
public ObjectRestResponse<ActivityAttendanceRecordBo> listActivityAttendanceRecordWithPage(@RequestBody ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO){
ActivityAttendanceRecordBo activityAttendanceRecordBo = activityAttendanceRecordBiz.listActivityAttendanceRecord(activityAttendanceRecordFindDTO);
return ObjectRestResponse.succ(activityAttendanceRecordBo);
}
@PostMapping("/export")
public void exportActivityAttendanceRecordData(@RequestBody ActivityAttendanceRecordFindDTO activityAttendanceRecordFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-attendance-record.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityAttendanceRecordBiz.exportActivityAttendanceRecordData(activityAttendanceRecordFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.biz.ActivityLuckyDrawBiz;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.ActivityLuckyDraw;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("admin/activityLuckyDraw")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityLuckyDrawAdminController {
private final ActivityLuckyDrawBiz activityLuckyDrawBiz;
/**
* 分页查询报名列表
*
* @param activityLuckDrawFindDTO
* @return
*/
@PostMapping("/page")
public ObjectRestResponse<PageDataVO<ActivityLuckyDraw>> listActivtyLuckyDrawWithPage(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO) {
PageDataVO<ActivityLuckyDraw> activityLuckyDrawPageDataVO = activityLuckyDrawBiz.listLuckDrawWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityLuckyDrawPageDataVO);
}
@PostMapping("/export")
public void exportActivityLuckyDrawData(@RequestBody ActivityLuckDrawFindDTO activityLuckDrawFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-luckdraw.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityLuckyDrawBiz.exportActivityLuckDrawData(activityLuckDrawFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
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.xxfc.platform.activity.biz.ActivityPrizeBiz;
import com.xxfc.platform.activity.entity.ActivityPrize;
import com.xxfc.platform.activity.vo.ActivityPrizeVo;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 19:44
*/
@RestController
@RequestMapping("/admin/activityPrize")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityPrizeAdminController {
private final ActivityPrizeBiz activityPrizeBiz;
@PostMapping("/save")
public ObjectRestResponse<Void> savePrize(@BeanValid @RequestBody List<ActivityPrize> activityPrizes) {
activityPrizeBiz.saveActivityPrizes(activityPrizes);
return ObjectRestResponse.succ();
}
@GetMapping("/list")
public ObjectRestResponse<ActivityPrizeVo> listActivityPrize(){
ActivityPrizeVo activityPrizeVo = activityPrizeBiz.selectActivitys();
return ObjectRestResponse.succ(activityPrizeVo);
}
}
\ No newline at end of file
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.xxfc.platform.activity.biz.ActivityWinningRecordBiz;
import com.xxfc.platform.activity.bo.ActivityWinningRecordBo;
import com.xxfc.platform.activity.dto.ActivityWinningRecordFindDTO;
import com.github.wxiaoqi.security.common.exception.BaseException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 16:51
*/
@RestController
@RequestMapping("admin/activityWinningRecord")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class ActivityWinningRecordAdminController {
private final ActivityWinningRecordBiz activityWinningRecordBiz;
@PostMapping("/page")
public ObjectRestResponse<ActivityWinningRecordBo> listActivityWinningRecordWithPage(@RequestBody ActivityWinningRecordFindDTO activityLuckDrawFindDTO){
ActivityWinningRecordBo activityWinningRecordBo = activityWinningRecordBiz.listActivityWinningRecordWithPage(activityLuckDrawFindDTO);
return ObjectRestResponse.succ(activityWinningRecordBo);
}
@PostMapping("/export")
public void exportActivityWinningRecordData(@RequestBody ActivityWinningRecordFindDTO activityWinningRecordFindDTO, HttpServletResponse response){
try {
String name = DateTimeFormatter.ofPattern("YYYYMMddHHmmss").format(LocalDateTime.now());
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String filename = String.format("%s-activity-winnging-record.xlsx",name);
response.setHeader("Content-Disposition","attachment;filename="+ new String(filename.getBytes(), "iso8859-1"));
ServletOutputStream outputStream = response.getOutputStream();
activityWinningRecordBiz.exportActivityWinngingData(activityWinningRecordFindDTO,outputStream);
response.setCharacterEncoding("UTF-8");
}catch (Exception ex){
throw new BaseException("导出数据失败");
}
}
}
\ No newline at end of file
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</plugin> </plugin>
<jdbcConnection driverClass="com.mysql.jdbc.Driver" <jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://10.5.52.4:3307/xxfc_activity?useUnicode=true&amp;characterEncoding=UTF8" connectionURL="jdbc:mysql://10.5.52.3:3306/xxfc_activity?useUnicode=true&amp;characterEncoding=UTF8"
userId="root" userId="root"
password="sslcloud123*()"> password="sslcloud123*()">
</jdbcConnection> </jdbcConnection>
...@@ -26,6 +26,6 @@ ...@@ -26,6 +26,6 @@
<javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}" <javaClientGenerator targetPackage="${targetMapperPackage}" targetProject="${targetJavaProject}"
type="XMLMAPPER"/> type="XMLMAPPER"/>
<table tableName="integral_user_status" domainObjectName="IntegralUserStatus"></table> <table tableName="ticket_collection_record" domainObjectName="TicketCollectionRecord"></table>
</context> </context>
</generatorConfiguration> </generatorConfiguration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityAttendanceRecordMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityAttendanceRecord" id="activityAttendanceRecordMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="phone" column="phone"/>
<result property="activityId" column="activity_id"/>
<result property="activityName" column="activity_name"/>
<result property="positionId" column="position_id"/>
<result property="positionName" column="position_name"/>
<result property="onlineLotteryNum" column="online_lottery_num"/>
<result property="localeLotteryNum" column="locale_lottery_num"/>
<result property="crtTime" column="crt_time"/>
</resultMap>
<select id="selectActivityAttendanceRecord"
resultType="com.xxfc.platform.activity.dto.ActivityAttendanceRecordDTO">
select apu.user_id as `userId`,
apu.`current_progress` as `amount`,
apu.`status`,
apu.crt_time as `attendTime`,
aar.user_name as `userName`,
aar.phone,
aar.position_name as `positionName`,
IFNULL(apr.inviteNum,0) as `inviteNum`,
awr.prizes
from (select `user_id`,`popularize_id`,`current_progress`,`status`,`crt_time` from activity_popularize_user where
`popularize_id`=#{activityId}
<if test="status!=null">
and `status`=#{status}
</if>
<if test="startTime!=null and endTime!=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
`crt_time`>=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
) as `apu`
inner join (select * from `activity_attendance_record` where `activity_id`=#{activityId}
<if test="phone!=null and phone!=''">
and `phone`=#{phone}
</if>
) as `aar`
on aar.user_id = apu.user_id and apu.popularize_id = aar.activity_id
left join (select `major_user_id`, count(minor_user_id) as `inviteNum`
from activity_popularize_relation where `popularize_id`=#{activityId}
group by major_user_id) as `apr` on apr.major_user_id = apu.user_id
left join (select `user_id`, `activity_id`, group_concat(`prize_name`) as `prizes`
from `activity_winning_record` where `activity_id`=#{activityId} and `has_winning`=1
group by user_id, `activity_id`) as `awr`
on awr.user_id = apu.user_id and awr.activity_id = apu.popularize_id
order by apu.current_progress desc
</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>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityLuckyDrawMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityLuckyDraw" id="activityLuckyDrawMap">
<result property="id" column="id"/>
<result property="userName" column="user_name"/>
<result property="phone" column="phone"/>
<result property="activityId" column="activity_id"/>
<result property="activityName" column="activity_name"/>
<result property="ticketNum" column="ticket_num"/>
<result property="crtTime" column="crt_time"/>
<result property="userId" column="user_id"/>
</resultMap>
<select id="listLuckDrawWithPage" resultMap="activityLuckyDrawMap">
select * from `activity_lucky_draw` where 1=1
<if test="activityId!=null">
and `activity_id`=#{activityId}
</if>
<if test="phone!=null and phone!=''">
and `phone`=#{phone}
</if>
<if test="startTime!=null and endTime!=null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
`crt_time`>=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
order by `crt_time` desc
</select>
</mapper>
\ No newline at end of file
...@@ -15,4 +15,9 @@ ...@@ -15,4 +15,9 @@
<result property="itemId" column="item_id"/> <result property="itemId" column="item_id"/>
</resultMap> </resultMap>
<select id="selectByUserId" resultType="com.xxfc.platform.activity.dto.ApLogDTO" parameterType="Map">
select * from activity_log_list where user_id = #{userId} and popularize_id = #{popularizeId}
ORDER BY crt_time DESC
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -25,4 +25,8 @@ ...@@ -25,4 +25,8 @@
and <![CDATA[ `crt_time` <= #{endTime}]]> and <![CDATA[ `crt_time` <= #{endTime}]]>
</if> </if>
</select> </select>
<select id="getByUserIdAndPopularizeId" parameterType="com.xxfc.platform.activity.entity.ActivityPopularizeRelation" resultType="Integer">
select num from activity_popularize_relation where major_user_id = #{majorUserId} and popularize_id = #{popularizeId} ORDER BY crt_time DESC LIMIT 1
</select>
</mapper> </mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityPrizeMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityPrize" id="activityPrizeMap">
<result property="id" column="id"/>
<result property="serialNumber" column="serial_number"/>
<result property="name" column="name"/>
<result property="iconPath" column="icon_path"/>
<result property="dayMaxUse" column="day_max_use"/>
<result property="totalStock" column="total_stock"/>
<result property="probability" column="probability"/>
<result property="type" column="type"/>
<result property="crtTime" column="crt_time"/>
<result property="goodsId" column="goods_id"/>
<result property="prizeGoodsType" column="prize_goods_type"/>
</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>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xxfc.platform.activity.mapper.ActivityWinningRecordMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.xxfc.platform.activity.entity.ActivityWinningRecord" id="activityWinningRecordMap">
<result property="id" column="id"/>
<result property="userId" column="user_id"/>
<result property="activityId" column="activity_id"/>
<result property="prizeType" column="prize_type"/>
<result property="prizeName" column="prize_name"/>
<result property="iconPath" column="icon_path"/>
<result property="hasWinning" column="has_winning"/>
<result property="expiryDateCode" column="expiry_date_code"/>
<result property="crtTime" column="crt_time"/>
<result property="lotteryTime" column="lottery_time"/>
<result property="goodsId" column="goods_id"/>
</resultMap>
<select id="selectActivityWinningRecord" resultType="com.xxfc.platform.activity.dto.ActivityWinningRecordPageDTO">
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
where 1=1
<if test="activityId!=null">
and awr.`activity_id`=#{activityId}
</if>
<if test="hasWinning!=null">
and awr.`has_winning`=#{hasWinning}
</if>
<if test="phone!=null and phone!=''">
and aar.`phone`=#{phone}
</if>
<if test="prizeType!=null">
and awr.`prize_type`=#{prizeType}
</if>
<if test="startTime!=null and endTime!=null">
and awr.`lottery_time` between #{startTime} and #{endTime}
</if>
<if test="startTime!=null and endTime==null">
and <![CDATA[
awr.`lottery_time` >=#{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
awr.`lottery_time` <=#{endTime}
]]>
</if>
order by awr.`lottery_time` desc
</select>
</mapper>
\ No newline at end of file
...@@ -57,4 +57,13 @@ ...@@ -57,4 +57,13 @@
</where> </where>
</select> </select>
<select id="findCouponsByIds" resultType="com.xxfc.platform.activity.dto.CouponDTO">
select `id`,`title` from `coupon` where is_del=0
<if test="ids!=null and ids.size>0">
and id in <foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</if>
</select>
</mapper> </mapper>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xxfc.platform.activity.mapper.TicketCollectionRecordMapper" >
<resultMap id="BaseResultMap" type="com.xxfc.platform.activity.entity.TicketCollectionRecord" >
<!--
WARNING - @mbg.generated
-->
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="phone" property="phone" jdbcType="VARCHAR" />
<result column="crt_time" property="crtTime" jdbcType="TIMESTAMP" />
<result column="upd_time" property="updTime" jdbcType="TIMESTAMP" />
<result column="type" property="type" jdbcType="BIT" />
</resultMap>
<select id="selectAllByType" resultType="com.xxfc.platform.activity.entity.TicketCollectionRecord" parameterType="com.xxfc.platform.activity.entity.TicketCollectionRecord">
select * from ticket_collection_record where type = #{type}
</select>
</mapper>
\ No newline at end of file
...@@ -80,6 +80,10 @@ public class Banner { ...@@ -80,6 +80,10 @@ public class Banner {
@ApiModelProperty(value = "跳转链接") @ApiModelProperty(value = "跳转链接")
private String url; private String url;
@Column(name = "ios_url")
@ApiModelProperty(value = "ios跳转地址")
private String iosUrl;
/** /**
* 是否删除,0否,1是 * 是否删除,0否,1是
*/ */
......
...@@ -24,6 +24,8 @@ public class BannerVo { ...@@ -24,6 +24,8 @@ public class BannerVo {
*/ */
private String url; private String url;
private String iosUrl;
/** /**
* seo html标签优化 * seo html标签优化
*/ */
......
...@@ -31,6 +31,7 @@ public class BannerBiz extends BaseBiz<BannerMapper,Banner> { ...@@ -31,6 +31,7 @@ public class BannerBiz extends BaseBiz<BannerMapper,Banner> {
bannerVo.setTitle(banner.getTitle()); bannerVo.setTitle(banner.getTitle());
bannerVo.setId(banner.getId()); bannerVo.setId(banner.getId());
bannerVo.setAlt(banner.getAlt()); bannerVo.setAlt(banner.getAlt());
bannerVo.setIosUrl(banner.getIosUrl());
bannerVos.add(bannerVo); bannerVos.add(bannerVo);
}); });
return bannerVos; return bannerVos;
......
...@@ -666,6 +666,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay>{ ...@@ -666,6 +666,7 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay>{
log.info("response: {}"+response.getBody()); log.info("response: {}"+response.getBody());
return response; return response;
} }
public static void main(String[] args) throws AlipayApiException { public static void main(String[] args) throws AlipayApiException {
OrderPayBiz orderPayBiz = new OrderPayBiz(); OrderPayBiz orderPayBiz = new OrderPayBiz();
OrderPayVo orderPayVo = new OrderPayVo(); OrderPayVo orderPayVo = new OrderPayVo();
...@@ -675,12 +676,12 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay>{ ...@@ -675,12 +676,12 @@ public class OrderPayBiz extends BaseBiz<OrderPayMapper, OrderPay>{
orderPayVo.setAmount(3); orderPayVo.setAmount(3);
orderPayVo.setBody("扣除租车订单费用"); orderPayVo.setBody("扣除租车订单费用");
orderPayVo.setSubject("租车订单交易费用"); orderPayVo.setSubject("租车订单交易费用");
//orderPayBiz.testTradeRefund("216584713656209408", 105000, "退还违约金1050元", "2165847136562094081050"); //orderPayBiz.testTradeRefund("222522054304468992", 180000, "退还违约金1800元", "222522054304461800");
//orderPayBiz.fundAuthOrderUnFreeze(orderPayVo, ""); //orderPayBiz.fundAuthOrderUnFreeze(orderPayVo, "");
//orderPayBiz.alipayOrderRefund("20191024153859000003","2019102422001421530513773694", 2, "xxxx", ""); //orderPayBiz.alipayOrderRefund("20191024153859000003","2019102422001421530513773694", 2, "xxxx", "");
//orderPayBiz.tradePay(orderPayVo, ""); //orderPayBiz.tradePay(orderPayVo, "");
//orderPayBiz.fundAuthCancel(orderPayVo, ""); //orderPayBiz.fundAuthCancel(orderPayVo, "");
//orderPayBiz.tradePay("20191114182254000019", "2019111410002001530505959461", 1,"扣除违约金", "扣除违约金"); //orderPayBiz.tradePay("20191114182254000019", "2019111410002001530505959461", 1,"扣除违约金", "扣除违约金");
orderPayBiz.fundAuthQuery("20191031172653000026"); //orderPayBiz.fundAuthQuery("20191031172653000026");
} }
} }
...@@ -62,19 +62,8 @@ public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPric ...@@ -62,19 +62,8 @@ public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPric
} }
//编辑 //编辑
if (Objects.nonNull(vehicleModelHolidayPriceSaveDTO.getId())) { if (Objects.nonNull(vehicleModelHolidayPriceSaveDTO.getId())) {
Example example = new Example(VehicleModelHolidayPrice.class); deleteById(vehicleModelHolidayPriceSaveDTO.getId());
Example.Criteria criteria = example.createCriteria();
criteria.andEqualTo("festivalId", vehicleModelHolidayPriceSaveDTO.getId());
for (VehicleModelHolidayPrice modelHolidayPrice : vehicleModelHolidayPriceList) {
modelHolidayPrice.setUpdUserId(userId);
modelHolidayPrice.setUpdTime(new Date());
mapper.updateByExampleSelective(modelHolidayPrice, example);
} }
Festival festival = new Festival();
festival.setName(vehicleModelHolidayPriceSaveDTO.getFestival());
festival.setId(vehicleModelHolidayPriceSaveDTO.getId());
festivalBiz.add(festival);
} else {
Festival festival = new Festival(); Festival festival = new Festival();
festival.setName(vehicleModelHolidayPriceSaveDTO.getFestival()); festival.setName(vehicleModelHolidayPriceSaveDTO.getFestival());
festivalBiz.add(festival); festivalBiz.add(festival);
...@@ -85,7 +74,6 @@ public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPric ...@@ -85,7 +74,6 @@ public class VehicleModelHolidayPriceBiz extends BaseBiz<VehicleModelHolidayPric
mapper.insertSelective(modelHolidayPrice); mapper.insertSelective(modelHolidayPrice);
} }
} }
}
/** /**
* @param multiple 倍数 * @param multiple 倍数
......
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