Compare commits

...

2 Commits

8 changed files with 187 additions and 46 deletions

View File

@ -21,6 +21,7 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 会员服务接口
@ -443,4 +444,5 @@ public interface IMemberServiceApi {
R<Map<String, Long>> memberRegionMap(Date settleDate);
R<List<CuMember>> getMemberByIds(Set<Long> memberIds);
}

View File

@ -36,10 +36,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 会员涉及dubbo服务
@ -520,4 +517,9 @@ public class MemberServiceProvider implements IMemberServiceApi {
return R.ok(resultMap);
}
@Override
public R<List<CuMember>> getMemberByIds(Set<Long> memberIds) {
return R.ok(iCuMemberService.getMemberByIds(memberIds));
}
}

View File

@ -23,10 +23,7 @@ import com.hzs.member.share.param.ShareRegisterParam;
import com.hzs.system.sys.dto.ApprovalBusinessResultDTO;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
* 会员 服务类
@ -1029,4 +1026,5 @@ public interface ICuMemberService extends IService<CuMember> {
*/
void clearZeroMember();
List<CuMember> getMemberByIds(Set<Long> memberIds);
}

View File

@ -3771,4 +3771,10 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
baseMapper.clearZeroMember();
}
@Override
public List<CuMember> getMemberByIds(Set<Long> memberIds) {
return baseMapper.selectList(new LambdaQueryWrapper<CuMember>()
.in(CuMember::getPkId, memberIds));
}
}

View File

@ -2,6 +2,7 @@ package com.hzs.activity.declaration.param;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.hzs.activity.add.param.AcAddUpgradeConfigParam;
import com.hzs.common.domain.activity.base.AcBaseAuthority;
import com.hzs.common.domain.activity.base.AcBaseConfig;
import com.hzs.common.domain.activity.base.AcGoalMemberConfig;
import lombok.AllArgsConstructor;
@ -108,6 +109,11 @@ public class AcDeclarationDetailParam implements Serializable {
*/
private List<AcGoalMemberConfig> goalMemberConfigList;
/**
* 权限配置列表
*/
private List<AcBaseAuthority> authorityList;
/**
* 是否强制弹框 0 1
*/

View File

@ -44,5 +44,9 @@ public class AcDeclarationParam {
* 报单赠送信息
*/
private List<AcDeclarationConfigParam> acDeclarationConfigParams;
/**
* 权限配置列表
*/
private List<AcBaseAuthority> authorityList;
}

View File

@ -1,9 +1,13 @@
package com.hzs.activity.declaration.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hzs.activity.base.param.ActivityParam;
import com.hzs.activity.base.service.IAcBaseAuthorityService;
import com.hzs.activity.base.service.IAcBaseConfigService;
import com.hzs.activity.base.service.IActivityService;
import com.hzs.activity.declaration.mapper.AcDeclarationGiftConfigMapper;
@ -14,12 +18,12 @@ import com.hzs.activity.declaration.param.AcDeclarationProductParam;
import com.hzs.activity.declaration.service.IAcDeclarationGiftConfigService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.activity.declaration.service.IAcDeclarationGiftDetailService;
import com.hzs.activity.recommend.param.AcRecommendParam;
import com.hzs.common.core.enums.*;
import com.hzs.common.domain.activity.base.AcBaseAuthority;
import com.hzs.common.domain.activity.declaration.AcDeclarationGiftConfig;
import com.hzs.common.domain.activity.declaration.AcDeclarationGiftDetail;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.enums.EActType;
import com.hzs.common.core.enums.EApprovalBusiness;
import com.hzs.common.core.enums.ERegistrationAuthority;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.activity.base.AcBaseConfig;
import com.hzs.common.security.utils.SecurityUtils;
@ -64,6 +68,8 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
private IAcDeclarationGiftConfigService iAcDeclarationGiftConfigService;
@Autowired
private IGradeServiceApi iGradeServiceApi;
@Autowired
private IAcBaseAuthorityService iAcBaseAuthorityService;
@Override
public AjaxResult getDetail(Integer pkId) {
@ -74,13 +80,17 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
.eq(AcDeclarationGiftConfig::getPkBaseId, pkId)
.eq(AcDeclarationGiftConfig::getDelFlag, 0));
ArrayList<AcDeclarationConfigParam> acDeclarationConfigParams = new ArrayList<>();
ArrayList<AcBaseAuthority> acBaseAuthorities = new ArrayList<>();
list.forEach(item -> {
AcDeclarationConfigParam acDeclarationConfigParam = BeanUtil.copyProperties(item, AcDeclarationConfigParam.class);
List<AcDeclarationProductParam> declarationConfigParams = iAcDeclarationGiftDetailService.listByPKRuleId(item.getPkId());
// 添加商品详情
acDeclarationConfigParam.setAcDeclarationProductParamList(declarationConfigParams);
acDeclarationConfigParams.add(acDeclarationConfigParam);
// 添加权限列表
acBaseAuthorities.addAll(iAcBaseAuthorityService.listAuthority(item.getPkBaseId()));
});
activityParam.setAuthorityList(acBaseAuthorities);
activityParam.setAcDeclarationConfigParams(acDeclarationConfigParams);
activityParam.setPkBaseId(baseConfig.getPkId());
return AjaxResult.success(activityParam);
@ -105,7 +115,7 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
// 新增活动基本配置
AcBaseConfig acBaseConfig = iActivityService.saveBaseConfig(activityParam);
// 新增加购活动配置
saveDeclarationConfig(acDeclarationParam.getAcDeclarationConfigParams(), acBaseConfig);
saveDeclarationConfig(acDeclarationParam, acBaseConfig);
//日志
activityParam.setBusinessCode(acDeclarationParam.getActivityParam().getBusinessCode());
iActivityService.createBaseConfigLog(activityParam, new StringBuffer(), null, EApprovalBusiness.AC_DECLARATION_GIFT_ADD.getValue(), false);
@ -192,7 +202,7 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
activityParam.setPkCountry(loginUser.getDataCountry());
activityParam.setPkCreator(loginUser.getUserId());
activityParam.setActType(EActType.DECLARATION_GIFT.getValue());
updateDeclarationConfig(activityParam, acDeclarationParam.getAcDeclarationConfigParams());
updateDeclarationConfig(activityParam, acDeclarationParam);
iActivityService.createBaseConfigLog(activityParam, new StringBuffer(), null, EApprovalBusiness.AC_DECLARATION_GIFT_UPDATE.getValue(), false);
return null;
}
@ -212,6 +222,25 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
return null;
}
/**
* 保存活动权限
*
* @param recommendParam
*/
private void saveAuthority(AcDeclarationParam recommendParam,AcBaseConfig acBaseConfig) {
List<AcBaseAuthority> authorityList = recommendParam.getAuthorityList();
boolean hasInvalid = authorityList.stream()
.anyMatch(auth -> auth.getAuthorityType() == null);
if (hasInvalid) {
return;
}
if (CollectionUtil.isNotEmpty(authorityList)) {
for (AcBaseAuthority acBaseAuthority : authorityList) {
acBaseAuthority.setPkBaseId(acBaseConfig.getPkId());
}
iAcBaseAuthorityService.saveBatch(authorityList);
}
}
private void removeDeclarationConfig(Long pkId) {
// 删除活动基本配置
@ -222,10 +251,15 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
// 删除报单赠送详情配置
iAcDeclarationGiftDetailService.remove(new LambdaQueryWrapper<AcDeclarationGiftDetail>()
.eq(AcDeclarationGiftDetail::getPkBaseId, pkId));
// 删除活动权限配置
iAcBaseAuthorityService.update(Wrappers.<AcBaseAuthority>lambdaUpdate()
.eq(AcBaseAuthority::getPkBaseId, pkId)
.eq(AcBaseAuthority::getDelFlag, EDelFlag.UN_DELETE.getValue())
.set(AcBaseAuthority::getDelFlag, EDelFlag.DELETE.getValue())
);
}
private void updateDeclarationConfig(ActivityParam activityParam, List<AcDeclarationConfigParam> acDeclarationConfigParams) {
{
private void updateDeclarationConfig(ActivityParam activityParam, AcDeclarationParam acDeclarationParam) {
Long pkId = activityParam.getPkId();
// 查询基础信息
AcBaseConfig baseConfig = BeanUtil.copyProperties(activityParam, AcBaseConfig.class);
@ -235,15 +269,23 @@ public class AcDeclarationGiftConfigServiceImpl extends ServiceImpl<AcDeclaratio
// 删除活动配置
baseMapper.delete(new LambdaQueryWrapper<AcDeclarationGiftConfig>()
.eq(AcDeclarationGiftConfig::getPkBaseId, pkId));
// 删除活动权限配置
iAcBaseAuthorityService.update(Wrappers.<AcBaseAuthority>lambdaUpdate()
.eq(AcBaseAuthority::getPkBaseId, pkId)
.eq(AcBaseAuthority::getDelFlag, EDelFlag.UN_DELETE.getValue())
.set(AcBaseAuthority::getDelFlag, EDelFlag.DELETE.getValue())
);
// 删除活动详情配置
iAcDeclarationGiftDetailService.remove(new LambdaQueryWrapper<AcDeclarationGiftDetail>()
.eq(AcDeclarationGiftDetail::getPkBaseId, pkId));
// 添加加购活动配置
saveDeclarationConfig(acDeclarationConfigParams, baseConfig);
}
saveDeclarationConfig(acDeclarationParam, baseConfig);
}
private void saveDeclarationConfig(List<AcDeclarationConfigParam> acDeclarationConfigParams, AcBaseConfig acBaseConfig) {
private void saveDeclarationConfig(AcDeclarationParam acDeclarationParam, AcBaseConfig acBaseConfig) {
List<AcDeclarationConfigParam> acDeclarationConfigParams = acDeclarationParam.getAcDeclarationConfigParams();
// 保存活动权限配置
this.saveAuthority(acDeclarationParam,acBaseConfig);
acDeclarationConfigParams.forEach(item -> {
if (item != null) {
AcDeclarationGiftConfig build = AcDeclarationGiftConfig.builder()

View File

@ -1,10 +1,14 @@
package com.hzs.activity.tourism.provider;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hzs.activity.base.service.IAcBaseAuthorityService;
import com.hzs.activity.base.service.IAcBaseConfigService;
import com.hzs.activity.declaration.service.IAcDeclarationGiftConfigService;
import com.hzs.activity.declaration.service.IAcDeclarationGiftRecordService;
import com.hzs.common.core.enums.*;
import com.hzs.common.domain.activity.base.AcBaseAuthority;
import com.hzs.common.domain.activity.declaration.AcDeclarationGiftConfig;
import com.hzs.common.domain.activity.declaration.AcDeclarationGiftRecord;
import com.hzs.activity.tourism.IAcTourismServiceApi;
@ -24,9 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -54,6 +56,8 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
private IAcBaseConfigService iAcBaseConfigService;
@Autowired
private IMemberServiceApi iMemberServiceApi;
@Autowired
private IAcBaseAuthorityService iAcBaseAuthorityService;
@Override
public R<?> handleTourismData() {
@ -148,24 +152,38 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
Function.identity(),
(a, b) -> b
));
// 一次批量查询会员信息
Set<Long> memberIds = new HashSet<>();
orderList.forEach(order -> {
// TODO 一天可能会有几百单最好改成批量查询
// 查看是否有重复订单
int count = iAcDeclarationGiftRecordService.count(new LambdaQueryWrapper<AcDeclarationGiftRecord>()
.eq(AcDeclarationGiftRecord::getOrderCode, order.getOrderCode())
.eq(AcDeclarationGiftRecord::getDelFlag, EDelFlag.UN_DELETE.getValue()));
if (count > 0) {
log.warn("当前订单已同步至报单明细{}", order.getOrderCode());
return;
}
// TODO 下面两个查询会员报单会员可能都是同一个人最好提前查询或者做个map存下来防止多次查询数据库
// 查询新会员信息
R<CuMember> newMemberResult = iMemberServiceApi.getMember(order.getPkMember());
CuMember newMember = newMemberResult.getData();
// 查询老会员信息
R<CuMember> oldMemberResult = iMemberServiceApi.getMember(order.getPkCreator());
CuMember oldMember = oldMemberResult.getData();
memberIds.add(order.getPkMember());
memberIds.add(order.getPkCreator());
});
Map<Long, CuMember> memberMap = iMemberServiceApi.getMemberByIds(memberIds)
.getData().stream().collect(Collectors.toMap(CuMember::getPkId, m -> m));
List<String> orderCodes = orderList.stream()
.map(SaOrder::getOrderCode)
.collect(Collectors.toList());
// 过滤已存在订单
Set<String> existSet = iAcDeclarationGiftRecordService.list(
new LambdaQueryWrapper<AcDeclarationGiftRecord>()
.in(AcDeclarationGiftRecord::getOrderCode, orderCodes)
.eq(AcDeclarationGiftRecord::getDelFlag, EDelFlag.UN_DELETE.getValue())
).stream().map(AcDeclarationGiftRecord::getOrderCode).collect(Collectors.toSet());
orderList = orderList.stream()
.filter(order -> !existSet.contains(order.getOrderCode()))
.collect(Collectors.toList());
List<AcDeclarationGiftRecord> recordList = new ArrayList<>();
orderList.forEach(order -> {
// 新会员信息
CuMember newMember = memberMap.get(order.getPkMember());
// 老会员信息
CuMember oldMember = memberMap.get(order.getPkCreator());
if (oldMember == null || newMember == null) {
log.warn("会员信息不存在, 新会员id={},老会员id={}", order.getPkMember(), order.getPkCreator());
return;
@ -180,8 +198,11 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
oldMember.getPkId(), oldMember.getRegisterAuthority(), newMember.getPkSettleGrade());
return;
}
// TODO 入库改成批量
// 查询活动权限
AcBaseConfig baseConfig = iAcBaseConfigService.getById(matchedConfig.getPkBaseId());
if (!this.checkAuthority(baseConfig, order.getPkMember())) {
return;
}
AcDeclarationGiftRecord record = AcDeclarationGiftRecord.builder()
.pkRuleId(matchedConfig.getPkId())
.pkBaseId(matchedConfig.getPkBaseId())
@ -192,13 +213,73 @@ public class AcTourismServiceProvider implements IAcTourismServiceApi {
record.setDelFlag(EDelFlag.UN_DELETE.getValue());
record.setPkCreator(oldMember.getPkId());
record.setPkCountry(pkCountry);
// 插入数据库
iAcDeclarationGiftRecordService.save(record);
log.info("成功插入报单赠送记录 -> memberId={}, ruleId={}",
oldMember.getPkId(), matchedConfig.getPkId());
recordList.add(record);
});
if (!recordList.isEmpty()) {
iAcDeclarationGiftRecordService.saveBatch(recordList);
log.info("[DeclarationGiftJob] 订单量={} 活动数={} 插入记录={}",
orderList.size(), acBaseConfigList.size(), recordList.size());
}
return R.ok();
}
/**
* 校验活动权限true进行处理false不进行处理
*
* @param baseConfig 活动配置
* @param pkMember 会员ID
* @return
*/
private boolean checkAuthority(AcBaseConfig baseConfig, Long pkMember) {
List<AcBaseAuthority> authList = iAcBaseAuthorityService.list(Wrappers.<AcBaseAuthority>lambdaQuery()
.eq(AcBaseAuthority::getPkBaseId, baseConfig.getPkId())
.orderByDesc(AcBaseAuthority::getAuthorityType)
);
if (CollectionUtil.isNotEmpty(authList)) {
Map<Integer, List<String>> authMap = new HashMap<>();
for (AcBaseAuthority authority : authList) {
authMap.computeIfAbsent(authority.getAuthorityType(), k -> new ArrayList<>());
authMap.get(authority.getAuthorityType()).add(authority.getMemberCode());
}
for (Integer key : authMap.keySet()) {
List<String> memberCodeList = authMap.get(key);
switch (EWaresPermissionType.getEnumByValue(key)) {
case AUTH_ORITY_TYPE:
// 全部
return true;
case PLACE_STOP:
// 安置禁止
if (iAcBaseAuthorityService.checkPlaceParent(pkMember, memberCodeList) > 0) {
return false;
} else {
return true;
}
case BLOOD_STOP:
// 血缘禁止
if (iAcBaseAuthorityService.checkParent(pkMember, memberCodeList) > 0) {
return false;
} else {
return true;
}
case PLACE_ALLWO:
// 安置可见
if (iAcBaseAuthorityService.checkPlaceParent(pkMember, memberCodeList) > 0) {
return true;
} else {
return false;
}
case BLOOD_ALLOW:
// 血缘可见
if (iAcBaseAuthorityService.checkParent(pkMember, memberCodeList) > 0) {
return true;
} else {
return false;
}
default:
}
}
}
return true;
}
}