ManagementZYTravel/guns-admin/pom.xml
@@ -72,12 +72,12 @@ <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>RELEASE</version> <version>5.0.0</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>RELEASE</version> <version>5.0.0</version> </dependency> <!--shiro依赖--> ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TDriverController.java
@@ -11,14 +11,13 @@ import com.stylefeng.guns.core.log.LogObjectHolder; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.util.*; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.WoUtil; import com.stylefeng.guns.modular.system.dao.DriverPunishMapper; import com.stylefeng.guns.modular.system.dao.DriverTrainMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.HttpRequestUtil; import com.stylefeng.guns.modular.system.util.PushMinistryOfTransportUtil; import com.stylefeng.guns.modular.system.util.PushURL; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.util.*; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; @@ -76,6 +75,9 @@ @Resource private DriverPunishMapper driverPunishMapper; @Autowired private RedisUtil redisUtil; @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; @@ -806,6 +808,11 @@ }).start(); }else if (2 == optType){ //冻结 tDriver.setAuthState(3); redisUtil.remove("DRIVER_" + tDriver.getId()); String value1 = redisUtil.getValue("DRIVER_" + tDriver.getPhone()); redisUtil.remove(value1); redisUtil.remove("DRIVER_" + tDriver.getPhone()); new Thread(new Runnable() { @Override public void run() { ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TOrderPrivateCarController.java
@@ -277,6 +277,7 @@ driver.setBalance((null != driver.getBalance() ? driver.getBalance() : BigDecimal.ZERO).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN)); driverService.updateById(driver); orderPrivateCar.setIsplatPay(2); orderPrivateCar.setState(8); tOrderPrivateCarService.updateAllColumnById(orderPrivateCar); return SUCCESS_TIP; } ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TSystemPriceController.java
@@ -6,6 +6,7 @@ import com.stylefeng.guns.core.base.tips.ErrorTip; import com.stylefeng.guns.core.common.constant.factory.PageFactory; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.shiro.ShiroUser; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.modular.system.model.TServerCarmodel; import com.stylefeng.guns.modular.system.service.ITServerCarmodelService; @@ -88,7 +89,8 @@ @RequestMapping("/tSystemPrice_add") public String tSystemPriceAdd(Model model) { //查询所有专车车型 List<TSystemPrice> tSystemPrices = tSystemPriceService.selectList(new EntityWrapper<TSystemPrice>().eq("type", 1).ne("state", 3)); List<TSystemPrice> tSystemPrices = tSystemPriceService.selectList(new EntityWrapper<TSystemPrice>().eq("type", 1) .eq("companyId", ShiroKit.getUser().getObjectId()).ne("state", 3)); List<TServerCarmodel> modelList = tServerCarmodelService.selectList(new EntityWrapper<TServerCarmodel>().eq("type", 1).eq("state", 1)); List<TServerCarmodel> serverCarmodels = new ArrayList<>(); for(TServerCarmodel tsc : modelList){ @@ -120,7 +122,8 @@ model.addAttribute("json",json); //查询所有专车车型 List<TSystemPrice> tSystemPrices = tSystemPriceService.selectList(new EntityWrapper<TSystemPrice>().eq("type", 1).ne("state", 3)); List<TSystemPrice> tSystemPrices = tSystemPriceService.selectList(new EntityWrapper<TSystemPrice>().eq("type", 1) .eq("companyId", ShiroKit.getUser().getObjectId()).ne("state", 3)); List<TServerCarmodel> modelList = tServerCarmodelService.selectList(new EntityWrapper<TServerCarmodel>().eq("type", 1).eq("state", 1)); List<TServerCarmodel> serverCarmodels = new ArrayList<>(); for(TServerCarmodel tsc : modelList){ @@ -135,6 +138,8 @@ serverCarmodels.add(tsc); } } TServerCarmodel tServerCarmodel = tServerCarmodelService.selectById(tSystemPrice.getServerCarModelId()); serverCarmodels.add(tServerCarmodel); model.addAttribute("modelList",serverCarmodels); return PREFIX + "tSystemPrice_edit.html"; ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -1,5 +1,6 @@ package com.stylefeng.guns.modular.system.controller.system; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.google.code.kaptcha.Constants; import com.stylefeng.guns.core.base.controller.BaseController; import com.stylefeng.guns.core.common.exception.InvalidKaptchaException; @@ -102,11 +103,25 @@ * 点击登录执行的动作 */ @RequestMapping(value = "/login", method = RequestMethod.POST) public String loginVali() { public String loginVali(Model model) { String username = super.getPara("username").trim(); String password = super.getPara("password").trim(); String remember = super.getPara("remember"); User user = userService.selectOne(new EntityWrapper<User>().eq("account", username).ne("status", 3)); if(null == user){ model.addAttribute("tips", "账户无效"); return "/login.html"; } if(user.getStatus() == 2){ model.addAttribute("tips", "账户已被冻结"); return "/login.html"; } String s = ShiroKit.md5(password, user.getSalt()); if(!user.getPassword().equals(s)){ model.addAttribute("tips", "账号密码错误"); return "/login.html"; } //验证验证码是否正确 if (KaptchaUtil.getKaptchaOnOff()) { ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/HuaWeiSMSUtil.java
@@ -1,171 +1,171 @@ package com.stylefeng.guns.modular.system.util; import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.HttpHeaders; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.client.utils.URLEncodedUtils; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.util.EntityUtils; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.*; //如果JDK版本是1.8,可使用原生Base64类 public class HuaWeiSMSUtil { //无需修改,用于格式化鉴权头域,给"X-WSSE"参数赋值 private static final String WSSE_HEADER_FORMAT = "UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\""; //无需修改,用于格式化鉴权头域,给"Authorization"参数赋值 private static final String AUTH_HEADER_VALUE = "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\""; public static void main(String[] args) throws Exception{ // sendSms("[\""+1235+"\"]","17623778642","10690400999303617","d8f8f781b6e04c848f8148f4d6604bcd"); // sendSms("[\"17623778642\",\"蓉A-7823\"]","17623778642","8819122535459","6c848255000c4619833ab690e393f906"); sendSms("[\"17623778642\",\"蓉A-7823\",\"2019/12/27\",\"14:00\"]","17623778642","8819122535459","bb13d00d11e043659001a89c72d54cab"); } public static void sendSms(String code,String phone,String sender,String templateId) throws Exception{ //必填,请参考"开发准备"获取如下数据,替换为实际值 String url = "https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1"; //APP接入地址+接口访问URI String appKey = "qnay92s7V0K7719H10m7X4yo3fl3"; //APP_Key String appSecret = "6nSHQzZ3o18JeW6UtS448BbblOa0"; //APP_Secret // String sender = "10690400999303617"; //国内短信签名通道号或国际/港澳台短信通道号 // String templateId = "d8f8f781b6e04c848f8148f4d6604bcd"; //模板ID //条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称 //国际/港澳台短信不用关注该参数 String signature = "超级过客"; //签名名称 //必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔 String receiver = "+86"+phone; //短信接收人号码 //选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告 String statusCallBack = ""; /** * 选填,使用无变量模板时请赋空值 String templateParas = ""; * 单变量模板示例:模板内容为"您的验证码是${NUM_6}"时,templateParas可填写为"[\"369751\"]" * 双变量模板示例:模板内容为"您有${NUM_2}件快递请到${TXT_20}领取"时,templateParas可填写为"[\"3\",\"人民公园正门\"]" * ${DATE}${TIME}变量不允许取值为空,${TXT_20}变量可以使用英文空格或点号替代空值,${NUM_6}变量可以使用0替代空值 * 查看更多模板和变量规范:产品介绍>模板和变量规范 */ // String templateParas = "[\""+code+"\"]"; //模板变量 String templateParas = code; //模板变量 //请求Body,不携带签名名称时,signature请填null String body = buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack, signature); if (null == body || body.isEmpty()) { System.out.println("body is null."); return; } //请求Headers中的X-WSSE参数值 String wsseHeader = buildWsseHeader(appKey, appSecret); if (null == wsseHeader || wsseHeader.isEmpty()) { System.out.println("wsse header is null."); return; } //如果JDK版本低于1.8,可使用如下代码 //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 //CloseableHttpClient client = HttpClients.custom() // .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { // @Override // public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { // return true; //package com.stylefeng.guns.modular.system.util; // //import org.apache.commons.codec.binary.Hex; //import org.apache.commons.codec.digest.DigestUtils; //import org.apache.http.HttpHeaders; //import org.apache.http.HttpResponse; //import org.apache.http.NameValuePair; //import org.apache.http.client.methods.RequestBuilder; //import org.apache.http.client.utils.URLEncodedUtils; //import org.apache.http.conn.ssl.NoopHostnameVerifier; //import org.apache.http.entity.StringEntity; //import org.apache.http.impl.client.CloseableHttpClient; //import org.apache.http.impl.client.HttpClients; //import org.apache.http.message.BasicNameValuePair; //import org.apache.http.ssl.SSLContextBuilder; //import org.apache.http.util.EntityUtils; // //import java.nio.charset.Charset; //import java.text.SimpleDateFormat; //import java.util.*; // ////如果JDK版本是1.8,可使用原生Base64类 // //public class HuaWeiSMSUtil { // // //无需修改,用于格式化鉴权头域,给"X-WSSE"参数赋值 // private static final String WSSE_HEADER_FORMAT = "UsernameToken Username=\"%s\",PasswordDigest=\"%s\",Nonce=\"%s\",Created=\"%s\""; // //无需修改,用于格式化鉴权头域,给"Authorization"参数赋值 // private static final String AUTH_HEADER_VALUE = "WSSE realm=\"SDP\",profile=\"UsernameToken\",type=\"Appkey\""; // // public static void main(String[] args) throws Exception{ // //// sendSms("[\""+1235+"\"]","17623778642","10690400999303617","d8f8f781b6e04c848f8148f4d6604bcd"); //// sendSms("[\"17623778642\",\"蓉A-7823\"]","17623778642","8819122535459","6c848255000c4619833ab690e393f906"); // sendSms("[\"17623778642\",\"蓉A-7823\",\"2019/12/27\",\"14:00\"]","17623778642","8819122535459","bb13d00d11e043659001a89c72d54cab"); // } // }).build()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); //如果JDK版本是1.8,可使用如下代码 //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 CloseableHttpClient client = HttpClients.custom() .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, (x509CertChain, authType) -> true).build()) .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) .build(); HttpResponse response = client.execute(RequestBuilder.create("POST")//请求方法POST .setUri(url) .addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded") .addHeader(HttpHeaders.AUTHORIZATION, AUTH_HEADER_VALUE) .addHeader("X-WSSE", wsseHeader) .setEntity(new StringEntity(body)).build()); System.out.println(response.toString()); //打印响应头域信息 System.out.println(EntityUtils.toString(response.getEntity())); //打印响应消息实体 } /** * 构造请求Body体 * @param sender * @param receiver * @param templateId * @param templateParas * @param statusCallbackUrl * @param signature | 签名名称,使用国内短信通用模板时填写 * @return */ static String buildRequestBody(String sender, String receiver, String templateId, String templateParas, String statusCallbackUrl, String signature) { if (null == sender || null == receiver || null == templateId || sender.isEmpty() || receiver.isEmpty() || templateId.isEmpty()) { System.out.println("buildRequestBody(): sender, receiver or templateId is null."); return null; } List<NameValuePair> keyValues = new ArrayList<NameValuePair>(); keyValues.add(new BasicNameValuePair("from", sender)); keyValues.add(new BasicNameValuePair("to", receiver)); keyValues.add(new BasicNameValuePair("templateId", templateId)); if (null != templateParas && !templateParas.isEmpty()) { keyValues.add(new BasicNameValuePair("templateParas", templateParas)); } if (null != statusCallbackUrl && !statusCallbackUrl.isEmpty()) { keyValues.add(new BasicNameValuePair("statusCallback", statusCallbackUrl)); } if (null != signature && !signature.isEmpty()) { keyValues.add(new BasicNameValuePair("signature", signature)); } return URLEncodedUtils.format(keyValues, Charset.forName("UTF-8")); } /** * 构造X-WSSE参数值 * @param appKey * @param appSecret * @return */ static String buildWsseHeader(String appKey, String appSecret) { if (null == appKey || null == appSecret || appKey.isEmpty() || appSecret.isEmpty()) { System.out.println("buildWsseHeader(): appKey or appSecret is null."); return null; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); String time = sdf.format(new Date()); //Created String nonce = UUID.randomUUID().toString().replace("-", ""); //Nonce byte[] passwordDigest = DigestUtils.sha256(nonce + time + appSecret); String hexDigest = Hex.encodeHexString(passwordDigest); //如果JDK版本是1.8,请加载原生Base64类,并使用如下代码 String passwordDigestBase64Str = Base64.getEncoder().encodeToString(hexDigest.getBytes()); //PasswordDigest //如果JDK版本低于1.8,请加载三方库提供Base64类,并使用如下代码 //String passwordDigestBase64Str = Base64.encodeBase64String(hexDigest.getBytes(Charset.forName("utf-8"))); //PasswordDigest //若passwordDigestBase64Str中包含换行符,请执行如下代码进行修正 //passwordDigestBase64Str = passwordDigestBase64Str.replaceAll("[\\s*\t\n\r]", ""); return String.format(WSSE_HEADER_FORMAT, appKey, passwordDigestBase64Str, nonce, time); } } // // public static void sendSms(String code,String phone,String sender,String templateId) throws Exception{ // //必填,请参考"开发准备"获取如下数据,替换为实际值 // String url = "https://rtcsms.cn-north-1.myhuaweicloud.com:10743/sms/batchSendSms/v1"; //APP接入地址+接口访问URI // String appKey = "1"; //APP_Key // String appSecret = "1"; //APP_Secret //// String sender = "10690400999303617"; //国内短信签名通道号或国际/港澳台短信通道号 //// String templateId = "d8f8f781b6e04c848f8148f4d6604bcd"; //模板ID // // //条件必填,国内短信关注,当templateId指定的模板类型为通用模板时生效且必填,必须是已审核通过的,与模板类型一致的签名名称 // //国际/港澳台短信不用关注该参数 // String signature = "xxx"; //签名名称 // // //必填,全局号码格式(包含国家码),示例:+8615123456789,多个号码之间用英文逗号分隔 // String receiver = "+86"+phone; //短信接收人号码 // // //选填,短信状态报告接收地址,推荐使用域名,为空或者不填表示不接收状态报告 // String statusCallBack = ""; // // /** // * 选填,使用无变量模板时请赋空值 String templateParas = ""; // * 单变量模板示例:模板内容为"您的验证码是${NUM_6}"时,templateParas可填写为"[\"369751\"]" // * 双变量模板示例:模板内容为"您有${NUM_2}件快递请到${TXT_20}领取"时,templateParas可填写为"[\"3\",\"人民公园正门\"]" // * ${DATE}${TIME}变量不允许取值为空,${TXT_20}变量可以使用英文空格或点号替代空值,${NUM_6}变量可以使用0替代空值 // * 查看更多模板和变量规范:产品介绍>模板和变量规范 // */ //// String templateParas = "[\""+code+"\"]"; //模板变量 // String templateParas = code; //模板变量 // // //请求Body,不携带签名名称时,signature请填null // String body = buildRequestBody(sender, receiver, templateId, templateParas, statusCallBack, signature); // if (null == body || body.isEmpty()) { // System.out.println("body is null."); // return; // } // // //请求Headers中的X-WSSE参数值 // String wsseHeader = buildWsseHeader(appKey, appSecret); // if (null == wsseHeader || wsseHeader.isEmpty()) { // System.out.println("wsse header is null."); // return; // } // // //如果JDK版本低于1.8,可使用如下代码 // //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 // //CloseableHttpClient client = HttpClients.custom() // // .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { // // @Override // // public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { // // return true; // // } // // }).build()).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build(); // // //如果JDK版本是1.8,可使用如下代码 // //为防止因HTTPS证书认证失败造成API调用失败,需要先忽略证书信任问题 // CloseableHttpClient client = HttpClients.custom() // .setSSLContext(new SSLContextBuilder().loadTrustMaterial(null, // (x509CertChain, authType) -> true).build()) // .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE) // .build(); // // HttpResponse response = client.execute(RequestBuilder.create("POST")//请求方法POST // .setUri(url) // .addHeader(HttpHeaders.CONTENT_TYPE, "application/x-www-form-urlencoded") // .addHeader(HttpHeaders.AUTHORIZATION, AUTH_HEADER_VALUE) // .addHeader("X-WSSE", wsseHeader) // .setEntity(new StringEntity(body)).build()); // // System.out.println(response.toString()); //打印响应头域信息 // System.out.println(EntityUtils.toString(response.getEntity())); //打印响应消息实体 // } // // /** // * 构造请求Body体 // * @param sender // * @param receiver // * @param templateId // * @param templateParas // * @param statusCallbackUrl // * @param signature | 签名名称,使用国内短信通用模板时填写 // * @return // */ // static String buildRequestBody(String sender, String receiver, String templateId, String templateParas, // String statusCallbackUrl, String signature) { // if (null == sender || null == receiver || null == templateId || sender.isEmpty() || receiver.isEmpty() // || templateId.isEmpty()) { // System.out.println("buildRequestBody(): sender, receiver or templateId is null."); // return null; // } // List<NameValuePair> keyValues = new ArrayList<NameValuePair>(); // // keyValues.add(new BasicNameValuePair("from", sender)); // keyValues.add(new BasicNameValuePair("to", receiver)); // keyValues.add(new BasicNameValuePair("templateId", templateId)); // if (null != templateParas && !templateParas.isEmpty()) { // keyValues.add(new BasicNameValuePair("templateParas", templateParas)); // } // if (null != statusCallbackUrl && !statusCallbackUrl.isEmpty()) { // keyValues.add(new BasicNameValuePair("statusCallback", statusCallbackUrl)); // } // if (null != signature && !signature.isEmpty()) { // keyValues.add(new BasicNameValuePair("signature", signature)); // } // // return URLEncodedUtils.format(keyValues, Charset.forName("UTF-8")); // } // // /** // * 构造X-WSSE参数值 // * @param appKey // * @param appSecret // * @return // */ // static String buildWsseHeader(String appKey, String appSecret) { // if (null == appKey || null == appSecret || appKey.isEmpty() || appSecret.isEmpty()) { // System.out.println("buildWsseHeader(): appKey or appSecret is null."); // return null; // } // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // String time = sdf.format(new Date()); //Created // String nonce = UUID.randomUUID().toString().replace("-", ""); //Nonce // // byte[] passwordDigest = DigestUtils.sha256(nonce + time + appSecret); // String hexDigest = Hex.encodeHexString(passwordDigest); // // //如果JDK版本是1.8,请加载原生Base64类,并使用如下代码 // String passwordDigestBase64Str = Base64.getEncoder().encodeToString(hexDigest.getBytes()); //PasswordDigest // //如果JDK版本低于1.8,请加载三方库提供Base64类,并使用如下代码 // //String passwordDigestBase64Str = Base64.encodeBase64String(hexDigest.getBytes(Charset.forName("utf-8"))); //PasswordDigest // //若passwordDigestBase64Str中包含换行符,请执行如下代码进行修正 // //passwordDigestBase64Str = passwordDigestBase64Str.replaceAll("[\\s*\t\n\r]", ""); // // return String.format(WSSE_HEADER_FORMAT, appKey, passwordDigestBase64Str, nonce, time); // } //} ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/JpushUtil.java
@@ -1,256 +1,256 @@ package com.stylefeng.guns.modular.system.util; import cn.jiguang.common.ClientConfig; import cn.jiguang.common.resp.APIConnectionException; import cn.jiguang.common.resp.APIRequestException; import cn.jpush.api.JPushClient; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Message; import cn.jpush.api.push.model.Options; import cn.jpush.api.push.model.Platform; import cn.jpush.api.push.model.PushPayload; import cn.jpush.api.push.model.audience.Audience; import cn.jpush.api.push.model.audience.AudienceTarget; import cn.jpush.api.push.model.notification.AndroidNotification; import cn.jpush.api.push.model.notification.IosNotification; import cn.jpush.api.push.model.notification.Notification; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import sun.misc.BASE64Encoder; import java.util.HashMap; import java.util.Map; /** * 极光推送 * @author suen * 2017年3月23日-上午11:00:57 * version 1.0 * jdk 1.8 */ public class JpushUtil { /** * AppKey */ private static String masterSecret = "e4f6f435faefad29db6ba9b2"; /** * Master Secret */ private static String appKey = "93204c35ded9ba377a14af19"; private static String pushUrl = "https://api.jpush.cn/v3/push"; private static boolean apns_production = true; private static int time_to_live = 86400; /** * 推送 */ private static JPushClient jpushClient = new JPushClient(masterSecret, appKey); public static void main(String[] args) throws APIConnectionException, APIRequestException { Map<String, Object> map=new HashMap<String, Object>(); map.put("sound", 1); //是否有声音 1=否 2=是 map.put("vibrate", 1); //是否有震动 1=否 2=是 map.put("type", 1); //消息类型 1=互动 2=公告 map.put("id", 1); //对象ID //SendPushWithCustomForSh("1", "收到通知了11111!", "反馈", JSON.toJSONString(map)); // String result = push(pushUrl,"121",JSON.toJSONString(map),appKey,masterSecret,apns_production,time_to_live); SendPushWithCustomForTransmission("1","测试极光自定义消息","自定义消息",map); } /** * 系统消息 * @param alias * @param alert * @param androidTitle * @param value */ public static void SendPushWithCustomForSh(String alias, String alert, String androidTitle, String value) { ClientConfig config = ClientConfig.getInstance(); config.setPushHostName("https://api.jpush.cn"); JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3, null, config); PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.android_ios()) .setAudience(Audience.alias(alias)) .setNotification(Notification.newBuilder() .setAlert(alert) .addPlatformNotification(AndroidNotification.newBuilder() .setTitle(androidTitle) .addExtra("action", value) .build()) .addPlatformNotification(IosNotification.newBuilder() .incrBadge(1) .setSound("default").setBadge(+1) .addExtra("action", value).build()) .build()) .setOptions(Options.newBuilder().setApnsProduction(false).build()) .build(); try { PushResult result = jpushClient.sendPush(payload); System.out.println(result); } catch (APIConnectionException e) { } catch (APIRequestException e) { } } /** * 透传消息 * @param alias 别名 * @param alert 内容 * @param title 标题 * @param map 参数 */ public static void SendPushWithCustomForTransmission(String alias, String alert, String title, Map<String, Object> map) { ClientConfig config = ClientConfig.getInstance(); config.setPushHostName("https://api.jpush.cn"); JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3, null, config); PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.android_ios()) .setAudience(Audience.alias(alias)) .setMessage(Message.newBuilder() .setMsgContent(alert) .setContentType("text") .setTitle(title) .addExtra("sound",String.valueOf(map.get("sound"))) .addExtra("vibrate",String.valueOf(map.get("vibrate"))) .addExtra("type",String.valueOf(map.get("type"))) .addExtra("id",String.valueOf(map.get("id"))) .build()) .setOptions(Options.newBuilder().setApnsProduction(false).build()) .build(); try { PushResult result = jpushClient.sendPush(payload); System.out.println(result); } catch (APIConnectionException e) { } catch (APIRequestException e) { } } /** * 内容推送 * @param registrationId 注册用户ID * @param content 推送内容 * @param extra 附加域 * @return * @throws APIConnectionException * @throws APIRequestException */ public static PushResult buildPushObject_ios_audienceMore_messageWithExtras(String registrationId, String content, String extra) throws APIConnectionException, APIRequestException { return jpushClient.sendPush(PushPayload.newBuilder().setPlatform(Platform.android_ios()) .setAudience(Audience.newBuilder().addAudienceTarget(AudienceTarget.alias(registrationId)).build()) .setMessage(Message.newBuilder().setMsgContent(content).addExtra("from", extra).build()) .setOptions(Options.newBuilder().setApnsProduction(false).build()) .build()); } /** * 组装极光推送专用json串 * @param alias * @param alert * @return json */ public static JSONObject generateJson(String alias,String alert,boolean apns_production,int time_to_live){ JSONObject json = new JSONObject(); JSONArray platform = new JSONArray();//平台 platform.add("android"); platform.add("ios"); JSONObject audience = new JSONObject();//推送目标 JSONArray alias1 = new JSONArray(); alias1.add(alias); audience.put("alias", alias1); JSONObject notification = new JSONObject();//通知内容 JSONObject android = new JSONObject();//android通知内容 android.put("alert", alert); android.put("builder_id", 1); JSONObject android_extras = new JSONObject();//android额外参数 android_extras.put("type", "infomation"); android.put("extras", android_extras); JSONObject ios = new JSONObject();//ios通知内容 ios.put("alert", alert); ios.put("sound", "default"); ios.put("badge", "+1"); JSONObject ios_extras = new JSONObject();//ios额外参数 ios_extras.put("type", "infomation"); ios.put("extras", ios_extras); notification.put("android", android); notification.put("ios", ios); JSONObject options = new JSONObject();//设置参数 options.put("time_to_live", Integer.valueOf(time_to_live)); options.put("apns_production", apns_production); json.put("platform", platform); json.put("audience", audience); json.put("notification", notification); json.put("options", options); return json; } /** * 推送方法-调用极光API * @param reqUrl * @param alias * @param alert * @return result */ public static String push(String reqUrl,String alias,String alert,String appKey,String masterSecret,boolean apns_production,int time_to_live){ String base64_auth_string = encryptBASE64(appKey + ":" + masterSecret); String authorization = "Basic " + base64_auth_string; return sendPostRequest(reqUrl,generateJson(alias,alert,apns_production,time_to_live).toString(),"UTF-8",authorization); } /** * 发送Post请求(json格式) * @param reqURL * @param data * @param encodeCharset * @param authorization * @return result */ @SuppressWarnings({ "resource" }) public static String sendPostRequest(String reqURL, String data, String encodeCharset,String authorization){ HttpPost httpPost = new HttpPost(reqURL); HttpClient client = new DefaultHttpClient(); HttpResponse response = null; String result = ""; try { StringEntity entity = new StringEntity(data, encodeCharset); entity.setContentType("application/json"); httpPost.setEntity(entity); httpPost.setHeader("Authorization",authorization.trim()); response = client.execute(httpPost); result = EntityUtils.toString(response.getEntity(), encodeCharset); } catch (Exception e) { }finally{ client.getConnectionManager().shutdown(); } return result; } /** * BASE64加密工具 */ public static String encryptBASE64(String str) { byte[] key = str.getBytes(); BASE64Encoder base64Encoder = new BASE64Encoder(); String strs = base64Encoder.encodeBuffer(key); return strs; } } //package com.stylefeng.guns.modular.system.util; // //import cn.jiguang.common.ClientConfig; //import cn.jiguang.common.resp.APIConnectionException; //import cn.jiguang.common.resp.APIRequestException; //import cn.jpush.api.JPushClient; //import cn.jpush.api.push.PushResult; //import cn.jpush.api.push.model.Message; //import cn.jpush.api.push.model.Options; //import cn.jpush.api.push.model.Platform; //import cn.jpush.api.push.model.PushPayload; //import cn.jpush.api.push.model.audience.Audience; //import cn.jpush.api.push.model.audience.AudienceTarget; //import cn.jpush.api.push.model.notification.AndroidNotification; //import cn.jpush.api.push.model.notification.IosNotification; //import cn.jpush.api.push.model.notification.Notification; //import com.alibaba.fastjson.JSONArray; //import com.alibaba.fastjson.JSONObject; //import org.apache.http.HttpResponse; //import org.apache.http.client.HttpClient; //import org.apache.http.client.methods.HttpPost; //import org.apache.http.entity.StringEntity; //import org.apache.http.impl.client.DefaultHttpClient; //import org.apache.http.util.EntityUtils; //import sun.misc.BASE64Encoder; // //import java.util.HashMap; //import java.util.Map; // ///** // * 极光推送 // * @author suen // * 2017年3月23日-上午11:00:57 // * version 1.0 // * jdk 1.8 // */ //public class JpushUtil { // // /** // * AppKey // */ // private static String masterSecret = "1"; // // /** // * Master Secret // */ // private static String appKey = "1"; // private static String pushUrl = "https://api.jpush.cn/v3/push"; // private static boolean apns_production = true; // private static int time_to_live = 86400; // // /** // * 推送 // */ // private static JPushClient jpushClient = new JPushClient(masterSecret, appKey); // // public static void main(String[] args) throws APIConnectionException, APIRequestException { // Map<String, Object> map=new HashMap<String, Object>(); // map.put("sound", 1); //是否有声音 1=否 2=是 // map.put("vibrate", 1); //是否有震动 1=否 2=是 // map.put("type", 1); //消息类型 1=互动 2=公告 // map.put("id", 1); //对象ID // //SendPushWithCustomForSh("1", "收到通知了11111!", "反馈", JSON.toJSONString(map)); //// String result = push(pushUrl,"121",JSON.toJSONString(map),appKey,masterSecret,apns_production,time_to_live); // SendPushWithCustomForTransmission("1","测试极光自定义消息","自定义消息",map); // } // // /** // * 系统消息 // * @param alias // * @param alert // * @param androidTitle // * @param value // */ // public static void SendPushWithCustomForSh(String alias, String alert, String androidTitle, String value) { // ClientConfig config = ClientConfig.getInstance(); // config.setPushHostName("https://api.jpush.cn"); // JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3, null, config); // PushPayload payload = PushPayload.newBuilder() // .setPlatform(Platform.android_ios()) // .setAudience(Audience.alias(alias)) // .setNotification(Notification.newBuilder() // .setAlert(alert) // .addPlatformNotification(AndroidNotification.newBuilder() // .setTitle(androidTitle) // .addExtra("action", value) // .build()) // .addPlatformNotification(IosNotification.newBuilder() // .incrBadge(1) // .setSound("default").setBadge(+1) // .addExtra("action", value).build()) // .build()) // .setOptions(Options.newBuilder().setApnsProduction(false).build()) // .build(); // try { // PushResult result = jpushClient.sendPush(payload); // System.out.println(result); // } catch (APIConnectionException e) { // // } catch (APIRequestException e) { // // } // } // /** // * 透传消息 // * @param alias 别名 // * @param alert 内容 // * @param title 标题 // * @param map 参数 // */ // public static void SendPushWithCustomForTransmission(String alias, String alert, String title, Map<String, Object> map) { // ClientConfig config = ClientConfig.getInstance(); // config.setPushHostName("https://api.jpush.cn"); // JPushClient jpushClient = new JPushClient(masterSecret, appKey, 3, null, config); // PushPayload payload = PushPayload.newBuilder() // // .setPlatform(Platform.android_ios()) // // .setAudience(Audience.alias(alias)) // // .setMessage(Message.newBuilder() // .setMsgContent(alert) // .setContentType("text") // .setTitle(title) // .addExtra("sound",String.valueOf(map.get("sound"))) // .addExtra("vibrate",String.valueOf(map.get("vibrate"))) // .addExtra("type",String.valueOf(map.get("type"))) // .addExtra("id",String.valueOf(map.get("id"))) // .build()) // // .setOptions(Options.newBuilder().setApnsProduction(false).build()) // .build(); // try { // PushResult result = jpushClient.sendPush(payload); // System.out.println(result); // } catch (APIConnectionException e) { // // } catch (APIRequestException e) { // // } // } // /** // * 内容推送 // * @param registrationId 注册用户ID // * @param content 推送内容 // * @param extra 附加域 // * @return // * @throws APIConnectionException // * @throws APIRequestException // */ // public static PushResult buildPushObject_ios_audienceMore_messageWithExtras(String registrationId, String content, String extra) // throws APIConnectionException, APIRequestException { // return jpushClient.sendPush(PushPayload.newBuilder().setPlatform(Platform.android_ios()) // .setAudience(Audience.newBuilder().addAudienceTarget(AudienceTarget.alias(registrationId)).build()) // .setMessage(Message.newBuilder().setMsgContent(content).addExtra("from", extra).build()) // .setOptions(Options.newBuilder().setApnsProduction(false).build()) // .build()); // // } // /** // * 组装极光推送专用json串 // * @param alias // * @param alert // * @return json // */ // public static JSONObject generateJson(String alias,String alert,boolean apns_production,int time_to_live){ // JSONObject json = new JSONObject(); // JSONArray platform = new JSONArray();//平台 // platform.add("android"); // platform.add("ios"); // // JSONObject audience = new JSONObject();//推送目标 // JSONArray alias1 = new JSONArray(); // alias1.add(alias); // audience.put("alias", alias1); // // JSONObject notification = new JSONObject();//通知内容 // JSONObject android = new JSONObject();//android通知内容 // android.put("alert", alert); // android.put("builder_id", 1); // JSONObject android_extras = new JSONObject();//android额外参数 // android_extras.put("type", "infomation"); // android.put("extras", android_extras); // // JSONObject ios = new JSONObject();//ios通知内容 // ios.put("alert", alert); // ios.put("sound", "default"); // ios.put("badge", "+1"); // JSONObject ios_extras = new JSONObject();//ios额外参数 // ios_extras.put("type", "infomation"); // ios.put("extras", ios_extras); // notification.put("android", android); // notification.put("ios", ios); // // JSONObject options = new JSONObject();//设置参数 // options.put("time_to_live", Integer.valueOf(time_to_live)); // options.put("apns_production", apns_production); // // json.put("platform", platform); // json.put("audience", audience); // json.put("notification", notification); // json.put("options", options); // return json; // // } // // /** // * 推送方法-调用极光API // * @param reqUrl // * @param alias // * @param alert // * @return result // */ // public static String push(String reqUrl,String alias,String alert,String appKey,String masterSecret,boolean apns_production,int time_to_live){ // String base64_auth_string = encryptBASE64(appKey + ":" + masterSecret); // String authorization = "Basic " + base64_auth_string; // return sendPostRequest(reqUrl,generateJson(alias,alert,apns_production,time_to_live).toString(),"UTF-8",authorization); // } // // /** // * 发送Post请求(json格式) // * @param reqURL // * @param data // * @param encodeCharset // * @param authorization // * @return result // */ // @SuppressWarnings({ "resource" }) // public static String sendPostRequest(String reqURL, String data, String encodeCharset,String authorization){ // HttpPost httpPost = new HttpPost(reqURL); // HttpClient client = new DefaultHttpClient(); // HttpResponse response = null; // String result = ""; // try { // StringEntity entity = new StringEntity(data, encodeCharset); // entity.setContentType("application/json"); // httpPost.setEntity(entity); // httpPost.setHeader("Authorization",authorization.trim()); // response = client.execute(httpPost); // result = EntityUtils.toString(response.getEntity(), encodeCharset); // } catch (Exception e) { // }finally{ // client.getConnectionManager().shutdown(); // } // return result; // } // /** // * BASE64加密工具 // */ // public static String encryptBASE64(String str) { // byte[] key = str.getBytes(); // BASE64Encoder base64Encoder = new BASE64Encoder(); // String strs = base64Encoder.encodeBuffer(key); // return strs; // } //} ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/OssUploadUtil.java
@@ -12,9 +12,9 @@ public class OssUploadUtil { //OSS图片访问域名 public static String oss_domain = "https://feimachuxing.oss-cn-beijing.aliyuncs.com/"; public static String accessKeyId = "LTAI4G1BpRaihVRZp1RS8Stn"; public static String accessKeySecret = "PDR7uUEGNf0wIPPVCPCVdySgTwCr90"; public static String bucketName="feimachuxing"; public static String accessKeyId = "1"; public static String accessKeySecret = "1"; public static String bucketName="1"; public static String endpoint = "oss-cn-beijing.aliyuncs.com"; public static OSSClient ossClient = new OSSClient(endpoint, accessKeyId,accessKeySecret); ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/task/jobs/AddNotice.java
@@ -6,7 +6,7 @@ import com.stylefeng.guns.modular.system.model.TNotices; import com.stylefeng.guns.modular.system.model.TSystemNotice; import com.stylefeng.guns.modular.system.model.TUser; import com.stylefeng.guns.modular.system.util.JpushUtil; //import com.stylefeng.guns.modular.system.util.JpushUtil; import com.stylefeng.guns.modular.system.util.task.base.AbstractJob; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; @@ -76,10 +76,10 @@ map.put("id", record.getId()); //对象ID JpushUtil.SendPushWithCustomForTransmission(String.valueOf(userInfo.getId()),"【超级过客】提醒您,您有一条新的公告消息。","通知消息",map);*/ if (tNotices.getIsBroadcast() == 1){ // if (tNotices.getIsBroadcast() == 1){ //增加极光推送 JpushUtil.SendPushWithCustomForSh("DRIVER"+driver.getId().toString(),tNotices.getTitle(),"通知消息",null); } // JpushUtil.SendPushWithCustomForSh("DRIVER"+driver.getId().toString(),tNotices.getTitle(),"通知消息",null); // } } } ManagementZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/task/jobs/SendSms.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.SinataUtil; import com.stylefeng.guns.modular.system.util.HuaWeiSMSUtil; //import com.stylefeng.guns.modular.system.util.HuaWeiSMSUtil; import com.stylefeng.guns.modular.system.util.task.base.AbstractJob; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/tInvoice/tInvoice.js
@@ -82,20 +82,8 @@ }, {title: '更多信息', field: 'value', visible: true, align: 'center', valign: 'middle', formatter: function (value, row) { var btn = ""; if(row.value != '' && row.value != null) { var labelStr = ""; var labelStrs = ""; var labelArray = row.value.split(","); for(var i=0;i<labelArray.length;i++){ labelStr += labelArray[i] +"<br>"; labelStrs += labelArray[i] + " "; } labelStr = labelStr.substring(0,labelStr.length-4); labelStrs = labelStrs.substring(0,labelStrs.length-5); btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + labelStrs + '" onfocus="TUser.tooltip()">' + labelStr + '</p>'] } return btn; var btn = "备注说明:" + (typeof row.remark == "undefined" ? '' : row.remark) + "<br/>地址和电话:" + (typeof row.address == "undefined" ? '' : row.address) + "<br/>开户行和账号:" + (typeof row.bank == "undefined" ? '' : row.bank); return ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width: 260px;" title="' + btn + '" onfocus="TUser.tooltip()">' + btn+ '</p>'] } }, {title: '邮箱', field: 'email', visible: true, align: 'center', valign: 'middle', ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/tOrderPrivateCar/tOrderPrivateCar.js
@@ -282,7 +282,7 @@ nickname = "【" + nickname + "】"; } if (TOrderPrivateCar.seItem.state != 7) { swal("取消失败", "【待支付】状态下才能执行此操作", "warning"); swal("支付失败", "【待支付】状态下才能执行此操作", "warning"); return; } swal({ @@ -369,7 +369,7 @@ nickname = "【" + nickname + "】"; } if (TOrderPrivateCar.seItem.state == 7 || TOrderPrivateCar.seItem.state == 8 || TOrderPrivateCar.seItem.state == 9 || TOrderPrivateCar.seItem.state == 10 ) { swal("支付失败", "【待评价】【已完成】【已取消】状态下不能执行此操作", "warning"); swal("取消失败", "【待评价】【已完成】【已取消】状态下不能执行此操作", "warning"); return; } swal({ ManagementZYTravel/guns-admin/src/main/webapp/static/modular/system/tPubWithdrawal/tPubWithdrawal.js
@@ -94,8 +94,8 @@ {title: '账户余额', field: 'balance', visible: true, align: 'center', valign: 'middle', formatter: function (value, row) { var btn = ""; if(row.money != '' && row.money != null) { btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.money + '" onfocus="TUser.tooltip()">' + row.money + '</p>'] if(row.balance != '' && row.balance != null) { btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="' + row.balance + '" onfocus="TUser.tooltip()">' + row.balance + '</p>'] }else if (row.withdrawalType == 2){ btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="0" onfocus="TUser.tooltip()">0</p>'] }