Browse Source

设备显屏与语音播报修改

fulonglong 3 years ago
parent
commit
7273603065

+ 3 - 1
src/main/java/com/charging/chargingparking/dto/ResponseAlarmInfoPlate.java

@@ -2,6 +2,8 @@ package com.charging.chargingparking.dto;
 
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @author 墨鱼_mo
  * @date 2022/5/31 0031 下午 3:54
@@ -17,5 +19,5 @@ public class ResponseAlarmInfoPlate {
 
     private WhiteListOperate white_list_operate;
 
-    private SerialData serialData;
+    private List<SerialData> serialData;
 }

+ 1 - 1
src/main/java/com/charging/chargingparking/dto/SerialData.java

@@ -9,7 +9,7 @@ import lombok.Data;
 @Data
 public class SerialData {
 
-    private String serialChannel;
+    private Integer serialChannel;
 
     private String data;
 

+ 5 - 0
src/main/java/com/charging/chargingparking/entity/ParkingPay.java

@@ -56,6 +56,11 @@ public class ParkingPay implements Serializable {
 
     private String openId;
 
+    /**
+     * 支付码类型(1:场内码,2:道闸码)
+     */
+    private String codePayType;
+
     /**
      * 是否删除
      */

+ 8 - 0
src/main/java/com/charging/chargingparking/mapper/ParkingPayMapper.java

@@ -1,13 +1,21 @@
 package com.charging.chargingparking.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.charging.chargingparking.entity.ParkingPay;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.Map;
 
 /**
  * @Entity com.charging.chargingparking.entity.ParkingPay
  */
+@Repository
 public interface ParkingPayMapper extends BaseMapper<ParkingPay> {
 
+
+    ParkingPay findOneByParam(@Param("searchParams") Map<String,Object> searchParams);
 }
 
 

+ 1 - 1
src/main/java/com/charging/chargingparking/modules/controller/ParkingRecordController.java

@@ -84,7 +84,7 @@ public class ParkingRecordController {
             JSONObject jsonObject = JSONObject.parseObject(jsonObjectStr);
             AlarmInfoPlate alarmInfoPlate = JSONObject.parseObject(jsonObject.getString("AlarmInfoPlate"), AlarmInfoPlate.class);
             resultMap = parkingRecordService.plateRecord(alarmInfoPlate);
-            log.warn(StrUtil.format("车牌:{},发送数据:{}",alarmInfoPlate.getResult().getPlateResult().getLicense(),resultMap));
+            log.warn(StrUtil.format("车牌:{},发送数据:{}",alarmInfoPlate.getResult().getPlateResult().getLicense(),JSONObject.parseObject(JSONObject.toJSONString(resultMap))));
         } catch (Exception ex) {
             log.error(ex.getMessage(), ex);
         }

+ 2 - 1
src/main/java/com/charging/chargingparking/modules/pay/alipay/AlipayController.java

@@ -133,7 +133,7 @@ public class AlipayController {
      * @return
      */
     @PostMapping("/parkingTradeWebPay")
-    public MessageResult parkingTradeWebPay(String id, String openId) {
+    public MessageResult parkingTradeWebPay(String id, String openId,String codePayType) {
 
         MessageResult result = new MessageResult();
 
@@ -165,6 +165,7 @@ public class AlipayController {
             parkingPay.setParkingRecordId(parkingRecord.getId());
             parkingPay.setOutOrderNo(wxPayProperties.getUrlKey() + StringUtils.getOutTradeNo());
             parkingPay.setOpenId(openId);
+            parkingPay.setCodePayType(codePayType);
             parkingPayService.save(parkingPay);
 
             AlipayClient alipayClient = new DefaultAlipayClient(aliPayProperties.getServiceUrl(), aliPayProperties.getAppId(), aliPayProperties.getPrivateKey(), aliPayProperties.getFormat(), aliPayProperties.getInputCharset(), aliPayProperties.getZfbPublicKey(), aliPayProperties.getSignType());

+ 2 - 1
src/main/java/com/charging/chargingparking/modules/pay/wechat/WxPayController.java

@@ -65,7 +65,7 @@ public class WxPayController {
      */
 
     @PostMapping("/parkingWxPay")
-    public MessageResult parkingWxPay(String id, String openId) {
+    public MessageResult parkingWxPay(String id, String openId,String codePayType) {
         MessageResult msgResult = new MessageResult<>();
         try {
             if (StrUtil.isBlank(openId)) {
@@ -99,6 +99,7 @@ public class WxPayController {
             parkingPay.setOutOrderNo(wxPayProperties.getUrlKey() + StringUtils.getOutTradeNo());
             parkingPay.setCreateTime(new Date());
             parkingPay.setOpenId(openId);
+            parkingPay.setCodePayType(codePayType);
             parkingPayService.save(parkingPay);
 
             Map<String, String> params = UnifiedOrderModel

+ 4 - 0
src/main/java/com/charging/chargingparking/service/ParkingPayService.java

@@ -1,10 +1,12 @@
 package com.charging.chargingparking.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.charging.chargingparking.entity.ParkingPay;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.Map;
 
 /**
  *
@@ -12,4 +14,6 @@ import java.util.Date;
 public interface ParkingPayService extends IService<ParkingPay> {
 
     void saveAndUpdateRecord(String outTradeNo, Date payTime, BigDecimal buyerPayAmount,String openId,String transactionNo,String payName) throws Exception;
+
+    ParkingPay findOneByParam(Map<String,Object> map);
 }

+ 35 - 15
src/main/java/com/charging/chargingparking/service/impl/ParkingChannelServiceImpl.java

@@ -1,9 +1,11 @@
 package com.charging.chargingparking.service.impl;
 
+import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.alipay.api.domain.DmActivityShopData;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,6 +16,7 @@ import com.charging.chargingparking.dto.SerialData;
 import com.charging.chargingparking.dto.WhiteListOperate;
 import com.charging.chargingparking.entity.ParkingChannel;
 import com.charging.chargingparking.entity.ParkingFee;
+import com.charging.chargingparking.entity.ParkingPay;
 import com.charging.chargingparking.entity.ParkingRecord;
 import com.charging.chargingparking.service.*;
 import com.charging.chargingparking.mapper.ParkingChannelMapper;
@@ -24,9 +27,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -55,6 +56,9 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
     @Autowired
     private StringUtils stringUtils;
 
+    @Autowired
+    private ParkingPayService parkingPayService;
+
 
     @Override
     public Map<String, Object> receiveDeviceInfo(ReceiveDeviceDTO receiveDeviceDTO) throws Exception {
@@ -86,7 +90,12 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
         WhiteListOperate whiteListOperate = parkingWhiteService.getWhiteList(parkingChannel.getId());
         responseAlarmInfoPlate.setWhite_list_operate(whiteListOperate);
         //处理语音播报内容
-        SerialData serialData =  parkingChannelVoiceService.broadcast(parkingChannel.getId());
+        SerialData serialData0 = parkingChannelVoiceService.broadcast(parkingChannel.getId());
+        List<SerialData> serialData = new ArrayList<>();
+        if (serialData0 != null) {
+            serialData.add(serialData0);
+        }
+
 
         //入口
         if ("1".equals(parkingChannel.getChannelType())) {
@@ -95,28 +104,39 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
         //出口
         else {
             //TODO 处理道闸处扫码支付抬杠,逻辑:条件 道闸id,支付状态,处理状态,时间范围
-
-            QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
-            parkingRecordQueryWrapper.eq("out_channel_id", parkingChannel.getId());
-            parkingRecordQueryWrapper.eq("release_status", "0");
-            parkingRecordQueryWrapper.gt("payment_time", DateUtil.offset(new Date(), DateField.MINUTE, -30));
-            parkingRecordQueryWrapper.eq("pay_status", 20);
-            parkingRecordQueryWrapper.last("LIMIT 1");
-            ParkingRecord parkingRecord = parkingRecordService.getOne(parkingRecordQueryWrapper);
-            if (parkingRecord != null) {
+            Map<String,Object> param = new HashMap<>();
+            param.put("out_channel_id",parkingChannel.getParkId());
+            param.put("release_status","0");
+            param.put("pay_time",DateUtil.offset(new Date(), DateField.MINUTE, -30));
+            param.put("pay_status",20);
+            ParkingPay parkingPay = parkingPayService.findOneByParam(param);
+            if (parkingPay != null) {
+                ParkingRecord parkingRecord = parkingRecordService.getById(parkingPay.getParkingRecordId());
                 //获取此停车场记录应缴费用
                 BigDecimal parkCost = parkingFeeService.parkingCost(parkingRecord);
                 //如果应缴费用和已缴费用相同则开闸
-                if (parkCost.compareTo(parkingRecord.getPayAmount()) == 0){
+                if (parkCost.compareTo(parkingRecord.getPayAmount()) == 0) {
                     parkingRecord.setReleaseStatus("1");
                     parkingRecordService.updateById(parkingRecord);
                     responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
-                    responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.OUTMESSAGE,parkingChannel.getId()));
+                    responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.OUTMESSAGE, parkingChannel.getId()));
+
+
                 }
             }
 
         }
+
+        if (responseAlarmInfoPlate.getSerialData() == null || responseAlarmInfoPlate.getSerialData().size() == 0) {
+            responseAlarmInfoPlate.setSerialData(serialData);
+        }
+
         map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+
+        if (responseAlarmInfoPlate.getSerialData() != null && responseAlarmInfoPlate.getSerialData().size() != 0) {
+            log.warn(StrUtil.format("通道:{},轮训发送数据:{}", parkingChannel.getChannelName(), JSONObject.parseObject(JSONObject.toJSONString(map))));
+        }
+
         return map;
     }
 }

+ 5 - 2
src/main/java/com/charging/chargingparking/service/impl/ParkingChannelVoiceServiceImpl.java

@@ -37,14 +37,17 @@ public class ParkingChannelVoiceServiceImpl extends ServiceImpl<ParkingChannelVo
             if (parkingChannelVoice != null && StrUtil.isNotBlank(parkingChannelVoice.getVoiceContent())){
                 byte[] data = LedTcProtocol.sendVoice(parkingChannelVoice.getVoiceContent());
                 serialData.setData(com.charging.chargingparking.utils.Base64.encode(data));
-                serialData.setSerialChannel("0");
+                serialData.setSerialChannel(0);
                 serialData.setDataLen(data.length);
 
                 parkingChannelVoice.setBroadcastFlag(true);
                 parkingChannelVoice.setBroadcastTime(new Date());
                 updateById(parkingChannelVoice);
+                return serialData;
+            }else {
+                return null;
             }
-            return serialData;
+
         }catch (Exception ex){
             log.error(ex.getMessage(),ex);
         }

+ 9 - 0
src/main/java/com/charging/chargingparking/service/impl/ParkingPayServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.Map;
 
 /**
  *
@@ -25,6 +26,9 @@ public class ParkingPayServiceImpl extends ServiceImpl<ParkingPayMapper, Parking
     @Autowired
     private ParkingRecordService parkingRecordService;
 
+    @Autowired
+    private ParkingPayMapper parkingPayMapper;
+
     @Override
     public void saveAndUpdateRecord(String outTradeNo, Date payTime, BigDecimal buyerPayAmount,String openId,String transactionNo,String payName) throws Exception {
         QueryWrapper<ParkingPay> parkingPayQueryWrapper = new QueryWrapper<>();
@@ -51,6 +55,11 @@ public class ParkingPayServiceImpl extends ServiceImpl<ParkingPayMapper, Parking
         parkingRecord.setPayAmount(parkingRecord.getPayAmount().add(buyerPayAmount));
         parkingRecordService.updateById(parkingRecord);
     }
+
+    @Override
+    public ParkingPay findOneByParam(Map<String,Object> map) {
+        return parkingPayMapper.findOneByParam(map);
+    }
 }
 
 

+ 2 - 18
src/main/java/com/charging/chargingparking/service/impl/ParkingRecordServiceImpl.java

@@ -98,7 +98,6 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                 parkingRecord.setCarNum(license);
                 parkingRecord.setPlateId(plateId);
                 parkingRecord.setInParkingTime(DateUtil.parse(dataStr));
-            //    parkingRecord.setSerialNumber(wxPayProperties.getUrlKey()+StringUtils.getOutTradeNo());
                 parkingRecord.setProductTheme("停车费");
                 parkingRecord.setCarType(alarmInfoPlate.getResult().getPlateResult().getType().toString());
                 parkingRecord.setCType(alarmInfoPlate.getResult().getPlateResult().getTriggerType().toString());
@@ -120,7 +119,6 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                 responseAlarmInfoPlate.setPlateid(parkingRecord.getPlateId());
                 responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.INMESSAGE,parkingChannel.getId()));
                 map.put(ParkingConstant.RESPONSEKEY,responseAlarmInfoPlate);
-                return map;
             }
 
         }
@@ -142,7 +140,6 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                 parkingRecord.setPlateId(plateId);
 
                 parkingRecord.setOutParkingTime(DateUtil.parse(dataStr));
-             //   parkingRecord.setSerialNumber(wxPayProperties.getUrlKey()+StringUtils.getOutTradeNo());
                 parkingRecord.setProductTheme("停车费");
                 parkingRecord.setCarType(alarmInfoPlate.getResult().getPlateResult().getType().toString());
                 parkingRecord.setCType(alarmInfoPlate.getResult().getPlateResult().getTriggerType().toString());
@@ -158,18 +155,13 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                     parkingRecord.setOutImage(fileUrl);
                 }
                 parkingRecord.setReleaseStatus("1");
-          //      parkingRecord.setPayStatus(20);
-           //     parkingRecord.setPaymentTime(new Date());
-           //     parkingRecord.setPayType("free");
                 save(parkingRecord);
 
 
                 responseAlarmInfoPlate.setInfo("ok");
                 responseAlarmInfoPlate.setPlateid(parkingRecord.getPlateId());
                 responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.OUTMESSAGE,parkingChannel.getId()));
-           //     responseAlarmInfoPlate.setContent(ParkingConstant.OUTMESSAGE);
                 map.put(ParkingConstant.RESPONSEKEY,responseAlarmInfoPlate);
-                return map;
             }
             //已存在记录,计算缴费金额
             else {
@@ -194,20 +186,12 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                 //获取车辆应缴费金额
                 BigDecimal parkingCost = parkingFeeService.parkingCost(parkingRecord0);
 
-
-
                 if (parkingCost.subtract(parkingRecord0.getPayAmount()).compareTo(BigDecimal.ZERO) ==0){
                     responseAlarmInfoPlate.setInfo("ok");
                     responseAlarmInfoPlate.setPlateid(parkingRecord0.getPlateId());
+                    responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.OUTMESSAGE,parkingChannel.getId()));
                     map.put(ParkingConstant.RESPONSEKEY,responseAlarmInfoPlate);
-
-                    /*if (parkingRecord0.getPayStatus() == 10){
-                        parkingRecord0.setPayType("free");
-                        parkingRecord0.setPaymentTime(new Date());
-                        parkingRecord0.setPayStatus(20);
-                    }*/
                     parkingRecord0.setReleaseStatus("1");
-                    return map;
                 }else {
                     parkingRecord0.setTotalAmount(parkingCost);
                 }
@@ -220,7 +204,7 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                 parkingMemberService.cloudDelete(parkingChannel.getParkId(),license);
             }
         }
-        return null;
+        return map;
     }
 
     @Override

+ 1 - 1
src/main/java/com/charging/chargingparking/utils/LedTcProtocol.java

@@ -44,7 +44,7 @@ public class LedTcProtocol {
         area[11] = 0x00;
 
         //00:显示特效,0立即显示,1由右向左滚动,2自动换行显示,3向上滚动进入,4分屏显示
-        area[12] = 0x00;
+        area[12] = 0x01;
 
         //00:滚动速度,只有特效为滚动时才生效,取值范围0~10;
         area[13] = 0x00;

+ 8 - 8
src/main/java/com/charging/chargingparking/utils/StringUtils.java

@@ -14,9 +14,7 @@ import sun.misc.BASE64Decoder;
 
 import java.io.ByteArrayInputStream;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.UUID;
+import java.util.*;
 
 /**
  * @author 墨鱼_mo
@@ -98,15 +96,17 @@ public final class StringUtils extends StrUtil {
         return sb.toString();
     }
 
-    public SerialData getSerialData(String content,String channelId){
-        SerialData serialData = new SerialData();
+    public List<SerialData> getSerialData(String content, String channelId){
+        List<SerialData> serialData = new ArrayList<>();
+        SerialData serialData0 = new SerialData();
         try{
             //显屏内容
             byte[] data = LedTcProtocol.sendText(content);
-            serialData.setSerialChannel("0");
-            serialData.setData(com.charging.chargingparking.utils.Base64.encode(data));
-            serialData.setDataLen(data.length);
+            serialData0.setSerialChannel(0);
+            serialData0.setData(com.charging.chargingparking.utils.Base64.encode(data));
+            serialData0.setDataLen(data.length);
 
+            serialData.add(serialData0);
             if (StrUtil.isNotBlank(channelId)){
                 //保存要语音播报的内容
                 ParkingChannelVoice parkingChannelVoice = new ParkingChannelVoice();

+ 18 - 5
src/main/java/com/charging/chargingparking/utils/WeixinUtil.java

@@ -1,14 +1,19 @@
 package com.charging.chargingparking.utils;
 
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpUtil;
+import com.charging.chargingparking.constant.ParkingConstant;
 import com.charging.chargingparking.dto.AccessToken;
+import com.charging.chargingparking.dto.ResponseAlarmInfoPlate;
 import com.charging.chargingparking.dto.UserInfo;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONException;
 import net.sf.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
@@ -23,6 +28,8 @@ import java.net.URL;
 import java.security.MessageDigest;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -31,9 +38,12 @@ import java.util.stream.Collectors;
  * @author lt
  * @date 2013-08-09
  */
+@Component
 public class WeixinUtil {
 	private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);
 
+	private static StringUtils stringUtils;
+
 	public static final String send_template = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
 
 	// 获取access_token的接口地址(GET) 限200(次/天),可以在配置文件中修改
@@ -413,10 +423,13 @@ public class WeixinUtil {
 	}
 
 	public static void main(String[] args) {
-		JSONObject sendData = JSONObject.fromObject("{\"first\":{\"value\":\"尊敬的用户,本次充电已结束!\",\"color\":\"#173177\"},\"keyword1\":{\"value\":\"地下停车场充电桩\",\"color\":\"#173177\"},\"keyword2\":{\"value\":\"2022-03-08 17:37:50至2022-03-08 17:44:41\",\"color\":\"#173177\"},\"keyword3\":{\"value\":\"6分钟\"},\"keyword4\":{\"value\":\"0.25元(账户余额:98.5元)\"}}");
-
-		sendTemplateMessage("wx7e70eb62a8459869",
-				"909d17e353268da57c4f18cc09798049",
-				"4gI6WtuROmqdnWEo0J9a6PO2sOrWIRr3_jqPcqbyhRM","oHjCawsxTJkxixR74OVp7aCKahj8",sendData,null);
+		Map<String, Object> resultMap = new HashMap<>();
+		ResponseAlarmInfoPlate responseAlarmInfoPlate = new ResponseAlarmInfoPlate();
+		responseAlarmInfoPlate.setInfo("ok");
+		responseAlarmInfoPlate.setPlateid(1);
+		responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.OUTMESSAGE,"1"));
+		resultMap.put(ParkingConstant.RESPONSEKEY,responseAlarmInfoPlate);
+
+		log.warn(StrUtil.format("车牌:{},发送数据:{}",com.alibaba.fastjson.JSONObject.parseObject(com.alibaba.fastjson.JSONObject.toJSONString(resultMap))));
 	}
 }

+ 28 - 1
src/main/resources/mapper/ParkingPayMapper.xml

@@ -14,6 +14,7 @@
             <result property="payName" column="pay_name" jdbcType="VARCHAR"/>
             <result property="payTime" column="pay_time" jdbcType="TIMESTAMP"/>
             <result property="openId" column="open_id" jdbcType="VARCHAR"/>
+            <result property="codePayType" column="code_pay_type" jdbcType="VARCHAR"/>
             <result property="delFlag" column="del_flag" jdbcType="BIT"/>
             <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
             <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
@@ -24,7 +25,33 @@
     <sql id="Base_Column_List">
         id,parking_record_id,pay_amount,
         out_order_no,transaction_no,pay_status,pay_name,
-        pay_time,open_id,del_flag,create_by,
+        pay_time,open_id,code_pay_type,del_flag,create_by,
         create_time,update_by,update_time
     </sql>
+    <select id="findOneByParam" parameterType="hashmap" resultMap="BaseResultMap">
+        <![CDATA[
+        select  a.*
+        from base_parking_pay a
+                 left join base_parking_record b
+                           on a.parking_record_id = b.id
+
+        ]]>
+        <where>
+            a.del_flag = 0
+            and b.del_flag = 0
+            <if test="searchParams.out_channel_id != null">
+                and b.out_channel_id = #{searchParams.out_channel_id}
+            </if>
+            <if test="searchParams.release_status != null">
+                and b.release_status = #{searchParams.release_status}
+            </if>
+            <if test="searchParams.pay_time != null">
+                and a.pay_time >= #{searchParams.pay_time}
+            </if>
+            <if test="searchParams.pay_status != null">
+                and a.pay_status = #{searchParams.pay_status}
+            </if>
+        </where>
+            limit 1
+    </select>
 </mapper>