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

Commit ff0327fb authored by 张国柄's avatar 张国柄

~API:POS机、专业版:扫码记录;

parent aa279494
......@@ -59,6 +59,9 @@ public class AdamRedisConst {
public static final String SERIAL_NUMBER_MEMBER = PREFIX.concat("serial_no:");
// 专业版用户指定演出扫码记录KEY
public static final String CACHE_USER_PERFORMANCE_MARK = PREFIX.concat("c_u_p_m:");
/* ----------------------------------------------------------------- */
// public static final String LOCK_KEY_UMEMBER_NO = "adam:lk:member:no";
......
......@@ -28,12 +28,12 @@ public class PlatformAdamPosController {
PlatformAdamUserPosService platformAdamUserPosService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "扫一扫")
@ApiOperation(value = "POS扫一扫")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "用户QRCODE"),
})
@GetMapping(value = {"scanit"})
public ResponseDto<AdamPosScanitVo> scanit(@NotBlank(message = "参数有误") @RequestParam String code) {
return ResponseDto.success(platformAdamUserPosService.scanitProcess(code).desensitize());
return ResponseDto.success(platformAdamUserPosService.scanitProcess(code));
}
}
......@@ -26,7 +26,7 @@ public class PlatformAdamProController {
PlatformAdamUserProService platformAdamUserProService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "扫一扫")
@ApiOperation(value = "PRO扫一扫")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "pidco", value = "格式[用户QRCODE@演出ID]"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "pname", value = "演出名称"),
......
......@@ -3,76 +3,68 @@ package com.liquidnet.service.platform.service.impl.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.liquidnet.common.cache.redis.util.AbstractRedisUtil;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamPosScanitVo;
import com.liquidnet.service.adam.dto.vo.AdamProPerformMarkVo;
import com.liquidnet.service.adam.dto.vo.AdamProScanitVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUser;
import com.liquidnet.service.adam.entity.AdamUserInfo;
import com.liquidnet.service.adam.entity.AdamUserMember;
import com.liquidnet.service.adam.mapper.AdamUserInfoMapper;
import com.liquidnet.service.adam.mapper.AdamUserMapper;
import com.liquidnet.service.adam.mapper.AdamUserMemberMapper;
import com.liquidnet.service.platform.utils.ObjectUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
@Service
public class PlatformAdamUserPosService extends ServiceImpl<AdamUserInfoMapper, AdamUserInfo> {
@Autowired
private RedisDataSourceUtil redisDataSourceUtil;
@Autowired
private AdamUserMemberMapper adamUserMemberMapper;
@Autowired
private AdamUserMapper adamUserMapper;
// @Autowired
// private AdamUserMemberMapper adamUserMemberMapper;
// @Autowired
// private AdamUserMapper adamUserMapper;
public AdamPosScanitVo scanitProcess(String code) {
LambdaQueryWrapper<AdamUserInfo> userInfoLambdaQueryWrapper = Wrappers.lambdaQuery(AdamUserInfo.class);
userInfoLambdaQueryWrapper.eq(AdamUserInfo::getQrCode, code);
userInfoLambdaQueryWrapper.select(AdamUserInfo::getUid, AdamUserInfo::getNickname);
userInfoLambdaQueryWrapper.select(AdamUserInfo::getUid);
AdamUserInfo userInfo = this.getOne(userInfoLambdaQueryWrapper);
AdamPosScanitVo scanitVo = AdamPosScanitVo.getNew();
if (null != userInfo) {
LambdaQueryWrapper<AdamUser> adamUserLambdaQueryWrapper = Wrappers.lambdaQuery(AdamUser.class);
adamUserLambdaQueryWrapper.eq(AdamUser::getUid, userInfo.getUid());
adamUserLambdaQueryWrapper.eq(AdamUser::getState, 1);
// LambdaQueryWrapper<AdamUser> adamUserLambdaQueryWrapper = Wrappers.lambdaQuery(AdamUser.class);
// adamUserLambdaQueryWrapper.eq(AdamUser::getUid, userInfo.getUid());
// adamUserLambdaQueryWrapper.eq(AdamUser::getState, 1);
// adamUserLambdaQueryWrapper.select(AdamUser::getUid, AdamUser::getMobile);
// AdamUser user = adamUserMapper.selectOne(adamUserLambdaQueryWrapper);
AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil();
AdamUserInfoVo userInfoVo = (AdamUserInfoVo) redisAdamUtil.get(AdamRedisConst.INFO_USER.concat(userInfo.getUid()));
if (null != userInfoVo) {
scanitVo.setNickname(userInfoVo.getNickname());
scanitVo.setMobile(userInfoVo.getMobile());
scanitVo.setUid(userInfoVo.getUid());
adamUserLambdaQueryWrapper.select(AdamUser::getUid, AdamUser::getMobile);
AdamUser user = adamUserMapper.selectOne(adamUserLambdaQueryWrapper);
scanitVo.setNickname(userInfo.getNickname());
scanitVo.setMobile(user.getMobile());
scanitVo.setUid(user.getUid());
LambdaQueryWrapper<AdamUserMember> userMemberLambdaQueryWrapper = Wrappers.lambdaQuery(AdamUserMember.class);
userMemberLambdaQueryWrapper.eq(AdamUserMember::getUid, userInfo.getUid());
userMemberLambdaQueryWrapper.eq(AdamUserMember::getState, 1);
userMemberLambdaQueryWrapper.select(AdamUserMember::getUid,
AdamUserMember::getState,
AdamUserMember::getExpiryAt,
AdamUserMember::getCreatedAt,
AdamUserMember::getUpdatedAt
);
AdamUserMember userMember = adamUserMemberMapper.selectOne(userMemberLambdaQueryWrapper);
if (null == userMember) {
scanitVo.setStageMarker(0);
} else {
AdamUserMemberVo userMemberVo = AdamUserMemberVo.getNew().copy(userMember);
if (userMemberVo.isActive()) {
scanitVo.setStageMarker(userMemberVo.isOldMember() ? 10 : 11);
// LambdaQueryWrapper<AdamUserMember> userMemberLambdaQueryWrapper = Wrappers.lambdaQuery(AdamUserMember.class);
// userMemberLambdaQueryWrapper.eq(AdamUserMember::getUid, userInfo.getUid());
// userMemberLambdaQueryWrapper.eq(AdamUserMember::getState, 1);
// userMemberLambdaQueryWrapper.select(AdamUserMember::getUid,
// AdamUserMember::getState,
// AdamUserMember::getExpiryAt,
// AdamUserMember::getCreatedAt,
// AdamUserMember::getUpdatedAt
// );
// AdamUserMember userMember = adamUserMemberMapper.selectOne(userMemberLambdaQueryWrapper);
AdamUserMemberVo userMemberVo = (AdamUserMemberVo) redisAdamUtil.get(AdamRedisConst.INFO_USER_MEMBER.concat(userInfo.getUid()));
if (null == userMemberVo) {
scanitVo.setStageMarker(0);
} else {
scanitVo.setStageMarker(2);
if (userMemberVo.isActive()) {
scanitVo.setStageMarker(userMemberVo.isOldMember() ? 10 : 11);
} else {
scanitVo.setStageMarker(2);
}
}
}
}
return scanitVo;
......
package com.liquidnet.service.platform.service.impl.adam;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.common.cache.redis.util.AbstractRedisUtil;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.vo.AdamProPerformMarkVo;
import com.liquidnet.service.adam.dto.vo.AdamProScanitVo;
import com.liquidnet.service.adam.entity.AdamUser;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.entity.AdamUserInfo;
import com.liquidnet.service.adam.mapper.AdamUserInfoMapper;
import com.liquidnet.service.adam.mapper.AdamUserMapper;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.platform.utils.ObjectUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.time.LocalDate;
import java.util.ArrayList;
import java.time.LocalDateTime;
import java.util.*;
@Service
public class PlatformAdamUserProService extends ServiceImpl<AdamUserMapper, AdamUser> {
public class PlatformAdamUserProService extends ServiceImpl<AdamUserInfoMapper, AdamUserInfo> {
@Autowired
private RedisDataSourceUtil redisDataSourceUtil;
@Autowired
private AdamUserMapper adamUserMapper;
public AdamProScanitVo scanitProcess(String pid, String pna, String cod) {
LambdaQueryWrapper<AdamUserInfo> userInfoLambdaQueryWrapper = Wrappers.lambdaQuery(AdamUserInfo.class);
userInfoLambdaQueryWrapper.eq(AdamUserInfo::getQrCode, cod);
userInfoLambdaQueryWrapper.select(AdamUserInfo::getUid);
AdamUserInfo userInfo = this.getOne(userInfoLambdaQueryWrapper);
AdamProScanitVo scanitVo = AdamProScanitVo.getNew();
scanitVo.setNickname("nk");
scanitVo.setMobile("13700000000");
scanitVo.setStageMarker(11);
ArrayList<AdamProPerformMarkVo> performMarkVoArrayList = ObjectUtil.getAdamProPerformMarkVoArrayList();
AdamProPerformMarkVo performMarkVo = AdamProPerformMarkVo.getNew();
performMarkVo.setPid("1");
performMarkVo.setPname("aname");
performMarkVo.setTime(DateUtil.Formatter.yyyy_MM_dd.format(LocalDate.now()));
performMarkVo.setCount(1);
performMarkVoArrayList.add(performMarkVo);
scanitVo.setPerformMarkVos(performMarkVoArrayList);
if (null != userInfo) {
String uid = userInfo.getUid();
AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil();
AdamUserInfoVo userInfoVo = (AdamUserInfoVo) redisAdamUtil.get(AdamRedisConst.INFO_USER.concat(uid));
if (null != userInfoVo) {
scanitVo.setNickname(userInfoVo.getNickname());
scanitVo.setMobile(userInfoVo.getMobile());
AdamUserMemberVo userMemberVo = (AdamUserMemberVo) redisAdamUtil.get(AdamRedisConst.INFO_USER_MEMBER.concat(uid));
if (null == userMemberVo) {
scanitVo.setStageMarker(0);
} else {
if (userMemberVo.isActive()) {
scanitVo.setStageMarker(userMemberVo.isOldMember() ? 10 : 11);
} else {
scanitVo.setStageMarker(2);
}
}
this.performanceMarkProcessing(scanitVo, uid, pid, pna);
}
}
return scanitVo;
}
private void performanceMarkProcessing(AdamProScanitVo scanitVo, String uid, String pid, String pname) {
AbstractRedisUtil redisAdamUtil = redisDataSourceUtil.getRedisAdamUtil();
LocalDateTime now = LocalDateTime.now();
String rk = AdamRedisConst.CACHE_USER_PERFORMANCE_MARK.concat(uid);
String rkv = (String) redisAdamUtil.get(rk);
List<AdamProPerformMarkVo> performMarkVos = JsonUtils.fromJson(rkv, new TypeReference<List<AdamProPerformMarkVo>>() {});
if (!CollectionUtils.isEmpty(performMarkVos)) {
Optional<AdamProPerformMarkVo> optional = performMarkVos.stream().filter(vo -> vo.getPid().equals(pid)).findAny();
if (optional.isPresent()) {
AdamProPerformMarkVo proPerformMarkVo = optional.get();
performMarkVos.remove(proPerformMarkVo);
proPerformMarkVo.setTime(DateUtil.Formatter.yyyyMMddHHmmss.format(now));
proPerformMarkVo.setCount(proPerformMarkVo.getCount() + 1);
performMarkVos.add(proPerformMarkVo);
} else {
AdamProPerformMarkVo proPerformMarkVo = AdamProPerformMarkVo.getNew();
proPerformMarkVo.setPid(pid);
proPerformMarkVo.setPname(pname);
proPerformMarkVo.setTime(DateUtil.Formatter.yyyyMMddHHmmss.format(now));
proPerformMarkVo.setCount(1);
performMarkVos.add(proPerformMarkVo);
}
performMarkVos.sort(Comparator.comparing(AdamProPerformMarkVo::getTime).reversed());
Iterator<AdamProPerformMarkVo> iterator = performMarkVos.iterator();
while (iterator.hasNext()) {
AdamProPerformMarkVo next = iterator.next();
LocalDateTime time = DateUtil.Formatter.yyyyMMddHHmmss.parse(next.getTime());
if (null == time || time.plusDays(7).isBefore(now)) {
iterator.remove();
}
}
} else {
performMarkVos = ObjectUtil.getAdamProPerformMarkVoArrayList();
AdamProPerformMarkVo performMarkVo = AdamProPerformMarkVo.getNew();
performMarkVo.setPid(pid);
performMarkVo.setPname(pname);
performMarkVo.setTime(DateUtil.Formatter.yyyyMMddHHmmss.format(now));
performMarkVo.setCount(1);
performMarkVos.add(performMarkVo);
}
redisAdamUtil.set(rk, JsonUtils.toJson(performMarkVos), 864000);// 缓存时效10天
scanitVo.setPerformMarkVos(performMarkVos);
}
}
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