Compare commits
2 Commits
5706d70562
...
a0180bb249
| Author | SHA1 | Date |
|---|---|---|
|
|
a0180bb249 | |
|
|
79850099f0 |
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 否
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -44,5 +44,9 @@ public class AcDeclarationParam {
|
|||
* 报单赠送信息
|
||||
*/
|
||||
private List<AcDeclarationConfigParam> acDeclarationConfigParams;
|
||||
/**
|
||||
* 权限配置列表
|
||||
*/
|
||||
private List<AcBaseAuthority> authorityList;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue