Commit c2d706b2 authored by zhangfeng's avatar zhangfeng

Merge branch 'refs/heads/feature_member_score' into dev

parents d05dbe2c aa27c766
...@@ -55,7 +55,7 @@ public class RecommendStrategy extends AbstractScoreRuleStrategy { ...@@ -55,7 +55,7 @@ public class RecommendStrategy extends AbstractScoreRuleStrategy {
map.put("userId", userId); map.put("userId", userId);
map.put("userNameZh", message.getUserNameZh()); map.put("userNameZh", message.getUserNameZh());
map.put("userNameEn", message.getUserNameEn()); map.put("userNameEn", message.getUserNameEn());
String desensitizedPhoneNumber = message.getPhone().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); String desensitizedPhoneNumber = memberUserDO.getMobile().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
map.put("phone", desensitizedPhoneNumber); map.put("phone", desensitizedPhoneNumber);
memberUserScoreApi.operateScore(MemberUserScoreOperateReqDTO.builder() memberUserScoreApi.operateScore(MemberUserScoreOperateReqDTO.builder()
...@@ -65,6 +65,7 @@ public class RecommendStrategy extends AbstractScoreRuleStrategy { ...@@ -65,6 +65,7 @@ public class RecommendStrategy extends AbstractScoreRuleStrategy {
.ruleId(scoreRuleDO.getId()) .ruleId(scoreRuleDO.getId())
.uniqueId(userId + "_" + message.getRecommendUserId()) .uniqueId(userId + "_" + message.getRecommendUserId())
.expireDays(scoreRuleDO.getScorePeriod()) .expireDays(scoreRuleDO.getScorePeriod())
.extParam(map)
.build()); .build());
} catch (Exception e) { } catch (Exception e) {
log.error("Recommend listener: operateScore error", e); log.error("Recommend listener: operateScore error", e);
......
...@@ -27,8 +27,8 @@ public class RegisterStrategy extends AbstractScoreRuleStrategy { ...@@ -27,8 +27,8 @@ public class RegisterStrategy extends AbstractScoreRuleStrategy {
@Resource @Resource
private MemberUserService memberUserService; private MemberUserService memberUserService;
public RegisterStrategy(ScoreRuleService scoreRuleService, MemberUserScoreLogService memberUserScoreLogService, MemberUserService memberUserService,MemberUserScoreApi memberUserScoreApi) { public RegisterStrategy(ScoreRuleService scoreRuleService, MemberUserScoreLogService memberUserScoreLogService, MemberUserService memberUserService, MemberUserScoreApi memberUserScoreApi) {
super(scoreRuleService, memberUserScoreLogService, memberUserService,memberUserScoreApi); super(scoreRuleService, memberUserScoreLogService, memberUserService, memberUserScoreApi);
} }
@Override @Override
...@@ -68,6 +68,7 @@ public class RegisterStrategy extends AbstractScoreRuleStrategy { ...@@ -68,6 +68,7 @@ public class RegisterStrategy extends AbstractScoreRuleStrategy {
.ruleId(scoreRuleDO.getId()) .ruleId(scoreRuleDO.getId())
.uniqueId(String.valueOf(userId)) .uniqueId(String.valueOf(userId))
.expireDays(scoreRuleDO.getScorePeriod()) .expireDays(scoreRuleDO.getScorePeriod())
.extParam(map)
.build()); .build());
} catch (Exception e) { } catch (Exception e) {
log.error("Register listener: operateScore error", e); log.error("Register listener: operateScore error", e);
......
...@@ -27,6 +27,7 @@ import org.springframework.validation.annotation.Validated; ...@@ -27,6 +27,7 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.MEMBER_ID_IS_NULL; import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.MEMBER_ID_IS_NULL;
...@@ -47,7 +48,7 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco ...@@ -47,7 +48,7 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco
@Resource @Resource
private ScoreRuleService scoreRuleService; private ScoreRuleService scoreRuleService;
@Resource @Resource
RedeemRewardApi redeemRewardApi; private RedeemRewardApi redeemRewardApi;
@Override @Override
...@@ -90,67 +91,94 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco ...@@ -90,67 +91,94 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco
public List<AppMemberUserScoreLogRespVO> getUserScoreLogList(AppMemberUserIdQueryVO query) { public List<AppMemberUserScoreLogRespVO> getUserScoreLogList(AppMemberUserIdQueryVO query) {
List<MemberUserScoreLogDO> userScoreLogDOS = userScoreLogMapper.selectList("member_id", query.getId()); List<MemberUserScoreLogDO> userScoreLogDOS = userScoreLogMapper.selectList("member_id", query.getId());
if (userScoreLogDOS == null || userScoreLogDOS.isEmpty()) { if (userScoreLogDOS == null || userScoreLogDOS.isEmpty()) {
return Collections.EMPTY_LIST; return Collections.emptyList();
} }
ArrayList<AppMemberUserScoreLogRespVO> appMemberUserScoreLogRespVOS = new ArrayList<>(); Map<Long, MemberUserScoreLogDO> scoreLogDOMap = userScoreLogDOS.stream()
.collect(Collectors.toMap(MemberUserScoreLogDO::getId, log -> log));
List<AppMemberUserScoreLogRespVO> appMemberUserScoreLogRespVOS = new ArrayList<>();
for (MemberUserScoreLogDO userScoreLogDO : userScoreLogDOS) { for (MemberUserScoreLogDO userScoreLogDO : userScoreLogDOS) {
if (userScoreLogDO.getSourceType() == ScoreSourceTypeEnum.SYSTEM_EXPIRED.getValue()) { if (userScoreLogDO.getSourceType() == ScoreSourceTypeEnum.SYSTEM_EXPIRED.getValue()) {
HashMap hashMap = JsonUtils.parseObject(userScoreLogDO.getExtParam(), HashMap.class); Map extParams = JsonUtils.parseObject(userScoreLogDO.getExtParam(), Map.class);
Object scoreLogIds = hashMap.get("scoreLogIds"); List<Long> scoreLogIdList = JsonUtils.parseArray(extParams.get("scoreLogIds").toString(), Long.class);
List<Long> scoreLogIdList = JsonUtils.parseArray(scoreLogIds.toString(), Long.class);
for (Long scoreLogId : scoreLogIdList) { scoreLogIdList.stream()
for (MemberUserScoreLogDO scoreLogDO : userScoreLogDOS) { .map(scoreLogDOMap::get)
if (scoreLogDO.getId().equals(scoreLogId) && scoreLogDO.getRuleId() != null) { .filter(scoreLogDO -> scoreLogDO != null && scoreLogDO.getRuleId() != null)
.forEach(scoreLogDO -> {
ScoreRuleBackDetailVO scoreRule = scoreRuleService.getScoreRule(scoreLogDO.getRuleId()); ScoreRuleBackDetailVO scoreRule = scoreRuleService.getScoreRule(scoreLogDO.getRuleId());
if (scoreRule != null) { if (scoreRule != null) {
AppMemberUserScoreLogRespVO appMemberUserScoreLogRespVO = appMemberUserScoreLogRespVOS.add(createScoreLogRespVO(userScoreLogDO, scoreLogDO, scoreRule));
new AppMemberUserScoreLogRespVO(userScoreLogDO.getId(),userScoreLogDO.getScoreCount()
,"-",scoreLogDO.getSourceType()
,DictFrameworkUtils.getDictDataFromCache("member_score_source", scoreLogDO.getSourceType().toString()).getLabel()
,DictFrameworkUtils.getDictDataFromCache("member_score_source", scoreLogDO.getSourceType().toString()).getLabelEn()
,userScoreLogDO.getCreateTime()
,scoreRule.getDescEn()
,scoreRule.getDescZh()
,userScoreLogDO.getScoreCount()
,true
);
appMemberUserScoreLogRespVOS.add(appMemberUserScoreLogRespVO);
}
}
}
}
continue;
} }
});
} else {
setScoreRuleLogDetail(userScoreLogDO, appMemberUserScoreLogRespVOS); setScoreRuleLogDetail(userScoreLogDO, appMemberUserScoreLogRespVOS);
} }
}
return appMemberUserScoreLogRespVOS; return appMemberUserScoreLogRespVOS;
} }
private void setScoreRuleLogDetail(MemberUserScoreLogDO userScoreLogDO, ArrayList<AppMemberUserScoreLogRespVO> appMemberUserScoreLogRespVOS) { private AppMemberUserScoreLogRespVO createScoreLogRespVO(MemberUserScoreLogDO userScoreLogDO,
MemberUserScoreLogDO scoreLogDO,
ScoreRuleBackDetailVO scoreRule) {
return new AppMemberUserScoreLogRespVO(
userScoreLogDO.getId(),
userScoreLogDO.getScoreCount(),
"-",
scoreLogDO.getSourceType(),
DictFrameworkUtils.getDictDataFromCache("member_score_source", scoreLogDO.getSourceType().toString()).getLabel(),
DictFrameworkUtils.getDictDataFromCache("member_score_source", scoreLogDO.getSourceType().toString()).getLabelEn(),
userScoreLogDO.getCreateTime(),
scoreRule.getDescEn(),
scoreRule.getDescZh(),
null,
true
);
}
private void setScoreRuleLogDetail(MemberUserScoreLogDO userScoreLogDO, List<AppMemberUserScoreLogRespVO> appMemberUserScoreLogRespVOS) {
AppMemberUserScoreLogRespVO appMemberUserScoreLogRespVO = new AppMemberUserScoreLogRespVO(); AppMemberUserScoreLogRespVO appMemberUserScoreLogRespVO = new AppMemberUserScoreLogRespVO();
appMemberUserScoreLogRespVO.setId(userScoreLogDO.getId()); appMemberUserScoreLogRespVO.setId(userScoreLogDO.getId());
appMemberUserScoreLogRespVO.setSourceType(userScoreLogDO.getSourceType()); appMemberUserScoreLogRespVO.setSourceType(userScoreLogDO.getSourceType());
appMemberUserScoreLogRespVO.setScoreCount(userScoreLogDO.getScoreCount()); appMemberUserScoreLogRespVO.setScoreCount(userScoreLogDO.getScoreCount());
appMemberUserScoreLogRespVO.setOperateType(userScoreLogDO.getOperateType() == 1 ? "+" : "-"); appMemberUserScoreLogRespVO.setOperateType(userScoreLogDO.getOperateType() == 1 ? "+" : "-");
appMemberUserScoreLogRespVO.setCreateTime(userScoreLogDO.getCreateTime()); appMemberUserScoreLogRespVO.setCreateTime(userScoreLogDO.getCreateTime());
// 增加积分日志
if (Objects.equals(userScoreLogDO.getOperateType(), ScoreOperateTypeEnum.ADD.getValue())) { // 获取通用的字典标签
String sourceType = userScoreLogDO.getSourceType().toString();
String sourceTypeZh = DictFrameworkUtils.getDictDataFromCache("member_score_source", sourceType).getLabel();
String sourceTypeEn = DictFrameworkUtils.getDictDataFromCache("member_score_source", sourceType).getLabelEn();
appMemberUserScoreLogRespVO.setSourceTypeZh(sourceTypeZh);
appMemberUserScoreLogRespVO.setSourceTypeEn(sourceTypeEn);
// 判断是增加还是减少积分操作
boolean isAddOperation = Objects.equals(userScoreLogDO.getOperateType(), ScoreOperateTypeEnum.ADD.getValue());
if (isAddOperation) {
handleAddScoreLogDetail(userScoreLogDO, appMemberUserScoreLogRespVO);
} else {
handleReduceScoreLogDetail(userScoreLogDO, appMemberUserScoreLogRespVO);
}
appMemberUserScoreLogRespVOS.add(appMemberUserScoreLogRespVO);
}
private void handleAddScoreLogDetail(MemberUserScoreLogDO userScoreLogDO, AppMemberUserScoreLogRespVO appMemberUserScoreLogRespVO) {
switch (userScoreLogDO.getSourceType()) { switch (userScoreLogDO.getSourceType()) {
// 人工操作
case 1: case 1:
appMemberUserScoreLogRespVO.setSourceTypeZh(DictFrameworkUtils.getDictDataFromCache("member_score_source", "1").getLabel());
appMemberUserScoreLogRespVO.setSourceTypeEn(DictFrameworkUtils.getDictDataFromCache("member_score_source", "1").getLabelEn());
appMemberUserScoreLogRespVO.setDescZh("人工积分"); appMemberUserScoreLogRespVO.setDescZh("人工积分");
appMemberUserScoreLogRespVO.setDescEn("Manually add points"); appMemberUserScoreLogRespVO.setDescEn("manually add points");
break;
case 4:
handleRedeemDetail(userScoreLogDO, appMemberUserScoreLogRespVO);
break; break;
// 活动积分
case 5: case 5:
case 6: case 6:
case 7: case 7:
case 8: case 8:
ScoreSourceTypeEnum scoreSourceTypeEnum = ScoreSourceTypeEnum.parseByValue(userScoreLogDO.getSourceType());
appMemberUserScoreLogRespVO.setSourceTypeZh(DictFrameworkUtils.getDictDataFromCache("member_score_source", String.valueOf(scoreSourceTypeEnum.getValue())).getLabel());
appMemberUserScoreLogRespVO.setSourceTypeEn(DictFrameworkUtils.getDictDataFromCache("member_score_source", String.valueOf(scoreSourceTypeEnum.getValue())).getLabelEn());
ScoreRuleBackDetailVO scoreRule = scoreRuleService.getScoreRule(userScoreLogDO.getRuleId()); ScoreRuleBackDetailVO scoreRule = scoreRuleService.getScoreRule(userScoreLogDO.getRuleId());
if (scoreRule != null) { if (scoreRule != null) {
appMemberUserScoreLogRespVO.setDescEn(scoreRule.getDescEn()); appMemberUserScoreLogRespVO.setDescEn(scoreRule.getDescEn());
...@@ -158,23 +186,24 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco ...@@ -158,23 +186,24 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco
} }
break; break;
} }
} else { }
// 减少积分日志
private void handleReduceScoreLogDetail(MemberUserScoreLogDO userScoreLogDO, AppMemberUserScoreLogRespVO appMemberUserScoreLogRespVO) {
switch (userScoreLogDO.getSourceType()) { switch (userScoreLogDO.getSourceType()) {
// 人工操作
case 1: case 1:
appMemberUserScoreLogRespVO.setSourceTypeZh(DictFrameworkUtils.getDictDataFromCache("member_score_source", "1").getLabel());
appMemberUserScoreLogRespVO.setSourceTypeEn(DictFrameworkUtils.getDictDataFromCache("member_score_source", "1").getLabelEn());
appMemberUserScoreLogRespVO.setDescZh("人工积分"); appMemberUserScoreLogRespVO.setDescZh("人工积分");
appMemberUserScoreLogRespVO.setDescEn("Manually reduce points"); appMemberUserScoreLogRespVO.setDescEn("manually reduce points");
break; break;
// 兑换
case 2: case 2:
appMemberUserScoreLogRespVO.setSourceTypeZh(DictFrameworkUtils.getDictDataFromCache("member_score_source", "2").getLabel()); handleRedeemDetail(userScoreLogDO, appMemberUserScoreLogRespVO);
appMemberUserScoreLogRespVO.setSourceTypeEn(DictFrameworkUtils.getDictDataFromCache("member_score_source", "2").getLabelEn()); break;
// 查询兑换记录 }
Map<String, Long> extParam = JsonUtils.parseObject(userScoreLogDO.getExtParam(), HashMap.class); }
Long redeemId = extParam.get("redeemId");
private void handleRedeemDetail(MemberUserScoreLogDO userScoreLogDO, AppMemberUserScoreLogRespVO appMemberUserScoreLogRespVO) {
HashMap extParam = JsonUtils.parseObject(userScoreLogDO.getExtParam(), HashMap.class);
Long redeemId = extParam.get("redeemId") != null ? Long.valueOf(extParam.get("redeemId").toString()) : null;
if (redeemId != null) { if (redeemId != null) {
RedeemDetailForUserDTO redeemDetailForUser = redeemRewardApi.getRedeemDetailForUser(redeemId); RedeemDetailForUserDTO redeemDetailForUser = redeemRewardApi.getRedeemDetailForUser(redeemId);
if (redeemDetailForUser != null) { if (redeemDetailForUser != null) {
...@@ -183,9 +212,5 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco ...@@ -183,9 +212,5 @@ public class MemberUserScoreLogServiceImpl extends AbstractService<MemberUserSco
appMemberUserScoreLogRespVO.setDescEn(redeemDetailForUser.getRewardNameEn()); appMemberUserScoreLogRespVO.setDescEn(redeemDetailForUser.getRewardNameEn());
} }
} }
break;
}
}
appMemberUserScoreLogRespVOS.add(appMemberUserScoreLogRespVO);
} }
} }
...@@ -89,9 +89,7 @@ public class RewardController { ...@@ -89,9 +89,7 @@ public class RewardController {
PageResult<RewardDO> pageResult = rewardService.getPage(query, page); PageResult<RewardDO> pageResult = rewardService.getPage(query, page);
PageResult<RewardBackVO> rewardBackVOPageResult = RewardConvert.INSTANCE.convertPage(pageResult); PageResult<RewardBackVO> rewardBackVOPageResult = RewardConvert.INSTANCE.convertPage(pageResult);
// 转换nodeId和points // 转换nodeId和points
rewardBackVOPageResult.getList().forEach(rewardBackVO -> { rewardBackVOPageResult.getList().forEach(rewardBackVO -> rewardBackVO.getNodeIds().add(new RewardBackVO.NodeAndPoints(rewardBackVO.getNodeId(), rewardBackVO.getPointsRequire())));
rewardBackVO.getNodeIds().add(new RewardBackVO.NodeAndPoints(rewardBackVO.getNodeId(), rewardBackVO.getPointsRequire()));
});
return success(rewardBackVOPageResult); return success(rewardBackVOPageResult);
} }
......
...@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.reward.enums.RewardStatusEnum; ...@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.reward.enums.RewardStatusEnum;
import cn.iocoder.yudao.module.reward.vo.reward.*; import cn.iocoder.yudao.module.reward.vo.reward.*;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -190,7 +191,7 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i ...@@ -190,7 +191,7 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i
//礼品ID //礼品ID
lambdaQuery.eqIfPresent(RewardDO::getCode, query.getCode()); lambdaQuery.eqIfPresent(RewardDO::getCode, query.getCode());
//礼品名称,模糊匹配三种语言 //礼品名称,模糊匹配三种语言
if (query.getTitle() != null) { if (StringUtils.isNotBlank(query.getTitle())) {
lambdaQuery.and(wrapper -> lambdaQuery.and(wrapper ->
wrapper.like(RewardDO::getTitleZh, query.getTitle()) wrapper.like(RewardDO::getTitleZh, query.getTitle())
.or() .or()
...@@ -207,10 +208,10 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i ...@@ -207,10 +208,10 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i
} }
//兑换网点id,领取方式,状态 //兑换网点id,领取方式,状态
lambdaQuery.eqIfPresent(RewardDO::getNodeId, query.getNodeId()) lambdaQuery.eqIfPresent(RewardDO::getNodeId, query.getNodeId())
.eqIfPresent(RewardDO::getPickMethod, query.getPickMethod()) .eq(StringUtils.isNotBlank(query.getPickMethod()), RewardDO::getPickMethod, query.getPickMethod())
.eqIfPresent(RewardDO::getStatus, query.getStatus()); .eqIfPresent(RewardDO::getStatus, query.getStatus());
//备注,模糊匹配三种语言 //备注,模糊匹配三种语言
if (query.getRemark() != null) { if (StringUtils.isNotBlank(query.getRemark())) {
lambdaQuery.and(wrapper -> lambdaQuery.and(wrapper ->
wrapper.like(RewardDO::getRemarkZh, query.getRemark()) wrapper.like(RewardDO::getRemarkZh, query.getRemark())
.or() .or()
...@@ -327,9 +328,9 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i ...@@ -327,9 +328,9 @@ public class RewardServiceImpl extends AbstractService<RewardMapper, RewardDO> i
List<NodeRespDTO> nodes = null; List<NodeRespDTO> nodes = null;
// 如果用户没有填写国家或城市默认展示中国的礼品 // 如果用户没有填写国家或城市默认展示中国的礼品
if (user.getCity() == null || user.getCountry() == null) { if (user.getCity() == null || user.getCountry() == null) {
nodes = nodeApi.getNodesByCity(null,130L); nodes = nodeApi.getNodesByCity(null, 130L);
} else { } else {
nodes = nodeApi.getNodesByCity(user.getCity().longValue(),null); nodes = nodeApi.getNodesByCity(user.getCity().longValue(), null);
} }
if (CollectionUtil.isNotEmpty(nodes)) { if (CollectionUtil.isNotEmpty(nodes)) {
rewardDOLambdaQuery.in(RewardDO::getNodeId, nodes.stream().map(NodeRespDTO::getId).collect(Collectors.toList())); rewardDOLambdaQuery.in(RewardDO::getNodeId, nodes.stream().map(NodeRespDTO::getId).collect(Collectors.toList()));
......
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