package cc.mrbird.febs.mall.service.impl;
|
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
|
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
|
import cc.mrbird.febs.common.enumerates.ScoreFlowTypeEnum;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.properties.XcxProperties;
|
import cc.mrbird.febs.common.utils.*;
|
import cc.mrbird.febs.mall.controller.dependentStation.enums.SalesServiceEnums;
|
import cc.mrbird.febs.mall.conversion.MallMemberConversion;
|
import cc.mrbird.febs.mall.conversion.MallShopApplyConversion;
|
import cc.mrbird.febs.mall.conversion.MallStoreConversion;
|
import cc.mrbird.febs.mall.dto.*;
|
import cc.mrbird.febs.mall.entity.*;
|
import cc.mrbird.febs.mall.mapper.*;
|
import cc.mrbird.febs.mall.service.*;
|
import cc.mrbird.febs.mall.vo.*;
|
import cc.mrbird.febs.pay.model.BrandWCPayRequestData;
|
import cc.mrbird.febs.pay.service.IXcxPayService;
|
import cc.mrbird.febs.pay.util.MD5;
|
import cc.mrbird.febs.vip.VipSettingUnAliveSettingBo;
|
import cc.mrbird.febs.vip.entity.MallVipConfig;
|
import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.date.DateUnit;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.crypto.SecureUtil;
|
import cn.hutool.crypto.asymmetric.KeyType;
|
import cn.hutool.crypto.asymmetric.RSA;
|
import cn.hutool.json.JSONArray;
|
import cn.hutool.json.JSONUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.io.IOException;
|
import java.math.BigDecimal;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author wzy
|
* @date 2021-09-16
|
**/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class ApiMallMemberServiceImpl extends ServiceImpl<MallMemberMapper, MallMember> implements IApiMallMemberService {
|
|
private final MallMemberWalletMapper mallMemberWalletMapper;
|
private final ICommonService commonService;
|
private final RedisUtils redisUtils;
|
private final MallMoneyFlowMapper mallMoneyFlowMapper;
|
private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
|
private final MallShopApplyMapper mallShopApplyMapper;
|
private final MallAgentRecordMapper mallAgentRecordMapper;
|
private final CouponGoodsMapper couponGoodsMapper;
|
private final MallMemberCouponMapper mallMemberCouponMapper;
|
private final MallAddressInfoMapper mallAddressInfoMapper;
|
|
|
@Value("${spring.profiles.active}")
|
private String active;
|
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public FebsResponse register(RegisterDto registerDto) {
|
String account = registerDto.getAccount();
|
MallMember mallMember = this.baseMapper.selectInfoByAccount(account);
|
if (mallMember != null) {
|
throw new FebsException("Registered");
|
}
|
/**
|
* 验证两次密码是否一致
|
*/
|
String password = registerDto.getPassword();
|
String confirmPassword = registerDto.getConfirmPassword();
|
if (!password.equals(confirmPassword)) {
|
throw new FebsException("The two passwords are inconsistent");
|
}
|
mallMember = new MallMember();
|
mallMember.setName(registerDto.getLastName() + registerDto.getFirstName());
|
mallMember.setPhone(registerDto.getPhoneNumber());
|
mallMember.setEmail(registerDto.getAccount());
|
mallMember.setPassword(SecureUtil.md5(password));
|
mallMember.setAccountStatus(MallMember.ACCOUNT_STATUS_ENABLE);
|
mallMember.setAccountType(MallMember.ACCOUNT_TYPE_NORMAL);
|
this.baseMapper.insert(mallMember);
|
|
MallAddressInfo mallAddressInfo = new MallAddressInfo();
|
mallAddressInfo.setMemberId(mallMember.getId());
|
mallAddressInfo.setName(registerDto.getLastName());
|
mallAddressInfo.setFristName(registerDto.getFirstName());
|
mallAddressInfo.setPhone(registerDto.getPhoneNumber());
|
mallAddressInfoMapper.insert(mallAddressInfo);
|
|
|
MallMemberWallet wallet = new MallMemberWallet();
|
wallet.setBalance(BigDecimal.ZERO);
|
wallet.setMemberId(mallMember.getId());
|
mallMemberWalletMapper.insert(wallet);
|
return new FebsResponse().success().message("registered successfully");
|
}
|
|
@Override
|
public FebsResponse toLogin(LoginDto loginDto) {
|
String md5Pwd = SecureUtil.md5(loginDto.getPassword());
|
|
MallMember mallMember = this.baseMapper.selectInfoByAccountAndPwd(loginDto.getAccount(), md5Pwd);
|
if (mallMember == null) {
|
throw new FebsException("The user does not exist or the account password is incorrect");
|
}
|
|
if (MallMember.ACCOUNT_STATUS_DISABLED.equals(mallMember.getAccountStatus())) {
|
throw new FebsException("The account is abnormal and is temporarily restricted from logging in");
|
}
|
|
String redisKey = AppContants.APP_LOGIN_PREFIX + mallMember.getId();
|
String existToken = redisUtils.getString(redisKey);
|
if (StrUtil.isNotBlank(existToken)) {
|
Object o = redisUtils.get(existToken);
|
if (ObjectUtil.isNotEmpty(o)) {
|
redisUtils.del(existToken);
|
}
|
}
|
|
String token = IdUtil.simpleUUID();
|
redisUtils.set(token, JSONObject.toJSONString(mallMember), 360000);
|
redisUtils.set(redisKey, token, 360000);
|
Map<String, Object> authInfo = new HashMap<>();
|
authInfo.put("token", token);
|
authInfo.put("rasToken", generateAsaToken(token));
|
return new FebsResponse().success().data(authInfo);
|
}
|
|
public String generateAsaToken(String token) {
|
RSA rsa = new RSA(null, AppContants.PUBLIC_KEY);
|
// return rsa.encryptBase64(token + "_" + System.currentTimeMillis(), KeyType.PublicKey);
|
//去掉时间戳
|
return rsa.encryptBase64(token, KeyType.PublicKey);
|
}
|
|
@Override
|
public FebsResponse forgetPwd(ForgetPwdDto forgetPwdDto) {
|
|
Long id = LoginUserUtil.getLoginUser().getId();
|
MallMember mallMember = this.baseMapper.selectById(id);
|
if (mallMember == null) {
|
throw new FebsException("Setup failed");
|
}
|
|
if (!forgetPwdDto.getNewPassword().equals(forgetPwdDto.getNewPasswordAgain())){
|
throw new FebsException("Setup failed");
|
}
|
|
String pwd = SecureUtil.md5(forgetPwdDto.getNewPassword());
|
mallMember.setPassword(pwd);
|
|
this.baseMapper.update(
|
null,
|
Wrappers.lambdaUpdate(MallMember.class)
|
.set(MallMember::getPassword, pwd)
|
.eq(MallMember::getId, id)
|
);
|
return new FebsResponse().success().message("Setup successful");
|
}
|
|
@Override
|
public FebsResponse logout() {
|
Long id = LoginUserUtil.getLoginUser().getId();
|
|
String redisKey = AppContants.APP_LOGIN_PREFIX + id;
|
String existToken = redisUtils.getString(redisKey);
|
if (StrUtil.isNotBlank(existToken)) {
|
Object o = redisUtils.get(existToken);
|
if (ObjectUtil.isNotEmpty(o)) {
|
redisUtils.del(existToken);
|
}
|
}
|
redisUtils.del(AppContants.APP_LOGIN_PREFIX + id);
|
redisUtils.del(AppContants.XCX_LOGIN_PHONE_PREFIX + id);
|
return new FebsResponse().success().message("Log out");
|
}
|
|
@Override
|
public FebsResponse findMemberInfo() {
|
Long id = LoginUserUtil.getLoginUser().getId();
|
MallMember mallMember = this.baseMapper.selectById(id);
|
MallMemberVo mallMemberVo = new MallMemberVo();
|
mallMemberVo.setName(mallMember.getName());
|
mallMemberVo.setEmail(mallMember.getEmail());
|
mallMemberVo.setPhoneNumber(mallMember.getPhone());
|
mallMemberVo.setAvatar(mallMember.getAvatar());
|
return new FebsResponse().success().data(mallMemberVo);
|
}
|
|
|
|
@Override
|
public FebsResponse modifyMemberInfo(ModifyMemberInfoDto modifyMemberInfoDto) {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
MallMember mallMember = this.baseMapper.selectById(memberId);
|
if (StrUtil.isNotBlank(modifyMemberInfoDto.getName())) {
|
mallMember.setName(modifyMemberInfoDto.getName());
|
}
|
|
this.baseMapper.updateById(mallMember);
|
return new FebsResponse().success().message("success");
|
}
|
|
|
|
@Override
|
public void addMoneyFlow(Long memberId, BigDecimal amount, Integer type, String orderNo, String description, String remark, Long rtMemberId, Integer status, Integer flowType) {
|
MallMoneyFlow flow = new MallMoneyFlow();
|
flow.setMemberId(memberId);
|
flow.setAmount(amount);
|
flow.setType(type);
|
flow.setOrderNo(orderNo);
|
flow.setDescription(description);
|
flow.setRemark(remark);
|
flow.setRtMemberId(rtMemberId);
|
flow.setStatus(status);
|
flow.setFlowType(flowType);
|
mallMoneyFlowMapper.insert(flow);
|
}
|
|
|
|
@Override
|
public void bindPhone(AccountAndCodeDto accountAndCodeDto) {
|
boolean b = commonService.verifyCode(accountAndCodeDto.getAccount(), accountAndCodeDto.getCode());
|
if (!b) {
|
throw new FebsException("验证码错误");
|
}
|
|
Long id = LoginUserUtil.getLoginUser().getId();
|
MallMember member = this.baseMapper.selectById(id);
|
|
member.setPhone(accountAndCodeDto.getAccount());
|
this.baseMapper.updateById(member);
|
}
|
|
|
|
@Override
|
public void shopApply(ShopApplyDto shopApplyDto) {
|
MallMember member = LoginUserUtil.getLoginUser();
|
|
MallShopApply hasApply = mallShopApplyMapper.selectNewestApplyByMemberId(member.getId());
|
if (hasApply != null) {
|
if (!hasApply.getStatus().equals(MallShopApply.APPLY_DISAGREE)) {
|
throw new FebsException("请勿重复提交申请");
|
}
|
}
|
|
MallShopApply mallShopApply = new MallShopApply();
|
BeanUtil.copyProperties(shopApplyDto, mallShopApply);
|
|
mallShopApply.setStatus(MallShopApply.APPLY_ING);
|
mallShopApply.setMemberId(member.getId());
|
mallShopApplyMapper.insert(mallShopApply);
|
}
|
|
@Override
|
public MallShopApply findNewestApply() {
|
MallMember member = LoginUserUtil.getLoginUser();
|
|
return mallShopApplyMapper.selectNewestApplyByMemberId(member.getId());
|
}
|
|
|
|
@Override
|
public List<ShopListVo> findShopListVo(ShopListDto shopListDto) {
|
Page<MallShopApply> page = new Page<>(shopListDto.getPageNow(), shopListDto.getPageSize());
|
|
MallShopApply shopApply = new MallShopApply();
|
shopApply.setStatus(MallShopApply.APPLY_AGREE);
|
IPage<MallShopApply> pageResult = mallShopApplyMapper.selectShopApplyInPage(shopApply, page);
|
|
List<MallShopApply> list = pageResult.getRecords();
|
if (CollUtil.isEmpty(list)) {
|
list = new ArrayList<>();
|
}
|
return MallShopApplyConversion.INSTANCE.entitiesToVOs(list);
|
}
|
|
|
private final XcxProperties xcxProperties = SpringContextHolder.getBean(XcxProperties.class);
|
|
|
|
@Override
|
public void updateMemberAgent(Long memberId,String levelCode) {
|
mallAgentRecordMapper.updateStateByMemberId(memberId);
|
MallAgentRecord mallAgentRecord = mallAgentRecordMapper.selectById(memberId);
|
//更新用户表中的LEVEL
|
MallMember mallMember = this.baseMapper.selectById(mallAgentRecord.getMemberId());
|
mallMember.setLevel(levelCode);
|
this.baseMapper.updateById(mallMember);
|
}
|
|
|
|
@Override
|
public FebsResponse memberPayCoupon(MallMemberCouponDto mallMemberCouponDto) {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
mallMemberCouponDto.setMemberId(memberId);
|
mallMemberCouponDto.setExpireTime(DateUtil.date());
|
// List<Long> couponIds = couponGoodsMapper.selectByGoodId(mallMemberCouponDto.getGoodsId());
|
List<Long> goodsIdList = mallMemberCouponDto.getGoodsIdList();
|
List<Long> couponIds = couponGoodsMapper.selectByGoodIdList(goodsIdList);
|
|
List<MallMemberCouponVo> mallMemberCouponVos = new ArrayList<>();
|
if(CollUtil.isNotEmpty(couponIds)){
|
mallMemberCouponVos = mallMemberCouponMapper.selectListCreateInPage(mallMemberCouponDto,couponIds);
|
}
|
return new FebsResponse().success().data(mallMemberCouponVos);
|
}
|
|
|
@Override
|
public FebsResponse setInvite(ApiSetInviteDto apiSetInviteDto) {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
MallMember mallMember = this.baseMapper.selectById(memberId);
|
if(ObjectUtil.isNotEmpty(mallMember.getReferrerId())){
|
throw new FebsException("已绑定");
|
}
|
String inviteId = apiSetInviteDto.getInviteId();
|
if(inviteId.equals(mallMember.getInviteId())){
|
return new FebsResponse().success();
|
}
|
MallMember member = this.baseMapper.selectInfoByInviteId(inviteId);
|
if (member != null) {
|
if (StrUtil.isNotBlank(member.getReferrerIds()) && member.getReferrerIds().contains(mallMember.getInviteId())) {
|
log.info("下级不能邀请上级");
|
return new FebsResponse().success();
|
}
|
mallMember.setReferrerId(member.getInviteId());
|
|
//推荐人和推荐人链
|
boolean flag = false;
|
String parentId = mallMember.getReferrerId();
|
if (StrUtil.isBlank(parentId)) {
|
flag = true;
|
}
|
String ids = "";
|
while (!flag) {
|
if (StrUtil.isBlank(ids)) {
|
ids += parentId;
|
} else {
|
ids += ("," + parentId);
|
}
|
MallMember parentMember = this.baseMapper.selectInfoByInviteId(parentId);
|
if (parentMember == null) {
|
break;
|
}
|
parentId = parentMember.getReferrerId();
|
if (StrUtil.isBlank(parentMember.getReferrerId())) {
|
flag = true;
|
}
|
}
|
if (StrUtil.isNotBlank(ids)) {
|
mallMember.setReferrerIds(ids);
|
}
|
this.baseMapper.updateById(mallMember);
|
}
|
return new FebsResponse().success();
|
}
|
|
private String getXcxLoginUrl(String code) {
|
String wechatLoginUrl =xcxProperties.getWecharLoginUrl();
|
return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code);
|
}
|
|
|
|
@Override
|
public FebsResponse salesService() {
|
MallSalesServiceVo mallSalesServiceVo = new MallSalesServiceVo();
|
|
List<DataDictionaryCustom> dataDictionaryCustoms = dataDictionaryCustomMapper.selectDicByType(
|
SalesServiceEnums.WHATSAPP.getType()
|
);
|
if (dataDictionaryCustoms.size() > 0){
|
|
for (DataDictionaryCustom dataDictionaryCustom : dataDictionaryCustoms){
|
if (SalesServiceEnums.WHATSAPP.getCode().equals(dataDictionaryCustom.getCode())){
|
mallSalesServiceVo.setWhatsApp(dataDictionaryCustom.getValue());
|
}
|
if (SalesServiceEnums.PHONE.getCode().equals(dataDictionaryCustom.getCode())){
|
mallSalesServiceVo.setPhone(dataDictionaryCustom.getValue());
|
}
|
if (SalesServiceEnums.EMAIL.getCode().equals(dataDictionaryCustom.getCode())){
|
mallSalesServiceVo.setEmail(dataDictionaryCustom.getValue());
|
}
|
if (SalesServiceEnums.WORKINGHOURS.getCode().equals(dataDictionaryCustom.getCode())){
|
mallSalesServiceVo.setWorkingHours(dataDictionaryCustom.getValue());
|
}
|
if (SalesServiceEnums.ADDRESS.getCode().equals(dataDictionaryCustom.getCode())){
|
mallSalesServiceVo.setAddress(dataDictionaryCustom.getValue());
|
}
|
}
|
|
}
|
return new FebsResponse().success().data(mallSalesServiceVo);
|
}
|
|
public static void main(String[] args) {
|
Long userld = 173L;
|
String shopAccount = "luohu";
|
String shopPwd = "123456";
|
|
HashMap<String, String> objectObjectHashMap = new HashMap<>();
|
|
objectObjectHashMap.put("shopAccount",shopAccount);
|
objectObjectHashMap.put("shopPwd",shopPwd);
|
objectObjectHashMap.put("userId",userld.toString());
|
|
//sign= MD5(shopAccount+shopPwd+userId)
|
StringBuffer stringBuffer = new StringBuffer();
|
stringBuffer.append(shopAccount);
|
stringBuffer.append(shopPwd);
|
stringBuffer.append(userld);
|
String sign = MD5.MD5Encode(stringBuffer.toString());
|
objectObjectHashMap.put("sign",sign);
|
|
System.out.println(sign);
|
|
System.out.println(objectObjectHashMap);
|
String url = "https://data.muchun.co/api/getCustomerCheckRecords";
|
String result = HttpCurlUtil.sendPost(url, objectObjectHashMap);
|
Integer retCode = JSONUtil.parseObj(result).getInt("retCode");
|
String message = JSONUtil.parseObj(result).getStr("message");
|
if(0 != retCode){
|
System.out.println(message);
|
}
|
|
JSONArray data = JSONUtil.parseObj(result).getJSONArray("data");
|
System.out.println(data);
|
}
|
|
|
}
|