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