src/main/java/cc/mrbird/febs/common/service/ValidateCodeService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/dto/ApiIdentifyAddressDto.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/quartz/BaiduJob.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java | ●●●●● patch | view | raw | blame | history | |
src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java | ●●●●● patch | view | raw | blame | history | |
src/test/java/cc/mrbird/febs/AgentTest.java | ●●●●● patch | view | raw | blame | history |
src/main/java/cc/mrbird/febs/common/service/ValidateCodeService.java
@@ -5,6 +5,8 @@ import cc.mrbird.febs.common.exception.FebsException; import cc.mrbird.febs.common.properties.FebsProperties; import cc.mrbird.febs.common.properties.ValidateCodeProperties; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.wf.captcha.GifCaptcha; import com.wf.captcha.SpecCaptcha; import com.wf.captcha.base.Captcha; @@ -18,6 +20,8 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; /** * 验证码服务 @@ -77,4 +81,55 @@ response.setHeader(HttpHeaders.CACHE_CONTROL, "No-cache"); response.setDateHeader(HttpHeaders.EXPIRES, 0L); } // public static void main(String[] args) { // List<Integer> lists = new ArrayList<>(); //// lists.add(1); //// lists.add(2); //// lists.add(3); //// lists.add(4); // System.out.println(lists); // List<Integer> collect = lists // .stream() // .filter(list -> 1 == list) // .collect(Collectors.toList()); // // System.out.println(collect); // // List<Integer> collect1 = lists.stream().filter( // list -> { // if (1 != list) { // return true; // } // return false; // } // ).collect(Collectors.toList()); // // System.out.println(collect1); // // // List<Integer> list2 = new ArrayList<>(); // Random rd = new Random(); // for (int i = 0; i < 100; i++) { // list2.add(rd.nextInt(101));// 随机产生一个[0,100]的数字 // } // System.out.println(list2); // // 流处理, 进行数据处理 // DoubleSummaryStatistics ds = list2.stream().collect(Collectors.summarizingDouble(e -> e)); // Map<Boolean, List<Integer>> collect2 = list2.stream().collect(Collectors.partitioningBy(e -> e >= 60)); // Map<Boolean, List<Integer>> collect3 = list2.stream().collect(Collectors.partitioningBy(e -> e >= 80)); // Map<Boolean, List<Integer>> collect4 = list2.stream().collect(Collectors.partitioningBy(e -> e >= 200)); // System.out.println("平均分"+ds.getAverage()); // System.out.println("最高分"+ds.getMax()); // System.out.println("最低分"+ds.getMin()); // System.out.println("总分"+ds.getSum()); // System.out.println("人数"+ds.getCount()); // System.out.println("大于60分"+collect2.toString()); // System.out.println("大于80分"+collect3.get(true).toString()); // System.out.println("大于90分"+collect4.get(true).toString()); // JSONObject jsonObject = JSONUtil.parseObj(collect2); // System.out.println(jsonObject); // // } } src/main/java/cc/mrbird/febs/mall/controller/ApiMallAddressInfoController.java
@@ -3,6 +3,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; 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.service.IApiMallAddressInfoService; import cc.mrbird.febs.mall.vo.AddressInfoVo; @@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; /** @@ -77,4 +79,10 @@ return new FebsResponse().success().message("设置成功"); } @ApiOperation(value = "智能识别地址", notes = "智能识别地址") @PostMapping(value = "/identifyAddress") public FebsResponse identifyAddress(@RequestBody @Valid ApiIdentifyAddressDto identifyAddressDto) { return mallAddressInfoService.identifyAddress(identifyAddressDto); } } src/main/java/cc/mrbird/febs/mall/dto/ApiIdentifyAddressDto.java
New file @@ -0,0 +1,16 @@ package cc.mrbird.febs.mall.dto; import io.swagger.annotations.ApiModel; import lombok.Data; import javax.validation.constraints.NotBlank; @Data @ApiModel(value = "ApiIdentifyAddressDto", description = "地址接收参数类") public class ApiIdentifyAddressDto { @NotBlank(message = "参数不能为空") private String text; } src/main/java/cc/mrbird/febs/mall/quartz/BaiduJob.java
New file @@ -0,0 +1,64 @@ package cc.mrbird.febs.mall.quartz; import cc.mrbird.febs.common.utils.RedisUtils; import cc.mrbird.febs.pay.util.WechatConfigure; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.exceptions.ApiException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; @Slf4j @Component @ConditionalOnProperty(prefix = "system", name = "job", havingValue = "true") public class BaiduJob { @Autowired private RedisUtils redisUtils; @Resource RestTemplate restTemplate; @Scheduled(cron = "0 0 1 * * ? ") public void getAccessToken(){ // 官网获取的 API Key 更新为你注册的 String clientId = "MPHXcBxkGLIDOmoaahS9pIB7"; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = "f5ueNY65fE9C6FzFTVKc6Imo8NdZSWMw"; String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + "grant_type=client_credentials" // 2. 官网获取的 API Key + "&client_id=" + clientId // 3. 官网获取的 Secret Key + "&client_secret=" + clientSecret; String jsonStr = restTemplate.getForObject(getAccessTokenUrl, String.class); /** * 返回结果 * {"access_token":"ACCESS_TOKEN","expires_in":7200} */ if (!jsonStr.contains("access_token")) { System.out.println("获取access_token失败"); } JSONObject jsonObject = JSONObject.parseObject(jsonStr); String accessToken = jsonObject.getString("access_token"); String accessTokenKey = WechatConfigure.BAIDU_ACCESS_TOKEN_REDIS_KEY; if (StrUtil.isEmpty(accessToken)) { log.error("获取baidu access_token失败: {}" , jsonObject.getString("errmsg")); throw new ApiException("获取access token失败"); } else { log.info("baidu access_token : {}",accessToken); System.out.println(accessToken); redisUtils.set(accessTokenKey,accessToken); } } } src/main/java/cc/mrbird/febs/mall/service/IApiMallAddressInfoService.java
@@ -2,6 +2,7 @@ import cc.mrbird.febs.common.entity.FebsResponse; 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.vo.AddressInfoVo; import com.baomidou.mybatisplus.extension.service.IService; @@ -17,4 +18,6 @@ void modifyAddress(AddressInfoDto addressInfoDto); void setDefaultAddress(Long id); FebsResponse identifyAddress(ApiIdentifyAddressDto identifyAddressDto); } src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallAddressInfoServiceImpl.java
@@ -3,20 +3,29 @@ 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.MallMember; import cc.mrbird.febs.mall.mapper.MallAddressInfoMapper; 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.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.HashMap; import java.util.List; /** @@ -27,6 +36,9 @@ @Service @RequiredArgsConstructor public class ApiMallAddressInfoServiceImpl extends ServiceImpl<MallAddressInfoMapper, MallAddressInfo> implements IApiMallAddressInfoService { @Autowired private RedisUtils redisUtils; @Override public List<AddressInfoVo> findAddressInfoList() { @@ -88,4 +100,30 @@ 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); } } src/main/java/cc/mrbird/febs/pay/util/WechatConfigure.java
@@ -7,6 +7,7 @@ public static final String SEND_INFO_URL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="; public static final String WX_ACCESS_TOKEN_REDIS_KEY = "access_token"; public static final String BAIDU_ACCESS_TOKEN_REDIS_KEY = "bd_access_token"; public static final String UNIFIEDORDER = "https://api.mch.weixin.qq.com/pay/unifiedorder"; src/test/java/cc/mrbird/febs/AgentTest.java
@@ -5,32 +5,37 @@ import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; 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.MallGoodsConversion; import cc.mrbird.febs.mall.dto.AddOrderItemDto; import cc.mrbird.febs.mall.dto.AgentLevelUpdateDto; import cc.mrbird.febs.mall.dto.ApiCreateOrderVerifyDto; import cc.mrbird.febs.mall.dto.ApiMallActWinDetailsDto; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.*; import cc.mrbird.febs.mall.mapper.*; import cc.mrbird.febs.mall.quartz.ProfitJob; import cc.mrbird.febs.mall.service.IAgentService; import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.pay.util.WechatConfigure; import cc.mrbird.febs.rabbit.consumer.AgentConsumer; import cc.mrbird.febs.rabbit.producter.AgentProducer; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.exceptions.ApiException; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.aspectj.weaver.loadtime.Agent; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; @@ -77,6 +82,78 @@ private MallGoodsMapper mallGoodsMapper; @Autowired private MallGoodsImagesMapper goodsImagesMapper; @Autowired private RedisUtils redisUtils; @Resource RestTemplate restTemplate; public static final String API_KEY = "MPHXcBxkGLIDOmoaahS9pIB7"; public static final String SECRET_KEY = "f5ueNY65fE9C6FzFTVKc6Imo8NdZSWMw"; static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build(); @Test public void getAccessToken(){ ApiIdentifyAddressDto apiIdentifyAddressDto = new ApiIdentifyAddressDto(); apiIdentifyAddressDto.setText("上海市浦东新区纳贤路701号百度上海研发中心 F4A000 张三"); MediaType mediaType = MediaType.parse("application/json"); RequestBody body = RequestBody.create(mediaType, JSONUtil.toJsonStr(apiIdentifyAddressDto)); 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(); try { Response response = HTTP_CLIENT.newCall(request).execute(); String responseStr = response.body().string(); System.out.println(responseStr); if (responseStr.contains("error_code")) { System.out.println("获取access_token失败"); JSONObject jsonObject = JSONUtil.parseObj(responseStr); System.out.print(jsonObject.get("error_code").toString()); } } catch (IOException e) { e.printStackTrace(); } } @Test public void getAccessToken2(){ // 官网获取的 API Key 更新为你注册的 String clientId = "MPHXcBxkGLIDOmoaahS9pIB7"; // 官网获取的 Secret Key 更新为你注册的 String clientSecret = "f5ueNY65fE9C6FzFTVKc6Imo8NdZSWMw"; String authHost = "https://aip.baidubce.com/oauth/2.0/token?"; String getAccessTokenUrl = authHost // 1. grant_type为固定参数 + "grant_type=client_credentials" // 2. 官网获取的 API Key + "&client_id=" + clientId // 3. 官网获取的 Secret Key + "&client_secret=" + clientSecret; String jsonStr = restTemplate.getForObject(getAccessTokenUrl, String.class); /** * 返回结果 * {"access_token":"ACCESS_TOKEN","expires_in":7200} */ if (!jsonStr.contains("access_token")) { System.out.println("获取access_token失败"); } com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(jsonStr); String accessToken = jsonObject.getString("access_token"); String accessTokenKey = WechatConfigure.BAIDU_ACCESS_TOKEN_REDIS_KEY; if (StrUtil.isEmpty(accessToken)) { log.error("获取baidu access_token失败: {}" , jsonObject.getString("errmsg")); throw new ApiException("获取access token失败"); } else { log.info("baidu access_token : {}",accessToken); System.out.println(accessToken); redisUtils.set(accessTokenKey,accessToken); } } @Test public void goodsDetails(){ Long id = 68L;