package cc.mrbird.febs.mall.service.impl;
|
|
import cc.mrbird.febs.common.entity.FebsResponse;
|
import cc.mrbird.febs.common.exception.FebsException;
|
import cc.mrbird.febs.common.utils.LoginUserUtil;
|
import cc.mrbird.febs.common.utils.RedisUtils;
|
import cc.mrbird.febs.mall.conversion.MallAddressInfoConversion;
|
import cc.mrbird.febs.mall.dto.AddressInfoDto;
|
import cc.mrbird.febs.mall.dto.ApiIdentifyAddressDto;
|
import cc.mrbird.febs.mall.entity.MallAddressInfo;
|
import cc.mrbird.febs.mall.entity.MallAddressWorld;
|
import cc.mrbird.febs.mall.entity.MallMember;
|
import cc.mrbird.febs.mall.mapper.MallAddressInfoMapper;
|
import cc.mrbird.febs.mall.mapper.MallAddressWorldMapper;
|
import cc.mrbird.febs.mall.service.IApiMallAddressInfoService;
|
import cc.mrbird.febs.mall.vo.AddressInfoVo;
|
import cc.mrbird.febs.pay.util.WechatConfigure;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.json.JSONObject;
|
import cn.hutool.json.JSONUtil;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import okhttp3.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.io.IOException;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @author wzy
|
* @date 2021-09-18
|
**/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor
|
public class ApiMallAddressInfoServiceImpl extends ServiceImpl<MallAddressInfoMapper, MallAddressInfo> implements IApiMallAddressInfoService {
|
|
@Autowired
|
private RedisUtils redisUtils;
|
@Autowired
|
private MallAddressWorldMapper mallAddressWorldMapper;
|
|
@Override
|
public List<AddressInfoVo> findAddressInfoList() {
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
List<MallAddressInfo> addressInfos = this.baseMapper.selectAddressInfoListByMemberId(memberId);
|
|
return MallAddressInfoConversion.INSTANCE.entityListToVos(addressInfos);
|
}
|
|
@Override
|
public FebsResponse addAddress(AddressInfoDto addressInfoDto) {
|
MallAddressInfo addressInfo = MallAddressInfoConversion.INSTANCE.dtoToEntity(addressInfoDto);
|
|
MallMember member = LoginUserUtil.getLoginUser();
|
Long memberId = member.getId();
|
List<MallAddressInfo> existAddress = this.baseMapper.selectAddressInfoListByMemberId(memberId);
|
if (CollUtil.isEmpty(existAddress)) {
|
addressInfo.setIsDefault(MallAddressInfo.IS_DEFAULT_Y);
|
} else {
|
if (MallAddressInfo.IS_DEFAULT_Y.equals(addressInfoDto.getIsDefault())) {
|
this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, memberId, null);
|
}
|
}
|
|
addressInfo.setMemberId(memberId);
|
addressInfo.setCreatedBy(member.getPhone());
|
addressInfo.setUpdatedBy(member.getPhone());
|
this.baseMapper.insert(addressInfo);
|
|
return new FebsResponse().success().data(addressInfo.getId());
|
}
|
|
@Override
|
public void modifyAddress(AddressInfoDto addressInfoDto) {
|
MallAddressInfo existAddress = this.baseMapper.selectById(addressInfoDto.getId());
|
if (existAddress == null) {
|
throw new FebsException("地址不存在");
|
}
|
|
Long memberId = LoginUserUtil.getLoginUser().getId();
|
MallAddressInfo addressInfo = MallAddressInfoConversion.INSTANCE.dtoToEntity(addressInfoDto);
|
if (MallAddressInfo.IS_DEFAULT_Y.equals(addressInfoDto.getIsDefault())) {
|
this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, memberId, null);
|
}
|
|
addressInfo.setUpdatedTime(new Date());
|
this.baseMapper.updateById(addressInfo);
|
}
|
|
@Override
|
public void setDefaultAddress(Long id) {
|
MallAddressInfo addressInfo = this.baseMapper.selectById(id);
|
if (addressInfo == null) {
|
throw new FebsException("地址不存在");
|
}
|
|
MallMember member = LoginUserUtil.getLoginUser();
|
this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_N, member.getId(), null);
|
|
this.baseMapper.updateIsDefault(MallAddressInfo.IS_DEFAULT_Y, member.getId(), id);
|
}
|
|
static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build();
|
|
@Override
|
public FebsResponse identifyAddress(ApiIdentifyAddressDto identifyAddressDto) {
|
MediaType mediaType = MediaType.parse("application/json");
|
RequestBody body = RequestBody.create(mediaType, JSONUtil.toJsonStr(identifyAddressDto));
|
Request request = new Request.Builder()
|
.url("https://aip.baidubce.com/rpc/2.0/nlp/v1/address?access_token=" + redisUtils.get(WechatConfigure.BAIDU_ACCESS_TOKEN_REDIS_KEY).toString())
|
.method("POST", body)
|
.addHeader("Content-Type", "application/json")
|
.addHeader("Accept", "application/json")
|
.build();
|
String data = "";
|
try {
|
Response response = HTTP_CLIENT.newCall(request).execute();
|
data = response.body().string();
|
if (data.contains("error_code")) {
|
JSONObject jsonObject = JSONUtil.parseObj(data);
|
return new FebsResponse().fail().message("地址识别错误编码:"+jsonObject.get("error_code").toString());
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return new FebsResponse().success().data(data);
|
}
|
|
@Override
|
public FebsResponse getProvince(Long id) {
|
LambdaQueryWrapper<MallAddressWorld> addressWorldLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
addressWorldLambdaQueryWrapper.eq(MallAddressWorld::getPid, id)
|
.orderByDesc(MallAddressWorld::getId);
|
List<MallAddressWorld> mallAddressWorlds = mallAddressWorldMapper.selectList(addressWorldLambdaQueryWrapper);
|
return new FebsResponse().success().data(mallAddressWorlds);
|
}
|
}
|