## Opt - 迁移分享注册流程

This commit is contained in:
sangelxiu1 2025-09-16 17:07:19 +08:00 committed by cabbage
parent 97205a139d
commit 464868338f
59 changed files with 1700 additions and 77 deletions

View File

@ -2,6 +2,8 @@ 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.sale.ext.SaOrderExt;
@ -29,6 +31,14 @@ public interface IMemberServiceApi {
*/
R<LoginMember> getMemberInfo(String memberCode);
/**
* 通过会员编码查询分享会员信息
*
* @param memberCode 会员编号
* @return
*/
R<LoginMember> getShareMemberInfo(String memberCode);
/**
* 根据会员ID获取会员信息查库
*
@ -87,7 +97,6 @@ public interface IMemberServiceApi {
* 撤销会员账户余额
**/
R<Boolean> cancelMemberAccount(Long pkMember, SaOrder saOrder);
/**
* 查找安置人伞下
*
@ -163,6 +172,13 @@ public interface IMemberServiceApi {
*/
R<Boolean> saveMember(CuMember cuMember, SaOrderExt saOrder, Boolean isPay, CuMemberAccountExt cuMemberAccountExt);
/**
* 处理新会员生成主键跟会员编号
*
* @param cuMember 会员
*/
R<CuMember> createMemberIdAndCode(CuMember cuMember);
/**
* 创建注册会员编号放入会员编号批次占用
*
@ -204,6 +220,13 @@ public interface IMemberServiceApi {
*/
R<List<CuMemberExt>> findMemberByMemberId(List<Long> pkMemberList, Integer pkCountry);
/**
* 根据会员主键查询会员注册信息
*
* @param pkMember 会员主键
*/
R<CuMemberRegister> queryCuMemberRegister(Long pkMember);
/*
* 会员编号账户类型抽奖金额
**/
@ -363,4 +386,11 @@ public interface IMemberServiceApi {
*/
R<String> checkRegisterRelation(String phone, String parentCode);
/**
* 查询分享会员
*
* @param pkMember 主键
*/
R<CuMemberShare> queryCuMemberShare(Long pkMember);
}

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,9 @@ 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.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
@ -82,4 +85,27 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
void mergeCuMemberRetailRangeExt(@Param("rangeTableName") String rangeTableName, @Param("cuMemberRangeExtList") List<?> cuMemberRangeExtList);
/**
* 向上查找所有parentID
* @param pkMember
* @return
*/
List<CuMemberExt> findParentMemberList(@Param("pkMember") Long pkMember);
/**
* 更新自己秒结
* @param tableName
* @param orderExt
* @param cuMember
*/
void updateMemberRetailSecondRangeSelf(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("cuMember") CuMember cuMember, @Param("updateType") Integer updateType, @Param("symbol") String symbol);
/**
* 更新上级秒结
* @param tableName
* @param orderExt
* @param memberList
*/
void updateMemberRetailSecondRangeParent(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("memberList") List<CuMemberExt> memberList, @Param("updateType") Integer updateType, @Param("symbol") String symbol);
}

View File

@ -3,7 +3,10 @@ package com.hzs.bonus.achieve.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
@ -70,4 +73,11 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
* @param cuMemberTreeMap
*/
void updateCuMemberSecondRange(String secondTableName, Map<Long, CuMemberRetailRangeExt> cuMemberTreeMap);
List<CuMemberExt> findParentMemberList(Long pkMember);
void updateMemberRetailSecondRangeSelf(String settleTableName, SaOrderExt orderExt, CuMember pkMember, Integer updateType, String symbol);
void updateMemberRetailSecondRangeParent(String settleTableName, SaOrderExt orderExt, List<CuMemberExt> pkMemberList, Integer updateType, String symbol);
}

View File

@ -4,9 +4,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.bonus.achieve.mapper.CuMemberRetailRangeMapper;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.enums.EOrderType;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -97,6 +101,21 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
treeList.forEach(list -> baseMapper.mergeCuMemberSecondRange(secondTableName, list));
}
@Override
public List<CuMemberExt> findParentMemberList(Long pkMember) {
return baseMapper.findParentMemberList(pkMember);
}
@Override
public void updateMemberRetailSecondRangeSelf(String settleTableName, SaOrderExt orderExt, CuMember cuMember, Integer updateType, String symbol) {
baseMapper.updateMemberRetailSecondRangeSelf(settleTableName, orderExt, cuMember, updateType, symbol);
}
@Override
public void updateMemberRetailSecondRangeParent(String settleTableName, SaOrderExt orderExt, List<CuMemberExt> pkMemberList, Integer updateType, String symbol) {
baseMapper.updateMemberRetailSecondRangeParent(settleTableName, orderExt, pkMemberList, updateType, symbol);
}
private List<List<?>> setUpdCuMemberTreeLists(Map<Long, CuMemberRetailRangeExt> cuMemberTreeMap) {
List<CuMemberRetailRangeExt> cuMemberTreeList = new ArrayList<>();
cuMemberTreeMap.forEach((key, value) -> cuMemberTreeList.add(value));

View File

@ -22,4 +22,10 @@ public interface IBonusSettleService {
*/
void calculateCuMemberRetailRangeBonusBySaOrder(String orderCode);
/**
* 计算秒结表数据
* @param orderExt
*/
void calculateCuMemberRetailRangeBySaOrder(SaOrderExt orderExt);
}

View File

@ -1,7 +1,10 @@
package com.hzs.bonus.bonus.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.hzs.bonus.achieve.service.ICuMemberRetailRangeService;
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.bonus.base.service.ICuMemberService;
import com.hzs.bonus.bonus.service.*;
import com.hzs.bonus.bonus.vo.BonusRecordDetailVO;
import com.hzs.bonus.order.service.IBonusOrderService;
@ -9,7 +12,9 @@ import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.bonus.*;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.system.config.IBonusItemsServiceApi;
import com.hzs.system.config.dto.BonusConfigDTO;
@ -47,6 +52,11 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
@Autowired
private ICuMemberBonusDetailService cuMemberBonusDetailService;
@Autowired
private ICuMemberRetailRangeService iCuMemberRetailRangeService;
@Autowired
private ICuMemberService cuMemberService;
/**
* 保存会员奖金
@ -155,6 +165,29 @@ public class BonusSettleServiceImpl implements IBonusSettleService {
}
}
@Override
public void calculateCuMemberRetailRangeBySaOrder(SaOrderExt orderExt) {
Integer updateType = null;
String symbol = orderExt.getCancelBool() ? "-" : "+";
if(orderExt.getOrderType().equals(EOrderType.RETAIL_REGISTER.getValue())){
updateType = 1;
}else if(orderExt.getOrderType().equals(EOrderType.RETAIL_REPURCHASE.getValue())){
updateType = 2;
}
if(ObjectUtil.isEmpty(updateType)){
return;
}
// 今天结算期数
String settleDate = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, orderExt.getPayTime());
int currentPeriod = cuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(settleDate).getPkId();
// 秒结表名
String secondRangeTableName = TableNameConstants.CU_MEMBER_RETAIL_S + currentPeriod;
List<CuMemberExt> memberList = iCuMemberRetailRangeService.findParentMemberList(orderExt.getPkMember());
CuMember self = cuMemberService.getById(orderExt.getPkId());
iCuMemberRetailRangeService.updateMemberRetailSecondRangeSelf(secondRangeTableName, orderExt, self, updateType, symbol);
iCuMemberRetailRangeService.updateMemberRetailSecondRangeParent(secondRangeTableName, orderExt, memberList, updateType, symbol);
}
/**
* 计算每天的奖金入库
*

View File

@ -47,10 +47,10 @@ public class SaOrderSecondListener {
if (saOrderExt.getCancelBool() != null && saOrderExt.getCancelBool()) {
cuMemberRetailLog.setCancelStatus(EYesNo.YES.getIntValue());
}
try {
Thread.sleep(1000);
iBonusSettleService.calculateCuMemberRetailRangeBonusBySaOrder(saOrderExt.getOrderCode());
// iBonusSettleService.calculateCuMemberRetailRangeBonusBySaOrder(saOrderExt.getOrderCode());
iBonusSettleService.calculateCuMemberRetailRangeBySaOrder(saOrderExt);
} catch (Exception e) {
cuMemberRetailLog.setEnableStatus(EYesNo.NO.getIntValue());
cuMemberRetailLog.setMsg(e.getMessage());

View File

@ -215,6 +215,43 @@
, a.pk_share_awards = b.pk_range_awards
</if>
</update>
<update id="updateMemberRetailSecondRangeSelf">
UPDATE ${tableName}
SET
PK_GRADE = ${cuMember.pkSettleGrade},
PK_AWARDS = ${cuMember.pkAwards},
<if test="updateType != null and updateType == 1">
REG_CONSUME_NEW_AMOUNT = REG_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
REG_CONSUME_NEW_PV = REG_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve},
</if>
<if test="updateType != null and updateType == 2">
REP_CONSUME_NEW_AMOUNT = REP_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
REP_CONSUME_NEW_PV = REP_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve},
</if>
ALL_CONSUME_NEW_AMOUNT = ALL_CONSUME_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
ALL_CONSUME_NEW_PV = ALL_CONSUME_NEW_PV ${symbol} #{orderExt.orderAchieve}
WHERE
PK_MEMBER = #{pkMember}
</update>
<update id="updateMemberRetailSecondRangeParent">
UPDATE ${tableName}
SET
<if test="updateType != null and updateType == 1">
REG_TEAM_NEW_AMOUNT = REG_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
REG_TEAM_NEW_PV = REG_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve},
</if>
<if test="updateType != null and updateType == 2">
REP_TEAM_NEW_AMOUNT = REP_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
REP_TEAM_NEW_PV = REP_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve},
</if>
ALL_TEAM_NEW_AMOUNT = ALL_TEAM_NEW_AMOUNT ${symbol} #{orderExt.orderAmount},
ALL_TEAM_NEW_PV = ALL_TEAM_NEW_PV ${symbol} #{orderExt.orderAchieve},
WHERE
PK_MEMBER in
<foreach collection="memberList" item="member" separator="," open="(" close=")">
#{member.pkId}
</foreach>
</update>
<select id="queryCuMemberRetailRangeParent" resultMap="CuMemberRetailRangeExt">
<foreach collection="saOrderExtList" item="item" close=" " open=" " separator="union">
@ -422,5 +459,12 @@
from ${tableName}
where pk_parent = #{pkParent}
</select>
<select id="findParentMemberList" resultType="com.hzs.common.domain.member.ext.CuMemberExt">
select cm.*
from cu_member cm
start with cm.pk_id = #{pkMember}
connect by cm.pk_id = prior cm.pk_parent
order by level
</select>
</mapper>

View File

@ -1,15 +1,20 @@
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.CacheConstants;
import com.hzs.common.core.constant.msg.CommonMsgConstants;
import com.hzs.common.core.constant.msg.ConfigMsgConstants;
import com.hzs.common.core.constant.msg.MemberMsgConstants;
import com.hzs.common.core.domain.FileResult;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.StringUtils;
import com.hzs.common.core.utils.uuid.IdUtils;
import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo;
@ -35,6 +40,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* 会员控制器
@ -51,6 +57,9 @@ public class ApiMemberController extends BaseController {
@Autowired
private IApiAliSmsService iApiAliSmsService;
@Autowired
private RedisService redisService;
@DubboReference
IGradeServiceApi iGradeServiceApi;
@ -366,4 +375,56 @@ 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("注册会员失败,请联系客服处理");
}
// 自动登录 uuid 标记
String uuid = IdUtils.simpleUUID();
// 根据会员编号放一个登录 uuid 做为自动登录校验使用120分钟有效
redisService.setCacheObject(CacheConstants.AUTO_LOGIN + cuMemberExt.getMemberCode(), uuid, CacheConstants.LOGIN_TOKEN_REFRESH_TIME * 2, TimeUnit.MINUTES);
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())
.uuid(uuid)
.build());
}
}

View File

@ -599,4 +599,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,15 @@
package com.hzs.member.base.provider;
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.member.swing.ext.CuMemberSwingNetExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.common.domain.sale.order.SaOrder;
import com.hzs.member.account.dto.BusinessCommissionDTO;
@ -16,6 +20,8 @@ import com.hzs.member.base.service.*;
import com.hzs.member.base.IMemberServiceApi;
import com.hzs.member.empty.service.ICuMemberEmptyCodeService;
import com.hzs.member.handlebusiness.dto.AnalysisBusinessAppealParam;
import com.hzs.member.swing.param.CuMemberSwingNetParam;
import com.hzs.member.swing.service.ICuMemberSwingNetService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
@ -34,8 +40,12 @@ public class MemberServiceProvider implements IMemberServiceApi {
@Autowired
private ICuMemberService iCuMemberService;
@Autowired
private ICuMemberShareService iCuMemberShareService;
@Autowired
private ICuMemberBusinessService iCuMemberBusinessService;
@Autowired
private ICuMemberRegisterService iCuMemberRegisterService;
@Autowired
private ICuMemberEmptyCodeService iCuMemberEmptyCodeService;
@Override
@ -52,6 +62,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));
@ -191,6 +215,11 @@ public class MemberServiceProvider implements IMemberServiceApi {
}
}
@Override
public R<CuMember> createMemberIdAndCode(CuMember cuMember) {
return R.ok(iCuMemberService.createMemberIdAndCode(cuMember));
}
@Override
public R<CuMember> createRegisterMemberCode(CuMember cuMember) {
return R.ok(iCuMemberService.createRegisterMemberCode(cuMember));
@ -216,6 +245,11 @@ public class MemberServiceProvider implements IMemberServiceApi {
return R.ok(iCuMemberService.findMemberByMemberId(pkMemberList, pkCountry));
}
@Override
public R<CuMemberRegister> queryCuMemberRegister(Long pkMember) {
return R.ok(iCuMemberRegisterService.queryCuMemberRegister(pkMember));
}
@Override
public R<Boolean> updateCuMemberAccountByDraw(Long pkMember, Integer pkCountry, Integer accountValue, BigDecimal rewardMoney) {
try {
@ -344,4 +378,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

@ -19,6 +19,13 @@ public interface ICuMemberRegisterService extends IService<CuMemberRegister> {
*/
List<CuMemberVO> queryCuMemberRegisterExeByCondition(MemberParam memberParam);
/**
* 根据会员主键查询会员注册信息
*
* @param pkMember 会员主键
*/
CuMemberRegister queryCuMemberRegister(Long pkMember);
/**
* 将用户注册表信息更改为死点
*

View File

@ -155,7 +155,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);
/**
* 批量生成会员编号
@ -771,7 +779,7 @@ public interface ICuMemberService extends IService<CuMember> {
* @return
*/
CuMember getRetailTopMember(Long pkMember, String memberCode, Long topPkMember, String topMemberCode);
String createRetailMemberCode(String prefix);
/**
* 校验注册关系是否跨团队
* 2024.12.24 修改为校验手机号必须唯一9035
@ -869,4 +877,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

@ -1,5 +1,6 @@
package com.hzs.member.base.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.domain.member.base.CuMemberRegister;
@ -26,6 +27,15 @@ public class CuMemberRegisterServiceImpl extends ServiceImpl<CuMemberRegisterMap
return baseMapper.queryCuMemberRegisterExeByCondition(memberParam);
}
@Override
public CuMemberRegister queryCuMemberRegister(Long pkMember) {
LambdaQueryWrapper<CuMemberRegister> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(CuMemberRegister::getPkMember, pkMember);
queryWrapper.orderByAsc(CuMemberRegister::getPayTime);
List<CuMemberRegister> cuMemberRegisters = baseMapper.selectList(queryWrapper);
return cuMemberRegisters.get(0);
}
@Override
public void updateCuMemberRegister(CuMemberRegister cuMemberRegister) {
baseMapper.updateCuMemberRegister(cuMemberRegister);

View File

@ -1556,6 +1556,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;
}
/**
* 创建会员编号
*
@ -3009,6 +3037,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;
@ -3254,4 +3283,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

@ -174,4 +174,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
@ -50,14 +66,16 @@ public class RetailMemberTokenController {
return AjaxResult.success(memberTokenService.createToken(loginMember));
}
/**
* 新零售会员自动登录
* 新零售会员自动登录-分享注册后自动登录
*
* @param param 自助登录参数
* @return
*/
@PostMapping("/auto-login")
public AjaxResult autoLogin(@Valid @RequestBody RetailAutoLoginParam param) {
@PostMapping("/registered-auto-login")
public AjaxResult registeredAutoLogin(@Valid @RequestBody RetailAutoLoginParam param) {
String tmpUuid = redisService.getCacheObject(CacheConstants.AUTO_LOGIN + param.getUsername());
if (!param.getUuid().equals(tmpUuid)) {
// 没有自动登录标记 或者 标记不对则不能自动登录
@ -70,6 +88,60 @@ public class RetailMemberTokenController {
return AjaxResult.success(memberTokenService.createToken(loginMember));
}
/**
* 新零售会员自动登录
*
* @param param 自助登录参数
* @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("当前会员已不能快递登录");
// }
//
// // 用户登录
// 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("缺少注册信息!");
}
// 上级编码推荐人
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

@ -2378,4 +2378,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

@ -6,16 +6,23 @@ import com.hzs.common.core.annotation.RepeatSubmit;
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.sale.ext.BdWaresSpecsSkuExt;
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;
@ -23,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;
@ -40,6 +50,7 @@ import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 新零售订单控制器
@ -58,12 +69,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;
/**
* 校验会员等级
@ -590,4 +610,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;
@ -17,6 +18,7 @@ import com.hzs.common.core.utils.*;
import com.hzs.common.core.web.domain.AjaxResult;
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;
@ -447,16 +449,28 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
cuMember.setCreationTime(new Date());
cuMember.setPkCreator(orderParam.getPkCreator());
boolean isShared = false;
if (null == orderParam.getCreatorMember()) {
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());
// 系统类型使用购买人的
cuMember.setSystemType(orderParam.getCreatorMember().getSystemType());
// 获取会员编号会员主键
if(isShared){
cuMember.setPkId(orderParam.getCuMemberShare().getPkId());
cuMember.setMemberCode(orderParam.getCuMemberShare().getMemberCode());
}else{
cuMember = iMemberServiceApi.createRetailMemberIdAndCode(cuMember).getData();
}
return cuMember;
}
@ -592,7 +606,13 @@ public class RetailOrderServiceImpl implements IRetailOrderService {
}
// 封装会员信息
CuMember newMember = this.packageCuMember(registerParam);
newMember.setPkSettleGrade(registerParam.getPkGrade());
newMember.setPkAwards(registerParam.getPkAwards());
saOrderExt.setPkMember(newMember.getPkId());
if(ObjectUtil.isNotEmpty(registerParam.getCuMemberShare())){
saOrderExt.setPkReference(registerParam.getCuMemberShare().getPkParent());
saOrderExt.setOrderType(EOrderType.RETAIL_REGISTER.getValue());
}
resultStr = this.payRegOrder(saOrderExt, newMember, null);
} else {

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 iCurrencyServiceApi;
@ -378,4 +384,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

@ -0,0 +1,68 @@
package com.hzs.sale.order.param;
import lombok.Data;
import java.util.List;
/**
* 海粉确认订单入参
*/
@Data
public class FansConfirmOrderParam {
/***
* 自然国
*/
private Integer pkCountry;
/**
* 会员姓名
*/
private String memberName;
/**
* 联系方式
*/
private String phone;
/**
* 收货人
*/
private String recName;
/**
* 收货电话
*/
private String recPhone;
/**
* 收货省
*/
private Integer recProvince;
/**
* 收货市
*/
private Integer recCity;
/**
* 收货县
*/
private Integer recCounty;
/**
* 收货地址
*/
private String recAddress;
/**
* 备注
*/
private String remark;
/**
* 商品列表
*/
private List<FansConfirmOrderWaresParam> waresList;
}

View File

@ -0,0 +1,21 @@
package com.hzs.sale.order.param;
import lombok.Data;
/**
* 海粉确认订单产品入参
*/
@Data
public class FansConfirmOrderSkuParam {
/**
* SKU ID
*/
private Long pkWaresSku;
/**
* 产品数量
*/
private Integer quantity;
}

View File

@ -0,0 +1,28 @@
package com.hzs.sale.order.param;
import lombok.Data;
import java.util.List;
/**
* 海粉确认订单商品入参
*/
@Data
public class FansConfirmOrderWaresParam {
/**
* 商品ID
*/
private Integer pkWares;
/**
* 商品数量
*/
private Integer quantity;
/**
* 产品列表
*/
private List<FansConfirmOrderSkuParam> skuList;
}

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;
@ -87,6 +89,133 @@ public class ApiBdWaresController extends BaseController {
@Autowired
protected StringRedisTemplate redisTemplate;
/**
* 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 = 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);
}
/**
* 根据专区查找专区的商品

View File

@ -129,6 +129,7 @@ public interface BdWaresMapper extends BaseMapper<BdWares> {
*/
List<BdWaresExt> listRetailWaresByCondition(@Param("param") RetailWaresParam param);
/**
* 查询非在售商品
*
@ -137,4 +138,16 @@ public interface BdWaresMapper extends BaseMapper<BdWares> {
*/
List<BdWaresExt> listWaresNoSale(@Param("param") WaresNoSaleParam param);
/**
* 根据条件查询商品信息
*
* @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

@ -203,4 +203,14 @@ public interface IBdWaresService extends IService<BdWares> {
*/
List<BdWaresExt> listWaresNoSale(WaresNoSaleParam param);
/**
* 根据条件查询商品信息
*
* @param specialArea 专区
* @param specialArea 专区
* @param pkCountry 所属国家
* @return: List<BdWaresExt>
*/
List<BdWaresExt> listWaresShare(Integer specialArea, Integer isMakerGift, Integer pkCountry);
}

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

@ -1161,4 +1161,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

@ -578,4 +578,15 @@ public class BdWaresSpecsSkuServiceImpl extends ServiceImpl<BdWaresSpecsSkuMappe
}
@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

@ -471,4 +471,35 @@
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

@ -9,6 +9,11 @@ import java.util.List;
*/
public class SysConstants {
/**
* 嗨粉前缀
*/
public static final String HAI_FUN_PREFIX = "HF";
/**
* 众康系统前缀
*/

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

@ -19,6 +19,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();
// 用户ID
Long pkId;
// 用户编号
String memberCode;
// 结算国
Integer pkCountry;
if (null != loginMember.getCuMember()) {
// 注册用户处理
CuMemberExt cuMember = loginMember.getCuMember();
// 用户ID
Long pkId = cuMember.getPkId();
// 用户编号
String memberCode = cuMember.getMemberCode();
// 结算国
Integer pkCountry = cuMember.getPkSettleCountry();
// 系统类型
Integer systemType = cuMember.getSystemType();
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

@ -175,6 +175,12 @@ security:
- /system/manage/area/get-light-area
# 新零售白名单
- /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
- /member/api/retail-auth/registered-auto-login
# 日志配置
logging:

View File

@ -2,6 +2,7 @@ package com.hzs.third.pay.controller.manage;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hzs.common.core.annotation.AccessPermissions;
import com.hzs.common.core.annotation.Log;
import com.hzs.common.core.constant.EnumsPrefixConstants;
@ -21,6 +22,7 @@ import com.hzs.common.service.ITransactionCommonService;
import com.hzs.common.util.TransactionUtils;
import com.hzs.third.pay.param.OnlinePaymentParam;
import com.hzs.third.pay.param.OnlinePaymentRetryParam;
import com.hzs.third.pay.service.IJdPayService;
import com.hzs.third.pay.service.IPayService;
import com.hzs.third.pay.service.ITOnlinePaymentService;
import com.hzs.third.pay.vo.OnlinePaymentVO;
@ -48,6 +50,8 @@ public class OnlinePaymentController extends BaseController {
private ITOnlinePaymentService itOnlinePaymentService;
@Autowired
private IPayService iPayService;
@Autowired
private IJdPayService iJdPayService;
@Autowired
private ITransactionCommonService iTransactionCommonService;
@ -144,4 +148,16 @@ public class OnlinePaymentController extends BaseController {
return toAjax(iPayService.retryHandle(tOnlinePayment, false));
}
/**
* 补偿支付回调
*
* @param param 业务重试入参
* @return
*/
@Log(module = EOperationModule.ONLINE_PAY_DETAIL, business = EOperationBusiness.ONLINE_PAY_DETAIL, method = EOperationMethod.SUBMIT)
@GetMapping("/compensationCallBack")
public AjaxResult compensationCallBack(@RequestParam("businessCode") String businessCode) {
return iJdPayService.compensationCallBack(businessCode);
}
}

View File

@ -0,0 +1,27 @@
package com.hzs.third.pay.jdpay.dto;
import java.io.Serializable;
public class JdPayQueryOrderRequest implements Serializable {
/**
* 商户订单号
*/
private String outTradeNo;
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
@Override
public String toString() {
return "{ \"outTradeNo\":\"" + outTradeNo + "\""
+ "}"
;
}
}

View File

@ -0,0 +1,197 @@
package com.hzs.third.pay.jdpay.dto;
import java.io.Serializable;
public class JdPayQueryOrderResponse implements Serializable {
/**
* 京东交易订单号
*/
private String tradeNo;
/**
* 商户订单号
*/
private String outTradeNo;
/**
* 订单总金额
*/
private String tradeAmount;
/**
* 支付完成时间
*/
private String finishDate;
/**
* 交易类型
*/
private String tradeType;
/**
* 交易状态
*/
private String tradeStatus;
/**
* 回传字段
*/
private String returnParams;
/**
* 商户用户标识
*/
private String userId;
/**
* 优惠金额
*/
private String discountAmount;
/**
* 支付工具
*/
private String payTool;
/**
* ]
* 掩码卡号
*/
private String maskCardNo;
/**
* 卡类型
*/
private String cardType;
/**
* 银行编码
*/
private String bankCode;
/**
* 白条分期数
*/
private String installmentNum;
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public String getTradeAmount() {
return tradeAmount;
}
public void setTradeAmount(String tradeAmount) {
this.tradeAmount = tradeAmount;
}
public String getFinishDate() {
return finishDate;
}
public void setFinishDate(String finishDate) {
this.finishDate = finishDate;
}
public String getTradeType() {
return tradeType;
}
public void setTradeType(String tradeType) {
this.tradeType = tradeType;
}
public String getTradeStatus() {
return tradeStatus;
}
public void setTradeStatus(String tradeStatus) {
this.tradeStatus = tradeStatus;
}
public String getReturnParams() {
return returnParams;
}
public void setReturnParams(String returnParams) {
this.returnParams = returnParams;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getDiscountAmount() {
return discountAmount;
}
public void setDiscountAmount(String discountAmount) {
this.discountAmount = discountAmount;
}
public String getPayTool() {
return payTool;
}
public void setPayTool(String payTool) {
this.payTool = payTool;
}
public String getMaskCardNo() {
return maskCardNo;
}
public void setMaskCardNo(String maskCardNo) {
this.maskCardNo = maskCardNo;
}
public String getCardType() {
return cardType;
}
public void setCardType(String cardType) {
this.cardType = cardType;
}
public String getBankCode() {
return bankCode;
}
public void setBankCode(String bankCode) {
this.bankCode = bankCode;
}
public String getInstallmentNum() {
return installmentNum;
}
public void setInstallmentNum(String installmentNum) {
this.installmentNum = installmentNum;
}
@Override
public String toString() {
return "{\"tradeNo\":\"" + tradeNo + "\""
+ ", \"outTradeNo\":\"" + outTradeNo + "\""
+ ", \"tradeAmount\":\"" + tradeAmount + "\""
+ ", \"finishDate\":\"" + finishDate + "\""
+ ", \"tradeType\":\"" + tradeType + "\""
+ ", \"tradeStatus\":\"" + tradeStatus + "\""
+ ", \"returnParams\":\"" + returnParams + "\""
+ ", \"userId\":\"" + userId + "\""
+ ", \"discountAmount\":\"" + discountAmount + "\""
+ ", \"payTool\":\"" + payTool + "\""
+ ", \"maskCardNo\":\"" + maskCardNo + "\""
+ ", \"cardType\":\"" + cardType + "\""
+ ", \"bankCode\":\"" + bankCode + "\""
+ ", \"installmentNum\":\"" + installmentNum + "\""
+ "}"
;
}
}

View File

@ -56,9 +56,9 @@ public class JdPay {
// * @return JdPayQueryOrderResponse 返回数据
// * @throws Exception
// */
// public JdPayQueryOrderResponse queryOrder(JdPayQueryOrderRequest request) throws Exception {
// return this.baseExecute(JdPayConstant.TRADE_QUERY_URL, request, JdPayQueryOrderResponse.class);
// }
public JdPayQueryOrderResponse queryOrder(JdPayQueryOrderRequest request) throws Exception {
return this.baseExecute(JdPayConstant.TRADE_QUERY_URL, request, JdPayQueryOrderResponse.class);
}
//
// /**
// * 作用代扣

View File

@ -42,9 +42,9 @@ public class JdPayHttpClientProxy {
log.info("1.{}接口请求参数:{}", apiName, request);
// 请求参数加密和签名
String httpRequest = JdPayApiUtil.encryptAndSignature(jdPayNewConfig, reqNo, request);
log.info("2.{}远程调用请求参数:{}", apiName, httpRequest);
// log.info("2.{}远程调用请求参数:{}", apiName, httpRequest);
String httpResponse = jdPayHttpClient.execute(jdPayNewConfig, urlSuffix, httpRequest);
log.info("3.{}远程调用返回参数:{}", apiName, httpResponse);
// log.info("3.{}远程调用返回参数:{}", apiName, httpResponse);
// 验证和解析返回参数
response = JdPayApiUtil.decryptAndVerifySign(jdPayNewConfig, httpResponse);
log.info("4.{}耗时:{},接口返回参数:{}", apiName, (System.currentTimeMillis() - startTimestampMs), response);

View File

@ -2,6 +2,7 @@ package com.hzs.third.pay.service;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EDataSource;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.third.pay.TOnlinePayment;
/**
@ -18,4 +19,12 @@ public interface IJdPayService {
*/
R<String> cashRegister(TOnlinePayment onlinePayment, EDataSource dataSource);
/**
* 收银台支付
*
* @param onlinePayment
* @param dataSource
* @return
*/
AjaxResult compensationCallBack(String businessCode);
}

View File

@ -2,11 +2,12 @@ package com.hzs.third.pay.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.hzs.common.core.config.BdConfig;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.EDataSource;
import com.hzs.common.core.enums.EEnv;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.domain.third.pay.TOnlinePayment;
import com.hzs.common.domain.third.pay.TOnlinePaymentSepAcc;
import com.hzs.common.domain.third.pay.TOnlinePaymentSepAccD;
@ -15,16 +16,10 @@ import com.hzs.third.pay.config.JdPayBankProperties;
import com.hzs.third.pay.config.JdPayConfig;
import com.hzs.third.pay.config.JdPaySeparateAccountConfig;
import com.hzs.third.pay.config.JdPayWechatAlipayProperties;
import com.hzs.third.pay.jdpay.dto.JdPayAggregateCreateOrderRequest;
import com.hzs.third.pay.jdpay.dto.JdPayAggregateCreateOrderResponse;
import com.hzs.third.pay.jdpay.dto.JdPayDivisionAccount;
import com.hzs.third.pay.jdpay.dto.JdPayDivisionAccountTradeInfo;
import com.hzs.third.pay.jdpay.dto.*;
import com.hzs.third.pay.jdpay.sdk.JdPay;
import com.hzs.third.pay.jdpay.util.GsonUtil;
import com.hzs.third.pay.service.IJdPayService;
import com.hzs.third.pay.service.ITOnlineCardService;
import com.hzs.third.pay.service.ITOnlinePaymentSepAccService;
import com.hzs.third.pay.service.ITOnlinePaymentService;
import com.hzs.third.pay.service.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
@ -35,6 +30,7 @@ import java.math.BigDecimal;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/**
@ -59,6 +55,8 @@ public class JdPayServiceImpl implements IJdPayService {
@Autowired
private ITOnlinePaymentService itOnlinePaymentService;
@Autowired
private IPayService iPayService;
@Resource
private JdPayWechatAlipayProperties jdPayWechatAlipayProperties;
@ -196,4 +194,94 @@ public class JdPayServiceImpl implements IJdPayService {
}
@Override
public AjaxResult compensationCallBack(String businessCode) {
LambdaQueryWrapper<TOnlinePayment> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(TOnlinePayment::getBusinessCode, businessCode);
queryWrapper.eq(TOnlinePayment::getDelFlag, EDelFlag.UN_DELETE.getValue());
TOnlinePayment tOnlinePayment = itOnlinePaymentService.getOne(queryWrapper, false);
if(ObjectUtil.isEmpty(tOnlinePayment)){
return AjaxResult.error("订单不存在");
}
JdPayQueryOrderRequest request = new JdPayQueryOrderRequest();
request.setOutTradeNo(tOnlinePayment.getBusinessCode());
JdPayQueryOrderResponse response = null;
try {
response = jdPay.queryOrder(request);
if (ObjectUtil.isEmpty(response.getTradeNo()) || EPayStatus.PAID.getValue() == tOnlinePayment.getPayStatus()) {
log.error("支付信息不存在或已支付");
return AjaxResult.success("已支付订单 无需补偿回调!");
}
log.info("queryOrder : {}", JSONUtil.toJsonStr(response));
if ("FINI".equals(response.getTradeStatus())){
// 支付成功处理
// 商户订单号
String payNumber = response.getTradeNo();
// 渠道流水号
String channelNumber = "";
// 支付完成时间
Date payTime = DateUtils.parseDateOne(response.getFinishDate(), DateUtils.YAMMERERS);
// 回调订单编号
String thirdOrderCode = response.getOutTradeNo();
// 订单编号
String acqOrderId = "compensationCallBack";
// 订单金额
int tradeAmount = Integer.parseInt(response.getTradeAmount());
BigDecimal payMoney = new BigDecimal(tradeAmount).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP);
Integer payType = convertPayType(response.getPayTool());
// 支付后续业务处理
if (iPayService.notifyHandle(tOnlinePayment.getBusinessType().toString() , thirdOrderCode, thirdOrderCode, payNumber, payTime, payMoney, EPayChannel.JD, channelNumber, payType, acqOrderId)) {
return AjaxResult.success();
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
return AjaxResult.success();
}
/**
* 京东收银台处理成功返回
*/
private static final String SUCCESS = "SUCCESS";
/**
* 京东收银台处理失败返回
*/
private static final String ERROR = "ERROR";
private Integer convertPayType(String payName){
Integer result = EPayType.WECHAT.getValue();
switch (payName){
case "XJK":
result = EPayType.MINI_TREASURY.getValue();
break;
case "JIOU":
result = EPayType.CREDIT_LINE.getValue();
break;
case "SJIOU":
result = EPayType.SUPER_CREDIT_LINE.getValue();
break;
case "ACCT":
result = EPayType.WALLET_BALANCE.getValue();
break;
case "EXPR":
result = EPayType.BANK_CARD.getValue();
break;
case "WX":
result = EPayType.WECHAT.getValue();
break;
case "ALIPAY":
result = EPayType.ALIPAY.getValue();
break;
case "YSF":
result = EPayType.CLOUD_PAY.getValue();
break;
}
return result;
}
}

View File

@ -2,10 +2,12 @@ package com.hzs.third.pay.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hzs.common.core.constant.CacheConstants;
import com.hzs.common.core.constant.MagicNumberConstants;
import com.hzs.common.core.constant.RabbitMqConstants;
import com.hzs.common.core.domain.R;
import com.hzs.common.core.enums.*;
import com.hzs.common.core.service.RedisService;
import com.hzs.common.domain.third.pay.TOnlinePayment;
import com.hzs.member.account.IMemberTradeServiceApi;
import com.hzs.retail.sale.IRetailOrderServiceApi;
@ -33,6 +35,8 @@ public class PayServiceImpl implements IPayService {
private ITOnlinePaymentService itOnlinePaymentService;
@Autowired
private RabbitTemplate rabbitTemplate;
@Autowired
private RedisService redisService;
@DubboReference
IRetailOrderServiceApi iRetailOrderServiceApi;
@ -118,8 +122,11 @@ public class PayServiceImpl implements IPayService {
log.error("支付信息不存在或已支付");
return false;
}
String redisKey = CacheConstants.ONLINE_PAY_KEY + businessCode;
try {
if(!redisService.lockKeyOnce(redisKey, 10)){
return false;
}
if (!PayUtil.checkAmount(onlinePayment.getBusinessMoney(), payMoney)) {
// 业务金额 大于 实际支付金额
log.error("业务金额大于实际支付金额,支付编号:{}, 支付金额:{}", onlinePayment.getPaymentCode(), payMoney);
@ -156,6 +163,8 @@ public class PayServiceImpl implements IPayService {
.set(TOnlinePayment::getCallbackStatus, ECallbackStatus.FAIL.getValue())
.set(TOnlinePayment::getCallbackInfo, e.getMessage())
);
} finally {
redisService.unlock(redisKey);
}
return false;
}

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

@ -97,7 +97,7 @@ public class OnlinePaymentVO {
/**
* 支付状态0=未支付,1=已支付
*/
@JsonIgnore
// @JsonIgnore
@Transaction(transactionKey = EnumsPrefixConstants.PAY_STATUS)
private Integer payStatus;
/**

View File

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