Browse Source

增加区间会员的业务-锦天物业

hbjzws 1 year ago
parent
commit
be29614056

+ 103 - 0
src/main/java/com/charging/chargingparking/entity/ParkingBetweenMember.java

@@ -0,0 +1,103 @@
+package com.charging.chargingparking.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 停车系统中区间会员券记录
+ * @TableName base_parking_between_member
+ */
+@TableName(value ="base_parking_between_member")
+@Data
+public class ParkingBetweenMember implements Serializable {
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+    /**
+     *主键ID
+     */
+    @TableId
+    private String id;
+
+    /**
+     * 停车场id
+     */
+    private String parkId;
+
+    /**
+     * 姓名
+     */
+    private String memberName;
+
+    /**
+     * 手机号码
+     */
+    private String memberPhone;
+
+    /**
+     * 车牌号码
+     */
+    private String memberCarNum;
+
+    /**
+     * 会员开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date memberStartTime;
+
+    /**
+     * 会员结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+    private Date memberEndTime;
+    /**
+     * 时间段-开始时间(格式-------17:00:00)
+     */
+    private String btStartTime;
+
+    /**
+     * 时间段-结束时间(格式-------23:00:00)
+     */
+    private String btEndTime;
+    /**
+     * 是否删除
+     */
+    private Boolean delFlag = false;
+
+    /**
+     *
+     */
+    private String createBy;
+
+    /**
+     *
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date createTime;
+
+    /**
+     *
+     */
+    private String updateBy;
+
+    /**
+     *
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date updateTime;
+
+    /**
+     * 云平台的删除状态
+     */
+    private Boolean cloudDelFlag= false;
+    @TableField(exist = false)
+    private String parkName;
+    @TableField(exist = false)
+    private String parkingMemberId;
+
+}

+ 24 - 0
src/main/java/com/charging/chargingparking/mapper/ParkingBetweenMemberMapper.java

@@ -0,0 +1,24 @@
+package com.charging.chargingparking.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.charging.chargingparking.entity.ParkingBetweenMember;
+import com.charging.chargingparking.entity.ParkingMember;
+import com.charging.chargingparking.modules.common.dto.Sort;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Entity com.charging.chargingparking.entity.ParkingMember
+ */
+@Repository
+public interface ParkingBetweenMemberMapper extends BaseMapper<ParkingBetweenMember> {
+    List<ParkingBetweenMember> search(Map<String, Object> searchParams, List<Sort> sortList);
+
+    ParkingBetweenMember findByCarNum(String carNum);
+}
+
+
+
+

+ 228 - 0
src/main/java/com/charging/chargingparking/modules/mobileController/ParkingBetweenMemberController.java

@@ -0,0 +1,228 @@
+package com.charging.chargingparking.modules.mobileController;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.crypto.SecureUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.charging.chargingparking.dto.AddParkingMember;
+import com.charging.chargingparking.dto.MessageResult;
+import com.charging.chargingparking.dto.PojoUtils;
+import com.charging.chargingparking.entity.ParkingBetweenMember;
+import com.charging.chargingparking.entity.ParkingInfo;
+import com.charging.chargingparking.entity.ParkingMember;
+import com.charging.chargingparking.entity.ParkingMemberLog;
+import com.charging.chargingparking.modules.common.dto.Sort;
+import com.charging.chargingparking.modules.vo.Discount;
+import com.charging.chargingparking.service.ParkingBetweenMemberService;
+import com.charging.chargingparking.service.ParkingInfoService;
+import com.charging.chargingparking.service.ParkingMemberLogService;
+import com.charging.chargingparking.service.ParkingMemberService;
+import com.charging.chargingparking.utils.RespThirdVO;
+import com.charging.chargingparking.utils.RespVO;
+import com.charging.chargingparking.utils.RespVOBuilder;
+import com.charging.chargingparking.utils.StringUtils;
+import com.github.pagehelper.Page;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.*;
+
+/**
+ * @author hbjzws
+ * @date 2023/10/25 0002 下午 4:41
+ */
+@RestController
+@Slf4j
+@RequestMapping("/parkingBetweenMember")
+public class ParkingBetweenMemberController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+    @Autowired
+    private ParkingBetweenMemberService parkingBetweenMemberService;
+    @Autowired
+    private ParkingInfoService parkingInfoService;
+    @Autowired
+    private ParkingMemberService parkingMemberOrgService;
+    @Autowired
+    private ParkingMemberLogService parkingMemberLogService;
+    @ApiOperation(value = "列表")
+    @RequestMapping(value = "pageList", method = RequestMethod.POST)
+    public MessageResult<Map> pageList(
+            String parkId, String memberCarNum, String rangeDate, String cloudDelFlag,String memberName,
+            @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+            @RequestParam(value = "pageSize", defaultValue = "20") int pageSize
+           ) {
+        // @RequestAttribute String subject
+        MessageResult<Map> msgResult = new MessageResult<>();
+
+        Map<String, Object> searchParams = new HashMap<>();
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("a.create_time", "desc"));
+
+        if (com.charging.chargingparking.utils.StringUtils.isNotEmpty(parkId)) {
+            searchParams.put("parkId", parkId);
+        }
+        if (com.charging.chargingparking.utils.StringUtils.isNotEmpty(memberName)) {
+            searchParams.put("memberName", "%" + memberName + "%");
+        }
+        if (com.charging.chargingparking.utils.StringUtils.isNotEmpty(memberCarNum)) {
+            searchParams.put("memberCarNum", "%" + memberCarNum + "%");
+        }
+        if (com.charging.chargingparking.utils.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";
+            }
+
+            searchParams.put("startTime", startTime);
+            searchParams.put("endTime", endTime);
+        }
+
+        if (StringUtils.isNotEmpty(cloudDelFlag)) {
+            searchParams.put("cloudDelFlag", cloudDelFlag);
+        }
+        Page<ParkingBetweenMember> page = parkingBetweenMemberService.pageSearch(searchParams, pageIndex, pageSize, sortList);
+        for (ParkingBetweenMember parkingMember : page) {
+            ParkingInfo parkingInfo = parkingInfoService.getById(parkingMember.getParkId());
+            if (parkingInfo != null) {
+                parkingMember.setParkName(parkingInfo.getParkingName());
+            }
+        }
+
+        msgResult.setResult(true);
+        msgResult.setData(PojoUtils.pageWrapper(page));
+
+        return msgResult;
+    }
+    @ApiOperation(value = "历史数据迁移")
+    @PostMapping("memberMove")
+    public MessageResult<Boolean> memberMove (@Valid @RequestBody ParkingBetweenMember addParkingMember, @RequestAttribute String subject) {
+        addParkingMember.setUpdateBy(subject);
+        addParkingMember.setUpdateTime(new Date());
+        MessageResult<Boolean> msgResult = new MessageResult<>();
+        ParkingMember parkingMemberOrg =parkingMemberOrgService.getById(addParkingMember.getParkingMemberId());
+        if(parkingMemberOrg!=null&&"5f8d343e-63d1-4ef0-9844-855ca020d92b".equals(parkingMemberOrg.getParkId())){
+            parkingBetweenMemberService.memberMove(addParkingMember);
+        }else{
+            msgResult.setResult(false);
+            msgResult.setMessage("记录不存在或不是锦天物业的车辆");
+        }
+
+
+        return msgResult;
+    }
+    @ApiOperation(value = "删除")
+    @PostMapping("delete/{id}")
+    public MessageResult<Boolean> delete(@PathVariable("id") String id, @RequestAttribute String subject) {
+
+        MessageResult<Boolean> msgResult = new MessageResult<>();
+
+        try {
+            ParkingBetweenMember parkingMember = parkingBetweenMemberService.getById(id);
+
+            if(parkingMember!=null){
+               // parkingBetweenMemberService.removeById(parkingMember);
+                parkingMember.setUpdateBy(subject);
+                parkingMember.setUpdateTime(new Date());
+                parkingBetweenMemberService.cloudDeleteUpdate(parkingMember);
+                msgResult.setResult(true);
+                msgResult.setData(true);
+            }else{
+                msgResult.setResult(false);
+                msgResult.setMessage("记录不存在或已删除");
+            }
+
+
+
+
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+    @ApiOperation(value = "批量删除")
+    @PostMapping("batchDelete")
+    public MessageResult<Integer> batchDelete(@RequestBody List<String> idList, @RequestAttribute String subject) {
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+
+            for (String id : idList) {
+                ParkingBetweenMember parkingMember = parkingBetweenMemberService.getById(id);
+                parkingMember.setDelFlag(true);
+                parkingMember.setUpdateBy(subject);
+                parkingMember.setUpdateTime(new Date());
+                if(parkingMember!=null){
+                    parkingBetweenMemberService.cloudDeleteUpdate(parkingMember);
+                }
+
+            }
+
+            msgResult.setResult(true);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+    /**
+     * 区间会员新增和修改
+     * @param addParkingMember
+     * @param bindingResult
+     */
+    @PostMapping("addParkingMember")
+    public MessageResult<Boolean> addParkingMember(@Valid @RequestBody ParkingBetweenMember addParkingMember, BindingResult bindingResult, @RequestAttribute String subject) {
+        MessageResult<Boolean> msgResult = new MessageResult<>();
+        log.warn("传递参数:{}",JSONObject.toJSONString(addParkingMember));
+        addParkingMember.setCreateBy(subject);
+        addParkingMember.setCreateTime(new Date());
+        try {
+            if (bindingResult.hasErrors()){
+                throw new Exception(bindingResult.getFieldError().getDefaultMessage());
+            }
+            //判断2个时间区间的合法性
+            if(addParkingMember.getMemberStartTime().after(addParkingMember.getMemberEndTime())){
+                throw new Exception("会员时间段设置不对");
+            }
+            if(DateUtil.parse(addParkingMember.getBtStartTime()).after(DateUtil.parse(addParkingMember.getBtEndTime()))){
+                throw new Exception("会员时间点设置不对");
+            }
+            if(addParkingMember.getId()!=null){
+                addParkingMember.setUpdateBy(subject);
+                addParkingMember.setUpdateTime(new Date());
+            }
+            parkingBetweenMemberService.addParkingMemberWash(addParkingMember);
+            msgResult.setResult(true);
+        } catch (Exception ex) {
+            log.error(ex.getMessage(), ex);
+            //会员日志
+            ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+            parkingMemberLog.setCreateTime(new Date());
+            parkingMemberLog.setContent(StrUtil.format("{}区间会员新增失败,原因:{}",addParkingMember,ex.getMessage()));
+            parkingMemberLogService.save(parkingMemberLog);
+        }
+        return msgResult;
+    }
+
+}

+ 38 - 0
src/main/java/com/charging/chargingparking/service/ParkingBetweenMemberService.java

@@ -0,0 +1,38 @@
+package com.charging.chargingparking.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.charging.chargingparking.dto.AddParkingMember;
+import com.charging.chargingparking.entity.*;
+import com.charging.chargingparking.modules.common.dto.Sort;
+import com.charging.chargingparking.modules.vo.CarTypeVo;
+import com.charging.chargingparking.modules.vo.ParkingEnableVo;
+import com.github.pagehelper.Page;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ */
+public interface ParkingBetweenMemberService extends IService<ParkingBetweenMember> {
+    void addParkingMemberWash(ParkingBetweenMember addParkingMember);
+    void memberMove(ParkingBetweenMember addParkingMember);
+    void cloudDelete(String memberId, String parkId, String license);
+    void cloudDeleteUpdate(ParkingBetweenMember addParkingMember);
+    void cloudDeleteTemporary(String memberId, String parkId, String license, String reMark);
+
+    //ParkingEnableVo parkingMemberStatus(String carNum, ParkingChannel parkingChannel) throws Exception;
+
+    Page<ParkingBetweenMember> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize, List<Sort> sortList);
+
+
+    ParkingMember findByCarNum(String carNum);
+
+  //  String giveParkingMember(String carNum, String days, String memberName, String memberPhone, ParkingShop parkingShop, String endTime, String startTime) throws Exception;
+    //String giveParkingMemberNew(String carNum, String days, String memberName, String memberPhone, ParkingShop parkingShop, String endTime, String startTime,Integer subMerberType) throws Exception;
+  //  void editParkingMember(String id, String memberCarNum, String memberName, String memberPhone, ParkingShop parkingShop, String days) throws Exception;
+
+   // String getMemberType(String parkId, String carNum);
+
+    void addOrUpdateFreeMember(ParkingRecord parkingRecord);
+}

+ 220 - 0
src/main/java/com/charging/chargingparking/service/impl/ParkingBetweenMemberServiceImpl.java

@@ -0,0 +1,220 @@
+package com.charging.chargingparking.service.impl;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+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.AddParkingMember;
+import com.charging.chargingparking.entity.*;
+import com.charging.chargingparking.mapper.ParkingBetweenMemberMapper;
+import com.charging.chargingparking.mapper.ParkingMemberMapper;
+import com.charging.chargingparking.modules.common.dto.Sort;
+import com.charging.chargingparking.modules.vo.CarTypeVo;
+import com.charging.chargingparking.modules.vo.ParkingEnableVo;
+import com.charging.chargingparking.service.*;
+import com.github.pagehelper.Page;
+import com.github.pagehelper.PageHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ */
+@Service
+@Transactional
+public class ParkingBetweenMemberServiceImpl extends ServiceImpl<ParkingBetweenMemberMapper, ParkingBetweenMember>
+        implements ParkingBetweenMemberService {
+
+    @Autowired
+    private ParkingMemberLogService parkingMemberLogService;
+    @Autowired
+    private ParkingChannelService parkingChannelService;
+    @Autowired
+    private ParkingBlacklistService parkingBlacklistService;
+
+    @Autowired
+    private ParkingInfoService parkingInfoService;
+
+    @Autowired
+    private ParkingRecordService parkingRecordService;
+
+    @Autowired
+    private ParkingWhiteService parkingWhiteService;
+
+    @Autowired
+    private ParkingBetweenMemberMapper parkingMemberMapper;
+    @Autowired
+    private ParkingMemberMapper parkingMemberOrgMapper;
+    @Autowired
+    private ParkingMemberService parkingMemberOrgService;
+    @Override
+    public void addParkingMemberWash(ParkingBetweenMember addParkingMember) {
+        ParkingBetweenMember parkingMember = getById(addParkingMember.getId());
+        if (parkingMember!=null) {
+            addParkingMember.setUpdateTime(new Date());
+            updateById(addParkingMember);
+        } else {
+            addParkingMember.setCreateTime(new Date());
+            save(addParkingMember);
+        }
+
+    }
+    @Override
+    public void memberMove(ParkingBetweenMember addParkingMember){
+        ParkingMember parkingMemberOrg =parkingMemberOrgService.getById(addParkingMember.getParkingMemberId());
+        if(parkingMemberOrg!=null){
+            parkingMemberOrgService.cloudDelete(parkingMemberOrg.getId(),parkingMemberOrg.getParkId(),parkingMemberOrg.getMemberCarNum());
+        }
+        addParkingMemberWash(addParkingMember);
+
+    }
+    @Override
+    public void cloudDelete(String memberId, String parkId, String license) {
+        QueryWrapper<ParkingBetweenMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+        if (StrUtil.isNotBlank(memberId)) {
+            parkingMemberQueryWrapper.eq("id", memberId);
+            parkingMemberQueryWrapper.eq("park_id", parkId);
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+        } else {
+            parkingMemberQueryWrapper.eq("park_id", parkId);
+            parkingMemberQueryWrapper.eq("member_car_num", license);
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+            parkingMemberQueryWrapper.eq("member_type", 0);
+            //    parkingMemberQueryWrapper.lt("member_end_time", new Date());
+        }
+        ParkingBetweenMember parkingMember = getOne(parkingMemberQueryWrapper);
+        if (parkingMember != null) {
+            parkingMember.setDelFlag(true);
+            parkingMember.setCloudDelFlag(true);
+            parkingMember.setUpdateTime(new Date());
+            updateById(parkingMember);
+            removeById(parkingMember);
+            //保存会员修改日志
+            ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+            parkingMemberLog.setParkingMemberId(parkingMember.getId());
+            parkingMemberLog.setCreateTime(new Date());
+            parkingMemberLog.setContent(StrUtil.format("{}区间会员手工删除", parkingMember.getMemberCarNum()));
+            parkingMemberLogService.save(parkingMemberLog);
+        }
+
+    }
+    @Override
+    public void cloudDeleteUpdate(ParkingBetweenMember parkingMemberU) {
+        QueryWrapper<ParkingBetweenMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+        if (StrUtil.isNotBlank(parkingMemberU.getId())) {
+            parkingMemberQueryWrapper.eq("id", parkingMemberU.getId());
+            parkingMemberQueryWrapper.eq("park_id", parkingMemberU.getParkId());
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+        } else {
+            parkingMemberQueryWrapper.eq("park_id", parkingMemberU.getParkId());
+            parkingMemberQueryWrapper.eq("member_car_num", parkingMemberU.getMemberCarNum());
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+            parkingMemberQueryWrapper.eq("member_type", 0);
+            //    parkingMemberQueryWrapper.lt("member_end_time", new Date());
+        }
+        ParkingBetweenMember parkingMember = getOne(parkingMemberQueryWrapper);
+        if (parkingMember != null) {
+            parkingMember.setDelFlag(true);
+            if(StrUtil.isNotBlank(parkingMemberU.getUpdateBy())){
+                parkingMember.setUpdateBy(parkingMemberU.getUpdateBy());
+            }
+            parkingMember.setCloudDelFlag(true);
+            parkingMember.setUpdateTime(new Date());
+            updateById(parkingMember);
+            removeById(parkingMember);
+            //保存会员修改日志
+            ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+            parkingMemberLog.setParkingMemberId(parkingMember.getId());
+            parkingMemberLog.setCreateTime(new Date());
+            parkingMemberLog.setContent(StrUtil.format("{}区间会员手工删除", parkingMember.getMemberCarNum()));
+            parkingMemberLogService.save(parkingMemberLog);
+        }
+
+    }
+    @Override
+    public void cloudDeleteTemporary(String memberId, String parkId, String license, String reMark) {
+        QueryWrapper<ParkingBetweenMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+        if (StrUtil.isNotBlank(memberId)) {
+            parkingMemberQueryWrapper.eq("id", memberId);
+            parkingMemberQueryWrapper.eq("park_id", parkId);
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+        } else {
+            parkingMemberQueryWrapper.eq("park_id", parkId);
+            parkingMemberQueryWrapper.eq("member_car_num", license);
+            parkingMemberQueryWrapper.eq("cloud_del_flag", false);
+            parkingMemberQueryWrapper.eq("member_type", 0);
+            //    parkingMemberQueryWrapper.lt("member_end_time", new Date());
+        }
+        ParkingBetweenMember parkingMember = getOne(parkingMemberQueryWrapper);
+        if (parkingMember != null) {
+            parkingMember.setCloudDelFlag(true);
+            parkingMember.setUpdateTime(new Date());
+            updateById(parkingMember);
+
+            //保存会员修改日志
+            ParkingMemberLog parkingMemberLog = new ParkingMemberLog();
+            parkingMemberLog.setParkingMemberId(parkingMember.getId());
+            parkingMemberLog.setCreateTime(new Date());
+            parkingMemberLog.setContent(StrUtil.format("{}会员出场,会员自动删除,备注:{}", parkingMember.getMemberCarNum(),reMark));
+            parkingMemberLogService.save(parkingMemberLog);
+            parkingWhiteService.deleteWhiteList(parkId, parkingMember.getMemberCarNum());
+        }
+
+    }
+
+
+    @Override
+    public Page<ParkingBetweenMember> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize, List<Sort> sortList) {
+        Page<ParkingBetweenMember> page = PageHelper.startPage(pageNumber, pageSize).doSelectPage(() -> {
+            parkingMemberMapper.search(searchParams, sortList);
+        });
+        return page;
+    }
+
+
+
+    @Override
+    public ParkingMember findByCarNum(String carNum) {
+        //return parkingMemberMapper.findByCarNum(carNum);
+        return null;
+    }
+
+
+    @Override
+    public void addOrUpdateFreeMember(ParkingRecord parkingRecord) {
+
+        try {
+
+            String inTime = DateUtil.format(parkingRecord.getInParkingTime(), "yyyy-MM-dd");
+
+            //拼接时间
+            String inTimePj1 = inTime + " 00:00:00";
+            String inTimePj2 = inTime + " 07:00:00";
+
+            Date inTimePjDate1 = DateUtil.parse(inTimePj1);
+            Date inTimePjDate2 = DateUtil.parse(inTimePj2);
+            if (parkingRecord.getInParkingTime().compareTo(inTimePjDate1) >= 0 && parkingRecord.getInParkingTime().compareTo(inTimePjDate2) < 0) {
+
+            }
+
+
+        } catch (Exception ex) {
+
+        }
+
+
+    }
+}
+
+
+
+

+ 32 - 3
src/main/java/com/charging/chargingparking/service/impl/ParkingRecordServiceImpl.java

@@ -20,6 +20,7 @@ import com.charging.chargingparking.modules.pay.properties.WxPayProperties;
 import com.charging.chargingparking.modules.vo.*;
 import com.charging.chargingparking.service.*;
 import com.charging.chargingparking.mapper.ParkingRecordMapper;
+import com.charging.chargingparking.utils.BetweenTimeUtil;
 import com.charging.chargingparking.utils.FileUtil;
 import com.charging.chargingparking.utils.LedTcProtocol;
 import com.charging.chargingparking.utils.StringUtils;
@@ -788,7 +789,8 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         });
         return page;
     }
-
+    @Autowired
+    private ParkingBetweenMemberService parkingBetweenMemberService;
     @Override
     public Integer getParkingTime(ParkingRecord parkingRecord) throws Exception {
 
@@ -835,8 +837,35 @@ public class ParkingRecordServiceImpl extends ServiceImpl<ParkingRecordMapper, P
         if (freeTime > 0) {
             parkingTimeInt = parkingTimeInt - freeTime;
         }
-
-
+        long decTimeMins=0;
+        //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) {
+            parkingTimeInt = parkingTimeInt - Convert.toInt(decTimeMins);
+            if(parkingTimeInt<0){
+                parkingTimeInt =0;
+            }
+        }
         if (parkingTimeInt > 0) {
             //查询是否有会员
             QueryWrapper<ParkingMember> parkingMemberQueryWrapper = new QueryWrapper<>();

+ 188 - 0
src/main/java/com/charging/chargingparking/utils/BetweenTimeUtil.java

@@ -0,0 +1,188 @@
+package com.charging.chargingparking.utils;
+
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+/**
+ * @author hbjzws
+ * @date 2023/10/14 0014 上午 9:56
+ */
+public class BetweenTimeUtil {
+    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+    public static int dealDff(String temStartDate01,String temStartDate02,String temStartDate1,String temStartDate2){
+        int ret =0;
+        Date dateStart1= cn.hutool.core.date.DateUtil.parse(temStartDate01);
+        Date dateEnd1= cn.hutool.core.date.DateUtil.parse(temStartDate02);
+        Date dateStart2= cn.hutool.core.date.DateUtil.parse(temStartDate1);
+        Date dateEnd2= DateUtil.parse(temStartDate2);
+
+        boolean retIn =isEffectiveDate(dateStart1,dateStart2,dateEnd2);
+        //System.out.println(retIn);
+        boolean retOut =isEffectiveDate(dateEnd1,dateStart2,dateEnd2);
+       // System.out.println(retOut);
+        if(retIn&&retOut){
+            //System.out.println("444444-全区间");
+            ret=1;
+        }
+        if(!retIn&&retOut){
+            //System.out.println("333333-右半区间");
+            ret=2;
+        }
+        if(retIn&&!retOut){
+            //System.out.println("222222-左半区间");
+            ret=3;
+        }
+        if(!retIn&&!retOut){
+           // System.out.println("11111区间外");
+            ret=4;
+        }
+        return ret;
+
+    }
+
+    public static long getDecTimeMins(String parkingStartTime,String parkingEndTime,String memberStartTime,String memberEndTime,String memberStartT,String memberEndT){
+        long decTimeMins=0;
+        long hourLong =0;
+        int ret= dealDff(parkingStartTime,parkingEndTime,memberStartTime,memberEndTime);
+        if(ret==2){
+            String temDate1 = DateUtil.format( DateUtil.parse(memberStartTime), "yyyy-MM-dd");
+            String temDate3 = DateUtil.format( DateUtil.parse(parkingStartTime), "HH:mm:ss");
+            parkingStartTime =temDate1+" "+temDate3;
+        }
+        if(ret==3){
+            String temDate1 = DateUtil.format( DateUtil.parse(memberEndTime), "yyyy-MM-dd");
+            String temDate3 = DateUtil.format( DateUtil.parse(parkingEndTime), "HH:mm:ss");
+            parkingEndTime =temDate1+" "+temDate3;
+        }
+        //2是区间为1天
+        long dayLong =DateUtil.betweenDay(DateUtil.parse(parkingStartTime), DateUtil.parse(parkingEndTime),true);
+        dayLong =dayLong+1;
+        if(dayLong==1){
+            Date dateStart1= DateUtil.parse(parkingStartTime);
+            Date dateEnd1= DateUtil.parse(parkingEndTime);
+            String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+            String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+            Date dateStart31= DateUtil.parse(temDate1 + " "+memberStartT);//"2023-08-03 17:00:00"
+            Date dateEnd31= DateUtil.parse(temDate1 + " "+memberEndT);//"2023-08-03 22:00:00"
+            Date dateStart32= DateUtil.parse(temDate2 + " "+memberStartT);//"2023-08-04 17:00:00"
+            Date dateEnd32= DateUtil.parse(temDate2 + " "+memberEndT);//"2023-08-04 22:00:00
+            long llStart1= dateStart31.getTime()-dateStart1.getTime();
+            long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+            long llStart2= dateStart32.getTime()-dateEnd1.getTime();
+            long llEnd2= dateEnd32.getTime()-dateEnd1.getTime();
+            if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){
+                decTimeMins =0;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                String temEnd2 = tem1 + " "+memberEndT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                decTimeMins =hourLong*60;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2>0){
+                String tem1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                decTimeMins =DateUtil.between(DateUtil.parse(temStart1), dateEnd1, DateUnit.MINUTE);
+            }
+            if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+                decTimeMins =DateUtil.between(dateStart1, dateEnd31, DateUnit.MINUTE);
+            }
+            if(llStart1<0&&llEnd1<0&&llStart2<0&&llEnd2<0){
+                decTimeMins =0;
+            }
+        }else{
+            //3是区间为2天或以上
+            Date dateStart1= DateUtil.parse(parkingStartTime);
+            Date dateEnd1= DateUtil.parse(parkingEndTime);
+            String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+            String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+            Date dateStart31= DateUtil.parse(temDate1 + " "+memberStartT);//"2023-08-03 17:00:00"
+            Date dateEnd31= DateUtil.parse(temDate1 + " "+memberEndT);//"2023-08-03 22:00:00"
+            Date dateStart32= DateUtil.parse(temDate2 + " "+memberStartT);//"2023-08-04 17:00:00"
+            Date dateEnd32= DateUtil.parse(temDate2 + " "+memberEndT);//"2023-08-04 22:00:00"
+            long llStart1= dateStart31.getTime()-dateStart1.getTime();
+            long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+            long llStart2= dateEnd1.getTime()-dateStart32.getTime();
+            long llEnd2= dateEnd1.getTime()-dateEnd32.getTime();
+            if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                String temEnd2 = tem1 + " "+memberEndT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                decTimeMins =dayLong*hourLong*60;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2<0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                String temEnd2 = tem1 + " "+memberEndT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+                long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+            if(llStart1<0&&llEnd1>0&&llStart2>0&&llEnd2>0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                String temEnd2 = tem1 + " "+memberEndT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+                long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                String temEnd2 = tem1 + " "+memberEndT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+            }
+            if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2>0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ memberStartT;
+                String temEnd2 = tem1 + " "+memberEndT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+            }
+            if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+                decTimeMins=0;
+                long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+            if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2<0){
+                decTimeMins= 0;
+                long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+        }
+        System.out.println("减免时长(分钟):"+decTimeMins);
+        return decTimeMins;
+    }
+}

+ 88 - 0
src/main/resources/mapper/ParkingBetweenMemberMapper.xml

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.charging.chargingparking.mapper.ParkingBetweenMemberMapper">
+
+    <resultMap id="BaseResultMap" type="com.charging.chargingparking.entity.ParkingBetweenMember">
+        <id property="id" column="id" jdbcType="VARCHAR"/>
+        <result property="parkId" column="park_id" jdbcType="VARCHAR"/>
+        <result property="memberName" column="member_name" jdbcType="VARCHAR"/>
+        <result property="memberPhone" column="member_phone" jdbcType="VARCHAR"/>
+        <result property="memberCarNum" column="member_car_num" jdbcType="VARCHAR"/>
+        <result property="memberStartTime" column="member_start_time" jdbcType="TIMESTAMP"/>
+        <result property="memberEndTime" column="member_end_time" jdbcType="TIMESTAMP"/>
+        <result property="delFlag" column="del_flag" jdbcType="BIT"/>
+        <result property="createBy" column="create_by" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updateBy" column="update_by" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="cloudDelFlag" column="cloud_del_flag" jdbcType="BIT"/>
+        <result property="btStartTime" column="bt_start_time" jdbcType="VARCHAR"/>
+        <result property="btEndTime" column="bt_end_time" jdbcType="VARCHAR"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,park_id,
+        member_name,member_phone,member_car_num,
+        member_start_time,member_end_time,
+        del_flag,create_by,create_time,
+        update_by,update_time,cloud_del_flag
+    </sql>
+
+    <select id="search" parameterType="hashmap" resultMap="BaseResultMap">
+        <![CDATA[
+			select * from base_parking_between_member a
+			inner join base_parking_info b on a.park_id = b.id
+		]]>
+        where a.del_flag=false and b.del_flag=false
+        <if test="searchParams.parkId != null">
+            and a.park_id = #{searchParams.parkId}
+        </if>
+        <if test="searchParams.memberName != null">
+            and a.member_name like #{searchParams.memberName}
+        </if>
+        <if test="searchParams.days != null">
+            and a.days_ = #{searchParams.days}
+        </if>
+        <if test="searchParams.memberCarNum != null">
+            and a.member_car_num like #{searchParams.memberCarNum}
+        </if>
+        <if test="searchParams.cloudDelFlag != null">
+            and a.cloud_del_flag = #{searchParams.cloudDelFlag}
+        </if>
+        <if test="searchParams.startTime != null">
+            <![CDATA[
+                  and a.member_start_time >= #{searchParams.startTime}
+            ]]>
+        </if>
+        <if test="searchParams.endTime != null">
+            <![CDATA[
+                  and a.member_start_time <= #{searchParams.endTime}
+            ]]>
+        </if>
+        <if test="searchParams.filterParkingList!=null">
+            <if test="searchParams.filterParkingList.size>0">
+                <foreach item="item" collection="searchParams.filterParkingList" open=" and park_id in(" separator=","
+                         close=")">
+                    #{item.parkingId}
+                </foreach>
+            </if>
+            <if test="searchParams.filterParkingList.size==0">
+                and park_id=''
+            </if>
+        </if>
+        <if test="searchParams.memberType != null">
+            and a.member_type = #{searchParams.memberType}
+        </if>
+        <foreach item="sort" collection="sortList" open="order by" separator=",">
+            ${sort.name} ${sort.order}
+        </foreach>
+    </select>
+    <select id="findByCarNum" resultType="com.charging.chargingparking.entity.ParkingBetweenMember">
+        <![CDATA[
+			select * from base_parking_between_member where del_flag = 0 and cloud_del_flag = 0 and member_car_num = #{0} order by create_time desc
+        limit 1
+		]]>
+    </select>
+</mapper>

+ 98 - 17
src/test/java/com/charging/chargingparking/ChargingParkingApplicationTests.java

@@ -24,6 +24,7 @@ import com.charging.chargingparking.modules.vo.ProfitVo;
 import com.charging.chargingparking.service.*;
 import com.charging.chargingparking.sys.entity.User;
 import com.charging.chargingparking.sys.service.UserService;
+import com.charging.chargingparking.utils.BetweenTimeUtil;
 import com.charging.chargingparking.utils.StringUtils;
 import com.github.pagehelper.Page;
 import com.sun.org.apache.xpath.internal.operations.Bool;
@@ -40,6 +41,8 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 
+import static cn.hutool.core.date.DateUnit.HOUR;
+
 @SpringBootTest
 @Slf4j
 class ChargingParkingApplicationTests {
@@ -88,26 +91,104 @@ class ChargingParkingApplicationTests {
     private UserService userService;
     @Autowired
     private ParkingShopService parkingShopService;
+    @Autowired
+    private ParkingBetweenMemberService parkingBetweenMemberService;
     @Test
-    void shopDeal() throws Exception {
+    void test123() throws Exception {
 
-        System.out.println( new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
+        ParkingRecord parkingRecord = parkingRecordService.getById("1686769417542746114");
+        if(parkingRecord.getInParkingTime().after(parkingRecord.getOutParkingTime())){
+            throw new Exception("会员时间段设置不对");
+        }
+        QueryWrapper<ParkingBetweenMember> parkingMemberQueryWrapper = new QueryWrapper<>();
+        parkingMemberQueryWrapper.eq("member_car_num", "鄂111DDT9443");
+        parkingMemberQueryWrapper.eq("park_id", "5f8d343e-63d1-4ef0-9844-855ca020d92b");
+        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();//免费结束时间点
+            long decTimeMins= BetweenTimeUtil.getDecTimeMins(temStartDate01,temStartDate02,temStartDate1,temStartDate2,startT,endT);
+            System.out.println("结果:"+decTimeMins);
+            System.out.println("---parkingBetweenMember:---"+parkingBetweenMember);
+        }
+    }
 
-//        long start = System.currentTimeMillis();
-//        log.warn("设备轮询开始时间:{}", DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss"));
-//        String carNumber="鄂AT27M1";
-//        ParkingShop parkingShop = parkingShopService.getById("1590242398638243842");
-//        System.out.println(parkingShop);
-//        String inTime = parkingShopService.getInTime(carNumber, parkingShop);
-//        System.out.println(inTime);
-//
-//        String memberTime = DateUtil.format(DateUtil.offsetDay(DateUtil.parse(inTime), 1), "yyyy-MM-dd") + " " + parkingShop.getMemberLeaveTime() + ":00";
-//        String days = String.valueOf(DateUtil.betweenDay(DateUtil.parse(inTime, "yyyy-MM-dd"), DateUtil.parse(memberTime, "yyyy-MM-dd"), false));
-//        System.out.println(memberTime); System.out.println(days);
-//        long end = System.currentTimeMillis();
-//        log.warn("设备轮询结束时间:{}", DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss"));
-//        log.warn("设备轮询耗时:{}", end-start);
+    @Test
+    void testJTWYComputerTime() throws Exception {
+        ParkingRecord parkingRecord = parkingRecordService.getById("1701489017382604801");
+        Integer time =parkingRecordService.getParkingTime(parkingRecord);
+        System.out.println("--time:--"+time);
     }
+//    @Test
+//    void shopDeal() throws Exception {
+//        ParkingRecord parkingRecord = parkingRecordService.getById("1686769417542746114");
+//        String temDate333 = DateUtil.format(parkingRecord.getOutParkingTime(), "HH:mm:ss");
+//        System.out.println(temDate333);
+//        System.out.println(parkingRecord);
+//        long parkingTimeLong = DateUtil.between(parkingRecord.getInParkingTime(), parkingRecord.getOutParkingTime(), DateUnit.MINUTE);
+//        ParkingMember parkingMember= parkingMemberService.getById("035e1761-034b-11ed-b47c-0242ac120004");
+//
+//        System.out.println(parkingMember);
+//        System.out.println( new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
+//
+//        long dayLong =DateUtil.betweenDay(parkingRecord.getInParkingTime(), parkingRecord.getOutParkingTime(),true);
+//        dayLong =dayLong+1;
+//        System.out.println("天数:"+dayLong);
+//
+//
+//        if(parkingMember.getMemberType()==2){
+////            String temDate1 = DateUtil.format(parkingMember.getMemberStartTime(), "yyyy-MM-dd");
+////            String temStartDate1 = temDate1 + " "+ parkingMember.getBtStartTime();
+////
+////            String temDate2 = DateUtil.format(parkingMember.getMemberEndTime(), "yyyy-MM-dd");
+////            String temStartDate2 = temDate2 + " "+parkingMember.getBtEndTime();
+//            Date startTime= DateUtil.parse(temStartDate1);
+//            Date endTime= DateUtil.parse(temStartDate2);
+//            System.out.println(startTime);
+//            System.out.println(endTime);
+//            //要判断区间
+//            if(parkingMember.getMemberStartTime().compareTo(parkingRecord.getInParkingTime())>=0){
+//                //要减去区间的时间段
+//                if(parkingMember.getMemberEndTime().compareTo(parkingRecord.getOutParkingTime())>=0){
+//                    //要减去区间的时间段
+//                    long hourLong =DateUtil.between(startTime, endTime,HOUR);
+//                    System.out.println("小时:"+hourLong);
+//                    System.out.println("111");
+//                }
+//
+//            }
+//            if(parkingMember.getMemberStartTime().compareTo(parkingRecord.getInParkingTime())<0){
+//
+//                long hourLong =DateUtil.between(startTime, endTime,HOUR);
+//                System.out.println("小时:"+hourLong);
+//                long minLong= dayLong*hourLong*60;
+//                System.out.println("分钟:"+minLong);
+//                System.out.println("111");
+//            }
+//        }
+////        long start = System.currentTimeMillis();
+////        log.warn("设备轮询开始时间:{}", DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss"));
+////        String carNumber="鄂AT27M1";
+////        ParkingShop parkingShop = parkingShopService.getById("1590242398638243842");
+////        System.out.println(parkingShop);
+////        String inTime = parkingShopService.getInTime(carNumber, parkingShop);
+////        System.out.println(inTime);
+////
+////        String memberTime = DateUtil.format(DateUtil.offsetDay(DateUtil.parse(inTime), 1), "yyyy-MM-dd") + " " + parkingShop.getMemberLeaveTime() + ":00";
+////        String days = String.valueOf(DateUtil.betweenDay(DateUtil.parse(inTime, "yyyy-MM-dd"), DateUtil.parse(memberTime, "yyyy-MM-dd"), false));
+////        System.out.println(memberTime); System.out.println(days);
+////        long end = System.currentTimeMillis();
+////        log.warn("设备轮询结束时间:{}", DateUtil.format(new Date(),"yyyy-MM-dd hh:mm:ss"));
+////        log.warn("设备轮询耗时:{}", end-start);
+//    }
 
     @Test
     void me2() throws Exception {
@@ -372,7 +453,7 @@ class ChargingParkingApplicationTests {
     void contextLoads1111111111111111111111111111() {
 
         try {
-            ParkingRecord parkingRecord = parkingRecordService.getById("1686769417542746114");
+            ParkingRecord parkingRecord = parkingRecordService.getById("1716462570515304449");
             ParkingCostDTO parkingCostDTO  = parkingFeeService.parkingCost2(parkingRecord);
 
             System.out.println(parkingCostDTO);

+ 199 - 9
src/test/java/com/charging/chargingparking/MainTest.java

@@ -1,19 +1,209 @@
 package com.charging.chargingparking;
 
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+
 import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 
-/**
- * @author 墨鱼_mo
- * @date 2023/8/11 0011 下午 2:35
- */
+
 public class MainTest {
+    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+    public static void test(String temStartDate01,String temStartDate02,String temStartDate1,String temStartDate2,String startT,String endT){
+        long dayLong =0;
+        long hourLong =0;
+        long minLong=0;
+        Date dateStart1= DateUtil.parse(temStartDate01);
+        Date dateEnd1= DateUtil.parse(temStartDate02);
+        Date dateStart2= DateUtil.parse(temStartDate1);
+        Date dateEnd2= DateUtil.parse(temStartDate2);
+        dayLong =DateUtil.betweenDay(dateStart1, dateEnd1,true);
+        dayLong =dayLong+1;
+
+        System.out.println(dayLong);
+        boolean ret =true;
+        boolean retIn =isEffectiveDate(dateStart1,dateStart2,dateEnd2);
+        System.out.println(retIn);
+        boolean retOut =isEffectiveDate(dateEnd1,dateStart2,dateEnd2);
+        System.out.println(retOut);
+        if(retIn&&retOut){
+            System.out.println("444444-全区间");
+            String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+            String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+            Date dateStart31= DateUtil.parse(temDate1 + " "+startT);
+            Date dateStart32= DateUtil.parse(temDate2 + " "+startT);
+            Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);
+            Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);
+            boolean retInAll1 =isEffectiveDate(dateStart31,dateStart1,dateEnd1);
+            System.out.println(retInAll1);
+            boolean retInAll2 =isEffectiveDate(dateStart32,dateStart1,dateEnd1);
+            System.out.println(retInAll2);
+            boolean retOutAll1 =isEffectiveDate(dateEnd31,dateStart1,dateEnd1);
+            System.out.println(retOutAll1);
+            boolean retOutAll2 =isEffectiveDate(dateEnd32,dateStart1,dateEnd1);
+            System.out.println(retOutAll2);
+//            if(!retInAll&&!retOutAll){
+//                System.out.println("444444-全区间-全包");
+//            }
+        }
+        if(retIn&&!retOut){
+            System.out.println("222222-左半区间");
+        }
+        if(!retIn&&retOut){
+            System.out.println("333333-右半区间");
+        }
+        if(!retIn&&!retOut){
+            System.out.println("区间外");
+        }
+//        if(dateStart1.compareTo(dateStart2)>0&&dateEnd2.compareTo(dateStart2)>0){
+//            System.out.println("区间外2");
+//            ret=false;
+//        }
+//        if(dateStart1.compareTo(dateStart2)<=0&&dateEnd1.compareTo(dateStart2)<=0){
+//            ret=false;
+//            System.out.println("区间外1");
+//        }
+//        if(ret){
+//            if(dateStart1.compareTo(dateStart2)<=0){
+//                if(dateEnd1.compareTo(dateEnd2)>=0){
+//                    System.out.println("111111");
+//                }else{
+//                    System.out.println("222222-左半区间");
+//                }
+//            }
+//            if(dateStart1.compareTo(dateStart2)>0){
+//                if(dateEnd1.compareTo(dateEnd2)>=0){
+//                    System.out.println("333333-右半区间");
+//                }else{
+//                    System.out.println("444444-全区间");
+//                }
+//            }
+//        }
+
+    }
     public static void main(String[] args) {
-//        System.out.println( new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
-//        System.out.println( new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
-        //String ls ="鄂D9QN89";
-        String ls ="鄂HB98U5";
-        System.out.println(ls.length());
+        //全区间
+        String temStartDate01="2023-08-03 00:02:21";//停车进出场时间区间
+        String temStartDate02="2023-08-04 07:45:52";
+
+        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+        String temStartDate2="2025-07-22 23:59:59";
+        String startT="10:00:00";//免费开始时间点
+        String endT="15:00:00";//免费结束时间点
+        //全区间分4种情况  1种是全  1种是左半  1种是右半  1种是区间外
+        //全区间分4种情况  1种是全 true true true  true
+//        String temStartDate01="2023-08-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="01:00:00";//免费开始时间点
+//        String endT="05:00:00";//免费结束时间点
+
+//全区间分4种情况  1种是左半 false false true false
+//        String temStartDate01="2023-08-03 12:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="10:00:00";//免费开始时间点
+//        String endT="15:00:00";//免费结束时间点
+
+        //全区间分4种情况  1种是右半 true false false  false
+//        String temStartDate01="2023-08-03 12:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="13:00:00";//免费开始时间点
+//        String endT="08:00:00";//免费结束时间点
+//        String startT="17:00:00";//免费开始时间点
+//        String endT="22:00:00";//免费结束时间点
+
+//        Date dateStart1= DateUtil.parse(temStartDate01);
+//        Date dateEnd1= DateUtil.parse(temStartDate02);
+//        Date dateStart2= DateUtil.parse(temStartDate1);
+//        Date dateEnd2= DateUtil.parse(temStartDate2);
+//
+//        String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+//        String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+//        Date dateStart31= DateUtil.parse(temDate1 + " "+startT);
+//        Date dateStart32= DateUtil.parse(temDate2 + " "+startT);
+//        Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);
+//        Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);
+//
+//
+//        long ll= dateStart31.getTime()-dateStart1.getTime();
+        //全区间分4种情况  区间外  false true false  true  ---------true false true false
+//        String temStartDate01="2023-08-03 12:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 13:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="15:00:00";//免费开始时间点
+//        String endT="18:00:00";//免费结束时间点
+//        String startT="01:00:00";//免费开始时间点
+//        String endT="08:00:00";//免费结束时间点
+        //右半区间
+//        String temStartDate01="2022-06-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="10:00:00";//免费开始时间点
+//        String endT="15:00:00";//免费结束时间点
+
+        //左半区间
+//        String temStartDate01="2022-09-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2026-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="10:00:00";//免费开始时间点
+//        String endT="15:00:00";//免费结束时间点
+
+        //区间外1
+//        String temStartDate01="2021-09-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2021-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="10:00:00";//免费开始时间点
+//        String endT="15:00:00";//免费结束时间点
+
+
+        //区间外2
+//        String temStartDate01="2026-09-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2026-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="10:00:00";//免费开始时间点
+//        String endT="15:00:00";//免费结束时间点
+        test(temStartDate01,temStartDate02,temStartDate1,temStartDate2,startT,endT);
+
+
     }
 
 }

+ 87 - 0
src/test/java/com/charging/chargingparking/MainTest2.java

@@ -0,0 +1,87 @@
+package com.charging.chargingparking;
+
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+
+public class MainTest2 {
+
+    public static void main(String[] args) {
+        //开始时间必须比结束时间小
+//        String temStartDate01="2023-08-03 12:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+////        String startT="11:00:00";//免费开始结束时间点  -+-- 半个点
+////        String endT="13:00:00";//
+//        String startT="17:00:00";//免费开始时间点  ++-- 1个时间段
+//        String endT="22:00:00";//免费结束时间点
+
+
+
+//        String temStartDate01="2023-08-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//
+////        String startT="01:00:00";//免费开始时间点  ++++ 2个时间段
+////        String endT="05:00:00";//免费结束时间点
+//        String startT="01:00:00";//免费开始时间点  +++- 1个时间段+右半
+//        String endT="09:00:00";//免费结束时间点
+
+        String temStartDate01="2023-08-03 03:02:21";//停车进出场时间区间
+        String temStartDate02="2023-08-04 07:45:52";
+
+        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+        String temStartDate2="2025-07-22 23:59:59";
+
+//        String startT="01:00:00";//免费开始时间点  -+++ 1个时间段+左半
+//        String endT="05:00:00";//免费结束时间点
+
+        String startT="01:00:00";//免费开始时间点  --++ 1个时间段  +-++不可能
+        String endT="02:00:00";//免费结束时间点
+        Date dateStart1= DateUtil.parse(temStartDate01);
+        Date dateEnd1= DateUtil.parse(temStartDate02);
+
+        String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+        String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+        Date dateStart31= DateUtil.parse(temDate1 + " "+startT);//"2023-08-03 17:00:00"
+        Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);//"2023-08-03 22:00:00"
+        Date dateStart32= DateUtil.parse(temDate2 + " "+startT);//"2023-08-04 17:00:00"
+        Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);//"2023-08-04 22:00:00"
+//"2023-08-03 12:02:21"  "2023-08-04 07:45:52"
+        long llStart1= dateStart31.getTime()-dateStart1.getTime();
+        String llStart1S="正";
+        if(llStart1<0){
+            llStart1S="负";
+        }
+        System.out.println("llStart1:"+llStart1+"--标志--"+llStart1S);
+        long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+        String llEnd1S="正";
+        if(llEnd1<0){
+            llEnd1S="负";
+        }
+        System.out.println("llEnd1:"+llEnd1+"--标志--"+llEnd1S);
+
+        long llStart2= dateEnd1.getTime()-dateStart32.getTime();
+
+        String llStart2S="正";
+        if(llStart2<0){
+            llStart2S="负";
+        }
+        System.out.println("llStart2:"+llStart2+"--标志--"+llStart2S);
+        long llEnd2= dateEnd1.getTime()-dateEnd32.getTime();
+        String llEnd2S="正";
+        if(llEnd2<0){
+            llEnd2S="负";
+        }
+        System.out.println("llEnd2:"+llEnd2+"--标志--"+llEnd2S);
+
+        System.out.println("111");
+    }
+
+}

+ 85 - 0
src/test/java/com/charging/chargingparking/MainTest3.java

@@ -0,0 +1,85 @@
+package com.charging.chargingparking;
+
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Date;
+
+
+public class MainTest3 {
+
+    public static void main(String[] args) {
+        //开始时间必须比结束时间小
+//        String temStartDate01="2023-08-03 12:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+////        String startT="11:00:00";//免费开始结束时间点  -+-- 左半个点
+////        String endT="13:00:00";//
+//        String startT="17:00:00";//免费开始时间点  ++-- 1个时间段
+//        String endT="22:00:00";//免费结束时间点
+
+
+
+//        String temStartDate01="2023-08-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+//
+////        String startT="01:00:00";//免费开始时间点  ++++ 2个时间段
+////        String endT="05:00:00";//免费结束时间点
+//        String startT="01:00:00";//免费开始时间点  +++- 1个时间段+右半
+//        String endT="09:00:00";//免费结束时间点
+
+        String temStartDate01="2023-08-03 12:02:21";//停车进出场时间区间
+        String temStartDate02="2023-08-04 07:45:52";
+        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+        String temStartDate2="2025-07-22 23:59:59";
+
+//        String startT="01:00:00";//免费开始时间点  -+++ 1个时间段+左半
+//        String endT="05:00:00";//免费结束时间点
+
+        String startT="01:00:00";//免费开始时间点  --+- 右半个点
+        String endT="08:00:00";//免费结束时间点
+        Date dateStart1= DateUtil.parse(temStartDate01);
+        Date dateEnd1= DateUtil.parse(temStartDate02);
+
+        String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+        String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+        Date dateStart31= DateUtil.parse(temDate1 + " "+startT);//"2023-08-03 17:00:00"
+        Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);//"2023-08-03 22:00:00"
+        Date dateStart32= DateUtil.parse(temDate2 + " "+startT);//"2023-08-04 17:00:00"
+        Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);//"2023-08-04 22:00:00"
+//"2023-08-03 12:02:21"  "2023-08-04 07:45:52"
+        long llStart1= dateStart31.getTime()-dateStart1.getTime();
+        String llStart1S="正";
+        if(llStart1<0){
+            llStart1S="负";
+        }
+        System.out.println("llStart1:"+llStart1+"--标志--"+llStart1S);
+        long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+        String llEnd1S="正";
+        if(llEnd1<0){
+            llEnd1S="负";
+        }
+        System.out.println("llEnd1:"+llEnd1+"--标志--"+llEnd1S);
+
+        long llStart2= dateEnd1.getTime()-dateStart32.getTime();
+
+        String llStart2S="正";
+        if(llStart2<0){
+            llStart2S="负";
+        }
+        System.out.println("llStart2:"+llStart2+"--标志--"+llStart2S);
+        long llEnd2= dateEnd1.getTime()-dateEnd32.getTime();
+        String llEnd2S="正";
+        if(llEnd2<0){
+            llEnd2S="负";
+        }
+        System.out.println("llEnd2:"+llEnd2+"--标志--"+llEnd2S);
+
+        System.out.println("111");
+    }
+
+}

+ 66 - 0
src/test/java/com/charging/chargingparking/MainTest3Single.java

@@ -0,0 +1,66 @@
+package com.charging.chargingparking;
+
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Date;
+
+
+public class MainTest3Single {
+
+    public static void main(String[] args) {
+        //开始时间必须比结束时间小
+        String temStartDate01="2023-08-03 03:02:21";//停车进出场时间区间
+        String temStartDate02="2023-08-03 07:45:52";
+        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+        String temStartDate2="2025-07-22 23:59:59";
+//        String startT="01:00:00";//免费开始时间点  ----区间外1
+//        String endT="02:00:00";//免费结束时间点
+//        String startT="04:00:00";//免费开始时间点  ++--区间内
+//        String endT="05:00:00";//免费结束时间点
+//        String startT="04:00:00";//免费开始时间点  ++-+右半区间
+//        String endT="08:00:00";//免费结束时间点
+        String startT="01:00:00";//免费开始时间点  -+--左半区间
+        String endT="04:00:00";//免费结束时间点
+//        String startT="08:00:00";//免费开始时间点  ++++ 区间外2
+//        String endT="09:00:00";//免费结束时间点
+        Date dateStart1= DateUtil.parse(temStartDate01);
+        Date dateEnd1= DateUtil.parse(temStartDate02);
+
+        String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+        String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+        Date dateStart31= DateUtil.parse(temDate1 + " "+startT);//"2023-08-03 17:00:00"
+        Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);//"2023-08-03 22:00:00"
+        Date dateStart32= DateUtil.parse(temDate2 + " "+startT);//"2023-08-04 17:00:00"
+        Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);//"2023-08-04 22:00:00"
+//"2023-08-03 12:02:21"  "2023-08-04 07:45:52"
+        long llStart1= dateStart31.getTime()-dateStart1.getTime();
+        String llStart1S="正";
+        if(llStart1<0){
+            llStart1S="负";
+        }
+        System.out.println("llStart1:"+llStart1+"--标志--"+llStart1S);
+        long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+        String llEnd1S="正";
+        if(llEnd1<0){
+            llEnd1S="负";
+        }
+        System.out.println("llEnd1:"+llEnd1+"--标志--"+llEnd1S);
+
+        long llStart2= dateStart32.getTime()-dateEnd1.getTime();
+
+        String llStart2S="正";
+        if(llStart2<0){
+            llStart2S="负";
+        }
+        System.out.println("llStart2:"+llStart2+"--标志--"+llStart2S);
+        long llEnd2= dateEnd32.getTime()-dateEnd1.getTime();
+        String llEnd2S="正";
+        if(llEnd2<0){
+            llEnd2S="负";
+        }
+        System.out.println("llEnd2:"+llEnd2+"--标志--"+llEnd2S);
+
+        System.out.println("111");
+    }
+
+}

+ 232 - 0
src/test/java/com/charging/chargingparking/MainTestAll.java

@@ -0,0 +1,232 @@
+package com.charging.chargingparking;
+
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+
+public class MainTestAll {
+    public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+    public static int dealDff(String temStartDate01,String temStartDate02,String temStartDate1,String temStartDate2){
+        int ret =0;
+        Date dateStart1= DateUtil.parse(temStartDate01);
+        Date dateEnd1= DateUtil.parse(temStartDate02);
+        Date dateStart2= DateUtil.parse(temStartDate1);
+        Date dateEnd2= DateUtil.parse(temStartDate2);
+
+        boolean retIn =isEffectiveDate(dateStart1,dateStart2,dateEnd2);
+        System.out.println(retIn);
+        boolean retOut =isEffectiveDate(dateEnd1,dateStart2,dateEnd2);
+        System.out.println(retOut);
+        if(retIn&&retOut){
+            System.out.println("444444-全区间");
+            ret=1;
+        }
+        if(!retIn&&retOut){
+            System.out.println("333333-右半区间");
+            ret=2;
+        }
+        if(retIn&&!retOut){
+            System.out.println("222222-左半区间");
+            ret=3;
+        }
+        if(!retIn&&!retOut){
+            System.out.println("11111区间外");
+            ret=4;
+        }
+        return ret;
+
+    }
+    public static void main(String[] args) {
+        //计算要免费减去的分钟数
+        //全区间 true true
+//        String temStartDate01="2023-08-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+        //右半区间 false true
+//        String temStartDate01="2022-06-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2023-08-04 07:45:52";
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+        //左半区间 true false
+//        String temStartDate01="2022-09-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2026-08-04 07:45:52";
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+        //区间外1 false false
+//        String temStartDate01="2021-09-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2021-08-04 07:45:52";
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+        //区间外2 false false
+//        String temStartDate01="2026-09-03 00:02:21";//停车进出场时间区间
+//        String temStartDate02="2026-08-04 07:45:52";
+//        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+//        String temStartDate2="2025-07-22 23:59:59";
+        //整个计算过程分3部分  1是计算区间  2是区间为1天 3是区间为2天或以上
+        //1是计算区间
+        String temStartDate01="2023-08-03 03:02:21";//停车进出场时间区间
+        String temStartDate02="2023-08-04 07:45:52";
+        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+        String temStartDate2="2025-07-22 23:59:59";
+        String startT="01:00:00";//免费开始时间点
+        String endT="02:00:00";//免费结束时间点
+        long decTimeMins=0;
+        long hourLong =0;
+        int ret= dealDff(temStartDate01,temStartDate02,temStartDate1,temStartDate2);
+        if(ret==2){
+            String temDate1 = DateUtil.format( DateUtil.parse(temStartDate1), "yyyy-MM-dd");
+            String temDate3 = DateUtil.format( DateUtil.parse(temStartDate01), "HH:mm:ss");
+            temStartDate01 =temDate1+" "+temDate3;
+        }
+        if(ret==3){
+            String temDate1 = DateUtil.format( DateUtil.parse(temStartDate2), "yyyy-MM-dd");
+            String temDate3 = DateUtil.format( DateUtil.parse(temStartDate02), "HH:mm:ss");
+            temStartDate02 =temDate1+" "+temDate3;
+        }
+        //2是区间为1天
+        long dayLong =DateUtil.betweenDay(DateUtil.parse(temStartDate01), DateUtil.parse(temStartDate02),true);
+        dayLong =dayLong+1;
+
+        if(dayLong==1){
+            Date dateStart1= DateUtil.parse(temStartDate01);
+            Date dateEnd1= DateUtil.parse(temStartDate02);
+
+            String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+            String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+            Date dateStart31= DateUtil.parse(temDate1 + " "+startT);//"2023-08-03 17:00:00"
+            Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);//"2023-08-03 22:00:00"
+            Date dateStart32= DateUtil.parse(temDate2 + " "+startT);//"2023-08-04 17:00:00"
+            Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);//"2023-08-04 22:00:00
+            long llStart1= dateStart31.getTime()-dateStart1.getTime();
+            long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+            long llStart2= dateStart32.getTime()-dateEnd1.getTime();
+            long llEnd2= dateEnd32.getTime()-dateEnd1.getTime();
+            if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){
+                decTimeMins =0;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                String temEnd2 = tem1 + " "+endT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                decTimeMins =hourLong*60;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2>0){
+                String tem1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                decTimeMins =DateUtil.between(DateUtil.parse(temStart1), dateEnd1, DateUnit.MINUTE);
+            }
+            if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+//                String tem1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+//                String temStart1 = tem1 + " "+ startT;
+//                decTimeMins =DateUtil.between(DateUtil.parse(temStart1), dateStart1, DateUnit.MINUTE);
+                String tem1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                decTimeMins =DateUtil.between(dateStart1, dateEnd31, DateUnit.MINUTE);
+            }
+            if(llStart1<0&&llEnd1<0&&llStart2<0&&llEnd2<0){
+                decTimeMins =0;
+            }
+            //System.out.println("减免时长(分钟):"+decTimeMins);
+        }else{
+            //3是区间为2天或以上
+
+            Date dateStart1= DateUtil.parse(temStartDate01);
+            Date dateEnd1= DateUtil.parse(temStartDate02);
+
+            String temDate1 = DateUtil.format(dateStart1, "yyyy-MM-dd");
+            String temDate2 = DateUtil.format(dateEnd1, "yyyy-MM-dd");
+            Date dateStart31= DateUtil.parse(temDate1 + " "+startT);//"2023-08-03 17:00:00"
+            Date dateEnd31= DateUtil.parse(temDate1 + " "+endT);//"2023-08-03 22:00:00"
+            Date dateStart32= DateUtil.parse(temDate2 + " "+startT);//"2023-08-04 17:00:00"
+            Date dateEnd32= DateUtil.parse(temDate2 + " "+endT);//"2023-08-04 22:00:00"
+            long llStart1= dateStart31.getTime()-dateStart1.getTime();
+            long llEnd1= dateEnd31.getTime()-dateStart1.getTime();
+            long llStart2= dateEnd1.getTime()-dateStart32.getTime();
+            long llEnd2= dateEnd1.getTime()-dateEnd32.getTime();
+            if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2>0){
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                String temEnd2 = tem1 + " "+endT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                decTimeMins =dayLong*hourLong*60;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2>0&&llEnd2<0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                String temEnd2 = tem1 + " "+endT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+                long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+            if(llStart1<0&&llEnd1>0&&llStart2>0&&llEnd2>0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                String temEnd2 = tem1 + " "+endT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+                long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+            if(llStart1>0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                String temEnd2 = tem1 + " "+endT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+            }
+            if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2>0){
+                dayLong =dayLong-1;
+                String tem1 = DateUtil.format(new Date(), "yyyy-MM-dd");
+                String temStart1 = tem1 + " "+ startT;
+                String temEnd2 = tem1 + " "+endT;
+                hourLong =DateUtil.between(DateUtil.parse(temStart1), DateUtil.parse(temEnd2), DateUnit.HOUR);
+                //天数减1再加上尾数
+                decTimeMins= dayLong*hourLong*60;
+            }
+            if(llStart1<0&&llEnd1>0&&llStart2<0&&llEnd2<0){
+
+                decTimeMins=0;
+                long minLongL=DateUtil.between(dateStart1, dateEnd31,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+            if(llStart1<0&&llEnd1<0&&llStart2>0&&llEnd2<0){
+
+                decTimeMins= 0;
+                long minLongL=DateUtil.between(dateStart32, dateEnd1,DateUnit.MINUTE);
+                decTimeMins =decTimeMins+minLongL;
+            }
+
+           // System.out.println("减免时长(分钟):"+decTimeMins);
+        }
+        System.out.println("减免时长(分钟):"+decTimeMins);
+    }
+
+}

+ 25 - 0
src/test/java/com/charging/chargingparking/MainTestAll2.java

@@ -0,0 +1,25 @@
+package com.charging.chargingparking;
+
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import com.charging.chargingparking.utils.BetweenTimeUtil;
+
+import java.util.Calendar;
+import java.util.Date;
+
+
+public class MainTestAll2 {
+
+    public static void main(String[] args) {
+
+        String temStartDate01="2023-08-03 03:02:21";//停车进出场时间区间
+        String temStartDate02="2023-08-03 07:45:52";
+        String temStartDate1="2022-07-22 00:00:00";//会员开始结束时间区间
+        String temStartDate2="2025-07-22 23:59:59";
+        String startT="01:00:00";//免费开始时间点
+        String endT="09:00:00";//免费结束时间点
+        long decTimeMins= BetweenTimeUtil.getDecTimeMins(temStartDate01,temStartDate02,temStartDate1,temStartDate2,startT,endT);
+        System.out.println("结果:"+decTimeMins);
+    }
+
+}