Pu Zhibing
1 天以前 bf174ea0bf750cf0818bc7b3472cbdc7485fdf18
driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
@@ -1,6 +1,9 @@
package com.supersavedriving.driver.modular.system.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
@@ -18,12 +21,13 @@
import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest;
import com.supersavedriving.driver.modular.system.util.*;
import com.supersavedriving.driver.modular.system.util.MiniPay.MiniAppPay;
import com.supersavedriving.driver.modular.system.util.huawei.OBSUtil;
import com.supersavedriving.driver.modular.system.util.mongodb.model.Location;
import com.supersavedriving.driver.modular.system.util.qianyuntong.QianYunTongConfig;
import com.supersavedriving.driver.modular.system.util.rongyun.RongYunUtil;
import com.supersavedriving.driver.modular.system.util.weChat.WeChatUtil;
import com.supersavedriving.driver.modular.system.util.weChat.model.Code2Session;
import com.supersavedriving.driver.modular.system.warpper.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
@@ -45,7 +49,9 @@
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -62,6 +68,7 @@
* @author pzb
* @Date 2023/2/8 18:52
*/
@Slf4j
@Service
public class DriverServiceImpl extends ServiceImpl<DriverMapper, Driver> implements IDriverService {
@@ -86,6 +93,9 @@
    @Value("${filePath}")
    private String filePath;
    @Value("${qyt.admin_url}")
    private String adminUrl;
    @Autowired
    private IAppUserService appUserService;
@@ -119,6 +129,9 @@
    @Autowired
    private WeChatUtil weChatUtil;
    @Resource
    private QianYunTongConfig qianYunTongConfig;
    @Autowired
    private IDriverOnlineTimeService driverOnlineTimeService;
@@ -209,14 +222,30 @@
    //生成小程序二维码
    public String wechatMiniProgramORCode(Integer driverId) throws Exception{
        InputStream release = weChatUtil.getwxacodeunlimit("pages/index/index", "driverId=" + driverId, "release");
        String s = OssUploadUtil.ossUpload(release, "driver_" + driverId + "_" + UUIDUtil.getNumberRandom(5) + ".jpg");
        return s;
        String pictureName = "driver_" + driverId + ".png";
        File file = FileUtil.writeFromStream(release, new File(filePath + pictureName));
        HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image");
        post.form("file", file);
        HttpResponse execute = post.execute();
        int status = execute.getStatus();
        if(200 != status){
            throw new RuntimeException("上传图片异常");
        }
        return execute.body();
    }
    //司机下单二维码
    public String wechatMiniOrderQRCode(Integer driverId) throws Exception{
        InputStream release = weChatUtil.getwxacodeunlimitOrder("pages/index/index", "driverIds=" + driverId, "release");
        String s = OssUploadUtil.ossUpload(release, "driverOrder_" + driverId + "_" + UUIDUtil.getNumberRandom(5) + ".jpg");
        return s;
        String pictureName = "driver_" + driverId + ".png";
        File file = FileUtil.writeFromStream(release, new File(filePath + pictureName));
        HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image");
        post.form("file", file);
        HttpResponse execute = post.execute();
        int status = execute.getStatus();
        if(200 != status){
            throw new RuntimeException("上传图片异常");
        }
        return execute.body();
    }
@@ -317,28 +346,33 @@
        tokenWarpper.setValidTime(7200L);
        tokenWarpper.setIsSetPassword(ToolUtil.isEmpty(driver.getPassword()) ? 0 : 1);
        String RYToken = rongYunUtil.getToken(driver.getId().toString(), driver.getName(), driver.getAvatar());
        if(ToolUtil.isNotEmpty(RYToken)){
            JSONObject jsonObject = JSON.parseObject(RYToken);
            Integer code1 = jsonObject.getInteger("code");
            if(200 == code1){
                tokenWarpper.setRytoken(jsonObject.getString("token"));
            }
        }
        if(ToolUtil.isEmpty(driver.getReferralCode())){
            String s = wechatMiniProgramORCode(driver.getId());
            driver.setReferralCode(s);
            this.updateById(driver);
        }
        if(ToolUtil.isEmpty(driver.getOrderQRCode())){
            String s = wechatMiniOrderQRCode(driver.getId());
            driver.setOrderQRCode(s);
            this.updateById(driver);
        }
//        String RYToken = rongYunUtil.getToken(driver.getId().toString(), driver.getName(), driver.getAvatar());
//        if(ToolUtil.isNotEmpty(RYToken)){
//            JSONObject jsonObject = JSON.parseObject(RYToken);
//            Integer code1 = jsonObject.getInteger("code");
//            if(200 == code1){
//                tokenWarpper.setRytoken(jsonObject.getString("token"));
//            }
//        }
        // todo 正式放开
//        if(ToolUtil.isEmpty(driver.getReferralCode())){
//            String s = wechatMiniProgramORCode(driver.getId());
//            driver.setReferralCode(s);
//            this.updateById(driver);
//        }
//        if(ToolUtil.isEmpty(driver.getOrderQRCode())){
//            String s = wechatMiniOrderQRCode(driver.getId());
//            driver.setOrderQRCode(s);
//            this.updateById(driver);
//        }
        return ResultUtil.success(tokenWarpper);
    }
    public static void main(String[] args) {
        String s = ShiroKit.md5(MD5AndKL.MD5("123456"), "i#sm4");
        System.out.println(s);
    }
    /**
     * 司机密码登录
@@ -425,13 +459,14 @@
            redisUtil.setStrValue(key, driver.getId().toString(), 94608000);//7天
            redisUtil.setStrValue("DRIVER_" + phone, key, 94608000);//7天
            // todo 正式放开
            //下线
            for (int i = 0; i < 5; i++) {
                Integer code = pushUtil.pushOffline(driver.getId(), 2);
                if(200 == code){
                    break;
                }
            }
//            for (int i = 0; i < 5; i++) {
//                Integer code = pushUtil.pushOffline(driver.getId(), 2);
//                if(200 == code){
//                    break;
//                }
//            }
            return token;
        }
        return "";
@@ -506,7 +541,7 @@
        if(null == driverWork){
            return ResultUtil.error("请先上班");
        }
        String value = redisUtil.getValue("DRIVER" + uid);
        String value = redisUtil.getValue("daijia:DRIVER" + uid);
        List<String> list = new ArrayList<>();
        if(ToolUtil.isNotEmpty(value)){
            String[] split = value.split(",");
@@ -534,7 +569,7 @@
                        i = 3;
                    }
                }
                String value1 = redisUtil.getValue("DRIVER" + s.getDriverId());
                String value1 = redisUtil.getValue("daijia:DRIVER" + s.getDriverId());
                if(s.getDriverId().compareTo(uid) != 0 && ToolUtil.isNotEmpty(value1)){
                    list.add(s.getLocation().getX() + "," + s.getLocation().getY()+","+i+","+driver.getName());
                }
@@ -576,7 +611,8 @@
        Double lat = driverPositionWarpper.getLat();
        Integer driverId = driverPositionWarpper.getDriverId();
        Integer orderId = driverPositionWarpper.getOrderId();
        redisUtil.setStrValue("DRIVER" + driverId, lon + "," + lat, 30);
        log.info("存储地理空间:{}", driverPositionWarpper);
        redisUtil.setStrValue("daijia:DRIVER" + driverId, lon + "," + lat, 30);
        Query query = Query.query(Criteria.where("driverId").is(driverId));
        Location old = this.mongoTemplate.findOne(query, Location.class);
        if (Objects.isNull(old)) {
@@ -744,6 +780,8 @@
                .eq("state", 2).last(" and failureTime > now() order by failureTime limit 0, 1"));
        if(null != youTuiDriver){
            driverInfo.setYouTuiEnd(youTuiDriver.getType() == 1 ? youTuiDriver.getFailureTime().getTime() : youTuiDriver.getEndTime().getTime());
            driverInfo.setType(youTuiDriver.getType());
            driverInfo.setSurplusQuantity(youTuiDriver.getSurplusQuantity());
        }
        List<Integer> state = Arrays.asList(107, 108, 109);
        int count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", uid).eq("status", 1).in("state", state).last(" and DATE_FORMAT(createTime, '%Y-%m-%d') = DATE_FORMAT(now(), '%Y-%m-%d')"));