KKSU
2024-05-07 237dc82b539966a08fca13bbedbeaafd0822aff2
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -5,8 +5,7 @@
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.conversion.MallMemberConversion;
import cc.mrbird.febs.mall.conversion.MallShopApplyConversion;
import cc.mrbird.febs.mall.conversion.*;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
@@ -14,6 +13,8 @@
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.pay.util.Util;
import cc.mrbird.febs.vip.VipSettingUnAliveSettingBo;
import cc.mrbird.febs.vip.entity.MallVipConfig;
import cc.mrbird.febs.vip.mapper.MallVipConfigMapper;
@@ -27,6 +28,7 @@
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;
@@ -36,6 +38,16 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.http.HttpStatus;
@@ -80,6 +92,10 @@
    private final MallGoodsMapper mallGoodsMapper;
    private final MallVipConfigMapper mallVipConfigMapper;
    private final MallStoreMapper mallStoreMapper;
    private final MallStoreItemMapper mallStoreItemMapper;
    private final MallStoreMemberMapper mallStoreMemberMapper;
    private final MallMemberLevelMapper mallMemberLevelMapper;
    @Value("${spring.profiles.active}")
@@ -364,12 +380,30 @@
        MallMember mallMember = this.baseMapper.selectById(memberId);
        List<TeamListVo> list = this.baseMapper.selectTeamListByInviteId(mallMember.getInviteId());
        if(CollUtil.isNotEmpty(list)){
            for(TeamListVo teamListVo : list){
                String levelName = "";
                if(1 == teamListVo.getLevelCode()){
                    levelName = "一级";
                }else if(2 == teamListVo.getLevelCode()){
                    levelName = "二级";
                }
                teamListVo.setLevelName(levelName);
            }
        }
        QueryWrapper<MallMemberLevel> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("member_id",memberId);
        MallMemberLevel mallMemberLevel = mallMemberLevelMapper.selectOne(queryWrapper);
        MyTeamVo myTeamVo = new MyTeamVo();
        myTeamVo.setLevelPercent(mallMemberLevel.getLevelPercent());
        myTeamVo.setLevelCode(mallMemberLevel.getLevelCode());
        myTeamVo.setTeam(list);
        myTeamVo.setMyAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 1));
        myTeamVo.setMyTeamAchieve(this.mallOrderInfoMapper.selectAmountOrTeamAmount(mallMember.getInviteId(), 2));
        myTeamVo.setMyTeamCnt(this.baseMapper.selectAllChildAgentListByInviteId(mallMember.getInviteId()).size());
        List<MallMember> mallMembers = this.baseMapper.selectChildAgentListByInviteId(mallMember.getInviteId());
        myTeamVo.setMyTeamCnt(CollUtil.isEmpty(mallMembers) ? 0 : mallMembers.size());
        return new FebsResponse().success().data(myTeamVo);
    }
@@ -659,6 +693,12 @@
                        }
                    }
                    this.baseMapper.insert(mallMember);
                    MallMemberLevel mallMemberLevel = new MallMemberLevel();
                    mallMemberLevel.setMemberId(mallMember.getId());
                    mallMemberLevel.setLevelCode(0);
                    mallMemberLevel.setLevelPercent(BigDecimal.ZERO);
                    mallMemberLevelMapper.insert(mallMemberLevel);
                    mallMember = this.baseMapper.selectMemberByOpenId(openId);
                    String inviteId = ShareCodeUtil.toSerialCode(mallMember.getId());
@@ -1004,7 +1044,10 @@
        Long memberId = LoginUserUtil.getLoginUser().getId();
        mallMemberCouponDto.setMemberId(memberId);
        mallMemberCouponDto.setExpireTime(DateUtil.date());
        List<Long> couponIds = couponGoodsMapper.selectByGoodId(mallMemberCouponDto.getGoodsId());
//        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);
@@ -1119,6 +1162,7 @@
        LambdaQueryWrapper<MallMemberCoupon> memberCouponQuery = new LambdaQueryWrapper<>();
        memberCouponQuery.in(MallMemberCoupon::getCouponId, couponIds)
                        .eq(MallMemberCoupon::getMemberId, member.getId())
                        .eq(MallMemberCoupon::getFromType, 3)
                        .ge(MallMemberCoupon::getCreatedTime, DateUtil.beginOfDay(new Date()))
                        .le(MallMemberCoupon::getCreatedTime, DateUtil.endOfDay(new Date()));
        List<MallMemberCoupon> mallMemberCoupons = mallMemberCouponMapper.selectList(memberCouponQuery);
@@ -1140,6 +1184,7 @@
            memberCoupon.setInviteId(member.getInviteId());
            memberCoupon.setCouponUuid(IdUtil.simpleUUID());
            memberCoupon.setState(1);
            memberCoupon.setFromType(3);
            memberCoupon.setExpireTime(DateUtil.offsetDay(DateUtil.date(), item.getExpireDay()));
            memberCoupon.setMemberId(member.getId());
            mallMemberCouponMapper.insert(memberCoupon);
@@ -1150,5 +1195,222 @@
        return result;
    }
    @Override
    public FebsResponse storeList(MallStoreDto mallStoreDto) {
        QueryWrapper<MallStore> mallStoreQueryWrapper = new QueryWrapper<>();
        if(StrUtil.isNotEmpty(mallStoreDto.getName())){
            mallStoreQueryWrapper.like("name",mallStoreQueryWrapper);
        }
        List<MallStore> mallStores = mallStoreMapper.selectList(mallStoreQueryWrapper);
        List<MallStoreVo> mallStoreVos = MallStoreConversion.INSTANCE.entitysToVos(mallStores);
        return new FebsResponse().success().data(mallStoreVos);
    }
    @Override
    public FebsResponse storeItemList(MallStoreItemDto mallStoreItemDto) {
        QueryWrapper<MallStoreItem> mallStoreQueryWrapper = new QueryWrapper<>();
        mallStoreQueryWrapper.like("store_id",mallStoreItemDto.getStoreId());
        List<MallStoreItem> mallStores = mallStoreItemMapper.selectList(mallStoreQueryWrapper);
        return new FebsResponse().success().data(mallStores);
    }
    @Override
    public FebsResponse bindStoreMember(BindStoreMemberDto bindStoreMemberDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        Long storeItemId = bindStoreMemberDto.getStoreItemId();
        QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("member_id",memberId);
        List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper);
        if(CollUtil.isNotEmpty(mallStoreMembers)){
            mallStoreMemberMapper.delete(objectQueryWrapper);
        }
        MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId);
        HashMap<String, String> objectObjectHashMap = new HashMap<>();
        String shopAccount = mallStoreItem.getAccount();
        String shopPwd = mallStoreItem.getPassword();
        String name = bindStoreMemberDto.getName();
        String address = bindStoreMemberDto.getAddress();
        Integer age = bindStoreMemberDto.getAge();
        String phoneNumber = bindStoreMemberDto.getPhone();
        objectObjectHashMap.put("shopAccount",shopAccount);
        objectObjectHashMap.put("shopPwd",shopPwd);
        objectObjectHashMap.put("name",name);
        objectObjectHashMap.put("address",address);
        objectObjectHashMap.put("age",age.toString());
        objectObjectHashMap.put("phoneNumber",phoneNumber);
        //sign= MD5(address+age+name+phoneNumber+shopAccount+shopPwd)
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(address);
        stringBuffer.append(age);
        stringBuffer.append(name);
        stringBuffer.append(phoneNumber);
        stringBuffer.append(shopAccount);
        stringBuffer.append(shopPwd);
        String sign = MD5.MD5Encode(stringBuffer.toString());
        objectObjectHashMap.put("sign",sign);
        String url = "https://data.muchun.co/api/bindCustomer";
        String result = HttpCurlUtil.sendPost(url, objectObjectHashMap);
        Integer retCode = JSONUtil.parseObj(result).getInt("retCode");
        String message = JSONUtil.parseObj(result).getStr("message");
        if(0 != retCode || !"绑定成功".equals(message)){
            return new FebsResponse().fail().message(message);
        }
        Long bindId = JSONUtil.parseObj(result).getJSONObject("data").getLong("userId");
        MallStoreMember mallStoreMember = new MallStoreMember();
        mallStoreMember.setMemberId(memberId);
        mallStoreMember.setBindId(bindId);
        mallStoreMember.setStoreId(mallStoreItem.getStoreId());
        mallStoreMember.setStoreItemId(mallStoreItem.getId());
        mallStoreMember.setAccount(shopAccount);
        mallStoreMember.setPassword(shopPwd);
        mallStoreMember.setName(name);
        mallStoreMember.setAddress(address);
        mallStoreMember.setAge(age);
        mallStoreMember.setPhone(phoneNumber);
        mallStoreMemberMapper.insert(mallStoreMember);
        return new FebsResponse().success().message("绑定成功");
    }
    @Override
    public FebsResponse bindList() {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        QueryWrapper<MallStoreMember> objectQueryWrapper = new QueryWrapper<>();
        objectQueryWrapper.eq("member_id",memberId);
        List<MallStoreMember> mallStoreMembers = mallStoreMemberMapper.selectList(objectQueryWrapper);
        ArrayList<MallStoreMemberVo> mallStoreMemberVos = new ArrayList<>();
        for(MallStoreMember mallStoreMember : mallStoreMembers){
            MallStoreMemberVo mallStoreMemberVo = new MallStoreMemberVo();
            Long storeId = mallStoreMember.getStoreId();
            Long storeItemId = mallStoreMember.getStoreItemId();
            MallStore mallStore = mallStoreMapper.selectById(storeId);
            MallStoreItem mallStoreItem = mallStoreItemMapper.selectById(storeItemId);
            mallStoreMemberVo.setId(mallStoreMember.getId());
            mallStoreMemberVo.setBindInfo(mallStore.getName()+"-"+mallStoreItem.getCode());
            mallStoreMemberVos.add(mallStoreMemberVo);
        }
        return new FebsResponse().success().data(mallStoreMemberVos);
    }
    @Override
    public FebsResponse bindResult(BindResultDto bindResultDto) {
        Long memberId = LoginUserUtil.getLoginUser().getId();
        MallStoreMember mallStoreMember = mallStoreMemberMapper.selectById(bindResultDto.getBindId());
        Long userld = mallStoreMember.getBindId();
        String shopAccount = mallStoreMember.getAccount();
        String shopPwd = mallStoreMember.getPassword();
        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);
        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){
            return new FebsResponse().fail().message(message);
        }
        JSONArray data = JSONUtil.parseObj(result).getJSONArray("data");
        return new FebsResponse().success().data(data);
    }
    @Override
    public FebsResponse levelUpdate(ApiLevelUpdateDto apiLevelUpdateDto) {
        Long levelId = apiLevelUpdateDto.getLevelId();
        MallMemberLevel mallMemberLevel = mallMemberLevelMapper.selectById(levelId);
        if(ObjectUtil.isEmpty(mallMemberLevel)){
            throw new FebsException("记录不存在");
        }
        DataDictionaryCustom memberLevelOneDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.MEMBER_LEVEL_ONE.getType(),
                DataDictionaryEnum.MEMBER_LEVEL_ONE.getCode()
        );
        if(Integer.parseInt(memberLevelOneDic.getValue()) != mallMemberLevel.getLevelCode()){
            throw new FebsException(StrUtil.format("{}才能设置层级和佣金比例}", memberLevelOneDic.getDescription()));
        }
        DataDictionaryCustom memberLevelTwoDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.MEMBER_LEVEL_TWO.getType(),
                DataDictionaryEnum.MEMBER_LEVEL_TWO.getCode()
        );
        Integer levelCode = apiLevelUpdateDto.getLevelCode();
        if(Integer.parseInt(memberLevelTwoDic.getValue()) != levelCode){
            throw new FebsException(StrUtil.format("当前用户只能设置{}}", memberLevelTwoDic.getDescription()));
        }
        DataDictionaryCustom minPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.MEMBER_LEVEL_PERCENT_MIN.getType(),
                DataDictionaryEnum.MEMBER_LEVEL_PERCENT_MIN.getCode()
        );
        DataDictionaryCustom maxPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                DataDictionaryEnum.MEMBER_LEVEL_PERCENT_MAX.getType(),
                DataDictionaryEnum.MEMBER_LEVEL_PERCENT_MAX.getCode()
        );
        BigDecimal minPercent = new BigDecimal(minPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
        BigDecimal maxPercent = new BigDecimal(maxPercentDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN);
        BigDecimal levelPercent = apiLevelUpdateDto.getLevelPercent();
        if(levelPercent.compareTo(minPercent) < 0 || levelPercent.compareTo(maxPercent) > 0){
            throw new FebsException(StrUtil.format("佣金比例必须在{}和{}之间。", minPercent,maxPercent));
        }
        mallMemberLevel.setLevelCode(levelCode);
        mallMemberLevel.setLevelPercent(levelPercent);
        mallMemberLevelMapper.updateById(mallMemberLevel);
        return new FebsResponse().success().message("操作成功");
    }
    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);
    }
}