| | |
| | | package com.doumee.service.business.impl.hksync; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.doumee.config.DataSyncConfig; |
| | | import com.doumee.core.constants.ResponseStatus; |
| | | import com.doumee.core.exception.BusinessException; |
| | | import com.doumee.core.haikang.model.HKConstants; |
| | | import com.doumee.core.haikang.model.param.BaseListPageResponse; |
| | | import com.doumee.core.haikang.model.param.BaseResponse; |
| | | import com.doumee.core.haikang.model.param.request.CarChargeAddRequest; |
| | | import com.doumee.core.haikang.model.param.request.CarChargeDelRequest; |
| | | import com.doumee.core.haikang.model.param.request.ParkListRequest; |
| | | import com.doumee.core.haikang.model.param.request.*; |
| | | import com.doumee.core.haikang.model.param.respose.AppointmentInfoResponse; |
| | | import com.doumee.core.haikang.model.param.respose.ParkCrossRecordInfoResponse; |
| | | import com.doumee.core.haikang.model.param.respose.ParkListResponse; |
| | | import com.doumee.core.haikang.service.HKService; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.core.utils.DESUtil; |
| | | import com.doumee.core.utils.DateUtil; |
| | | import com.doumee.core.utils.Utils; |
| | | import com.doumee.dao.business.CarEventMapper; |
| | | import com.doumee.dao.business.ParksMapper; |
| | | import com.doumee.dao.business.join.ParkBookJoinMapper; |
| | | import com.doumee.dao.business.model.*; |
| | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * 海康停车库同步Service实现 |
| | |
| | | public class HkSyncParkServiceImpl extends HkSyncBaseServiceImpl { |
| | | |
| | | @Autowired |
| | | private DataSyncConfig dataSyncConfig; |
| | | @Autowired |
| | | private ParksMapper parksMapper; |
| | | @Autowired |
| | | private ParkBookJoinMapper parkBookMapper; |
| | | @Autowired |
| | | private CarEventMapper carEventMapper; |
| | | @Override |
| | | public void syncParkBookData() { |
| | | if(Constants.DEALING_HK_PARKBOOK){ |
| | |
| | | && StringUtils.isNotBlank(c.getCarCode())){ |
| | | boolean result = cancelParkBookHk(c); |
| | | c.setHkStatus(result?Constants.ONE:Constants.TWO); |
| | | c.setRemark(result?"取消包期成功":"取消包期失败"); |
| | | }else{ |
| | | c.setHkStatus(Constants.TWO);//下发失败 |
| | | c.setRemark("取消包期失败"); |
| | | } |
| | | c.setHkDate(date); |
| | | parkBookMapper.updateById(c); |
| | |
| | | && StringUtils.isNotBlank(c.getCarCode())){ |
| | | boolean result = addParkBookHk(c); |
| | | c.setHkStatus(result?Constants.ONE:Constants.TWO); |
| | | c.setRemark(result?"包期成功":"包期失败"); |
| | | }else{ |
| | | c.setHkStatus(Constants.TWO); |
| | | c.setRemark("包期失败~"); |
| | | } |
| | | c.setHkDate(date); |
| | | parkBookMapper.updateById(c); |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void syncParkBookBySingleModel(ParkBook c) { |
| | | if(Constants.equalsObject(c.getIsdeleted(),Constants.ONE)){ |
| | | //如果取消预约,则进行取消包期 |
| | | if(StringUtils.isNotBlank(c.getParkHkId()) |
| | | && StringUtils.isNotBlank(c.getCarCode())){ |
| | | boolean result = cancelParkBookHk(c); |
| | | c.setHkStatus(result?Constants.ONE:Constants.TWO); |
| | | c.setRemark(result?"取消包期成功":"取消包期失败"); |
| | | }else{ |
| | | c.setHkStatus(Constants.TWO);//下发失败 |
| | | c.setRemark("取消包期失败"); |
| | | } |
| | | c.setHkDate(new Date()); |
| | | parkBookMapper.updateById(c); |
| | | }else { |
| | | //处理所有需要包期的车辆数据记录 |
| | | //数据不合法,直接提示下发失败 |
| | | if (StringUtils.isNotBlank(c.getParkHkId()) |
| | | && StringUtils.isNotBlank(c.getCarCode())) { |
| | | boolean result = addParkBookHk(c); |
| | | c.setHkStatus(result ? Constants.ONE : Constants.TWO); |
| | | c.setRemark(result ? "包期成功" : "包期失败"); |
| | | } else { |
| | | c.setHkStatus(Constants.TWO); |
| | | c.setRemark("包期失败~"); |
| | | } |
| | | c.setHkDate(new Date()); |
| | | parkBookMapper.updateById(c); |
| | | } |
| | | } |
| | | private boolean addParkBookHk(ParkBook c) { |
| | | CarChargeAddRequest param = new CarChargeAddRequest(); |
| | | param.setPlateNo(c.getCarCode()); |
| | | param.setParkSyscode(c.getParkHkId()); |
| | | param.setStartTime(DateUtil.getISO8601Timestamp(c.getStartTime())); |
| | | param.setEndTime(DateUtil.getISO8601Timestamp(c.getEndTime())); |
| | | param.setStartTime(Objects.isNull(c.getStartTime())?DateUtil.getDate(new Date(),"yyyy-MM-dd"):DateUtil.getShortTimeToNull(c.getStartTime())); |
| | | param.setEndTime(Objects.isNull(c.getEndTime())?"2999-12-31":DateUtil.getShortTimeToNull(c.getEndTime())); |
| | | BaseResponse response = HKService.carChargeAddtion(param); |
| | | if(response!=null |
| | | && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){ |
| | |
| | | queryWrapper.selectAs(Parks::getHkId,ParkBook::getParkHkId); |
| | | queryWrapper.leftJoin(Parks.class,Parks::getId,ParkBook::getParkId); |
| | | queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); |
| | | List<ParkBook> list = parkBookMapper.selectJoinList(ParkBook.class,queryWrapper); |
| | | List<ParkBook> list = parkBookMapper.selectJoinList(ParkBook.class,queryWrapper.eq(ParkBook::getHkStatus,Constants.ZERO)); |
| | | return list; |
| | | } |
| | | /** |
| | |
| | | model.setEditDate(DateUtil.getISO8601DateByStr(device.getUpdateTime())); |
| | | model.setHkId(device.getParkIndexCode()); |
| | | model.setHkStatus(Constants.ONE); |
| | | model.setStatus(Constants.ONE); |
| | | return model; |
| | | } |
| | | |
| | |
| | | return true; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @Override |
| | | @Transactional |
| | | public void syncParkRecords(Date date){ |
| | | try { |
| | | if( Constants.formatIntegerNum(dataSyncConfig.getVisitorDataOrigin()) != DataSyncConfig.origin.hk){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,当前不支持海康数据同步操作~"); |
| | | } |
| | | ParkCrossRecordListRequest param = new ParkCrossRecordListRequest(); |
| | | //(全量同步) |
| | | boolean hasNext = true; |
| | | int curTotal = 0; |
| | | int curPage = 1; |
| | | //查询今天的 |
| | | Date start = Utils.Date.getStart(date); |
| | | Date end = new Date(); |
| | | if(DateUtil.daysBetweenDates(end,start) >1){ |
| | | end = Utils.Date.getEnd(date); |
| | | } |
| | | param.setStartTime(DateUtil.getISO8601Timestamp2( start)); |
| | | param.setEndTime(DateUtil.getISO8601Timestamp2( end)); |
| | | |
| | | List<CarEvent> allHkList = new ArrayList<>(); |
| | | while (hasNext){ |
| | | //分页遍历循环查询所有门禁设备数据 |
| | | param.setPageNo(curPage); |
| | | param.setPageSize(100); |
| | | BaseResponse<BaseListPageResponse<ParkCrossRecordInfoResponse>> response = HKService.parkCrossRecords(param); |
| | | if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE) ){ |
| | | throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); |
| | | } |
| | | if(response.getData() == null || response.getData().getTotal() ==0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何信息!"); |
| | | } |
| | | BaseListPageResponse<ParkCrossRecordInfoResponse> r = response.getData(); |
| | | curTotal += 100; |
| | | if(curTotal >= r.getTotal()){ |
| | | hasNext = false; |
| | | } |
| | | if(r.getList() == null || r.getList().size()==0){ |
| | | hasNext =false; |
| | | }else{ |
| | | allHkList.addAll(getNewCarEventModelBYList(r.getList())); |
| | | } |
| | | curPage++; |
| | | } |
| | | if(allHkList .size() == 0){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"未同步到任何信息!"); |
| | | } |
| | | //清空原有当天的数据 |
| | | carEventMapper.delete(new UpdateWrapper<CarEvent>().lambda() |
| | | .ge(CarEvent::getCreateDate,start) |
| | | .le(CarEvent::getCreateDate,end)); |
| | | if(allHkList.size()>0){ |
| | | int sublistSize = 500; |
| | | |
| | | int startIndex = 0; |
| | | int endIndex = sublistSize; |
| | | |
| | | while (startIndex < allHkList.size()) { |
| | | if (endIndex > allHkList.size()) { |
| | | endIndex = allHkList.size(); |
| | | } |
| | | |
| | | List<CarEvent> sublist = allHkList.subList(startIndex, endIndex); |
| | | if(sublist.size()>0){ |
| | | carEventMapper.insertBatchSomeColumn(sublist);//插入新数据 |
| | | } |
| | | startIndex = endIndex; |
| | | endIndex += sublistSize; |
| | | } |
| | | } |
| | | |
| | | }catch (BusinessException e){ |
| | | throw e; |
| | | } |
| | | } |
| | | |
| | | private List<CarEvent> getNewCarEventModelBYList(List<ParkCrossRecordInfoResponse> list ) { |
| | | List<CarEvent> newList = new ArrayList<>(); |
| | | if(list == null || list.size()==0){ |
| | | return newList; |
| | | } |
| | | for(ParkCrossRecordInfoResponse model :list){ |
| | | if( model.getReleaseResult() ==null || !( model.getReleaseResult() == 1|| model.getReleaseResult() == 2 )){ |
| | | continue; |
| | | } |
| | | CarEvent c = new CarEvent(); |
| | | c.setHappenTime(model.getCrossTime()); |
| | | c.setCreateDate(DateUtil.getISO8601DateByStr2(model.getCrossTime())); |
| | | c.setSvrIndex(model.getAswSyscode()); |
| | | c.setVehiclePicUrl(model.getVehiclePicUri()); |
| | | c.setPlatePicUrl(model.getPlateNoPicUri()); |
| | | c.setVehicleType(model.getVehicleType()); |
| | | c.setPlateColor(model.getPlateColor()); |
| | | c.setPlateType(model.getPlateType()); |
| | | c.setCardNo(model.getCardNo()); |
| | | c.setReleaseReason(model.getReleaseReason()); |
| | | c.setPlateNos(model.getPlateNo()); |
| | | c.setReleaseResult(model.getReleaseResult()); |
| | | c.setInoutType(model.getVehicleOut()); |
| | | c.setParkIndex(model.getParkSyscode()); |
| | | c.setParkName(model.getParkName()); |
| | | c.setEventId(model.getCrossRecordSyscode()); |
| | | c.setGateIndex(model.getEntranceSyscode()); |
| | | c.setGateName(model.getEntranceName()); |
| | | c.setIsdeleted(Constants.ZERO); |
| | | if(model.getVehicleOut() !=null &&model.getVehicleOut() == 0 ){ |
| | | c.setEventType(HKConstants.EventTypes.PARK_PASS_IN.getKey()); |
| | | }else { |
| | | c.setEventType(HKConstants.EventTypes.PARK_PASS_OUT.getKey()); |
| | | } |
| | | newList.add(c); |
| | | } |
| | | return newList; |
| | | } |
| | | |
| | | |
| | | } |