Commit 37047fd3 authored by shiyu's avatar shiyu

生成邀请码

parent 8fe103fd
...@@ -113,6 +113,8 @@ public class ShiroConfig { ...@@ -113,6 +113,8 @@ public class ShiroConfig {
filterChainDefinitionMap.put("/admin/item/updateUrl", "anon"); filterChainDefinitionMap.put("/admin/item/updateUrl", "anon");
filterChainDefinitionMap.put("/admin/item/synToEs", "anon"); filterChainDefinitionMap.put("/admin/item/synToEs", "anon");
filterChainDefinitionMap.put("/admin/invitationCode/**", "anon");
// filterChainDefinitionMap.put("/admin/**", "anon"); // filterChainDefinitionMap.put("/admin/**", "anon");
filterChainDefinitionMap.put("/admin/**", "authc"); filterChainDefinitionMap.put("/admin/**", "authc");
shiroFilterFactoryBean.setLoginUrl("/admin/auth/401"); shiroFilterFactoryBean.setLoginUrl("/admin/auth/401");
......
...@@ -4,13 +4,17 @@ package com.wwdz.ch.admin.controller; ...@@ -4,13 +4,17 @@ package com.wwdz.ch.admin.controller;
import com.wwdz.ch.admin.annotation.RequiresPermissionsDesc; import com.wwdz.ch.admin.annotation.RequiresPermissionsDesc;
import com.wwdz.ch.admin.service.InvitationCodeService; import com.wwdz.ch.admin.service.InvitationCodeService;
import com.wwdz.ch.admin.util.AuthSupport; import com.wwdz.ch.admin.util.AuthSupport;
import com.wwdz.ch.core.consts.InvitationCodeStateEnum;
import com.wwdz.ch.core.consts.ResultCode;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.dto.request.CoinRequestDto;
import com.wwdz.ch.db.dto.request.InvitationCodeRequestDto; import com.wwdz.ch.db.dto.request.InvitationCodeRequestDto;
import com.xxdxxs.service.FormHandler;
import com.xxdxxs.utils.JsonUtils; import com.xxdxxs.utils.JsonUtils;
import com.xxdxxs.validation.Validator;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -33,6 +37,16 @@ public class InvitationCodeController { ...@@ -33,6 +37,16 @@ public class InvitationCodeController {
@PostMapping("/create") @PostMapping("/create")
public Result create(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) { public Result create(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) {
logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->生成邀请码->新增,请求参数:parma:{}", invitationCodeRequestDto); logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->生成邀请码->新增,请求参数:parma:{}", invitationCodeRequestDto);
Validator validator = new Validator(FormHandler.ofEntity(invitationCodeRequestDto));
validator.set("effectiveStartTime", "有效期起始时间").must().string()
.set("effectiveEndTime", "有效期结束时间").must().string()
.set("enabledNum", "可使用的人数").must().integer()
.set("applicant", "申请人").must().number()
.set("remark", "备注").sometimes().string()
.end();
if (!validator.isValid()) {
return Result.failed(ResultCode.PARAM_ERROR.getCode(), validator.getErrorInfo());
}
Result result = invitationCodeService.create(invitationCodeRequestDto); Result result = invitationCodeService.create(invitationCodeRequestDto);
logger.info("【请求结束】邀请码管理->生成邀请码->新增:result:{}", JsonUtils.from(result)); logger.info("【请求结束】邀请码管理->生成邀请码->新增:result:{}", JsonUtils.from(result));
return result; return result;
...@@ -43,7 +57,7 @@ public class InvitationCodeController { ...@@ -43,7 +57,7 @@ public class InvitationCodeController {
@PostMapping("/findList") @PostMapping("/findList")
public Result findList(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) { public Result findList(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) {
logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->邀请码列表->查询,请求参数:parma:{}", invitationCodeRequestDto); logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->邀请码列表->查询,请求参数:parma:{}", invitationCodeRequestDto);
Result result = invitationCodeService.findList(invitationCodeRequestDto); Result result = invitationCodeService.findByPage(invitationCodeRequestDto);
logger.info("【请求结束】邀请码管理->邀请码列表->查询:result:{}", JsonUtils.from(result)); logger.info("【请求结束】邀请码管理->邀请码列表->查询:result:{}", JsonUtils.from(result));
return result; return result;
} }
...@@ -52,18 +66,25 @@ public class InvitationCodeController { ...@@ -52,18 +66,25 @@ public class InvitationCodeController {
@PostMapping("/findDetails") @PostMapping("/findDetails")
public Result findDetails(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) { public Result findDetails(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) {
logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->邀请码详情->查询,请求参数:parma:{}", invitationCodeRequestDto); logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->邀请码详情->查询,请求参数:parma:{}", invitationCodeRequestDto);
Result result = invitationCodeService.findList(invitationCodeRequestDto); if (StringUtils.isEmpty(invitationCodeRequestDto.getCode())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
Result result = invitationCodeService.findDetails(invitationCodeRequestDto);
logger.info("【请求结束】邀请码管理->邀请码详情->查询:result:{}", JsonUtils.from(result)); logger.info("【请求结束】邀请码管理->邀请码详情->查询:result:{}", JsonUtils.from(result));
return result; return result;
} }
@RequiresPermissionsDesc(menu = { "邀请码管理", "邀请码详情" }, button = "更新") @RequiresPermissionsDesc(menu = { "邀请码管理", "设置失效" }, button = "更新")
@PostMapping("/setInvalid") @PostMapping("/setInvalid")
public Result setInvalid(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) { public Result setInvalid(@RequestBody InvitationCodeRequestDto invitationCodeRequestDto) {
logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->设置无效->更新,请求参数:parma:{}", invitationCodeRequestDto); logger.info("【请求开始】操作人:[" + AuthSupport.userName()+ "] 邀请码管理->设置失效->更新,请求参数:parma:{}", invitationCodeRequestDto);
if (StringUtils.isEmpty(invitationCodeRequestDto.getCode())) {
return Result.failed(ResultCode.PARAM_ERROR);
}
invitationCodeRequestDto.setState(InvitationCodeStateEnum.INVALID.getCode());
Result result = invitationCodeService.updateState(invitationCodeRequestDto); Result result = invitationCodeService.updateState(invitationCodeRequestDto);
logger.info("【请求结束】邀请码管理->设置效->更新:result:{}", JsonUtils.from(result)); logger.info("【请求结束】邀请码管理->设置效->更新:result:{}", JsonUtils.from(result));
return result; return result;
} }
} }
package com.wwdz.ch.admin.entity.vo;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class InvitationCodeVo implements Entity {
/**
* id
*/
private Long id;
/**
* 邀请码
*/
private String code;
/**
* 有效期起始时间
*/
private Date effectiveStartTime;
/**
* 有效期结束时间
*/
private Date effectiveEndTime;
/**
* 可使用的人数
*/
private Integer enabledNum;
/**
* 申请人
*/
private Long applicant;
/**
* 申请人姓名
*/
private String applicantName;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 创建人
*/
private Integer creator;
/**
* 创建人姓名
*/
private String creatorName;
/**
* 状态
*/
private Integer state;
private String stateName;
/**
* 备注
*/
private String remark;
}
package com.wwdz.ch.admin.entity.vo;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class InviteRecordVo implements Entity {
private Integer id;
/**
* 受邀人
*/
private Long invitee;
/**
* 受邀人名称
*/
private String inviteeName;
/**
* 邀请人
*/
private Long inviter;
/**
* 邀请人名称
*/
private String inviterName;
/**
* 受邀人手机号
*/
private String inviteePhone;
/**
* 创建时间(使用邀请码的时间)
*/
private Date createTime;
/**
* 邀请码
*/
private String invitationCode;
}
package com.wwdz.ch.admin.impl; package com.wwdz.ch.admin.impl;
import com.github.pagehelper.PageInfo;
import com.wwdz.ch.admin.entity.vo.InvitationCodeVo;
import com.wwdz.ch.admin.entity.vo.InviteRecordVo;
import com.wwdz.ch.admin.service.InvitationCodeService; import com.wwdz.ch.admin.service.InvitationCodeService;
import com.wwdz.ch.admin.service.InviteRecordService;
import com.wwdz.ch.core.consts.InvitationCodeStateEnum;
import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.core.util.CharUtil; import com.wwdz.ch.core.util.CharUtil;
import com.wwdz.ch.db.dao.InvitationCodeDao; import com.wwdz.ch.db.dao.InvitationCodeDao;
import com.wwdz.ch.db.domain.InvitationCode; import com.wwdz.ch.db.domain.InvitationCode;
import com.wwdz.ch.db.dto.request.InvitationCodeRequestDto; import com.wwdz.ch.db.dto.request.InvitationCodeRequestDto;
import com.wwdz.ch.db.dto.request.InviteRecordRequestDto;
import com.xxdxxs.utils.DateUtils;
import com.xxdxxs.utils.EntityMapper; import com.xxdxxs.utils.EntityMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
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 org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.*;
import java.util.Date;
import java.util.List;
@Service @Service
public class InvitationCodeServiceImpl implements InvitationCodeService { public class InvitationCodeServiceImpl implements InvitationCodeService {
...@@ -23,6 +30,11 @@ public class InvitationCodeServiceImpl implements InvitationCodeService { ...@@ -23,6 +30,11 @@ public class InvitationCodeServiceImpl implements InvitationCodeService {
@Autowired @Autowired
InvitationCodeDao invitationCodeDao; InvitationCodeDao invitationCodeDao;
@Autowired
InviteRecordService inviteRecordService;
@Autowired
CacheUtil cacheUtil;
@Override @Override
public Result create(InvitationCodeRequestDto invitationCodeRequestDto) { public Result create(InvitationCodeRequestDto invitationCodeRequestDto) {
...@@ -30,6 +42,8 @@ public class InvitationCodeServiceImpl implements InvitationCodeService { ...@@ -30,6 +42,8 @@ public class InvitationCodeServiceImpl implements InvitationCodeService {
Date now = new Date(); Date now = new Date();
InvitationCode invitationCode = new InvitationCode(); InvitationCode invitationCode = new InvitationCode();
EntityMapper.copyAttribute(invitationCodeRequestDto, invitationCode); EntityMapper.copyAttribute(invitationCodeRequestDto, invitationCode);
invitationCode.setEffectiveStartTime(DateUtils.parseString(invitationCodeRequestDto.getEffectiveStartTime()));
invitationCode.setEffectiveEndTime(DateUtils.parseString(invitationCodeRequestDto.getEffectiveEndTime()));
invitationCode.setCreateTime(now); invitationCode.setCreateTime(now);
invitationCode.setUpdateTime(now); invitationCode.setUpdateTime(now);
String code = CharUtil.getInvitationCode(6); String code = CharUtil.getInvitationCode(6);
...@@ -74,20 +88,46 @@ public class InvitationCodeServiceImpl implements InvitationCodeService { ...@@ -74,20 +88,46 @@ public class InvitationCodeServiceImpl implements InvitationCodeService {
@Override @Override
public Result findByPage(InvitationCodeRequestDto invitationCodeRequestDto) { public Result findByPage(InvitationCodeRequestDto invitationCodeRequestDto) {
return null; try {
PageInfo<InvitationCode> pageInfo = invitationCodeDao.findByPage(invitationCodeRequestDto);
List<InvitationCodeVo> invitationCodeVoList = new ArrayList<>();
List<InvitationCode> invitationCodeList = pageInfo.getList();
invitationCodeList.forEach(invitationCode -> {
InvitationCodeVo invitationCodeVo = new InvitationCodeVo();
EntityMapper.copyAttribute(invitationCode, invitationCodeVo);
invitationCodeVo.setStateName(InvitationCodeStateEnum.getNameByCode(invitationCode.getState()));
invitationCodeVoList.add(invitationCodeVo);
});
return Result.success(PageSearchResult.of(pageInfo, invitationCodeVoList));
} catch (Exception e) {
logger.error("查询列表出错 : {}", e);
}
return Result.failed();
} }
@Override @Override
public Result findDetails(InvitationCodeRequestDto invitationCodeRequestDto) { public Result findDetails(InvitationCodeRequestDto invitationCodeRequestDto) {
try { try {
Map<String, Object> map = new HashMap<>();
List<InvitationCode> list = invitationCodeDao.findList(invitationCodeRequestDto); List<InvitationCode> list = invitationCodeDao.findList(invitationCodeRequestDto);
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
return Result.failed("邀请码不存在"); return Result.failed("邀请码不存在");
} }
InvitationCode invitationCode = list.get(0); InvitationCode invitationCode = list.get(0);
return null; InvitationCodeVo invitationCodeVo = new InvitationCodeVo();
EntityMapper.copyAttribute(invitationCode, invitationCodeVo);
invitationCodeVo.setApplicantName(cacheUtil.getAppletUserNameById(invitationCode.getApplicant()));
invitationCodeVo.setCreatorName(cacheUtil.getSystemUserNameById(invitationCodeVo.getCreator()));
invitationCodeVo.setStateName(InvitationCodeStateEnum.getNameByCode(invitationCode.getState()));
InviteRecordRequestDto inviteRecordRequestDto = new InviteRecordRequestDto();
List<InviteRecordVo> inviteRecordVoList = inviteRecordService.findList(inviteRecordRequestDto);
map.put("invitationCodeVo", invitationCodeVo);
map.put("record", inviteRecordVoList);
map.put("usedNum", inviteRecordVoList.size());
return Result.success(map);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); logger.error("查询邀请码明细错误:{}", e);
} }
return Result.failed();
} }
} }
package com.wwdz.ch.admin.impl; package com.wwdz.ch.admin.impl;
import com.wwdz.ch.admin.entity.vo.InviteRecordVo;
import com.wwdz.ch.admin.service.InviteRecordService; import com.wwdz.ch.admin.service.InviteRecordService;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.db.dao.InvitationCodeDao; import com.wwdz.ch.db.dao.InvitationCodeDao;
import com.wwdz.ch.db.dao.InviteRecordDao; import com.wwdz.ch.db.dao.InviteRecordDao;
import com.wwdz.ch.db.domain.InvitationCode; import com.wwdz.ch.db.domain.InvitationCode;
...@@ -14,6 +16,9 @@ import org.slf4j.LoggerFactory; ...@@ -14,6 +16,9 @@ import org.slf4j.LoggerFactory;
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 org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
...@@ -26,45 +31,26 @@ public class InviteRecordServiceImpl implements InviteRecordService { ...@@ -26,45 +31,26 @@ public class InviteRecordServiceImpl implements InviteRecordService {
InviteRecordDao inviteRecordDao; InviteRecordDao inviteRecordDao;
@Autowired @Autowired
InvitationCodeDao invitationCodeDao; CacheUtil cacheUtil;
@Override @Override
public Result create(InviteRecordRequestDto dto) { public List<InviteRecordVo> findList(InviteRecordRequestDto dto) {
try { try {
//查询邀请码信息 List<InviteRecordVo> inviteRecordVoList = new ArrayList<>();
InvitationCodeRequestDto invitationCodeRequestDto = new InvitationCodeRequestDto(); List<InviteRecord> inviteRecordList = inviteRecordDao.findList(dto);
invitationCodeRequestDto.setCode(dto.getInvitationCode()); inviteRecordList.forEach(inviteRecord -> {
List<InvitationCode> invitationCodeList = invitationCodeDao.findList(invitationCodeRequestDto); InviteRecordVo inviteRecordVo = new InviteRecordVo();
if (CollectionUtils.isEmpty(invitationCodeList)) { EntityMapper.copyAttribute(inviteRecord, inviteRecordVo);
return Result.failed("邀请码错误"); inviteRecordVo.setInviteeName(cacheUtil.getAppletUserNameById(inviteRecordVo.getInvitee()));
} inviteRecordVo.setInviterName(cacheUtil.getAppletUserNameById(inviteRecordVo.getInviter()));
InvitationCode invitationCode = invitationCodeList.get(0); inviteRecordVoList.add(inviteRecordVo);
});
InviteRecord inviteRecord = new InviteRecord(); return inviteRecordVoList;
EntityMapper.copyAttribute(dto, inviteRecord);
inviteRecord.setCreateTime(new Date());
//邀请人
inviteRecord.setInviter(invitationCode.getApplicant());
inviteRecordDao.create(inviteRecord);
return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("邀请码使用失败:{}", e); logger.error("查询邀请码使用记录错误:{}", e);
}
return Result.failed("使用邀请码失败");
}
@Override
public Result isExisted(String phone) {
return null;
} }
return Collections.EMPTY_LIST;
@Override
public Result findList(InviteRecordRequestDto dto) {
return null;
} }
@Override
public Result checkCode(InviteRecordRequestDto dto) {
return null;
}
} }
package com.wwdz.ch.admin.service; package com.wwdz.ch.admin.service;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.admin.entity.vo.InviteRecordVo;
import com.wwdz.ch.db.dto.request.InviteRecordRequestDto; import com.wwdz.ch.db.dto.request.InviteRecordRequestDto;
import java.util.List;
public interface InviteRecordService { public interface InviteRecordService {
Result create(InviteRecordRequestDto dto); List<InviteRecordVo> findList(InviteRecordRequestDto dto);
Result isExisted(String phone);
Result findList(InviteRecordRequestDto dto);
/**
* 校验邀请码
* @param dto
* @return
*/
Result checkCode(InviteRecordRequestDto dto);
} }
...@@ -2,11 +2,11 @@ package com.wwdz.ch.core.consts; ...@@ -2,11 +2,11 @@ package com.wwdz.ch.core.consts;
public enum InvitationCodeStateEnum { public enum InvitationCodeStateEnum {
Not_used(0, "未使用"), NOT_USED(0, "未使用"),
part_used(1, "部分使用"), PART_USED(1, "部分使用"),
all_used(2, "全部使用"), ALL_USED(2, "全部使用"),
expired(3, "已过期"), EXPIRED(3, "已过期"),
invalid(6, "已失效"), INVALID(6, "已失效"),
; ;
private int code; private int code;
......
package com.wwdz.ch.core.type;
import com.github.pagehelper.PageInfo;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.List;
@Data
public class PageSearchResult<T> implements Entity {
private Long total;
private Integer pageSize;
private Integer pageIndex;
private List<T> dataList;
private Object appendObject;
public PageSearchResult(){};
private PageSearchResult(PageInfo<T> pageInfo) {
this.total = pageInfo.getTotal();
this.pageSize = pageInfo.getPageSize();
this.pageIndex = pageInfo.getPageNum();
this.dataList = pageInfo.getList();
}
private PageSearchResult(PageInfo pageInfo, List<T> list) {
this.total = pageInfo.getTotal();
this.pageSize = pageInfo.getPageSize();
this.pageIndex = pageInfo.getPageNum();
this.dataList = list;
}
public static <T> PageSearchResult of(PageInfo pageInfo) {
return new PageSearchResult(pageInfo);
}
/**
* 只获取pageInfo的分页信息,数据集合经过逻辑处理后生成一个新的list使用此方式创建
* @param pageInfo
* @param list
*/
public static <T> PageSearchResult of(PageInfo pageInfo, List<T> list) {
return new PageSearchResult(pageInfo, list);
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getPageIndex() {
return pageIndex;
}
public void setPageIndex(Integer pageIndex) {
this.pageIndex = pageIndex;
}
public List<T> getDataList() {
return dataList;
}
public void setDataList(List<T> dataList) {
this.dataList = dataList;
}
}
package com.wwdz.ch.core.util;
import com.github.benmanes.caffeine.cache.AsyncLoadingCache;
import com.github.benmanes.caffeine.cache.Caffeine;
import com.wwdz.ch.db.dao.dts.DtsAdminDao;
import com.wwdz.ch.db.dao.dts.DtsUserDao;
import com.wwdz.ch.db.domain.Admin;
import com.wwdz.ch.db.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Component
public class CacheUtil {
@Autowired
DtsAdminDao dtsAdminDao;
@Autowired
DtsUserDao dtsUserDao;
public String getAppletUserNameById(long key) {
try {
return appletUserCache.get(key).get(3, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String getSystemUserNameById(int key) {
try {
return systemUserCache.get(key).get(5, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 小程序会员缓存
*/
public AsyncLoadingCache<Long, String> appletUserCache = Caffeine.newBuilder()
.maximumSize(5000)
.expireAfterWrite(13, TimeUnit.MINUTES)
.buildAsync(k -> getAppletUserList(k));
/**
* 后台用户缓存
*/
public AsyncLoadingCache<Integer, String> systemUserCache = Caffeine.newBuilder()
.maximumSize(500)
.expireAfterWrite(30, TimeUnit.MINUTES)
.buildAsync(k -> getSystemUserList(k));
/**
* 查询小程序会员
*
* @return
*/
public String getAppletUserList(long key) {
List<User> userList = dtsUserDao.findAll();
Map<Long, String> map = userList.stream().collect(Collectors.toMap(User::getId, User::getNickname, (k1, k2) -> k2));
return map.get(key);
}
/**
* 查询后台用户
*
* @return
*/
public String getSystemUserList(Integer key) {
List<Admin> adminList = dtsAdminDao.findAll();
Map<Integer, String> map = adminList.stream().collect(Collectors.toMap(Admin::getId, Admin::getUsername, (k1, k2) -> k2));
return map.get(key);
}
}
...@@ -69,4 +69,6 @@ public interface UserDao { ...@@ -69,4 +69,6 @@ public interface UserDao {
* @return * @return
*/ */
boolean isExistedByMobile(String beforeMobile, String afterMobile); boolean isExistedByMobile(String beforeMobile, String afterMobile);
} }
...@@ -5,6 +5,9 @@ import com.wwdz.ch.db.domain.Admin; ...@@ -5,6 +5,9 @@ import com.wwdz.ch.db.domain.Admin;
import java.util.List; import java.util.List;
public interface DtsAdminDao { public interface DtsAdminDao {
List<Admin> findAll();
List<Admin> findAdmin(String username); List<Admin> findAdmin(String username);
Admin findAdmin(Integer id); Admin findAdmin(Integer id);
......
...@@ -29,6 +29,8 @@ public interface DtsUserDao { ...@@ -29,6 +29,8 @@ public interface DtsUserDao {
List<User> queryByOpenid(String openid); List<User> queryByOpenid(String openid);
List<User> findAll();
void deleteById(Long id); void deleteById(Long id);
List<DayStatis> recentCount(int statisDaysRang); List<DayStatis> recentCount(int statisDaysRang);
......
...@@ -21,12 +21,12 @@ public class InvitationCodeRequestDto extends BaseRequestDto implements Entity { ...@@ -21,12 +21,12 @@ public class InvitationCodeRequestDto extends BaseRequestDto implements Entity {
/** /**
* 有效期起始时间 * 有效期起始时间
*/ */
private Date effectiveStartTime; private String effectiveStartTime;
/** /**
* 有效期结束时间 * 有效期结束时间
*/ */
private Date effectiveEndTime; private String effectiveEndTime;
/** /**
* 可使用的人数 * 可使用的人数
......
...@@ -19,6 +19,12 @@ public class DtsAdminDaoImpl implements DtsAdminDao { ...@@ -19,6 +19,12 @@ public class DtsAdminDaoImpl implements DtsAdminDao {
@Resource @Resource
private AdminMapper adminMapper; private AdminMapper adminMapper;
@Override
public List<Admin> findAll() {
AdminExample example = new AdminExample();
return adminMapper.selectByExample(example);
}
@Override @Override
public List<Admin> findAdmin(String username) { public List<Admin> findAdmin(String username) {
AdminExample example = new AdminExample(); AdminExample example = new AdminExample();
......
...@@ -126,6 +126,11 @@ public class DtsUserDaoImpl implements DtsUserDao { ...@@ -126,6 +126,11 @@ public class DtsUserDaoImpl implements DtsUserDao {
} }
@Override
public List<User> findAll() {
UserExample example = new UserExample();
return userMapper.selectByExample(example);
}
@Override @Override
public List<DayStatis> recentCount(int statisDaysRang) { public List<DayStatis> recentCount(int statisDaysRang) {
......
...@@ -41,17 +41,21 @@ public class InviteRecordServiceImpl implements InviteRecordService { ...@@ -41,17 +41,21 @@ public class InviteRecordServiceImpl implements InviteRecordService {
return Result.failed("邀请码错误"); return Result.failed("邀请码错误");
} }
InvitationCode invitationCode = invitationCodeList.get(0); InvitationCode invitationCode = invitationCodeList.get(0);
if (InvitationCodeStateEnum.invalid.getCode() == invitationCode.getState()) { if (InvitationCodeStateEnum.INVALID.getCode() == invitationCode.getState()) {
return Result.failed("邀请码已失效"); return Result.failed("邀请码已失效");
} }
if (InvitationCodeStateEnum.expired.getCode() == invitationCode.getState()) { if (InvitationCodeStateEnum.EXPIRED.getCode() == invitationCode.getState()) {
return Result.failed("邀请码已过期"); return Result.failed("邀请码已过期");
} }
if (InvitationCodeStateEnum.ALL_USED.getCode() == invitationCode.getState()) {
return Result.failed("邀请码使用人数已达上限");
}
Date effectEndTime = invitationCode.getEffectiveEndTime(); Date effectEndTime = invitationCode.getEffectiveEndTime();
Date now = new Date(); Date now = new Date();
int comparison = effectEndTime.compareTo(now); int comparison = effectEndTime.compareTo(now);
if (comparison <= 0) { if (comparison <= 0) {
//设置邀请码状态为已过期
invitationCodeDao.updateState(dto.getInvitationCode(), InvitationCodeStateEnum.EXPIRED.getCode());
return Result.failed("邀请码已过期"); return Result.failed("邀请码已过期");
} }
...@@ -61,6 +65,16 @@ public class InviteRecordServiceImpl implements InviteRecordService { ...@@ -61,6 +65,16 @@ public class InviteRecordServiceImpl implements InviteRecordService {
//邀请人 //邀请人
inviteRecord.setInviter(invitationCode.getApplicant()); inviteRecord.setInviter(invitationCode.getApplicant());
inviteRecordDao.create(inviteRecord); inviteRecordDao.create(inviteRecord);
//检查邀请码是否使用人数已满
long usedNum = inviteRecordDao.countByCode(dto.getInvitationCode());
int enabledNum = invitationCode.getEnabledNum();
if (usedNum >= enabledNum) {
//设置邀请码状态为全部使用
invitationCodeDao.updateState(dto.getInvitationCode(), InvitationCodeStateEnum.ALL_USED.getCode());
} else {
invitationCodeDao.updateState(dto.getInvitationCode(), InvitationCodeStateEnum.PART_USED.getCode());
}
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("邀请码使用失败:{}", e); logger.error("邀请码使用失败:{}", e);
......
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