liujie
7 天以前 1d07ee4cfa2965587f092e5295ce96f4079268b4
更新微信三方
2个文件已修改
556 ■■■■ 已修改文件
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/NCOSSUtil.java 486 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -26,7 +26,7 @@
import com.stylefeng.guns.modular.system.util.ALiSendSms;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.util.WeChatUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.NCOSSUtil;
//import com.stylefeng.guns.modular.system.util.qianyuntong.NCOSSUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.QianYunTongConfig;
import com.stylefeng.guns.modular.system.warpper.*;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
@@ -40,6 +40,7 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.*;
import org.springframework.util.Base64Utils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
@@ -57,6 +58,7 @@
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static org.bouncycastle.cms.RecipientId.password;
@@ -533,13 +535,11 @@
    @ApiOperation(value = "个人的小程序码(分享码)/链接", tags = {"司机端-首页"}, notes = "")
    @GetMapping("/api/driver/person-code")
    @GetMapping("/api/driver/personCode")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
    })
    public ResultUtil<HashMap<String, String>> createQRcode(HttpServletRequest request) {
        InputStream inputStream = null;
        OutputStream outputStream = null;
    public ResultUtil<HashMap<String, Object>> personCode(HttpServletRequest request) {
        try {
            Integer uid = driverService.getUserIdFormRedis(request);
            if (null == uid) {
@@ -547,37 +547,26 @@
            }
            Driver driver = driverService.selectById(uid);
            String accessToken=null;
            Object img = redisTemplate.opsForValue().get("DRIVER_WX_IMG" + uid);
            // 获取调用凭证accessToken
            if(ToolUtil.isEmpty(driver.getShareImg())|| ToolUtil.isEmpty(driver.getShareImg())){
            if(ToolUtil.isEmpty(driver.getShareLink())|| ToolUtil.isEmpty(img)){
                accessToken = getAccessToken();
            }
            String img=driver.getShareImg();
            int index=0;
            if(ToolUtil.isEmpty(driver.getShareImg())) {
                index=1;
            if(ToolUtil.isEmpty(img)) {
                RestTemplate rest = new RestTemplate();
                String imgUrl = "";
                String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=" + accessToken;
                Map<String, Object> param = new HashMap<>();
                param.put("path", "pages/home/home?driverId=" + uid);
                param.put("width", 430); //二维码尺寸
                MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
                HttpEntity requestEntity = new HttpEntity(param, headers);
                ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
                byte[] result = entity.getBody();
                inputStream = new ByteArrayInputStream(result);
                HttpRequest post = HttpUtil.createPost(url);
                post.body(JSON.toJSONString(param));
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
                // 最后上传生成的文件名
                String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg";
                // oss中的文件夹名
                String objectName = sdf.format(new Date()) + "/" + finalFileName;
                String key = "imgs/management/" + objectName;
                String object = NCOSSUtil.putObject(qianYunTongConfig.getBucketName(), key, inputStream);
                System.out.println(object);
                driver.setShareImg(object);
                img= object;
                byte[] result = post.execute().bodyBytes();
                // base64
                img = Base64.getEncoder().encodeToString(result);
                redisTemplate.opsForValue().set("DRIVER_WX_IMG" + uid, img,30, TimeUnit.DAYS);
            }
            String urlLink = driver.getShareLink();
@@ -602,42 +591,13 @@
                driverService.updateById(driver);
            }
            HashMap<String, String> stringStringHashMap = new HashMap<>();
            HashMap<String, Object> stringStringHashMap = new HashMap<>();
            stringStringHashMap.put("url_link",urlLink);
            stringStringHashMap.put("img",img);
//            inputStream = new ByteArrayInputStream(result);
//
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//            // 最后上传生成的文件名
//            String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg";
//            // oss中的文件夹名
//            String objectName = sdf.format(new Date()) + "/" + finalFileName;
//            // 上传oss
////            ossUtil.uploadFile2OSS(inputStream, objectName);
////            //获取文件的URl地址
////            imgUrl = ossUtil.getImgUrl(objectName);
//            log.info("imgUrl: "+imgUrl);
            return ResultUtil.success(stringStringHashMap);
        } catch (Exception e) {
            log.error("调用小程序生成微信永久小程序码URL接口异常", e);
        }finally {
            if(inputStream != null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(outputStream != null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return ResultUtil.error("获取二维码失败");
    }
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/NCOSSUtil.java
@@ -1,243 +1,243 @@
package com.stylefeng.guns.modular.system.util.qianyuntong;
import com.heredata.hos.HOS;
import com.heredata.hos.HOSClientBuilder;
import com.heredata.hos.model.CreateBucketRequest;
import com.heredata.hos.model.HOSObject;
import com.heredata.hos.model.PutObjectRequest;
import com.heredata.hos.model.PutObjectResult;
import com.heredata.hos.model.bucket.Bucket;
import com.heredata.model.VoidResult;
import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
import lombok.extern.slf4j.Slf4j;
import java.io.InputStream;
/**
 * OSS 工具类
 * @author zhibing.pu
 * @Date 2025/6/23 17:50
 */
@Slf4j
public class NCOSSUtil {
    private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();;
    /**
     * 创建桶
     * @param bucketName
     * @return
     */
    public static Boolean createBucket(String bucketName) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            // 创建请求对象,并且设置创建桶名为"example"的桶
            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
            VoidResult result = hos.createBucket(createBucketRequest);
            if (result.getResponse().isSuccessful()) {
                log.info("创建桶成功:" + bucketName);
                return true;
            }
        } catch (Exception e){
            log.info("创建桶失败:" + bucketName);
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 查询桶详情
     * @param bucketName
     * @return
     */
    public static Bucket getBucketInfo(String bucketName) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            // 查询桶名为"example"的详情
            Bucket bucket = hos.getBucketInfo(bucketName);
            return bucket;
        } catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 删除桶
     * @param bucketName
     * @return
     */
    public static Boolean deleteBucket(String bucketName) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            VoidResult result = hos.deleteBucket(bucketName);
            if (result.getResponse().isSuccessful()) {
                log.info("删除桶成功:" + bucketName);
                return true;
            }
        } catch (Exception e){
            log.info("删除桶成功:" + bucketName);
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 设置桶策略
     * @param bucketName    桶名
     * @param policyText    策略规则字符串
     * {
     *   // 策略配置的版本号,由用户定义
     *   "Version": "2012-10-17",
     *   //  策略规则配置,可指定多条策略规则
     *   "Statement": [{
     *     // 策略规则ID,可用户指定,如不指定则服务自动生成一条
     *     "Sid": "sid",
     *     // 策略规则指定的HOS API接口标识,可参照下表填写
     *     "Action": [
     *       "action"
     *     ],
     *     // 策略规则效果,具体表现为允许或拒绝,有效值为Allow(允许),Deny(拒绝);
     *     "Effect": "Allow",
     *     // 策略规则指定的资源参照下面resource配置
     *     "Resource": "resource",
     *     // 策略规则指定的授权人 参照下面Principal配置
     *     "Principal": {
     *       "HWS": [
     *         "account_id:root"
     *       ]
     *     }
     *   }
     *   ]
     * }
     * @return
     */
    public static Boolean setBucketPolicy(String bucketName, String policyText) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        // 桶策略字符串
        try {
            VoidResult result = hos.setBucketPolicy(bucketName, policyText);
            if (result.getResponse().isSuccessful()) {
                log.info("设置桶策略成功:" + bucketName);
                return true;
            }
        } catch (Exception e) {
            log.info("设置桶策略失败:" + bucketName);
            e.printStackTrace();
        }
        return false;
    }
    /**
     * 上传对象
     * @param bucketName    桶名称
     * @param key           存储文件名
     * @param inputStream      上传文件流
     * @return  对象唯一标识
     */
    public static String putObject(String bucketName, String key, InputStream inputStream) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key , inputStream);
            PutObjectResult example = hos.putObject(putObjectRequest);
            if (example.getResponse().isSuccessful()) {
                log.info("上传对象成功:" + bucketName + "--->" + key);
                return example.getETag();
            }
        } catch (Exception e) {
            log.info("上传对象成功:" + bucketName);
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 查询对象
     * @param bucketName    桶名称
     * @param key           存储文件名
     * @return
     */
    public static HOSObject getObject(String bucketName, String key) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            HOSObject example = hos.getObject(bucketName, key);
            if (example.getResponse().isSuccessful()) {
                log.info("查询对象成功:" + bucketName + "--->" + key);
                return example;
            }
        } catch (Exception e) {
            log.info("查询对象失败:" + bucketName);
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 删除对象
     * @param bucketName     桶名称
     * @param key          存储文件名
     * @return
     */
    public static Boolean deleteObject(String bucketName, String key) {
        /**
         * endPoint:HOS的基础路径(公共前缀)
         * account:账户的ID
         * accessKey:向UAAS服务请求到的access_key
         * secretKey:向UAAS服务请求到的secret_key
         */
        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
        try {
            VoidResult example = hos.deleteObject(bucketName, key);
            if (example.getResponse().isSuccessful()) {
                log.info("删除对象成功:" + bucketName + "--->" + key);
                return true;
            }
        } catch (Exception e) {
            log.info("删除对象失败:" + bucketName + "--->" + key);
            e.printStackTrace();
        }
        return false;
    }
}
//package com.stylefeng.guns.modular.system.util.qianyuntong;
//
//import com.heredata.hos.HOS;
//import com.heredata.hos.HOSClientBuilder;
//import com.heredata.hos.model.CreateBucketRequest;
//import com.heredata.hos.model.HOSObject;
//import com.heredata.hos.model.PutObjectRequest;
//import com.heredata.hos.model.PutObjectResult;
//import com.heredata.hos.model.bucket.Bucket;
//import com.heredata.model.VoidResult;
//import com.stylefeng.guns.modular.system.util.SpringContextsUtil;
//import lombok.extern.slf4j.Slf4j;
//
//import java.io.InputStream;
//
///**
// * OSS 工具类
// * @author zhibing.pu
// * @Date 2025/6/23 17:50
// */
//@Slf4j
//public class NCOSSUtil {
//
//    private static QianYunTongConfig qianYunTongConfig = SpringContextsUtil.getBean(QianYunTongConfig.class).getQianYunTongConfig();;
//
//    /**
//     * 创建桶
//     * @param bucketName
//     * @return
//     */
//    public static Boolean createBucket(String bucketName) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        try {
//            // 创建请求对象,并且设置创建桶名为"example"的桶
//            CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
//            VoidResult result = hos.createBucket(createBucketRequest);
//            if (result.getResponse().isSuccessful()) {
//                log.info("创建桶成功:" + bucketName);
//                return true;
//            }
//        } catch (Exception e){
//            log.info("创建桶失败:" + bucketName);
//            e.printStackTrace();
//        }
//        return false;
//    }
//
//
//    /**
//     * 查询桶详情
//     * @param bucketName
//     * @return
//     */
//    public static Bucket getBucketInfo(String bucketName) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        try {
//            // 查询桶名为"example"的详情
//            Bucket bucket = hos.getBucketInfo(bucketName);
//            return bucket;
//        } catch (Exception e){
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * 删除桶
//     * @param bucketName
//     * @return
//     */
//    public static Boolean deleteBucket(String bucketName) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        try {
//            VoidResult result = hos.deleteBucket(bucketName);
//            if (result.getResponse().isSuccessful()) {
//                log.info("删除桶成功:" + bucketName);
//                return true;
//            }
//        } catch (Exception e){
//            log.info("删除桶成功:" + bucketName);
//            e.printStackTrace();
//        }
//        return false;
//    }
//
//
//    /**
//     * 设置桶策略
//     * @param bucketName    桶名
//     * @param policyText    策略规则字符串
//     * {
//     *   // 策略配置的版本号,由用户定义
//     *   "Version": "2012-10-17",
//     *   //  策略规则配置,可指定多条策略规则
//     *   "Statement": [{
//     *     // 策略规则ID,可用户指定,如不指定则服务自动生成一条
//     *     "Sid": "sid",
//     *     // 策略规则指定的HOS API接口标识,可参照下表填写
//     *     "Action": [
//     *       "action"
//     *     ],
//     *     // 策略规则效果,具体表现为允许或拒绝,有效值为Allow(允许),Deny(拒绝);
//     *     "Effect": "Allow",
//     *     // 策略规则指定的资源参照下面resource配置
//     *     "Resource": "resource",
//     *     // 策略规则指定的授权人 参照下面Principal配置
//     *     "Principal": {
//     *       "HWS": [
//     *         "account_id:root"
//     *       ]
//     *     }
//     *   }
//     *   ]
//     * }
//     * @return
//     */
//    public static Boolean setBucketPolicy(String bucketName, String policyText) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        // 桶策略字符串
//        try {
//            VoidResult result = hos.setBucketPolicy(bucketName, policyText);
//            if (result.getResponse().isSuccessful()) {
//                log.info("设置桶策略成功:" + bucketName);
//                return true;
//            }
//        } catch (Exception e) {
//            log.info("设置桶策略失败:" + bucketName);
//            e.printStackTrace();
//        }
//        return false;
//    }
//
//
//    /**
//     * 上传对象
//     * @param bucketName    桶名称
//     * @param key           存储文件名
//     * @param inputStream      上传文件流
//     * @return  对象唯一标识
//     */
//    public static String putObject(String bucketName, String key, InputStream inputStream) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        try {
//            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key , inputStream);
//            PutObjectResult example = hos.putObject(putObjectRequest);
//            if (example.getResponse().isSuccessful()) {
//                log.info("上传对象成功:" + bucketName + "--->" + key);
//                return example.getETag();
//            }
//        } catch (Exception e) {
//            log.info("上传对象成功:" + bucketName);
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * 查询对象
//     * @param bucketName    桶名称
//     * @param key           存储文件名
//     * @return
//     */
//    public static HOSObject getObject(String bucketName, String key) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        try {
//            HOSObject example = hos.getObject(bucketName, key);
//            if (example.getResponse().isSuccessful()) {
//                log.info("查询对象成功:" + bucketName + "--->" + key);
//                return example;
//            }
//        } catch (Exception e) {
//            log.info("查询对象失败:" + bucketName);
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//
//    /**
//     * 删除对象
//     * @param bucketName     桶名称
//     * @param key          存储文件名
//     * @return
//     */
//    public static Boolean deleteObject(String bucketName, String key) {
//        /**
//         * endPoint:HOS的基础路径(公共前缀)
//         * account:账户的ID
//         * accessKey:向UAAS服务请求到的access_key
//         * secretKey:向UAAS服务请求到的secret_key
//         */
//        HOS hos = new HOSClientBuilder().build(qianYunTongConfig.getEndPoint(), qianYunTongConfig.getAccount(), qianYunTongConfig.getAccessKey(), qianYunTongConfig.getSecretKey());
//        try {
//            VoidResult example = hos.deleteObject(bucketName, key);
//            if (example.getResponse().isSuccessful()) {
//                log.info("删除对象成功:" + bucketName + "--->" + key);
//                return true;
//            }
//        } catch (Exception e) {
//            log.info("删除对象失败:" + bucketName + "--->" + key);
//            e.printStackTrace();
//        }
//        return false;
//    }
//}