pom.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/common/WeChatConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/controller/OutParkController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/entity/XTYHResult.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/OutParkService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/WXService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/impl/EnterParkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/impl/OutParkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/service/impl/WXServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/boying/util/CommonUtil.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
pom.xml
@@ -111,43 +111,20 @@ <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </dependency> <!-- <dependency>--> <!-- <groupId>net.sf</groupId>--> <!-- <artifactId>jni4net</artifactId>--> <!-- <version>0.8.8.0</version>--> <!-- <scope>system</scope>--> <!-- <systemPath>${basedir}/src/main/resources/jni/jni4net.j-0.8.8.0.jar</systemPath>--> <!-- </dependency>--> <!-- <dependency>--> <!-- <groupId>com.led</groupId>--> <!-- <artifactId>show</artifactId>--> <!-- <version>0.0.1</version>--> <!-- <scope>system</scope>--> <!-- <systemPath>${basedir}/src/main/resources/jni/LedShow.j4n.jar</systemPath>--> <!-- </dependency>--> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.68</version> </dependency> <dependency> <groupId>com.ruim.ifsp</groupId> <artifactId>signature</artifactId> <version>1.1.0.6</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> </plugin> <!--上线部署 JAR启动分离依赖lib和配置--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.1.0</version> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> @@ -219,6 +196,111 @@ </executions> </plugin> </plugins> <resources> <resource> <directory>libs</directory> <targetPath>BOOT-INF/lib/</targetPath> <includes> <include>*.jar</include> </includes> </resource> </resources> </build> <!-- <build>--> <!-- <plugins>--> <!-- <plugin>--> <!-- <groupId>org.apache.maven.plugins</groupId>--> <!-- <artifactId>maven-jar-plugin</artifactId>--> <!-- <configuration>--> <!-- <!–不打包资源文件–>--> <!-- <excludes>--> <!-- <exclude>*.**</exclude>--> <!-- </excludes>--> <!-- <archive>--> <!-- <manifest>--> <!-- <addClasspath>true</addClasspath>--> <!-- <classpathPrefix>lib/</classpathPrefix>--> <!-- <!–jar包不包含唯一版本标识–>--> <!-- <useUniqueVersions>false</useUniqueVersions>--> <!-- <!–程序启动类application.java的路径–>--> <!-- <mainClass>com.boying.Application</mainClass>--> <!-- </manifest>--> <!-- <!– 指定配置文件目录,这样jar运行时会去找到同目录下的config文件夹下查找 –>--> <!-- <manifestEntries>--> <!-- <Class-Path>config/</Class-Path>--> <!-- </manifestEntries>--> <!-- </archive>--> <!-- <outputDirectory>1-running/</outputDirectory>--> <!-- </configuration>--> <!-- </plugin>--> <!-- <!–拷贝依赖 copy-dependencies–>--> <!-- <plugin>--> <!-- <groupId>org.apache.maven.plugins</groupId>--> <!-- <artifactId>maven-dependency-plugin</artifactId>--> <!-- <executions>--> <!-- <execution>--> <!-- <id>copy-dependencies</id>--> <!-- <phase>package</phase>--> <!-- <goals>--> <!-- <goal>copy-dependencies</goal>--> <!-- </goals>--> <!-- <configuration>--> <!-- <outputDirectory>--> <!-- 1-running/lib/--> <!-- </outputDirectory>--> <!-- </configuration>--> <!-- </execution>--> <!-- </executions>--> <!-- </plugin>--> <!-- <!–拷贝资源文件 copy-resources–>--> <!-- <plugin>--> <!-- <artifactId>maven-resources-plugin</artifactId>--> <!-- <executions>--> <!-- <execution>--> <!-- <id>copy-resources</id>--> <!-- <phase>package</phase>--> <!-- <goals>--> <!-- <goal>copy-resources</goal>--> <!-- </goals>--> <!-- <configuration>--> <!-- <resources>--> <!-- <resource>--> <!-- <directory>src/main/resources</directory>--> <!-- <!– 指定参与构建的resoures–>--> <!-- <includes>--> <!-- <include>**/*</include>--> <!-- </includes>--> <!-- <filtering>true</filtering>--> <!-- </resource>--> <!-- </resources>--> <!-- <outputDirectory>1-running/config</outputDirectory>--> <!-- </configuration>--> <!-- </execution>--> <!-- </executions>--> <!-- </plugin>--> <!-- </plugins>--> <!-- <resources>--> <!-- <resource>--> <!-- <!– directory 表示取该目录下的文件 –>--> <!-- <directory>libs</directory>--> <!-- <!–targetPath 指定打包到哪个目录下 默认是放到class目录下–>--> <!-- <targetPath>/BOOT-INF/lib/</targetPath>--> <!-- <!– 取符合格式的所有文件 *代表全部 –>--> <!-- <includes>--> <!-- <include>**/*.jar</include>--> <!-- </includes>--> <!-- </resource>--> <!-- <!– 打包jar时解开下方的注释,如果是编译器运行项目时注释掉下方配置,--> <!-- 因为编译器运行项目时,项目会读取外部依赖包的配置文件,--> <!-- 项目本身的配置文件读不到 –>--> <!-- <!–<resource>--> <!-- 把src/main/resources下的所有配置文件加载到打包后的BOOT-INF/classes文件中--> <!-- <directory>src/main/resources</directory>--> <!-- <targetPath>BOOT-INF/classes</targetPath>--> <!-- </resource>–>--> <!-- </resources>--> <!-- </build>--> </project> src/main/java/com/boying/common/WeChatConfig.java
New file @@ -0,0 +1,24 @@ package com.boying.common; /** * @author kdq * @version 1.0.0 * @ClassName WeChatConfig.java * @Description TODO * @createTime 2023年09月11日 08:30:00 */ public class WeChatConfig { /** * 微信服务号APPID */ public static String APPID="wx46e756aed958f895"; /** * appsecret */ public static String APPSECRECT="543d89dae2d5445298f4ef588f41538f"; /** * grant_type */ public static String GRANTTYPE="authorization_code"; } src/main/java/com/boying/controller/OutParkController.java
@@ -71,7 +71,11 @@ page.setTotal(count); return R.ok(page); } //getById @PostMapping("/getById") public Object getById(Long id) { return R.ok(outParkService.getById(id)); } //道闸code @PostMapping("/findByBarrierCode") public Object findById(String code) { @@ -100,6 +104,34 @@ } } //道闸code @PostMapping("/findByBarrierCode2") public Object findById2(String code2) { QueryWrapper<Barrier> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Barrier::getCode2,code2); List<Barrier> all = barrierService.list(wrapper); if(all.size()==0){ return R.failed("未找到该设备"); }else{ Barrier barrier = all.get(0); String carNo = barrier.getCarNo(); OutPark outPark = outParkService.findByCarNoAndBarrierId(carNo,barrier.getId()); if(outPark==null){ return R.failed("未识别到车牌号"); }else{ outPark.setParkName(barrier.getName()); if(outPark.getTime() > 0){ outPark.setTimeStr(DateUtilOther.millisToDayHrMinSec(new Double(outPark.getTime()).longValue())); }else { outPark.setTimeStr("不足一分钟"); } return R.ok(outPark); } } } @PostMapping("/delete") public Object delete(Long id) { outParkService.removeById(id); src/main/java/com/boying/entity/XTYHResult.java
New file @@ -0,0 +1,26 @@ package com.boying.entity; import lombok.Data; /** * @author kdq * @version 1.0.0 * @ClassName XTYHResult.java * @Description TODO * @createTime 2023年09月12日 13:37:00 */ @Data public class XTYHResult { private String respCode; private String respMsg; private String signMethod; private String certId; private String signAture; private String txnOrderId; private String txnOrderTime; private String respTxnSsn; private String respTxnTime; private String settleAmt; private String settleCcyType; private String settleDate; } src/main/java/com/boying/service/OutParkService.java
@@ -36,4 +36,10 @@ int count5(); OutPark findByCarNoAndBarrierId(String carNo, Integer id); OutPark findByPayCode(String payCode); OutPark findByOrderId(String txnOrderId); } src/main/java/com/boying/service/WXService.java
New file @@ -0,0 +1,20 @@ package com.boying.service; import java.util.Map; /** * @author kdq * @version 1.0.0 * @ClassName WXService.java * @Description TODO * @createTime 2023年09月11日 08:35:00 */ public interface WXService { String getOpenIdByCode(String code); /** * 加签操作 */ Map<String,String> addSign(Map<String,Object> map); } src/main/java/com/boying/service/impl/EnterParkServiceImpl.java
@@ -31,11 +31,13 @@ @Override public List<EnterPark> getList(long current, long size, String carNo, Integer parkId, String date) { return enterParkMapper.getList((current-1)*size,size,carNo,parkId,date); //return null; } @Override public long getCount( String carNo, Integer parkId, String date) { return enterParkMapper.getCount(carNo,parkId,date); //return 0; } @Override src/main/java/com/boying/service/impl/OutParkServiceImpl.java
@@ -139,12 +139,42 @@ } @Override public OutPark findByPayCode(String payCode) { QueryWrapper<OutPark> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OutPark::getCode2,payCode) .orderByDesc(OutPark::getCreateTime); List<OutPark> outParks = outParkMapper.selectList(wrapper); if(outParks.size()>0){ return outParks.get(0); }else{ return null; } } @Override public OutPark findByOrderId(String txnOrderId) { QueryWrapper<OutPark> wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(OutPark::getTxnOrderId,txnOrderId) .orderByDesc(OutPark::getCreateTime); List<OutPark> outParks = outParkMapper.selectList(wrapper); if(outParks.size()>0){ return outParks.get(0); }else{ return null; } } @Override public List<OutPark> getList(long current, long size, String carNo, Long parkId, String payCode, String date) { return outParkMapper.getList((current-1)*size,size,carNo,parkId,payCode,date); // return outParkMapper.getList((current-1)*size,size,carNo,parkId,payCode,date); return null; } @Override public long getCount(String carNo, Long parkId, String payCode, String date) { return outParkMapper.getCount(carNo,parkId,payCode,date); // return outParkMapper.getCount(carNo,parkId,payCode,date); return 0; } } src/main/java/com/boying/service/impl/WXServiceImpl.java
New file @@ -0,0 +1,80 @@ package com.boying.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.boying.common.WeChatConfig; import com.boying.service.WXService; import com.boying.util.CommonUtil; import com.ruim.ifsp.signature.IfspSdkSecurityAtureUtil; import com.ruim.ifsp.signature.cert.IfspSdkConstants; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.Map; /** * @author kdq * @version 1.0.0 * @ClassName WXServiceImpl.java * @Description TODO * @createTime 2023年09月11日 08:35:00 */ @Service public class WXServiceImpl implements WXService { private String APPID= WeChatConfig.APPID; private String APPSECRECT= WeChatConfig.APPSECRECT; private String GRANTTYPE= WeChatConfig.GRANTTYPE; @Override public String getOpenIdByCode(String code) { String WX_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; try { if (StringUtils.isBlank(code)) { System.out.println("code为空"); return "code为空"; } else { String requestUrl = WX_URL.replace("APPID", WeChatConfig.APPID).replace("SECRET", WeChatConfig.APPSECRECT) .replace("CODE", code).replace("authorization_code", WeChatConfig.GRANTTYPE); JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null); if (jsonObject != null) { try { // 业务操作 String access_token = jsonObject.getString("access_token"); String openId = jsonObject.getString("openid"); //拉取用户信息 //getUserMsg(access_token, openId); return openId; } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("code无效"); return "code无效"; } } } catch (Exception e) { e.printStackTrace(); } return "error"; } @Override public Map<String, String> addSign(Map<String, Object> map) { /* *加签 */ try { IfspSdkSecurityAtureUtil.RSASigndata(map, "D:\\sa\\certificate09.pfx", "xtbanktest"); } catch (Exception e) { e.printStackTrace(); } System.out.println("signAture: "+map.get(IfspSdkConstants.param_signature)); System.out.println("certId: "+map.get(IfspSdkConstants.param_certId)); Map<String,String> map1 = new HashMap<>(); map1.put("signAture",map.get(IfspSdkConstants.param_signature).toString()); map1.put("certId",map.get(IfspSdkConstants.param_certId).toString()); return map1; } } src/main/java/com/boying/util/CommonUtil.java
New file @@ -0,0 +1,86 @@ package com.boying.util; import com.alibaba.fastjson.JSONObject; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.URL; import java.security.SecureRandom; /** * @author kdq * @version 1.0.0 * @ClassName CommonUtil.java * @Description TODO * @createTime 2023年09月11日 08:53:00 */ public class CommonUtil { /** * 发送https请求 * @param requestUrl 请求地址 * @param requestMethod 请求方式(GET、POST) * @param outputStr 提交的数据 * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) */ public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) { JSONObject jsonObject = null; try { // 创建SSLContext对象,并使用我们指定的信任管理器初始化 TrustManager[] tm = { new MyX509TrustManager() }; SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE"); sslContext.init(null, tm, new SecureRandom()); // 从上述SSLContext对象中得到SSLSocketFactory对象 SSLSocketFactory ssf = sslContext.getSocketFactory(); URL url = new URL(requestUrl); HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); conn.setSSLSocketFactory(ssf); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求方式(GET/POST) conn.setRequestMethod(requestMethod); // 当outputStr不为null时向输出流写数据 if (null != outputStr) { OutputStream outputStream = conn.getOutputStream(); // 注意编码格式 outputStream.write(outputStr.getBytes("UTF-8")); outputStream.close(); } // 从输入流读取返回内容 InputStream inputStream = conn.getInputStream(); InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String str = null; StringBuffer buffer = new StringBuffer(); while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } // 释放资源 bufferedReader.close(); inputStreamReader.close(); inputStream.close(); inputStream = null; conn.disconnect(); //jsonObject = JSONObject.fromObject(buffer.toString()); jsonObject = JSONObject.parseObject(buffer.toString()); } catch (ConnectException ce) { System.out.println("连接超时"); } catch (Exception e) { System.out.println("请求异常"); } return jsonObject; } }