yanghb
2023-04-24 8bb76b7c08556c9344bbaa6079265fbfe5433667
DriverTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -15,6 +15,7 @@
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.LiuZhouBank.PayUtil;
import com.stylefeng.guns.modular.system.warpper.ActivityWarpper;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.system.warpper.LoginWarpper;
@@ -131,6 +132,10 @@
    private String salt = "SA;d5#";
    private Map<String, Long> loginTime = new HashMap<>();//登录时间
    private Map<String, Integer> loginFailures = new HashMap<>();//登录失败次数
@@ -141,7 +146,9 @@
     * @throws Exception
     */
    @Override
    public ResultUtil queryCaptcha(String phone, Integer type) throws Exception {
    public ResultUtil queryCaptcha(String checkCaptcha, Integer type) throws Exception {
        checkCaptcha = AESUtil.decrypt(checkCaptcha);
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for(int i = 0; i < 4; i++){
@@ -151,23 +158,23 @@
        String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!";
        //发送验证码短信
        redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期
        redisUtil.setStrValue(checkCaptcha, authCode, 5 * 60);//设置五分钟过期
        String templateCode = "";
        switch (type){
            case 1:
                templateCode = "SMS_154775435";//身份验证
                templateCode = "SMS_276396626";//身份验证
                break;
            case 2:
                templateCode = "SMS_154775434";//登录确认
                templateCode = "SMS_276396626";//登录确认
                break;
            case 3:
                templateCode = "SMS_154775432";//用户注册
                templateCode = "SMS_276396626";//用户注册
                break;
            case 4:
                templateCode = "SMS_154775431";//修改密码
                templateCode = "SMS_276411658";//修改密码
                break;
        }
        String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}");
        String sData = aLiSendSms.sendSms(checkCaptcha, templateCode, "{\"code\":\"" + authCode + "\"}");
        JSONObject jsonObject = JSON.parseObject(sData);
        String message = jsonObject.getString("Message");
        if(!"OK".equals(message)){
@@ -206,6 +213,7 @@
     */
    @Override
    public ResultUtil registeredDriver(String phone, String code, String password, Integer uid, Integer type, Integer userType) throws Exception {
        phone = AESUtil.decrypt(phone);
        ResultUtil<LoginWarpper> result = this.registeredDriver(phone, code, password);
        if(result.getCode() == 200 && null != uid){
            if(type == 2){
@@ -218,9 +226,9 @@
                        incomeService.saveData(2, driver.getId(), 1, Integer.valueOf(String.valueOf(map.get("id"))), null, Double.valueOf(String.valueOf(map.get("money"))));
                    }
                }
                driver.setActivityMoney(bigDecimal.add(new BigDecimal(null == driver.getActivityMoney() ? 0 : driver.getActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setLaveActivityMoney(bigDecimal.add(new BigDecimal(null == driver.getLaveActivityMoney() ? 0 : driver.getLaveActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setBalance(bigDecimal.add(new BigDecimal(null == driver.getBalance() ? 0 : driver.getBalance())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setActivityMoney(bigDecimal.add(new BigDecimal(driver.getActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setLaveActivityMoney(bigDecimal.add(new BigDecimal(driver.getLaveActivityMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driver.setBalance(bigDecimal.add(new BigDecimal(driver.getBalance())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
                driverMapper.updateById(driver);
                Map<String, Date> date = dateUtil.getStartAndEndDate(new Date());
@@ -278,6 +286,7 @@
            return ResultUtil.error("验证码无效");
        }
        phone = AESUtil.encrypt(phone);
        Driver driver1 = driverMapper.queryByPhone_(phone, 4);//获取审核不通过的数据
        if(null != driver1){
            driver1.setAuthState(1);
@@ -411,11 +420,13 @@
     */
    @Override
    public ResultUtil resetPassword(String phone, String code, String password) throws Exception {
        phone = AESUtil.decrypt(phone);
        boolean b = this.checkCaptcha(phone, code);
        if(!b){
            return ResultUtil.error("验证码无效");
        }
        Driver driver = driverMapper.queryByPhone(phone);
        String encrypt = AESUtil.encrypt(phone);
        Driver driver = driverMapper.queryByPhone(encrypt);
        if(null == driver){
            return ResultUtil.error("电话号码未注册");
        }
@@ -456,17 +467,35 @@
     */
    @Override
    public ResultUtil<LoginWarpper> driverLogin(String phone, String password) throws Exception {
        Driver driver = driverMapper.queryByPhone(phone);
        System.err.println("前端原始加密数据---》" + phone);
        phone = AESUtil.decrypt(phone);
        System.err.println("后端解密数据---》" + phone);
        Integer frequency = loginFailures.get(phone);
        Long time = loginTime.get(phone);
        if(null != time && System.currentTimeMillis() < (time + 1800000) && null != frequency && frequency >= 5){
            return ResultUtil.error("暂时无法登录,请30分钟后重试!");
        }
        if(null != time && System.currentTimeMillis() >= (time + 1800000)){
            frequency = 0;
            loginFailures.put(phone, frequency);
        }
        String encrypt = AESUtil.encrypt(phone);
        Driver driver = driverMapper.queryByPhone(encrypt);
        if(null == driver){
            return ResultUtil.error("账号未注册");
        }
        if(ToolUtil.isNotEmpty(driver.getIdCard()) && driver.getAuthState() == 1){
        if(driver.getAuthState() == 1){
            return ResultUtil.error("账号正在审核中,请耐心等待");
        }
        if(driver.getAuthState() == 3){
            return ResultUtil.error("账号已被冻结,请联系管理员");
        }
        if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){
            frequency = (null == frequency ? 0 : frequency) + 1;
            loginFailures.put(phone, frequency);
            if(frequency == 1){
                loginTime.put(phone, System.currentTimeMillis());
            }
            return ResultUtil.error("密码错误");
        }
@@ -483,7 +512,6 @@
        loginWarpper.setId(driver.getId());
        loginWarpper.setToken(token);
        loginWarpper.setAppid(UUIDUtil.getRandomCode());
        loginWarpper.setState(ToolUtil.isEmpty(driver.getIdCard()) ? 1 : 0);
        //创建高德猎鹰的终端数据
        String tid = gdFalconUtil.createTerminal(phone);
@@ -501,7 +529,7 @@
     */
    @Override
    public Map<String, Object> queryHomeData(Integer uid) throws Exception {
        Map<String, Object> map = this.baseMapper.queryHomeData(uid);
        Map<String, Object> map = driverMapper.queryHomeData(uid);
        int size = this.queryMyActivity(uid, new Date()).size();
        map.put("activity", size);
        return map;
@@ -563,13 +591,6 @@
                }
            }).start();
        }else{
            List<Driver> drivers = this.selectList(new EntityWrapper<Driver>().eq("carId", driver.getCarId()).eq("authState", 2).ne("flag", 3).ne("id", uid));
            for (Driver d : drivers){
                driverWork = driverWorkMapper.queryNewWork(d.getId(), null, 1);
                if(null != driverWork){
                    return ResultUtil.error("车辆正在使用中");
                }
            }
            driverWork = new DriverWork();
            driverWork.setState(1);
            driverWork.setDriverId(uid);
@@ -677,7 +698,6 @@
    @Override
    public Map<String, Object> queryHomeNum(Integer uid) throws Exception {
        Map<String, Object> map = new HashMap<>();
        //出租车
        List<Map<String, Object>> list = orderTaxiService.queryOrderList(1, uid);
        map.put("service", list.size());//服务中
        list = orderTaxiService.queryOrderList(2, uid);
@@ -701,26 +721,23 @@
        List<DriverService> list = driverServiceMapper.queryMyBusiness(uid);
        List<BaseWarpper> maps = new ArrayList<>();
        for (DriverService d : list){
            if(d.getType() == 6){
                continue;
            }
            BaseWarpper baseWarpper = new BaseWarpper();
            baseWarpper.setId(d.getType());
            switch (d.getType()){
                case 1:
                    baseWarpper.setName("快车/专车");
                    baseWarpper.setName("专车");
                    break;
                case 2:
                    baseWarpper.setName("出租车");
                    break;
                case 3:
                    baseWarpper.setName("机场专线");
                    baseWarpper.setName("跨城出行");
                    break;
                case 7:
                    baseWarpper.setName("景区直通车");
                case 4:
                    baseWarpper.setName("同城小件物流");
                    break;
                case 8:
                    baseWarpper.setName("公务出行");
                case 5:
                    baseWarpper.setName("跨城小件物流");
                    break;
            }
            maps.add(baseWarpper);
@@ -755,13 +772,15 @@
        if(null != driver){
            return ResultUtil.error("电话号码已被注册");
        }
        phone = AESUtil.decrypt(phone);
        boolean b = this.checkCaptcha(phone, code);
        if(!b){
            return ResultUtil.error("验证码无效");
        }
        String encrypt = AESUtil.encrypt(phone);
        Driver driver1 = this.selectById(uid);
        driver1.setAccount(phone);
        driver1.setPhone(phone);
        driver1.setAccount(encrypt);
        driver1.setPhone(encrypt);
        this.updateById(driver1);
        smsrecordService.saveData(7, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!");
@@ -803,15 +822,15 @@
     * @throws Exception
     */
    @Override
    public synchronized ResultUtil replaceCar(Integer carId, Integer uid) throws Exception {
    public ResultUtil replaceCar(Integer carId, Integer uid) throws Exception {
        Driver driver = this.selectById(uid);
        if(driver.getState() == 3){
            return ResultUtil.error("还在服务中,不能更换");
        }
//        boolean idle = carService.idle(carId);
//        if(!idle){
//            return ResultUtil.error("车辆已被绑定了");
//        }
        boolean idle = carService.idle(carId);
        if(!idle){
            return ResultUtil.error("车辆已被绑定了");
        }
        driver.setCarId(carId);
        this.updateById(driver);
        return ResultUtil.success();
@@ -953,7 +972,7 @@
                    }
                    switch (driverActivityOnline.getType()){
                        case 1:
                            sb.append("快车");
                            sb.append("专车");
                            break;
                        case 2:
                            sb.append("出租车");
@@ -1502,6 +1521,16 @@
    }
    @Override
    public ResultUtil getMoneyReceivingQRCode(Integer driverId) throws Exception {
        Driver driver = this.selectById(driverId);
        if(ToolUtil.isEmpty(driver.getMchtNo())){
            return ResultUtil.error("请先开通收款账户");
        }
        String path = "https://okyueche.com:8443/h5/index.html?driverid=" + driverId;
        return ResultUtil.success(path);
    }
    /**
     * 获取编号
     * @return