Browse Source

设备显屏与语音播报修改

fulonglong 3 years ago
parent
commit
9e1110f623
16 changed files with 337 additions and 100 deletions
  1. 2 0
      src/main/java/com/charging/chargingparking/constant/ParkingConstant.java
  2. 33 0
      src/main/java/com/charging/chargingparking/dto/ParkingCostDTO.java
  3. 3 0
      src/main/java/com/charging/chargingparking/dto/ParkingDetailDTO.java
  4. 52 0
      src/main/java/com/charging/chargingparking/modules/backController/ParkingInfoController.java
  5. 1 2
      src/main/java/com/charging/chargingparking/modules/mobileController/DemoController.java
  6. 1 6
      src/main/java/com/charging/chargingparking/modules/mobileController/ParkingMemberController.java
  7. 1 6
      src/main/java/com/charging/chargingparking/modules/mobileController/ParkingRecordController.java
  8. 5 1
      src/main/java/com/charging/chargingparking/modules/pay/alipay/AlipayController.java
  9. 5 1
      src/main/java/com/charging/chargingparking/modules/pay/wechat/WxPayController.java
  10. 22 0
      src/main/java/com/charging/chargingparking/modules/vo/ParkingInfoVo.java
  11. 4 1
      src/main/java/com/charging/chargingparking/service/ParkingFeeService.java
  12. 12 6
      src/main/java/com/charging/chargingparking/service/impl/ParkingChannelServiceImpl.java
  13. 53 4
      src/main/java/com/charging/chargingparking/service/impl/ParkingFeeServiceImpl.java
  14. 73 42
      src/main/java/com/charging/chargingparking/service/impl/ParkingMemberServiceImpl.java
  15. 38 19
      src/main/java/com/charging/chargingparking/service/impl/ParkingRecordServiceImpl.java
  16. 32 12
      src/test/java/com/charging/chargingparking/ChargingParkingApplicationTests.java

+ 2 - 0
src/main/java/com/charging/chargingparking/constant/ParkingConstant.java

@@ -14,4 +14,6 @@ public class ParkingConstant {
     public static final String OUTMESSAGE = "一路顺风";
 
     public static final String INMESSAGE = "欢迎光临";
+
+    public static final String NEEDPAY = "请付款";
 }

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

@@ -0,0 +1,33 @@
+package com.charging.chargingparking.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2022/6/14 0014 上午 11:29
+ */
+@Data
+public class ParkingCostDTO {
+
+    /**
+     * 总金额
+     */
+    private BigDecimal totalAmount;
+
+    /**
+     * 优惠金额
+     */
+    private BigDecimal discountAmount;
+
+    /**
+     * 应缴金额
+     */
+    private BigDecimal needAmount;
+
+    /**
+     * 每小时费用
+     */
+    private BigDecimal hourCost;
+}

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

@@ -43,5 +43,8 @@ public class ParkingDetailDTO {
     //已支付
     private BigDecimal payed;
 
+    //每小时费用
+    private BigDecimal hourCost;
+
 
 }

+ 52 - 0
src/main/java/com/charging/chargingparking/modules/backController/ParkingInfoController.java

@@ -0,0 +1,52 @@
+package com.charging.chargingparking.modules.backController;
+
+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.entity.ParkingInfo;
+import com.charging.chargingparking.modules.vo.ParkingInfoVo;
+import com.charging.chargingparking.service.ParkingInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2022/6/14 0014 上午 9:34
+ */
+@RestController
+@Slf4j
+@RequestMapping("/backParkingInfo")
+public class ParkingInfoController {
+
+    @Autowired
+    private ParkingInfoService parkingInfoService;
+
+    @GetMapping("parkingInfoList")
+    public MessageResult<Object> parkingInfoList(String parkingName,@RequestParam Integer pageSize,@RequestParam Integer pageIndex) {
+
+        try{
+            QueryWrapper<ParkingInfo> parkingInfoQueryWrapper = new QueryWrapper<>();
+            parkingInfoQueryWrapper.like("parking_name",parkingName);
+            Page<ParkingInfo> page = parkingInfoService.page(new Page<>(pageIndex,pageSize),parkingInfoQueryWrapper);
+            List<ParkingInfo> list = page.getRecords();
+
+
+
+
+
+
+
+
+        }catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+
+        return null;
+    }
+}

+ 1 - 2
src/main/java/com/charging/chargingparking/modules/controller/DemoController.java → src/main/java/com/charging/chargingparking/modules/mobileController/DemoController.java

@@ -1,4 +1,4 @@
-package com.charging.chargingparking.modules.controller;
+package com.charging.chargingparking.modules.mobileController;
 
 import com.charging.chargingparking.utils.LedTcProtocol;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -6,7 +6,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.io.UnsupportedEncodingException;
 import java.util.*;
 
 @RestController

+ 1 - 6
src/main/java/com/charging/chargingparking/modules/controller/ParkingMemberController.java → src/main/java/com/charging/chargingparking/modules/mobileController/ParkingMemberController.java

@@ -1,16 +1,13 @@
-package com.charging.chargingparking.modules.controller;
+package com.charging.chargingparking.modules.mobileController;
 
 import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.charging.chargingparking.dto.AddParkingMember;
-import com.charging.chargingparking.dto.AlarmInfoPlate;
 import com.charging.chargingparking.entity.ParkingMemberLog;
 import com.charging.chargingparking.service.ParkingMemberLogService;
 import com.charging.chargingparking.service.ParkingMemberService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.BindingResult;
-import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -18,8 +15,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * @author 墨鱼_mo

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

@@ -1,4 +1,4 @@
-package com.charging.chargingparking.modules.controller;
+package com.charging.chargingparking.modules.mobileController;
 
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
@@ -13,12 +13,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.math.BigDecimal;
-import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 /**

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

@@ -17,6 +17,7 @@ import com.alipay.api.response.AlipayTradeCreateResponse;
 import com.alipay.api.response.AlipayTradePrecreateResponse;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.charging.chargingparking.dto.MessageResult;
+import com.charging.chargingparking.dto.ParkingCostDTO;
 import com.charging.chargingparking.dto.UserInfo;
 import com.charging.chargingparking.entity.ParkingPay;
 import com.charging.chargingparking.entity.ParkingRecord;
@@ -150,8 +151,11 @@ public class AlipayController {
             if (parkingRecord == null) {
                 throw new Exception("订单不存在");
             }
+
+
             //记录总应缴
-            BigDecimal parkCost = parkingFeeService.parkingCost(parkingRecord);
+            ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost(parkingRecord);
+            BigDecimal parkCost = parkingCostDTO.getNeedAmount();
             parkingRecord.setTotalAmount(parkCost);
             parkingRecord.setUpdateTime(new Date());
             parkingRecordService.updateById(parkingRecord);

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

@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.charging.chargingparking.dto.AccessToken;
 import com.charging.chargingparking.dto.MessageResult;
+import com.charging.chargingparking.dto.ParkingCostDTO;
 import com.charging.chargingparking.dto.UserInfo;
 import com.charging.chargingparking.entity.ParkingPay;
 import com.charging.chargingparking.entity.ParkingRecord;
@@ -79,8 +80,11 @@ public class WxPayController {
             if (parkingRecord == null) {
                 throw new Exception("记录不存在");
             }
+
+
             //记录总应缴
-            BigDecimal parkCost = parkingFeeService.parkingCost(parkingRecord);
+            ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost(parkingRecord);
+            BigDecimal parkCost = parkingCostDTO.getNeedAmount();
 
             parkingRecord.setTotalAmount(parkCost);
             parkingRecord.setUpdateTime(new Date());

+ 22 - 0
src/main/java/com/charging/chargingparking/modules/vo/ParkingInfoVo.java

@@ -0,0 +1,22 @@
+package com.charging.chargingparking.modules.vo;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+/**
+ * @author 墨鱼_mo
+ * @date 2022/6/14 0014 上午 9:37
+ */
+@Data
+public class ParkingInfoVo {
+
+    private Integer pageSize;
+
+    private Integer pageIndex;
+
+    private String parkingName;
+
+    private String memberName;
+
+    private String address;
+}

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

@@ -1,5 +1,6 @@
 package com.charging.chargingparking.service;
 
+import com.charging.chargingparking.dto.ParkingCostDTO;
 import com.charging.chargingparking.entity.ParkingFee;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.charging.chargingparking.entity.ParkingRecord;
@@ -11,6 +12,8 @@ import java.math.BigDecimal;
  */
 public interface ParkingFeeService extends IService<ParkingFee> {
 
-    BigDecimal parkingCost(ParkingRecord parkingRecord) throws Exception;
+    ParkingCostDTO parkingCost(ParkingRecord parkingRecord) throws Exception;
+
+ //   BigDecimal allCost(ParkingRecord parkingRecord) throws Exception;
 
 }

+ 12 - 6
src/main/java/com/charging/chargingparking/service/impl/ParkingChannelServiceImpl.java

@@ -10,10 +10,7 @@ import com.alipay.api.domain.DmActivityShopData;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.charging.chargingparking.constant.ParkingConstant;
-import com.charging.chargingparking.dto.ReceiveDeviceDTO;
-import com.charging.chargingparking.dto.ResponseAlarmInfoPlate;
-import com.charging.chargingparking.dto.SerialData;
-import com.charging.chargingparking.dto.WhiteListOperate;
+import com.charging.chargingparking.dto.*;
 import com.charging.chargingparking.entity.ParkingChannel;
 import com.charging.chargingparking.entity.ParkingFee;
 import com.charging.chargingparking.entity.ParkingPay;
@@ -47,6 +44,9 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
     @Autowired
     private ParkingFeeService parkingFeeService;
 
+    @Autowired
+    private ParkingMemberService parkingMemberService;
+
     @Autowired
     private ParkingWhiteService parkingWhiteService;
 
@@ -105,7 +105,7 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
         else {
             //TODO 处理道闸处扫码支付抬杠,逻辑:条件 道闸id,支付状态,处理状态,时间范围
             Map<String,Object> param = new HashMap<>();
-            param.put("out_channel_id",parkingChannel.getParkId());
+            param.put("out_channel_id",parkingChannel.getId());
             param.put("release_status","0");
             param.put("pay_time",DateUtil.offset(new Date(), DateField.MINUTE, -30));
             param.put("pay_status",20);
@@ -113,7 +113,8 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
             if (parkingPay != null) {
                 ParkingRecord parkingRecord = parkingRecordService.getById(parkingPay.getParkingRecordId());
                 //获取此停车场记录应缴费用
-                BigDecimal parkCost = parkingFeeService.parkingCost(parkingRecord);
+                ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost(parkingRecord);
+                BigDecimal parkCost = parkingCostDTO.getNeedAmount();
                 //如果应缴费用和已缴费用相同则开闸
                 if (parkCost.compareTo(parkingRecord.getPayAmount()) == 0) {
                     parkingRecord.setReleaseStatus("1");
@@ -121,6 +122,11 @@ public class ParkingChannelServiceImpl extends ServiceImpl<ParkingChannelMapper,
                     responseAlarmInfoPlate.setInfo(ParkingConstant.OK);
                     responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.OUTMESSAGE, parkingChannel.getId()));
 
+                    //出停车场检测是否需要删除临时会员
+                    if (map.get(ParkingConstant.RESPONSEKEY) !=null && "1".equals(parkingRecord.getReleaseStatus())){
+                        parkingMemberService.cloudDelete(parkingChannel.getParkId(),parkingRecord.getCarNum());
+                    }
+
 
                 }
             }

+ 53 - 4
src/main/java/com/charging/chargingparking/service/impl/ParkingFeeServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.math.MathUtil;
 import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.charging.chargingparking.dto.ParkingCostDTO;
 import com.charging.chargingparking.entity.ParkingFee;
 import com.charging.chargingparking.entity.ParkingMember;
 import com.charging.chargingparking.entity.ParkingRecord;
@@ -39,7 +40,8 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
 
 
     @Override
-    public BigDecimal parkingCost(ParkingRecord parkingRecord) throws Exception {
+    public ParkingCostDTO parkingCost(ParkingRecord parkingRecord) throws Exception {
+        ParkingCostDTO parkingCostDTO = new ParkingCostDTO();
 
         long parkingTimeLong = DateUtil.between(parkingRecord.getInParkingTime(),new Date(),DateUnit.MINUTE);
         parkingRecord.setParkingTime(Convert.toInt(parkingTimeLong));
@@ -47,9 +49,12 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
         parkingRecordService.updateById(parkingRecord);
 
 
-
+        //总金额
+        BigDecimal totalAmount = BigDecimal.ZERO;
+        //应缴金额
         BigDecimal resultCost = BigDecimal.ZERO;
 
+
         //获取停车场费用信息
         QueryWrapper<ParkingFee> parkingFeeQueryWrapper = new QueryWrapper<>();
         parkingFeeQueryWrapper.eq("park_id", parkingRecord.getParkId());
@@ -66,9 +71,14 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
             //需要计算费用的时间
             int needCalcMin = 0;
 
+
+
+
             //无会员
             if (parkingMember == null) {
                 needCalcMin = parkingRecord.getParkingTime();
+
+
             }
             //有会员
             else {
@@ -112,9 +122,41 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
 
             }
 
+            //计算非会员情况下费用
+            int time = parkingRecord.getParkingTime();
+            BigDecimal hours0 = BigDecimal.ZERO;
+            //需要计算费用的时间大于等于免费时间要计算费用
+            if (time > parkingFee.getFreeDuration()) {
+                hours0 = NumberUtil.div(Convert.toBigDecimal(time), Convert.toBigDecimal(60), 0, RoundingMode.UP);
+                totalAmount = parkingFee.getHourCost().multiply(hours0);
+            }
+
+            if (hours0.compareTo(Convert.toBigDecimal(24)) >=0){
+                //判读当日最大金额
+                BigDecimal maxCost = Convert.toBigDecimal(24).multiply(parkingFee.getHourCost());
+                //如果当日最大金额大于封顶金额,需要处理逻辑
+                if (maxCost.compareTo(parkingFee.getDayCappingCost())>0){
+                    BigDecimal days = NumberUtil.div(Convert.toBigDecimal(hours0),Convert.toBigDecimal(24),0,RoundingMode.DOWN);
+                    //剩余小时
+                    BigDecimal surplusHours = hours0.subtract(days.multiply(new BigDecimal(24)));
+                    //剩余费用
+                    BigDecimal surplusCost = surplusHours.multiply(parkingFee.getHourCost());
+                    if (surplusCost.compareTo(parkingFee.getDayCappingCost())>0){
+                        surplusCost = parkingFee.getDayCappingCost();
+                    }
+                    BigDecimal totalCost = days.multiply(parkingFee.getDayCappingCost()).add(surplusCost);
+
+                    totalAmount = totalCost;
+
+                }
+            }
+
+
+
+
             BigDecimal hours = BigDecimal.ZERO;
             //需要计算费用的时间大于等于免费时间要计算费用
-            if (needCalcMin >= parkingFee.getFreeDuration()) {
+            if (needCalcMin > parkingFee.getFreeDuration()) {
                  hours = NumberUtil.div(Convert.toBigDecimal(needCalcMin), Convert.toBigDecimal(60), 0, RoundingMode.UP);
                  resultCost = parkingFee.getHourCost().multiply(hours);
             }
@@ -140,8 +182,15 @@ public class ParkingFeeServiceImpl extends ServiceImpl<ParkingFeeMapper, Parking
             }
 
         }
-        return resultCost;
+
+        parkingCostDTO.setNeedAmount(resultCost);
+        assert parkingFee != null;
+        parkingCostDTO.setHourCost(parkingFee.getHourCost());
+        parkingCostDTO.setTotalAmount(totalAmount);
+        parkingCostDTO.setDiscountAmount(totalAmount.subtract(resultCost));
+        return parkingCostDTO;
     }
+
 }
 
 

+ 73 - 42
src/main/java/com/charging/chargingparking/service/impl/ParkingMemberServiceImpl.java

@@ -7,15 +7,9 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.charging.chargingparking.dto.AddParkingMember;
-import com.charging.chargingparking.entity.ParkingChannel;
-import com.charging.chargingparking.entity.ParkingMember;
-import com.charging.chargingparking.entity.ParkingMemberLog;
-import com.charging.chargingparking.entity.ParkingWhite;
-import com.charging.chargingparking.service.ParkingChannelService;
-import com.charging.chargingparking.service.ParkingMemberLogService;
-import com.charging.chargingparking.service.ParkingMemberService;
+import com.charging.chargingparking.entity.*;
+import com.charging.chargingparking.service.*;
 import com.charging.chargingparking.mapper.ParkingMemberMapper;
-import com.charging.chargingparking.service.ParkingWhiteService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -29,7 +23,7 @@ import java.util.List;
 @Service
 @Transactional
 public class ParkingMemberServiceImpl extends ServiceImpl<ParkingMemberMapper, ParkingMember>
-    implements ParkingMemberService{
+        implements ParkingMemberService {
 
     @Autowired
     private ParkingMemberLogService parkingMemberLogService;
@@ -37,51 +31,88 @@ public class ParkingMemberServiceImpl extends ServiceImpl<ParkingMemberMapper, P
     @Autowired
     private ParkingChannelService parkingChannelService;
 
+    @Autowired
+    private ParkingRecordService parkingRecordService;
+
     @Autowired
     private ParkingWhiteService parkingWhiteService;
 
     @Override
     public void addParkingMember(AddParkingMember addParkingMember) throws Exception {
         QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
-        parkingMemberQueryWrapper.eq("park_id",addParkingMember.getParkingUname());
-        parkingMemberQueryWrapper.eq("member_car_num",addParkingMember.getCarNum());
-        parkingMemberQueryWrapper.eq("cloud_del_flag",false);
+        parkingMemberQueryWrapper.eq("park_id", addParkingMember.getParkingUname());
+        parkingMemberQueryWrapper.eq("member_car_num", addParkingMember.getCarNum());
+        parkingMemberQueryWrapper.eq("cloud_del_flag", false);
         parkingMemberQueryWrapper.orderByDesc("create_time");
         parkingMemberQueryWrapper.last("LIMIT 1");
         ParkingMember parkingMember = getOne(parkingMemberQueryWrapper);
 
-        if (parkingMember == null){
+        Integer min = addParkingMember.getMemberMin();
+        if (parkingMember == null) {
             ParkingMember parkingMember1 = new ParkingMember();
             parkingMember1.setParkId(addParkingMember.getParkingUname());
             parkingMember1.setMemberCarNum(addParkingMember.getCarNum());
             parkingMember1.setMemberStartTime(addParkingMember.getMemberStartTime());
-            parkingMember1.setMemberEndTime(DateUtil.offset(addParkingMember.getMemberStartTime(),DateField.MINUTE,addParkingMember.getMemberMin()));
+            if (min <= 120) {
+                min = 120;
+            }
+            parkingMember1.setMemberEndTime(DateUtil.offset(addParkingMember.getMemberStartTime(), DateField.MINUTE, min));
             parkingMember1.setCreateTime(new Date());
             save(parkingMember1);
             //会员日志
             ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
             parkingMemberLog.setParkingMemberId(parkingMember1.getId());
             parkingMemberLog.setCreateTime(new Date());
-            parkingMemberLog.setContent(StrUtil.format("{}会员新增,会员时长{}分钟",addParkingMember.getCarNum(),addParkingMember.getMemberMin()));
+            parkingMemberLog.setContent(StrUtil.format("{}会员新增,会员时长{}分钟", addParkingMember.getCarNum(), min));
             parkingMemberLogService.save(parkingMemberLog);
 
-        }else {
+        } else {
+
+            //如果会员存在并且未出场则时间累加
+            QueryWrapper<ParkingRecord> parkingRecordQueryWrapper = new QueryWrapper<>();
+            parkingRecordQueryWrapper.eq("car_num", addParkingMember.getCarNum());
+            parkingRecordQueryWrapper.eq("park_id", addParkingMember.getParkingUname());
+            //     parkingRecordQueryWrapper.eq("release_status","0");
+            parkingRecordQueryWrapper.orderByDesc("create_time");
+            parkingRecordQueryWrapper.last("LIMIT 1");
+            ParkingRecord parkingRecord = parkingRecordService.getOne(parkingRecordQueryWrapper);
+
+
+            if (parkingRecord == null || "1".equals(parkingRecord.getReleaseStatus())) {
+                parkingMember.setMemberStartTime(addParkingMember.getMemberStartTime());
+
+                if (min <= 120) {
+                    min = 120;
+                }
+                parkingMember.setMemberEndTime(DateUtil.offset(addParkingMember.getMemberStartTime(), DateField.MINUTE, min));
+                parkingMember.setUpdateTime(new Date());
+                updateById(parkingMember);
+                //会员日志
+                ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+                parkingMemberLog.setParkingMemberId(parkingMember.getId());
+                parkingMemberLog.setCreateTime(new Date());
+                parkingMemberLog.setContent(StrUtil.format("{}会员更新会员时间,会员时长{}分钟", parkingMember.getMemberCarNum(), addParkingMember.getMemberMin()));
+                parkingMemberLogService.save(parkingMemberLog);
+            } else {
+                if ("0".equals(parkingRecord.getReleaseStatus())) {
+                    parkingMember.setMemberEndTime(DateUtil.offset(parkingMember.getMemberEndTime(), DateField.MINUTE, addParkingMember.getMemberMin()));
+                    parkingMember.setUpdateTime(new Date());
+                    updateById(parkingMember);
+                    //会员日志
+                    ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+                    parkingMemberLog.setParkingMemberId(parkingMember.getId());
+                    parkingMemberLog.setCreateTime(new Date());
+                    parkingMemberLog.setContent(StrUtil.format("{}延长会员时间,延长时长{}分钟", parkingMember.getMemberCarNum(), addParkingMember.getMemberMin()));
+                    parkingMemberLogService.save(parkingMemberLog);
+                }
+
+            }
 
-            parkingMember.setMemberStartTime(addParkingMember.getMemberStartTime());
-            parkingMember.setMemberEndTime(DateUtil.offset(addParkingMember.getMemberStartTime(), DateField.MINUTE,addParkingMember.getMemberMin()));
-            parkingMember.setUpdateTime(new Date());
-            updateById(parkingMember);
-            //会员日志
-            ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
-            parkingMemberLog.setParkingMemberId(parkingMember.getId());
-            parkingMemberLog.setCreateTime(new Date());
-            parkingMemberLog.setContent(StrUtil.format("{}会员更新会员时间,会员时长{}分钟",parkingMember.getMemberCarNum(),addParkingMember.getMemberMin()));
-            parkingMemberLogService.save(parkingMemberLog);
 
         }
 
         //下发白名单
-        parkingWhiteService.addWhiteList(addParkingMember.getParkingUname(),addParkingMember.getCarNum(),addParkingMember.getMemberStartTime(),DateUtil.offset(addParkingMember.getMemberStartTime(),DateField.MINUTE,addParkingMember.getMemberMin()));
+        parkingWhiteService.addWhiteList(addParkingMember.getParkingUname(), addParkingMember.getCarNum(), addParkingMember.getMemberStartTime(), DateUtil.offset(addParkingMember.getMemberStartTime(), DateField.MINUTE, addParkingMember.getMemberMin()));
 
 
     }
@@ -89,12 +120,12 @@ public class ParkingMemberServiceImpl extends ServiceImpl<ParkingMemberMapper, P
     @Override
     public void cloudDelete(String parkId, String license) {
         QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
-        parkingMemberQueryWrapper.eq("park_id",parkId);
-        parkingMemberQueryWrapper.eq("member_car_num",license);
-        parkingMemberQueryWrapper.eq("cloud_del_flag",false);
-        parkingMemberQueryWrapper.lt("member_end_time",new Date());
+        parkingMemberQueryWrapper.eq("park_id", parkId);
+        parkingMemberQueryWrapper.eq("member_car_num", license);
+        parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+        parkingMemberQueryWrapper.lt("member_end_time", new Date());
         ParkingMember parkingMember = getOne(parkingMemberQueryWrapper);
-        if (parkingMember != null){
+        if (parkingMember != null) {
             parkingMember.setCloudDelFlag(true);
             parkingMember.setUpdateTime(new Date());
             updateById(parkingMember);
@@ -103,26 +134,26 @@ public class ParkingMemberServiceImpl extends ServiceImpl<ParkingMemberMapper, P
             ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
             parkingMemberLog.setParkingMemberId(parkingMember.getId());
             parkingMemberLog.setCreateTime(new Date());
-            parkingMemberLog.setContent(StrUtil.format("{}会员出场,会员自动删除",parkingMember.getMemberCarNum()));
+            parkingMemberLog.setContent(StrUtil.format("{}会员出场,会员自动删除", parkingMember.getMemberCarNum()));
             parkingMemberLogService.save(parkingMemberLog);
 
-            parkingWhiteService.deleteWhiteList(parkId,parkingMember.getMemberCarNum());
+            parkingWhiteService.deleteWhiteList(parkId, parkingMember.getMemberCarNum());
         }
 
     }
 
     @Override
-    public Boolean parkingMemberStatus(String carNum,String parkId) throws Exception{
+    public Boolean parkingMemberStatus(String carNum, String parkId) throws Exception {
 
         QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();
-        parkingMemberQueryWrapper.eq("member_car_num",carNum);
-        parkingMemberQueryWrapper.eq("park_id",parkId);
-        parkingMemberQueryWrapper.lt("member_start_time",new Date());
-        parkingMemberQueryWrapper.gt("member_end_time",new Date());
-        parkingMemberQueryWrapper.eq("cloud_del_flag",false);
+        parkingMemberQueryWrapper.eq("member_car_num", carNum);
+        parkingMemberQueryWrapper.eq("park_id", parkId);
+        parkingMemberQueryWrapper.lt("member_start_time", new Date());
+        parkingMemberQueryWrapper.gt("member_end_time", new Date());
+        parkingMemberQueryWrapper.eq("cloud_del_flag", false);
         parkingMemberQueryWrapper.last("LIMIT 1");
-        ParkingMember parkingMember =  getOne(parkingMemberQueryWrapper);
-        if (parkingMember != null){
+        ParkingMember parkingMember = getOne(parkingMemberQueryWrapper);
+        if (parkingMember != null) {
             return true;
         }
         return false;

+ 38 - 19
src/main/java/com/charging/chargingparking/service/impl/ParkingRecordServiceImpl.java

@@ -9,10 +9,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.charging.chargingparking.constant.ParkingConstant;
-import com.charging.chargingparking.dto.AlarmInfoPlate;
-import com.charging.chargingparking.dto.ParkingDetailDTO;
-import com.charging.chargingparking.dto.ResponseAlarmInfoPlate;
-import com.charging.chargingparking.dto.SerialData;
+import com.charging.chargingparking.dto.*;
 import com.charging.chargingparking.entity.ParkingChannel;
 import com.charging.chargingparking.entity.ParkingInfo;
 import com.charging.chargingparking.entity.ParkingRecord;
@@ -184,7 +181,9 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
 
 
                 //获取车辆应缴费金额
-                BigDecimal parkingCost = parkingFeeService.parkingCost(parkingRecord0);
+                ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost(parkingRecord0);
+
+                BigDecimal parkingCost = parkingCostDTO.getNeedAmount();
 
                 if (parkingCost.subtract(parkingRecord0.getPayAmount()).compareTo(BigDecimal.ZERO) ==0){
                     responseAlarmInfoPlate.setInfo("ok");
@@ -194,15 +193,18 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
                     parkingRecord0.setReleaseStatus("1");
                 }else {
                     parkingRecord0.setTotalAmount(parkingCost);
+                    responseAlarmInfoPlate.setSerialData(stringUtils.getSerialData(ParkingConstant.NEEDPAY,parkingChannel.getId()));
+                    map.put(ParkingConstant.RESPONSEKEY,responseAlarmInfoPlate);
                 }
 
                 updateById(parkingRecord0);
+                //出停车场检测是否需要删除临时会员
+                if (map.get(ParkingConstant.RESPONSEKEY) !=null && "1".equals(parkingRecord0.getReleaseStatus())){
+                    parkingMemberService.cloudDelete(parkingChannel.getParkId(),license);
+                }
             }
 
-            //出停车场检测是否需要删除临时会员
-            if (map.get(ParkingConstant.RESPONSEKEY) !=null){
-                parkingMemberService.cloudDelete(parkingChannel.getParkId(),license);
-            }
+
         }
         return map;
     }
@@ -229,8 +231,14 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         if ("1".equals(parkingRecord.getReleaseStatus())){
             throw new Exception("无停车数据");
         }
-        BigDecimal parkCost = parkingFeeService.parkingCost(parkingRecord);
-        if (parkCost.compareTo(BigDecimal.ZERO) ==0){
+        ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost(parkingRecord);
+
+        //总金额
+        BigDecimal allCost = parkingCostDTO.getTotalAmount();
+        BigDecimal total = allCost.subtract(parkingRecord.getPayAmount());
+        BigDecimal parkCost = parkingCostDTO.getNeedAmount();
+        BigDecimal realCost = parkCost.subtract(parkingRecord.getPayAmount());
+        if (realCost.compareTo(BigDecimal.ZERO) ==0){
             throw new Exception("请直接离场");
         }
         ParkingDetailDTO parkingDetailDTO = new ParkingDetailDTO();
@@ -240,9 +248,13 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         parkingDetailDTO.setParkingTimeStr(StringUtils.getParkingTimeStr(parkingRecord.getParkingTime()));
         parkingDetailDTO.setParkingName(parkingInfo.getParkingName());
         parkingDetailDTO.setId(parkingRecord.getId());
-        parkingDetailDTO.setPayed(parkingRecord.getPayAmount());
-        parkingDetailDTO.setPrice(parkCost.subtract(parkingRecord.getPayAmount()));
-        parkingDetailDTO.setTotal(parkCost);
+        parkingDetailDTO.setHourCost(parkingCostDTO.getHourCost());
+        parkingDetailDTO.setTotal(total);
+        parkingDetailDTO.setDiscountMoney(parkingCostDTO.getDiscountAmount());
+      //  parkingDetailDTO.setPayed(parkingRecord.getPayAmount());
+        parkingDetailDTO.setPrice(parkingDetailDTO.getTotal().subtract(parkingDetailDTO.getDiscountMoney()));
+
+
 
         //修改停车记录
         parkingRecord.setTotalAmount(parkCost);
@@ -277,8 +289,14 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         parkingRecord.setOutParkingTime(new Date());
 
 
-        BigDecimal parkCost = parkingFeeService.parkingCost(parkingRecord);
-        if (parkCost.compareTo(BigDecimal.ZERO) ==0){
+        ParkingCostDTO parkingCostDTO = parkingFeeService.parkingCost(parkingRecord);
+        //应缴
+        BigDecimal parkCost = parkingCostDTO.getNeedAmount();
+        //总金额
+        BigDecimal allCost = parkingCostDTO.getTotalAmount();
+        BigDecimal total = allCost.subtract(parkingRecord.getPayAmount());
+        BigDecimal realCost = parkCost.subtract(parkingRecord.getPayAmount());
+        if (realCost.compareTo(BigDecimal.ZERO) ==0){
             throw new Exception("请直接离场");
         }
         ParkingDetailDTO parkingDetailDTO = new ParkingDetailDTO();
@@ -288,9 +306,10 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         parkingDetailDTO.setParkingTimeStr(StringUtils.getParkingTimeStr(parkingRecord.getParkingTime()));
         parkingDetailDTO.setParkingName(parkingInfo.getParkingName());
         parkingDetailDTO.setId(parkingRecord.getId());
-        parkingDetailDTO.setPayed(parkingRecord.getPayAmount());
-        parkingDetailDTO.setPrice(parkCost.subtract(parkingRecord.getPayAmount()));
-        parkingDetailDTO.setTotal(parkCost);
+        parkingDetailDTO.setHourCost(parkingCostDTO.getHourCost());
+        parkingDetailDTO.setTotal(total);
+        parkingDetailDTO.setDiscountMoney(parkingCostDTO.getDiscountAmount());
+        parkingDetailDTO.setPrice(parkingDetailDTO.getTotal().subtract(parkingDetailDTO.getDiscountMoney()));
 
         //修改停车记录
         parkingRecord.setTotalAmount(parkCost);

+ 32 - 12
src/test/java/com/charging/chargingparking/ChargingParkingApplicationTests.java

@@ -1,22 +1,28 @@
 package com.charging.chargingparking;
 
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.charging.chargingparking.config.ParkingConfig;
+import com.charging.chargingparking.constant.ParkingConstant;
+import com.charging.chargingparking.dto.ResponseAlarmInfoPlate;
 import com.charging.chargingparking.dto.SerialData;
+import com.charging.chargingparking.entity.ParkingPay;
 import com.charging.chargingparking.entity.ParkingRecord;
+import com.charging.chargingparking.mapper.ParkingPayMapper;
 import com.charging.chargingparking.mapper.ParkingRecordMapper;
-import com.charging.chargingparking.service.ParkingChannelVoiceService;
-import com.charging.chargingparking.service.ParkingFeeService;
-import com.charging.chargingparking.service.ParkingMemberService;
-import com.charging.chargingparking.service.ParkingRecordService;
+import com.charging.chargingparking.service.*;
 import com.charging.chargingparking.utils.StringUtils;
 import com.sun.org.apache.xpath.internal.operations.Bool;
+import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
@@ -24,19 +30,29 @@ import org.springframework.data.redis.core.ValueOperations;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 
 @SpringBootTest
+@Slf4j
 class ChargingParkingApplicationTests {
 
     @Autowired
     private ValueOperations<String, Object> valueOperations;
 
+    @Autowired
+    private StringUtils stringUtils;
+
     @Autowired
     private ParkingConfig parkingConfig;
 
+    @Autowired
+    private ParkingPayService parkingPayService;
+
     @Autowired
     private ParkingRecordService parkingRecordService;
 
@@ -49,6 +65,9 @@ class ChargingParkingApplicationTests {
     @Autowired
     private ParkingMemberService parkingMemberService;
 
+    @Autowired
+    private ParkingPayMapper parkingPayMapper;
+
     @Autowired
     private ParkingChannelVoiceService parkingChannelVoiceService;
 
@@ -58,9 +77,9 @@ class ChargingParkingApplicationTests {
 
         try {
             ParkingRecord parkingRecord = parkingRecordService.getById("1532283211508191233");
-            BigDecimal parkingCost = parkingFeeService.parkingCost(parkingRecord);
+          /*  BigDecimal parkingCost = parkingFeeService.parkingCost(parkingRecord);
 
-            System.out.println(parkingCost);
+            System.out.println(parkingCost);*/
         } catch (Exception ex) {
 
         }
@@ -93,12 +112,13 @@ class ChargingParkingApplicationTests {
     void testUtil() {
 
         try {
-            String a = null;
-
-         //   Supplier<Exception> supplier = () -> new Exception("SSS");
-            Assert.notBlank(a);
-
-            System.out.println(a);
+            Map<String,Object> param = new HashMap<>();
+            param.put("out_channel_id","2");
+            param.put("release_status","0");
+            param.put("pay_time", DateUtil.offset(new Date(), DateField.MINUTE, -30));
+            param.put("pay_status",20);
+            ParkingPay parkingPay = parkingPayService.findOneByParam(param);
+            log.warn(parkingPay.toString());
         } catch (Exception ex) {
             String b = ex.getMessage();
         }