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