DriverAHTravel/guns-admin/pom.xml
@@ -9,8 +9,9 @@ <relativePath>../pom.xml</relativePath> </parent> <artifactId>guns-admin</artifactId> <artifactId>driver</artifactId> <name>guns-admin</name> <version>0.0.1</version> <description>guns 的spring boot版本</description> <packaging>jar</packaging> DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -39,7 +39,7 @@ * 司机控制器 */ @Api @CrossOrigin //@CrossOrigin @RestController @RequestMapping("") public class DriverController { @@ -599,7 +599,7 @@ DriverInfoWarpper driverInfoWarpper = DriverInfoWarpper.getDriverInfoWarpper(map); if (driverInfoWarpper.getWechatPic()==null){ Driver driver = driverService.selectById(uid); String rid = weChatUtil.rid("/pages/home/scanPage/scanPage", uid); String rid = weChatUtil.rid("pages/home/scanPage/scanPage", uid); driver.setWechatPic(rid); driverService.updateById(driver); driverInfoWarpper.setWechatPic(rid); DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/VersionManagementController.java
@@ -17,7 +17,7 @@ * 版本管理 */ @Api @CrossOrigin //@CrossOrigin @RestController @RequestMapping("") public class VersionManagementController { DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/DriverLineMapper.java
New file @@ -0,0 +1,11 @@ package com.stylefeng.guns.modular.crossCity.dao; import com.baomidou.mybatisplus.mapper.BaseMapper; import com.stylefeng.guns.modular.crossCity.model.DriverLine; /** * @author zhibing.pu * @Date 2024/12/22 0:02 */ public interface DriverLineMapper extends BaseMapper<DriverLine> { } DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/dao/mapping/DriverLineMapper.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.stylefeng.guns.modular.crossCity.dao.DriverLineMapper"> </mapper> DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/model/DriverLine.java
New file @@ -0,0 +1,43 @@ package com.stylefeng.guns.modular.crossCity.model; import com.baomidou.mybatisplus.annotations.TableField; import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.annotations.TableName; import com.baomidou.mybatisplus.enums.IdType; import lombok.Data; import java.util.Date; /** * @author zhibing.pu * @Date 2024/12/21 23:59 */ @Data @TableName("t_driver_line") public class DriverLine { /** * 主键 */ @TableId(value = "id", type = IdType.AUTO) private Integer id; /** * 司机id */ @TableField("driverId") private Integer driverId; /** * 线路id */ @TableField("lineId") private Integer lineId; /** * 添加时间 */ @TableField("createTime") private Date createTime; /** * 后台添加时间 */ @TableField("addTime") private String addTime; } DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/IDriverLineService.java
New file @@ -0,0 +1,11 @@ package com.stylefeng.guns.modular.crossCity.server; import com.baomidou.mybatisplus.service.IService; import com.stylefeng.guns.modular.crossCity.model.DriverLine; /** * @author zhibing.pu * @Date 2024/12/22 0:03 */ public interface IDriverLineService extends IService<DriverLine> { } DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/DriverLineServiceImpl.java
New file @@ -0,0 +1,15 @@ package com.stylefeng.guns.modular.crossCity.server.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.modular.crossCity.dao.DriverLineMapper; import com.stylefeng.guns.modular.crossCity.model.DriverLine; import com.stylefeng.guns.modular.crossCity.server.IDriverLineService; import org.springframework.stereotype.Service; /** * @author zhibing.pu * @Date 2024/12/22 0:04 */ @Service public class DriverLineServiceImpl extends ServiceImpl<DriverLineMapper, DriverLine> implements IDriverLineService { } DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -9,6 +9,10 @@ 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.LinePriceMapper; import com.stylefeng.guns.modular.crossCity.model.DriverLine; import com.stylefeng.guns.modular.crossCity.model.LinePrice; import com.stylefeng.guns.modular.crossCity.server.IDriverLineService; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.system.dao.*; @@ -34,6 +38,7 @@ import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @Service @@ -134,6 +139,12 @@ private Map<String, Long> loginTime = new HashMap<>();//登录时间 private Map<String, Integer> loginFailures = new HashMap<>();//登录失败次数 @Autowired private IDriverLineService driverLineService; @Resource private LinePriceMapper linePriceMapper; @@ -863,8 +874,36 @@ } boolean idle = carService.idle(carId); if(!idle){ return ResultUtil.error("车辆正在服务中"); } Integer integer1 = driverMapper.selectCount(new EntityWrapper<Driver>().eq("carId", carId).eq("authState", 2).ne("flag", 3)); if(integer1 > 0){ return ResultUtil.error("车辆已被绑定了"); } ///判断车辆车型是否与实际关联线路需要的车型匹配 Integer integer = driverServiceMapper.selectCount(new EntityWrapper<DriverService>().eq("driverId", uid).eq("type", 3)); if(integer > 0){ CarService carService1 = new CarService(); carService1.setCarId(carId); carService1.setType(3); CarService carService2 = carServiceMapper.selectOne(carService1); if(null == carService2){ return ResultUtil.error("当前车辆不能运营城际业务"); } Integer serverCarModelId = carService2.getServerCarModelId(); List<DriverLine> driverLines = driverLineService.selectList(new EntityWrapper<DriverLine>().eq("driverId", uid)); List<Integer> collect = driverLines.stream().map(DriverLine::getLineId).collect(Collectors.toList()); if(collect.size() == 0){ return ResultUtil.error("司机还未关联线路"); } List<LinePrice> linePrices = linePriceMapper.selectList(new EntityWrapper<LinePrice>().in("lineId", collect).eq("state", 1)); for (LinePrice linePrice : linePrices) { if(!linePrice.getServerCarModelId().equals(serverCarModelId)){ return ResultUtil.error("当前车辆的城际业务车型与司机关联线路的车型不一致"); } } } driver.setCarId(carId); this.updateById(driver); return ResultUtil.success(); DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -153,7 +153,7 @@ Double balance = driver.getBalance(); Double laveBusinessMoney = driver.getLaveBusinessMoney(); Double laveActivityMoney = driver.getLaveActivityMoney(); if(null == balance || balance < aDouble){ if(balance < -100){ throw new SystemException("账户余额不足"); } if(null != laveBusinessMoney && laveBusinessMoney.compareTo(aDouble) >= 0){ DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/EnvVersion.java
New file @@ -0,0 +1,35 @@ package com.stylefeng.guns.modular.system.util; /** * @author zhibing.pu * @Date 2024/12/10 15:56 */ public enum EnvVersion { /** * 开发版 */ DEVELOP("develop"), /** * 体验版 */ TRIAL("trial"), /** * 线上版本 */ RELEASE("release"); EnvVersion(String version) { this.version = version; } private String version; public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } } DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ObsUploadUtil.java
@@ -2,6 +2,7 @@ import com.obs.services.ObsClient; import com.obs.services.model.ObjectMetadata; import com.obs.services.model.PutObjectResult; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -29,7 +30,7 @@ meta.setContentLength(file.getSize()); // 必须设置ContentLength String originalFilename = file.getOriginalFilename(); fileName = UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length()); obsClient.putObject(bucketName,"admin/"+fileName,content,meta);// 上传Object. obsClient.putObject(bucketName,"admin/"+fileName,content,meta); if(fileName != null && !"".equals(fileName)){ System.out.println(fileName); fileName = oss_domain+"admin/"+fileName; @@ -38,6 +39,22 @@ return fileName; } public static String obsUpload(String suffix, InputStream content){ String fileName = UUID.randomUUID().toString().replaceAll("-","") + "." + suffix; try { PutObjectResult putObjectResult = obsClient.putObject(bucketName, "admin/" + fileName, content); String objectUrl = putObjectResult.getObjectUrl(); return oss_domain+"admin/"+fileName; }catch (Exception e){ e.printStackTrace(); } return ""; } /** * 删除某个Object * DriverAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/WeChatUtil.java
@@ -18,8 +18,10 @@ import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.nio.charset.Charset; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -201,30 +203,34 @@ } public String rid(String path, Integer driverId) throws Exception{ // 获取access_token String accessToken = getWxAppletsAccessToken(); // 替换CREATE_CODE_URL String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="+accessToken; // 发送请求 String stringApiResult = null; try { HashMap<String, String> map = new HashMap<>(); map.put("path", path+"?driverId="+driverId); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity requestEntity = new HttpEntity(map, headers); ResponseEntity<byte[]> rep = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class); byte[] bytes = rep.getBody(); ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); MultipartFile file = new MockMultipartFile(ContentType.APPLICATION_OCTET_STREAM.toString(), byteArrayInputStream); String s = ObsUploadUtil.obsUpload(file); System.err.println("===url"+s); System.err.println(Base64.encodeBase64String(bytes)); return s; } catch (Exception e) { InputStream release = getwxacodeunlimit(path, "driverId=" + driverId, EnvVersion.RELEASE.getVersion()); String png = ObsUploadUtil.obsUpload("png", release); return png; } return stringApiResult; public InputStream getwxacodeunlimit(String page, String scene, String envVersion) throws Exception{ try { String wxAppletsAccessToken = getWxAppletsAccessToken(); String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + wxAppletsAccessToken; Map<String, Object> param = new HashMap<>(); param.put("scene", scene); param.put("page", page); param.put("env_version", envVersion); HttpHeaders httpHeaders = new HttpHeaders(); MediaType type=MediaType.parseMediaType("application/json;charset=UTF-8"); httpHeaders.setContentType(type); HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(param, httpHeaders); ResponseEntity<byte[]> entity = restTemplate.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); byte[] body = entity.getBody(); String s = new String(body, Charset.defaultCharset()); System.err.println(s); return new ByteArrayInputStream(body); }catch (Exception e){ e.printStackTrace(); } return null; } } DriverAHTravel/guns-admin/src/main/resources/application.yml
@@ -78,8 +78,8 @@ grantType: authorization_code #填authorization_code appid: wx2d643fa565035848 #应用唯一标识,在微信开放平台提交应用审核通过后获得 appSecret: 7c7409548a9bbe001af87578709ef360 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 appletsAppid: wxe91f1af7638aa5dd #小程序APPid appletsAppSecret: a787e1a462715604e0c9528b6d8960d1 # appletsAppid: wx3f6d567c18a87641 #小程序APPid appletsAppSecret: 2fc56292246fc573644980890434b157 # mchId: 1618978168 #微信支付分配的商户号 key: BTisLYCrwstKZRTBZef5pe51SCA7Kxe1 #key为商户平台设置的密钥key: