3
0
Fork 0

Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
zhangheng 2025-09-02 13:19:50 +08:00
commit b80d5ea6db
69 changed files with 1996 additions and 237 deletions

View File

@ -3,6 +3,7 @@ package com.hzs.member.base;
import com.hzs.common.core.domain.R;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberRegister;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.retail.member.CuMemberRetailRegion;
@ -32,6 +33,20 @@ public interface IMemberServiceApi {
*/
R<LoginMember> getMemberInfo(String memberCode);
/**
* 通过会员编码查询分享会员信息
*
* @param memberCode 会员编号
* @return
*/
R<LoginMember> getShareMemberInfo(String memberCode);
/**
* 查询分享会员
*
* @param pkMember 主键
*/
R<CuMemberShare> queryCuMemberShare(Long pkMember);
/**
* 根据会员ID获取会员信息查库
*

View File

@ -1,6 +1,7 @@
package com.hzs.member.base.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberExt;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -63,6 +64,11 @@ public class LoginMember implements Serializable {
*/
private CuMemberExt cuMember;
/**
* 分享会员信息分享注册会员使用
*/
private CuMemberShare cuMemberShare;
/**
* 结算国家此字段实体不存值只做部分业务传递参数使用
*/

View File

@ -3,6 +3,7 @@ package com.hzs.bonus.achieve.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -29,8 +30,18 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeParent(@Param("tableName") String tableName, @Param("saOrderExtList") List<?> saOrderExtList);
/**
* 根据会员查询会员血缘上网体 -- 秒结使用
*/
List<CuMemberRetailRangeExt> getCuMemberRetailRangeParent(@Param("saOrderExt") SaOrderExt saOrderExt);
CuMemberRetailRangeExt queryCuMemberRetailRangeByMemberId(@Param("tableName") String tableName, @Param("memberId") Long memberId);
/**
* 查询会员信息
*/
CuMemberRetailRangeExt getMemberRetailRange(@Param("memberId") Long memberId);
/**
* 批量更新网体
*/
@ -45,4 +56,18 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/
int updateMemberEnable(@Param("rangeTableName") String rangeTableName, @Param("pkMemberList") List<Long> pkMemberList);
/**
* 当前网体更新极差秒结表
*/
void mergeMemberSecondRetailRangeByRange(@Param("secondRangeTableName") String secondRangeTableName,
@Param("pkMember") Long pkMember);
/**
* 昨天的结算表更新极差秒结状态
*/
void mergeMemberSecondRetailRangeByRangeEnable(@Param("rangeTableName") String rangeTableName,
@Param("secondRangeTableName") String secondRangeTableName,
@Param("pkMember") Long pkMember);
}

View File

@ -24,6 +24,11 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeParent(String tableName, List<SaOrderExt> saOrderExtList);
/**
* 根据会员查询会员血缘上网体 -- 秒结使用
*/
List<CuMemberRetailRangeExt> getCuMemberRetailRangeParent(SaOrderExt saOrderExt);
/**
* 更新会员树的累计业绩
*
@ -41,4 +46,10 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
*/
int updateMemberEnable(String rangeTableName, List<Long> pkMemberList);
/**
* 更新极差秒接表用昨天的结算表
*/
void mergeMemberSecondRetailRangeByRange(String rangeTableName, String secondRangeTableName, Long pkMember);
}

View File

@ -50,6 +50,11 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
return memberRetailRangeExtList;
}
@Override
public List<CuMemberRetailRangeExt> getCuMemberRetailRangeParent(SaOrderExt saOrderExt) {
return baseMapper.getCuMemberRetailRangeParent(saOrderExt);
}
@Override
public void updateCuMemberRetailRange(String settleTableName, Map<Long, CuMemberRetailRangeExt> cuMemberTreeMap) {
List<List<?>> treeList = setUpdCuMemberTreeLists(cuMemberTreeMap);
@ -67,4 +72,13 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
return baseMapper.updateMemberEnable(rangeTableName, pkMemberList);
}
@Override
public void mergeMemberSecondRetailRangeByRange(String rangeTableName, String secondRangeTableName, Long pkMember) {
// 当前网体更新极差秒接表血缘伞上
baseMapper.mergeMemberSecondRetailRangeByRange(secondRangeTableName, pkMember);
// 昨天的结算表更新极差秒结激活状态和等级
baseMapper.mergeMemberSecondRetailRangeByRangeEnable(rangeTableName, secondRangeTableName, pkMember);
}
}

View File

@ -5,6 +5,8 @@ import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.bonus.param.BonusParam;
import com.hzs.bonus.bonus.service.ICuMemberBonusService;
import com.hzs.bonus.bonus.vo.*;
import com.hzs.common.core.enums.EGrantStatus;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.page.TableDataInfo;
@ -32,6 +34,29 @@ public class ApiCuMemberBonusController extends BaseController {
@Autowired
private ICuMemberBonusService iCuMemberBonusService;
/**
* 新零售实时奖金查询会员实时奖金当日的奖金
*/
@PostMapping("/query-current-bonus")
public TableDataInfo listCurrentBonus(@RequestBody BonusParam bonusParam) {
bonusParam.setPkCountry(SecurityUtils.getPkCountry());
bonusParam.setPkMember(SecurityUtils.getUserId());
bonusParam.setStartDate(DateUtils.currentDate());
bonusParam.setEndDate(DateUtils.afterDate(1, ChronoUnit.DAYS, DateUtils.currentDate()));
bonusParam.setGrantStatus(EGrantStatus.SETTLED.getValue());
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberSecondBonusVoByCondition(bonusParam);
List<MemberBonusVO> memberBonusVOList = new ArrayList<>();
cuMemberBonusList.forEach(cuMemberBonus -> {
if (ComputeUtil.compareValue(cuMemberBonus.getRealIncomeTotal())) {
MemberBonusVO memberBonusVO = BeanUtil.copyProperties(cuMemberBonus, MemberBonusVO.class, "settleDate");
memberBonusVO.setSettleDate(DateUtils.currentDate());
memberBonusVOList.add(memberBonusVO);
}
});
return getDataTable(memberBonusVOList);
}
/**
* 新零售实时奖金查询会员奖金列表
*/
@ -56,6 +81,7 @@ public class ApiCuMemberBonusController extends BaseController {
@PostMapping("/query-bonus-total")
public TableDataInfo lisBonusTotal(@RequestBody BonusParam bonusParam) {
setBonusParam(bonusParam);
bonusParam.setStartDate(DateUtils.beforeDate(1, ChronoUnit.DAYS, bonusParam.getEndDate()));
List<CuMemberBonusExt> cuMemberBonusList = iCuMemberBonusService.queryMemberBonusTotalByCondition(bonusParam);

View File

@ -78,4 +78,16 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
@Param("oldGrantStatus") Integer oldGrantStatus, @Param("startPeriod") Integer startPeriod,
@Param("endPeriod") Integer endPeriod);
/**
* 批量插入会员奖金主表
*
* @param cuMemberBonusList 会员奖金
*/
void insertOrUpdateCuMemberBonus(@Param("cuMemberBonusList") List<CuMemberBonus> cuMemberBonusList);
/**
* 回退奖金
*/
void mergeBackRangeBonusIncome(@Param("pkOrder") Long pkOrder, @Param("bonusValue") Integer bonusValue);
}

View File

@ -0,0 +1,19 @@
package com.hzs.bonus.bonus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 秒接日志记录表 Mapper 接口
*/
public interface CuMemberRetailLogMapper extends BaseMapper<CuMemberRetailLog> {
/*
* 更新会员日志
**/
void updateCuMemberRetailLogByList(@Param("cuMemberRetailLogs") List<CuMemberRetailLog> cuMemberRetailLogs);
}

View File

@ -17,4 +17,9 @@ public interface IBonusSettleService {
*/
void calculateCuMemberBonus(String date, List<SaOrderExt> saOrderExtList);
/**
* 根据订单计算新零售奖金 -- 秒结
*/
void calculateCuMemberRetailRangeBonusBySaOrder(String orderCode);
}

View File

@ -128,4 +128,28 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
CuMemberBonusExt initCuMemberBonus();
/**
* 批量插入会员奖金主表
*
* @param cuMemberBonusList 会员奖金
*/
void insertOrUpdateCuMemberBonus(List<CuMemberBonus> cuMemberBonusList);
/**
* 查询会员奖金
*/
List<CuMemberBonus> queryCuMemberBonus(int period, List<CuMemberBonus> cuMemberBonusList);
/**
* 根据查询条件查询会员秒接奖金
*
* @param bonusParam 查询条件
*/
List<CuMemberBonusExt> queryMemberSecondBonusVoByCondition(BonusParam bonusParam);
/**
* 新零售撤单回退奖金
*/
void mergeBackMemberBonusIncome(Long pkOrder);
}

View File

@ -0,0 +1,23 @@
package com.hzs.bonus.bonus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
import java.util.List;
/**
* 秒接日志记录表 服务类
*/
public interface ICuMemberRetailLogService extends IService<CuMemberRetailLog> {
/*
* 查询24小时之内失败的记录重试
**/
List<CuMemberRetailLog> queryCuMemberRetailLog();
/*
* 更新会员日志
**/
void updateCuMemberRetailLogByList(List<CuMemberRetailLog> cuMemberRetailLogs);
}

View File

@ -59,6 +59,54 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
@DubboReference
IMemberServiceApi iMemberServiceApi;
/**
* 秒结
* 首购级差复购级差复购配送业绩盒数等级奖衔日奖
*/
List<CuMemberBonusRange> calculateCuMemberRetailRangeBonusBySecond(String settleDate, SaOrderExt saOrderExt, BonusConfigDTO bonusConfigDTO,
int currentPeriod, Map<Long, CuMemberBonus> cuMemberBonusMap,
List<CuMemberBonusDetail> cuMemberBonusDetailList) {
// 直推复购级差收益
List<CuMemberBonusRange> cuMemberBonusRangeList = new ArrayList<>();
// 按照血缘查询该会员所有伞上会员 -- 不处理业绩等直接查询会员表 cu_member
List<CuMemberRetailRangeExt> memberRetailRangeExtList = iCuMemberRetailRangeService.getCuMemberRetailRangeParent(saOrderExt);
// 会员结算mapkey会员IDvalue结算扩展
Map<Long, CuMemberRetailRangeExt> memberRangeExtMap = new HashMap<>();
for (CuMemberRetailRangeExt cuMemberRetailRangeExt : memberRetailRangeExtList) {
if (!memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
memberRangeExtMap.put(cuMemberRetailRangeExt.getPkMember(), cuMemberRetailRangeExt);
}
}
// 配送收益配置
Map<Integer, CuMemberRetailRegion> regionMap = iMemberServiceApi.listEffectiveRegion(DateUtils.parseStringToDate(settleDate)).getData();
// 订单指定产品盒数
BigDecimal boxNum = saOrderExt.getBoxNum();
// 计算奖金 直推级差
if ((EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType())
&& boxNum.compareTo(BigDecimal.ZERO) > 0
) {
// 注册或升级订单并且存在盒数产品才有 直推级差
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, currentPeriod, saOrderExt));
} else if (EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 复购订单
if (boxNum.compareTo(BigDecimal.ZERO) > 0) {
// 存在盒数商品计算复购级差
cuMemberBonusRangeList.addAll(calculateRetailRepurRangeBonus(memberRangeExtMap, cuMemberBonusMap,
bonusConfigDTO, currentPeriod, saOrderExt));
}
// 计算配送收益
if (regionMap.size() != 0) {
cuMemberBonusDetailList.addAll(calculateRetailRepurRegionBonus(memberRangeExtMap, cuMemberBonusMap,
bonusConfigDTO, currentPeriod, saOrderExt, regionMap, null, true));
}
}
return cuMemberBonusRangeList;
}
/**
* 日结
* 计算新零售奖金首购级差复购级差
@ -185,7 +233,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
&& boxNum.compareTo(BigDecimal.ZERO) > 0
) {
// 注册或升级订单并且存在盒数产品才有 直推级差
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, period, saOrderExt, gradeIdMap));
cuMemberBonusRangeList.addAll(calculateRetailRangeBonus(memberRangeExtMap, cuMemberBonusMap, bonusConfigDTO, period, saOrderExt));
// 订单存在升级记录
if (memberLevelMap.containsKey(saOrderExt.getPkId())) {
@ -222,7 +270,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
// 计算配送收益
if (regionMap.size() != 0) {
cuMemberBonusDetailList.addAll(calculateRetailRepurRegionBonus(memberRangeExtMap, cuMemberBonusMap,
bonusConfigDTO, period, saOrderExt, regionMap, rangeTableName));
bonusConfigDTO, period, saOrderExt, regionMap, rangeTableName, false));
}
}
}
@ -295,7 +343,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
* 计算直推级差收益
*/
List<CuMemberBonusRange> calculateRetailRangeBonus(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
BonusConfigDTO bonusConfigDTO, Integer period, SaOrderExt saOrderExt, Map<Integer, BdGrade> gradeIdMap) {
BonusConfigDTO bonusConfigDTO, Integer period, SaOrderExt saOrderExt) {
// 直推级差返回数据
List<CuMemberBonusRange> memberBonusRangeList = new ArrayList<>();
@ -654,7 +702,7 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
*/
List<CuMemberBonusDetail> calculateRetailRepurRegionBonus(Map<Long, CuMemberRetailRangeExt> memberRangeExtMap, Map<Long, CuMemberBonus> cuMemberBonusMap,
BonusConfigDTO bonusConfigDTO, Integer period, SaOrderExt saOrderExt, Map<Integer, CuMemberRetailRegion> regionMap,
String rangeTableName) {
String rangeTableName, boolean secondFlag) {
// 复购配送区域返回数据
List<CuMemberBonusDetail> memberBonusDetailList = new ArrayList<>();
@ -665,7 +713,13 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
if (null != retailRegion) {
CuMemberRetailRangeExt targetMemberRangeExt = memberRangeExtMap.get(retailRegion.getPkMember());
if (ObjectUtil.isEmpty(targetMemberRangeExt)) {
targetMemberRangeExt = cuMemberRetailRangeMapper.queryCuMemberRetailRangeByMemberId(rangeTableName, retailRegion.getPkMember());
if (secondFlag) {
// 秒结处理
targetMemberRangeExt = cuMemberRetailRangeMapper.getMemberRetailRange(retailRegion.getPkMember());
} else {
// 非秒结处理
targetMemberRangeExt = cuMemberRetailRangeMapper.queryCuMemberRetailRangeByMemberId(rangeTableName, retailRegion.getPkMember());
}
if (null == targetMemberRangeExt) {
// 配送区域对应的会员不存在了直接跳过
return memberBonusDetailList;

View File

@ -1,8 +1,11 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.bonus.service.*;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.order.service.IBonusOrderService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.bonus.*;
@ -40,6 +43,24 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
private ICuMemberBonusRangeService iCuMemberBonusRangeService;
@Autowired
private BonusSettleRangeHandle bonusSettleRangeHandle;
@Autowired
private IBonusOrderService iBonusOrderService;
/**
* 保存会员奖金
*
* @param cuMemberBonusMap 奖金map
*/
protected void saveCuMemberBonus(int period, String settleDate, Map<Long, CuMemberBonus> cuMemberBonusMap) {
// 保存奖金
List<CuMemberBonus> cuMemberBonusList = setCuMemberBonusSeq(settleDate, cuMemberBonusMap);
if (cuMemberBonusList.size() > 0) {
// 插入奖金主表
iCuMemberBonusService.insertOrUpdateCuMemberBonus(cuMemberBonusList);
List<CuMemberBonus> cuMemberBonuses = iCuMemberBonusService.queryCuMemberBonus(period, cuMemberBonusList);
cuMemberBonuses.forEach(cuMemberBonus -> cuMemberBonusMap.put(cuMemberBonus.getPkMember(), cuMemberBonus));
}
}
@Override
@Transactional(rollbackFor = Exception.class)
@ -74,6 +95,52 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
}
}
@Override
public void calculateCuMemberRetailRangeBonusBySaOrder(String orderCode) {
// 需要处理的订单
List<SaOrderExt> retailOrderList = iBonusOrderService.queryRetailSaOrderByDay(DateUtils.beforeDate(6, ChronoUnit.DAYS), DateUtils.afterDate(1, ChronoUnit.DAYS), orderCode);
if (CollectionUtil.isNotEmpty(retailOrderList)) {
// 查询奖金参数
BonusConfigDTO bonusConfigDTO = iBonusItemsServiceApi.queryBonusConfigDTO().getData();
// 会员奖金map
Map<Long, CuMemberBonus> cuMemberBonusMap = new HashMap<>(MagicNumberConstants.BATCH_UPDATE_NUM);
// 订单数据
SaOrderExt saOrderExt = retailOrderList.get(0);
// 处理奖金结算秒结表判断是否存在当天结算的秒接表从cu_member中获取网体从昨日结算表中获取累计结余数据
// 今天结算期数
String settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, saOrderExt.getPayTime());
int currentPeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
if (saOrderExt.getDelFlag() == EYesNo.YES.getIntValue()) {
// 订单下单处理正向
// 会员奖金明细
List<CuMemberBonusDetail> cuMemberBonusDetailList = new ArrayList<>();
// 实时计算秒结数据秒奖
List<CuMemberBonusRange> cuMemberBonusRangeList = bonusSettleRangeHandle.calculateCuMemberRetailRangeBonusBySecond(settleDate, saOrderExt, bonusConfigDTO,
currentPeriod, cuMemberBonusMap, cuMemberBonusDetailList);
saveCuMemberBonus(currentPeriod, settleDate, cuMemberBonusMap);
Set<Long> memberIdSet = iCuMemberBonusService.queryMemberBonusByPeriod(currentPeriod);
if (cuMemberBonusRangeList.size() > 0) {
cuMemberBonusRangeList.forEach(cuMemberBonusRange ->
cuMemberBonusRange.setPkBonus(cuMemberBonusMap.get(cuMemberBonusRange.getPkBonus()).getPkId()));
iCuMemberBonusRangeService.batchInsertCuMemberBonusRange(cuMemberBonusRangeList, memberIdSet);
}
if (cuMemberBonusDetailList.size() > 0) {
cuMemberBonusDetailList.forEach(cuMemberBonusDetail ->
cuMemberBonusDetail.setPkBonus(cuMemberBonusMap.get(cuMemberBonusDetail.getPkBonus()).getPkId()));
iCuMemberBonusDetailService.batchInsertCuMemberBonusDetail(cuMemberBonusDetailList, memberIdSet);
}
} else {
// 订单撤单处理逆向
// 处理收益
iCuMemberBonusService.mergeBackMemberBonusIncome(saOrderExt.getPkId());
}
}
}
/**
* 计算每天的奖金入库
*

View File

@ -404,4 +404,30 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
return cuMemberBonusList.stream().distinct().map(CuMemberBonus::getPkId).collect(Collectors.toSet());
}
@Override
public void insertOrUpdateCuMemberBonus(List<CuMemberBonus> cuMemberBonusList) {
baseMapper.insertOrUpdateCuMemberBonus(cuMemberBonusList);
}
@Override
public List<CuMemberBonus> queryCuMemberBonus(int period, List<CuMemberBonus> cuMemberBonusList) {
QueryWrapper<CuMemberBonus> queryWrapper = new QueryWrapper<>();
List<Long> memberList = cuMemberBonusList.stream().map(CuMemberBonus::getPkMember).collect(Collectors.toList());
queryWrapper.eq(MemberFieldConstants.PERIOD, period);
queryWrapper.in(MemberFieldConstants.PK_MEMBER, memberList);
return baseMapper.selectList(queryWrapper);
}
@Override
public List<CuMemberBonusExt> queryMemberSecondBonusVoByCondition(BonusParam bonusParam) {
return getCuMemberBonusExtList(bonusParam);
}
@Override
public void mergeBackMemberBonusIncome(Long pkOrder) {
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_RANGE_INCOME.getValue());
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_REPURCHASE_INCOME.getValue());
baseMapper.mergeBackRangeBonusIncome(pkOrder, EBonusItems.RETAIL_REPURCHASE_DELIVERY_INCOME.getValue());
}
}

View File

@ -0,0 +1,38 @@
package com.hzs.bonus.bonus.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.bonus.mapper.CuMemberRetailLogMapper;
import com.hzs.bonus.bonus.service.ICuMemberRetailLogService;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
import org.springframework.stereotype.Service;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.List;
/**
* 秒接日志记录表 服务实现类
*/
@Service
public class CuMemberRetailLogServiceImpl extends ServiceImpl<CuMemberRetailLogMapper, CuMemberRetailLog> implements ICuMemberRetailLogService {
@Override
public List<CuMemberRetailLog> queryCuMemberRetailLog() {
LambdaQueryWrapper<CuMemberRetailLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberRetailLog::getEnableStatus, EYesNo.NO.getIntValue());
Date endTime = DateUtils.currentDateTime();
Date startTime = DateUtils.beforeDate(1, ChronoUnit.DAYS, endTime);
queryWrapper.gt(CuMemberRetailLog::getCreationTime, startTime);
queryWrapper.le(CuMemberRetailLog::getCreationTime, endTime);
queryWrapper.orderByAsc(CuMemberRetailLog::getCreationTime);
return baseMapper.selectList(queryWrapper);
}
@Override
public void updateCuMemberRetailLogByList(List<CuMemberRetailLog> cuMemberRetailLogs) {
baseMapper.updateCuMemberRetailLogByList(cuMemberRetailLogs);
}
}

View File

@ -20,152 +20,34 @@ import java.util.Date;
@NoArgsConstructor
public class MemberBonusVO implements Serializable {
/**
* 会员主键
*/
private Long pkMember;
/**
* 会员编号
*/
private String memberCode;
/**
* 会员名称
*/
private String memberName;
/**
* 结算等级
*/
private Integer pkSettleGrade;
/**
* 真实奖衔
*/
private Integer pkAwards;
/**
* 体系名称
*/
private String vertexName;
/**
* 团队名称
*/
private String teamName;
/**
* 期间
*/
private Integer period;
/**
* 汇率
*/
private Integer pkRate;
/**
* 直推收益
*/
private BigDecimal directIncome;
/**
* 拓展收益
*/
private BigDecimal expandIncome;
/**
* 辅导收益
*/
private BigDecimal coachIncome;
/**
* 分红收益
*/
private BigDecimal shareIncome;
/**
* 报单收益
*/
private BigDecimal serviceIncome;
/**
* 商城重消
*/
@BigDecimalFormat
private BigDecimal backPoints;
/**
* 平台服务费
*/
private BigDecimal serviceSpend;
/**
* 商城重消
*/
private BigDecimal repBackPoints;
/**
* 平台服务费
*/
private BigDecimal repServiceSpend;
/**
* 实发收益总计
*/
@BigDecimalFormat
private BigDecimal realIncomeTotal;
/**
* 收益状态 (0=正常1=停止收益)
*/
private Integer incomeStatus;
/**
* 国家
*/
private Integer pkCountry;
/**
* 新零售直推级差收益
*/
@BigDecimalFormat
private BigDecimal retailRangeIncome;
/**
* 新零售平级收益
* 新零售复购级差收益
*/
@BigDecimalFormat
private BigDecimal retailSameLevelIncome;
private BigDecimal repurRangeIncome;
/**
* 新零售区域收益
* 新零售复购配送收益
*/
@BigDecimalFormat
private BigDecimal retailAreaIncome;
/**
* 新零售福利极差收益
*/
private BigDecimal retailBenefitRangeIncome;
/**
* 新零售福利平均收益
*/
private BigDecimal retailBenefitAvgIncome;
/**
* 新零售福利加权收益
*/
private BigDecimal retailBenefitIncome;
/**
* 新零售收益小计
*/
@BigDecimalFormat
private BigDecimal retailRealSubtotal;
/**
* 实发收益总计
*/
@BigDecimalFormat
private BigDecimal realIncomeTotal;
/**
* 结算日期
*/

View File

@ -25,4 +25,10 @@ public interface CuMemberGradeMapper extends BaseMapper<CuMemberGrade> {
@Param("endDate") Date endDate,
@Param("upType") Integer upType);
/**
* 查询会员最新手动升级记录更新秒结表会员等级小于手动升级的会员等级
*/
void updateCuMemberGradeSecond(@Param("secondRangeTableName") String secondRangeTableName, @Param("period") Integer period);
}

View File

@ -31,4 +31,9 @@ public interface ICuMemberGradeService extends IService<CuMemberGrade> {
*/
List<CuMemberLevel> listAutoLevel(Date startDate, Date endDate);
/**
* 查询会员最新手动升级记录更新秒结表会员等级小于手动升级的会员等级
*/
void updateCuMemberGradeSecond(String secondRangeTableName, Integer period);
}

View File

@ -34,4 +34,10 @@ public class CuMemberGradeServiceImpl extends ServiceImpl<CuMemberGradeMapper, C
// 自动升级记录列表
return baseMapper.queryCuMemberLevel(startDate, endDate, EUpgradeType.AUTO_UPGRADE.getValue());
}
@Override
public void updateCuMemberGradeSecond(String secondRangeTableName, Integer period) {
baseMapper.updateCuMemberGradeSecond(secondRangeTableName, period);
}
}

View File

@ -0,0 +1,62 @@
package com.hzs.bonus.listener;
import com.hzs.bonus.bonus.service.IBonusSettleService;
import com.hzs.bonus.bonus.service.ICuMemberRetailLogService;
import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.RabbitMqConstants;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
/**
* 订单秒接
*/
@Slf4j
@Component
public class SaOrderSecondListener {
@Autowired
private IBonusSettleService iBonusSettleService;
@Autowired
private ICuMemberRetailLogService iCuMemberRetailLogService;
@RabbitListener(bindings = @QueueBinding(
exchange = @Exchange(value = RabbitMqConstants.ORDER_SECOND_EXCHANGE, type = "topic"),
value = @Queue(value = RabbitMqConstants.ORDER_SECOND_QUEUE, durable = "true", autoDelete = "false"),
key = RabbitMqConstants.ORDER_SECOND_KEY))
@RabbitHandler
public void onMessage(Message<SaOrderExt> message, Channel channel) throws Exception {
SaOrderExt saOrderExt = message.getPayload();
log.info("秒结开始消费,接收到的参数:{}", saOrderExt.getOrderCode());
Long deliveryTag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);
channel.basicAck(deliveryTag, false);
CuMemberRetailLog cuMemberRetailLog = new CuMemberRetailLog();
cuMemberRetailLog.setPkCountry(CountryConstants.CHINA_COUNTRY);
cuMemberRetailLog.setPkCreator(MagicNumberConstants.PK_ADMIN);
cuMemberRetailLog.setOrderCode(saOrderExt.getOrderCode());
if (saOrderExt.getCancelBool() != null && saOrderExt.getCancelBool()) {
cuMemberRetailLog.setCancelStatus(EYesNo.YES.getIntValue());
}
try {
Thread.sleep(1000);
iBonusSettleService.calculateCuMemberRetailRangeBonusBySaOrder(saOrderExt.getOrderCode());
} catch (Exception e) {
cuMemberRetailLog.setEnableStatus(EYesNo.NO.getIntValue());
cuMemberRetailLog.setMsg(e.getMessage());
e.printStackTrace();
} finally {
iCuMemberRetailLogService.save(cuMemberRetailLog);
}
}
}

View File

@ -163,7 +163,6 @@
a.pay_time,
a.pk_rate,
a.system_type,
a.income_status,
a.pk_country,
a.pk_settle_country,
a.enable_status,
@ -204,6 +203,34 @@
</foreach>
</select>
<!-- 根据会员查询会员血缘上网体 秒结使用 -->
<select id="getCuMemberRetailRangeParent" resultMap="CuMemberRetailRangeExt">
select a.pk_id pk_member,
a.member_code,
a.member_name,
a.pk_parent,
a.pk_settle_country,
a.category,
a.account_status,
a.pk_settle_grade pk_grade,
a.income_status,
a.pay_time,
a.system_type,
a.pk_country,
a.pk_settle_country,
a.is_activate enable_status,
ba.grade_value,
ba.grade_name
from (select *
from cu_member
where del_flag = 0
start with pk_id = #{saOrderExt.pkMember}
connect by pk_id = prior pk_parent) a
inner join bd_grade ba
on a.pk_settle_grade = ba.pk_id
where ba.del_flag = 0
</select>
<select id="queryCuMemberRetailRangeByMemberId"
resultType="com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt">
SELECT a.pk_member,
@ -254,6 +281,33 @@
and a.pk_member = #{memberId}
</select>
<!-- 查询会员信息 -->
<select id="getMemberRetailRange"
resultType="com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt">
select a.pk_id pk_member,
a.member_code,
a.member_name,
a.pk_parent,
a.pk_settle_country,
a.category,
a.account_status,
a.pk_settle_grade pk_grade,
a.income_status,
a.pay_time,
a.system_type,
a.pk_country,
a.pk_settle_country,
a.is_activate enable_status,
ba.grade_value,
ba.grade_name
from cu_member a
inner join bd_grade ba
on a.pk_settle_grade = ba.pk_id
where a.del_flag = 0
and a.pk_id = #{memberId}
and ba.del_flag = 0
</select>
<!-- 更新会员激活状态 -->
<update id="updateMemberEnable">
update ${rangeTableName} cmr
@ -264,4 +318,56 @@
</foreach>
</update>
<!-- 当前网体更新极差秒接表 -->
<update id="mergeMemberSecondRetailRangeByRange">
merge into ${secondRangeTableName} a
using (
select a.pk_id pk_member,
a.pk_parent,
a.pk_settle_grade pk_grade,
a.pk_awards,
a.pk_range_awards,
a.is_activate enable_status,
a.system_type
from (select *
from cu_member
where del_flag = 0
start
with pk_id = #{pkMember}
connect by pk_id = prior pk_parent
) a
) b
on (a.pk_member = b.pk_member)
when not matched then
insert (pk_member, pk_parent, pk_grade, pk_awards, pk_share_awards, enable_status, system_type)
values (b.pk_member, b.pk_parent, b.pk_grade, b.pk_awards, b.pk_range_awards, b.enable_status, b.system_type)
</update>
<!-- 更新极差秒接表,用昨天的结算表 -->
<update id="mergeMemberSecondRetailRangeByRangeEnable">
merge into ${secondRangeTableName} a
using (
select a.pk_id pk_member,
a.pk_parent,
a.pk_settle_grade pk_grade,
a.pk_awards,
a.pk_range_awards,
nvl(b.enable_status, 1) enable_status
from (select *
from cu_member
where del_flag = 0
start
with pk_id = #{pkMember}
connect by pk_id = prior pk_parent
) a
left join ${rangeTableName} b
on a.pk_id = b.pk_member
where b.enable_status = 0
) b
on (a.pk_member = b.pk_member)
when matched then
update set a.enable_status = b.enable_status, a.pk_grade = b.pk_grade
</update>
</mapper>

View File

@ -507,4 +507,131 @@
from dual connect by rownum &lt;= #{rowNum}
</select>
<insert id="insertOrUpdateCuMemberBonus">
merge into cu_member_bonus a
using(
select pk_id,pk_member,period,pk_rate,direct_income,expand_income,expand_no_capping,
expand_capping,coach_income,share_income,service_income,back_points,service_spend,
pur_real_subtotal,repur_push_income,
repur_range_income,
repur_expand_income,repur_real_subtotal,
cloud_direct_income,cloud_pur_income,cloud_repur_income,cloud_real_subtotal,
repur_coupon,repur_coupon_subtotal,global_points,
car_award_points,hi_fun_income,hai_fun_income,
retail_range_income, retail_same_level_income, retail_area_income,
retail_benefit_range_income, retail_benefit_avg_income, retail_benefit_income,
retail_real_subtotal, maker_direct_income,maker_share_income, maker_real_subtotal, real_income_total,
pk_country, pk_creator, grant_status, income_status
from (
<foreach item="item" index="index" collection="cuMemberBonusList" separator=" union ">
select #{item.pkId} pk_id,#{item.pkMember} pk_member,#{item.period} period,#{item.pkRate} pk_rate,
#{item.directIncome} direct_income,#{item.expandIncome} expand_income,#{item.expandNoCapping} expand_no_capping,
#{item.expandCapping} expand_capping,#{item.coachIncome} coach_income,#{item.shareIncome} share_income,
#{item.serviceIncome} service_income,#{item.backPoints} back_points,#{item.serviceSpend} service_spend,
#{item.purRealSubtotal} pur_real_subtotal,#{item.repurPushIncome} repur_push_income,
#{item.repurRangeIncome} repur_range_income,
#{item.repurExpandIncome} repur_expand_income,
#{item.repurRealSubtotal} repur_real_subtotal,#{item.cloudDirectIncome} cloud_direct_income,
#{item.cloudPurIncome} cloud_pur_income,#{item.cloudRepurIncome} cloud_repur_income,
#{item.cloudRealSubtotal} cloud_real_subtotal,#{item.repurCoupon} repur_coupon,
#{item.repurCouponSubtotal} repur_coupon_subtotal,#{item.globalPoints} global_points,
#{item.carAwardPoints} car_award_points,#{item.hiFunIncome} hi_fun_income,
#{item.haiFunIncome} hai_fun_income,#{item.makerDirectIncome} maker_direct_income,
#{item.makerShareIncome} maker_share_income,#{item.makerRealSubtotal} maker_real_subtotal,
#{item.realIncomeTotal} real_income_total,#{item.pkCountry} pk_country,#{item.pkCreator} pk_creator,
#{item.grantStatus} grant_status, #{item.incomeStatus} income_status,
#{item.retailRangeIncome} retail_range_income, #{item.retailSameLevelIncome} retail_same_level_income,
#{item.retailAreaIncome} retail_area_income, #{item.retailBenefitRangeIncome} retail_benefit_range_income,
#{item.retailBenefitAvgIncome} retail_benefit_avg_income, #{item.retailBenefitIncome} retail_benefit_income,
#{item.retailRealSubtotal} retail_real_subtotal
from dual
</foreach>)
) b
on (a.pk_member = b.pk_member and a.period = b.period)
when matched then
update set
a.direct_income = a.direct_income + b.direct_income,a.expand_income=a.expand_income+b.expand_income,
a.expand_no_capping=a.expand_no_capping+b.expand_no_capping,a.expand_capping=a.expand_capping+b.expand_capping,
a.coach_income=a.coach_income+b.coach_income,a.share_income=a.share_income+b.share_income,
a.service_income=a.service_income+b.service_income,a.back_points=a.back_points+b.back_points,a.service_spend=a.service_spend+b.service_spend,
a.pur_real_subtotal=a.pur_real_subtotal+b.pur_real_subtotal,a.repur_push_income=a.repur_push_income+b.repur_push_income,
a.repur_range_income = a.repur_range_income + b.repur_range_income,
a.repur_expand_income=a.repur_expand_income+b.repur_expand_income,
a.repur_real_subtotal=a.repur_real_subtotal+b.repur_real_subtotal,a.cloud_direct_income=a.cloud_direct_income+b.cloud_direct_income,
a.cloud_pur_income=a.cloud_pur_income+b.cloud_pur_income,a.cloud_repur_income=a.cloud_repur_income+b.cloud_repur_income,
a.cloud_real_subtotal=a.cloud_real_subtotal+b.cloud_real_subtotal,a.repur_coupon=a.repur_coupon+b.repur_coupon,
a.global_points=a.global_points+b.global_points,a.car_award_points=a.car_award_points+b.car_award_points,
a.hi_fun_income=a.hi_fun_income+b.hi_fun_income,a.real_income_total=a.real_income_total+b.real_income_total,
a.retail_range_income = a.retail_range_income + b.retail_range_income,
a.retail_same_level_income = a.retail_same_level_income + b.retail_same_level_income,
a.retail_area_income = a.retail_area_income + b.retail_area_income,
a.retail_benefit_range_income = a.retail_benefit_range_income + b.retail_benefit_range_income,
a.retail_benefit_avg_income = a.retail_benefit_avg_income + b.retail_benefit_avg_income,
a.retail_benefit_income = a.retail_benefit_income + b.retail_benefit_income,
a.retail_real_subtotal = a.retail_real_subtotal + b.retail_real_subtotal
when not matched then
insert (
pk_id,pk_member,period,pk_rate,direct_income,expand_income,expand_no_capping,
expand_capping,coach_income,share_income,service_income,back_points,service_spend,
pur_real_subtotal,repur_push_income,
repur_range_income,
repur_expand_income,repur_real_subtotal,
cloud_direct_income,cloud_pur_income,cloud_repur_income,cloud_real_subtotal,
repur_coupon,global_points,car_award_points,hi_fun_income,real_income_total,
pk_country,pk_creator,grant_status,income_status,
retail_range_income, retail_same_level_income, retail_area_income,
retail_benefit_range_income, retail_benefit_avg_income, retail_benefit_income,
retail_real_subtotal)
values (
b.pk_id,b.pk_member,b.period,b.pk_rate,b.direct_income,b.expand_income,b.expand_no_capping,
b.expand_capping,b.coach_income,b.share_income,b.service_income,b.back_points,b.service_spend,
b.pur_real_subtotal,b.repur_push_income,
b.repur_range_income,
b.repur_expand_income,b.repur_real_subtotal,
b.cloud_direct_income,b.cloud_pur_income,b.cloud_repur_income,b.cloud_real_subtotal,
b.repur_coupon,b.global_points,b.car_award_points,b.hi_fun_income,b.real_income_total,
b.pk_country,b.pk_creator,b.grant_status,b.income_status,
b.retail_range_income, b.retail_same_level_income, b.retail_area_income,
b.retail_benefit_range_income, b.retail_benefit_avg_income, b.retail_benefit_income,
b.retail_real_subtotal)
</insert>
<!-- 回退奖金 -->
<update id="mergeBackRangeBonusIncome">
merge into cu_member_bonus a
using (
select b.* from bd_bonus_items bt
inner join (
select pk_bonus, pk_bonus_items,
sum(pretax_income) pretax_income,
sum(income_tax) income_tax,
sum(real_income) real_income
from
<choose>
<when test="bonusValue == 36">cu_member_bonus_detail</when>
<otherwise>cu_member_bonus_range</otherwise>
</choose>
where del_flag = 0
and pk_order= #{pkOrder}
group by pk_bonus, pk_bonus_items
) b
on bt.pk_id = b.pk_bonus_items
where bt.bonus_value = #{bonusValue}
) b
on (a.pk_id = b.pk_bonus)
when matched then
update set a.retail_real_subtotal = a.retail_real_subtotal - b.real_income,
a.back_points = a.back_points - b.income_tax,
a.real_income_total = a.real_income_total - b.real_income
<if test="bonusValue == 25">
,a.retail_range_income = a.retail_range_income - b.pretax_income
</if>
<if test="bonusValue == 35">
,a.repur_range_income = a.repur_range_income - b.pretax_income
</if>
<if test="bonusValue == 36">
,a.retail_area_income = a.retail_area_income - b.pretax_income
</if>
</update>
</mapper>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hzs.bonus.bonus.mapper.CuMemberRetailLogMapper">
<update id="updateCuMemberRetailLogByList">
update cu_member_retail_log
set enable_status = 0
where del_flag = 0
and pk_id in
<foreach collection="cuMemberRetailLogs" item="item" open="(" close=")" separator=",">
#{item.pkId}
</foreach>
</update>
</mapper>

View File

@ -35,4 +35,31 @@
order by upgrade_time
</select>
<!-- 查询会员最新手动升级记录,更新秒结表会员等级小于手动升级的会员等级 -->
<update id="updateCuMemberGradeSecond">
merge into ${secondRangeTableName} a
using (
select cs.pk_member, b.pk_grade
from ${secondRangeTableName} cs
inner join (
select a.pk_member, max(a.new_level) pk_grade
from cu_member_grade a
inner join (
select pk_member, max(nvl(modified_time, creation_time)) creation_time
from cu_member_grade
where period &lt;= #{period}
and del_flag = 0
and up_type = 2
group by pk_member
) b on a.pk_member = b.pk_member and nvl(a.modified_time, a.creation_time) = b.creation_time
group by a.pk_member
) b on cs.pk_member = b.pk_member
where cs.pk_grade &lt; b.pk_grade
) b
on (a.pk_member = b.pk_member)
when matched then
update set
a.pk_grade = b.pk_grade
</update>
</mapper>

View File

@ -1,7 +1,9 @@
package com.hzs.member.base.controller.api;
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.common.core.annotation.RepeatSubmitSimple;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.msg.CommonMsgConstants;
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
import com.hzs.common.core.constant.msg.MemberMsgConstants;
@ -369,4 +371,50 @@ public class ApiMemberController extends BaseController {
return getDataTable(list);
}
/**
* 查询推荐人编号 -- 188分享注册
*
* @param pkParent 推荐人加密
* @return
*/
@GetMapping("/fans-convert-code/{pkParent}")
public AjaxResult fansConvertCode(@PathVariable("pkParent") String pkParent) {
// 验证必输项
if (pkParent == null) {
return AjaxResult.error(MemberMsgConstants.REQUIRED_NOT_EMPTY);
}
CuMember cuMember = iCuMemberService.getMemberById(Long.parseLong(new String(Base64Decoder.decode(pkParent))));
if (null != cuMember) {
return AjaxResult.success("", cuMember.getMemberCode());
}
return AjaxResult.error();
}
/**
* 根据订单查询会员信息 -- 188分享注册
*
* @param orderCode 订单编号
* @return
*/
@RepeatSubmitSimple(intervalTime = 2L)
@GetMapping("/fans-order/{orderCode}")
public AjaxResult fansOrder(@PathVariable("orderCode") String orderCode) {
CuMemberExt cuMemberExt = iCuMemberService.queryFansOrder(orderCode);
if (null == cuMemberExt) {
return AjaxResult.error("注册会员失败,请联系客服处理");
}
return AjaxResult.success(MemberShare.builder()
.memberName(cuMemberExt.getMemberName())
.memberCode(cuMemberExt.getMemberCode())
.phone(cuMemberExt.getPhone())
.loginPassword(cuMemberExt.getLoginPassword())
.payPassword(cuMemberExt.getPayPassword())
.urlAddress(BdConfig.getPc())
.gzh(BdConfig.getGzh())
.ios(BdConfig.getIos())
.android(BdConfig.getAndroid())
.build());
}
}

View File

@ -651,4 +651,12 @@ public interface CuMemberMapper extends BaseMapper<CuMember> {
*/
List<MemberMeritsSummaryVo> queryDateBySummary(CensusSummaryParam censusSummaryParam);
/**
* 查询海粉订单
*
* @param orderCode 订单编号
* @return
*/
CuMemberExt queryFansOrder(@Param("orderCode") String orderCode);
}

View File

@ -1,11 +1,13 @@
package com.hzs.member.base.provider;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.ELoginType;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberRegister;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.retail.member.CuMemberRetailRegion;
@ -40,6 +42,8 @@ public class MemberServiceProvider implements IMemberServiceApi {
@Autowired
private ICuMemberService iCuMemberService;
@Autowired
private ICuMemberShareService iCuMemberShareService;
@Autowired
private ICuMemberBusinessService iCuMemberBusinessService;
@Autowired
private ICuMemberRegisterService iCuMemberRegisterService;
@ -62,6 +66,20 @@ public class MemberServiceProvider implements IMemberServiceApi {
return R.ok(loginMember);
}
@Override
public R<LoginMember> getShareMemberInfo(String memberCode) {
LambdaQueryWrapper<CuMemberShare> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberShare::getMemberCode, memberCode);
CuMemberShare cuMemberShare = iCuMemberShareService.getOne(queryWrapper);
if (null == cuMemberShare) {
return R.fail("用户名或密码错误");
}
LoginMember loginMember = new LoginMember();
loginMember.setLoginType(ELoginType.SHARE_MEMBER.getValue());
loginMember.setCuMemberShare(cuMemberShare);
return R.ok(loginMember);
}
@Override
public R<CuMemberExt> getMemberById(Long memberId) {
return R.ok(iCuMemberService.getMemberById(memberId));
@ -381,4 +399,9 @@ public class MemberServiceProvider implements IMemberServiceApi {
return R.ok(iCuMemberService.checkRegisterRelation(phone, parentCode));
}
@Override
public R<CuMemberShare> queryCuMemberShare(Long pkMember) {
return R.ok(iCuMemberShareService.queryCuMemberShare(pkMember));
}
}

View File

@ -179,7 +179,15 @@ public interface ICuMemberService extends IService<CuMember> {
* @param digit 编号数字位数
* @return
*/
String createUserNameByPremix(Integer pkCountry, Integer digit);
String createUserNameByPremix(Integer pkCountry, Integer digit); /**
* 生成会员编号
*
* @param pkCountry 所属国家
* @param isHaiFun
* @param digit 编号数字位数
* @return
*/
String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit);
/**
* 批量生成会员编号
@ -797,7 +805,7 @@ public interface ICuMemberService extends IService<CuMember> {
* @return
*/
CuMember getRetailTopMember(Long pkMember, String memberCode, Long topPkMember, String topMemberCode);
String createRetailMemberCode(String prefix);
/**
* 根据推荐人编号校验手机号必须唯一
*
@ -911,4 +919,12 @@ public interface ICuMemberService extends IService<CuMember> {
*/
List<CensusSummaryVo> selectCensusSummary(CensusSummaryParam censusSummaryParam, List<String> days);
/**
* 查询海粉订单
*
* @param orderCode 订单编号
* @return
*/
CuMemberExt queryFansOrder(String orderCode);
}

View File

@ -22,5 +22,10 @@ public interface ICuMemberShareService extends IService<CuMemberShare> {
* @return
*/
List<SeaFlourVo> seaFlourList(SeaFlourParam seaFlourParam);
/**
* 查询会员分享
*
* @param pkMember 会员主键
*/
CuMemberShare queryCuMemberShare(Long pkMember);
}

View File

@ -1614,6 +1614,34 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
return memberCode;
}
@Override
public String createUserNameByPremix(Integer pkCountry, Boolean isHaiFun, Integer digit) {
String prefix;
if (isHaiFun) {
prefix = SysConstants.HAI_FUN_PREFIX;
} else {
CountryDTO country = iCountryServiceApi.getCountry(pkCountry).getData();
prefix = country.getCode();
}
if (StringUtils.isEmpty(prefix)) {
return null;
}
// 生成loginName
String memberCode = this.createMemberCode(prefix, digit);
CuMember cuMemberByKey = getMember(memberCode);
if (cuMemberByKey != null && cuMemberByKey.getPkId() > 0) {
// 用户名已经存在则继续尝试
return this.createUserNameByPremix(pkCountry, isHaiFun, digit);
} else {
// 验证空单注册里面是否存在编号
List<CuMemberEmptyCode> cuMemberEmptyDetails = iCuMemberEmptyCodeService.queryCuMemberEmptyCode(memberCode);
if (CollectionUtil.isNotEmpty(cuMemberEmptyDetails)) {
return this.createUserNameByPremix(pkCountry, isHaiFun, digit);
}
}
return memberCode;
}
/**
* 创建会员编号
*
@ -3080,6 +3108,7 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
* @param prefix 会员编号前缀
* @return
*/
@Override
public String createRetailMemberCode(String prefix) {
if (StringUtils.isEmpty(prefix)) {
prefix = SysConstants.RETAIL_PREFIX;
@ -3329,4 +3358,9 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
return censusSummaryList;
}
@Override
public CuMemberExt queryFansOrder(String orderCode) {
return baseMapper.queryFansOrder(orderCode);
}
}

View File

@ -1,5 +1,6 @@
package com.hzs.member.base.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.member.base.mapper.CuMemberShareMapper;
@ -30,4 +31,10 @@ public class CuMemberShareServiceImpl extends ServiceImpl<CuMemberShareMapper, C
return baseMapper.seaFlourList(seaFlourParam);
}
@Override
public CuMemberShare queryCuMemberShare(Long pkMember) {
QueryWrapper<CuMemberShare> queryWrapper = new QueryWrapper<>();
queryWrapper.select("PK_ID,MEMBER_CODE,MEMBER_NAME,PHONE,PK_PARENT");
return baseMapper.selectById(pkMember);
}
}

View File

@ -21,4 +21,13 @@ public interface IMemberLoginService {
**/
LoginMember passwordFreelogin(String username);
/**
* 分享登录
*
* @param username 用户名
* @param password 密码
* @return
*/
LoginMember shareLogin(String username, String password);
}

View File

@ -11,6 +11,7 @@ import com.hzs.common.core.utils.ServletUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.utils.ip.IpUtils;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.detail.CuMemberLogin;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.security.utils.SecurityUtils;
@ -157,6 +158,35 @@ public class MemberLoginServiceImpl implements IMemberLoginService {
return loginMember;
}
@Override
public LoginMember shareLogin(String username, String password) {
// 用户名或密码为空 错误
if (StringUtils.isAnyBlank(username, password)) {
// 用户/密码必须填写
throw new ServiceException(TransactionUtils.getContent(SystemMsgConstants.USER_REQUIRED));
}
// 查询用户信息
R<LoginMember> memberResult = iMemberServiceApi.getShareMemberInfo(username);
if (R.FAIL == memberResult.getCode()) {
throw new ServiceException(memberResult.getMsg());
}
if (StringUtils.isNull(memberResult.getData())) {
// 登录用户: %s 不存在
throw new ServiceException(TransactionUtils.getContent(SystemMsgConstants.USER_NOT_EXIST, username));
}
LoginMember loginMember = memberResult.getData();
CuMemberShare cuMemberShare = loginMember.getCuMemberShare();
// 密码校验
if (!SecurityUtils.matchesPassword(password, cuMemberShare.getLoginPwd())) {
// 用户不存在/密码错误
throw new ServiceException(TransactionUtils.getContent(SystemMsgConstants.USER_ERROR, username));
}
return loginMember;
}
/**
* 记录登录信息
*

View File

@ -172,4 +172,30 @@ public class ApiShareController extends BaseController {
}
/**
* 获取188分享码H5
*
* @return
*/
@GetMapping("/fans-code-h5")
public AjaxResult fansCodeH5() {
Long userId = SecurityUtils.getUserId();
// 188注册分享人就是自己
R<String> resultR = iShareServiceApi.queryShareCode(ShareServiceDTO.builder()
.eShareType(EShareType.FANS)
.pkBusiness(userId)
.pkCountry(SecurityUtils.getPkCountry())
.userId(userId)
.build());
if (resultR.isSuccess()) {
Map<String, String> resultMap = new HashMap<>();
resultMap.put("dataUrl", resultR.getData());
// 前端无法根据URL生成海报此处需要转一下base64
resultMap.put("dataStr", Base64Util.toUrlBase64(resultR.getData()));
return AjaxResult.success(resultMap);
}
return AjaxResult.error();
}
}

View File

@ -1,13 +1,22 @@
package com.hzs.retail.login.controller;
import cn.hutool.core.codec.Base64Decoder;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.SysConstants;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.security.auth.AuthMemberUtil;
import com.hzs.common.security.service.MemberTokenService;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.member.base.dto.LoginMember;
import com.hzs.member.base.service.ICuMemberService;
import com.hzs.member.base.service.ICuMemberShareService;
import com.hzs.member.login.param.AutoLoginParam;
import com.hzs.member.login.service.IMemberLoginService;
import com.hzs.retail.login.param.RetailAutoLoginParam;
import com.hzs.retail.login.param.RetailLoginParam;
import com.hzs.retail.login.service.IRetailMemberLoginService;
@ -28,6 +37,13 @@ import javax.validation.Valid;
@RestController
public class RetailMemberTokenController {
@Autowired
private ICuMemberService iCuMemberService;
@Autowired
private ICuMemberShareService iCuMemberShareService;
@Autowired
private IMemberLoginService iMemberLoginService;
@Autowired
private MemberTokenService memberTokenService;
@Autowired
@ -57,19 +73,53 @@ public class RetailMemberTokenController {
* @return
*/
@PostMapping("/auto-login")
public AjaxResult autoLogin(@Valid @RequestBody RetailAutoLoginParam param) {
String tmpUuid = redisService.getCacheObject(CacheConstants.AUTO_LOGIN + param.getUsername());
if (!param.getUuid().equals(tmpUuid)) {
// 没有自动登录标记 或者 标记不对则不能自动登录
return AjaxResult.error("当前会员已不能快递登录");
// public AjaxResult autoLogin(@Valid @RequestBody RetailAutoLoginParam param) {
// String tmpUuid = redisService.getCacheObject(CacheConstants.AUTO_LOGIN + param.getUsername());
// if (!param.getUuid().equals(tmpUuid)) {
// // 没有自动登录标记 或者 标记不对则不能自动登录
// return AjaxResult.error("当前会员已不能快递登录");
// }
//
// // 用户登录
// LoginMember loginMember = iRetailMemberLoginService.login(param.getUsername(), param.getPassword());
// // 获取登录token
// return AjaxResult.success(memberTokenService.createToken(loginMember));
// }
public AjaxResult autoLogin(@RequestBody AutoLoginParam param) {
if (StringUtils.isEmpty(param.getPkParent())) {
return AjaxResult.error("缺少注册信息!");
}
// 用户登录
LoginMember loginMember = iRetailMemberLoginService.login(param.getUsername(), param.getPassword());
// 获取登录token
return AjaxResult.success(memberTokenService.createToken(loginMember));
}
// 上级编码推荐人
Long pkParent = Long.parseLong(new String(Base64Decoder.decode(param.getPkParent())));
// 查询上级信息
CuMemberExt parentCuMember = iCuMemberService.getMemberById(pkParent);
if (null == parentCuMember) {
return AjaxResult.error("二维码已经失效!");
}
// 生成的会员编号
String memberCode = iCuMemberService.createRetailMemberCode(SysConstants.RETAIL_PREFIX);
// iCuMemberService.createUserNameByPremix(parentCuMember.getPkSettleCountry(), MagicNumberConstants.DIGIT);
CuMemberShare cuMemberShare = new CuMemberShare();
cuMemberShare.setMemberCode(memberCode);
cuMemberShare.setPkParent(pkParent);
cuMemberShare.setLoginPassword(SysConstants.LOGIN_PASSWORD);
cuMemberShare.setLoginPwd(SecurityUtils.encryptPassword(SysConstants.LOGIN_PASSWORD));
cuMemberShare.setPayPassword(SysConstants.PAY_PASSWORD);
cuMemberShare.setPayPwd(SecurityUtils.encryptPassword(SysConstants.PAY_PASSWORD));
cuMemberShare.setPkCreator(pkParent);
cuMemberShare.setPkCountry(parentCuMember.getPkSettleCountry());
if (iCuMemberShareService.save(cuMemberShare)) {
// 会员登录
LoginMember loginMember = iMemberLoginService.shareLogin(memberCode, SysConstants.LOGIN_PASSWORD);
// 获取登录token
return AjaxResult.success(memberTokenService.createToken(loginMember));
}
return AjaxResult.error();
}
/**
* 会员登出
*

View File

@ -2519,4 +2519,19 @@
</select>
<!-- 查询海粉订单 -->
<select id="queryFansOrder" resultMap="MemberResultMap">
select cm.member_code,
cm.member_name,
cm.phone,
cm.login_password,
cm.pay_password
from sa_order so
inner join cu_member cm
on cm.pk_id = so.pk_creator
where so.del_flag = 0
and so.order_type = 41
and so.order_code = #{orderCode}
</select>
</mapper>

View File

@ -7,17 +7,22 @@ import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EGrade;
import com.hzs.common.core.enums.EOrderPrefix;
import com.hzs.common.core.enums.ESpecialArea;
import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.exception.ServiceException;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.CommonUtil;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.retail.member.ext.CuMemberRetailRegionExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.wares.BdWares;
import com.hzs.common.domain.system.config.BdGrade;
import com.hzs.common.security.service.MemberTokenService;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.retail.sale.controller.service.IRetailOrderService;
@ -25,10 +30,13 @@ import com.hzs.retail.sale.param.*;
import com.hzs.retail.sale.vo.*;
import com.hzs.sale.order.param.*;
import com.hzs.sale.order.service.ISaOrderService;
import com.hzs.sale.order.service.ISaOrderShareTmpService;
import com.hzs.sale.shopping.service.IShoppingCartService;
import com.hzs.sale.shopping.vo.ProductGroup;
import com.hzs.sale.shopping.vo.ShoppingCartRedis;
import com.hzs.sale.shopping.vo.ShoppingCartVO;
import com.hzs.sale.wares.service.IBdWaresService;
import com.hzs.sale.wares.service.IBdWaresSpecsSkuService;
import com.hzs.system.base.IAreaServiceApi;
import com.hzs.system.config.IGradeServiceApi;
import com.hzs.system.config.dto.GradeDTO;
@ -36,12 +44,14 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 新零售订单控制器
@ -60,12 +70,21 @@ public class ApiRetailOrderController {
@Autowired
private RedisService redisService;
@Autowired
private IBdWaresService iBdWaresService;
@Autowired
private IBdWaresSpecsSkuService iBdWaresSpecsSkuService;
@Autowired
private ISaOrderShareTmpService iSaOrderShareTmpService;
@DubboReference
IMemberServiceApi iMemberServiceApi;
@DubboReference
IGradeServiceApi iGradeServiceApi;
@DubboReference
IAreaServiceApi iAreaServiceApi;
@Autowired
private MemberTokenService memberTokenService;
/**
* 校验会员等级
@ -791,4 +810,111 @@ public class ApiRetailOrderController {
return null;
}
/**
* 确认注册订单
*
* @param registerParam 订单入参
* @param source 数据来源
* @return
*/
@RepeatSubmit
@PostMapping("/fans-confirm-order")
public AjaxResult fansConfirmOrder(@RequestBody RetailOrderRegisterParam registerParam,
@RequestHeader("Source") Integer source) {
// 设置数据来源
registerParam.setSource(source);
// 会员ID
registerParam.setPkCreator(SecurityUtils.getUserId());
// 新零售注册专区
registerParam.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue());
// 系统类型
registerParam.setSystemType(SecurityUtils.getSystemType());
// 获取等级列表
List<BdGrade> gradeList = iGradeServiceApi.getRetailGradeList().getData();
// 校验注册权限等
// String checkStr = this.checkRegistrationPermission(registerParam, gradeList);
// if (null != checkStr) {
// return AjaxResult.error(checkStr);
// }
// 手机号可以重复不需要进行是否重复校验 -- 已经跳过此处可以不需要当前判断
// // 校验注册关系是否跨团队 -- 2024.12.24 修改为校验手机号必须唯一
// String relationStr = iMemberServiceApi.checkRegisterRelation(registerParam.getPhone(), registerParam.getParentCode()).getData();
// if (relationStr != null) {
// return AjaxResult.error(relationStr);
// }
// 购物车中获取商品信息
// registerParam.setOrderItemsParams(convertShoppingCarToSku(registerParam.getPkCreator(), registerParam.getShopList()));
// 遍历商品封装订单明细
// 订单金额
BigDecimal orderAmount = BigDecimal.ZERO;
// 生成订单编号
String orderCode = CommonUtil.createSerialNumber(EOrderPrefix.ORDER_CODE);
List<OrderItemsParam> orderItemsParams = new ArrayList<>();
for (FansConfirmOrderWaresParam waresParam : registerParam.getWaresList()) {
// 遍历sku
// 产品价格等map
Map<Long, BdWaresSpecsSkuExt> skuMap = iBdWaresSpecsSkuService.queryWaresSpecsSkuList(waresParam.getSkuList().stream().map(FansConfirmOrderSkuParam::getPkWaresSku).collect(Collectors.toList()));
// 查询商品
BdWares bdWares = iBdWaresService.getWares(waresParam.getPkWares());
// 缓存数据
List<WaresItemsParam> itemsParamList = new ArrayList<>(waresParam.getSkuList().size());
// 遍历产品信息
for (FansConfirmOrderSkuParam skuParam : waresParam.getSkuList()) {
BdWaresSpecsSkuExt specsSku = skuMap.get(skuParam.getPkWaresSku());
orderAmount = orderAmount.add(specsSku.getPrice().multiply(new BigDecimal(skuParam.getQuantity() * waresParam.getQuantity())));
itemsParamList.add(WaresItemsParam.builder()
.pkWaresSpecsSku(skuParam.getPkWaresSku().intValue())
.quantity(skuParam.getQuantity())
.build());
}
orderItemsParams.add(OrderItemsParam.builder()
.waresCode(bdWares.getWaresCode())
.quantity(waresParam.getQuantity())
.waresItemsParamList(itemsParamList)
.build());
}
registerParam.setOrderItemsParams(orderItemsParams);
CuMemberShare memberShare = memberTokenService.getLoginMember().getCuMemberShare();
registerParam.setCuMemberShare(memberShare);
// registerParam.setPkCreator(memberShare.getPkParent());
// 确认订单
String str = iRetailOrderService.confirmRegOrder(registerParam, gradeList);
// redis 拿金额
SaOrderExt saOrder = redisService.getCacheObject(CacheConstants.RETAIL_TEMP_ORDER + registerParam.getPkCreator() + registerParam.getOrderCode());
return confirmSharedOrderReturn(str, registerParam.getPkCreator(), registerParam.getShopList(), registerParam.getOrderCode(), saOrder.getOrderAmount());
}
/**
* 确认订单返回
*
* @param str 提示信息null 为成功
* @param pkCreator 订单创建人
* @param shopList 购物车ID
* @param orderCode 订单编号
* @return
*/
private AjaxResult confirmSharedOrderReturn(String str, Long pkCreator, List<ShoppingCartRedis> shopList, String orderCode, BigDecimal orderAmount) {
if (null == str) {
// 删除购物车商品数据
if (CollectionUtil.isNotEmpty(shopList)) {
shoppingCartService.batchDelShopping(pkCreator, ShoppingCartVO.builder()
.deleteList(shopList)
.build());
}
return AjaxResult.success(RetailOrderVO.builder()
.orderCode(orderCode)
.orderAmount(orderAmount)
.build());
}
return AjaxResult.error(str);
}
}

View File

@ -3,6 +3,7 @@ package com.hzs.retail.sale.controller.service.impl;
import cn.hutool.core.codec.Base64Encoder;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
@ -21,6 +22,7 @@ import com.hzs.common.domain.activity.pick.AcPick;
import com.hzs.common.domain.activity.pick.AcPickMemberLog;
import com.hzs.common.domain.member.account.CuMemberAccount;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberAccountExt;
import com.hzs.common.domain.sale.ext.BdWaresDetailExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
@ -52,6 +54,7 @@ import com.hzs.system.base.dto.CurrencyDTO;
import com.hzs.system.config.IGradeServiceApi;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -100,6 +103,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
@Autowired
private RedisService redisService;
@Autowired
private RabbitTemplate rabbitTemplate;
@DubboReference
IGradeServiceApi iGradeServiceApi;
@ -239,17 +244,25 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
}
}
// 2025.08.04 注册升级专区下单支付会员如果是分公司订单不需要发货直接放入提货中心
CuMember createMember = orderParam.getCreatorMember();
if (null == createMember) {
createMember = iMemberServiceApi.getMember(orderParam.getPkCreator()).getData();
}
Integer createPkGrade = createMember.getPkSettleGrade();
BdGrade createGrade = gradeList.stream().filter(tmpData -> tmpData.getPkId().equals(createPkGrade)).findFirst().get();
if (EGrade.REGION.getValue() == createGrade.getGradeValue()
|| EGrade.DIRECTOR.getValue() == createGrade.getGradeValue()) {
// 发货方式提货中心
saOrderExt.setDeliveryWay(EDelivery.PICK.getValue());
if(ObjectUtil.isNotEmpty(orderParam.getCuMemberShare())){
CuMember createMember = orderParam.getCreatorMember();
if (null == createMember) {
createMember = iMemberServiceApi.getMember(orderParam.getCuMemberShare().getPkParent()).getData();
orderParam.setCreatorMember(createMember);
}
}else{
// 2025.08.04 注册升级专区下单支付会员如果是分公司订单不需要发货直接放入提货中心
CuMember createMember = orderParam.getCreatorMember();
if (null == createMember) {
createMember = iMemberServiceApi.getMember(orderParam.getPkCreator()).getData();
}
Integer createPkGrade = createMember.getPkSettleGrade();
BdGrade createGrade = gradeList.stream().filter(tmpData -> tmpData.getPkId().equals(createPkGrade)).findFirst().get();
if (EGrade.REGION.getValue() == createGrade.getGradeValue()
|| EGrade.DIRECTOR.getValue() == createGrade.getGradeValue()) {
// 发货方式提货中心
saOrderExt.setDeliveryWay(EDelivery.PICK.getValue());
}
}
}
@ -499,8 +512,15 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
cuMember.setCreationTime(new Date());
cuMember.setPkCreator(orderParam.getPkCreator());
boolean isShared = false;
if (null == orderParam.getCreatorMember()) {
orderParam.setCreatorMember(iMemberServiceApi.getRetailMember(orderParam.getPkCreator(), null).getData());
if(ObjectUtil.isNotEmpty(orderParam.getCuMemberShare())){
orderParam.setCreatorMember(iMemberServiceApi.getRetailMember(orderParam.getCuMemberShare().getPkParent(), null).getData());
cuMember.setPkParent(orderParam.getCuMemberShare().getPkParent());
isShared = true;
}else{
orderParam.setCreatorMember(iMemberServiceApi.getRetailMember(orderParam.getPkCreator(), null).getData());
}
}
cuMember.setPkVertex(orderParam.getCreatorMember().getPkVertex());
cuMember.setPkTeamCode(orderParam.getCreatorMember().getPkTeamCode());
@ -508,7 +528,12 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
cuMember.setSystemType(orderParam.getCreatorMember().getSystemType());
// 获取会员编号会员主键
cuMember = iMemberServiceApi.createRetailMemberIdAndCode(cuMember).getData();
if(isShared){
cuMember.setPkId(orderParam.getCuMemberShare().getPkId());
cuMember.setMemberCode(orderParam.getCuMemberShare().getMemberCode());
}else{
cuMember = iMemberServiceApi.createRetailMemberIdAndCode(cuMember).getData();
}
return cuMember;
}
@ -537,9 +562,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
log.error("新零售 payRegSaOrder 会员注册失败,{}", saveResult.getMsg());
throw new RuntimeException("会员注册失败");
}
// 同步全网产品库存
this.allProductSync(saOrderExt);
this.pushOrderMq(saOrderExt);
return null;
}
@ -561,9 +585,8 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
log.error("新零售 payUpgOrder 会员升级失败,{}", saveResult.getMsg());
throw new RuntimeException("会员升级失败");
}
// 同步全网产品库存
this.allProductSync(saOrderExt);
this.pushOrderMq(saOrderExt);
return null;
}
@ -582,12 +605,35 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
log.error("新零售 payOtherOrder 会员其它订单失败,{}", saveResult.getMsg());
throw new RuntimeException("下单支付失败");
}
// 同步全网产品库存
this.allProductSync(saOrderExt);
this.pushOrderMq(saOrderExt);
return null;
}
/**
* 订单推送MQ处理
*
* @param saOrderExt 会员订单
*/
private void pushOrderMq(SaOrderExt saOrderExt) {
try {
// 同步全网产品库存
this.allProductSync(saOrderExt);
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()
) {
// 计算奖金通过mq分发消息异步处理
saOrderExt.setCancelBool(Boolean.FALSE);
log.info("新零售秒结消息order.second.exchange{}", saOrderExt.getOrderCode());
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
}
} catch (Exception e) {
log.error("新零售 pushOrderMq 推送MQ失败. order: {}", saOrderExt, e);
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public String onlinePaymentCallBack(Long pkMember, String orderCode) {
@ -613,6 +659,10 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
CuMember newMember = this.packageCuMember(registerParam);
newMember.setPkSettleGrade(registerParam.getPkGrade());
newMember.setPkAwards(registerParam.getPkAwards());
if(ObjectUtil.isNotEmpty(registerParam.getCuMemberShare())){
saOrderExt.setPkReference(registerParam.getCuMemberShare().getPkParent());
saOrderExt.setOrderType(EOrderType.RETAIL_REGISTER.getValue());
}
saOrderExt.setPkMember(newMember.getPkId());
saOrderExt.setRegionProvince(registerParam.getRegionProvince());

View File

@ -6,6 +6,7 @@ import com.hzs.common.core.constant.CountryConstants;
import com.hzs.common.core.enums.EDelivery;
import com.hzs.common.core.enums.ETransportType;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.sale.order.param.OrderItemsParam;
import com.hzs.sale.shopping.vo.ShoppingCartRedis;
import lombok.AllArgsConstructor;
@ -113,6 +114,9 @@ public class RetailOrderParam implements Serializable {
@JsonIgnore
private CuMember creatorMember;
// @JsonIgnore
private CuMemberShare cuMemberShare;
/**
* 订单编号
*/

View File

@ -1,11 +1,12 @@
package com.hzs.retail.sale.param;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.hzs.sale.order.param.FansConfirmOrderWaresParam;
import lombok.*;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.List;
/**
* 新零售注册订单入参
@ -33,4 +34,9 @@ public class RetailOrderRegisterParam extends RetailOrderParam implements Serial
@Size(max = 20, message = "推荐编号不能超过20位")
private String parentCode;
/**
* 商品列表
*/
private List<FansConfirmOrderWaresParam> waresList;
}

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 新零售订单返回VO
@ -48,4 +49,9 @@ public class RetailOrderVO implements Serializable {
*/
private String urlAddress;
/**
* 待支付金额
*/
private BigDecimal orderAmount;
}

View File

@ -1,6 +1,7 @@
package com.hzs.retail.wares.controller.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
@ -10,10 +11,13 @@ import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EAccount;
import com.hzs.common.core.enums.ELabelType;
import com.hzs.common.core.enums.ESpecialArea;
import com.hzs.common.core.enums.EWaresType;
import com.hzs.common.core.utils.ComputeUtil;
import com.hzs.common.core.utils.DistinctByKeyUtil;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.BdWaresExt;
import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt;
@ -25,8 +29,11 @@ import com.hzs.member.base.IMemberServiceApi;
import com.hzs.member.base.dto.ShowWaresDTO;
import com.hzs.retail.wares.param.RetailWaresDetailParam;
import com.hzs.retail.wares.param.RetailWaresParam;
import com.hzs.retail.wares.param.WaresShareParam;
import com.hzs.retail.wares.vo.RetailWaresDetailVO;
import com.hzs.retail.wares.vo.RetailWaresVO;
import com.hzs.sale.order.service.ISaOrderService;
import com.hzs.sale.wares.param.CuWaresParams;
import com.hzs.sale.wares.service.IBdWaresLabelService;
import com.hzs.sale.wares.service.IBdWaresRangeService;
import com.hzs.sale.wares.service.IBdWaresService;
@ -38,10 +45,7 @@ import com.hzs.system.config.dto.AreaCurrencyDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.math.BigDecimal;
@ -64,6 +68,8 @@ public class ApiRetailWaresController extends BaseController {
private IBdWaresSpecsSkuService iBdWaresSpecsSkuService;
@Autowired
private IBdWaresRangeService iBdWaresRangeService;
@Autowired
private ISaOrderService iSaOrderService;
@DubboReference
ICurrencyServiceApi currencyServiceApi;
@ -377,4 +383,147 @@ public class ApiRetailWaresController extends BaseController {
}
/**
* 188分享专区商品列表
*/
@GetMapping("/list-wares-share")
public AjaxResult listWaresShare(WaresShareParam param) {
param.setSpecialArea(ESpecialArea.REGISTER_AREA.getValue());
param.setIsMakerGift(EWaresType.ORDINARY.getValue());
param.setPkCountry(CountryConstants.CHINA_COUNTRY);
// 返回数据
List<CuWaresParams> waresParamsList = new ArrayList<>();
// 查询商品列表
List<BdWaresExt> bdWaresExtList = iBdWaresService.listWaresShare(param.getSpecialArea(), param.getIsMakerGift(), param.getPkCountry());
if (CollectionUtil.isNotEmpty(bdWaresExtList)) {
// 商品主键列表
List<Integer> waresIdList = bdWaresExtList.stream().map(BdWares::getPkId).collect(Collectors.toList());
if (StringUtils.isNotEmpty(param.getShareMemberCode())) {
// 分享人ID
Long pkMember = Long.parseLong(new String(Base64Decoder.decode(param.getShareMemberCode())));
CuMember cuMember = iSaOrderService.getCuMemberByKey(pkMember);
// 当前会员编号
String memberCode = cuMember.getMemberCode();
// 检验商品团队信息
Map<Integer, List<BdWaresAuthority>> waresAuthorityMap = iBdWaresService.getWaresAuthority(waresIdList);
List<ShowWaresDTO> showWaresList = bdWaresExtList.stream().map(we -> getShowWares(we.getPkId(), pkMember, memberCode, waresAuthorityMap)).collect(Collectors.toList());
R<Map<Integer, Boolean>> waresShowMapDto = iMemberServiceApi.checkIsShowWares(showWaresList);
Map<Integer, Boolean> waresShowMap = waresShowMapDto.getData();
// 商品标签列表
BdWaresLabel waresLabel = new BdWaresLabel();
waresLabel.setPkIdList(waresIdList);
List<BdLabelExt> list = iBdWaresLabelService.selectByList(waresLabel);
// 标签
for (BdWaresExt bdWaresExt : bdWaresExtList) {
// 保证标签
List<BdLabel> ensureLabelList = new ArrayList<>();
// 卖点标签
List<BdLabel> sellingLabelList = new ArrayList<>();
for (BdLabelExt bdLabel : list) {
if (ELabelType.PREFIX.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 前缀标签
bdWaresExt.setPrefixLabelTarget(bdLabel);
}
if (ELabelType.COOL.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 酷炫标签
bdWaresExt.setCoolLabelTarget(bdLabel);
}
if (ELabelType.ENSURE.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 保证标签
ensureLabelList.add(bdLabel);
}
if (ELabelType.SELLING.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 卖点标签
sellingLabelList.add(bdLabel);
}
}
bdWaresExt.setEnsureLabelList(ensureLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList()));
bdWaresExt.setSellingLabelList(sellingLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList()));
}
// 查询商品sku 最小值 和数量
List<BdWaresSpecsSkuExt> waresSpecsSkuArray = iBdWaresSpecsSkuService.selectByMinWaresSpecsSkuByPkWaresList(waresIdList);
Map<Integer, List<BdWaresSpecsSkuExt>> waresSpecsSkuMap = waresSpecsSkuArray.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getPkWares));
// 查询默认规格
List<BdWaresSpecsSkuExt> waresSpecsSkuList = iBdWaresSpecsSkuService.selectByWaresSpecsSku(waresIdList);
for (BdWaresExt waresExt : bdWaresExtList) {
// 校验团队信息
Boolean isShowWares = waresShowMap.get(waresExt.getPkId());
if (null == isShowWares || !isShowWares) {
continue;
}
CuWaresParams waresParams = BeanUtil.copyProperties(waresExt, CuWaresParams.class);
// 价格
BigDecimal waresPrice = BigDecimal.ZERO;
// 业绩
BigDecimal waresAchieve = BigDecimal.ZERO;
List<BdWaresSpecsSkuExt> waresSpecsSku = waresSpecsSkuMap.get(waresExt.getPkId());
waresSpecsSku = waresSpecsSku.stream().peek(a -> a.setProductGift(a.getPkProduct() + "" + a.getIsGift())).collect(Collectors.toList());
Map<String, List<BdWaresSpecsSkuExt>> col = waresSpecsSku.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getProductGift));
for (Map.Entry<String, List<BdWaresSpecsSkuExt>> integerListEntry : col.entrySet()) {
// 取得每一个商品价格最小值
Optional<BdWaresSpecsSkuExt> minBdWaresSpecsSkuExt = integerListEntry.getValue().stream().filter(Objects::nonNull).min(Comparator.comparing(BdWaresSpecsSkuExt::getPrice));
BdWaresSpecsSkuExt bdWaresSpecsSkuExt = minBdWaresSpecsSkuExt.get();
waresPrice = waresPrice.add(bdWaresSpecsSkuExt.getPrice().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity())));
waresAchieve = waresAchieve.add(bdWaresSpecsSkuExt.getAchieve().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity())));
}
// 计算商品列表价格和业绩最小值
waresParams.setWaresPrice(waresPrice);
waresParams.setWaresAchieve(waresAchieve);
// 商品业绩计算汇率
if (waresParams.getWaresAchieve() != null) {
waresParams.setWaresAchieve(waresParams.getWaresAchieve());
waresParams.setWaresPrice(waresParams.getWaresPrice());
} else {
waresParams.setWaresAchieve(BigDecimal.ZERO);
waresParams.setWaresPrice(BigDecimal.ZERO);
}
// 查询默认规格
JSONArray jsonArray = new JSONArray();
List<BdWaresSpecsSkuExt> collect = waresSpecsSkuList.stream().filter(DistinctByKeyUtil.distinctByKey(BdWaresSpecsSku::getPkWaresDetail)).collect(Collectors.toList());
for (BdWaresSpecsSkuExt bdWaresSpecsSku : collect) {
if (bdWaresSpecsSku.getPkWares().equals(waresExt.getPkId())) {
JSONObject js = new JSONObject();
js.put("pkProduct", bdWaresSpecsSku.getPkProduct());
js.put("pkSkuId", bdWaresSpecsSku.getPkId());
js.put("quantity", bdWaresSpecsSku.getQuantity());
jsonArray.add(js);
}
}
waresParams.setProductGroup(jsonArray);
waresParamsList.add(waresParams);
}
}
}
return AjaxResult.success(waresParamsList);
}
/**
* 查询团队配置是否展示该商品
*
* @param pkWares
* @return
*/
public ShowWaresDTO getShowWares(Integer pkWares, Long loginMember, String loginMemberCode, Map<Integer, List<BdWaresAuthority>> waresAuthorityMap) {
ShowWaresDTO showWaresDTO = new ShowWaresDTO();
showWaresDTO.setPkWares(pkWares);
showWaresDTO.setLoginMember(loginMember);
showWaresDTO.setLoginMemberCode(loginMemberCode);
showWaresDTO.setWaresAuthorityList(waresAuthorityMap.get(pkWares));
return showWaresDTO;
}
}

View File

@ -0,0 +1,31 @@
package com.hzs.retail.wares.param;
import lombok.Data;
/**
* 分享商品查询条件
*/
@Data
public class WaresShareParam {
/**
* 分享会员编号
*/
private String shareMemberCode;
/**
* 所属专区
*/
private Integer specialArea;
/**
* 商品类型
*/
private Integer isMakerGift;
/**
* 国家
*/
private Integer pkCountry;
}

View File

@ -108,6 +108,10 @@ public class SaDeliverUnhandledController extends BaseController {
param.setAreaScopeList(userAuthorityDTO.getRoleAreaScopeList());
param.setVertexIdList(userAuthorityDTO.getVertexIdList());
param.setTeamList(userAuthorityDTO.getUserTeamList());
// 兼容调换货产品
if (CollectionUtil.isEmpty(param.getPkWaresList())) {
param.setPkWaresList(Collections.singletonList(0));
}
startPage();
List<DeliverUnhandledVO> resultList = iSaOrderItemsService.queryDeliverUnhandledList(param, pkCountry);
@ -151,6 +155,10 @@ public class SaDeliverUnhandledController extends BaseController {
param.setAreaScopeList(userAuthorityDTO.getRoleAreaScopeList());
param.setVertexIdList(userAuthorityDTO.getVertexIdList());
param.setTeamList(userAuthorityDTO.getUserTeamList());
// 兼容调换货产品
if (CollectionUtil.isEmpty(param.getPkWaresList())) {
param.setPkWaresList(Collections.singletonList(0));
}
List<DeliverUnhandledVO> resultList = iSaOrderItemsService.queryDeliverUnhandledList(param, pkCountry);

View File

@ -2,25 +2,50 @@ package com.hzs.sale.order.controller.api;
import cn.hutool.core.collection.CollectionUtil;
import com.hzs.common.core.annotation.RepeatSubmit;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.constant.HttpStatus;
import com.hzs.common.core.constant.msg.MemberMsgConstants;
import com.hzs.common.core.constant.msg.SaOrderMsgConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.CommonUtil;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrderShareTmp;
import com.hzs.common.domain.sale.wares.BdWares;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.common.util.TransactionUtils;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.retail.sale.param.RetailOrderParam;
import com.hzs.retail.sale.param.RetailOrderRegisterParam;
import com.hzs.sale.order.controller.ParentOrderController;
import com.hzs.sale.order.param.*;
import com.hzs.sale.order.service.ISaOrderService;
import com.hzs.sale.order.service.ISaOrderShareTmpService;
import com.hzs.sale.order.vo.FansConfirmOrderVO;
import com.hzs.sale.shopping.vo.ShoppingCartVO;
import com.hzs.sale.wares.service.IBdWaresService;
import com.hzs.sale.wares.service.IBdWaresSpecsSkuService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
* 嗨粉订单
*/
@ -29,6 +54,15 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
public class ApiFanSaOrderController extends ParentOrderController {
@Autowired
private IBdWaresService iBdWaresService;
@Autowired
private IBdWaresSpecsSkuService iBdWaresSpecsSkuService;
@Autowired
private ISaOrderShareTmpService iSaOrderShareTmpService;
@Autowired
private ISaOrderService iSaOrderService;
@DubboReference
IMemberServiceApi iMemberServiceApi;
@ -95,4 +129,154 @@ public class ApiFanSaOrderController extends ParentOrderController {
}
}
// /**
// * 海粉确认订单
// *
// * @param param 确认订单入参
// * @return
// */
// @PostMapping("/fans-confirm-order")
// public AjaxResult fansConfirmOrder(@RequestBody FansConfirmOrderParam param) {
// // 校验参数
// if (StringUtils.isAnyEmpty(param.getMemberName(), param.getPhone(), param.getRecName(), param.getRecPhone(), param.getRecAddress())
// || null == param.getPkCountry() || null == param.getRecProvince() || null == param.getRecCity()
// || CollectionUtil.isEmpty(param.getWaresList())
// ) {
// // 缺少参数
// return AjaxResult.error("缺少参数");
// }
// // 校验商品数据
// for (FansConfirmOrderWaresParam waresParam : param.getWaresList()) {
// if (null == waresParam.getPkWares() || null == waresParam.getQuantity()
// || CollectionUtil.isEmpty(waresParam.getSkuList())) {
// // 缺少参数
// return AjaxResult.error("缺少参数");
// }
// // 校验产品数据
// for (FansConfirmOrderSkuParam skuParam : waresParam.getSkuList()) {
// if (null == skuParam.getPkWaresSku() || null == skuParam.getQuantity()) {
// // 缺少参数
// return AjaxResult.error("缺少参数");
// }
// }
// }
//
// // 会员ID
// Long userId = SecurityUtils.getUserId();
// // 所属国家
// Integer pkCountry = SecurityUtils.getPkCountry();
//
// // 查询临时会员
// CuMemberShare cuMemberShare = iMemberServiceApi.queryCuMemberShare(userId).getData();
// if (null == cuMemberShare) {
// // 会员不存在
// return AjaxResult.error("推荐人不存在");
// }
//
// // 封装缓存数据
// RetailOrderRegisterParam orderParam = RetailOrderRegisterParam.builder()
// .memberName(param.getMemberName())
// .phone(param.getPhone())
// .build();
//
// // 手机号注册次数校验
// AjaxResult ajaxResult = super.validatePhone(orderParam);
// if (!ajaxResult.isSuccess()) {
// return ajaxResult;
// }
//
// // 订单金额
// BigDecimal orderAmount = BigDecimal.ZERO;
//
// // 生成订单编号
// String orderCode = CommonUtil.createSerialNumber(EOrderPrefix.ORDER_CODE);
//
// // 缓存数据
// List<OrderItemsParam> orderItemsParams = new ArrayList<>();
// // 遍历商品封装订单明细
// for (FansConfirmOrderWaresParam waresParam : param.getWaresList()) {
// // 遍历sku
// // 产品价格等map
// Map<Long, BdWaresSpecsSkuExt> skuMap = iBdWaresSpecsSkuService.queryWaresSpecsSkuList(waresParam.getSkuList().stream().map(FansConfirmOrderSkuParam::getPkWaresSku).collect(Collectors.toList()));
//
// // 查询商品
// BdWares bdWares = iBdWaresService.getWares(waresParam.getPkWares());
//
// // 缓存数据
// List<WaresItemsParam> itemsParamList = new ArrayList<>(waresParam.getSkuList().size());
// // 遍历产品信息
// for (FansConfirmOrderSkuParam skuParam : waresParam.getSkuList()) {
// BdWaresSpecsSkuExt specsSku = skuMap.get(skuParam.getPkWaresSku());
// orderAmount = orderAmount.add(specsSku.getPrice().multiply(new BigDecimal(skuParam.getQuantity() * waresParam.getQuantity())));
//
// itemsParamList.add(WaresItemsParam.builder()
// .pkWaresSpecsSku(skuParam.getPkWaresSku().intValue())
// .quantity(skuParam.getQuantity())
// .build());
// }
// orderItemsParams.add(OrderItemsParam.builder()
// .waresCode(bdWares.getWaresCode())
// .quantity(waresParam.getQuantity())
// .waresItemsParamList(itemsParamList)
// .build());
// }
// // 封装订单数据
// SaOrderExt saOrder = new SaOrderExt();
// saOrder.setOrderCode(orderCode);
// // 188注册订单实际按复购订单来算
// saOrder.setOrderType(EOrderType.REPURCHASE_ORDER.getValue());
// saOrder.setOrderTypeExtend(EOrderTypeExtend.REG_REP.getValue());
// saOrder.setOrderAmount(orderAmount);
// saOrder.setPostage(BigDecimal.ZERO);
// saOrder.setRecName(param.getRecName());
// saOrder.setRecPhone(param.getRecPhone());
// saOrder.setRecProvince(param.getRecProvince());
// saOrder.setRecCity(param.getRecCity());
// saOrder.setRecCounty(param.getRecCounty());
// saOrder.setRecAddress(param.getRecAddress());
// saOrder.setRemark(param.getRemark());
// saOrder.setPkMember(cuMemberShare.getPkId());
// saOrder.setPkReference(cuMemberShare.getPkParent());
// saOrder.setDeliveryWay(EDelivery.FAST_MAIL.getValue());
// saOrder.setTranType(ETransportType.LAND.getValue());
// saOrder.setPkCreator(cuMemberShare.getPkId());
// saOrder.setPkCountry(pkCountry);
//
// orderParam.setOrderCode(orderCode);
// orderParam.setSpecialArea(saOrder.getOrderType());
// orderParam.setPostage(saOrder.getPostage());
// orderParam.setDeliveryWay(saOrder.getDeliveryWay());
// orderParam.setTransType(saOrder.getTranType());
// orderParam.setRecName(saOrder.getRecName());
// orderParam.setRecPhone(saOrder.getRecPhone());
// orderParam.setRecProvince(saOrder.getRecProvince());
// orderParam.setRecCity(saOrder.getRecCity());
// orderParam.setRecCounty(saOrder.getRecCounty());
// orderParam.setRecAddress(saOrder.getRecAddress());
// orderParam.setOrderItemsParams(orderItemsParams);
//
// HashMap<String, Object> orderInfo = new HashMap<>();
// orderInfo.put("param", param);
// orderInfo.put("saOrder", saOrder);
// orderInfo.put("orderParam", orderParam);
// // 分享会员订单数据
// if (iSaOrderShareTmpService.save(SaOrderShareTmp.builder()
// .pkId(cuMemberShare.getPkId())
// .orderInfo(JSONUtil.toJsonStr(orderInfo))
// .build())) {
//
// // 临时订单直接放入缓存24小时有效
// redisService.setCacheObject(CacheConstants.RETAIL_TEMP_ORDER + userId + orderCode, saOrder, 24L, TimeUnit.HOURS);
// // 临时会员直接放入缓存24小时有效
// redisService.setCacheObject(CacheConstants.RETAIL_TEMP_REG_PARAM + userId + orderCode, orderParam, 24L, TimeUnit.HOURS);
//
// return AjaxResult.success(FansConfirmOrderVO.builder()
// .orderCode(orderCode)
// .orderAmount(saOrder.getOrderAmount().add(saOrder.getPostage()))
// .payTime(iSaOrderService.getIsToBePayTime(pkCountry, saOrder.getOrderType()))
// .build());
// }
// return AjaxResult.error();
// }
}

View File

@ -5,11 +5,7 @@ import lombok.Data;
import java.util.List;
/**
* @Description: 海粉确认订单入参
* @Author: jiang chao
* @Time: 2023/9/7 16:56
* @Classname: FansConfirmOrder
* @PackageName: com.hzs.sale.order.param
* 海粉确认订单入参
*/
@Data
public class FansConfirmOrderParam {

View File

@ -3,11 +3,7 @@ package com.hzs.sale.order.param;
import lombok.Data;
/**
* @Description: 海粉确认订单产品入参
* @Author: jiang chao
* @Time: 2023/9/7 19:37
* @Classname: FansConfirmOrderSkuParam
* @PackageName: com.hzs.sale.order.param
* 海粉确认订单产品入参
*/
@Data
public class FansConfirmOrderSkuParam {

View File

@ -5,11 +5,7 @@ import lombok.Data;
import java.util.List;
/**
* @Description: 海粉确认订单商品入参
* @Author: jiang chao
* @Time: 2023/9/7 17:32
* @Classname: FansConfirmOrderProductParam
* @PackageName: com.hzs.sale.order.param
* 海粉确认订单商品入参
*/
@Data
public class FansConfirmOrderWaresParam {

View File

@ -1335,6 +1335,8 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
try {
// 撤单秒结处理
this.pushCancelOrderMq(saOrderExt);
// 推送MQ的列表
List<SaOrderExt> mqList = new ArrayList<>();
mqList.add(saOrderExt);
@ -1766,6 +1768,8 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
try {
// 撤单秒结处理
this.pushCancelOrderMq(saOrderExt);
// 推送MQ处理活动回退
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_CANCEL_EXCHANGE, RabbitMqConstants.ORDER_CANCEL_KEY, Collections.singletonList(saOrderExt));
} catch (Exception e) {
@ -2224,4 +2228,25 @@ public class SaOrderServiceImpl extends ServiceImpl<SaOrderMapper, SaOrder> impl
}
}
/**
* 订单推送MQ处理
*
* @param saOrderExt 会员订单
*/
private void pushCancelOrderMq(SaOrderExt saOrderExt) {
try {
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_REPURCHASE.getValue() == saOrderExt.getOrderType()) {
// 撤单标记为 true
saOrderExt.setCancelBool(Boolean.TRUE);
// 计算奖金通过mq分发消息异步处理
log.info("新零售秒结消息order.second.exchange{}", saOrderExt.getOrderCode());
rabbitTemplate.convertAndSend(RabbitMqConstants.ORDER_SECOND_EXCHANGE, RabbitMqConstants.ORDER_SECOND_KEY, saOrderExt);
}
} catch (Exception e) {
log.error("新零售 pushOrderMq 推送MQ失败. order: {}", saOrderExt, e);
}
}
}

View File

@ -162,11 +162,7 @@ public class ApiShoppingCartController extends BaseController {
}
/**
* @description: 专区购物车数量 getAreaShoppingCount
* @author: zhang jing
* @date: 2024/3/28 10:27
* @param: [shoppingCartVO]
* @return: com.hzs.common.core.web.domain.AjaxResult
* 专区购物车数量 getAreaShoppingCount
**/
@GetMapping("/getAreaShoppingCount")
public AjaxResult getAreaShoppingCount(ShoppingCartVO shoppingCartVO) {

View File

@ -1,6 +1,7 @@
package com.hzs.sale.wares.controller.api;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.codec.Base64Decoder;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
@ -27,6 +28,7 @@ import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.common.util.TransactionUtils;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.member.base.dto.ShowWaresDTO;
import com.hzs.retail.wares.param.WaresShareParam;
import com.hzs.sale.order.service.ISaOrderService;
import com.hzs.sale.shopping.service.IShoppingCartService;
import com.hzs.sale.shopping.vo.WaresItemWaresInfo;
@ -717,4 +719,132 @@ public class ApiBdWaresController extends BaseController {
return AjaxResult.success(waresInfoVo);
}
/**
* 188分享专区商品列表
*/
@GetMapping("/list-wares-share")
public AjaxResult listWaresShare(WaresShareParam param) {
param.setSpecialArea(ESpecialArea.RETAIL_REGISTER.getValue());
param.setIsMakerGift(EWaresType.ORDINARY.getValue());
param.setPkCountry(CountryConstants.CHINA_COUNTRY);
// 返回数据
List<CuWaresParams> waresParamsList = new ArrayList<>();
// 查询商品列表
List<BdWaresExt> bdWaresExtList = bdWaresService.listWaresShare(param.getSpecialArea(), param.getIsMakerGift(), param.getPkCountry());
if (CollectionUtil.isNotEmpty(bdWaresExtList)) {
// 商品主键列表
List<Integer> waresIdList = bdWaresExtList.stream().map(BdWares::getPkId).collect(Collectors.toList());
if (StringUtils.isNotEmpty(param.getShareMemberCode())) {
// 分享人ID
Long pkMember = Long.parseLong(new String(Base64Decoder.decode(param.getShareMemberCode())));
CuMember cuMember = saOrderService.getCuMemberByKey(pkMember);
// 当前会员编号
String memberCode = cuMember.getMemberCode();
// 检验商品团队信息
Map<Integer, List<BdWaresAuthority>> waresAuthorityMap = bdWaresService.getWaresAuthority(waresIdList);
List<ShowWaresDTO> showWaresList = bdWaresExtList.stream().map(we -> getShowWares(we.getPkId(), pkMember, memberCode, waresAuthorityMap)).collect(Collectors.toList());
R<Map<Integer, Boolean>> waresShowMapDto = memberServiceApi.checkIsShowWares(showWaresList);
Map<Integer, Boolean> waresShowMap = waresShowMapDto.getData();
// 商品标签列表
BdWaresLabel waresLabel = new BdWaresLabel();
waresLabel.setPkIdList(waresIdList);
List<BdLabelExt> list = waresLabelService.selectByList(waresLabel);
// 标签
for (BdWaresExt bdWaresExt : bdWaresExtList) {
// 保证标签
List<BdLabel> ensureLabelList = new ArrayList<>();
// 卖点标签
List<BdLabel> sellingLabelList = new ArrayList<>();
for (BdLabelExt bdLabel : list) {
if (ELabelType.PREFIX.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 前缀标签
bdWaresExt.setPrefixLabelTarget(bdLabel);
}
if (ELabelType.COOL.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 酷炫标签
bdWaresExt.setCoolLabelTarget(bdLabel);
}
if (ELabelType.ENSURE.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 保证标签
ensureLabelList.add(bdLabel);
}
if (ELabelType.SELLING.getValue() == bdLabel.getLabelType() && bdLabel.getPkWares().equals(bdWaresExt.getPkId())) {
// 卖点标签
sellingLabelList.add(bdLabel);
}
}
bdWaresExt.setEnsureLabelList(ensureLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList()));
bdWaresExt.setSellingLabelList(sellingLabelList.stream().filter(DistinctByKeyUtil.distinctByKey(BdLabel::getPkId)).collect(Collectors.toList()));
}
// 查询商品sku 最小值 和数量
List<BdWaresSpecsSkuExt> waresSpecsSkuArray = bdWaresSpecsSkuService.selectByMinWaresSpecsSkuByPkWaresList(waresIdList);
Map<Integer, List<BdWaresSpecsSkuExt>> waresSpecsSkuMap = waresSpecsSkuArray.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getPkWares));
// 查询默认规格
List<BdWaresSpecsSkuExt> waresSpecsSkuList = bdWaresSpecsSkuService.selectByWaresSpecsSku(waresIdList);
for (BdWaresExt waresExt : bdWaresExtList) {
// 校验团队信息
Boolean isShowWares = waresShowMap.get(waresExt.getPkId());
if (null == isShowWares || !isShowWares) {
continue;
}
CuWaresParams waresParams = BeanUtil.copyProperties(waresExt, CuWaresParams.class);
// 价格
BigDecimal waresPrice = BigDecimal.ZERO;
// 业绩
BigDecimal waresAchieve = BigDecimal.ZERO;
List<BdWaresSpecsSkuExt> waresSpecsSku = waresSpecsSkuMap.get(waresExt.getPkId());
waresSpecsSku = waresSpecsSku.stream().peek(a -> a.setProductGift(a.getPkProduct() + "" + a.getIsGift())).collect(Collectors.toList());
Map<String, List<BdWaresSpecsSkuExt>> col = waresSpecsSku.stream().collect(Collectors.groupingBy(BdWaresSpecsSkuExt::getProductGift));
for (Map.Entry<String, List<BdWaresSpecsSkuExt>> integerListEntry : col.entrySet()) {
// 取得每一个商品价格最小值
Optional<BdWaresSpecsSkuExt> minBdWaresSpecsSkuExt = integerListEntry.getValue().stream().filter(Objects::nonNull).min(Comparator.comparing(BdWaresSpecsSkuExt::getPrice));
BdWaresSpecsSkuExt bdWaresSpecsSkuExt = minBdWaresSpecsSkuExt.get();
waresPrice = waresPrice.add(bdWaresSpecsSkuExt.getPrice().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity())));
waresAchieve = waresAchieve.add(bdWaresSpecsSkuExt.getAchieve().multiply(new BigDecimal(bdWaresSpecsSkuExt.getQuantity())));
}
// 计算商品列表价格和业绩最小值
waresParams.setWaresPrice(waresPrice);
waresParams.setWaresAchieve(waresAchieve);
// 商品业绩计算汇率
if (waresParams.getWaresAchieve() != null) {
waresParams.setWaresAchieve(waresParams.getWaresAchieve());
waresParams.setWaresPrice(waresParams.getWaresPrice());
} else {
waresParams.setWaresAchieve(BigDecimal.ZERO);
waresParams.setWaresPrice(BigDecimal.ZERO);
}
// 查询默认规格
JSONArray jsonArray = new JSONArray();
List<BdWaresSpecsSkuExt> collect = waresSpecsSkuList.stream().filter(DistinctByKeyUtil.distinctByKey(BdWaresSpecsSku::getPkWaresDetail)).collect(Collectors.toList());
for (BdWaresSpecsSkuExt bdWaresSpecsSku : collect) {
if (bdWaresSpecsSku.getPkWares().equals(waresExt.getPkId())) {
JSONObject js = new JSONObject();
js.put("pkProduct", bdWaresSpecsSku.getPkProduct());
js.put("pkSkuId", bdWaresSpecsSku.getPkId());
js.put("quantity", bdWaresSpecsSku.getQuantity());
jsonArray.add(js);
}
}
waresParams.setProductGroup(jsonArray);
waresParamsList.add(waresParams);
}
}
}
return AjaxResult.success(waresParamsList);
}
}

View File

@ -20,6 +20,17 @@ import java.util.List;
*/
public interface BdWaresMapper extends BaseMapper<BdWares> {
/**
* 根据条件查询商品信息
*
* @param specialArea 专区
* @param specialArea 专区
* @param pkCountry 所属国家
* @return: List<BdWaresExt>
*/
List<BdWaresExt> listWaresShare(@Param("specialArea") Integer specialArea,
@Param("isMakerGift") Integer isMakerGift,
@Param("pkCountry") Integer pkCountry);
/**
* 根据条件查询商品信息
*

View File

@ -109,4 +109,12 @@ public interface BdWaresSpecsSkuMapper extends BaseMapper<BdWaresSpecsSku> {
*/
List<BdWaresSpecsSkuExt> selectByMinWaresSpecsSkuByPkWaresList(@Param("pkWaresIds") List<Integer> pkWaresIds);
/**
* 查询SKU价格等信息
*
* @param skuIdList skuID列表
* @return
*/
List<BdWaresSpecsSkuExt> queryWaresSpecsSkuList(@Param("skuIdList") List<Long> skuIdList);
}

View File

@ -24,6 +24,15 @@ import java.util.Map;
*/
public interface IBdWaresService extends IService<BdWares> {
/**
* 根据条件查询商品信息
*
* @param specialArea 专区
* @param specialArea 专区
* @param pkCountry 所属国家
* @return: List<BdWaresExt>
*/
List<BdWaresExt> listWaresShare(Integer specialArea, Integer isMakerGift, Integer pkCountry);
/**
* 获取最大排序值
* @return

View File

@ -13,6 +13,7 @@ import com.hzs.sale.wares.param.CuWaresParams;
import com.hzs.sale.wares.param.SpecsSkuParam;
import java.util.List;
import java.util.Map;
/**
* 规格sku表 服务类
@ -107,4 +108,12 @@ public interface IBdWaresSpecsSkuService extends IService<BdWaresSpecsSku> {
*/
RetailWaresDetailVO queryWaresDetail(RetailWaresDetailParam param, Integer pkGrade);
/**
* 查询SKU价格等信息
*
* @param skuIdList skuID列表
* @return
*/
Map<Long, BdWaresSpecsSkuExt> queryWaresSpecsSkuList(List<Long> skuIdList);
}

View File

@ -1173,4 +1173,9 @@ public class BdWaresServiceImpl extends ServiceImpl<BdWaresMapper, BdWares> impl
return baseMapper.listWaresNoSale(param);
}
@Override
public List<BdWaresExt> listWaresShare(Integer specialArea, Integer isMakerGift, Integer pkCountry) {
return baseMapper.listWaresShare(specialArea, isMakerGift, pkCountry);
}
}

View File

@ -571,10 +571,22 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
productList.addAll(productResultList);
waresDetailVO.setProductList(productList);
waresDetailVO.setSpecialArea(param.getSpecialArea());
return waresDetailVO;
}
return null;
}
@Override
public Map<Long, BdWaresSpecsSkuExt> queryWaresSpecsSkuList(List<Long> skuIdList) {
Map<Long, BdWaresSpecsSkuExt> resultMap = new HashMap<>();
List<BdWaresSpecsSkuExt> list = baseMapper.queryWaresSpecsSkuList(skuIdList);
for (BdWaresSpecsSkuExt waresSpecsSku : list) {
resultMap.put(waresSpecsSku.getPkId().longValue(), waresSpecsSku);
}
return resultMap;
}
}

View File

@ -489,4 +489,34 @@
order by bw.wares_name
</select>
<!-- 分享商品列表 -->
<select id="listWaresShare" resultMap="BaseResultMap">
select bw.PK_COUNTRY, bw.PK_ID, be.pk_id PK_WARES_EXTEND,
be.IS_MAKER_GIFT, bw.WARES_CODE, bw.WARES_NAME,
PK_AREA_CLASSIFY, COVER, COVER1, COVER2,
bw.WARES_PRICE, bw.WARES_ACHIEVE,
SORT, SPECIAL_AREA,
IS_PUT_ON, PRE_SALE_STATUS,
PREFIX_LABEL, COOL_LABEL, S_LABEL,
SALES, IS_SALE, ARRIVAL_TIME, WARN_MESSAGE,
be.PK_SPECIAL_CURRENCY
from bd_wares bw
inner join bd_wares_extend be
on bw.pk_id = be.pk_wares
where bw.del_flag = 0
and be.del_flag = 0
and be.is_put_on = 0
<!-- 商品必须通过审核后才能显示 -->
and bw.wares_status = 5
<if test="specialArea != null">
and bw.special_area = #{specialArea}
</if>
<if test="isMakerGift != null">
and be.is_maker_gift = #{isMakerGift}
</if>
<if test="pkCountry != null">
and bw.pk_country = #{pkCountry}
</if>
order by bw.SORT_STATUS desc , bw.sort desc, bw.WARES_PRICE ,bw.CREATION_TIME desc
</select>
</mapper>

View File

@ -357,4 +357,23 @@
</foreach>
</select>
<!-- 查询SKU价格等信息 -->
<select id="queryWaresSpecsSkuList" resultType="com.hzs.common.domain.sale.ext.BdWaresSpecsSkuExt">
select bwss.pk_id,
bwd.pk_product,
bwss.pk_wares_detail,
bwss.price,
bwss.achieve,
bwss.ass_achieve
from bd_wares_specs_sku bwss
left join BD_WARES_DETAIL bwd
on bwd.del_flag = 0
and bwd.pk_id = bwss.pk_wares_detail
where bwss.del_flag = 0
and bwss.pk_id in
<foreach collection="skuIdList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>

View File

@ -24,18 +24,18 @@ public class BdConfig {
* PC地址
*/
private static String pc;
// /**
// * 公众号地址
// */
// private static String gzh;
// /**
// * IOS地址
// */
// private static String ios;
// /**
// * android地址
// */
// private static String android;
/**
* 公众号地址
*/
private static String gzh;
/**
* IOS地址
*/
private static String ios;
/**
* android地址
*/
private static String android;
/**
* 商品同步是否开启0=开启1=不开启
@ -70,29 +70,30 @@ public class BdConfig {
BdConfig.pc = pc;
}
// public static String getGzh() {
// return gzh;
// }
//
// public void setGzh(String gzh) {
// HzsConfig.gzh = gzh;
// }
//
// public static String getIos() {
// return ios;
// }
//
// public void setIos(String ios) {
// HzsConfig.ios = ios;
// }
//
// public static String getAndroid() {
// return android;
// }
//
// public void setAndroid(String android) {
// HzsConfig.android = android;
// }
public static String getGzh() {
return gzh;
}
public void setGzh(String gzh) {
BdConfig.gzh = gzh;
}
public static String getIos() {
return ios;
}
public void setIos(String ios) {
BdConfig.ios = ios;
}
public static String getAndroid() {
return android;
}
public void setAndroid(String android) {
BdConfig.android = android;
}
public static Integer getProductSync() {
return productSync;

View File

@ -10,6 +10,19 @@ public class RabbitMqConstants {
*/
public final static String PREFIX = "global.";
/**
* 奖金秒接 exchange
*/
public static final String ORDER_SECOND_EXCHANGE = PREFIX + "order.second.exchange";
/**
* 奖金秒接 queue
*/
public static final String ORDER_SECOND_QUEUE = PREFIX + "order.second.queue";
/**
* 奖金秒接 key
*/
public static final String ORDER_SECOND_KEY = PREFIX + "order.second.key";
/**
* 活动 exchange
*/

View File

@ -8,6 +8,11 @@ import java.util.List;
*/
public class SysConstants {
/**
* 嗨粉前缀
*/
public static final String HAI_FUN_PREFIX = "HF";
/**
* 新零售前缀
*/

View File

@ -58,15 +58,15 @@ public enum EBonusItems {
////////////////////////////////////////////////// 新奖项 //////////////////////////////////////////////////
/**
* 直推级差收益 -- 日奖
* 直推级差收益 -- 日奖秒奖
*/
RETAIL_RANGE_INCOME(25, "直推级差收益", 0),
/**
* 复购级差收益 -- 日奖
* 复购级差收益 -- 日奖秒奖
*/
RETAIL_REPURCHASE_INCOME(35, "复购级差收益", 0),
/**
* 复购配送收益 -- 日奖
* 复购配送收益 -- 日奖秒奖
*/
RETAIL_REPURCHASE_DELIVERY_INCOME(36, "复购配送收益", 0),

View File

@ -0,0 +1,38 @@
package com.hzs.common.core.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 订单扩展类型枚举类
*/
@AllArgsConstructor
@Getter
public enum EOrderTypeExtend {
/**
* 正常
*/
NORMAL(0, "正常", 0),
/**
* 注册转复购
*/
REG_REP(1, "注册转复购", 0),
;
/**
* 实际值
*/
private final int value;
/**
* 显示标签
*/
private final String label;
/**
* 是否启用0=,1= -- 来源EYesNo
*/
private final int enable;
}

View File

@ -15,6 +15,11 @@ public enum EShareType {
*/
SHARE(1, "分享注册"),
/**
* 188注册
*/
FANS(2, "188注册"),
;
/**

View File

@ -8,6 +8,7 @@ import com.hzs.common.core.utils.ServletUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.utils.ip.IpUtils;
import com.hzs.common.core.utils.uuid.IdUtils;
import com.hzs.common.domain.member.base.CuMemberShare;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.member.base.dto.LoginMember;
@ -57,16 +58,26 @@ public class MemberTokenService {
public Map<String, Object> createToken(LoginMember loginMember) {
String token = IdUtils.fastUUID();
// 注册用户处理
CuMemberExt cuMember = loginMember.getCuMember();
// 用户ID
Long pkId = cuMember.getPkId();
Long pkId;
// 用户编号
String memberCode = cuMember.getMemberCode();
String memberCode;
// 结算国
Integer pkCountry = cuMember.getPkSettleCountry();
// 系统类型
Integer systemType = cuMember.getSystemType();
Integer pkCountry;
if (null != loginMember.getCuMember()) {
// 注册用户处理
CuMemberExt cuMember = loginMember.getCuMember();
pkId = cuMember.getPkId();
memberCode = cuMember.getMemberCode();
pkCountry = cuMember.getPkSettleCountry();
} else {
// 分享用户处理临时海粉
CuMemberShare cuMemberShare = loginMember.getCuMemberShare();
pkId = cuMemberShare.getPkId();
memberCode = cuMemberShare.getMemberCode();
pkCountry = cuMemberShare.getPkCountry();
}
loginMember.setToken(token);
loginMember.setPkId(pkId);
@ -82,7 +93,6 @@ public class MemberTokenService {
claimsMap.put(SecurityConstants.DETAILS_USERNAME, memberCode);
claimsMap.put(SecurityConstants.DETAILS_USER_TYPE, loginMember.getLoginType());
claimsMap.put(SecurityConstants.DETAILS_USER_COUNTRY, pkCountry);
claimsMap.put(SecurityConstants.SYSTEM_TYPE, systemType);
// 接口返回信息
Map<String, Object> rspMap = new HashMap<>();

View File

@ -172,6 +172,11 @@ security:
- /member/api/share/share-register
# 新零售白名单
- /retail-member/api/retail-auth/*
# 188分享注册白名单
- /member/api/member/fans-convert-code/*
- /member/api/member/fans-order/*
- /system/api/idempotent/generate
- /member/api/retail-auth/auto-login
# 日志配置
logging:

View File

@ -61,6 +61,9 @@ public class TOnlinePaymentServiceImpl extends ServiceImpl<TOnlinePaymentMapper,
tOnlinePaymentExt.setOrderTypeVal(EOrderType.getLabelByValue(tOnlinePaymentExt.getOrderType()));
}else{
tOnlinePaymentExt.setOrderTypeVal("充值订单");
if(ObjectUtil.isEmpty(tOnlinePaymentExt.getMemberCode())){
tOnlinePaymentExt.setOrderTypeVal("注册订单");
}
}
}
return result;

View File

@ -49,6 +49,7 @@ public class TShareCodeServiceImpl extends ServiceImpl<TShareCodeMapper, TShareC
switch (eShareType) {
case SHARE:
case FANS:
// 分享注册
resultCode = sharePath + "?code=" + code;
break;