|  |  |  | 
|---|
|  |  |  | import com.doumee.dao.business.join.VisitsJoinMapper; | 
|---|
|  |  |  | import com.doumee.dao.business.model.*; | 
|---|
|  |  |  | import com.doumee.dao.web.reqeust.SavePlatformWarnEventDTO; | 
|---|
|  |  |  | import com.doumee.service.business.PlatformJobService; | 
|---|
|  |  |  | import com.doumee.service.business.impl.PlatformWarnEventServiceImpl; | 
|---|
|  |  |  | import com.github.yulichang.wrapper.MPJLambdaWrapper; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.apache.commons.lang3.StringUtils; | 
|---|
|  |  |  | import org.checkerframework.checker.units.qual.C; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.util.CollectionUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import javax.servlet.http.HttpServletResponse; | 
|---|
|  |  |  | import java.util.ArrayList; | 
|---|
|  |  |  | import java.util.Date; | 
|---|
|  |  |  | import java.util.List; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 访客权限组信息表Service实现 | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(Device::getDoorId,request.getSrcIndex()) | 
|---|
|  |  |  | .eq(Device::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .last("limit 1" )); | 
|---|
|  |  |  | if(d!=null && !(Constants.equalsInteger(d.getIsEntrance(),Constants.ONE) && Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE)){ | 
|---|
|  |  |  | //如果是进门,录入人员的在场数据记录 | 
|---|
|  |  |  | inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1);//入场人次 | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1);//离场人次 | 
|---|
|  |  |  | if(d!=null && Constants.equalsInteger(d.getIsEntrance(),Constants.ONE)){ | 
|---|
|  |  |  | if(Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE){ | 
|---|
|  |  |  | //如果是进门,录入人员的在场数据记录 | 
|---|
|  |  |  | inoutDayCount.setInMemberNum(Constants.formatIntegerNum(inoutDayCount.getInMemberNum())+1);//入场人次 | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | inoutDayCount.setOutMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutMemberNum())+1);//离场人次 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(member !=null){ | 
|---|
|  |  |  | delRetentionLis.add(member.getId()); | 
|---|
|  |  |  | if(d!=null && !(Constants.equalsInteger(d.getIsEntrance(),Constants.ONE) && Constants.formatIntegerNum(request.getData().getExtEventInOut()) != Constants.ONE)){ | 
|---|
|  |  |  | //如果是进门,录入人员的在场数据记录 | 
|---|
|  |  |  | retentionList.add(getRetentionModelByRequest(member,request)); | 
|---|
|  |  |  | if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ | 
|---|
|  |  |  | inoutDayCount.setInSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getInSelfMemberNum())+1);//内部人员入场人次 | 
|---|
|  |  |  | if(d!=null && Constants.equalsInteger(d.getIsEntrance(),Constants.ONE)){ | 
|---|
|  |  |  | delRetentionLis.add(member.getId()); | 
|---|
|  |  |  | if( Constants.formatIntegerNum(request.getData().getExtEventInOut()) == Constants.ONE){ | 
|---|
|  |  |  | //如果是进门,录入人员的在场数据记录 | 
|---|
|  |  |  | retentionList.add(getRetentionModelByRequest(member,request)); | 
|---|
|  |  |  | if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ | 
|---|
|  |  |  | inoutDayCount.setInSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getInSelfMemberNum())+1);//内部人员入场人次 | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1);//相关方入场人次 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | inoutDayCount.setInOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getInOtherMemberNum())+1);//相关方入场人次 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ | 
|---|
|  |  |  | inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1);//内部人员出场人次 | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//相关方出场人次 | 
|---|
|  |  |  | if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ | 
|---|
|  |  |  | inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1);//内部人员出场人次 | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//相关方出场人次 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | delRetentionLis.add(visits.getMemberId()); | 
|---|
|  |  |  | //如果是访客通行 | 
|---|
|  |  |  | if(request.getData()!=null&&request.getData().getParamValues()!=null && | 
|---|
|  |  |  | StringUtils.equals(request.getData().getParamValues().getInOrOut(),"1")){ | 
|---|
|  |  |  | StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ | 
|---|
|  |  |  | //如果是访客登记,录入人员的在场数据记录 | 
|---|
|  |  |  | Retention r = getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()); | 
|---|
|  |  |  | r.setCarNo(request.getData().getParamValues().getPlateNos()); | 
|---|
|  |  |  | 
|---|
|  |  |  | inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(request.getData()!=null&&request.getData().getParamValues()!=null && | 
|---|
|  |  |  | StringUtils.equals(request.getData().getParamValues().getInOrOut(),"2")){ | 
|---|
|  |  |  | !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ | 
|---|
|  |  |  | inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) { | 
|---|
|  |  |  | Retention retention = new Retention(); | 
|---|
|  |  |  | retention.setIsdeleted(Constants.ZERO); | 
|---|
|  |  |  | retention.setCreateDate(DateUtil.getISO8601DateByStr(happentTime)); | 
|---|
|  |  |  | retention.setCreateDate(DateUtil.getISO8601DateByStr2(happentTime)); | 
|---|
|  |  |  | retention.setCreateDate(retention.getCreateDate() == null?new Date():retention.getCreateDate()); | 
|---|
|  |  |  | retention.setClasses(visits.getClasses()); | 
|---|
|  |  |  | retention.setCode(visits.getCode()); | 
|---|
|  |  |  | retention.setIdcardNo(visits.getIdcardNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | event.setStartTime(request.getData().getVisitorInvoices().getBeginTime()); | 
|---|
|  |  |  | event.setSrcType(request.getSrcType()); | 
|---|
|  |  |  | event.setSrcParentIndex(request.getSrcParentIndex()); | 
|---|
|  |  |  | event.setSrcName(request.getSrcName()); | 
|---|
|  |  |  | event.setSrcName((request.getData()!=null &&request.getData().getParamValues()!=null)? | 
|---|
|  |  |  | request.getData().getParamValues().getSrcName():request.getSrcName()); | 
|---|
|  |  |  | event.setSrcIndex(request.getSrcIndex()); | 
|---|
|  |  |  | event.setSex(detail.getSex()); | 
|---|
|  |  |  | event.setPurpose(request.getData().getVisitorInvoices().getVisitReason()); | 
|---|
|  |  |  | 
|---|
|  |  |  | event.setPhotoUrl(getHkImgUrl(detail.getFacePic())); | 
|---|
|  |  |  | event.setPersonName(detail.getVisitorName()); | 
|---|
|  |  |  | event.setCarNo(detail.getPlateNo()); | 
|---|
|  |  |  | event.setRemark(JSONObject.toJSONString(request)); | 
|---|
|  |  |  | event.setInvoicesNo(request.getData().getVisitorInvoices().getInvoicesNo());//访客单号 | 
|---|
|  |  |  | event.setIdType(detail.getCertType()); | 
|---|
|  |  |  | String idnum = detail.getCertNo(); | 
|---|
|  |  |  | 
|---|
|  |  |  | .last("limit 1" )); | 
|---|
|  |  |  | if(cars!=null){ | 
|---|
|  |  |  | event.setMemberId(cars.getMemberId()); | 
|---|
|  |  |  | //自有车  查询当前是否有待签到的任务 | 
|---|
|  |  |  | if(carsMapper.selectCount(new QueryWrapper<Cars>() | 
|---|
|  |  |  | .lambda().eq(Cars::getCode,event.getPlateNos()) | 
|---|
|  |  |  | .eq(Cars::getType,Constants.ONE) | 
|---|
|  |  |  | .eq(Cars::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | )>Constants.ZERO){ | 
|---|
|  |  |  | //查询车辆当前是否存在进行中的任务 | 
|---|
|  |  |  | if( platformJobMapper.selectCount(new QueryWrapper<PlatformJob>().lambda() | 
|---|
|  |  |  | .eq(PlatformJob::getCarCodeFront,event.getPlateNos()) | 
|---|
|  |  |  | .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .in(PlatformJob::getStatus, | 
|---|
|  |  |  | Constants.PlatformJobStatus.IN_WAIT.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.CALLED.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.WORKING.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.DONE.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.TRANSFERING.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.EXCEPTION.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.AUTHED_LEAVE.getKey() | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | )==Constants.ZERO){ | 
|---|
|  |  |  | PlatformJob platformJob = platformJobMapper.selectOne(new QueryWrapper<PlatformJob>().lambda() | 
|---|
|  |  |  | .eq(PlatformJob::getCarCodeFront,event.getPlateNos()) | 
|---|
|  |  |  | .eq(PlatformJob::getIsdeleted,Constants.ZERO) | 
|---|
|  |  |  | .in(PlatformJob::getStatus, | 
|---|
|  |  |  | Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(), | 
|---|
|  |  |  | Constants.PlatformJobStatus.WART_SIGN_IN.getKey() | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | .orderByAsc(PlatformJob::getCreateDate) | 
|---|
|  |  |  | .last(" limit 1") | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if(Objects.nonNull(platformJob)){ | 
|---|
|  |  |  | platformJob.setStatus(Constants.PlatformJobStatus.WAIT_CALL.getKey()); | 
|---|
|  |  |  | platformJob.setArriveDate(new Date()); | 
|---|
|  |  |  | platformJob.setSingType(Constants.TWO); | 
|---|
|  |  |  | platformJob.setSignDate(new Date()); | 
|---|
|  |  |  | List<PlatformJob> signList = platformJobMapper.selectList(new QueryWrapper<PlatformJob>().lambda().apply(" DATE(SIGN_DATE) = DATE(NOW()) and sign_date is not null  ")); | 
|---|
|  |  |  | if(CollectionUtils.isEmpty(signList)){ | 
|---|
|  |  |  | platformJob.setSignNum(Constants.ONE); | 
|---|
|  |  |  | } else{ | 
|---|
|  |  |  | int maxNumber = Collections.max(signList.stream().map(i->i.getSignNum()).collect(Collectors.toList())); | 
|---|
|  |  |  | platformJob.setSignNum(maxNumber + Constants.ONE); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | platformJobMapper.updateById(platformJob); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else{ | 
|---|
|  |  |  | Visits visits =  visitsMapper.selectOne(new QueryWrapper<Visits>().lambda() | 
|---|
|  |  |  | .eq(Visits::getCarNos,event.getPlateNos()) | 
|---|
|  |  |  | 
|---|
|  |  |  | PlatformJob job = platformJobMapper.selectJoinOne(PlatformJob.class, new MPJLambdaWrapper<PlatformJob>() | 
|---|
|  |  |  | .selectAll(PlatformJob.class) | 
|---|
|  |  |  | .selectAs(Platform::getName,PlatformJob::getPlatformName) | 
|---|
|  |  |  | .selectAs(Platform::getLedContent,PlatformJob::getLedContent) | 
|---|
|  |  |  | .leftJoin(Platform.class,Platform::getId,PlatformJob::getPlatformId) | 
|---|
|  |  |  | //                        .eq(StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeFront,status.getPlateNo() )//前车牌号 | 
|---|
|  |  |  | //                        .eq(!StringUtils.equals(status.getStockStatus(),"front"),PlatformJob::getCarCodeBack,status.getPlateNo() )//后车牌号 | 
|---|
|  |  |  | 
|---|
|  |  |  | update.setStatus(Constants.PlatformJobStatus.DONE.getKey());//作业已完成 | 
|---|
|  |  |  | update.setDoneDate(update.getEditDate());*/ | 
|---|
|  |  |  | if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey()) || | 
|---|
|  |  |  | Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.TRANSFERING.getKey()) || | 
|---|
|  |  |  | Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.EXCEPTION.getKey()) || | 
|---|
|  |  |  | Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){ | 
|---|
|  |  |  | if(((StringUtils.equals(status.getStockStatus(),"front") && StringUtils.equals(job.getCarCodeFront(),status.getPlateNo())) | 
|---|
|  |  |  | ||(!StringUtils.equals(status.getStockStatus(),"front") && StringUtils.equals(job.getCarCodeBack(),status.getPlateNo())) | 
|---|
|  |  |  | )){ | 
|---|
|  |  |  | //说明车辆进错月台 或者还未叫号状态,发起警告 | 
|---|
|  |  |  | //                          dealCarsInErrorPlatformBiz(job,status); | 
|---|
|  |  |  | update.setInOut(Constants.ZERO);//车辆已经离开 | 
|---|
|  |  |  | platformJobMapper.updateById(update); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())  || | 
|---|
|  |  |  | Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.AUTHED_LEAVE.getKey())){ | 
|---|
|  |  |  | update.setInOut(Constants.ZERO);//车辆已经离开 | 
|---|
|  |  |  | platformJobMapper.updateById(update); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | dealPlatformContentForLeave(job); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else  if(StringUtils.equals(status.getMotionStatus(),"enter")){ | 
|---|
|  |  |  | //如果是车辆进入 | 
|---|
|  |  |  | 
|---|
|  |  |  | platformJobMapper.updateById(update); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /*if(job.getStartDate() == null){ | 
|---|
|  |  |  | /* | 
|---|
|  |  |  | if(job.getStartDate() == null){ | 
|---|
|  |  |  | update.setStartDate(update.getEditDate()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | update.setStatus(Constants.PlatformJobStatus.WORKING.getKey());//开始作业 | 
|---|
|  |  |  | 
|---|
|  |  |  | return  null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 月台车辆离开 设置月台文案为“空闲中 文案” | 
|---|
|  |  |  | * @param model | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private void dealPlatformContentForLeave(PlatformJob model) { | 
|---|
|  |  |  | List<PlatformDevice> deviceList = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda() | 
|---|
|  |  |  | .eq(PlatformDevice::getType, Constants.ZERO) | 
|---|
|  |  |  | .eq(PlatformDevice::getPlatformId,model.getPlatformId()) | 
|---|
|  |  |  | .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); | 
|---|
|  |  |  | if(deviceList ==null || deviceList.size() == 0){ | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | int speed = 13; | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode()); | 
|---|
|  |  |  | }catch (Exception e){ | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String content = StringUtils.defaultString(model.getLedContent(), Constants.PlatformLedContent.IDEL_CONTNET.getInfo()); | 
|---|
|  |  |  | List<PlatformBroadcastLog> logList = new ArrayList<>(); | 
|---|
|  |  |  | for(PlatformDevice device : deviceList){ | 
|---|
|  |  |  | if(StringUtils.isBlank(device.getHkId())){ | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1); | 
|---|
|  |  |  | logList.add(log); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(logList.size()>0){ | 
|---|
|  |  |  | platformBroadcastLogMapper.insert(logList); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private PlatformEvent initPlatformEventModel(EventPlatformCarsInfoRequest request, EventPlatformCarsDataRequest data, EventPlatformCarsStatusInfoRequest status) { | 
|---|
|  |  |  | PlatformEvent model = new PlatformEvent(); | 
|---|
|  |  |  | model.setCreateDate(new Date()); | 
|---|