liujie
3 天以前 3003ef3b80f346a73f3c154c04e7d5d1f0e3b5eb
DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -6,7 +6,6 @@
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.internal.util.file.IOUtils;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
@@ -23,11 +22,14 @@
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.model.vo.*;
import com.stylefeng.guns.modular.system.service.*;
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.QianYunTongConfig;
import com.stylefeng.guns.modular.system.util.zhenglian.CallbackUtil;
import com.stylefeng.guns.modular.system.util.zhenglian.TokenUtil;
import com.stylefeng.guns.modular.system.util.zhenglian.model.MessageBody;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TokenRequest;
import com.stylefeng.guns.modular.system.util.zhenglian.model.TradeTerminalInfo;
import com.stylefeng.guns.modular.system.warpper.*;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
@@ -38,28 +40,24 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.geo.Point;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPoint;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.security.SecureRandom;
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;
/**
 * 司机控制器
@@ -88,7 +86,7 @@
    @Autowired
    private ICarService carService;
    
    @Autowired
    @Resource
    private RegionMapper regionMapper;
    
    @Autowired
@@ -109,7 +107,6 @@
    @Autowired
    private GunsProperties gunsProperties;
    @Autowired
    private ICompanyService companyService;
@@ -119,9 +116,26 @@
    @Autowired
    private TDriverPromotionActivityService driverPromotionActivityService;
    @Autowired
    private QianYunTongConfig qianYunTongConfig;
    @Value("${wx.url}")
    private String ACCESS_TOKEN_URL;
    @Value("${wx.appletsAppSecret}")
    private String memberAppSecret;
    @Value("${wx.appletsAppid}")
    private String wxAppId;
    @Autowired
    private RestTemplate restTemplate;
    @Autowired
    private MongoTemplate mongoTemplate;
    @Autowired
    private WeChatUtil weChatUtil;
    
    /**
     * 获取短信验证码
@@ -533,13 +547,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 +559,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,57 +603,18 @@
                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("获取二维码失败");
    }
    @Value("${wx.url}")
    private String ACCESS_TOKEN_URL;
    @Value("${wx.appletsAppSecret}")
    private String memberAppSecret;
    @Value("${wx.appletsAppid}")
    private String wxAppId;
    @Autowired
    private RestTemplate restTemplate;
    public  String getAccessToken() {
@@ -776,6 +738,17 @@
    @PostMapping("/base/savePosition")
    public String savePosition(OrderPosition orderPosition){
        try {
            //将最新定位存储mongodb中
            GeoJsonPoint point = new GeoJsonPoint(new Point(Double.parseDouble(orderPosition.getLon()),
                    Double.parseDouble(orderPosition.getLat())));
            DriverPosition position = mongoTemplate.findOne(Query.query(Criteria.where("driverId")
                    .is(orderPosition.getDriverId())), DriverPosition.class);
            if(null == position){
                position = new DriverPosition();
            }
            position.setPoint(point);
            mongoTemplate.save(position);
            //处理业务上的功能
            orderPositionService.saveData(orderPosition);
            return JSON.toJSONString(ResultUtil.success());
        }catch (Exception e){
@@ -1011,17 +984,18 @@
     */
    @ResponseBody
    @PostMapping("/api/driver/queryPhone")
    @ApiOperation(value = "获取客服电话", tags = {"司机端-个人中心"}, notes = "车队=franchisee,分公司=branch,平台=platform")
    @ApiOperation(value = "获取客服电话(黔云通)", tags = {"司机端-个人中心"}, notes = "车队=franchisee,分公司=branch,平台=platform")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "当前行政区划代码", name = "code", required = true, dataType = "String"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil queryPhone(HttpServletRequest request){
    public ResultUtil queryPhone(String code, HttpServletRequest request){
        try {
            Integer uid = driverService.getUserIdFormRedis(request);
            if(null == uid){
                return ResultUtil.tokenErr();
            }
            Map<String, Object> map = driverService.queryPhone(uid);
            Map<String, Object> map = driverService.queryPhone(uid, code);
            return ResultUtil.success(map);
        }catch (Exception e){
            e.printStackTrace();
@@ -1631,7 +1605,7 @@
            if(companyCities.isEmpty()){
                return ResultUtil.success(companyVos);
            }
            Wrapper<Company> in = new EntityWrapper<Company>().ne("type", 1).ne("flag", 3).in("id", companyCities.stream().map(CompanyCity::getCompanyId).collect(Collectors.toList()));
            Wrapper<Company> in = new EntityWrapper<Company>().eq("type", 2).ne("flag", 3).in("id", companyCities.stream().map(CompanyCity::getCompanyId).collect(Collectors.toList()));
            if(ToolUtil.isNotEmpty( name)){
                in.like("name", name);
@@ -1771,8 +1745,7 @@
        }
    }
    @Autowired
    private WeChatUtil weChatUtil;
    
    @ResponseBody
    @PostMapping("/api/driver/getDriverCode")
@@ -1851,52 +1824,51 @@
        }
    }
    
    @ResponseBody
    @GetMapping("/base/driver/getDriverInfo")
    public void getDriverInfo(String lsu, String ssologinid, String ticket, HttpSession session) {
    @PostMapping("/api/driver/getZLToken")
    @ApiOperation(value = "获取证联token(黔云通)", tags = {"司机端-首页"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9....."),
            @ApiImplicitParam(value = "当前设备IP地址", name = "ip", required = true, dataType = "String"),
            @ApiImplicitParam(value = "当前设备mac地址", name = "mac", required = true, dataType = "String"),
    })
    public ResultUtil<String> getZLToken(String ip, String mac, HttpServletRequest request){
        try {
            String onconParam = edu.yale.its.tp.cas.client.Util.getOnconParam(session);
            onconParam = new String(Base64.getDecoder().decode(onconParam), "UTF-8");
            System.err.println("lsu: " + lsu + ",ticket: " + ticket + ",ssologinid: " + ssologinid);
        } catch (Exception e) {
            Integer driverId = driverService.getUserIdFormRedis(request);
            if (null == driverId) {
                return ResultUtil.tokenErr();
            }
            Driver driver = driverService.selectById(driverId);
            TokenRequest tokenRequest = new TokenRequest();
            tokenRequest.setAppUserId(driver.getEmpId().toString());
            tokenRequest.setUserName(driver.getName());
            tokenRequest.setCertNo(driver.getIdCard());
            tokenRequest.setPhone(driver.getPhone());
            TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo();
            tradeTerminalInfo.setIp(ip);
            tradeTerminalInfo.setTerminal("1");
            tradeTerminalInfo.setMac(mac);
            tokenRequest.setTradeTerminalInfo(tradeTerminalInfo);
            String token = TokenUtil.getToken(tokenRequest);
            return ResultUtil.success(token);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
//    @ResponseBody
//    @RequestMapping(value = "/base/driver/uploadImg", method = RequestMethod.POST)
//    @ApiOperation(value = "上传图片", tags = {"司机端-注册"}, notes = "")
//    public ResultUtil uploadImg(MultipartFile file) {
//        try {
//            String bucketName = "grjy_test";
//            Bucket grjyTest = NCOSSUtil.getBucketInfo(bucketName);
//            if (null == grjyTest) {
//                //创建桶
//                Boolean bucket = NCOSSUtil.createBucket(bucketName);
//                if (!bucket) {
//                    return ResultUtil.error("创建存储桶失败");
//                }
//                //设置桶策略
//                String policyText = "{\"Version\":\"2025-06-23\",\"Statement\":[{\"Sid\":\"Stmt20250623\",\"Action\":[\"GetObject\"]" +
//                        ",\"Effect\":\"Allow\",\"Resource\":[\"" + bucketName + "\"/*],\"Principal\":{*}}]}";
//                Boolean bucketPolicy = NCOSSUtil.setBucketPolicy(bucketName, policyText);
//                if (!bucketPolicy) {
//                    return ResultUtil.error("设置桶策略失败");
//                }
//            }
//            //上传对象
//            String key = "image/driver/" + UUID.randomUUID().toString() + ".png";
//            String object = NCOSSUtil.putObject(bucketName, key, file.getInputStream());
//            if (null == object) {
//                return ResultUtil.error("上传图片失败");
//            }
//
//            return ResultUtil.success("http://" + QianYunTongProperties.endPoint + "/" + key);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return ResultUtil.runErr();
//        }
//    }
    /**
     * 证联通知回调
     * @param messageBody
     * @param request
     * @return
     */
    @ResponseBody
    @PostMapping("/base/driver/zlCallback")
    public void zlCallback(@RequestBody MessageBody messageBody, HttpServletRequest request){
        String callback = CallbackUtil.callback(messageBody);
        System.err.println("证联通知回调:" + callback);
        log.info("证联通知回调:" + callback);
    }
}