无关风月
2025-02-25 cc175f25cbd953fc2c3623495c1f4b8e0efec4ee
DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -2,6 +2,7 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.internal.util.codec.Base64;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.common.constant.JwtConstants;
@@ -27,11 +28,20 @@
import org.apache.shiro.util.ByteSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.math.BigDecimal;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -125,6 +135,8 @@
    @Autowired
    private IOrderLogisticsService orderLogisticsService;
    @Autowired
    private ICompanyService companyService;
    @Value("${pushMinistryOfTransport}")
    private boolean pushMinistryOfTransport;
@@ -605,8 +617,9 @@
                    return ResultUtil.error("该车辆正在服务中,请更换其他车辆");
                }
            }
            List<TUseMoney> tUseMoney = useMoneyMapper.selectList(null);
            if (tUseMoney.get(0).getMoney()>driver.getBalance()){
//            List<TUseMoney> tUseMoney = useMoneyMapper.selectList(null);
            Company company = companyService.selectById(driver.getCompanyId());
            if (company.getDriverRestriction()>driver.getBalance()){
                pushUtil.expireWork(uid,2);
                return new ResultUtil(-1,"您的余额不足,请及时充值!");
            }
@@ -1546,7 +1559,83 @@
        redisUtil.remove("DEVICE_" + id);//清除车载端登录的标识
        return ResultUtil.success();
    }
    @Autowired
    private WeChatUtil weChatUtil;
    @Autowired
    private RestTemplate restTemplate;
    @Override
    public Driver generateCode(Driver userInfo) {
        generateQrCode(userInfo);
        return userInfo;
    }
    public MultipartFile convertInputStreamToMultipartFile(InputStream inputStream, String fileName, String contentType) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, bytesRead);
        }
        byte[] data = byteArrayOutputStream.toByteArray();
        return new CustomMultipartFile(data, fileName, contentType);
    }
    private void generateQrCode(Driver userInfo) {
        if (userInfo.getCode()!=null){
            return;
        }
        String accessToken = weChatUtil.getAccessToken();
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
            Map<String, Object> param = new HashMap<>();
//            param.put("page", "pageA/houseDetail");
            param.put("check_path", false);
            // 用户id 用于分享
            param.put("scene", "uid="+userInfo.getId()+"userType=1");
            param.put("env_version", "trial");
            param.put("width", 200); //二维码尺寸
            param.put("is_hyaline", true); // 是否需要透明底色, is_hyaline 为true时,生成透明底色的小程序码 参数仅对小程序码生效
            param.put("auto_color", true); // 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调 参数仅对小程序码生效
            Map<String, Object> line_color = new HashMap<>();
            line_color.put("r", 0);
            line_color.put("g", 0);
            line_color.put("b", 0);
            param.put("line_color", line_color);
            System.err.println("调用生成微信URL接口传参:" + param);
            MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
            HttpEntity requestEntity = new HttpEntity(param, headers);
            ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
            System.err.println("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody());
            byte[] result = entity.getBody();
            System.err.println(Base64.encodeBase64String(result));
            inputStream = new ByteArrayInputStream(result);
            String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpeg";
            MultipartFile multipartFile = convertInputStreamToMultipartFile(inputStream, finalFileName, "image/jpeg");
            String pictureName = OssUploadUtil.ossUploadCode(multipartFile);
            System.err.println(pictureName);
            userInfo.setCode(pictureName);
            this.updateById(userInfo);
        } catch (Exception e) {
            System.err.println("调用小程序生成微信永久小程序码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();
                }
            }
        }
    }
    /**
     * 获取编号