Sfoglia il codice sorgente

停车核心业务提交

hbjzws 11 mesi fa
parent
commit
8c168af073

+ 1 - 0
src/main/java/com/charging/chargingparking/config/WebMvcConfig.java

@@ -68,6 +68,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
 				.excludePathPatterns("/parkingMember/getParkingInfo")
 				.excludePathPatterns("/parkingMember/addParkingMember")
 				.excludePathPatterns("/parkingMember/addCoupon")
+				.excludePathPatterns("/parkingMember/importTmpParkingMember")
 				.excludePathPatterns("/parkingMemberInfo/userGetCarMember")
 				.excludePathPatterns("/parkingMemberInfo/validQrCode")
 				.excludePathPatterns("/parkingMemberInfo/userGetCarDetail")

+ 4 - 0
src/main/java/com/charging/chargingparking/dto/ParkingCostDTO.java

@@ -30,4 +30,8 @@ public class ParkingCostDTO {
      * 每小时费用
      */
     private BigDecimal hourCost;
+    /**
+     * 停车充电优惠时长
+     */
+    private Integer disTimes;
 }

+ 4 - 0
src/main/java/com/charging/chargingparking/dto/ParkingDetailDTO.java

@@ -46,5 +46,9 @@ public class ParkingDetailDTO {
     //每小时费用
     private BigDecimal hourCost;
 
+    /**
+     * 停车充电优惠时长
+     */
+    private String disTimesStr;
 
 }

+ 2 - 1
src/main/java/com/charging/chargingparking/entity/EcCoupon.java

@@ -21,7 +21,8 @@ public class EcCoupon implements Serializable {
      */
     @TableId
     private String id;
-
+    @TableField(exist = false)
+    private String parkName;
     /**
      * 停车场id
      */

+ 140 - 0
src/main/java/com/charging/chargingparking/modules/backController/EcCouponController.java

@@ -0,0 +1,140 @@
+package com.charging.chargingparking.modules.backController;
+
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.resource.ClassPathResource;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.charging.chargingparking.dto.AddParkingMember;
+import com.charging.chargingparking.dto.MessageResult;
+import com.charging.chargingparking.dto.PojoUtils;
+import com.charging.chargingparking.dto.WhiteDTO;
+import com.charging.chargingparking.entity.*;
+import com.charging.chargingparking.modules.common.dto.Sort;
+import com.charging.chargingparking.service.*;
+import com.charging.chargingparking.sys.service.UserService;
+import com.charging.chargingparking.utils.StringUtils;
+
+import com.google.common.collect.Maps;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+@RestController
+@Slf4j
+@RequestMapping("/ecCoupon")
+public class EcCouponController {
+
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+
+    @Autowired
+    private EcCouponService ecCouponService;
+
+
+
+    @ApiOperation(value = "删除")
+    @PostMapping("delete/{id}")
+    public MessageResult<Boolean> delete(@PathVariable("id") String id, @RequestAttribute String subject) {
+        MessageResult<Boolean> msgResult = new MessageResult<>();
+        try {
+            EcCoupon ecCoupon = ecCouponService.getById(id);
+            ecCoupon.setDelFlag(true);
+            ecCoupon.setUpdateBy(subject);
+            ecCoupon.setUpdateTime(new Date());
+            ecCouponService.updateById(ecCoupon);
+            boolean flag = ecCouponService.removeById(ecCoupon);
+            msgResult.setResult(true);
+            msgResult.setData(flag);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+        return msgResult;
+    }
+    @Autowired
+    private ParkingInfoService parkingInfoService;
+    @ApiOperation(value = "列表")
+    @RequestMapping(value = "pageList", method = RequestMethod.POST)
+    public MessageResult<Object> pageList(
+            String parkId, String carNum, String rangeDate,
+            @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+            @RequestParam(value = "pageSize", defaultValue = "20") int pageSize,
+            @RequestAttribute String subject) {
+        //当前用户ID
+        System.out.println(subject);
+        MessageResult<Object> msgResult = new MessageResult<>();
+        QueryWrapper<EcCoupon> queryWrapper = new QueryWrapper<>();
+
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("a.create_time", "desc"));
+
+        if (StringUtils.isNotEmpty(parkId)) {
+            queryWrapper.eq("park_id",parkId);
+        }
+
+        if (StringUtils.isNotEmpty(carNum)) {
+            queryWrapper.like("car_num","%"+carNum+"%");
+        }
+        if (StringUtils.isNotEmpty(rangeDate)) {
+            String[] timeRangeArray = rangeDate.split(",");
+            String startTime = "";
+            String endTime = "";
+            if (timeRangeArray.length == 1) {
+                startTime = timeRangeArray[0];
+                startTime += " 00:00:00";
+            } else if (timeRangeArray.length == 2) {
+                startTime = timeRangeArray[0];
+                endTime = timeRangeArray[1];
+                startTime += " 00:00:00";
+                endTime += " 23:59:59";
+            }
+            queryWrapper.lt("create_time",endTime);
+            queryWrapper.gt("create_time",startTime);
+        }
+        queryWrapper.orderByDesc("create_time");
+        Page<EcCoupon> page = ecCouponService.page(new Page<>(pageIndex,pageSize),queryWrapper);
+
+        List<EcCoupon> list =new ArrayList<>();
+        for (EcCoupon ecCoupon : page.getRecords()) {
+            ParkingInfo parkingInfo = parkingInfoService.getById(ecCoupon.getParkId());
+            if (parkingInfo != null) {
+                ecCoupon.setParkName(parkingInfo.getParkingName());
+            }
+            list.add(ecCoupon);
+        }
+        page.setRecords(list);
+        msgResult.setResult(true);
+        msgResult.setData(page);
+
+        return msgResult;
+    }
+
+
+
+
+}

+ 28 - 2
src/main/java/com/charging/chargingparking/modules/mobileController/ParkingMemberController.java

@@ -1,13 +1,17 @@
 package com.charging.chargingparking.modules.mobileController;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.SecureUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.charging.chargingparking.dto.AddCoupon;
 import com.charging.chargingparking.dto.AddParkingMember;
 import com.charging.chargingparking.dto.MessageResult;
 import com.charging.chargingparking.entity.ParkingInfo;
+import com.charging.chargingparking.entity.ParkingMember;
 import com.charging.chargingparking.entity.ParkingMemberLog;
 import com.charging.chargingparking.modules.vo.Discount;
 import com.charging.chargingparking.service.EcCouponService;
@@ -151,8 +155,8 @@ public class ParkingMemberController {
      * 为51充电联盟提供的接口,用于添加会员
      * @param addParkingMember
      */
-    @PostMapping("addParkingMember")
-    public void addParkingMember(@Valid @RequestBody AddParkingMember addParkingMember, BindingResult bindingResult) {
+    @PostMapping("addParkingMemberOld")
+    public void addParkingMemberOld(@Valid @RequestBody AddParkingMember addParkingMember, BindingResult bindingResult) {
         log.warn("51充电传递参数:{}",JSONObject.toJSONString(addParkingMember));
         try {
             if (bindingResult.hasErrors()){
@@ -168,6 +172,28 @@ public class ParkingMemberController {
             parkingMemberLogService.save(parkingMemberLog);
         }
     }
+    @PostMapping("importTmpParkingMember")
+    public void importTmpParkingMember() {
+        QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+
+        parkingMemberQueryWrapper.eq("member_type", "0");
+        parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+
+        List<ParkingMember>  list = parkingMemberService.list(parkingMemberQueryWrapper);
+        for(ParkingMember parkingMember:list){
+
+            AddCoupon addCoupon = new AddCoupon();
+            addCoupon.setParkingUname(parkingMember.getParkId());
+            addCoupon.setCarNum(parkingMember.getMemberCarNum());
+            addCoupon.setGunType(1);
+            addCoupon.setStartTime(parkingMember.getMemberStartTime());
+            addCoupon.setEndTime(parkingMember.getMemberEndTime());
+            long parkingTimeLong = DateUtil.between(parkingMember.getMemberEndTime(), parkingMember.getMemberStartTime(), DateUnit.MINUTE);
+            Integer parkingTimeAll = Convert.toInt(parkingTimeLong);
+            addCoupon.setGiveTimes(parkingTimeAll);
+            ecCouponService.addCoupon(addCoupon);
+        }
+    }
     @Autowired
     private EcCouponService ecCouponService;
     /**

+ 2 - 3
src/main/java/com/charging/chargingparking/service/EcCouponService.java

@@ -3,12 +3,11 @@ package com.charging.chargingparking.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.charging.chargingparking.dto.AddCoupon;
 import com.charging.chargingparking.entity.EcCoupon;
-import com.charging.chargingparking.entity.ParkingChannelOpen;
-
 /**
  *
  */
 public interface EcCouponService extends IService<EcCoupon> {
-
     void  addCoupon(AddCoupon addCoupon);
+    void  delCouponAll( String parkId, String license, String reMark);
+    void  delCouponAllBefore( String dataStr, String parkId, String license, String reMark);
 }

+ 1 - 1
src/main/java/com/charging/chargingparking/service/ParkingFeeService.java

@@ -15,8 +15,8 @@ public interface ParkingFeeService extends IService<ParkingFee> {
 
     ParkingCostDTO parkingCost(ParkingRecord parkingRecord) throws Exception;
 
+    ParkingCostDTO parkingCost2Old(ParkingRecord parkingRecord) throws Exception;
     ParkingCostDTO parkingCost2(ParkingRecord parkingRecord) throws Exception;
-
     ParkingFee get(String id);
     int insert(ParkingFee model);
     int update(ParkingFee model);

+ 3 - 2
src/main/java/com/charging/chargingparking/service/ParkingRecordService.java

@@ -20,8 +20,8 @@ import java.util.Map;
  */
 public interface ParkingRecordService extends IService<ParkingRecord> {
 
+    Map<String, Object> plateRecordOld(AlarmInfoPlate alarmInfoPlate) throws Exception;
     Map<String, Object> plateRecord(AlarmInfoPlate alarmInfoPlate) throws Exception;
-
     ParkingDetailDTO getParkDetail(String channelId) throws Exception;
 
     ParkingDetailDTO carPayDetail(String carNum, String parkId) throws Exception;
@@ -33,7 +33,8 @@ public interface ParkingRecordService extends IService<ParkingRecord> {
      * @return
      */
     Integer getParkingTime(ParkingRecord parkingRecord) throws Exception;
-
+    Integer getDisParkingTime(ParkingRecord parkingRecord) throws Exception;
+    Integer getParkingTime2new(ParkingRecord parkingRecord) throws Exception;
     TemporaryCarNumInParkVo generateTemporaryCarNum(TemporaryVo temporaryVo) throws Exception;
 
     TemporaryCarNumInParkVo temporaryCarNumInPark(TemporaryVo temporaryVo) throws Exception;

+ 49 - 0
src/main/java/com/charging/chargingparking/service/impl/EcCouponServiceImpl.java

@@ -10,10 +10,12 @@ import com.charging.chargingparking.dto.AddCoupon;
 import com.charging.chargingparking.dto.SerialData;
 import com.charging.chargingparking.entity.EcCoupon;
 import com.charging.chargingparking.entity.ParkingChannelOpen;
+import com.charging.chargingparking.entity.ParkingMemberLog;
 import com.charging.chargingparking.mapper.EcCouponMapper;
 import com.charging.chargingparking.mapper.ParkingChannelOpenMapper;
 import com.charging.chargingparking.service.EcCouponService;
 import com.charging.chargingparking.service.ParkingChannelOpenService;
+import com.charging.chargingparking.service.ParkingMemberLogService;
 import com.charging.chargingparking.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,6 +60,53 @@ public class EcCouponServiceImpl extends ServiceImpl<EcCouponMapper, EcCoupon>
         save(ecCoupon);
     }
 
+    @Autowired
+    private ParkingMemberLogService parkingMemberLogService;
+    @Override
+    public void delCouponAll( String parkId, String license, String reMark) {
+        QueryWrapper<EcCoupon> ecCouponQueryWrapper = new QueryWrapper<>();
+        ecCouponQueryWrapper.eq("car_num", license);
+        ecCouponQueryWrapper.eq("park_id", parkId);
+        List<EcCoupon> listEcCoupon = list(ecCouponQueryWrapper);
+        for(EcCoupon ecCoupon:listEcCoupon){
+                ecCoupon.setDelFlag(true);
+                ecCoupon.setUpdateBy("system");
+                ecCoupon.setUpdateTime(new Date());
+                updateById(ecCoupon);
+                removeById(ecCoupon);
+            //保存会员修改日志
+            ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+            parkingMemberLog.setParkingMemberId(ecCoupon.getId());
+            parkingMemberLog.setCreateTime(new Date());
+            parkingMemberLog.setContent(StrUtil.format("{}充电会员出场,会员自动删除,备注:{}", ecCoupon.getCarNum(),reMark));
+            parkingMemberLogService.save(parkingMemberLog);
+        }
+    }
+    @Override
+    public void delCouponAllBefore( String dataStr,String parkId, String license, String reMark) {
+
+
+        QueryWrapper<EcCoupon> ecCouponQueryWrapper = new QueryWrapper<>();
+        ecCouponQueryWrapper.eq("car_num", license);
+        ecCouponQueryWrapper.eq("park_id", parkId);
+        List<EcCoupon> listEcCoupon = list(ecCouponQueryWrapper);
+        for(EcCoupon ecCoupon:listEcCoupon){
+            if(DateUtil.parse(dataStr).compareTo(ecCoupon.getEndTime())>-1){
+                ecCoupon.setDelFlag(true);
+                ecCoupon.setUpdateBy("system");
+                ecCoupon.setUpdateTime(new Date());
+                updateById(ecCoupon);
+                removeById(ecCoupon);
+                //保存会员修改日志
+                ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+                parkingMemberLog.setParkingMemberId(ecCoupon.getId());
+                parkingMemberLog.setCreateTime(new Date());
+                parkingMemberLog.setContent(StrUtil.format("{}充电会员之前记录删除,备注:{}", ecCoupon.getCarNum(),reMark));
+                parkingMemberLogService.save(parkingMemberLog);
+            }
+            }
+
+    }
 
 }
 

+ 4 - 33
src/main/java/com/charging/chargingparking/service/impl/ParkingChannelServiceImpl.java

@@ -185,6 +185,8 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
         }
     }
 
+    @Autowired
+    private EcCouponService ecCouponService;
     @Override
     public JSONObject channelHandle(ParkingChannel parkingChannel) throws Exception {
 
@@ -192,34 +194,22 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
 
         JSONObject result = new JSONObject();
         JSONObject jsonObject = new JSONObject();
-
-        //  ResponseAlarmInfoPlate responseAlarmInfoPlate = new ResponseAlarmInfoPlate();
-
-        //  WhiteListOperate whiteListOperate = parkingWhiteService.getWhiteList(parkingChannel.getId());
-        //   responseAlarmInfoPlate.setWhite_list_operate(whiteListOperate);
-
         //处理语音播报内容
         SerialData voiceData = parkingChannelVoiceService.broadcast(parkingChannel.getId());
         JSONArray serialDataArray = new JSONArray();
-        //  List<SerialData> serialData = new ArrayList<>();
-
         if (voiceData != null) {
             JSONObject jsonObject1 = new JSONObject();
             jsonObject1.put("serialChannel", voiceData.getSerialChannel());
             jsonObject1.put("data", voiceData.getData());
             jsonObject1.put("dataLen", voiceData.getDataLen());
             serialDataArray.add(jsonObject1);
-            //  serialData.add(voiceData);
             jsonObject.put("serialData", serialDataArray);
-            //    responseAlarmInfoPlate.setSerialData(serialData);
             //为了语音播放完整,5秒内不再下发串口数据
             valueOperations.set(parkingChannel.getId() + "_voice", true, 5, TimeUnit.SECONDS);
         }
-
         //轮训查询道闸是否要开启或者关闭
         ParkingChannelOpen parkingChannelOpen = parkingChannelOpenService.getSerialDataList(parkingChannel.getId());
         if (parkingChannelOpen != null) {
-
             if (parkingChannelOpen.getOpenFlag()) {
                 jsonObject.put("info", ParkingConstant.OK);
                 //关闸,"channelNum" : 0, 是开,"channelNum" : 1,就是关
@@ -227,7 +217,6 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
                     jsonObject.put("channelNum", 1);
                 }
             }
-
             JSONArray serialDataArray1 = new JSONArray();
             if (parkingChannelOpen.getSerialDataList().size() > 0) {
                 for (SerialData serialData : parkingChannelOpen.getSerialDataList()) {
@@ -238,15 +227,12 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
                     serialDataArray1.add(jsonObject1);
                 }
             }
-
             jsonObject.put("serialData", serialDataArray1);
-
             if (parkingChannelOpen.getPhotoFlag()) {
                 JSONObject triJson = new JSONObject();
                 triJson.put("snapImageRelativeUrl", "/charging-parking/parkingRecord/snapImage");
                 jsonObject.put("TriggerImage", triJson);
             }
-
         }
 
         //入口
@@ -264,10 +250,8 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
             ParkingPay parkingPay = parkingPayService.findOneByParam(param);
             if (parkingPay != null) {
                 log.warn(StrUtil.format("道闸:{},查询到支付开门信息,停车记录id:{}", parkingChannel.getChannelName(), parkingPay.getParkingRecordId()));
-                ParkingRecord parkingRecord = parkingRecordService.getById(parkingPay.getParkingRecordId());
                 //获取此停车场记录应缴费用
-                //    ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord);
-                //    BigDecimal parkCost = parkingCostDTO.getNeedAmount();
+                ParkingRecord parkingRecord = parkingRecordService.getById(parkingPay.getParkingRecordId());
                 BigDecimal parkCost = BigDecimal.ZERO;
                 //如果应缴费用和已缴费用相同则开闸
                 if (parkingRecord.getTotalAmount().compareTo(parkingRecord.getPayAmount()) == 0) {
@@ -282,11 +266,7 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
                     parkingRecordService.updateById(parkingRecord);
 
                     CarTypeVo carType = parkingMemberService.getCarType(parkingRecord.getCarNum(), parkingRecord.getParkId());
-
                     jsonObject.put("info", ParkingConstant.OK);
-                    // responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
-
-
                     List<SerialData> serialDataList1 = stringUtils.getSerialData(carType.getCarType() + parkingRecord.getCarNum() + ParkingConstant.OUTMESSAGE, null, null, carType.getCarType() + parkingRecord.getCarNum() + ParkingConstant.OUTMESSAGE, parkingChannel.getId(), true, true, 10L);
                     JSONArray serialDataArray2 = new JSONArray();
                     if (serialDataList1.size() > 0) {
@@ -298,16 +278,9 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
                             serialDataArray2.add(jsonObject1);
                         }
                     }
-
                     jsonObject.put("serialData", serialDataArray2);
-
-
-                    // responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(carType.getCarType() + parkingRecord.getCarNum() + ParkingConstant.OUTMESSAGE, null, null, carType.getCarType() + parkingRecord.getCarNum() + ParkingConstant.OUTMESSAGE, parkingChannel.getId(), true, true, 10L));
-
                     //出停车场检测是否需要删除临时会员
-                    parkingMemberService.cloudDeleteTemporary(null, parkingChannel.getParkId(), parkingRecord.getCarNum(),"设备轮训时删除临时会员");
-                    //车辆进出场修改停车场剩余车位
-                    //   parkingInfoService.updateSurplusParkingNumber(parkingRecord,null);
+                    ecCouponService.delCouponAll(parkingChannel.getParkId(), parkingRecord.getCarNum(),"设备轮训时删除临时会员");
                     //有优惠券则删除优惠券
                     QueryWrapper queryWrapper = new QueryWrapper();
                     queryWrapper.eq("parking_record_id", parkingRecord.getId());
@@ -321,8 +294,6 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
                         parkingCoupon.setVerifyTime(new Date());
                         parkingCouponService.updateById(parkingCoupon);
                     }
-
-
                 }
             }
         }

+ 241 - 6
src/main/java/com/charging/chargingparking/service/impl/ParkingFeeServiceImpl.java

@@ -230,13 +230,18 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
     }
 
     @Override
-    public ParkingCostDTO parkingCost2(ParkingRecord parkingRecord) throws Exception {
+    public ParkingCostDTO parkingCost2Old(ParkingRecord parkingRecord) throws Exception {
+        //每计费单位费用
+        BigDecimal hourCost = BigDecimal.ZERO;
+        //计费单位
+        Integer chargeUnit =0;
         ParkingInfo parkingInfo = parkingInfoService.getById(parkingRecord.getParkId());
         ParkingCostDTO parkingCostDTO = new ParkingCostDTO();
         BigDecimal needPay = BigDecimal.ZERO;
         BigDecimal discountAmount = BigDecimal.ZERO;
         //获取车辆停车时长
         int parkingTimeInt = parkingRecordService.getParkingTime(parkingRecord);
+        // int parkingTimeInt = parkingRecordService.getParkingTime2new(parkingRecord);
        // int parkingTimeInt=99;
         //获取停车场费用信息
         QueryWrapper<ParkingFee> parkingFeeQueryWrapper = new QueryWrapper<>();
@@ -247,10 +252,9 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
         }
         if (parkingTimeInt > 0) {
             //计费单位
-            Integer chargeUnit = parkingFee.getChargeUnit();
+             chargeUnit = parkingFee.getChargeUnit();
             if (chargeUnit > 0) {
-                //每计费单位费用
-                BigDecimal hourCost = BigDecimal.ZERO;
+
                 //费用规整集合
                 List<ParkingFeeSubDTO> feeList = new ArrayList<>();
                 //每日时间
@@ -448,14 +452,245 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
         }
         discountAmount = discountAmount.setScale(2);
         log.warn(StrUtil.format("车辆费用计算日志,车牌号:{},车辆停车时长:{},needPay:{},车牌号长度:{},discountAmount:{},HourCost:{}",parkingRecord.getCarNum(),parkingTimeInt,needPay,parkingRecord.getCarNum().length(),discountAmount,parkingFee.getHourCost()));
-        parkingCostDTO.setHourCost(parkingFee.getHourCost());
+
+        if(chargeUnit>0){
+            hourCost = hourCost.multiply(new BigDecimal(60)).divide(new BigDecimal(chargeUnit));
+        }
+        parkingCostDTO.setHourCost(hourCost);
         parkingCostDTO.setTotalAmount(needPay);
         parkingCostDTO.setNeedAmount(needPay.subtract(discountAmount).compareTo(BigDecimal.ZERO)<=0?BigDecimal.ZERO:needPay.subtract(discountAmount));
         parkingCostDTO.setDiscountAmount(discountAmount);
-
+        parkingCostDTO.setDisTimes(0);
         return parkingCostDTO;
     }
+    @Override
+    public ParkingCostDTO parkingCost2(ParkingRecord parkingRecord) throws Exception {
+        //每计费单位费用
+        BigDecimal hourCost = BigDecimal.ZERO;
+        //计费单位
+        Integer chargeUnit =0;
+        ParkingInfo parkingInfo = parkingInfoService.getById(parkingRecord.getParkId());
+        ParkingCostDTO parkingCostDTO = new ParkingCostDTO();
+        BigDecimal needPay = BigDecimal.ZERO;
+        BigDecimal discountAmount = BigDecimal.ZERO;
+        //获取车辆停车时长
+        //int parkingTimeInt = parkingRecordService.getParkingTime(parkingRecord);
+        int parkingTimeInt = parkingRecordService.getParkingTime2new(parkingRecord);
+        int disTimes = parkingRecordService.getDisParkingTime(parkingRecord);
+        // int parkingTimeInt=99;
+        //获取停车场费用信息
+        QueryWrapper<ParkingFee> parkingFeeQueryWrapper = new QueryWrapper<>();
+        parkingFeeQueryWrapper.eq("park_id", parkingRecord.getParkId());
+        ParkingFee parkingFee = getOne(parkingFeeQueryWrapper);
+        if (parkingFee == null) {
+            throw new Exception("停车场未配置费用规整");
+        }
+        if (parkingTimeInt > 0) {
+            //计费单位
+             chargeUnit = parkingFee.getChargeUnit();
+            if (chargeUnit > 0) {
+
+                //费用规整集合
+                List<ParkingFeeSubDTO> feeList = new ArrayList<>();
+                //每日时间
+                int dayMin = 24*60;
+                //汽油车
+                if (parkingRecord.getCarNum().length() == 7) {
+                    hourCost = parkingFee.getHourCost();
+                    //此处有3个业务逻辑 1.小于时直接减免0  2.大于时不计算减免,然后用剩余时间直接减最大时间 3.在无规则时,有减免要减免
+                    //将免费时间加入规整列表
+                    if (parkingFee.getFreeDuration() != 0 && parkingTimeInt<=parkingFee.getFreeDuration()) {
+                        ParkingFeeSubDTO parkingFeeSubDTO = new ParkingFeeSubDTO();
+                        parkingFeeSubDTO.setMinSection(0);
+                        parkingFeeSubDTO.setMaxSection(parkingFee.getFreeDuration());
+                        parkingFeeSubDTO.setParkingCost(BigDecimal.ZERO);
+                        feeList.add(parkingFeeSubDTO);
+                    }
+                    if (feeList.size()==0){
+                        QueryWrapper<ParkingFeeSub> parkingFeeSubQueryWrapper = new QueryWrapper<>();
+                        parkingFeeSubQueryWrapper.eq("park_id", parkingRecord.getParkId());
+                        parkingFeeSubQueryWrapper.eq("car_type", "1");
+                        parkingFeeSubQueryWrapper.orderByAsc("min_section");
+                        List<ParkingFeeSub> parkingFeeSubList = parkingFeeSubService.list(parkingFeeSubQueryWrapper);
+                        if (parkingFeeSubList.size() > 0) {
+                            List<ParkingFeeSubDTO> parkingFeeSubDTOList = parkingFeeSubList.stream().map(a -> new ParkingFeeSubDTO(a.getMinSection(), a.getMaxSection(), a.getParkingCost())).collect(Collectors.toList());
+                            feeList.addAll(parkingFeeSubDTOList);
+                        }
+                    }
+                    if(feeList.size()==0){
+                        //add by hbjzws 2024-07-11 解决汽油车在无规则时未免费的情况
+                        if (parkingFee.getFreeDuration() != 0 && parkingTimeInt > parkingFee.getFreeDuration()) {
+                            ParkingFeeSubDTO parkingFeeSubDTO = new ParkingFeeSubDTO();
+                            parkingFeeSubDTO.setMinSection(0);
+                            parkingFeeSubDTO.setMaxSection(parkingFee.getFreeDuration());
+                            parkingFeeSubDTO.setParkingCost(BigDecimal.ZERO);
+                            feeList.add(parkingFeeSubDTO);
+                        }
+                    }
+
+                }
+                //新能源
+                if (parkingRecord.getCarNum().length() == 8) {
+//                    if (parkingInfo.getNightFree()){
+//                        dayMin = 16*60;
+//                    }
+                    hourCost = parkingFee.getNewEnergyHourCost();
+                    if (parkingFee.getNewEnergyFreeDuration() != 0 && parkingTimeInt <= parkingFee.getNewEnergyFreeDuration()) {
+                        ParkingFeeSubDTO parkingFeeSubDTO = new ParkingFeeSubDTO();
+                        parkingFeeSubDTO.setMinSection(0);
+                        parkingFeeSubDTO.setMaxSection(parkingFee.getNewEnergyFreeDuration());
+                        parkingFeeSubDTO.setParkingCost(BigDecimal.ZERO);
+                        feeList.add(parkingFeeSubDTO);
+                    }
+                    if (feeList.size()==0){
+                        QueryWrapper<ParkingFeeSub> parkingFeeSubQueryWrapper = new QueryWrapper<>();
+                        parkingFeeSubQueryWrapper.eq("park_id", parkingRecord.getParkId());
+                        parkingFeeSubQueryWrapper.eq("car_type", "2");
+                        parkingFeeSubQueryWrapper.orderByAsc("min_section");
+                        List<ParkingFeeSub> parkingFeeSubList = parkingFeeSubService.list(parkingFeeSubQueryWrapper);
+                        if (parkingFeeSubList.size() > 0) {
+                            List<ParkingFeeSubDTO> parkingFeeSubDTOList = parkingFeeSubList.stream().map(a -> new ParkingFeeSubDTO(a.getMinSection(), a.getMaxSection(), a.getParkingCost())).collect(Collectors.toList());
+                            feeList.addAll(parkingFeeSubDTOList);
+                        }
+                    }
+                    if(feeList.size()==0){
+                        //add by hbjzws 2023-03-25 关于2小时内免费的事宜-新能源车
+                        if (parkingFee.getNewEnergyFreeDuration() != 0 && parkingTimeInt > parkingFee.getNewEnergyFreeDuration()) {
+                            ParkingFeeSubDTO parkingFeeSubDTO = new ParkingFeeSubDTO();
+                            parkingFeeSubDTO.setMinSection(0);
+                            parkingFeeSubDTO.setMaxSection(parkingFee.getNewEnergyFreeDuration());
+                            parkingFeeSubDTO.setParkingCost(BigDecimal.ZERO);
+                            feeList.add(parkingFeeSubDTO);
+                        }
+                    }
+                }
+                //无规则
+                if (feeList.size() == 0) {
 
+                    BigDecimal hours = NumberUtil.div(Convert.toBigDecimal(parkingTimeInt), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP);
+                    needPay = hours.multiply(hourCost);
+                    if (parkingTimeInt<=dayMin) {
+                        if (needPay.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                            needPay = parkingFee.getDayCappingCost();
+                        }
+                    } else {
+                        //判断当日最大金额
+                        BigDecimal maxCost = NumberUtil.div(Convert.toBigDecimal(dayMin), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP).multiply(hourCost);
+                        if (maxCost.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                            BigDecimal days = NumberUtil.div(Convert.toBigDecimal(parkingTimeInt), Convert.toBigDecimal(dayMin), 0, RoundingMode.DOWN);
+                            //剩余未计算费用的分钟
+                            BigDecimal surplusHours = Convert.toBigDecimal(parkingTimeInt).subtract(days.multiply(new BigDecimal(dayMin)));
+                            //剩余费用
+                            BigDecimal surplusCost = NumberUtil.div(Convert.toBigDecimal(surplusHours), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP).multiply(hourCost);
+                            if (surplusCost.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                                surplusCost = parkingFee.getDayCappingCost();
+                            }
+                            needPay = days.multiply(parkingFee.getDayCappingCost()).add(surplusCost);
+                        }
+                    }
+                } else {
+                    if (parkingTimeInt <= dayMin) {
+                        List<ParkingFeeSubDTO> feeRegularList = feeList.stream().filter(parkingFeeSubDTO -> parkingTimeInt > parkingFeeSubDTO.getMaxSection() || (parkingTimeInt <= parkingFeeSubDTO.getMaxSection() && parkingTimeInt > parkingFeeSubDTO.getMinSection())).collect(Collectors.toList());
+
+                        int time = parkingTimeInt;
+
+                        if (feeRegularList.size() > 0) {
+                            for (ParkingFeeSubDTO parkingFeeSubDTO : feeRegularList) {
+                                needPay = needPay.add(parkingFeeSubDTO.getParkingCost());
+                            }
+
+                            time = time - feeRegularList.get(feeRegularList.size() - 1).getMaxSection();
+                        }
+                        //规则用完,还有多余的时间则按照默认计费方式
+                        if (time > 0) {
+                            BigDecimal hours2 = NumberUtil.div(Convert.toBigDecimal(time), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP);
+                            needPay = needPay.add(hours2.multiply(hourCost));
+                        }
+                        //判断是否超出每日封顶价格
+                        if (needPay.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                            needPay = parkingFee.getDayCappingCost();
+                        }
+                    } else {
+                        int time = dayMin;
+                        for (ParkingFeeSubDTO parkingFeeSubDTO : feeList) {
+                            time = time - (parkingFeeSubDTO.getMaxSection()-parkingFeeSubDTO.getMinSection());
+                            if (time > 0) {
+                                BigDecimal cost = parkingFeeSubDTO.getParkingCost();
+                                needPay = needPay.add(cost);
+                            } else {
+                                BigDecimal cost = parkingFeeSubDTO.getParkingCost();
+                                needPay = needPay.add(cost);
+                                break;
+                            }
+                        }
+                        //规则使用完,还有多余的时间则按照默认计费方式
+                        if (time > 0) {
+                            BigDecimal hours2 = NumberUtil.div(Convert.toBigDecimal(time), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP);
+                            needPay = needPay.add(hours2.multiply(hourCost));
+                        }
+                        //判断是否超出每日封顶价格
+                        if (needPay.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                            needPay = parkingFee.getDayCappingCost();
+                        }
+                        //去掉第一天,后面按照默认计费价格
+                        int time2 = parkingTimeInt - dayMin;
+                        BigDecimal hours = NumberUtil.div(Convert.toBigDecimal(time2), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP);
+
+                        if (time2<= dayMin) {
+                            BigDecimal nextCost1 = hours.multiply(hourCost);
+                            if (nextCost1.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                                nextCost1 = parkingFee.getDayCappingCost();
+                            }
+                            needPay = needPay.add(nextCost1);
+                        } else {
+                            BigDecimal days = NumberUtil.div(Convert.toBigDecimal(time2), Convert.toBigDecimal(dayMin), 0, RoundingMode.DOWN);
+                            //如果每日费用小于每日封顶费用
+                            BigDecimal dayCost = hourCost.multiply(NumberUtil.div(Convert.toBigDecimal(dayMin),Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP));
+                            if (dayCost.compareTo(parkingFee.getDayCappingCost()) <= 0) {
+                                needPay = needPay.add(hourCost.multiply(hours));
+                            } else {
+                                //剩余小时
+                                //   BigDecimal surplusHours = hours.subtract(days.multiply(new BigDecimal(24)));
+                                //剩余时间
+                                BigDecimal surplusTime =Convert.toBigDecimal(time2 - (Convert.toInt(days)*dayMin));
+
+                                BigDecimal surplus =  NumberUtil.div(Convert.toBigDecimal(surplusTime), Convert.toBigDecimal(chargeUnit), 0, RoundingMode.UP);
+                                //剩余费用
+                                BigDecimal surplusCost = surplus.multiply(hourCost);
+                                if (surplusCost.compareTo(parkingFee.getDayCappingCost()) > 0) {
+                                    surplusCost = parkingFee.getDayCappingCost();
+                                }
+                                needPay = needPay.add(days.multiply(parkingFee.getDayCappingCost()).add(surplusCost));
+                            }
+
+                        }
+                    }
+                }
+            }
+            QueryWrapper queryWrapper = new QueryWrapper();
+            queryWrapper.eq("parking_record_id",parkingRecord.getId());
+            queryWrapper.eq("use_status",false);
+            queryWrapper.orderByDesc("create_time");
+            queryWrapper.last("LIMIT 1");
+            ParkingCoupon parkingCoupon= parkingCouponService.getOne(queryWrapper);
+            if (parkingCoupon != null){
+                discountAmount = Convert.toBigDecimal(parkingCoupon.getReduce());
+            }
+        }
+        discountAmount = discountAmount.setScale(2);
+        log.warn(StrUtil.format("车辆费用计算日志,车牌号:{},车辆停车时长:{},needPay:{},车牌号长度:{},discountAmount:{},HourCost:{}",parkingRecord.getCarNum(),parkingTimeInt,needPay,parkingRecord.getCarNum().length(),discountAmount,parkingFee.getHourCost()));
+        if(chargeUnit>0){
+            hourCost = hourCost.multiply(new BigDecimal(60)).divide(new BigDecimal(chargeUnit));
+        }
+        parkingCostDTO.setHourCost(hourCost);
+        parkingCostDTO.setTotalAmount(needPay);
+        parkingCostDTO.setNeedAmount(needPay.subtract(discountAmount).compareTo(BigDecimal.ZERO)<=0?BigDecimal.ZERO:needPay.subtract(discountAmount));
+        parkingCostDTO.setDiscountAmount(discountAmount);
+        parkingCostDTO.setDisTimes(disTimes);
+
+
+        return parkingCostDTO;
+    }
     @Override
     public ParkingFee get(String id) {
         // TODO Auto-generated method stub

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

@@ -90,6 +90,634 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
     private ParkingTimeService parkingTimeService;
     @Override
     public Map<String, Object> plateRecord(AlarmInfoPlate alarmInfoPlate) throws Exception {
+        JSONObject result = new JSONObject();
+        JSONObject jsonObject = new JSONObject();
+        Map<String, Object> map = new HashMap<>();
+        ResponseAlarmInfoPlate responseAlarmInfoPlate = new ResponseAlarmInfoPlate();
+        QueryWrapper<ParkingChannel> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("channel_code", alarmInfoPlate.getSerialno());
+        ParkingChannel parkingChannel = parkingChannelService.getOne(queryWrapper);
+        if (parkingChannel == null) {
+            throw new Exception(StrUtil.format("设备号{},不存在", alarmInfoPlate.getSerialno()));
+        }
+        ParkingInfo parkingInfo = parkingInfoService.getById(parkingChannel.getParkId());
+        //传递的时间参数
+        String dataStr = StringUtils.getAlarmInfoPlateTimeStr(alarmInfoPlate.getResult().getPlateResult().getTimeStamp().getTimeval());
+        log.warn("摄像头拍照时间:"+dataStr);
+        dataStr=  DateUtil.format(new Date(),"yyyy-MM-dd HH:mm:ss");
+        log.warn("当前时间:"+dataStr);
+        //图片小
+        String imageFragmentFile = alarmInfoPlate.getResult().getPlateResult().getImageFragmentFile();
+        //图片大
+        String imageFile = alarmInfoPlate.getResult().getPlateResult().getImageFile();
+        //车牌
+        String license = alarmInfoPlate.getResult().getPlateResult().getLicense();
+        //车牌id
+        Integer plateId = alarmInfoPlate.getResult().getPlateResult().getPlateid();
+
+        if (license.length() < 7 || !Validator.isPlateNumber(license)) {
+            throw new Exception(StrUtil.format("车牌错误:{}", license));
+        }
+        //add by hbjzws 2024-05-14 道闸设置车辆黑名单
+        if("1".equals(parkingChannel.getParkId())&&"1".equals(parkingChannel.getChannelType())){
+            if(StringUtils.isNotEmpty(parkingChannel.getCarNumRemark())&&parkingChannel.getCarNumRemark().contains(license)){
+                throw new Exception(StrUtil.format("道闸设置黑名单车辆的车牌号:{}", license));
+            }
+        }
+        //锦添物业停车场2分钟内对同一车牌处理1次
+        jingtianInDeal(parkingChannel, parkingInfo, dataStr, license);
+        //是否开闸,验证黑白名单和道闸权限
+        ParkingEnableVo parkingEnableVo = parkingMemberService.parkingMemberStatus(license, parkingChannel);
+        //经开区税务局限制打开 add by hbjzws 2024-2-7
+        if ("836bb65f-868b-4042-acf7-dcb4c4de1f0f".equals(parkingInfo.getId())&&!parkingEnableVo.getOpen()){
+            Boolean enterStatus =parkingTimeService.enterTimeStatus(parkingInfo.getId());
+            if(enterStatus){
+                parkingEnableVo.setOpen(true);
+            }
+        }
+        //parkingEnableVo.setOpen(true); //这句话正式环境不要打开(调试用)
+        if (!parkingEnableVo.getOpen()) {
+            ParkingChannelVoice parkingChannelVoice = new ParkingChannelVoice();
+            parkingChannelVoice.setChannelId(parkingChannel.getId());
+            parkingChannelVoice.setVoiceContent(parkingEnableVo.getContent());
+            parkingChannelVoice.setCreateTime(new Date());
+            parkingChannelVoiceService.save(parkingChannelVoice);
+
+            stringUtils.getSerialData(parkingEnableVo.getContent(),null,null,null,parkingChannel.getId(),true,false,10L);
+
+            ParkingRecord record = new ParkingRecord();
+            record.setParkId(parkingChannel.getParkId());
+            record.setCarNum(license);
+            record.setPlateId(plateId);
+            if ("1".equals(parkingChannel.getChannelType())) {
+                record.setInChannelId(parkingChannel.getId());
+                record.setInParkingTime(DateUtil.parse(dataStr));
+            } else {
+                record.setOutChannelId(parkingChannel.getId());
+                record.setOutParkingTime(DateUtil.parse(dataStr));
+            }
+
+            record.setCreateTime(new Date());
+            record.setReleaseStatus("-1");
+            save(record);
+
+        } else {
+            String memberType = parkingMemberService.getMemberType(parkingChannel.getParkId(), license);
+            String primId="";
+            //入口
+            if ("1".equals(parkingChannel.getChannelType())) {
+                //如果进场时间比之前的会员结束时间大就删除
+                ecCouponService.delCouponAllBefore(dataStr,parkingChannel.getParkId(), license,"进场时间比之前的会员结束时间大");
+
+                QueryWrapper<ParkingRecord> parkingRecordQueryWrapper11 = new QueryWrapper<>();
+                parkingRecordQueryWrapper11.eq("park_id", parkingChannel.getParkId());
+                parkingRecordQueryWrapper11.eq("car_num", license);
+                parkingRecordQueryWrapper11.eq("plate_id", plateId);
+                parkingRecordQueryWrapper11.eq("in_channel_id", parkingChannel.getId());
+                parkingRecordQueryWrapper11.orderByDesc("create_time");
+
+                parkingRecordQueryWrapper11.last("LIMIT 1");
+                ParkingRecord parkingRecord11 = getOne(parkingRecordQueryWrapper11);
+                if (parkingRecord11 != null) {
+                    throw new Exception(StrUtil.format("重复进场数据:{},记录:{}", license, parkingRecord11.getId()));
+                }
+
+                QueryWrapper<ParkingRecord> parkingRecordQueryWrapper12 = new QueryWrapper<>();
+                parkingRecordQueryWrapper12.eq("car_num", license);
+                parkingRecordQueryWrapper12.eq("in_channel_id", parkingChannel.getId());
+                parkingRecordQueryWrapper12.eq("release_status", "0");
+                parkingRecordQueryWrapper12.gt("in_parking_time", DateUtil.offsetMinute(DateUtil.parse(dataStr), -2));
+                parkingRecordQueryWrapper12.orderByDesc("in_parking_time");
+
+                parkingRecordQueryWrapper12.last("LIMIT 1");
+                ParkingRecord parkingRecord12 = getOne(parkingRecordQueryWrapper12);
+                if (parkingRecord12 != null) {
+                    throw new Exception(StrUtil.format("进口道闸重复数据,道闸:{},车牌:{},记录:{}", parkingChannel.getChannelName(), license, parkingRecord12.getId()));
+                }
+                //2023-12-22 add by hbjzws 荆鹏停车场会员增加区域(大楼和创客公寓),控制车辆只能在大楼和公寓的停车场进出
+                if("1".equals(parkingInfo.getId())&&"1".equals(memberType)){
+                    String msg="";
+                    QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+                    parkingMemberQueryWrapper.eq("park_id", "1");
+                    parkingMemberQueryWrapper.eq("member_car_num", license);
+                    parkingMemberQueryWrapper.eq("member_type", 1);
+                    parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+                    parkingMemberQueryWrapper.orderByDesc("create_time");
+                    parkingMemberQueryWrapper.last("LIMIT 1");
+                    ParkingMember parkingMember = parkingMemberService.getOne(parkingMemberQueryWrapper);
+                    if(parkingMember!=null&&parkingMember.getMemberEndTime()!=null&& org.apache.commons.lang3.StringUtils.isNotEmpty(parkingMember.getArea())){
+                        if(new Date().compareTo(parkingMember.getMemberEndTime())<=0){
+                            //有效会员
+                            if("0".equals(parkingMember.getArea())){
+                                //大楼
+                                if("3afe21d5-1897d4ce".equals(alarmInfoPlate.getSerialno())||"ef6b3d0f-1c74596d".equals(alarmInfoPlate.getSerialno())){
+                                    parkingEnableVo.setOpen(false);
+                                    msg ="请到前面大楼停车";
+                                }
+                            }
+                            if("1".equals(parkingMember.getArea())){
+                                //创客公寓
+                                if("89bc86da-a4357bee".equals(alarmInfoPlate.getSerialno())){
+                                    parkingEnableVo.setOpen(false);
+                                    msg ="请到创客公寓停车";
+                                }
+                            }
+                        }
+                    }
+                    if(!parkingEnableVo.getOpen()){
+                        //写语音播报或者直接抛出异常
+                        responseAlarmInfoPlate.setInfo("");
+                        responseAlarmInfoPlate.setPlateid(plateId);
+                        responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData("会员车" + license + "不能进场"+msg, null, null, "会员车" + license + "不能进场"+msg, parkingChannel.getId(), true, true, 10L));
+                    }
+
+                }
+                //符合规则的车辆可入
+                if (parkingEnableVo.getOpen()) {
+                    QueryWrapper queryWrapper1 = new QueryWrapper();
+                    queryWrapper1.eq("car_num", license);
+                    queryWrapper1.eq("park_id", parkingInfo.getId());
+                    queryWrapper1.eq("release_status", "0");//未出场
+                    List<ParkingRecord> parkingRecordList = list(queryWrapper1);
+                    //add hbjzws 2023-5-23删除进场前未出场的记录
+                    if (parkingRecordList.size() > 0) {
+                        for (ParkingRecord parkingRecord1 : parkingRecordList) {
+                            parkingRecord1.setReleaseStatus("1");
+                            parkingRecord1.setUpdateTime(new Date());
+                            parkingRecord1.setDelFlag(true);
+                            updateById(parkingRecord1);//mybatisBUG
+                            parkingRecordMapper.updateDel(parkingRecord1.getId());
+                        }
+                    }
+                    ParkingRecord parkingRecord = new ParkingRecord();
+                    parkingRecord.setParkId(parkingChannel.getParkId());
+                    parkingRecord.setCarNum(license);
+                    parkingRecord.setPlateId(plateId);
+                    parkingRecord.setInParkingTime(DateUtil.parse(dataStr));
+                    parkingRecord.setProductTheme("停车费");
+                    parkingRecord.setCarType(alarmInfoPlate.getResult().getPlateResult().getType().toString());
+                    parkingRecord.setCType(alarmInfoPlate.getResult().getPlateResult().getTriggerType().toString());
+                    parkingRecord.setCreateTime(new Date());
+                    parkingRecord.setInChannelId(parkingChannel.getId());
+                    parkingRecord.setInChannel(parkingChannel.getChannelName());
+                    if (StrUtil.isNotBlank(imageFragmentFile)) {
+                        String fileUrl = fileUtil.uploadBase64(license + "入.png", imageFragmentFile);
+                        parkingRecord.setInFragmentImage(fileUrl);
+                    }
+                    if (StrUtil.isNotBlank(imageFile)) {
+                        String fileUrl = fileUtil.uploadBase64(license + "(大)入.png", imageFile);
+                        parkingRecord.setInImage(fileUrl);
+                    }
+                    parkingRecord.setMemberType(memberType);
+                    if (StrUtil.isBlank(parkingRecord.getParkingNumLog())) {
+                        parkingRecord.setParkingNumLog(StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                    } else {
+                        parkingRecord.setParkingNumLog(parkingRecord.getParkingNumLog() + ";" + StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                    }
+                    save(parkingRecord);
+                    CarTypeVo carType = parkingMemberService.getCarType(license, parkingChannel.getParkId());
+                    String sendContentAdd = "";
+                    if (carType.getDays() > 0 && carType.getDays()<=30) {
+                        sendContentAdd = StrUtil.format(" 剩余{}天到期", carType.getDays());
+                    }
+                    jsonObject.put("info", ParkingConstant.OK);
+                    responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
+                    responseAlarmInfoPlate.setPlateid(plateId);
+                    responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(carType.getCarType() + license + ParkingConstant.INMESSAGE + sendContentAdd, null, null, carType.getCarType() + license + ParkingConstant.INMESSAGE + sendContentAdd, parkingChannel.getId(), true, true, 10L));
+                }
+                map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+            }
+            //出口
+            else {
+                QueryWrapper<ParkingRecord> parkingRecordQueryWrapper11 = new QueryWrapper<>();
+                parkingRecordQueryWrapper11.eq("park_id", parkingChannel.getParkId());
+                parkingRecordQueryWrapper11.eq("car_num", license);
+                parkingRecordQueryWrapper11.eq("out_plate_id", plateId);
+                parkingRecordQueryWrapper11.eq("out_channel_id", parkingChannel.getId());
+                //   parkingRecordQueryWrapper11.eq("out_parking_time", DateUtil.parse(dataStr));
+                parkingRecordQueryWrapper11.orderByDesc("create_time");
+
+                parkingRecordQueryWrapper11.last("LIMIT 1");
+                ParkingRecord parkingRecord11 = getOne(parkingRecordQueryWrapper11);
+                if (parkingRecord11 != null) {
+                    throw new Exception(StrUtil.format("重复出场数据:{},记录:{}", license, parkingRecord11.getId()));
+                }
+
+                QueryWrapper<ParkingRecord> parkingRecordQueryWrapper12 = new QueryWrapper<>();
+                parkingRecordQueryWrapper12.eq("car_num", license);
+                parkingRecordQueryWrapper12.eq("out_channel_id", parkingChannel.getId());
+                parkingRecordQueryWrapper12.eq("release_status", "1");
+                parkingRecordQueryWrapper12.gt("out_parking_time", DateUtil.offsetMinute(DateUtil.parse(dataStr), -2));
+                parkingRecordQueryWrapper12.orderByDesc("out_parking_time");
+
+                parkingRecordQueryWrapper12.last("LIMIT 1");
+                ParkingRecord parkingRecord12 = getOne(parkingRecordQueryWrapper12);
+                if (parkingRecord12 != null) {
+                    throw new Exception(StrUtil.format("出口道闸重复数据,道闸:{},车牌:{},记录id:{}", parkingChannel.getChannelName(), license, parkingRecord12.getId()));
+                }
+                if (parkingEnableVo.getOpen()) {
+                    ParkingRecord parkingRecord0 = findParkingRecord(parkingChannel, license);
+                    //荆鹏停车场:车辆出场时没有进场时间就采用上次的进场时间
+                    if (parkingRecord0 == null && "1".equals(parkingInfo.getId())) {
+                        QueryWrapper<ParkingRecord> parkingRecordQueryWrapper1 = new QueryWrapper<>();
+                        parkingRecordQueryWrapper1.eq("park_id", parkingChannel.getParkId());
+                        parkingRecordQueryWrapper1.eq("car_num", license);
+                        parkingRecordQueryWrapper1.eq("release_status", "1");
+                        parkingRecordQueryWrapper1.gt("in_parking_time",DateUtil.offsetDay(new Date(),-30));
+                        parkingRecordQueryWrapper1.orderByDesc("create_time");
+                        parkingRecordQueryWrapper1.last("LIMIT 1");
+                        ParkingRecord parkingRecord1 = getOne(parkingRecordQueryWrapper1);
+                        if (parkingRecord1 != null) {
+                            //todo 加入充电会员的一条记录,如果开始时间小于此条记录,就以这个时间为准
+                            Date inParkTime =parkingRecord1.getOutParkingTime();
+                            QueryWrapper<EcCoupon> ecCouponQueryWrapper = new QueryWrapper<>();
+                            ecCouponQueryWrapper.eq("car_num", license);
+                            ecCouponQueryWrapper.eq("park_id", parkingInfo.getId());
+                            ecCouponQueryWrapper.orderByDesc("create_time");
+                            EcCoupon ecCoupon = ecCouponService.getOne(ecCouponQueryWrapper);
+                            if(ecCoupon!=null&&ecCoupon.getStartTime()!=null){
+                                if(inParkTime.before(ecCoupon.getStartTime())){
+                                    inParkTime =ecCoupon.getStartTime();
+                                }
+                            }
+                            ParkingRecord parkingRecord = new ParkingRecord();
+                            parkingRecord.setParkId(parkingRecord1.getParkId());
+                            parkingRecord.setCarNum(license);
+                            parkingRecord.setOutPlateId(plateId);
+                            parkingRecord.setInParkingTime(inParkTime);
+                            parkingRecord.setProductTheme("停车费");
+                            parkingRecord.setCarType(parkingRecord1.getCarType());
+                            parkingRecord.setCType(parkingRecord1.getCType());
+                            parkingRecord.setCreateTime(new Date());
+                            parkingRecord.setInChannel(parkingRecord1.getInChannel());
+                            parkingRecord.setInChannelId(parkingRecord1.getInChannelId());
+                            parkingRecord.setMemberType(memberType);
+                            if (StrUtil.isBlank(parkingRecord.getParkingNumLog())) {
+                                parkingRecord.setParkingNumLog(StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                            } else {
+                                parkingRecord.setParkingNumLog(parkingRecord.getParkingNumLog() + ";" + StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                            }
+                            save(parkingRecord);
+                            parkingRecord0 = parkingRecord;
+                        }
+                    }
+
+                    if (parkingRecord0 == null) {
+                        QueryWrapper<ParkingRecord> parkingRecordQueryWrapper1 = new QueryWrapper<>();
+                        parkingRecordQueryWrapper1.eq("park_id", parkingChannel.getParkId());
+                        parkingRecordQueryWrapper1.eq("out_channel_id", parkingChannel.getId());
+                        parkingRecordQueryWrapper1.eq("car_num", license);
+                        parkingRecordQueryWrapper1.lt("out_parking_time", DateUtil.offsetSecond(DateUtil.parse(dataStr), 10));
+                        parkingRecordQueryWrapper1.gt("out_parking_time", DateUtil.offsetSecond(DateUtil.parse(dataStr), -10));
+                        parkingRecordQueryWrapper1.orderByDesc("create_time");
+
+                        parkingRecordQueryWrapper1.last("LIMIT 1");
+                        ParkingRecord parkingRecord1 = getOne(parkingRecordQueryWrapper1);
+                        if (parkingRecord1 != null) {
+                            throw new Exception(StrUtil.format("摄像头重复拍摄{}", license));
+                        }
+                        //默认放行策略 会员车不需要有进场记录可出场
+                        if ("1".equals(parkingInfo.getNoInParkingOutPolicy())){
+                            //无记录放行,数据库记录
+                            ParkingRecord parkingRecord = new ParkingRecord();
+                            parkingRecord.setParkId(parkingChannel.getParkId());
+                            parkingRecord.setCarNum(license);
+                            parkingRecord.setOutPlateId(plateId);
+                            parkingRecord.setOutParkingTime(DateUtil.parse(dataStr));
+                            parkingRecord.setProductTheme("停车费");
+                            parkingRecord.setCarType(alarmInfoPlate.getResult().getPlateResult().getType().toString());
+                            parkingRecord.setCType(alarmInfoPlate.getResult().getPlateResult().getTriggerType().toString());
+                            parkingRecord.setCreateTime(new Date());
+                            parkingRecord.setOutChannelId(parkingChannel.getId());
+                            parkingRecord.setOutChannel(parkingChannel.getChannelName());
+                            if (StrUtil.isNotBlank(imageFragmentFile)) {
+                                String fileUrl = fileUtil.uploadBase64(license + "出.png", imageFragmentFile);
+                                parkingRecord.setOutFragmentImage(fileUrl);
+                            }
+                            if (StrUtil.isNotBlank(imageFile)) {
+                                String fileUrl = fileUtil.uploadBase64(license + "(大)出.png", imageFile);
+                                parkingRecord.setOutImage(fileUrl);
+                            }
+                            parkingRecord.setReleaseStatus("1");
+                            parkingRecord.setOutType("4");
+                            primId =parkingRecord.getId();
+                            parkingRecord.setMemberType(memberType);
+                            if (StrUtil.isBlank(parkingRecord.getParkingNumLog())) {
+                                parkingRecord.setParkingNumLog(StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                            } else {
+                                parkingRecord.setParkingNumLog(parkingRecord.getParkingNumLog() + ";" + StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                            }
+                            save(parkingRecord);
+
+
+                            log.warn(StrUtil.format("出场车牌号{},创建时间{}:"+parkingRecord.getCarNum(),parkingRecord.getCreateTime()));
+                            //删除之前的未出场的停车记录
+                            QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
+                            parkingRecordQueryWrapper.eq("park_id", parkingInfo.getId());
+                            parkingRecordQueryWrapper.eq("car_num", license);
+                            parkingRecordQueryWrapper.eq("release_status","0");
+                            //parkingRecordQueryWrapper.orderByDesc("create_time");
+                            List<ParkingRecord> parkingRecordList = list(parkingRecordQueryWrapper);
+                            if (parkingRecordList.size()>0){
+                                for (ParkingRecord parkingRecordDel : parkingRecordList){
+                                    log.warn(StrUtil.format("出场删除车牌号{},创建时间{}:"+parkingRecordDel.getCarNum(),parkingRecordDel.getCreateTime()));
+                                    parkingRecordDel.setReleaseStatus("1");
+                                    parkingRecordDel.setDelFlag(true);
+                                    parkingRecordDel.setUpdateBy("system");
+                                    parkingRecordDel.setUpdateTime(new Date());
+                                    parkingRecordDel.setRemark(parkingRecordDel.getRemark()+"车辆出行后-系统道闸自动清理数据");
+                                    updateById(parkingRecordDel);
+                                    parkingRecordMapper.updateDel(parkingRecordDel.getId());
+                                }
+                            }
+
+
+                            CarTypeVo carType = parkingMemberService.getCarType(license, parkingChannel.getParkId());
+                            jsonObject.put("info", ParkingConstant.OK);
+                            responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
+                            responseAlarmInfoPlate.setPlateid(plateId);
+                            responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(carType.getCarType() + license + ParkingConstant.OUTMESSAGE, null, null, carType.getCarType() + license + ParkingConstant.OUTMESSAGE, parkingChannel.getId(), true, true, 10L));
+                            map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+                            //todo  在没有入场记录时,要删除临时会员
+                            //出停车场检测是否需要删除临时会员
+                            if ("1".equals(parkingInfo.getId())&&map.get(ParkingConstant.RESPONSEKEY) != null && "1".equals(parkingRecord.getReleaseStatus())) {
+                                //todo 此处修改为删除充电送券记录
+                                ecCouponService.delCouponAll(parkingChannel.getParkId(), license,"无入场记录时出场");
+                            }
+                        }
+                        //策略为不放行并且车辆未非会员,语音播报联系停车场管理员  会员车不需要有进场记录可出场
+                        if ("2".equals(parkingInfo.getNoInParkingOutPolicy()) && "0".equals(memberType)){
+                            responseAlarmInfoPlate.setInfo("");
+                            responseAlarmInfoPlate.setPlateid(plateId);
+                            List<SerialData> serialDataList = stringUtils.getSerialData(license + ParkingConstant.OUTPOLICY, null, null, license + ParkingConstant.OUTPOLICY, parkingChannel.getId(), true, true, 15L);
+                            responseAlarmInfoPlate.setSerialData(serialDataList);
+                            map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+                        }
+                        //add by hbjzws 2023-06-08 解决锦添物业出场时,在无进场记录时,会员车没有抬杆的问题
+                        if ("2".equals(parkingInfo.getNoInParkingOutPolicy()) && !"0".equals(memberType)){
+                            ParkingRecord parkingRecord = new ParkingRecord();
+                            parkingRecord.setParkId(parkingChannel.getParkId());
+                            parkingRecord.setCarNum(license);
+                            parkingRecord.setOutPlateId(plateId);
+                            parkingRecord.setOutParkingTime(DateUtil.parse(dataStr));
+                            parkingRecord.setProductTheme("停车费");
+                            parkingRecord.setCarType(alarmInfoPlate.getResult().getPlateResult().getType().toString());
+                            parkingRecord.setCType(alarmInfoPlate.getResult().getPlateResult().getTriggerType().toString());
+                            parkingRecord.setCreateTime(new Date());
+                            parkingRecord.setOutChannelId(parkingChannel.getId());
+                            parkingRecord.setOutChannel(parkingChannel.getChannelName());
+                            parkingRecord.setRemark("会员车无入场记录时出场-策略2");
+                            if (StrUtil.isNotBlank(imageFragmentFile)) {
+                                String fileUrl = fileUtil.uploadBase64(license + "出.png", imageFragmentFile);
+                                parkingRecord.setOutFragmentImage(fileUrl);
+                            }
+                            if (StrUtil.isNotBlank(imageFile)) {
+                                String fileUrl = fileUtil.uploadBase64(license + "(大)出.png", imageFile);
+                                parkingRecord.setOutImage(fileUrl);
+                            }
+                            parkingRecord.setReleaseStatus("1");
+                            parkingRecord.setOutType("4");
+                            primId =parkingRecord.getId();
+                            parkingRecord.setMemberType(memberType);
+                            if (StrUtil.isBlank(parkingRecord.getParkingNumLog())) {
+                                parkingRecord.setParkingNumLog(StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                            } else {
+                                parkingRecord.setParkingNumLog(parkingRecord.getParkingNumLog() + ";" + StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                            }
+
+                            save(parkingRecord);
+
+                            log.warn(StrUtil.format("出场车牌号{},创建时间{}:"+parkingRecord.getCarNum(),parkingRecord.getCreateTime()));
+                            //删除之前的未出场的停车记录
+                            QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
+                            parkingRecordQueryWrapper.eq("park_id", parkingInfo.getId());
+                            parkingRecordQueryWrapper.eq("car_num", license);
+                            parkingRecordQueryWrapper.eq("release_status","0");
+                            //parkingRecordQueryWrapper.orderByDesc("create_time");
+                            List<ParkingRecord> parkingRecordList = list(parkingRecordQueryWrapper);
+                            if (parkingRecordList.size()>0){
+                                for (ParkingRecord parkingRecordDel : parkingRecordList){
+                                    log.warn(StrUtil.format("出场删除车牌号{},创建时间{}:"+parkingRecordDel.getCarNum(),parkingRecordDel.getCreateTime()));
+                                    parkingRecordDel.setReleaseStatus("1");
+                                    parkingRecordDel.setDelFlag(true);
+                                    parkingRecordDel.setUpdateBy("system");
+                                    parkingRecordDel.setUpdateTime(new Date());
+                                    parkingRecordDel.setRemark(parkingRecordDel.getRemark()+"车辆出行后-系统道闸自动清理数据");
+                                    updateById(parkingRecordDel);
+                                    parkingRecordMapper.updateDel(parkingRecordDel.getId());
+                                }
+                            }
+                            CarTypeVo carType = parkingMemberService.getCarType(license, parkingChannel.getParkId());
+                            responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
+                            responseAlarmInfoPlate.setPlateid(plateId);
+                            List<SerialData> serialDataList = stringUtils.getSerialData(carType.getCarType() + license + ParkingConstant.OUTMESSAGE, null, null, carType.getCarType() + license + ParkingConstant.OUTMESSAGE, parkingChannel.getId(), true, true, 10L);
+                            responseAlarmInfoPlate.setSerialData(serialDataList);
+                            map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+                        }
+                    }
+                    //已存在记录,计算缴费金额
+                    else {
+                        //出停车场的时间
+                        Date outParkingTime = DateUtil.parse(dataStr);
+                        //计算停车时间
+                        long parkingTimeLong = DateUtil.between(parkingRecord0.getInParkingTime(), outParkingTime, DateUnit.MINUTE);
+                        //add by hbjzws 2023-06-28 增加对出场跟入场匹配过长的问题(修改未7天内)
+                        //int maxTTime =24*60*7;
+                        Integer  maxInToOutTime =parkingInfo.getMaxInToOutTime();
+                        if(maxInToOutTime==null){
+                            maxInToOutTime =48;
+                        }
+                        int maxTTime =maxInToOutTime*60;
+                        if(Convert.toInt(parkingTimeLong)>maxTTime){
+                            Date orgInTime =parkingRecord0.getInParkingTime();
+                            parkingRecord0.setInParkingTime(DateUtil.offsetMinute(outParkingTime,-maxTTime));
+                            log.warn(StrUtil.format("停车记录时间过长,存在进场与出场记录不匹配的问题,原先进场时间为:{},修改后的进场时间为{}",DateUtil.format(orgInTime,"yyyy-MM-dd HH:mm:ss"),DateUtil.format(parkingRecord0.getInParkingTime(),"yyyy-MM-dd HH:mm:ss")));
+                        }
+                        parkingRecord0.setOutPlateId(plateId);
+                        parkingRecord0.setParkingTime(Convert.toInt(parkingTimeLong));
+                        parkingRecord0.setOutChannelId(parkingChannel.getId());
+                        parkingRecord0.setOutChannel(parkingChannel.getChannelName());
+                        if (StrUtil.isNotBlank(imageFragmentFile)) {
+                            String fileUrl = fileUtil.uploadBase64(license + "出.png", imageFragmentFile);
+                            parkingRecord0.setOutFragmentImage(fileUrl);
+                        }
+                        if (StrUtil.isNotBlank(imageFile)) {
+                            String fileUrl = fileUtil.uploadBase64(license + "(大)出.png", imageFile);
+                            parkingRecord0.setOutImage(fileUrl);
+                        }
+                        parkingRecord0.setOutParkingTime(outParkingTime);
+                        //获取车辆应缴费金额
+                        ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord0);
+                        BigDecimal parkingCost = parkingCostDTO.getNeedAmount();
+                        if (parkingCost.subtract(parkingRecord0.getPayAmount()).compareTo(BigDecimal.ZERO) == 0) {
+                            CarTypeVo carTypeVo = parkingMemberService.getCarType(license, parkingChannel.getParkId());
+                            jsonObject.put("info", ParkingConstant.OK);
+                            responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
+                            responseAlarmInfoPlate.setPlateid(plateId);
+                            responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(carTypeVo.getCarType() + license + ParkingConstant.OUTMESSAGE, null, null, carTypeVo.getCarType() + license + ParkingConstant.OUTMESSAGE, parkingChannel.getId(), true, true, 10L));
+                            map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+                            if (parkingCost.compareTo(BigDecimal.ZERO) == 0) {
+                                parkingRecord0.setTotalAmount(parkingCost);
+                            }
+                            parkingRecord0.setReleaseStatus("1");
+                            //有抵扣券则使用
+                            QueryWrapper queryWrapper1 = new QueryWrapper();
+                            queryWrapper1.eq("parking_record_id", parkingRecord0.getId());
+                            queryWrapper1.eq("use_status", false);
+                            queryWrapper1.orderByDesc("create_time");
+                            queryWrapper1.last("LIMIT 1");
+                            ParkingCoupon parkingCoupon = parkingCouponService.getOne(queryWrapper1);
+                            if (parkingCoupon != null) {
+                                parkingCoupon.setUseStatus(true);
+                                parkingCoupon.setUseTime(new Date());
+                                parkingCoupon.setVerifyTime(new Date());
+                            }
+                        } else {
+                            parkingRecord0.setTotalAmount(parkingCost);
+                            responseAlarmInfoPlate.setInfo("");
+                            responseAlarmInfoPlate.setPlateid(plateId);
+                            List<SerialData> serialDataList = stringUtils.getSerialData(license, "时间:" + StringUtils.getParkingTimeStr(parkingRecord0.getParkingTime()), "费用:" + parkingCost.subtract(parkingRecord0.getPayAmount()), null, parkingChannel.getId(), true, false, 60L);
+                            responseAlarmInfoPlate.setSerialData(serialDataList);
+                            delaySendVoice(parkingChannel, license, parkingRecord0, parkingCost);
+                            map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+                        }
+                        parkingRecord0.setMemberType(memberType);
+                        if (StrUtil.isBlank(parkingRecord0.getParkingNumLog())) {
+                            parkingRecord0.setParkingNumLog(StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                        } else {
+                            parkingRecord0.setParkingNumLog(parkingRecord0.getParkingNumLog() + ";" + StrUtil.format("剩余车位数:{},时间:{}", parkingInfo.getSurplusParkingNumber(), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
+                        }
+                        if("1".equals(parkingRecord0.getReleaseStatus())){//优化
+                            if(parkingRecord0.getPayAmount()!=null&&parkingRecord0.getPayAmount().compareTo(BigDecimal.ZERO)>0){
+                                parkingRecord0.setOutType("3");
+                            }else{
+                                parkingRecord0.setOutType("4");
+                            }
+                        }
+                        updateById(parkingRecord0);
+                        //出停车场检测是否需要删除临时会员
+                        if (map.get(ParkingConstant.RESPONSEKEY) != null && "1".equals(parkingRecord0.getReleaseStatus())) {
+                            //todo 此处修改为删除充电送券记录
+                            ecCouponService.delCouponAll(parkingChannel.getParkId(), license,"正常出场删除记录");
+                        }
+                        if ("1".equals(parkingRecord0.getReleaseStatus())) {
+                            QueryWrapper queryWrapper1 = new QueryWrapper();
+                            queryWrapper1.eq("parking_record_id", parkingRecord0.getId());
+                            queryWrapper1.eq("use_status", false);
+                            ParkingCoupon parkingCoupon = parkingCouponService.getOne(queryWrapper1);
+                            if (parkingCoupon != null) {
+                                parkingCoupon.setUseStatus(true);
+                                parkingCoupon.setVerifyTime(parkingRecord0.getOutParkingTime());
+                                parkingCouponService.updateById(parkingCoupon);
+                            }
+                            primId =parkingRecord0.getId();
+
+                            //删除历史记录
+                            log.warn(StrUtil.format("出场车牌号{},创建时间{}:"+parkingRecord0.getCarNum(),parkingRecord0.getCreateTime()));
+                            //删除之前的未出场的停车记录
+                            QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
+                            parkingRecordQueryWrapper.eq("park_id", parkingInfo.getId());
+                            parkingRecordQueryWrapper.eq("car_num", license);
+                            parkingRecordQueryWrapper.eq("release_status","0");
+                            //parkingRecordQueryWrapper.orderByDesc("create_time");
+                            List<ParkingRecord> parkingRecordList = list(parkingRecordQueryWrapper);
+                            if (parkingRecordList.size()>0){
+                                for (ParkingRecord parkingRecordDel : parkingRecordList){
+                                    log.warn(StrUtil.format("出场删除车牌号{},创建时间{}:"+parkingRecordDel.getCarNum(),parkingRecordDel.getCreateTime()));
+                                    parkingRecordDel.setReleaseStatus("1");
+                                    parkingRecordDel.setDelFlag(true);
+                                    parkingRecordDel.setUpdateBy("system");
+                                    parkingRecordDel.setUpdateTime(new Date());
+                                    parkingRecordDel.setRemark(parkingRecordDel.getRemark()+"车辆出行后-系统道闸自动清理数据");
+                                    updateById(parkingRecordDel);
+                                    parkingRecordMapper.updateDel(parkingRecordDel.getId());
+                                }
+                            }
+                        }
+                    }
+                    //add by hbjzws 2023-06-19解决锦添物业在1分钟内进场后突然出场的问题(一般是出口误拍车牌导致)
+                    if ("5f8d343e-63d1-4ef0-9844-855ca020d92b".equals(parkingInfo.getId())||"1".equals(parkingInfo.getId())) {
+                        QueryWrapper<ParkingRecord> parkingRecordQueryWrapper1 = new QueryWrapper<>();
+                        parkingRecordQueryWrapper1.eq("park_id", parkingChannel.getParkId());
+                        parkingRecordQueryWrapper1.eq("car_num", license);
+                        parkingRecordQueryWrapper1.eq("release_status", "1");
+                        parkingRecordQueryWrapper1.orderByDesc("create_time");
+                        parkingRecordQueryWrapper1.last("LIMIT 1");
+                        ParkingRecord parkingRecord1 = getOne(parkingRecordQueryWrapper1);
+                        if(parkingRecord1!=null&&parkingRecord1.getInParkingTime()!=null&&parkingRecord1.getOutParkingTime()!=null){
+                            Date inParkingTime =parkingRecord1.getInParkingTime();
+                            Date outParkingTime =parkingRecord1.getOutParkingTime();
+                            Date date = DateUtil.offsetMinute(outParkingTime, -2);
+                            if(date.compareTo(inParkingTime)<0){
+                                log.warn(StrUtil.format("2分钟内出场-车牌号{}:"+parkingRecord1.getCarNum()));
+                                parkingRecord1.setOutParkingTime(null);
+                                parkingRecord1.setReleaseStatus("0");
+                                parkingRecord1.setRemark(parkingRecord1.getRemark()+"2分钟内出场");
+                                updateById(parkingRecord1);
+                                CarTypeVo carType = parkingMemberService.getCarType(license, parkingChannel.getParkId());
+                                jsonObject.put("info", "");
+                                responseAlarmInfoPlate.setInfo("");
+                                responseAlarmInfoPlate.setPlateid(plateId);
+                                responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(carType.getCarType() + license + "本次停车2分钟内不能出场", null, null, carType.getCarType() + license + "本次停车2分钟内不能出场", parkingChannel.getId(), true, true, 10L));
+                                map.put(ParkingConstant.RESPONSEKEY, responseAlarmInfoPlate);
+                            }
+                        }
+                    }
+                }
+            }
+            log.warn(StrUtil.format("语音播报报文{}:"+jsonObject.toString()));
+            result.put(ParkingConstant.RESPONSEKEY, jsonObject);
+            ParkingChannel finalParkingChannel = parkingChannel;
+            String finalPrimId = primId;
+            CompletableFuture.runAsync(() -> {
+                //车辆进场修改停车场剩余车位
+                parkingInfoService.updateSurplusParkingNumber(result, finalParkingChannel);
+            });
+        }
+        return map;
+    }
+
+    private void jingtianInDeal(ParkingChannel parkingChannel, ParkingInfo parkingInfo, String dataStr, String license) throws Exception {
+        if ("5f8d343e-63d1-4ef0-9844-855ca020d92b".equals(parkingInfo.getId())) {
+            QueryWrapper<ParkingRecord> parkingRecordQueryWrapper01 = new QueryWrapper<>();
+            parkingRecordQueryWrapper01.eq("park_id", parkingChannel.getParkId());
+            parkingRecordQueryWrapper01.eq("car_num", license);
+            parkingRecordQueryWrapper01.ne("release_status", "-1");
+            parkingRecordQueryWrapper01.ne("release_status", "2");
+            parkingRecordQueryWrapper01.orderByDesc("create_time");
+            parkingRecordQueryWrapper01.last("LIMIT 1");
+            ParkingRecord parkingRecord01 = getOne(parkingRecordQueryWrapper01);
+            if (parkingRecord01 != null) {
+                Date time = null;
+                //出场后两分钟内不可再次进场
+                if (parkingRecord01.getOutParkingTime() != null) {
+                    time = parkingRecord01.getOutParkingTime();
+                }
+                if (time != null) {
+                    //设备传递的时间
+                    Date recordTime = DateUtil.parse(dataStr);
+                    //如果设备传递的时间与此车辆此停车场上次记录的时间差在2分钟内则不处理
+                    //锦添停车场西进口设置为3分钟
+                    int min = -2;
+                    if ("锦添停车场西出口".equals(parkingChannel.getChannelName())) {
+                        min = -3;
+                    }
+                    //add by hbjzws 2023-06-21 锦添停车场北出口,北入口不受2分钟进出限制
+                    if ("锦添停车场北出口".equals(parkingChannel.getChannelName()) || "锦添停车场北入口".equals(parkingChannel.getChannelName())) {
+                        min = +10000;
+                    }
+                    Date date = DateUtil.offsetMinute(recordTime, min);
+
+                    if (time.compareTo(date) >= 0) {
+                        throw new Exception(StrUtil.format("2分钟内对同一车牌处理1次:{}", license));
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public Map<String, Object> plateRecordOld(AlarmInfoPlate alarmInfoPlate) throws Exception {
 
 
         JSONObject result = new JSONObject();
@@ -909,7 +1537,7 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
             throw new Exception("无停车数据");
         }
         ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord);
-
+        //ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2new(parkingRecord);
         //总金额
         BigDecimal allCost = parkingCostDTO.getTotalAmount();
         BigDecimal total = allCost.subtract(parkingRecord.getPayAmount());
@@ -929,7 +1557,7 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         parkingDetailDTO.setTotal(total);
         parkingDetailDTO.setDiscountMoney(parkingCostDTO.getDiscountAmount());
         parkingDetailDTO.setPrice(parkingDetailDTO.getTotal().subtract(parkingDetailDTO.getDiscountMoney()));
-
+        parkingDetailDTO.setDisTimesStr(StringUtils.getParkingTimeStr(parkingCostDTO.getDisTimes()));
 
         //修改停车记录
         parkingRecord.setTotalAmount(parkCost);
@@ -1003,6 +1631,8 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
     }
     @Autowired
     private ParkingBetweenMemberService parkingBetweenMemberService;
+    @Autowired
+    private EcCouponService ecCouponService;
     @Override
     public Integer getParkingTime(ParkingRecord parkingRecord) throws Exception {
 
@@ -1166,7 +1796,210 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
 
         return parkingTimeInt;
     }
+    @Override
+    public Integer getParkingTime2new(ParkingRecord parkingRecord) throws Exception {
+        //ParkingInfo parkingInfo = parkingInfoService.getById(parkingRecord.getParkId());
+        if (parkingRecord.getOutParkingTime() == null) {
+            parkingRecord.setOutParkingTime(new Date());
+        }
+        //1.总时长
+        long parkingTimeLong = DateUtil.between(parkingRecord.getInParkingTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE);
+        Integer parkingTimeAll =Convert.toInt(parkingTimeLong);
+        //免费总时长
+        Integer freeTimeAll =0;
+        parkingRecord.setParkingTime(parkingTimeAll);
+        updateById(parkingRecord);
+        QueryWrapper<EcCoupon> ecCouponQueryWrapper = new QueryWrapper<>();
+        ecCouponQueryWrapper.eq("car_num", parkingRecord.getCarNum());
+        ecCouponQueryWrapper.eq("park_id", parkingRecord.getParkId());
+        List<EcCoupon> list = ecCouponService.list(ecCouponQueryWrapper);
+        //2.充电免费停车时长
+        Integer freeTime0 =0;
+        for(EcCoupon ecCoupon:list){
+            if(ecCoupon.getGiveTimes()!=null){
+                freeTime0 +=ecCoupon.getGiveTimes();
+            }
+        }
+        //3.系统设置-新能源车免费时长和燃油车免费时长
+        Integer freeTime1 =0;
+        String carNum = parkingRecord.getCarNum();
+        //停车场费用表-此处不能加
+//        ParkingFee parkingFee = parkingFeeService.findByParkId(parkingRecord.getParkId());
+//        if (carNum.length() == 8 && parkingFee.getNewEnergyFreeDuration()!=null) {
+//            freeTime1 =parkingFee.getNewEnergyFreeDuration();
+//        }
+//        if(carNum.length() == 7&&parkingFee.getFreeDuration()!=null){
+//            freeTime1 =parkingFee.getFreeDuration();
+//        }
+
+
+
+        freeTimeAll =freeTime0+freeTime1;
+        long decTimeMins=0;
+        //4.系统设置-锦天物业设置会员区间
+        //add by hbjzws 2023-10-09 锦天物业设置会员区间免费
+        if("5f8d343e-63d1-4ef0-9844-855ca020d92b".equals(parkingRecord.getParkId())){
+            //取区间会员表数据
+            QueryWrapper<ParkingBetweenMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+            parkingMemberQueryWrapper.eq("member_car_num", parkingRecord.getCarNum());
+            parkingMemberQueryWrapper.eq("park_id", parkingRecord.getParkId());
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+            parkingMemberQueryWrapper.orderByDesc("create_time");
+            parkingMemberQueryWrapper.last("LIMIT 1");
+            ParkingBetweenMember parkingBetweenMember = parkingBetweenMemberService.getOne(parkingMemberQueryWrapper);
+            if(parkingBetweenMember!=null){
+                String temStartDate01=DateUtil.format(parkingRecord.getInParkingTime(), "yyyy-MM-dd HH:mm:ss");//停车进出场时间区间
+                String temStartDate02=DateUtil.format(parkingRecord.getOutParkingTime(), "yyyy-MM-dd HH:mm:ss");
+
+                String temStartDate1=DateUtil.format( parkingBetweenMember.getMemberStartTime(), "yyyy-MM-dd")+" 00:00:00";//会员开始结束时间区间
+                String temStartDate2=DateUtil.format( parkingBetweenMember.getMemberEndTime(), "yyyy-MM-dd")+" 23:59:59";
+                String startT=parkingBetweenMember.getBtStartTime();//免费开始时间点
+                String endT=parkingBetweenMember.getBtEndTime();//免费结束时间点
+                decTimeMins= BetweenTimeUtil.getDecTimeMins(temStartDate01,temStartDate02,temStartDate1,temStartDate2,startT,endT);
+                log.warn(parkingRecord.getCarNum() + "区间会员停车免费时长:" + decTimeMins+"停车记录ID:"+parkingRecord.getParkId()+"区间会员ID:"+parkingBetweenMember.getId());
+            }
+        }
+        if (decTimeMins > 0) {
+            freeTimeAll+=Convert.toInt(decTimeMins);
+
+        }
+        //5.系统设置-会员
+        Integer freeTime5 =0;
+            //查询是否有会员
+            QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+            parkingMemberQueryWrapper.eq("member_car_num", parkingRecord.getCarNum());
+            parkingMemberQueryWrapper.eq("member_type", "1");
+            parkingMemberQueryWrapper.eq("park_id", parkingRecord.getParkId());
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+            //add by hbjzws 2023-5-26 修改同一个车主会员有多个,加个排序来取最新的记录
+            parkingMemberQueryWrapper.orderByDesc("create_time");
+            parkingMemberQueryWrapper.last("LIMIT 1");
+            ParkingMember parkingMember = parkingMemberService.getOne(parkingMemberQueryWrapper);
+            if (parkingMember != null) {
+                //车辆进场时间小于会员开始时间
+                if (parkingRecord.getInParkingTime().compareTo(parkingMember.getMemberStartTime()) < 0) {
+                    //车辆出场时间大于会员开始时间,小于等于会员结束时间
+                    if (parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberStartTime()) > 0 && parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberEndTime()) <= 0) {
+                        freeTime5 = Convert.toInt(DateUtil.between(parkingRecord.getInParkingTime(), parkingMember.getMemberStartTime(), DateUnit.MINUTE));
+                        //车辆出场时间大于会员结束时间
+                    } else if (parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberEndTime()) > 0) {
+                        int parkingTimeInt1 = Convert.toInt(DateUtil.between(parkingRecord.getInParkingTime(), parkingMember.getMemberStartTime(), DateUnit.MINUTE));
+                        int parkingTimeInt2 = Convert.toInt(DateUtil.between(parkingMember.getMemberEndTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE));
+                        freeTime5 = parkingTimeInt1 + parkingTimeInt2;
+                    }
+                    //车辆进场时间大于等于会员开始时间,小于会员结束时间
+                } else if (parkingRecord.getInParkingTime().compareTo(parkingMember.getMemberStartTime()) >= 0 && parkingRecord.getInParkingTime().compareTo(parkingMember.getMemberEndTime()) < 0) {
+                    //车辆出场时间小于等于会员结束时间
+                    if (parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberEndTime()) <= 0) {
+                        freeTime5 = parkingTimeAll;
+                    } else {
+                        freeTime5 = Convert.toInt(DateUtil.between(parkingMember.getMemberEndTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE));
+                    }
+                }
+            }
+
+        freeTimeAll+=freeTime5;
+        if(parkingTimeAll<freeTimeAll){
+            freeTimeAll =parkingTimeAll;
+        }
+        return parkingTimeAll-freeTimeAll;
+    }
+    @Override
+    public Integer getDisParkingTime(ParkingRecord parkingRecord) throws Exception {
+        if (parkingRecord.getOutParkingTime() == null) {
+            parkingRecord.setOutParkingTime(new Date());
+        }
+        //1.总时长
+        long parkingTimeLong = DateUtil.between(parkingRecord.getInParkingTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE);
+        Integer parkingTimeAll =Convert.toInt(parkingTimeLong);
+        //免费总时长
+        Integer freeTimeAll =0;
+        QueryWrapper<EcCoupon> ecCouponQueryWrapper = new QueryWrapper<>();
+        ecCouponQueryWrapper.eq("car_num", parkingRecord.getCarNum());
+        ecCouponQueryWrapper.eq("park_id", parkingRecord.getParkId());
+        List<EcCoupon> list = ecCouponService.list(ecCouponQueryWrapper);
+        //2.充电免费停车时长
+        Integer freeTime0 =0;
+        for(EcCoupon ecCoupon:list){
+            if(ecCoupon.getGiveTimes()!=null){
+                freeTime0 +=ecCoupon.getGiveTimes();
+            }
+        }
+        //3.系统设置-新能源车免费时长和燃油车免费时长
+        Integer freeTime1 =0;
+
+
+
+        freeTimeAll =freeTime0+freeTime1;
+        long decTimeMins=0;
+        //4.系统设置-锦天物业设置会员区间
+        //add by hbjzws 2023-10-09 锦天物业设置会员区间免费
+        if("5f8d343e-63d1-4ef0-9844-855ca020d92b".equals(parkingRecord.getParkId())){
+            //取区间会员表数据
+            QueryWrapper<ParkingBetweenMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+            parkingMemberQueryWrapper.eq("member_car_num", parkingRecord.getCarNum());
+            parkingMemberQueryWrapper.eq("park_id", parkingRecord.getParkId());
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+            parkingMemberQueryWrapper.orderByDesc("create_time");
+            parkingMemberQueryWrapper.last("LIMIT 1");
+            ParkingBetweenMember parkingBetweenMember = parkingBetweenMemberService.getOne(parkingMemberQueryWrapper);
+            if(parkingBetweenMember!=null){
+                String temStartDate01=DateUtil.format(parkingRecord.getInParkingTime(), "yyyy-MM-dd HH:mm:ss");//停车进出场时间区间
+                String temStartDate02=DateUtil.format(parkingRecord.getOutParkingTime(), "yyyy-MM-dd HH:mm:ss");
+
+                String temStartDate1=DateUtil.format( parkingBetweenMember.getMemberStartTime(), "yyyy-MM-dd")+" 00:00:00";//会员开始结束时间区间
+                String temStartDate2=DateUtil.format( parkingBetweenMember.getMemberEndTime(), "yyyy-MM-dd")+" 23:59:59";
+                String startT=parkingBetweenMember.getBtStartTime();//免费开始时间点
+                String endT=parkingBetweenMember.getBtEndTime();//免费结束时间点
+                decTimeMins= BetweenTimeUtil.getDecTimeMins(temStartDate01,temStartDate02,temStartDate1,temStartDate2,startT,endT);
+                log.warn(parkingRecord.getCarNum() + "区间会员停车免费时长:" + decTimeMins+"停车记录ID:"+parkingRecord.getParkId()+"区间会员ID:"+parkingBetweenMember.getId());
+            }
+        }
+        if (decTimeMins > 0) {
+            freeTimeAll+=Convert.toInt(decTimeMins);
+
+        }
+        //5.系统设置-会员
+        Integer freeTime5 =0;
+        //查询是否有会员
+        QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+        parkingMemberQueryWrapper.eq("member_car_num", parkingRecord.getCarNum());
+        parkingMemberQueryWrapper.eq("member_type", "1");
+        parkingMemberQueryWrapper.eq("park_id", parkingRecord.getParkId());
+        parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+        //add by hbjzws 2023-5-26 修改同一个车主会员有多个,加个排序来取最新的记录
+        parkingMemberQueryWrapper.orderByDesc("create_time");
+        parkingMemberQueryWrapper.last("LIMIT 1");
+        ParkingMember parkingMember = parkingMemberService.getOne(parkingMemberQueryWrapper);
+        if (parkingMember != null) {
+            //车辆进场时间小于会员开始时间
+            if (parkingRecord.getInParkingTime().compareTo(parkingMember.getMemberStartTime()) < 0) {
+                //车辆出场时间大于会员开始时间,小于等于会员结束时间
+                if (parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberStartTime()) > 0 && parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberEndTime()) <= 0) {
+                    freeTime5 = Convert.toInt(DateUtil.between(parkingRecord.getInParkingTime(), parkingMember.getMemberStartTime(), DateUnit.MINUTE));
+                    //车辆出场时间大于会员结束时间
+                } else if (parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberEndTime()) > 0) {
+                    int parkingTimeInt1 = Convert.toInt(DateUtil.between(parkingRecord.getInParkingTime(), parkingMember.getMemberStartTime(), DateUnit.MINUTE));
+                    int parkingTimeInt2 = Convert.toInt(DateUtil.between(parkingMember.getMemberEndTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE));
+                    freeTime5 = parkingTimeInt1 + parkingTimeInt2;
+                }
+                //车辆进场时间大于等于会员开始时间,小于会员结束时间
+            } else if (parkingRecord.getInParkingTime().compareTo(parkingMember.getMemberStartTime()) >= 0 && parkingRecord.getInParkingTime().compareTo(parkingMember.getMemberEndTime()) < 0) {
+                //车辆出场时间小于等于会员结束时间
+                if (parkingRecord.getOutParkingTime().compareTo(parkingMember.getMemberEndTime()) <= 0) {
+                    freeTime5 = parkingTimeAll;
+                } else {
+                    freeTime5 = Convert.toInt(DateUtil.between(parkingMember.getMemberEndTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE));
+                }
+            }
+        }
 
+        freeTimeAll+=freeTime5;
+        if(parkingTimeAll<freeTimeAll){
+            freeTimeAll =parkingTimeAll;
+        }
+        return freeTimeAll;
+    }
     @Override
     public TemporaryCarNumInParkVo generateTemporaryCarNum(TemporaryVo temporaryVo) throws Exception {
 

+ 26 - 22
src/test/java/com/charging/chargingparking/ChargingParkingApplicationTests.java

@@ -107,21 +107,21 @@ class ChargingParkingApplicationTests {
     @Test
     void testService()  {
 
-        QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
-        parkingRecordQueryWrapper.lt("create_time",DateUtil.offsetDay(new Date(),-30));
-        parkingRecordQueryWrapper.eq("release_status","0");
-        List<ParkingRecord> parkingRecordList = parkingRecordService.list(parkingRecordQueryWrapper);
-        if (parkingRecordList.size()>0){
-            for (ParkingRecord parkingRecord : parkingRecordList){
-                System.out.println("---"+parkingRecord.getCreateTime());
-                parkingRecord.setReleaseStatus("1");
-                parkingRecord.setDelFlag(true);
-                parkingRecord.setUpdateBy("system");
-                parkingRecord.setUpdateTime(new Date());
-                parkingRecord.setRemark(parkingRecord.getRemark()+"系统清理离场");
-                parkingRecordService.updateById(parkingRecord);
-            }
-        }
+//        QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
+//        parkingRecordQueryWrapper.lt("create_time",DateUtil.offsetDay(new Date(),-30));
+//        parkingRecordQueryWrapper.eq("release_status","0");
+//        List<ParkingRecord> parkingRecordList = parkingRecordService.list(parkingRecordQueryWrapper);
+//        if (parkingRecordList.size()>0){
+//            for (ParkingRecord parkingRecord : parkingRecordList){
+//                System.out.println("---"+parkingRecord.getCreateTime());
+//                parkingRecord.setReleaseStatus("1");
+//                parkingRecord.setDelFlag(true);
+//                parkingRecord.setUpdateBy("system");
+//                parkingRecord.setUpdateTime(new Date());
+//                parkingRecord.setRemark(parkingRecord.getRemark()+"系统清理离场");
+//                parkingRecordService.updateById(parkingRecord);
+//            }
+//        }
 
 
 //        EcCoupon ecCoupon = new EcCoupon();
@@ -667,7 +667,8 @@ class ChargingParkingApplicationTests {
             }
 
 
-            ParkingCostDTO parkingCostDTO  = parkingFeeService.parkingCost2(parkingRecord0);
+            ParkingCostDTO parkingCostDTO  = null;
+                    //parkingFeeService.parkingCost2(parkingRecord0);
 
             System.out.println(parkingCostDTO);
             BigDecimal parkingCost = parkingCostDTO.getNeedAmount();
@@ -707,9 +708,12 @@ class ChargingParkingApplicationTests {
             //4
             //1778256096084987905
             //1778720139514056706
-            ParkingRecord parkingRecord = parkingRecordService.getById("1791878016160337921");
-            ParkingCostDTO parkingCostDTO  = parkingFeeService.parkingCost2(parkingRecord);
+            ParkingRecord parkingRecord = parkingRecordService.getById("1811757608059056130");
 
+//            Integer times=parkingRecordService.getParkingTime2new(parkingRecord);
+//            System.out.println("停车时长为:"+times);
+            ParkingCostDTO parkingCostDTO  = parkingFeeService.parkingCost2(parkingRecord);
+           // ParkingCostDTO parkingCostDTO  = parkingFeeService.parkingCost2new(parkingRecord);
             System.out.println(parkingCostDTO);
 
           /*  QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
@@ -786,8 +790,8 @@ class ChargingParkingApplicationTests {
     void testGetParkingCost() {
         try {
            ParkingRecord parkingRecord = parkingRecordService.getById("1541977896875294744");
-            ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord);
-            System.out.println(parkingCostDTO.toString());
+//            ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord);
+//            System.out.println(parkingCostDTO.toString());
         } catch (Exception ex) {
             log.error(ex.getMessage(),ex);
         }
@@ -798,9 +802,9 @@ class ChargingParkingApplicationTests {
         try{
             ParkingRecord parkingRecord = parkingRecordService.getById("1545572965602619394");
             int time =  parkingRecordService.getParkingTime(parkingRecord);
-            ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord);
+            //ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost2(parkingRecord);
             System.out.println("停车时间:"+time);
-            System.out.println("费用:"+parkingCostDTO.getNeedAmount());
+            //System.out.println("费用:"+parkingCostDTO.getNeedAmount());
         }catch (Exception ex){
 
         }