Просмотр исходного кода

添加停车支付宝jsapi支付

fllmoyu 5 лет назад
Родитель
Сommit
f697a14b81

+ 18 - 0
common/src/main/java/com/jpsoft/smart/config/ParkingConfig.java

@@ -0,0 +1,18 @@
+package com.jpsoft.smart.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-13 14:47
+ */
+@Component
+@ConfigurationProperties(prefix = "parking")
+@Data
+public class ParkingConfig {
+
+    private String userName;
+    private String ip;
+}

+ 16 - 0
common/src/main/java/com/jpsoft/smart/modules/base/dao/CompanyPaymentInfoDAO.java

@@ -0,0 +1,16 @@
+package com.jpsoft.smart.modules.base.dao;
+
+import com.jpsoft.smart.modules.base.entity.CompanyPaymentInfo;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 11:21
+ */
+@Repository
+public interface CompanyPaymentInfoDAO {
+
+    CompanyPaymentInfo findByCompanyId(String companyId);
+
+    CompanyPaymentInfo get(Long i);
+}

+ 24 - 0
common/src/main/java/com/jpsoft/smart/modules/base/dao/ParkingRecordDAO.java

@@ -0,0 +1,24 @@
+package com.jpsoft.smart.modules.base.dao;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+import com.jpsoft.smart.modules.base.entity.ParkingRecord;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 9:40
+ */
+@Repository
+public interface ParkingRecordDAO {
+
+    int insert(ParkingRecord parkingRecord);
+
+    ParkingRecord  findById(@Param("id")String id);
+
+    void update(ParkingRecord parkingRecord);
+
+    ParkingRecord  findBySerialNumber(@Param("serialNumber")String serialNumber);
+
+
+}

+ 40 - 0
common/src/main/java/com/jpsoft/smart/modules/base/entity/CompanyPaymentInfo.java

@@ -0,0 +1,40 @@
+package com.jpsoft.smart.modules.base.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.swing.*;
+import java.util.Date;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 9:33
+ */
+@Data
+@ApiModel(value = "base_company_payment_info的实体类")
+public class CompanyPaymentInfo {
+
+
+    private Long id;
+    private String companyId;
+    private String parkingWechatNotifyUrl;
+    private String parkingAlipayNotifyUrl;
+    private String appId;
+    private String mchId;
+    private String subAppId;
+    private String subAppSecret;
+    private String subMchId;
+    private String appAuthToken;
+    private String createBy;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+    private String updateBy;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+    private Boolean delFlag;
+
+}

+ 49 - 0
common/src/main/java/com/jpsoft/smart/modules/base/entity/ParkingRecord.java

@@ -0,0 +1,49 @@
+package com.jpsoft.smart.modules.base.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 9:15
+ */
+@Data
+public class ParkingRecord {
+
+
+    private String id;
+    private String companyId;
+    private String carNum;
+    private String parkingDeviceNo;
+    private BigDecimal parkingTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date inParkingTime;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date paymentTime;
+    private BigDecimal payAmount;
+    private String payStatus;
+    private String payType;
+    private String serialNumber;
+    private String transactionNumber;
+    private String productTheme;
+    private String openId;
+    private String createBy;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+    private String updateBy;
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+    private Boolean delFlag;
+}

+ 12 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/CompanyPaymentInfoService.java

@@ -0,0 +1,12 @@
+package com.jpsoft.smart.modules.base.service;
+
+import com.jpsoft.smart.modules.base.entity.CompanyPaymentInfo;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 11:19
+ */
+public interface CompanyPaymentInfoService {
+
+    CompanyPaymentInfo findByCompanyId(String companyId);
+}

+ 17 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/ParkingRecordService.java

@@ -0,0 +1,17 @@
+package com.jpsoft.smart.modules.base.service;
+
+import com.jpsoft.smart.modules.base.entity.ParkingRecord;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 9:37
+ */
+public interface ParkingRecordService {
+    void insert(ParkingRecord parkingRecord);
+
+    ParkingRecord get(String id);
+
+    void update(ParkingRecord parkingRecord);
+
+    ParkingRecord findBySerialNumber(String outTradeNo);
+}

+ 27 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/CompanyPaymentInfoServiceImpl.java

@@ -0,0 +1,27 @@
+package com.jpsoft.smart.modules.base.service.impl;
+
+import com.jpsoft.smart.modules.base.dao.CompanyInfoDAO;
+import com.jpsoft.smart.modules.base.dao.CompanyPaymentInfoDAO;
+import com.jpsoft.smart.modules.base.entity.CompanyPaymentInfo;
+import com.jpsoft.smart.modules.base.service.CompanyPaymentInfoService;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 11:19
+ */
+@Transactional
+@Component(value="CompanyPaymentInfoService")
+public class CompanyPaymentInfoServiceImpl implements CompanyPaymentInfoService {
+
+    @Resource(name="companyPaymentInfoDAO")
+    private CompanyPaymentInfoDAO companyPaymentInfoDAO;
+
+    @Override
+    public CompanyPaymentInfo findByCompanyId(String companyId) {
+        return companyPaymentInfoDAO.findByCompanyId(companyId);
+    }
+}

+ 41 - 0
common/src/main/java/com/jpsoft/smart/modules/base/service/impl/ParkingRecordServiceImpl.java

@@ -0,0 +1,41 @@
+package com.jpsoft.smart.modules.base.service.impl;
+
+import com.jpsoft.smart.modules.base.dao.ParkingRecordDAO;
+import com.jpsoft.smart.modules.base.entity.ParkingRecord;
+import com.jpsoft.smart.modules.base.service.ParkingRecordService;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-14 9:38
+ */
+@Transactional
+@Component(value="parkingRecordService")
+public class ParkingRecordServiceImpl implements ParkingRecordService {
+
+    @Resource(name="parkingRecordDAO")
+    private ParkingRecordDAO parkingRecordDAO;
+
+    @Override
+    public void insert(ParkingRecord parkingRecord) {
+        parkingRecordDAO.insert(parkingRecord);
+    }
+
+    @Override
+    public ParkingRecord get(String id) {
+        return parkingRecordDAO.findById(id);
+    }
+
+    @Override
+    public void update(ParkingRecord parkingRecord) {
+        parkingRecordDAO.update(parkingRecord);
+    }
+
+    @Override
+    public ParkingRecord findBySerialNumber(String outTradeNo) {
+        return parkingRecordDAO.findBySerialNumber(outTradeNo);
+    }
+}

+ 87 - 0
common/src/main/java/com/jpsoft/smart/modules/common/utils/ParkApiUtil.java

@@ -0,0 +1,87 @@
+package com.jpsoft.smart.modules.common.utils;
+
+import cn.hutool.http.HttpRequest;
+import com.jpsoft.smart.config.ParkingConfig;
+import com.jpsoft.smart.modules.common.service.IRedisService;
+import net.sf.json.JSONObject;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2019-9-17 14:43
+ */
+@Component
+public class ParkApiUtil {
+
+    @Autowired
+    private ParkingConfig parkingConfig;
+
+    @Autowired
+    private IRedisService redisService;
+
+
+    public String getXToken(){
+
+        String body = HttpRequest.get(parkingConfig.getIp() +"/ipms/subSystem/generate/token?userName=" + parkingConfig.getUserName()).execute().body();
+        JSONObject jsonbody = JSONObject.fromObject(body);
+        String data = jsonbody.getString("data");
+
+        String accessToken = JSONObject.fromObject(data).getString("accessToken");
+        if (StringUtils.isNotBlank(accessToken)){
+
+            redisService.put("accessToken","accessToken",accessToken,86400L);
+
+            return accessToken;
+
+
+        }
+        else {
+            return "";
+        }
+    }
+
+    public JSONObject httpRequest(String url, String accessToken,String method,HashMap map){
+
+        if (method.equals("POST")){
+
+           /* Map<String,Object> dataMap = new HashMap<>();
+            dataMap.put("carNum","鄂DA9883");
+            dataMap.put("queryType",1);*/
+            String jsonMapString = com.alibaba.fastjson.JSONObject.toJSONString(map);
+
+            HashMap<String,String> heardMap = new HashMap<>();
+            heardMap.put("accessToken",accessToken);
+            heardMap.put("Content-Type","application/json;charset=UTF-8");
+
+
+
+            String body = HttpRequest.post(parkingConfig.getIp()+url).addHeaders(heardMap).body(jsonMapString).execute().body();
+            JSONObject jsonbody = JSONObject.fromObject(body);
+            return jsonbody;
+
+
+
+
+
+
+        }
+        else {
+
+            String body = HttpRequest.get(parkingConfig.getIp()+"/ipms/device/sluice/channel").header("accessToken",accessToken).form(map).execute().body();
+            return null;
+        }
+
+
+
+
+
+
+
+    }
+
+
+}

+ 34 - 0
common/src/main/resources/mapper/base/CompanyPaymentInfo.xml

@@ -0,0 +1,34 @@
+<?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.jpsoft.smart.modules.base.dao.CompanyPaymentInfoDAO">
+
+    <resultMap id="CompanyPaymentInfoMap" type="com.jpsoft.smart.modules.base.entity.CompanyPaymentInfo">
+        <id property="id" column="id_" />
+        <result property="createBy" column="create_by" />
+        <result property="createTime" column="create_time" />
+        <result property="updateBy" column="update_by" />
+        <result property="updateTime" column="update_time" />
+        <result property="delFlag" column="del_flag" />
+        <result property="companyId" column="company_id" />
+        <result property="parkingWechatNotifyUrl" column="parking_wechat_notify_url" />
+        <result property="parkingAlipayNotifyUrl" column="parking_alipay_notify_url" />
+        <result property="appId" column="app_id" />
+        <result property="mchId" column="mch_id" />
+        <result property="subAppId" column="sub_app_id" />
+        <result property="subAppSecret" column="sub_app_secret" />
+        <result property="subMchId" column="sub_mch_id" />
+        <result property="appAuthToken" column="app_auth_token" />
+    </resultMap>
+
+    <select id="findByCompanyId" resultMap="CompanyPaymentInfoMap">
+        <![CDATA[select * from base_company_payment_info where company_id = #{companyId} and del_flag = 0
+        ]]>
+
+
+    </select>
+    <select id="get" resultMap="CompanyPaymentInfoMap">
+        <![CDATA[
+        select * from base_company_payment_info where id_ = #{id} and del_flag = 0
+        ]]>
+    </select>
+</mapper>

+ 157 - 0
common/src/main/resources/mapper/base/ParkingRecord.xml

@@ -0,0 +1,157 @@
+<?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.jpsoft.smart.modules.base.dao.ParkingRecordDAO">
+
+    <sql id="Base_Column_List">
+	id_,
+	create_by,
+	create_time,
+	update_by,
+	update_time,
+	del_flag,
+	serial_number,
+	pay_amount,
+	pay_type,
+	company_id,
+	car_num,
+	parking_device_no,
+	parking_time,
+	in_parking_time,
+	payment_time,
+	pay_status,
+	open_id,
+	transaction_number,
+	product_theme
+</sql>
+    <resultMap id="ParkingRecordMap" type="com.jpsoft.smart.modules.base.entity.ParkingRecord">
+        <id property="id" column="id_" />
+        <result property="createBy" column="create_by" />
+        <result property="createTime" column="create_time" />
+        <result property="updateBy" column="update_by" />
+        <result property="updateTime" column="update_time" />
+        <result property="delFlag" column="del_flag" />
+        <result property="serialNumber" column="serial_number" />
+        <result property="payAmount" column="pay_amount" />
+        <result property="payType" column="pay_type" />
+        <result property="companyId" column="company_id" />
+        <result property="carNum" column="car_num" />
+        <result property="parkingDeviceNo" column="parking_device_no" />
+        <result property="parkingTime" column="parking_time" />
+        <result property="inParkingTime" column="in_parking_time" />
+        <result property="paymentTime" column="payment_time" />
+        <result property="payStatus" column="pay_status" />
+        <result property="openId" column="open_id" />
+        <result property="transactionNumber" column="transaction_number" />
+        <result property="productTheme" column="product_theme"/>
+    </resultMap>
+    <insert id="insert" parameterType="com.jpsoft.smart.modules.base.entity.ParkingRecord">
+
+        <![CDATA[
+		insert into base_parking_record
+	    (id_,create_by,create_time,update_by,update_time,del_flag,serial_number,pay_amount,pay_type,company_id,car_num,parking_device_no,
+	    parking_time,in_parking_time,payment_time,pay_status,open_id,transaction_number,product_theme
+	    )
+		values
+		(
+			#{id,jdbcType=VARCHAR}
+			,#{createBy,jdbcType=VARCHAR}
+			,#{createTime,jdbcType= TIMESTAMP }
+			,#{updateBy,jdbcType=VARCHAR}
+			,#{updateTime,jdbcType= TIMESTAMP }
+			,#{delFlag,jdbcType= NUMERIC }
+			,#{serialNumber,jdbcType=VARCHAR}
+			,#{payAmount,jdbcType= DECIMAL }
+			,#{payType,jdbcType= VARCHAR }
+			,#{companyId,jdbcType=VARCHAR}
+			,#{carNum,jdbcType=VARCHAR}
+			,#{parkingDeviceNo,jdbcType=VARCHAR}
+			,#{parkingTime,jdbcType=DECIMAL}
+			,#{inParkingTime,jdbcType=TIMESTAMP}
+			,#{paymentTime,jdbcType=TIMESTAMP}
+			,#{payStatus,jdbcType=VARCHAR}
+			,#{openId,jdbcType=VARCHAR}
+			,#{transactionNumber,jdbcType=VARCHAR}
+			,#{productTheme,jdbcType=VARCHAR}
+		)
+	]]>
+    </insert>
+
+<!--auto generated by MybatisCodeHelper on 2020-04-14-->
+    <select id="findById" resultMap="ParkingRecordMap">
+        select
+        <include refid="Base_Column_List"/>
+        from base_parking_record
+        where id_=#{id} and del_flag is false
+    </select>
+    <update id="update" parameterType="com.jpsoft.smart.modules.base.entity.ParkingRecord">
+        update base_parking_record
+        <set>
+            <if test="createBy!=null">
+                create_by=#{createBy,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime!=null">
+                create_time=#{createTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="updateBy!=null">
+                update_by=#{updateBy,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime!=null">
+                update_time=#{updateTime,jdbcType= TIMESTAMP },
+            </if>
+            <if test="delFlag!=null">
+                del_flag=#{delFlag,jdbcType= NUMERIC },
+            </if>
+            <if test="serialNumber!=null">
+                serial_number=#{serialNumber,jdbcType=VARCHAR},
+            </if>
+            <if test="payAmount !=null">
+                pay_amount=#{payAmount,jdbcType=DECIMAL},
+            </if>
+            <if test="payType !=null">
+                pay_type=#{payType,jdbcType=VARCHAR},
+            </if>
+            <if test="companyId !=null">
+                company_id=#{companyId,jdbcType=VARCHAR},
+            </if>
+            <if test="carNum !=null">
+                car_num=#{carNum,jdbcType=VARCHAR},
+            </if>
+            <if test="parkingDeviceNo !=null">
+                parking_device_no=#{parkingDeviceNo,jdbcType=VARCHAR},
+            </if>
+
+            <if test="parkingTime !=null">
+                parking_time=#{parkingTime,jdbcType=DECIMAL},
+            </if>
+            <if test="inParkingTime !=null">
+                in_parking_time=#{inParkingTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="paymentTime !=null">
+                payment_time=#{paymentTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="payStatus !=null">
+                pay_status=#{payStatus,jdbcType=VARCHAR},
+            </if>
+            <if test="openId !=null">
+                open_id=#{openId,jdbcType=VARCHAR},
+            </if>
+            <if test="transactionNumber !=null">
+                transaction_number=#{transactionNumber,jdbcType=VARCHAR},
+            </if>
+            <if test="productTheme !=null">
+                product_theme=#{productTheme,jdbcType=VARCHAR},
+            </if>
+        </set>
+        where id_=#{id}
+    </update>
+
+<!--auto generated by MybatisCodeHelper on 2020-04-14-->
+    <select id="findBySerialNumber" resultMap="ParkingRecordMap">
+        select
+        <include refid="Base_Column_List"/>
+        from base_parking_record
+        where serial_number=#{serialNumber} and del_flag is false
+    </select>
+
+
+</mapper>

+ 68 - 0
web/src/main/java/com/jpsoft/smart/modules/pay/properties/ParkAliPayProperties.java

@@ -0,0 +1,68 @@
+package com.jpsoft.smart.modules.pay.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-16 15:05
+ */
+@Data
+@ConfigurationProperties(prefix = "parkalipay")
+@Component
+public class ParkAliPayProperties {
+
+    /**
+     * 支付宝网关
+     */
+    private String serviceUrl;
+
+    /**
+     * 应用appid
+     */
+    private String appId;
+
+    /**
+     * 应用私钥
+     */
+    private String privateKey;
+
+    /**
+     * 支付宝公钥
+     */
+    private String zfbPublicKey;
+
+    /**
+     * 编码
+     */
+    private String inputCharset;
+
+    /**
+     * 服务商id
+     */
+    private String mchId;
+
+    /**
+     * 授权token
+     */
+    private String appAuthToken;
+
+    /**
+     * 加密方式
+     */
+    private String signType;
+
+    /**
+     * 支付回调地址
+     */
+    private String notifyUrl;
+
+    /**
+     * 商品描述
+     */
+    private String body;
+
+    private String format;
+
+}

+ 34 - 0
web/src/test/java/com/jpsoft/smart/ParkTest.java

@@ -0,0 +1,34 @@
+package com.jpsoft.smart;
+
+import com.jpsoft.smart.modules.base.dao.CompanyPaymentInfoDAO;
+import com.jpsoft.smart.modules.base.entity.CompanyPaymentInfo;
+import com.jpsoft.smart.modules.base.service.CompanyPaymentInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2020-4-15 12:06
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class ParkTest {
+
+    @Autowired
+    private CompanyPaymentInfoService companyPaymentInfoService;
+
+    @Autowired
+    private CompanyPaymentInfoDAO companyPaymentInfoDAO;
+
+
+    @Test
+    public void getCompanyPaymentInfo(){
+        CompanyPaymentInfo companyPaymentInfo = companyPaymentInfoDAO.findByCompanyId("ffc75ad9-1501-47f6-821e-4bd68045214");
+      //  CompanyPaymentInfo companyPaymentInfo = companyPaymentInfoDAO.get(1L);
+        System.out.println(companyPaymentInfo);
+    }
+}