kongdeqiang
2023-09-20 3ef02177eae63e4287e27aa36493d696b53c5621
修改
5个文件已修改
5个文件已添加
460 ■■■■■ 已修改文件
pom.xml 148 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/common/WeChatConfig.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/controller/OutParkController.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/entity/XTYHResult.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/OutParkService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/WXService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/impl/EnterParkServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/impl/OutParkServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/service/impl/WXServiceImpl.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/boying/util/CommonUtil.java 86 ●●●●● 补丁 | 查看 | 原始文档 | 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>-->
<!--                    &lt;!&ndash;不打包资源文件&ndash;&gt;-->
<!--                    <excludes>-->
<!--                        <exclude>*.**</exclude>-->
<!--                    </excludes>-->
<!--                    <archive>-->
<!--                        <manifest>-->
<!--                            <addClasspath>true</addClasspath>-->
<!--                            <classpathPrefix>lib/</classpathPrefix>-->
<!--                            &lt;!&ndash;jar包不包含唯一版本标识&ndash;&gt;-->
<!--                            <useUniqueVersions>false</useUniqueVersions>-->
<!--                            &lt;!&ndash;程序启动类application.java的路径&ndash;&gt;-->
<!--                            <mainClass>com.boying.Application</mainClass>-->
<!--                        </manifest>-->
<!--                        &lt;!&ndash; 指定配置文件目录,这样jar运行时会去找到同目录下的config文件夹下查找 &ndash;&gt;-->
<!--                        <manifestEntries>-->
<!--                            <Class-Path>config/</Class-Path>-->
<!--                        </manifestEntries>-->
<!--                    </archive>-->
<!--                    <outputDirectory>1-running/</outputDirectory>-->
<!--                </configuration>-->
<!--            </plugin>-->
<!--            &lt;!&ndash;拷贝依赖 copy-dependencies&ndash;&gt;-->
<!--            <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>-->
<!--            &lt;!&ndash;拷贝资源文件 copy-resources&ndash;&gt;-->
<!--            <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>-->
<!--                                    &lt;!&ndash; 指定参与构建的resoures&ndash;&gt;-->
<!--                                    <includes>-->
<!--                                        <include>**/*</include>-->
<!--                                    </includes>-->
<!--                                    <filtering>true</filtering>-->
<!--                                </resource>-->
<!--                            </resources>-->
<!--                            <outputDirectory>1-running/config</outputDirectory>-->
<!--                        </configuration>-->
<!--                    </execution>-->
<!--                </executions>-->
<!--            </plugin>-->
<!--        </plugins>-->
<!--        <resources>-->
<!--            <resource>-->
<!--                &lt;!&ndash; directory 表示取该目录下的文件 &ndash;&gt;-->
<!--                <directory>libs</directory>-->
<!--                &lt;!&ndash;targetPath 指定打包到哪个目录下  默认是放到class目录下&ndash;&gt;-->
<!--                <targetPath>/BOOT-INF/lib/</targetPath>-->
<!--                &lt;!&ndash; 取符合格式的所有文件  *代表全部 &ndash;&gt;-->
<!--                <includes>-->
<!--                    <include>**/*.jar</include>-->
<!--                </includes>-->
<!--            </resource>-->
<!--            &lt;!&ndash; 打包jar时解开下方的注释,如果是编译器运行项目时注释掉下方配置,-->
<!--             因为编译器运行项目时,项目会读取外部依赖包的配置文件,-->
<!--             项目本身的配置文件读不到 &ndash;&gt;-->
<!--            &lt;!&ndash;<resource>-->
<!--               把src/main/resources下的所有配置文件加载到打包后的BOOT-INF/classes文件中-->
<!--               <directory>src/main/resources</directory>-->
<!--               <targetPath>BOOT-INF/classes</targetPath>-->
<!--            </resource>&ndash;&gt;-->
<!--        </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;
    }
}