| | |
| | | package com.stylefeng.guns.modular.system.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.core.common.constant.JwtConstants; |
| | | import com.stylefeng.guns.core.shiro.ShiroKit; |
| | | import com.stylefeng.guns.core.shiro.ShiroUser; |
| | | import com.stylefeng.guns.core.util.JwtTokenUtil; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.crossCity.dao.OrderCrossCityMapper; |
| | | import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; |
| | | import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; |
| | | import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper; |
| | | import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; |
| | | import com.stylefeng.guns.modular.system.dao.*; |
| | | 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.*; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.SMSUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.UserUtil; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.QYTUserInfo; |
| | | import com.stylefeng.guns.modular.system.util.qianyuntong.model.SendSmsRequest; |
| | | import com.stylefeng.guns.modular.system.warpper.ActivityWarpper; |
| | | import com.stylefeng.guns.modular.system.warpper.BaseWarpper; |
| | | import com.stylefeng.guns.modular.system.warpper.LoginWarpper; |
| | | import com.stylefeng.guns.modular.system.warpper.RegisteredWarpper; |
| | | import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper; |
| | | import com.stylefeng.guns.modular.taxi.model.OrderTaxi; |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import io.rong.models.response.TokenResult; |
| | | import org.apache.shiro.authc.SimpleAuthenticationInfo; |
| | | import org.apache.shiro.authc.UsernamePasswordToken; |
| | | import org.apache.shiro.authc.credential.HashedCredentialsMatcher; |
| | |
| | | import org.apache.shiro.util.ByteSource; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.math.BigDecimal; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | |
| | | @Service |
| | |
| | | @Resource |
| | | private DriverMapper driverMapper; |
| | | |
| | | @Resource |
| | | private CompanyCityMapper companyCityMapper; |
| | | |
| | | @Resource |
| | | private UserActivityInviteMapper userActivityInviteMapper; |
| | |
| | | |
| | | @Resource |
| | | private CompanyMapper companyMapper; |
| | | |
| | | |
| | | @Resource |
| | | private DriverActivityRegisteredMapper driverActivityRegisteredMapper; |
| | | |
| | | |
| | | @Resource |
| | | private DriverActivityOrderMapper driverActivityOrderMapper; |
| | | |
| | | |
| | | @Resource |
| | | private DriverActivityOnlineMapper driverActivityOnlineMapper; |
| | | |
| | | |
| | | @Resource |
| | | private DriverActivityHistoryMapper driverActivityHistoryMapper; |
| | | |
| | | |
| | | @Resource |
| | | private UserCouponRecordMapper userCouponRecordMapper; |
| | | |
| | | |
| | | @Resource |
| | | private DriverOrdersMapper driverOrdersMapper; |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | |
| | | @Autowired |
| | | private ALiSendSms aLiSendSms; |
| | | |
| | | |
| | | @Resource |
| | | private RedisTemplate<String, Object> redisTemplate; |
| | | |
| | | @Autowired |
| | | private ICompanyCityService companyCityService; |
| | | |
| | | |
| | | @Autowired |
| | | private GDFalconUtil gdFalconUtil; |
| | | |
| | | |
| | | @Autowired |
| | | private IOrderService orderService; |
| | | |
| | | |
| | | @Autowired |
| | | private ISmsrecordService smsrecordService; |
| | | |
| | | |
| | | @Autowired |
| | | private ICarService carService; |
| | | |
| | | |
| | | @Autowired |
| | | private IReassignService reassignService; |
| | | |
| | |
| | | |
| | | |
| | | |
| | | @Autowired |
| | | private OrderPrivateCarMapper orderPrivateCarMapper; |
| | | |
| | | @Autowired |
| | | private OrderCrossCityMapper orderCrossCityMapper; |
| | | |
| | | @Autowired |
| | | private OrderTaxiMapper orderTaxiMapper; |
| | | |
| | | @Autowired |
| | | private GeodesyUtil geodesyUtil; |
| | | |
| | | |
| | | @Override |
| | | public List<Driver> queryIdleDriver(Integer type, Double lon, Double lat, Double distance, Integer companyId) throws Exception { |
| | | List<Driver> drivers = driverMapper.queryIdleDriver(type, companyId); |
| | | List<Driver> list = new ArrayList<>(); |
| | | for(Driver driver : drivers){ |
| | | String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(driver.getId())); |
| | | if(null != value){ |
| | | Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); |
| | | double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); |
| | | if(d < (distance * 1000)){ |
| | | list.add(driver); |
| | | } |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public List<Driver> queryIdleDriver(Integer type, Integer serverCarModelId, Double lon, Double lat, Double distance, Integer companyId) throws Exception { |
| | | List<Driver> drivers = driverMapper.queryIdleDriver_(type, serverCarModelId, companyId); |
| | | List<Driver> list = new ArrayList<>(); |
| | | for(Driver driver : drivers){ |
| | | String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(driver.getId())); |
| | | if(null != value){ |
| | | Map<String, Double> distance1 = geodesyUtil.getDistance(lon + "," + lat, value); |
| | | double d = Double.valueOf(distance1.get("WGS84")).doubleValue(); |
| | | if(d < (distance * 1000)){ |
| | | list.add(driver); |
| | | } |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * 获取短信验证码 |
| | |
| | | public ResultUtil queryCaptcha(String phone, Integer type) throws Exception { |
| | | Random random = new Random(); |
| | | StringBuffer sb = new StringBuffer(); |
| | | for(int i = 0; i < 4; i++){ |
| | | for (int i = 0; i < 4; i++) { |
| | | sb.append((int) (random.nextDouble() * 10)); |
| | | } |
| | | String authCode = sb.toString(); |
| | | String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"; |
| | | |
| | | //发送验证码短信 |
| | | redisUtil.setStrValue(phone, authCode, 5 * 60);//设置五分钟过期 |
| | | String templateCode = ""; |
| | | switch (type){ |
| | | case 1: |
| | | templateCode = "SMS_154775435";//身份验证 |
| | | break; |
| | | case 2: |
| | | templateCode = "SMS_154775434";//登录确认 |
| | | break; |
| | | case 3: |
| | | templateCode = "SMS_154775432";//用户注册 |
| | | break; |
| | | case 4: |
| | | templateCode = "SMS_154775431";//修改密码 |
| | | break; |
| | | } |
| | | String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}"); |
| | | JSONObject jsonObject = JSON.parseObject(sData); |
| | | String message = jsonObject.getString("Message"); |
| | | if(!"OK".equals(message)){ |
| | | return ResultUtil.error(""); |
| | | } |
| | | System.out.println(sms); |
| | | // //发送验证码短信 |
| | | // redisTemplate.opsForValue().set(phone, authCode, 5, TimeUnit.MINUTES);//设置五分钟过期 |
| | | // String templateCode = ""; |
| | | // switch (type) { |
| | | // case 1: |
| | | // templateCode = "SMS_154775435";//身份验证 |
| | | // break; |
| | | // case 2: |
| | | // templateCode = "SMS_154775434";//登录确认 |
| | | // break; |
| | | // case 3: |
| | | // templateCode = "SMS_154775432";//用户注册 |
| | | // break; |
| | | // case 4: |
| | | // templateCode = "SMS_154775431";//修改密码 |
| | | // break; |
| | | // } |
| | | // String sData = aLiSendSms.sendSms(phone, "SMS_229715276", "{\"code\":\"" + authCode + "\"}"); |
| | | // JSONObject jsonObject = JSON.parseObject(sData); |
| | | // String message = jsonObject.getString("Message"); |
| | | // if(!"OK".equals(message)){ |
| | | // return ResultUtil.error(""); |
| | | // } |
| | | // System.out.println(sms); |
| | | SendSmsRequest request = new SendSmsRequest(); |
| | | request.setDestAddress(phone); |
| | | request.setTemplateId("TPL202410290001"); |
| | | Map<String, String> templateParams = new HashMap<>(); |
| | | templateParams.put("code", authCode); |
| | | request.setTemplateParams(templateParams); |
| | | request.setCode("code"); |
| | | request.setSpId("T8d5hdfg"); |
| | | SMSUtil.sendSms(request); |
| | | redisTemplate.opsForValue().set(phone, authCode, 5, TimeUnit.MINUTES);//设置五分钟过期 |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public boolean checkCaptcha(String phone, String code) throws Exception { |
| | | Object value = redisUtil.getValue(phone); |
| | | Object value = redisTemplate.opsForValue().get(phone); |
| | | if("1234".equals(code)){ |
| | | return true; |
| | | } |
| | |
| | | driver.setSex(registeredWarpper.getSex()); |
| | | driver.setIdCard(registeredWarpper.getIdCard()); |
| | | |
| | | String code = registeredWarpper.getPlaceOfEmployment(); |
| | | driver.setArea(registeredWarpper.getArea()); |
| | | driver.setAreaCode(registeredWarpper.getAreaCode()); |
| | | driver.setCity(registeredWarpper.getCity()); |
| | | driver.setCityCode(registeredWarpper.getCityCode()); |
| | | driver.setProvince(registeredWarpper.getProvince()); |
| | | driver.setProvinceCode(registeredWarpper.getProvinceCode()); |
| | | |
| | | String code = registeredWarpper.getAreaCode(); |
| | | Company query = companyCityService.query(code); |
| | | if(null == query){ |
| | | return ResultUtil.error("选择从业地暂未开通业务"); |
| | |
| | | @Override |
| | | public ResultUtil<LoginWarpper> driverLogin(String phone, String password) throws Exception { |
| | | Driver driver = driverMapper.queryByPhone(phone); |
| | | if(null == driver){ |
| | | if (null == driver) { |
| | | return ResultUtil.error("账号未注册"); |
| | | } |
| | | if(ToolUtil.isNotEmpty(driver.getIdCard()) && driver.getAuthState() == 1){ |
| | | Company company = companyMapper.selectById(driver.getCompanyId()); |
| | | //查询中台员工数据 |
| | | // List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(driver.getPhone(), company.getEnterCode()); |
| | | // if (null == userInfoByPhone || userInfoByPhone.size() == 0) { |
| | | // return ResultUtil.error("账号未注册"); |
| | | // } |
| | | |
| | | if (ToolUtil.isNotEmpty(driver.getIdCard()) && driver.getAuthState() == 1) { |
| | | return ResultUtil.error("账号正在审核中,请耐心等待"); |
| | | } |
| | | if(driver.getAuthState() == 3){ |
| | | if (driver.getAuthState() == 3) { |
| | | return ResultUtil.error("账号已被冻结,请联系管理员"); |
| | | } |
| | | if(!driver.getPassword().equals(ShiroKit.md5(password, salt))){ |
| | | if (!driver.getPassword().equals(ShiroKit.md5(password, salt))) { |
| | | return ResultUtil.error("密码错误"); |
| | | } |
| | | |
| | | String value = redisUtil.getValue("DEVICE_" + driver.getId()); |
| | | if(ToolUtil.isNotEmpty(value)){ |
| | | |
| | | String value = (String) redisTemplate.opsForValue().get("DEVICE_" + driver.getId()); |
| | | if (ToolUtil.isNotEmpty(value)) { |
| | | return ResultUtil.error("当前账户正在车载端登录"); |
| | | } |
| | | |
| | | |
| | | //调用单点登录逻辑 |
| | | this.singlePointLogin(driver.getId()); |
| | | |
| | | |
| | | String token = this.getToken(driver, password); |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | | loginWarpper.setId(driver.getId()); |
| | | loginWarpper.setToken(token); |
| | | loginWarpper.setAppid(UUIDUtil.getRandomCode()); |
| | | loginWarpper.setState(ToolUtil.isEmpty(driver.getIdCard()) ? 1 : 0); |
| | | TokenResult token1 = RongCloudUtil.getToken(driver.getId().toString(), driver.getName(), driver.getHeadImgUrl()); |
| | | loginWarpper.setRongYunToken(token1.getToken()); |
| | | |
| | | //创建高德猎鹰的终端数据 |
| | | String tid = gdFalconUtil.createTerminal(phone); |
| | |
| | | }else{ |
| | | key = requestHeader; |
| | | } |
| | | String value = redisUtil.getValue(key); |
| | | String value = (String) redisTemplate.opsForValue().get(key); |
| | | return null != value ? Integer.valueOf(value) : null; |
| | | }else{ |
| | | return null; |
| | |
| | | @Override |
| | | public ResultUtil updatePhone(String phone, String code, Integer uid) throws Exception { |
| | | Driver driver = driverMapper.queryByPhone(phone); |
| | | if(null != driver){ |
| | | if (null != driver) { |
| | | return ResultUtil.error("电话号码已被注册"); |
| | | } |
| | | boolean b = this.checkCaptcha(phone, code); |
| | | if(!b){ |
| | | if (!b) { |
| | | return ResultUtil.error("验证码无效"); |
| | | } |
| | | Driver driver1 = this.selectById(uid); |
| | | Company company = companyMapper.selectById(driver1.getCompanyId()); |
| | | List<QYTUserInfo> userInfoByPhone = UserUtil.getUserInfoByPhone(driver1.getPhone(), company.getEnterCode()); |
| | | if (null == userInfoByPhone || userInfoByPhone.size() == 0) { |
| | | return ResultUtil.error("账号未注册"); |
| | | } |
| | | |
| | | driver1.setAccount(phone); |
| | | driver1.setPhone(phone); |
| | | this.updateById(driver1); |
| | | |
| | | |
| | | smsrecordService.saveData(7, phone, code, "短信验证码【" + code + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"); |
| | | return ResultUtil.success(); |
| | | } |
| | |
| | | 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(); |
| | |
| | | driverOrdersMapper.insert(query); |
| | | } |
| | | DriverWork driverWork = driverWorkMapper.queryNewWork(driver.getId(), 2, 1); |
| | | if(null == driverWork){ |
| | | if (null == driverWork) { |
| | | driverWork = new DriverWork(); |
| | | driverWork.setStartTime(new Date()); |
| | | driverWork.setDriverId(driver.getId()); |
| | |
| | | driverWork.setType("2"); |
| | | driverWorkMapper.insert(driverWork); |
| | | } |
| | | if(driver.getState() == 1){ |
| | | if (driver.getState() == 1) { |
| | | driver.setState(2); |
| | | driverMapper.updateById(driver); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //调用单点登录清除缓存数据 |
| | | this.singlePointLogin(driver.getId()); |
| | | |
| | | |
| | | //封装请求账号密码为shiro可验证的token |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), jobNum.toCharArray()); |
| | | String credentials = ShiroKit.md5(driver.getJobNumber(), salt); |
| | | ByteSource credentialsSalt = new Md5Hash(salt); |
| | | SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( |
| | | new ShiroUser(), credentials, credentialsSalt, ""); |
| | | |
| | | |
| | | //校验用户账号密码 |
| | | HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); |
| | | md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | | loginWarpper.setId(driver.getId()); |
| | | loginWarpper.setToken(s); |
| | | loginWarpper.setAppid(UUIDUtil.getRandomCode()); |
| | | |
| | | |
| | | //创建高德猎鹰的终端数据 |
| | | String tid = gdFalconUtil.createTerminal(driver.getPhone()); |
| | | loginWarpper.setServerId(gdFalconUtil.getServerId()); |
| | |
| | | driverOrdersMapper.insert(query); |
| | | } |
| | | DriverWork driverWork = driverWorkMapper.queryNewWork(driver.getId(), 2, 1); |
| | | if(null == driverWork){ |
| | | if (null == driverWork) { |
| | | driverWork = new DriverWork(); |
| | | driverWork.setStartTime(new Date()); |
| | | driverWork.setDriverId(driver.getId()); |
| | |
| | | driverWork.setType("2"); |
| | | driverWorkMapper.insert(driverWork); |
| | | } |
| | | if(driver.getState() == 1){ |
| | | if (driver.getState() == 1) { |
| | | driver.setState(2); |
| | | driverMapper.updateById(driver); |
| | | } |
| | | |
| | | |
| | | this.singlePointLogin(driver.getId());//清除缓存实现单点登录 |
| | | |
| | | |
| | | //封装请求账号密码为shiro可验证的token |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), identification.toCharArray()); |
| | | String credentials = ShiroKit.md5(driver.getIdCard(), salt); |
| | | ByteSource credentialsSalt = new Md5Hash(salt); |
| | | SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( |
| | | new ShiroUser(), credentials, credentialsSalt, ""); |
| | | |
| | | |
| | | //校验用户账号密码 |
| | | HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); |
| | | md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | | loginWarpper.setId(driver.getId()); |
| | | loginWarpper.setToken(s); |
| | | loginWarpper.setAppid(UUIDUtil.getRandomCode()); |
| | | |
| | | |
| | | //创建高德猎鹰的终端数据 |
| | | String tid = gdFalconUtil.createTerminal(driver.getPhone()); |
| | | loginWarpper.setServerId(gdFalconUtil.getServerId()); |
| | |
| | | driverOrdersMapper.insert(query); |
| | | } |
| | | DriverWork driverWork = driverWorkMapper.queryNewWork(driver.getId(), 2, 1); |
| | | if(null == driverWork){ |
| | | if (null == driverWork) { |
| | | driverWork = new DriverWork(); |
| | | driverWork.setStartTime(new Date()); |
| | | driverWork.setDriverId(driver.getId()); |
| | |
| | | driverWork.setType("2"); |
| | | driverWorkMapper.insert(driverWork); |
| | | } |
| | | if(driver.getState() == 1){ |
| | | if (driver.getState() == 1) { |
| | | driver.setState(2); |
| | | driverMapper.updateById(driver); |
| | | } |
| | | |
| | | |
| | | this.singlePointLogin(driver.getId());//清除缓存实现单点登录 |
| | | |
| | | |
| | | //封装请求账号密码为shiro可验证的token |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), taxiAptitudeCard.toCharArray()); |
| | | String credentials = ShiroKit.md5(driver.getTaxiAptitudeCard(), salt); |
| | | ByteSource credentialsSalt = new Md5Hash(salt); |
| | | SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( |
| | | new ShiroUser(), credentials, credentialsSalt, ""); |
| | | |
| | | |
| | | //校验用户账号密码 |
| | | HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); |
| | | md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set(driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | |
| | | |
| | | LoginWarpper loginWarpper = new LoginWarpper(); |
| | | loginWarpper.setId(driver.getId()); |
| | | loginWarpper.setToken(s); |
| | | loginWarpper.setAppid(UUIDUtil.getRandomCode()); |
| | | |
| | | |
| | | //创建高德猎鹰的终端数据 |
| | | String tid = gdFalconUtil.createTerminal(driver.getPhone()); |
| | | loginWarpper.setServerId(gdFalconUtil.getServerId()); |
| | |
| | | public void taskOffWork() throws Exception { |
| | | List<Driver> drivers = driverMapper.selectList(new EntityWrapper<Driver>().eq("authState", 2).ne("state", 3)); |
| | | Long now = Long.valueOf(System.currentTimeMillis()); |
| | | for(Driver driver : drivers){ |
| | | String value = redisUtil.getValue("DEVICE_" + driver.getId()); |
| | | if(ToolUtil.isNotEmpty(value) && now.compareTo(Long.valueOf(value) + (60 * 60 * 1000)) > 0){ |
| | | for (Driver driver : drivers) { |
| | | String value = (String) redisTemplate.opsForValue().get("DEVICE_" + driver.getId()); |
| | | if (ToolUtil.isNotEmpty(value) && now.compareTo(Long.valueOf(value) + (60 * 60 * 1000)) > 0) { |
| | | driver.setState(1); |
| | | driverMapper.updateById(driver); |
| | | redisUtil.remove("DEVICE_" + driver.getId()); |
| | | redisTemplate.delete("DEVICE_" + driver.getId()); |
| | | } |
| | | } |
| | | } |
| | |
| | | public ResultUtil loginOut(Integer id) throws Exception { |
| | | //开始清除redis中无效的数据 |
| | | Driver driver = driverMapper.selectById(id); |
| | | String key = redisUtil.getValue(driver.getPhone()); |
| | | redisUtil.remove(key);//删除个人信息数据 |
| | | redisUtil.remove("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisUtil.remove("DRIVER_" + id);//清除存储的token |
| | | redisUtil.remove("DEVICE_" + id);//清除车载端登录的标识 |
| | | String key = (String) redisTemplate.opsForValue().get(driver.getPhone()); |
| | | redisTemplate.delete(key);//删除个人信息数据 |
| | | redisTemplate.delete("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisTemplate.delete("DRIVER_" + id);//清除存储的token |
| | | redisTemplate.delete("DEVICE_" + id);//清除车载端登录的标识 |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | @Override |
| | | public DriverIndexVo queryHomeDataFromDriver(Integer uid) { |
| | | DriverIndexVo driverIndexVo = new DriverIndexVo(); |
| | | // 获取快车订单 |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().ne("state", 10).eq("driverId", uid).like("insertTime", LocalDateTime.now().toString())); |
| | | // 跨城订单 |
| | | List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().ne("state", 10).eq("driverId", uid).like("insertTime", LocalDateTime.now().toString())); |
| | | // 出租车订单 |
| | | List<OrderTaxi> orderTaxis = orderTaxiMapper.selectList(new EntityWrapper<OrderTaxi>().ne("state", 10).eq("driverId", uid).like("insertTime", LocalDateTime.now().toString())); |
| | | driverIndexVo.setTodayOrderNum(orderPrivateCars.size() + orderCrossCities.size() + orderTaxis.size()); |
| | | |
| | | /** |
| | | * 获取编号 |
| | | * @return |
| | | */ |
| | | public String getCode(){ |
| | | int count = driverMapper.getCount(); |
| | | String code = String.valueOf(1000001 + count); |
| | | return "D" + code.substring(1); |
| | | |
| | | double sum = orderPrivateCars.stream().mapToDouble(OrderPrivateCar::getOrderMoney).sum(); |
| | | double sum1 = orderCrossCities.stream().mapToDouble(OrderCrossCity::getOrderMoney).sum(); |
| | | double sum2 = orderTaxis.stream().mapToDouble(OrderTaxi::getOrderMoney).sum(); |
| | | driverIndexVo.setTodayOrderMoney(new BigDecimal(sum +sum1+sum2)); |
| | | |
| | | |
| | | BigDecimal reduce = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("promotionDriverId", uid).like("insertTime", LocalDateTime.now().toString())).stream().map(OrderPrivateCar::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal reduce1 = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().eq("promotionDriverId", uid).like("insertTime", LocalDateTime.now().toString())).stream().map(OrderCrossCity::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal reduce2 = orderTaxiMapper.selectList(new EntityWrapper<OrderTaxi>().eq("promotionDriverId", uid).like("insertTime", LocalDateTime.now().toString())).stream().map(OrderTaxi::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | driverIndexVo.setTodayPromotionMoney(reduce.add(reduce1).add(reduce2)); |
| | | return driverIndexVo; |
| | | }; |
| | | |
| | | |
| | | |
| | | @Override |
| | | public DriverOrderDataVo queryOrderDataFromDriver(String time, Page<DriverOrderDataNextVo> driverOrderDataVoPage, Integer uid) { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM"); |
| | | // 总的订单数 |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().ne("state", 10).eq("driverId", uid)); |
| | | // 跨城订单 |
| | | List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().ne("state", 10).eq("driverId", uid)); |
| | | // 出租车订单 |
| | | List<OrderTaxi> orderTaxis = orderTaxiMapper.selectList(new EntityWrapper<OrderTaxi>().ne("state", 10).eq("driverId", uid)); |
| | | DriverOrderDataVo driverOrderDataVo = new DriverOrderDataVo(); |
| | | driverOrderDataVo.setAllOrderNum(orderPrivateCars.size() + orderCrossCities.size() + orderTaxis.size()); |
| | | long count = orderPrivateCars.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).count(); |
| | | long count1 = orderCrossCities.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).count(); |
| | | long count2 = orderTaxis.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).count(); |
| | | driverOrderDataVo.setTodayOrderNum((int) (count+count1+count2)); |
| | | |
| | | Date date = new Date(); |
| | | String month = simpleDateFormat1.format(date); |
| | | long count3 = orderPrivateCars.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).count(); |
| | | long count4 = orderCrossCities.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).count(); |
| | | long count5 = orderTaxis.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).count(); |
| | | driverOrderDataVo.setMonthOrderNum((int) (count3+count4+count5)); |
| | | |
| | | String sTime=null; |
| | | String eTime=null; |
| | | if(ToolUtil.isNotEmpty( time)){ |
| | | sTime=time.split(" - ")[0]+" 00:00:00"; |
| | | eTime=time.split(" - ")[1]+" 23:59:59"; |
| | | } |
| | | List<DriverOrderDataNextVo> driverOrderDataNextVoPage = driverServiceMapper.queryOrderDataFromDriver(sTime, eTime, driverOrderDataVoPage, uid); |
| | | driverOrderDataVoPage.setRecords(driverOrderDataNextVoPage); |
| | | driverOrderDataVo.setDriverOrderDataNextVos(driverOrderDataVoPage); |
| | | return driverOrderDataVo; |
| | | } |
| | | |
| | | |
| | | |
| | | @Override |
| | | public DriverOrderMoneyDataVo queryOrderMoneyFromDriver(String time, Page<DriverOrderDataNextVo> driverOrderDataVoPage, Integer uid) { |
| | | DriverOrderMoneyDataVo driverOrderDataVo = new DriverOrderMoneyDataVo(); |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM"); |
| | | // 总的订单数 |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().in("state",Arrays.asList(8,9)).eq("driverId", uid)); |
| | | // 跨城订单 |
| | | List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().in("state",Arrays.asList(8,9)).eq("driverId", uid)); |
| | | // 出租车订单 |
| | | List<OrderTaxi> orderTaxis = orderTaxiMapper.selectList(new EntityWrapper<OrderTaxi>().in("state",Arrays.asList(8,9)).eq("driverId", uid)); |
| | | |
| | | |
| | | double sum = orderPrivateCars.stream().mapToDouble(OrderPrivateCar::getOrderMoney).sum(); |
| | | double sum1 = orderCrossCities.stream().mapToDouble(OrderCrossCity::getOrderMoney).sum(); |
| | | double sum2 = orderTaxis.stream().mapToDouble(OrderTaxi::getOrderMoney).sum(); |
| | | driverOrderDataVo.setAllOrderMoney(new BigDecimal(sum +sum1+sum2)); |
| | | |
| | | |
| | | |
| | | double count = orderPrivateCars.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).mapToDouble(OrderPrivateCar::getOrderMoney).sum(); |
| | | double count1 = orderCrossCities.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).mapToDouble(OrderCrossCity::getOrderMoney).sum(); |
| | | double count2 = orderTaxis.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).mapToDouble(OrderTaxi::getOrderMoney).sum(); |
| | | driverOrderDataVo.setTodayOrderMoney(new BigDecimal(count+count1+count2)); |
| | | |
| | | |
| | | Date date = new Date(); |
| | | String month = simpleDateFormat1.format(date); |
| | | double count3 = orderPrivateCars.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).mapToDouble(OrderPrivateCar::getOrderMoney).sum(); |
| | | double count4 = orderCrossCities.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).mapToDouble(OrderCrossCity::getOrderMoney).sum(); |
| | | double count5 = orderTaxis.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).mapToDouble(OrderTaxi::getOrderMoney).sum(); |
| | | driverOrderDataVo.setMonthOrderMoney(new BigDecimal(count3+count4+count5)); |
| | | |
| | | String sTime=null; |
| | | String eTime=null; |
| | | if(ToolUtil.isNotEmpty( time)){ |
| | | sTime=time.split(" - ")[0]+" 00:00:00"; |
| | | eTime=time.split(" - ")[1]+" 23:59:59"; |
| | | } |
| | | List<DriverOrderDataNextVo> driverOrderDataNextVoPage = driverServiceMapper.queryOrderMoneyDataFromDriver(sTime, eTime, driverOrderDataVoPage, uid); |
| | | List<DriverOrderDataNextVo> driverOrderDataNextVoPage1 = driverServiceMapper.queryOrderMoneyDataFromDriverAll(sTime, eTime, uid); |
| | | double sum3 = driverOrderDataNextVoPage1.stream().mapToDouble(DriverOrderDataNextVo::getOrderMoney).sum(); |
| | | driverOrderDataVo.setSearchMoney(new BigDecimal(sum3)); |
| | | driverOrderDataVoPage.setRecords(driverOrderDataNextVoPage); |
| | | driverOrderDataVo.setDriverOrderDataNextVos(driverOrderDataVoPage); |
| | | return driverOrderDataVo; |
| | | } |
| | | @Override |
| | | public DriverOrderPromotionDataVo queryOrderPromotionFromDriver(String time, Page<DriverOrderDataNextVo> driverOrderDataVoPage, Integer uid) { |
| | | DriverOrderPromotionDataVo driverOrderDataVo = new DriverOrderPromotionDataVo(); |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); |
| | | SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM"); |
| | | // 总的订单数 |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().in("state",Arrays.asList(8,9)).eq("promotionDriverId", uid)); |
| | | // 跨城订单 |
| | | List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().in("state",Arrays.asList(8,9)).eq("promotionDriverId", uid)); |
| | | // 出租车订单 |
| | | List<OrderTaxi> orderTaxis = orderTaxiMapper.selectList(new EntityWrapper<OrderTaxi>().in("state",Arrays.asList(8,9)).eq("promotionDriverId", uid)); |
| | | |
| | | |
| | | BigDecimal sum = orderPrivateCars.stream().map(OrderPrivateCar::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal sum1 = orderCrossCities.stream().map(OrderCrossCity::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal sum2 = orderTaxis.stream().map(OrderTaxi::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | driverOrderDataVo.setAllOrderMoney(sum.add(sum1).add(sum2)); |
| | | |
| | | |
| | | |
| | | BigDecimal count = orderPrivateCars.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).map(OrderPrivateCar::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal count1 = orderCrossCities.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).map(OrderCrossCity::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal count2 = orderTaxis.stream().filter(e -> simpleDateFormat.format(e.getInsertTime()).equals(LocalDateTime.now().toString())).map(OrderTaxi::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | driverOrderDataVo.setTodayOrderMoney(count.add(count1).add(count2)); |
| | | |
| | | |
| | | Date date = new Date(); |
| | | String month = simpleDateFormat1.format(date); |
| | | BigDecimal count3 = orderPrivateCars.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).map(OrderPrivateCar::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal count4 = orderCrossCities.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).map(OrderCrossCity::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | BigDecimal count5 = orderTaxis.stream().filter(e -> simpleDateFormat1.format(e.getInsertTime()).equals(month)).map(OrderTaxi::getPromotionMoney).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | driverOrderDataVo.setMonthOrderMoney(count3.add(count4).add(count5)); |
| | | |
| | | String sTime=null; |
| | | String eTime=null; |
| | | if(ToolUtil.isNotEmpty( time)){ |
| | | sTime=time.split(" - ")[0]+" 00:00:00"; |
| | | eTime=time.split(" - ")[1]+" 23:59:59"; |
| | | } |
| | | List<DriverOrderDataNextVo> driverOrderDataNextVoPage = driverServiceMapper.queryOrderPromotionFromDriver(sTime, eTime, driverOrderDataVoPage, uid); |
| | | List<DriverOrderDataNextVo> driverOrderDataNextVoPage1 =driverServiceMapper.queryOrderPromotionFromDriverAll(sTime, eTime, uid); |
| | | double sum3 = driverOrderDataNextVoPage1.stream().mapToDouble(DriverOrderDataNextVo::getOrderMoney).sum(); |
| | | driverOrderDataVo.setSearchMoney(new BigDecimal(sum3)); |
| | | |
| | | driverOrderDataVoPage.setRecords(driverOrderDataNextVoPage); |
| | | driverOrderDataVo.setDriverOrderDataNextVos(driverOrderDataVoPage); |
| | | return driverOrderDataVo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 单点登录 |
| | | * |
| | | * @param id |
| | | */ |
| | | private void singlePointLogin(Integer id) { |
| | | //开始验证当前账号是否在别处登录 |
| | | String value = (String) redisTemplate.opsForValue().get("DRIVER_" + id); |
| | | if (ToolUtil.isNotEmpty(value)) {//将另外设备上的强迫下线(如果是车载端不需要下线) |
| | | //开始清除redis中无效的数据 |
| | | Driver driver = driverMapper.selectById(id); |
| | | String key = (String) redisTemplate.opsForValue().get("DRIVER_" + driver.getPhone()); |
| | | if(ToolUtil.isNotEmpty(key)){ |
| | | redisTemplate.delete(key);//删除个人信息数据 |
| | | } |
| | | redisTemplate.delete("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisTemplate.delete("DRIVER_" + id);//清除存储的token |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取token |
| | | * |
| | | * @param driver |
| | | * @param password |
| | | * @return |
| | | */ |
| | | private String getToken(Driver driver, String password){ |
| | | private String getToken(Driver driver, String password) { |
| | | //封装请求账号密码为shiro可验证的token |
| | | UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(driver.getPhone(), password.toCharArray()); |
| | | String credentials = driver.getPassword(); |
| | | ByteSource credentialsSalt = new Md5Hash(salt); |
| | | SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo( |
| | | new ShiroUser(), credentials, credentialsSalt, ""); |
| | | |
| | | |
| | | //校验用户账号密码 |
| | | HashedCredentialsMatcher md5CredentialsMatcher = new HashedCredentialsMatcher(); |
| | | md5CredentialsMatcher.setHashAlgorithmName(ShiroKit.hashAlgorithmName); |
| | |
| | | boolean passwordTrueFlag = md5CredentialsMatcher.doCredentialsMatch( |
| | | usernamePasswordToken, simpleAuthenticationInfo); |
| | | String s = JwtTokenUtil.generateToken(String.valueOf(driver.getId())); |
| | | redisUtil.setStrValue(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7 * 24 * 60 * 60); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisUtil.setStrValue("DRIVER_" + driver.getId(), s); |
| | | redisTemplate.opsForValue().set(s.substring(s.length() - 32), String.valueOf(driver.getId()), 7, TimeUnit.DAYS); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getPhone(), s.substring(s.length() - 32)); |
| | | redisTemplate.opsForValue().set("DRIVER_" + driver.getId(), s); |
| | | return s; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 单点登录 |
| | | * @param id |
| | | * 获取编号 |
| | | * |
| | | * @return |
| | | */ |
| | | private void singlePointLogin(Integer id){ |
| | | //开始验证当前账号是否在别处登录 |
| | | String value = redisUtil.getValue("DRIVER_" + id); |
| | | if(ToolUtil.isNotEmpty(value)){//将另外设备上的强迫下线(如果是车载端不需要下线) |
| | | //开始清除redis中无效的数据 |
| | | Driver driver = driverMapper.selectById(id); |
| | | String key = redisUtil.getValue("DRIVER_" + driver.getPhone()); |
| | | redisUtil.remove(key);//删除个人信息数据 |
| | | redisUtil.remove("DRIVER_" + driver.getPhone());//删除后台冻结相关缓存 |
| | | redisUtil.remove("DRIVER_" + id);//清除存储的token |
| | | } |
| | | public String getCode() { |
| | | int count = driverMapper.getCount(); |
| | | String code = String.valueOf(1000001 + count); |
| | | return "D" + code.substring(1); |
| | | } |
| | | |
| | | |
| | | } |