Commit 75aca2a5 by fanjiaxin

分佣配置结构调整

parent d0ec777a
Pipeline #71709 passed with stages
in 1 minute 7 seconds
......@@ -17,7 +17,7 @@ import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import com.ctrip.framework.apollo.spring.annotation.EnableAutoUpdateApolloConfig;
import com.ctrip.framework.apollo.spring.annotation.ValueMapping;
import com.netease.yanxuan.wx.store.sharer.biz.meta.enums.CommissionChangeOptTypeEnum;
import com.netease.yanxuan.wx.store.sharer.biz.meta.enums.CommissionConfigStateEnum;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.bo.CommissionSharerProductsBO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.bo.CommissionSharerBO;
import com.netease.yanxuan.wx.store.sharer.biz.meta.model.bo.CommissionSharerProductBO;
import com.netease.yanxuan.wx.store.sharer.dal.mapper.SharerInfoMapper;
......@@ -80,7 +80,7 @@ public class DrmSharerConfig {
* 用户商品分佣比例
*/
@ValueMapping("${commissionratio.sharerproduct:}")
private List<CommissionSharerProductBO> commissionSharerProductList;
private List<CommissionSharerProductsBO> commissionSharerProductList;
/**
* 监听
......@@ -282,27 +282,14 @@ public class DrmSharerConfig {
*/
private void sharerProductCommissionRatioChange(ConfigChange change) {
log.info("ProductCommissionConfig:sharerProductCommissionRatioChange, change = {}", JSON.toJSONString(change));
List<CommissionSharerProductBO> oldCommissionSharerList = JSON.parseArray(change.getOldValue(), CommissionSharerProductBO.class);
if (null == oldCommissionSharerList) {
oldCommissionSharerList = new ArrayList<>();
}
List<CommissionSharerProductBO> newCommissionSharerList = JSON.parseArray(change.getNewValue(), CommissionSharerProductBO.class);
if (null == newCommissionSharerList) {
newCommissionSharerList = Collections.emptyList();
}
// 过滤禁用
oldCommissionSharerList = oldCommissionSharerList.stream()
.filter(item -> CommissionConfigStateEnum.ENABLED.getCode().equals(item.getState()))
.collect(Collectors.toList());
newCommissionSharerList = newCommissionSharerList.stream()
.filter(item -> CommissionConfigStateEnum.ENABLED.getCode().equals(item.getState()))
.collect(Collectors.toList());
List<CommissionSharerProductsBO> oldCommissionSharerList = JSON.parseArray(change.getOldValue(), CommissionSharerProductsBO.class);
List<CommissionSharerProductsBO> newCommissionSharerList = JSON.parseArray(change.getNewValue(), CommissionSharerProductsBO.class);
// 过滤禁用,转换成Map
Map<String, CommissionSharerProductBO> oldCommissionMap = convertCommissionSharerProductBO(oldCommissionSharerList);
Map<String, CommissionSharerProductBO> newCommissionMap = convertCommissionSharerProductBO(newCommissionSharerList);
// 将 newCommissionSharerList 转换为 Map,以减少流操作的开销
Map<String, CommissionSharerProductBO> newCommissionSharerMap = newCommissionSharerList.stream()
.collect(Collectors.toMap(this::getSharerProductCommissionMapKey, Function.identity()));
for (CommissionSharerProductBO oldInfo : oldCommissionSharerList) {
CommissionSharerProductBO newInfo = newCommissionSharerMap.get(getSharerProductCommissionMapKey(oldInfo));
oldCommissionMap.forEach((mapKey, oldInfo) -> {
CommissionSharerProductBO newInfo = newCommissionMap.get(mapKey);
if (newInfo != null) {
// 修改
if (newInfo.getCommissionRatio().compareTo(oldInfo.getCommissionRatio()) != 0) {
......@@ -312,35 +299,35 @@ public class DrmSharerConfig {
// 删除
deleteSharerProductCommissionInfo(oldInfo);
}
}
for (CommissionSharerProductBO newInfo : newCommissionSharerList) {
});
newCommissionMap.forEach((mapKey, newInfo) -> {
boolean isExists = oldCommissionMap.containsKey(mapKey);
// 新增
if (oldCommissionSharerList.stream().noneMatch(item -> item.getOpenId().equals(newInfo.getOpenId())
&& item.getProductId().equals(newInfo.getProductId()))) {
if (!isExists) {
setSharerProductCommissionInfo(newInfo, null);
}
}
});
}
private String getSharerProductCommissionMapKey(CommissionSharerProductBO bo) {
return bo.getOpenId() + "&" + bo.getProductId();
return getSharerProductCommissionMapKey(bo.getOpenId(), bo.getProductId());
}
private String getSharerProductCommissionMapKey(String openId, String productId) {
return openId + "&" + productId;
}
/**
* 获取推客分佣比例
*/
private BigDecimal getSharerCommissionRatio(String openId, Long productId) {
Optional<CommissionSharerProductBO> sharerProductCommissionOpt = Optional.ofNullable(commissionSharerProductList)
.orElseGet(ArrayList::new)
.stream()
.filter(item -> StringUtils.isNotBlank(item.getOpenId()))
.filter(item -> StringUtils.isNotBlank(item.getProductId()))
.filter(item -> item.getOpenId().equals(openId))
.filter(item -> null == productId || item.getProductId().equals(String.valueOf(productId)))
.findFirst();
if (sharerProductCommissionOpt.isPresent()) {
// 返回推客商品分佣
return sharerProductCommissionOpt.get().getCommissionRatio();
if (null != productId) {
Map<String, CommissionSharerProductBO> commissionMap = convertCommissionSharerProductBO(commissionSharerProductList);
CommissionSharerProductBO bo = commissionMap.get(getSharerProductCommissionMapKey(openId, String.valueOf(productId)));
if (null != bo) {
// 返回推客商品分佣
return bo.getCommissionRatio();
}
}
return getSharerCommissionRatio(openId);
}
......@@ -544,4 +531,21 @@ public class DrmSharerConfig {
sharerInfoLuw.eq(SharerInfo::getId, sharerInfo.getId());
sharerInfoMapper.update(null, sharerInfoLuw);
}
private Map<String, CommissionSharerProductBO> convertCommissionSharerProductBO(List<CommissionSharerProductsBO> list) {
// 过滤禁用,转换成Map
return Optional.ofNullable(list)
.orElseGet(ArrayList::new).stream()
.filter(CommissionSharerProductsBO::getEnable)
.flatMap(item -> Arrays.stream(item.getProductIds().split(","))
.map(productId -> {
CommissionSharerProductBO result = new CommissionSharerProductBO();
result.setOpenId(item.getOpenId());
result.setProductId(productId);
result.setCommissionRatio(item.getCommissionRatio());
result.setEnable(item.getEnable());
return result;
}))
.collect(Collectors.toMap(this::getSharerProductCommissionMapKey, Function.identity()));
}
}
\ No newline at end of file
package com.netease.yanxuan.wx.store.sharer.biz.meta.enums;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* @Description 分佣配置状态
* @Author fanjiaxin
* @Date 2025/3/3 13:58
*/
@Getter
@RequiredArgsConstructor
public enum CommissionConfigStateEnum {
ENABLED("1", "启用"),
DISABLED("0", "禁用");
private final String code;
private final String desc;
}
\ No newline at end of file
......@@ -27,7 +27,7 @@ public class CommissionSharerProductBO implements Serializable {
*/
private BigDecimal commissionRatio;
/**
* 状态,1启用,0禁用
* 启用状态,1启用,0禁用
*/
private String state;
private Boolean enable;
}
package com.netease.yanxuan.wx.store.sharer.biz.meta.model.bo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @Description 用户商品分佣比例-业务对象
* @Author fanjiaxin
* @Date 2025/3/9 13:44
*/
@Data
public class CommissionSharerProductsBO implements Serializable {
private static final long serialVersionUID = -6353220469962589464L;
/**
* 用户ID
*/
private String openId;
/**
* 商品ID
*/
private String productIds;
/**
* 分佣比例
*/
private BigDecimal commissionRatio;
/**
* 启用状态,1启用,0禁用
*/
private Boolean enable;
}
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