DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/api/DriverController.java
@@ -17,7 +17,6 @@ import com.stylefeng.guns.modular.system.util.ALiSendSms; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.WeChatUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.SMSUtil; import com.stylefeng.guns.modular.system.warpper.*; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; @@ -263,7 +262,7 @@ break; } // String s = aLiSendSms.sendSms(driver.getPhone(), templateCode, "{}"); SMSUtil.sendVerifyCode(driver.getPhone()); // SMSUtil.sendVerifyCode(driver.getPhone()); return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/Company.java
@@ -287,6 +287,11 @@ */ @TableField("OnCall") private String OnCall; /** * 中台企业编号 */ @TableField("enterCode") private String enterCode; public String getDetailAddress() { return detailAddress; @@ -745,6 +750,14 @@ OnCall = onCall; } public String getEnterCode() { return enterCode; } public void setEnterCode(String enterCode) { this.enterCode = enterCode; } @Override public String toString() { return "Company{" + DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/DriverServiceImpl.java
@@ -16,6 +16,7 @@ import com.stylefeng.guns.modular.system.util.qianyuntong.SMSUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.model.EditStaffNodeRequest; import com.stylefeng.guns.modular.system.util.qianyuntong.model.GetStaffNodeRequest; import com.stylefeng.guns.modular.system.util.qianyuntong.model.SendSmsRequest; import com.stylefeng.guns.modular.system.util.qianyuntong.model.StaffNodeInfo; import com.stylefeng.guns.modular.system.warpper.ActivityWarpper; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; @@ -152,25 +153,23 @@ sb.append((int) (random.nextDouble() * 10)); } String authCode = sb.toString(); String sms = "短信验证码【" + authCode + "】已发到您的手机,验证码将在5分钟后失效,请及时登录!"; //发送验证码短信 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; } // //发送验证码短信 // 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"); @@ -178,7 +177,16 @@ // return ResultUtil.error(""); // } // System.out.println(sms); SMSUtil.sendVerifyCode(phone); 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(); } @@ -465,11 +473,12 @@ if (null == driver) { return ResultUtil.error("账号未注册"); } Company company = companyMapper.selectById(driver.getCompanyId()); //查询中台员工数据 GetStaffNodeRequest request = new GetStaffNodeRequest(); request.setEmpId(driver.getEmpId()); request.setEntercode(driver.getEntercode()); request.setMobile(driver.getPhone()); request.setEntercode(company.getEnterCode()); request.setMobile(company.getPrincipalPhone()); StaffNodeInfo staffNode = EmployeeUtil.getStaffNode(request); if (null == staffNode || staffNode.getIsValid().equals("0")) { return ResultUtil.error("账号未注册"); @@ -781,6 +790,7 @@ return ResultUtil.error("验证码无效"); } Driver driver1 = this.selectById(uid); Company company = companyMapper.selectById(driver1.getCompanyId()); GetStaffNodeRequest request = new GetStaffNodeRequest(); request.setEmpId(driver1.getEmpId()); request.setEntercode(driver1.getEntercode()); @@ -791,8 +801,8 @@ } EditStaffNodeRequest editStaffNodeRequest = new EditStaffNodeRequest(); editStaffNodeRequest.setEmpId(staffNode.getEmpId()); editStaffNodeRequest.setMobile(staffNode.getMphone()); editStaffNodeRequest.setEntercode(staffNode.getEnterNum()); editStaffNodeRequest.setMobile(company.getPrincipalPhone()); editStaffNodeRequest.setEntercode(company.getEnterCode()); editStaffNodeRequest.setEnterId(staffNode.getEnterId()); editStaffNodeRequest.setEmpName(staffNode.getEmpName()); editStaffNodeRequest.setEmpNickname(staffNode.getEmpNickname()); @@ -1571,7 +1581,9 @@ //开始清除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 } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/EmployeeUtil.java
@@ -64,7 +64,7 @@ log.error("【企业增加员工】失败:" + object.toJSONString()); throw new RuntimeException("【企业增加员工】失败:" + object.toJSONString()); } SaveStaffNode saveStaffNode = jsonObject.getObject("data", SaveStaffNode.class); SaveStaffNode saveStaffNode = object.getObject("data", SaveStaffNode.class); return saveStaffNode; } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/QianYunTongProperties.java
@@ -7,18 +7,43 @@ * @Date 2025/6/6 15:03 */ public interface QianYunTongProperties { /** * 小程序appId */ String appId = "wxcc3c9058e2b294db"; /** * */ String encryptedData = "645HaSm7meo0GLKQZZvagq3JkWZXYlOfvhf8YKqNjWklpzx3IjM2S/wkmlUOz/iPvDVYRgBD2+V1WCHT6fMbOjJnR/0W9bwVGOSSaoyYpZdPR5x8f/6OR1B3e3qfJWFKJf0Za4n9JJTwStCTuMHWRIE0IgYtj3zSb2WI1AzDyLeR7MMgW0q+red2ujtrKGR4pe0NoXB2qZKHj4whBuGUiw=="; /** * */ String iv = "Zz2ZL9Yu43pp38p5CcocJA=="; /************************************开发/测试start***********************************/ // /** // * appkey // */ // String appkey = "10001104"; // /** // * 私钥地址 // */ // String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key_test.pem"; // /** // * 私钥地址 // */ // String privateKeyPath = "/root/server/app/key/private_key_test.pem"; // /** // * 消费者账号 // */ // String userName = "xiaofei"; // /** // * 状态 // * 1:生产环境 // * 2:测试环境 // */ // String status = "1"; // /** // * API地址 // */ // String apiUrl = "https://test-zhongtai.stqcloud.com:10070"; // /** // * 桶名 // */ // String bucketName = "bucuTest0625"; /************************************开发/测试end***********************************/ /************************************生产start***********************************/ /** * appkey */ @@ -26,11 +51,15 @@ /** * 私钥地址 */ String privateKeyPath = "/root/server/app/key/private_key_test.pem"; // String privateKeyPath = "C:\\Users\\39373\\Desktop\\黔云通\\private_key.pem"; /** * 私钥地址 */ String privateKeyPath = "/root/server/app/key/private_key.pem"; /** * 消费者账号 */ String userName = "xiaofei"; String userName = "xiwang"; /** * 状态 * 1:生产环境 @@ -40,11 +69,24 @@ /** * API地址 */ String apiUrl = "https://test-zhongtai.stqcloud.com:10070"; String apiUrl = "http://jjzhongtai.stqcloud.com:10010"; /** * 桶名 */ String bucketName = "qyt20250702"; /************************************生产end***********************************/ /** * 小程序appId */ String appId = "wxcc3c9058e2b294db"; /** * HOS的基础路径(公共前缀) */ String endPoint = "119.4.112.68:27741"; String endPoint = "http://119.4.112.68:27741/v1"; /** * 账户的ID */ DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/SMSUtil.java
@@ -2,8 +2,10 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.open.common.util.OpenApiClient; import com.open.common.util.SystemParameterNames; import com.stylefeng.guns.modular.system.util.qianyuntong.model.SendSmsRequest; import lombok.extern.slf4j.Slf4j; import java.text.SimpleDateFormat; @@ -64,4 +66,50 @@ } return object.getString("code"); } /** * 根据模板发送短信 * * @param request * @return */ public static Boolean sendSms(SendSmsRequest request) { //请求路径 String url = QianYunTongProperties.apiUrl + "/openapi/rest/1.0/sendSmsByTpl"; //私钥文件 String skprivateKeyFile = QianYunTongProperties.privateKeyPath; //注意:私钥文件需要开发者手动新建.pem文件,将委办局提供的私钥串复制进文件里用于sign加密 String appKey = QianYunTongProperties.appkey;//appkey Map<String, String> headers = new HashMap<>(); headers.put("Content-Type", "application/json"); Map<String, Object> contentMap = new HashMap<String, Object>(); Date nowdate = new Date(); SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmss"); String timeStamp = date.format(nowdate); String messageId = UUID.randomUUID().toString().replaceAll("-", ""); contentMap.put(SystemParameterNames.getAppKey(), appKey); contentMap.put(SystemParameterNames.getMessage_id(), messageId); contentMap.put(SystemParameterNames.getUserName(), QianYunTongProperties.userName); contentMap.put(SystemParameterNames.getStatus(), QianYunTongProperties.status); contentMap.put("content", new Gson().toJson(request)); log.info("【根据模板发送短信】请求地址:" + url); log.info("【根据模板发送短信】请求参数:" + JSON.toJSONString(contentMap)); String result = OpenApiClient.sendCommonHttpRequst(url, headers, "POST", skprivateKeyFile, timeStamp, contentMap); log.info("【根据模板发送短信】请求结果:" + result); JSONObject jsonObject = JSON.parseObject(result); String retCode = jsonObject.getString("retCode"); if (!"0".equals(retCode)) { log.error("【根据模板发送短信】请求失败:" + result); throw new RuntimeException("【根据模板发送短信】请求失败:" + result); } JSONObject object = jsonObject.getJSONObject("object"); String status = object.getString("status"); if (!"0".equals(status)) { log.error("【根据模板发送短信】失败:" + object.toJSONString()); throw new RuntimeException("【根据模板发送短信】失败:" + object.toJSONString()); } return true; } } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/UserUtil.java
@@ -1,15 +1,11 @@ package com.stylefeng.guns.modular.system.util.qianyuntong; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.open.common.util.OpenApiClient; import com.open.common.util.SystemParameterNames; import com.stylefeng.guns.modular.system.util.UUIDUtil; import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; import lombok.extern.slf4j.Slf4j; @@ -215,43 +211,6 @@ } /** * 微信小程序登录 * * @param code * @return */ public static LoginWeChatXiao loginWeChatXiao(String code) { HttpRequest post = HttpUtil.createPost("https://casme.teamshub.com/webapp-backstage/ajax/loginWeChatXiao/v1.0"); post.header("Content-Type", "text/plain;charset=UTF-8"); post.header("Accept-encodeing", "UTF-8"); JSONObject body = new JSONObject(); body.put("version", "1.0"); try { body.put("id", UUIDUtil.getRandomCode(6)); } catch (Exception e) { throw new RuntimeException(e); } body.put("type", "loginWeChatXiao"); body.put("action", "request"); body.put("code", code); body.put("appId", QianYunTongProperties.appId); body.put("encryptedData", QianYunTongProperties.encryptedData); body.put("iv", QianYunTongProperties.iv); post.body(body.toJSONString()); HttpResponse execute = post.execute(); if (200 != execute.getStatus()) { log.error("微信登录失败"); return null; } JSONObject jsonObject = JSON.parseObject(execute.body()); Integer status = jsonObject.getInteger("status"); if (0 != status) { log.error("微信登录失败:" + jsonObject.getString("desc")); return null; } LoginWeChatXiao loginWeChatXiao = jsonObject.getObject("data", LoginWeChatXiao.class); return loginWeChatXiao; } } DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/qianyuntong/model/SendSmsRequest.java
New file @@ -0,0 +1,33 @@ package com.stylefeng.guns.modular.system.util.qianyuntong.model; import lombok.Data; import java.util.Map; /** * @author zhibing.pu * @Date 2025/7/2 15:41 */ @Data public class SendSmsRequest { /** * 目标地址 */ private String destAddress; /** * 模板id */ private String templateId; /** * 参数集合 */ private Map<String, String> templateParams; /** * 模板中占位符key */ private String code; /** * 签名SPID */ private String spId; } DriverQYTTravel/guns-admin/src/main/resources/application-dev.yml
New file @@ -0,0 +1,117 @@ server: port: 8007 guns: swagger-open: true #是否开启swagger (true/false) kaptcha-open: false #是否开启登录时验证码 (true/false) file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录) picture-server-address: http://192.168.0.43/resources/ #图片服务器地址 spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false) session-invalidate-time: 1800 #session失效时间(只在单机环境下生效,多机环境在SpringSessionConfig类中配置) 单位:秒 session-validation-interval: 900 #多久检测一次失效的session(只在单机环境下生效) 单位:秒 spring: application: name: driver-server profiles: # active: dev active: prod mvc: static-path-pattern: /static/** view: prefix: /WEB-INF/view devtools: restart: enabled: false additional-paths: src/main/java exclude: static/**,WEB-INF/view/** servlet: multipart: max-request-size: 100MB max-file-size: 100MB redis: host: 172.21.35.151 port: 6512 password: SC_cache@20#25 database: 0 timeout: 1000 cluster: nodes: 172.21.35.151:6512,172.21.35.152:6512,172.21.35.153:6512,172.21.35.151:6513,172.21.35.152:6513,172.21.35.153:6513 mybatis-plus: typeAliasesPackage: com.stylefeng.guns.modular global-config: id-type: 0 #0:数据库ID自增 1:用户输入id 2:全局唯一id(IdWorker) 3:全局唯一ID(uuid) db-column-underline: false configuration: configuration.map-underscore-to-camel-case: true #是否开启自动驼峰命名规则(camel case)映射 log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl #输出Sql,如需打印Sql注释该配置 eureka: client: service-url: #注册中心地址 defaultZone: http://sinata:sinata@127.0.0.1:8000/eureka #启用身份验证的方式连接 register-with-eureka: true #在注册中心进行注册 fetch-registry: true #从Eureka中获取注册信息。 --- spring: datasource: url: jdbc:mysql://172.21.35.140:8066/traffic_scdb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai username: traffic_scusr password: QYT_sc@20#25 db-name: traffic_scdb #用来搜集数据库的所有表 filters: wall,mergeStat --- spring: data: mongodb: uri: mongodb://qyt_jtcx:qyt_jtcx2025@172.21.35.195:27017,172.21.35.196:27017/traveling_track --- wx: grantType: authorization_code #填authorization_code appid: 111 #应用唯一标识,在微信开放平台提交应用审核通过后获得 appSecret: 111 #应用密钥AppSecret,在微信开放平台提交应用审核通过后获得 appletsAppid: wxcc3c9058e2b294db #小程序APPid appletsAppSecret: 5610fc6126255ca5f7bd9fa4330338b6 # mchId: 111 #微信支付分配的商户号 key: 111 #key为商户平台设置的密钥key: --- alipay: appid: 111 #应用程序唯一标识 appPrivateKey: 111 #开发者应用私钥 alipayPublicKey: 1 #应用公钥 alipay_public_key: 111 #支付宝公钥 --- juhe: #聚合数据 appKey: 111 # --- jiguang: appKey-driver: 111 #极光推送应用唯一标识 masterSecret-driver: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的 appKey-dispatch: 111 #极光推送应用唯一标识 masterSecret-dispatch: 111 #用于服务器端 API 调用时与 AppKey 配合使用达到鉴权的目的 --- #支付回调地址 #正式环境 callbackPath: https://traffic.qytzt.cn/driver --- #交通部推送数据功能开关 pushMinistryOfTransport: false