package com.doumee.service.business.impl.hksync; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.config.DataSyncConfig; 
 | 
import com.doumee.core.haikang.model.HKConstants; 
 | 
import com.doumee.core.haikang.model.param.BaseResponse; 
 | 
import com.doumee.core.haikang.model.param.request.*; 
 | 
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsInfoRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.acs.EventAcsRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.acs.EventDeviceDataRequest; 
 | 
import com.doumee.core.haikang.model.param.request.event.parks.*; 
 | 
import com.doumee.core.haikang.model.param.request.event.visit.*; 
 | 
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.*; 
 | 
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.apache.http.HttpEntity; 
 | 
import org.apache.http.HttpResponse; 
 | 
import org.apache.http.client.HttpClient; 
 | 
import org.apache.http.client.methods.HttpGet; 
 | 
import org.apache.http.impl.client.HttpClientBuilder; 
 | 
import org.apache.http.util.EntityUtils; 
 | 
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.io.IOException; 
 | 
import java.util.*; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 访客权限组信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2023/11/30 15:33 
 | 
 */ 
 | 
@Service 
 | 
@Slf4j 
 | 
public class HkSyncPushServiceImpl extends HkSyncBaseServiceImpl { 
 | 
  
 | 
    @Autowired 
 | 
    private InoutDayCountMapper inoutDayCountMapper; 
 | 
    @Autowired 
 | 
    private InterfaceLogMapper interfaceLogMapper; 
 | 
    @Autowired 
 | 
    private CarsMapper carsMapper; 
 | 
    @Autowired 
 | 
    private ParkBookMapper parkBookMapper; 
 | 
    @Autowired 
 | 
    private DeviceEventMapper deviceEventMapper; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
    @Autowired 
 | 
    private DeviceMapper deviceMapper; 
 | 
    @Autowired 
 | 
    private DataSyncConfig dataSyncConfig; 
 | 
    @Autowired 
 | 
    private CarEventMapper carEventMapper; 
 | 
    @Autowired 
 | 
    private VisitEventMapper visitEventMapper; 
 | 
    @Autowired 
 | 
    private VisitsJoinMapper visitsMapper; 
 | 
    @Autowired 
 | 
    private RetentionMapper retentionMapper; 
 | 
    @Autowired 
 | 
    private PlatformMapper platformMapper; 
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
    @Autowired 
 | 
    private PlatformDeviceMapper platformDeviceMapper; 
 | 
    @Autowired 
 | 
    private PlatformBroadcastLogMapper platformBroadcastLogMapper; 
 | 
    @Autowired 
 | 
    private PlatformJobMapper platformJobMapper; 
 | 
    @Autowired 
 | 
    private PlatformWmsDetailMapper platformWmsDetailMapper; 
 | 
    @Autowired 
 | 
    private PlatformEventMapper platformEventMapper; 
 | 
    @Autowired 
 | 
    private PlatformLogMapper platformLogMapper; 
 | 
    @Autowired 
 | 
    private PlatformWarnEventServiceImpl platformWarnEventService; 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    /** 
 | 
     * 海康门禁事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String   dealAcsEvent(EventAcsRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康门禁事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventAcsInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<DeviceEvent> list = new ArrayList<>(); 
 | 
            List<Integer> delRetentionLis = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            InoutDayCount inoutDayCount = new InoutDayCount(); 
 | 
            for(EventAcsInfoRequest request : events){ 
 | 
                EventDeviceDataRequest model = request.getData(); 
 | 
                if(model ==null){ 
 | 
                    continue; 
 | 
                } 
 | 
                //根据推送人员编码,处理在场、离场人员数据记录 
 | 
                dealMemberDataByRequest(request,delRetentionLis,retentionList,inoutDayCount); 
 | 
                //封装门禁事件信息表对象 
 | 
                list.add(getDeviceEventModelByRequest(request)); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                deviceEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionLis.size()>0){ 
 | 
                //先删除原有的在场人员(内部人员) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.memberType.internal) 
 | 
                        .in(Retention::getMemberId,delRetentionLis)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            dealInoutDayCountBiz(inoutDayCount); 
 | 
            log.info("【海康门禁事件推送】========成功======="); 
 | 
        }catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
            log.error("【海康门禁事件推送】========失败=======:\n" + e.getMessage()); 
 | 
        }finally { 
 | 
            saveInterfaceLog(param,"/business/hksync/push/acs",result,false);//不计日志 
 | 
        } 
 | 
        return  null; 
 | 
  
 | 
    } 
 | 
  
 | 
    private void dealInoutDayCountBiz(InoutDayCount param) { 
 | 
        if(param == null){ 
 | 
            param = new InoutDayCount(); 
 | 
        } 
 | 
        param.setTimeInfo(Utils.Date.getStart(new Date())); 
 | 
        InoutDayCount model = inoutDayCountMapper.selectOne(new QueryWrapper<InoutDayCount>().lambda() 
 | 
                .eq(InoutDayCount::getTimeInfo,param.getTimeInfo()) 
 | 
                .eq(InoutDayCount::getIsdeleted,Constants.ZERO) 
 | 
                .last("limit 1")); 
 | 
        log.error("============================inoutDayCountMapper:"+JSONObject.toJSONString(param)); 
 | 
        if(model == null){ 
 | 
            param.setIsdeleted(Constants.ZERO); 
 | 
            param.setCreateDate(new Date()); 
 | 
            param.setEditDate(new Date()); 
 | 
            inoutDayCountMapper.insert(param); 
 | 
        }else{ 
 | 
            inoutDayCountMapper.update(null,new UpdateWrapper<InoutDayCount>().lambda() 
 | 
                    .eq(InoutDayCount::getId,model.getId() ) 
 | 
                    .set(InoutDayCount::getEditDate,new Date() ) 
 | 
                    .setSql(param.getInCarNum()!=null,"IN_CAR_NUM = ifnull(IN_CAR_NUM,0)+"+param.getInCarNum() ) 
 | 
                    .setSql(param.getOutCarNum()!=null,"OUT_CAR_NUM = ifnull(OUT_CAR_NUM,0)+"+param.getOutCarNum() ) 
 | 
                    .setSql(param.getInMemberNum()!=null,"IN_MEMBER_NUM = ifnull(IN_MEMBER_NUM,0)+"+param.getInMemberNum() ) 
 | 
                    .setSql(param.getOutMemberNum()!=null,"OUT_MEMBER_NUM = ifnull(OUT_MEMBER_NUM,0)+"+param.getOutMemberNum() ) 
 | 
                    .setSql(param.getInVisitorNum()!=null,"IN_VISITOR_NUM = ifnull(IN_VISITOR_NUM,0)+"+param.getInVisitorNum() ) 
 | 
                    .setSql(param.getOutVisitorNum()!=null,"OUT_VISITOR_NUM = ifnull(OUT_VISITOR_NUM,0)+"+param.getOutVisitorNum() ) 
 | 
                    .setSql(param.getSigninVisitorNum()!=null,"SIGNIN_VISITOR_NUM = ifnull(SIGNIN_VISITOR_NUM,0)+"+param.getSigninVisitorNum() ) 
 | 
                    .setSql(param.getLeaveVisitorNum()!=null,"LEAVE_VISITOR_NUM = ifnull(LEAVE_VISITOR_NUM,0)+"+param.getLeaveVisitorNum() ) 
 | 
                    .setSql(param.getInOtherMemberNum()!=null,"IN_OTHER_MEMBER_NUM = ifnull(IN_OTHER_MEMBER_NUM,0)+"+param.getInOtherMemberNum() ) 
 | 
                    .setSql(param.getOutOtherMemberNum()!=null,"OUT_OTHER_MEMBER_NUM = ifnull(OUT_OTHER_MEMBER_NUM,0)+"+param.getOutOtherMemberNum() ) 
 | 
                    .setSql(param.getInSelfMemberNum()!=null,"IN_SELF_MEMBER_NUM = ifnull(IN_SELF_MEMBER_NUM,0)+"+param.getInSelfMemberNum() ) 
 | 
                    .setSql(param.getOutSelfMemberNum()!=null,"OUT_SELF_MEMBER_NUM = ifnull(OUT_SELF_MEMBER_NUM,0)+"+param.getOutSelfMemberNum() ) 
 | 
            ); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据推送人员编码,处理在场、离场人员数据记录 
 | 
     * @param request 
 | 
     * @param delRetentionLis 
 | 
     * @param retentionList 
 | 
     */ 
 | 
    private void dealMemberDataByRequest(EventAcsInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,InoutDayCount inoutDayCount) { 
 | 
        //海康人员编码 
 | 
        String userNo = request.getData().getExtEventPersonNo(); 
 | 
        if(StringUtils.isNotBlank(userNo)){ 
 | 
            Member member = memberMapper.selectJoinOne(Member.class,new MPJLambdaWrapper<Member>() 
 | 
                    .selectAll(Member.class) 
 | 
                    .selectAs(Company::getType,Member::getCompanyType) 
 | 
                    .leftJoin(Company.class,Company::getId,Member::getCompanyId) 
 | 
                    .eq(Member::getHkId,userNo) 
 | 
                    .eq(Member::getIsdeleted,Constants.ZERO) 
 | 
                    .last("limit 1")); 
 | 
            //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 
 | 
            Device d = deviceMapper.selectOne(new QueryWrapper<Device>().lambda() 
 | 
                    .eq(Device::getDoorId,request.getSrcIndex()) 
 | 
                    .eq(Device::getIsdeleted,Constants.ZERO) 
 | 
                    .last("limit 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){ 
 | 
                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{ 
 | 
                        if(Constants.equalsInteger(member.getCompanyType(),Constants.ONE)){ 
 | 
                            inoutDayCount.setOutSelfMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutSelfMemberNum())+1);//内部人员出场人次 
 | 
                        }else{ 
 | 
                            inoutDayCount.setOutOtherMemberNum(Constants.formatIntegerNum(inoutDayCount.getOutOtherMemberNum())+1);//相关方出场人次 
 | 
                        } 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public static String getHkImgUrl(String url){ 
 | 
        if(StringUtils.isBlank(url)){ 
 | 
            return null; 
 | 
        } 
 | 
        return HKConstants.IMG_INDEX+url; 
 | 
    } 
 | 
    /** 
 | 
     *封装门禁事件信息表对象 
 | 
     */ 
 | 
    private DeviceEvent getDeviceEventModelByRequest(EventAcsInfoRequest request) { 
 | 
        DeviceEvent event = new DeviceEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setAccessChannel(request.getData().getExtAccessChannel()); 
 | 
        event.setUserType(request.getData().getUserType()); 
 | 
        event.setSvrIndexCode(request.getData().getSvrIndexCode()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setExtEventType(request.getData().getExtEventType()!=null?request.getData().getExtEventType():null); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSeq(request.getData().getSeq()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setExtEventType(request.getData().getExtEventType()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setExtReceiveTime(request.getData().getExtReceiveTime()); 
 | 
        event.setExtEventWhiteListNo(request.getData().getExtEventWhiteListNo()); 
 | 
        event.setExtEventWhiteListNo(request.getData().getExtEventWhiteListNo()); 
 | 
        event.setExtEventVerifyID(request.getData().getExtEventVerifyID()); 
 | 
        event.setExtEventRoleID(request.getData().getExtEventRoleID()); 
 | 
        event.setExtEventReportChannel(request.getData().getExtEventReportChannel()); 
 | 
        event.setExtEventReaderKind(request.getData().getExtEventReaderKind()); 
 | 
        event.setExtEventReaderID(request.getData().getExtEventReaderID()); 
 | 
        event.setExtEventPictureURL(getHkImgUrl(request.getData().getExtEventPictureURL())); 
 | 
        event.setExtEventPersonNo(request.getData().getExtEventPersonNo()); 
 | 
        event.setExtEventMainDevID(request.getData().getExtEventMainDevID()); 
 | 
        event.setExtEventLocalControllerID(request.getData().getExtEventLocalControllerID()); 
 | 
        event.setExtEventInOut(request.getData().getExtEventInOut()); 
 | 
        event.setExtEventIDCardPictureURL(getHkImgUrl(request.getData().getExtEventIDCardPictureURL())); 
 | 
        event.setExtEventEwipNum(request.getData().getExtEventSwipNum()); 
 | 
        event.setExtEventEubDevID(request.getData().getExtEventMainDevID()); 
 | 
        event.setExtEventDoorID(request.getData().getExtEventDoorID()); 
 | 
        event.setExtEventCode(request.getData().getExtEventCode()); 
 | 
        event.setExtEventCaseID(request.getData().getExtEventCaseID()); 
 | 
        event.setExtEventCardNo(request.getData().getExtEventCardNo()); 
 | 
        event.setExtEventAlarmOutID(request.getData().getExtEventAlarmOutID()); 
 | 
        event.setExtEventAlarmInID(request.getData().getExtEventAlarmInID()); 
 | 
        event.setExtAccessChannel(request.getData().getExtAccessChannel()); 
 | 
        //通道事件信息 
 | 
        if(request.getData().getExtEventCustomerNumInfo() !=null){ 
 | 
            event.setTotalTimes(request.getData().getExtEventCustomerNumInfo().getTotalTimes()); 
 | 
            event.setEntryTimes(request.getData().getExtEventCustomerNumInfo().getEntryTimes()); 
 | 
            event.setExitTimes(request.getData().getExtEventCustomerNumInfo().getExitTimes()); 
 | 
            event.setAccessChannel(request.getData().getExtEventCustomerNumInfo().getAccessChannel()); 
 | 
        } 
 | 
        if(request.getData().getExtEventIdentityCardInfo() !=null){ 
 | 
            //人员身份证件信息 
 | 
            event.setBirth(request.getData().getExtEventIdentityCardInfo().getBirth()); 
 | 
            String idnum = request.getData().getExtEventIdentityCardInfo().getIdNum(); 
 | 
            if(StringUtils.isNotBlank(idnum)){ 
 | 
                //身份证号存储密文 
 | 
                event.setIdNum(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 
 | 
                //脱敏手机号显示n 
 | 
                event.setIdcardDecode(Constants.getTuominStr(idnum)); 
 | 
            } 
 | 
            event.setAddress(request.getData().getExtEventIdentityCardInfo().getAddress()); 
 | 
            event.setSex(request.getData().getExtEventIdentityCardInfo().getSex()); 
 | 
            event.setName(request.getData().getExtEventIdentityCardInfo().getName()); 
 | 
            event.setEndDate(request.getData().getExtEventIdentityCardInfo().getEndDate()); 
 | 
            event.setStartDate(request.getData().getExtEventIdentityCardInfo().getStartDate()); 
 | 
            event.setTermOfValidity(request.getData().getExtEventIdentityCardInfo().getTermOfValidity()); 
 | 
        } 
 | 
        return event; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 进厂对象封装成在场人员 
 | 
     * @param member 
 | 
     * @param request 
 | 
     * @return 
 | 
     */ 
 | 
    private Retention getRetentionModelByRequest(Member member, EventAcsInfoRequest request) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setClasses(member.getClasses()); 
 | 
        retention.setCode(member.getCode()); 
 | 
        retention.setIdcardNo(member.getIdcardNo()); 
 | 
        retention.setIdcardDecode(member.getIdcardDecode()); 
 | 
        retention.setName(member.getName()); 
 | 
        retention.setBirthday(member.getBirthday()); 
 | 
        retention.setType(member.getType()); 
 | 
        retention.setCompanyId(member.getCompanyId()); 
 | 
        retention.setCompanyName(member.getCompanyName()); 
 | 
        retention.setEventCode(request.getData().getExtEventCode()+""); 
 | 
        retention.setEventDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setFaceImg(member.getFaceImg()); 
 | 
        retention.setImgurl(member.getImgurl()); 
 | 
        retention.setPhone(member.getPhone()); 
 | 
        retention.setMemberId(member.getId()); 
 | 
        retention.setDeviceName(request.getSrcName()); 
 | 
        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
        return retention; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 海康访客事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String   dealVisitEvent(EventVisitRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventVisitInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<VisitEvent> list = new ArrayList<>(); 
 | 
            List<Integer> delRetentionLis = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            for(EventVisitInfoRequest request : events){ 
 | 
                if(request.getData() ==null ||StringUtils.isBlank(request.getData().getVisitorId())){ 
 | 
                    continue; 
 | 
                } 
 | 
                //海康访客记录编码 
 | 
                if(StringUtils.isNotBlank(request.getData().getVisitorId())){ 
 | 
                    //根据访客推送访客记录编码,处理访客记录、在场人员等信息 
 | 
                    dealVisitDataByRequst(request,delRetentionLis,retentionList); 
 | 
                } 
 | 
                //封装门禁事件信息表对象 
 | 
                list.add(getVisitEventModelByRequest(request)); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                visitEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionLis.size()>0){ 
 | 
                //先删除原有的在场人员(普通访客) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.memberType.visitor) 
 | 
                        .in(Retention::getMemberId,delRetentionLis)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            log.info("【海康访客事件推送】========成功======="); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); 
 | 
        } 
 | 
        saveInterfaceLog(param,"/business/hksync/push/visit",result,true); 
 | 
        return  null; 
 | 
  
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 海康访客事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String     dealVisitEventIccm(EventVisitIccmRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康访客事件推送】==========开始=======:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventVisitIccmInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<VisitEvent> list = new ArrayList<>(); 
 | 
            List<Integer> delRetentionLis = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            InoutDayCount inoutDayCount = new InoutDayCount(); 
 | 
            for(EventVisitIccmInfoRequest request : events){ 
 | 
                if(request.getData() ==null || request.getData().getVisitorInvoices() ==null){ 
 | 
                    continue; 
 | 
                } 
 | 
                if(request.getData().getVisitorInformationList() == null || request.getData().getVisitorInformationList().size() ==0){ 
 | 
                    continue; 
 | 
                } 
 | 
                //海康访客记录编码 
 | 
                dealVisitDataByRequstIccm(request,delRetentionLis,retentionList,inoutDayCount); 
 | 
                list.add(getVisitEventModelByRequestIccm(request,request.getData().getVisitorInformationList().get(0))); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                visitEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionLis.size()>0){ 
 | 
                //先删除原有的在场人员(普通访客) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.memberType.visitor) 
 | 
                        .in(Retention::getMemberId,delRetentionLis)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            dealInoutDayCountBiz(inoutDayCount); 
 | 
            log.info("【海康访客事件推送】========成功======="); 
 | 
        }catch (Exception e){ 
 | 
            log.error("【海康访客事件推送】========失败=======:\n"+e.getMessage()); 
 | 
        } 
 | 
        saveInterfaceLog(param,"/business/hksync/push/visitIccm",result,true); 
 | 
        return  null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     *  根据访客推送访客记录编码,处理访客记录、在场人员等信息 
 | 
     */ 
 | 
    private void dealVisitDataByRequstIccm(EventVisitIccmInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList,  InoutDayCount inoutDayCount) { 
 | 
  
 | 
        EventVisitIccmDataRequest model = request.getData(); 
 | 
        EventVisitIccmInvoiceParamRequest data =  request.getData().getVisitorInvoices(); 
 | 
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Visits.class); 
 | 
        queryWrapper.selectAs(Member::getType,Visits::getMemberType); 
 | 
        queryWrapper.eq(Visits::getHkId,model.getVisitorInvoices().getInvoicesNo() );//访客单号 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId ); 
 | 
        queryWrapper.last("limit 1"); 
 | 
        Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper); 
 | 
        if(visits !=null){ 
 | 
            if(dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk){ 
 | 
                //如果是伊利大屏项目,不做处理 
 | 
                return; 
 | 
            } 
 | 
            Visits updateVistis = new Visits(); 
 | 
            updateVistis.setId(visits.getId()); 
 | 
            if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_IN.getKey()) { 
 | 
                //如果是访客登记,录入人员的在场数据记录 
 | 
//                retentionList.add(getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType())); 
 | 
                //来访时间 
 | 
                inoutDayCount.setSigninVisitorNum(Constants.formatIntegerNum(inoutDayCount.getSigninVisitorNum())+1); 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signin); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); 
 | 
                //更新最新来访时间 
 | 
                Member member = new Member(); 
 | 
                member.setLastVisitDate(updateVistis.getInDate()); 
 | 
                member.setId(visits.getMemberId()); 
 | 
                memberMapper.updateById(member); 
 | 
            }else if (Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_ICCM_OUT.getKey())  { 
 | 
                //如果是访客签离事件 
 | 
                inoutDayCount.setLeaveVisitorNum(Constants.formatIntegerNum(inoutDayCount.getLeaveVisitorNum())+1); 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signout); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(data.getBeginTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(data.getFinishTime())); 
 | 
                updateVistis.setOutType(Constants.ZERO); 
 | 
                updateVistis.setOutInfo("访客正常签离"); 
 | 
            }else{ 
 | 
                //如果人员信息存在,切是访客通行,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 
 | 
                delRetentionLis.add(visits.getMemberId()); 
 | 
                //如果是访客通行 
 | 
                if(request.getData()!=null&&request.getData().getParamValues()!=null && 
 | 
                        StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ 
 | 
                    //如果是访客登记,录入人员的在场数据记录 
 | 
                    Retention r = getRetentionModelByVisitRequest(visits, request.getHappenTime(),request.getSrcType()); 
 | 
                    r.setCarNo(request.getData().getParamValues().getPlateNos()); 
 | 
                    r.setAccessType(request.getData().getParamValues().getAccessType()); 
 | 
                    r.setDeviceName(request.getData().getParamValues().getSrcName()); 
 | 
                    r.setDeviceIndex(request.getData().getParamValues().getSrcIndex()); 
 | 
                    retentionList.add(r); 
 | 
                    inoutDayCount.setInVisitorNum(Constants.formatIntegerNum(inoutDayCount.getInVisitorNum())+1); 
 | 
                } 
 | 
                if(request.getData()!=null&&request.getData().getParamValues()!=null && 
 | 
                         !StringUtils.equals(request.getData().getParamValues().getInOrOut(),"0")){ 
 | 
                    inoutDayCount.setOutVisitorNum(Constants.formatIntegerNum(inoutDayCount.getOutVisitorNum())+1); 
 | 
                } 
 | 
            } 
 | 
            updateVistis.setEditDate(new Date()); 
 | 
            //更新访客来访或者签离时间信息 
 | 
            visitsMapper.updateById(updateVistis) ; 
 | 
        } 
 | 
    } 
 | 
    private Retention getRetentionModelByVisitRequest(Visits visits, String happentTime,String srcType) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        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()); 
 | 
        retention.setIdcardDecode(visits.getIdcardDecode()); 
 | 
        retention.setName(visits.getName()); 
 | 
        retention.setBirthday(visits.getBirthday()); 
 | 
        retention.setType(visits.getMemberType()); 
 | 
        retention.setCompanyId(visits.getCompanyId()); 
 | 
        retention.setCompanyName(visits.getCompanyName()); 
 | 
        retention.setEventCode(srcType); 
 | 
        retention.setEventDate(retention.getCreateDate()); 
 | 
        retention.setFaceImg(visits.getFaceImg()); 
 | 
        retention.setImgurl(visits.getImgurl()); 
 | 
        retention.setPhone(visits.getPhone()); 
 | 
        retention.setMemberId(visits.getMemberId()); 
 | 
        return retention; 
 | 
    } 
 | 
    private VisitEvent getVisitEventModelByRequestIccm(EventVisitIccmInfoRequest request,EventVisitIccmDetailParamRequest detail) { 
 | 
        if(request.getData().getTargetPerson() ==null){ 
 | 
            request.getData().setTargetPerson(new EventVisitIccmTargetParamRequest()); 
 | 
        } 
 | 
        if(request.getData().getVisitorInvoices() == null){ 
 | 
            request.getData().setVisitorInvoices(new EventVisitIccmInvoiceParamRequest()); 
 | 
        } 
 | 
        VisitEvent event = new VisitEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr2(request.getHappenTime())); 
 | 
        if(event.getCreateDate() == null){ 
 | 
            event.setCreateDate(new Date()); 
 | 
        } 
 | 
        event.setVisitorWorkUint(detail.getUnit()); 
 | 
        event.setVisitorId(detail.getVisitorId()); 
 | 
        event.setVisitorCode(detail.getAppointmentCode()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setSvrIndexCode(request.getSrcIndex()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setEndTime(request.getData().getVisitorInvoices().getFinishTime()); 
 | 
        event.setStartTime(request.getData().getVisitorInvoices().getBeginTime()); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        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.setPhone(detail.getPhone()); 
 | 
        event.setBeVisitedPersonId(request.getData().getVisitorInvoices().getVisitTargetId()); 
 | 
        event.setBeVisitedPersonName(request.getData().getTargetPerson().getName()); 
 | 
        event.setBeVisitedPersonOrg(request.getData().getTargetPerson().getOrgPathName()); 
 | 
        event.setBeVisitedPersonOrgId(request.getData().getTargetPerson().getName()); 
 | 
        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(); 
 | 
        if(StringUtils.isNotBlank(idnum)){ 
 | 
            //身份证号存储密文 
 | 
            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 
 | 
            //脱敏手机号显示n 
 | 
            event.setIdcardDecode(Constants.getTuominStr(idnum)); 
 | 
        } 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        return event; 
 | 
    } 
 | 
    /** 
 | 
     *  根据访客推送访客记录编码,处理访客记录、在场人员等信息 
 | 
     */ 
 | 
    private void dealVisitDataByRequst(EventVisitInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) { 
 | 
        EventVisitDataRequest model = request.getData(); 
 | 
        MPJLambdaWrapper<Visits> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Visits.class); 
 | 
        queryWrapper.selectAs(Member::getType,Visits::getMemberType); 
 | 
        queryWrapper.eq(Visits::getHkId,model.getVisitorId() ); 
 | 
        queryWrapper.leftJoin(Member.class,Member::getId,Visits::getMemberId ); 
 | 
        queryWrapper.last("limit 1"); 
 | 
        Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper); 
 | 
        if(visits !=null){ 
 | 
            //如果人员信息存在,则删除之前的所有进场数据(无论此次推送是进厂还是出场推送事件) 
 | 
            delRetentionLis.add(visits.getMemberId()); 
 | 
            if(dataSyncConfig.getOrgUserDataOrigin() == DataSyncConfig.origin.hk){ 
 | 
                //如果是伊利大屏项目,不做处理 
 | 
                return; 
 | 
            } 
 | 
            Visits updateVistis = new Visits(); 
 | 
            updateVistis.setId(visits.getId()); 
 | 
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.VISIT_SIGN_IN.getKey()){ 
 | 
                //如果是访客登记,录入人员的在场数据记录 
 | 
                retentionList.add(getRetentionModelByVisitRequest(visits,request)); 
 | 
                //来访时间 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signin); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime())); 
 | 
                //更新最新来访时间 
 | 
                Member member = new Member(); 
 | 
                member.setLastVisitDate(updateVistis.getInDate()); 
 | 
                member.setId(visits.getMemberId()); 
 | 
                memberMapper.updateById(member); 
 | 
            }else { 
 | 
                //如果是访客签离事件 
 | 
                updateVistis.setStatus(Constants.VisitStatus.signout); 
 | 
                updateVistis.setInDate(DateUtil.getISO8601DateByStr(model.getStartTime())); 
 | 
                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime())); 
 | 
                updateVistis.setOutType(Constants.ZERO); 
 | 
                updateVistis.setOutInfo("访客正常签离"); 
 | 
            } 
 | 
            updateVistis.setEditDate(new Date()); 
 | 
            //更新访客来访或者签离时间信息 
 | 
            visitsMapper.updateById(updateVistis) ; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private VisitEvent getVisitEventModelByRequest(EventVisitInfoRequest request) { 
 | 
        VisitEvent event = new VisitEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setVisitorWorkUint(request.getData().getVisitorWorkUint()); 
 | 
        event.setVisitorId(request.getData().getVisitorId()); 
 | 
        event.setVisitorCode(request.getData().getVisitorCode()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setSvrIndexCode(request.getData().getSvrIndexCode()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setEndTime(request.getData().getEndTime()); 
 | 
        event.setStartTime(request.getData().getStartTime()); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setSignOrg(request.getData().getSignOrg()); 
 | 
        event.setSex(request.getData().getSex()); 
 | 
        event.setPurpose(request.getData().getPurpose()); 
 | 
        event.setPhone(request.getData().getPhone()); 
 | 
        event.setBeVisitedPersonId(request.getData().getBeVisitedPersonId()); 
 | 
        event.setBeVisitedPersonName(request.getData().getBeVisitedPersonName()); 
 | 
        event.setBeVisitedPersonOrg(request.getData().getBeVisitedPersonOrg()); 
 | 
        event.setBeVisitedPersonOrgId(request.getData().getBeVisitedPersonOrgId()); 
 | 
        event.setVisitorWorkUint(request.getData().getVisitorWorkUint()); 
 | 
        event.setPhotoUrl(getHkImgUrl(request.getData().getPhotoUrl())); 
 | 
        event.setPersonName(request.getData().getPersonName()); 
 | 
        event.setCarNo(request.getData().getCarNo()); 
 | 
        event.setInvoicesNo(request.getData().getVisitorId()); 
 | 
        event.setCaptureUrl(request.getData().getCaptureUrl()); 
 | 
        if(StringUtils.isNotBlank(request.getData().getCaptureUrl())){ 
 | 
            event.setCaptureUrl(HKConstants.IMG_INDEX+request.getData().getCaptureUrl()); 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(request.getData().getPhotoUrl())){ 
 | 
  
 | 
            event.setPhotoUrl(HKConstants.IMG_INDEX+request.getData().getPhotoUrl()); 
 | 
        } 
 | 
        event.setIdType(request.getData().getIdType()); 
 | 
        String idnum =request.getData().getIdNo(); 
 | 
        if(StringUtils.isNotBlank(idnum)){ 
 | 
            //身份证号存储密文 
 | 
            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//身份证号加密 
 | 
            //脱敏手机号显示n 
 | 
            event.setIdcardDecode(Constants.getTuominStr(idnum)); 
 | 
        } 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        return event; 
 | 
    } 
 | 
  
 | 
    private Retention getRetentionModelByVisitRequest(Visits visits, EventVisitInfoRequest request) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setClasses(visits.getClasses()); 
 | 
        retention.setCode(visits.getCode()); 
 | 
        retention.setIdcardNo(visits.getIdcardNo()); 
 | 
        retention.setIdcardDecode(visits.getIdcardDecode()); 
 | 
        retention.setName(visits.getName()); 
 | 
        retention.setBirthday(visits.getBirthday()); 
 | 
        retention.setType(visits.getMemberType()); 
 | 
        retention.setCompanyId(visits.getCompanyId()); 
 | 
        retention.setCompanyName(visits.getCompanyName()); 
 | 
        retention.setEventCode(request.getSrcType()+""); 
 | 
        retention.setEventDate(retention.getCreateDate()); 
 | 
        retention.setFaceImg(visits.getFaceImg()); 
 | 
        retention.setImgurl(visits.getImgurl()); 
 | 
        retention.setPhone(visits.getPhone()); 
 | 
        retention.setMemberId(visits.getMemberId()); 
 | 
//        retention.setDeviceName(request.getSrcName()); 
 | 
//        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
        return retention; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 海康停车场事件推送 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String   dealParkEvent(EventParkRequest param, HttpServletResponse response){ 
 | 
        String result = null; 
 | 
        log.info("【海康停车场事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventParkInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<CarEvent> list = new ArrayList<>(); 
 | 
            List<Retention> retentionList = new ArrayList<>(); 
 | 
            List<String> delRetentionList = new ArrayList<>(); 
 | 
            InoutDayCount inoutDayCount = new InoutDayCount(); 
 | 
            for(EventParkInfoRequest request : events){ 
 | 
                if(request.getData() ==null ||StringUtils.isBlank(request.getData().getPlateNo())){ 
 | 
                    continue; 
 | 
                } 
 | 
                //封装事件信息表对象 
 | 
                list.add(getParkEventModelByRequest(request,delRetentionList,retentionList,inoutDayCount)); 
 | 
            } 
 | 
            if(list.size()>0){ 
 | 
                //插入门禁记录 
 | 
                carEventMapper.insert(list); 
 | 
            } 
 | 
            if(delRetentionList.size()>0){ 
 | 
                //先删除原有的在场人员(内部人员) 
 | 
                retentionMapper.delete(new UpdateWrapper<Retention>().lambda() 
 | 
                        .eq(Retention::getType,Constants.THREE) 
 | 
                        .in(Retention::getCarNo,delRetentionList)); 
 | 
            } 
 | 
            if(retentionList.size()>0){ 
 | 
                //再插入最新的在厂人员 
 | 
                retentionMapper.insert(retentionList); 
 | 
            } 
 | 
            dealInoutDayCountBiz(inoutDayCount); 
 | 
            log.info("【海康停车场事件推送】========成功======="); 
 | 
        }catch (Exception e){ 
 | 
            e.printStackTrace(); 
 | 
            log.error("【海康停车场事件推送】========失败=======:\n"+e.getMessage()); 
 | 
        } 
 | 
        saveInterfaceLog(param,"/business/hksync/push/parks",result,false); 
 | 
        return  null; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 根据推送数据封装停车事件对象信息 
 | 
     * @param request 
 | 
     * @return 
 | 
     */ 
 | 
    private CarEvent getParkEventModelByRequest(EventParkInfoRequest request, List<String> delRetentionList , List<Retention> retentionList,InoutDayCount inoutDayCount ) { 
 | 
        CarEvent event = new CarEvent(); 
 | 
        event.setIsdeleted(Constants.ZERO); 
 | 
        event.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        event.setVehicleType(request.getData().getVehicleType()); 
 | 
        event.setVehicleColor(request.getData().getVehicleColor()); 
 | 
        event.setVehicleClass(request.getData().getVehicleClass()); 
 | 
        event.setTimestr(request.getData().getTime()); 
 | 
        event.setEventId(request.getEventId()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setSvrIndex(request.getData().getSvrIndex()); 
 | 
        event.setSubModel(request.getData().getSubModel()); 
 | 
        event.setSubLogo(request.getData().getSubLogo()); 
 | 
        event.setStatus(request.getStatus()); 
 | 
        event.setSrcType(request.getSrcType()); 
 | 
        event.setSrcParentIndex(request.getSrcParentIndex()); 
 | 
        event.setSrcName(request.getSrcName()); 
 | 
        event.setSrcIndex(request.getSrcIndex()); 
 | 
        event.setRoadwayType(request.getData().getRoadwayType()); 
 | 
        event.setRoadwayName(request.getData().getRoadwayName()); 
 | 
        event.setRoadwayIndex(request.getData().getRoadwayIndex()); 
 | 
        event.setPlateType(request.getData().getPlateType()); 
 | 
        event.setTimeout(request.getTimeout()); 
 | 
        event.setPlateNos(request.getData().getPlateNo()); 
 | 
        event.setPlateColor(request.getData().getPlateColor()); 
 | 
        event.setPlateBelieve(request.getData().getPlateBelieve()); 
 | 
        event.setParkName(request.getData().getParkName()); 
 | 
        event.setParkIndex(request.getData().getParkIndex()); 
 | 
        event.setMainLogo(request.getData().getMainLogo()); 
 | 
        event.setInoutType(request.getData().getInoutType()); 
 | 
        event.setHappenTime(request.getHappenTime()); 
 | 
        event.setGateName(request.getData().getGateName()); 
 | 
        event.setGateIndex(request.getData().getGateIndex()); 
 | 
        event.setEventType(request.getEventType()); 
 | 
        event.setEventIndex(request.getData().getEventIndex()); 
 | 
        event.setEventCmd(request.getData().getEventCmd()); 
 | 
        event.setCardNo(request.getData().getCardNo()); 
 | 
        event.setCarAttributeName(request.getData().getCarAttributeName()); 
 | 
  
 | 
        if(request.getData().getInResult()!=null && request.getData().getInResult().getRlsResult() !=null ){ 
 | 
            //放行方式 
 | 
            event.setReleaseWay(request.getData().getInResult().getRlsResult().getReleaseWay()); 
 | 
            event.setReleaseAuth(request.getData().getInResult().getRlsResult().getReleaseAuth()); 
 | 
            event.setReleaseReason(request.getData().getInResult().getRlsResult().getReleaseReason()); 
 | 
            event.setReleaseResult(request.getData().getInResult().getRlsResult().getReleaseResult()); 
 | 
            event.setReleaseResultEx(request.getData().getInResult().getRlsResult().getReleaseResultEx()); 
 | 
        } 
 | 
        if(request.getData().getPicUrl()!=null){ 
 | 
            //车辆和和车牌照片 
 | 
            event.setVehiclePicUrl(getHkImgUrl(request.getData().getPicUrl().getVehiclePicUrl())); 
 | 
            event.setPlatePicUrl(getHkImgUrl(request.getData().getPicUrl().getPlatePicUrl())); 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(event.getPlateNos())){ 
 | 
            ParkBook cars = parkBookMapper.selectOne(new QueryWrapper<ParkBook>().lambda() 
 | 
                    .eq(ParkBook::getCarCode,event.getPlateNos()) 
 | 
                            .eq(ParkBook::getIsdeleted,Constants.ZERO ) 
 | 
                    .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.TRANSFERING.getKey(), 
 | 
                                    Constants.PlatformJobStatus.EXCEPTION.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()) 
 | 
                        .eq(Visits::getIsdeleted,Constants.ZERO ) 
 | 
                        .in(Visits::getStatus,Constants.VisitStatus.signin,Constants.VisitStatus.signout)//最近一个已到达或者已签离 
 | 
                        .isNull(Visits::getParentId) 
 | 
                        .orderByDesc(Visits::getId) 
 | 
                        .last("limit 1" )); 
 | 
                if(visits!=null){ 
 | 
                    //最近使用该车的申请人(已到达) 
 | 
                    event.setMemberId(visits.getMemberId()); 
 | 
                } 
 | 
            } 
 | 
            if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_IN.getKey()){ 
 | 
                //如果是入厂放行 
 | 
                delRetentionList.add(event.getPlateNos()); 
 | 
                retentionList.add(getRetentionModelByParkRequest(request)); 
 | 
                inoutDayCount.setInCarNum(Constants.formatIntegerNum(inoutDayCount.getInCarNum())+1); 
 | 
            }else if(Constants.formatIntegerNum(request.getEventType()) == HKConstants.EventTypes.PARK_PASS_OUT.getKey()){ 
 | 
                //如果是出场放行 
 | 
                delRetentionList.add(event.getPlateNos()); 
 | 
                inoutDayCount.setOutCarNum(Constants.formatIntegerNum(inoutDayCount.getOutCarNum())+1); 
 | 
            } 
 | 
        } 
 | 
        return event; 
 | 
    } 
 | 
  
 | 
    private Retention getRetentionModelByParkRequest(EventParkInfoRequest request) { 
 | 
        Retention retention = new Retention(); 
 | 
        retention.setIsdeleted(Constants.ZERO); 
 | 
        retention.setCreateDate(DateUtil.getISO8601DateByStr(request.getHappenTime())); 
 | 
        retention.setCarNo(request.getData().getPlateNo()); 
 | 
        retention.setType(Constants.THREE); 
 | 
//        retention.setDeviceName(request.getSrcName()); 
 | 
//        retention.setDeviceIndex(request.getSrcIndex()); 
 | 
        return retention; 
 | 
    } 
 | 
  
 | 
    private void saveInterfaceLog(Object param, String path,String result,boolean need) { 
 | 
        if(!need){ 
 | 
            return; 
 | 
        } 
 | 
        InterfaceLog hkMonitoryLogDO=new InterfaceLog(); 
 | 
        hkMonitoryLogDO.setType(1); 
 | 
        hkMonitoryLogDO.setCreateDate(new Date()); 
 | 
        hkMonitoryLogDO.setIsdeleted(0); 
 | 
        if(param!=null){ 
 | 
            hkMonitoryLogDO.setRequest(JSONObject.toJSONString(param)); 
 | 
        } 
 | 
        hkMonitoryLogDO.setRepose(result); 
 | 
        hkMonitoryLogDO.setName(path); 
 | 
        hkMonitoryLogDO.setUrl(path); 
 | 
        interfaceLogMapper.insert(hkMonitoryLogDO); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 处理月台工作状态事件订阅后推送数据逻辑逻辑 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public String dealPlatformStatusEvent(EventPlatformRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康月台工作状态事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventPlatformInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<Platform> list = new ArrayList<>(); 
 | 
            for(EventPlatformInfoRequest request : events){ 
 | 
                EventPlatformDataRequest   data = request.getData(); 
 | 
                if(data ==null ){ 
 | 
                    continue; 
 | 
                } 
 | 
                Integer  workStatus = 0; 
 | 
                    if( data.getHPWorkingStatus() ==null ||  data.getHPWorkingStatus().size() ==0){ 
 | 
                        continue;//如何推送状态集合为空,不处理跳过 
 | 
                    } 
 | 
                    PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda() 
 | 
                            .eq(PlatformDevice::getDeviceId,request.getSrcIndex()) 
 | 
                            .eq(PlatformDevice::getIsdeleted,Constants.ZERO) 
 | 
                            .last("limit 1")); 
 | 
                    if(model ==null){ 
 | 
                        continue;//监控点未同步,跳过处理 
 | 
                    } 
 | 
                    //各车道车辆状态 
 | 
                    for(EventPlatformStatusInfoRequest status : data.getHPWorkingStatus()){ 
 | 
  
 | 
                    } 
 | 
            } 
 | 
            result = "成功"; 
 | 
            log.info("【海康月台工作状态事件推送】========成功======="); 
 | 
        }catch (Exception e) { 
 | 
            result = "失败"+e.getMessage(); 
 | 
            log.error("【海康月台工作状态事件推送】========失败=======:\n" + e.getMessage()); 
 | 
        }finally { 
 | 
            saveInterfaceLog(param,"/business/hksync/push/platform/workstatus",result,false);//不计日志 
 | 
        } 
 | 
        return  null; 
 | 
    } 
 | 
    /** 
 | 
     * 处理月台车辆状态事件订阅后推送数据逻辑逻辑 
 | 
     * @param param 
 | 
     * @param response 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public  String dealPlatformCarsEvent(EventPlatformCarsRequest param, HttpServletResponse response){ 
 | 
        log.info("【海康月台车辆状态事件推送】========开始=========:\n"+JSONObject.toJSONString(param)); 
 | 
        String result = null; 
 | 
        try { 
 | 
            if(param == null || param.getParams() == null || param.getParams().getEvents()==null){ 
 | 
                return null; 
 | 
            } 
 | 
            //门禁事件集合 
 | 
            List<EventPlatformCarsInfoRequest> events  = param.getParams().getEvents(); 
 | 
            List<PlatformEvent> eventList = new ArrayList<>(); 
 | 
            for(EventPlatformCarsInfoRequest request : events){ 
 | 
                if( request.getData() ==null  ){ 
 | 
                    continue; 
 | 
                } 
 | 
                Integer  workStatus = 0; 
 | 
                EventPlatformCarsDataRequest data = request.getData(); 
 | 
                if( data.getHPVehicleStatus() ==null  ){ 
 | 
                    continue;//如何推送状态集合为空,不处理跳过 
 | 
                } 
 | 
                //各车道车辆状态 
 | 
                EventPlatformCarsStatusInfoRequest status = data.getHPVehicleStatus(); 
 | 
                PlatformEvent event = initPlatformEventModel(request,data,status); 
 | 
                if(StringUtils.isBlank(status.getPlateNo())){ 
 | 
                    eventList.add(event);//封装事件(已月台通道为维度) 
 | 
                    continue;//如果车辆信息为空,不处理直接跳过 
 | 
                } 
 | 
                PlatformDevice model = platformDeviceMapper.selectOne(new QueryWrapper<PlatformDevice>().lambda() 
 | 
                        .eq(PlatformDevice::getDeviceId,request.getSrcIndex()) 
 | 
                        .eq(PlatformDevice::getIsdeleted,Constants.ZERO) 
 | 
                        .last("limit 1")); 
 | 
                if(model ==null){ 
 | 
                    eventList.add(event);//封装事件(已月台通道为维度) 
 | 
                    continue;//监控点未同步,跳过处理 
 | 
                } 
 | 
                event.setPlatformId(model.getPlatformId());//月台编码 
 | 
                eventList.add(event);//封装事件(已月台通道为维度) 
 | 
                //截掉第一个颜色汉字,去掉“挂”字 
 | 
                status.setPlateNo(status.getPlateNo().substring(1,status.getPlateNo().length()).replace("挂","")); 
 | 
                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() )//后车牌号 
 | 
                        .eq(PlatformJob::getIsdeleted,Constants.ZERO ) 
 | 
                        .eq(PlatformJob::getPlatformId,model.getPlatformId() ) 
 | 
                        .orderByDesc(PlatformJob::getCallDate) 
 | 
                        .last("limit 1 ")); 
 | 
                if(job == null){ 
 | 
                    continue;//如果作业为空,跳过处理 
 | 
                } 
 | 
                PlatformJob update = new PlatformJob(); 
 | 
                update.setId(job.getId()); 
 | 
                update.setEditDate(new Date()); 
 | 
                if(StringUtils.equals(status.getMotionStatus(),"leave")){ 
 | 
                    //如果是车辆离开,不做相关自动完成作业业务处理 
 | 
                   /* if(job ==null && !Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.WORKING.getKey())){ 
 | 
                        continue;//如果没查到对应的作业或者作业并非作业中,不做业务处理 
 | 
                    } 
 | 
                    if(Constants.equalsInteger(job.getType(), Constants.THREE) || Constants.equalsInteger(job.getType(), Constants.TWO)){ 
 | 
                        //如果是wms推送的外协车辆外协车辆 
 | 
                       if(platformWmsDetailMapper.selectCount(new QueryWrapper<PlatformWmsDetail>().lambda() 
 | 
                               .eq(PlatformWmsDetail::getIsdeleted,Constants.ZERO) 
 | 
                               .eq(PlatformWmsDetail::getJobId,job.getId()) 
 | 
                               .ne(PlatformWmsDetail::getLockStatus,Constants.ONE)) >0){ 
 | 
                           continue;//如果外协任务作业,合同号有未上锁的情况,不做自动完成作业逻辑处理,跳过不处理 
 | 
                       } 
 | 
                    } 
 | 
                    //如果是正在作业的状态,标记作业已完成 
 | 
                    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); 
 | 
                            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")){ 
 | 
                    //如果是车辆进入 
 | 
                    if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.CALLED.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); 
 | 
                        }else{ 
 | 
                            //车辆已经进入 
 | 
                            update.setInOut(Constants.ONE);//车辆已经进入 
 | 
                            platformJobMapper.updateById(update); 
 | 
                        } 
 | 
                    } 
 | 
                    /* 
 | 
                    if(job.getStartDate() == null){ 
 | 
                        update.setStartDate(update.getEditDate()); 
 | 
                    } 
 | 
                    update.setStatus(Constants.PlatformJobStatus.WORKING.getKey());//开始作业 
 | 
                    */ 
 | 
                }else{ 
 | 
                    continue;//其他状态不处理,跳过 
 | 
                } 
 | 
                        //暂时不做相关自动完成作业业务处理 
 | 
//                        dealPlatformJobLogBiz(update,status);//记录作业日志 
 | 
            } 
 | 
            if(eventList.size()>0){ 
 | 
                //生成事件 
 | 
                platformEventMapper.insert(eventList); 
 | 
            } 
 | 
            result = "成功"; 
 | 
            log.info("【海康月台车辆状态事件推送】========成功======="); 
 | 
        }catch (Exception e) { 
 | 
            result = "失败"+e.getMessage(); 
 | 
            log.error("【海康月台车辆状态事件推送】========失败=======:\n" + e.getMessage()); 
 | 
        }finally { 
 | 
            saveInterfaceLog(param,"/business/hksync/push/platform/workstatus",result,false);//不计日志 
 | 
        } 
 | 
        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()); 
 | 
        model.setIsdeleted(Constants.ZERO); 
 | 
        model.setEditDate(model.getCreateDate()); 
 | 
        model.setEventId(request.getEventId()); 
 | 
//        model.setRemark(JSONObject.toJSONString(request)); 
 | 
        model.setEventType(request.getEventType()); 
 | 
        model.setDataEventType(data.getEventType()); 
 | 
        model.setHappenTime(request.getHappenTime()); 
 | 
        model.setSrcIndex(request.getSrcIndex()); 
 | 
        model.setSrcType(request.getSrcType()); 
 | 
        model.setStatus(request.getStatus()); 
 | 
        model.setTimeout(request.getTimeout()); 
 | 
        model.setDateTime(data.getDateTime()); 
 | 
        model.setDataType(data.getDataType()); 
 | 
        model.setSendTime(data.getSendTime()); 
 | 
        model.setIpAddress(data.getIpAddress()); 
 | 
        model.setIpv6Address(data.getIpv6Address()); 
 | 
        model.setPortNo(data.getPortNo()); 
 | 
        model.setMacAddress(data.getMacAddress()); 
 | 
        model.setProtocol(data.getProtocol()); 
 | 
        model.setChannelId(data.getChannelID()); 
 | 
        model.setChannelName(data.getChannelName()); 
 | 
        model.setEventState(data.getEventState()); 
 | 
        model.setActivePostCount(data.getActivePostCount()); 
 | 
        model.setEventDescription(data.getEventDescription()); 
 | 
        model.setDeviceId(data.getDeviceID()); 
 | 
        model.setHpno(status.getHPNo()); 
 | 
        model.setMotionStatus(status.getMotionStatus()); 
 | 
        model.setPlateNo(status.getPlateNo()); 
 | 
        model.setVehicleDoorStatus(status.getVehicleDoorStatus()); 
 | 
        model.setStockStatus(status.getStockStatus()); 
 | 
        model.setBackgroundImageContent(status.getBackgroundImage()!=null?status.getBackgroundImage().getResourcesContent():null); 
 | 
        model.setPlateScore(status.getPlateScore()); 
 | 
        model.setPlatePictureContent(status.getPlatePicture()!=null?status.getPlatePicture().getResourcesContent():null); 
 | 
        return model; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 记录月台作业日志 
 | 
     * @param job 
 | 
     * @param status 
 | 
     */ 
 | 
    @Transactional 
 | 
    private void dealPlatformJobLogBiz(PlatformJob job,EventPlatformCarsStatusInfoRequest status) { 
 | 
        platformJobMapper.updateById(job);//更新作业状态 
 | 
        PlatformLog log = new PlatformLog(); 
 | 
        log.setIsdeleted(Constants.ZERO); 
 | 
        log.setCreateDate(new Date()); 
 | 
        log.setEditDate(log.getCreateDate()); 
 | 
        log.setJobId(job.getId()); 
 | 
        log.setObjId(job.getId()+""); 
 | 
        if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){ 
 | 
            //如果是作业完成 
 | 
            log.setObjType(Constants.PlatformJobLogType.DONE.getKey()); 
 | 
            log.setTitle(Constants.PlatformJobLogType.DONE.getName()); 
 | 
            log.setContent(Constants.PlatformJobLogType.DONE.getInfo()); 
 | 
            //查询最后一次开始作业的日志 
 | 
            PlatformLog lastBeginPlatform = platformLogMapper.selectOne(new QueryWrapper<PlatformLog>().lambda() 
 | 
                    .eq(PlatformLog::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey()) 
 | 
                    .eq(PlatformLog::getJobId,job.getId()) 
 | 
                    .orderByDesc(PlatformLog::getCreateDate) 
 | 
                    .last(" limit 1")); 
 | 
            String v = Long.toString(job.getDoneDate().getTime() - lastBeginPlatform.getCreateDate().getTime() / 1000) ; 
 | 
            lastBeginPlatform.setRemark(job.getPlatformId().toString()); 
 | 
            lastBeginPlatform.setParam3(v); 
 | 
            lastBeginPlatform.setParam2(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); 
 | 
            platformLogMapper.updateById(lastBeginPlatform);//更新上一次作业的完成时间和作业时长 
 | 
        }else{ 
 | 
            //如果是作业中 
 | 
            log.setObjType(Constants.PlatformJobLogType.WORKING.getKey()); 
 | 
            log.setTitle(Constants.PlatformJobLogType.WORKING.getName()); 
 | 
            log.setContent(Constants.PlatformJobLogType.WORKING.getInfo()); 
 | 
            log.setParam1(DateUtil.getDate(log.getCreateDate(),"yyyy-MM-dd HH:mm:ss")); 
 | 
        } 
 | 
        platformLogMapper.insert(log); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 处理车辆进入错误月台业务逻辑 
 | 
     * @param model (月台设备关联信息) 
 | 
     * @param status 
 | 
     */ 
 | 
    private void dealCarsInErrorPlatformBiz( PlatformJob model,EventPlatformCarsStatusInfoRequest status) { 
 | 
        //处理车辆进入错误月台业务逻辑 
 | 
        SavePlatformWarnEventDTO savePlatformWarnEventDTO = new SavePlatformWarnEventDTO(); 
 | 
        savePlatformWarnEventDTO.setPlatformJobId(model.getId()); 
 | 
        savePlatformWarnEventDTO.setPlatformId(model.getPlatformId()); 
 | 
        savePlatformWarnEventDTO.setCarCode(model.getCarCodeFront()); 
 | 
        savePlatformWarnEventDTO.setEventType(Constants.PlatformWarnEvent.STOP_ERROR.getKey()); 
 | 
        platformWarnEventService.savePlatformWarnEvent(savePlatformWarnEventDTO); 
 | 
  
 | 
        int speed = 13; 
 | 
        try { 
 | 
            speed = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.LED_CONTENT_SPEED).getCode()); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        } 
 | 
        List<PlatformDevice> deviceList = platformDeviceMapper.selectList(new QueryWrapper<PlatformDevice>().lambda() 
 | 
                .eq(PlatformDevice::getPlatformId,model.getPlatformId()) 
 | 
                .eq(PlatformDevice::getIsdeleted,Constants.ZERO)); 
 | 
        if(deviceList ==null || deviceList.size() == 0){ 
 | 
            return; 
 | 
        } 
 | 
        String content =Constants.PlatformLedContent.WRONG_IN.getInfo(); 
 | 
        content = content.replace("${param2}",model.getPlatformName()); 
 | 
        content = content.replace("${param}",status.getPlateNo()); 
 | 
        List<String> broadcastList = new ArrayList<>(); 
 | 
        List<String> ledList = new ArrayList<>(); 
 | 
        String bNames = ""; 
 | 
        List<PlatformBroadcastLog> logList = new ArrayList<>(); 
 | 
        for(PlatformDevice device : deviceList){ 
 | 
            if(StringUtils.isBlank(device.getHkId())){ 
 | 
                continue; 
 | 
            } 
 | 
            /*if(Constants.equalsInteger(device.getType(),Constants.ZERO)){ 
 | 
                //如果是LED 
 | 
                PlatformBroadcastLog log = dealLedContentBiz(model.getId(),device.getHkNo(),device.getName(),content,speed,1); 
 | 
                logList.add(log); 
 | 
                ledList.add(device.getHkId()); 
 | 
            }else  */if(Constants.equalsInteger(device.getType(),Constants.TWO)){ 
 | 
                //如果是广播点 
 | 
                bNames += device.getName()+";"; 
 | 
                broadcastList.add(device.getHkId()); 
 | 
            } 
 | 
        } 
 | 
        if(broadcastList.size()>0){ 
 | 
            PlatformBroadcastLog log = dealBroadcastBiz(model,broadcastList,bNames,Constants.PlatformBroadcastContent.WRONG_IN.getInfo().replace("${param}",status.getPlateNo())); 
 | 
            logList.add(log); 
 | 
        } 
 | 
        if(logList.size()>0){ 
 | 
            platformBroadcastLogMapper.insert(logList); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 广播通知 
 | 
     * @param model 
 | 
     * @param broadcastList 
 | 
     * @param bNames 
 | 
     * @param content1 
 | 
     * @return 
 | 
     */ 
 | 
    public static PlatformBroadcastLog dealBroadcastBiz(PlatformJob model, List<String> broadcastList,String bNames , String content1) { 
 | 
        PlatformBroadcastLog log = new PlatformBroadcastLog(); 
 | 
        content1 = content1.replace("${param}",model.getCarCodeFront()); 
 | 
        log.setObjId(model.getId().toString()); 
 | 
        log.setCreateDate(new Date()); 
 | 
        log.setBizType(Constants.ONE); 
 | 
        log.setHkDate(new Date()); 
 | 
        log.setObjType(Constants.ONE); 
 | 
        log.setInfo(content1); 
 | 
        log.setRemark(bNames); 
 | 
        log.setNum(Constants.ONE); 
 | 
        log.setIds(String.join(",",broadcastList)); 
 | 
        CustomBroadcastRequest request = new CustomBroadcastRequest(); 
 | 
        request.setAudioPointIndexCode(broadcastList); 
 | 
        request.setPlayDuration(15);//单位秒 
 | 
        request.setBroadCastMode("tts"); 
 | 
        request.setPriority(1); 
 | 
        request.setState(1);//播放/停止标识 1-播放,0-停止 
 | 
        request.setPlayTtsContent(content1); 
 | 
        BaseResponse response =  HKService.customBroadcast(request); 
 | 
        if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
            log.setHkInfo("请求失败:"+JSONObject.toJSONString(response)); 
 | 
            log.setHkStatus(Constants.THREE); 
 | 
        }else{ 
 | 
            log.setHkInfo("请求成功"); 
 | 
            log.setHkStatus(Constants.TWO); 
 | 
        } 
 | 
        log.setDeviceType(Constants.ZERO); 
 | 
        log.setName("发送广播播报内容"); 
 | 
        return  log; 
 | 
    } 
 | 
  
 | 
    public static PlatformBroadcastLog dealLedContentBiz(Integer platformId,String hkNo,String hkName, String content,int speed,int color) { 
 | 
        PlatformBroadcastLog log = new PlatformBroadcastLog(); 
 | 
        log.setCreateDate(new Date()); 
 | 
        log.setBizType(Constants.ONE); 
 | 
        log.setHkDate(new Date()); 
 | 
        log.setObjType(Constants.ONE); 
 | 
        log.setIds(hkNo); 
 | 
        log.setRemark(hkName); 
 | 
        log.setInfo(content); 
 | 
        log.setNum(Constants.ONE); 
 | 
        log.setObjId(platformId.toString()); 
 | 
  
 | 
        TransparentChannelBodyRequest body = new TransparentChannelBodyRequest(); 
 | 
        TransparentChannelHeadRequest head = new TransparentChannelHeadRequest(); 
 | 
        TransparentChannelBodyParamRequest request = new TransparentChannelBodyParamRequest(); 
 | 
        TransparentChannelBodyRegionRequest regions = new TransparentChannelBodyRegionRequest(); 
 | 
        head.setAbility("cld");//固定值 
 | 
        head.setTreatyType("haixuan_led_net");//固定值 
 | 
        head.setDeviceIndexCode(hkNo); 
 | 
        body.setMethod("ControlLedGereral");//固定值 
 | 
        request.setIndexCode(hkNo); 
 | 
        request.setOperationType(219);//固定值 
 | 
        regions.setActionType(32); 
 | 
        regions.setContent(content); 
 | 
        regions.setRegionNo(1); 
 | 
        regions.setRegionType(14); 
 | 
        regions.setFontColor(color>0?color:1); 
 | 
        regions.setCircleTimes(1);//循环次数 
 | 
        regions.setFontSize(32);// 
 | 
        regions.setStayTime(1);//单位?? 
 | 
        regions.setRegionLeftTopXPos(0); 
 | 
        regions.setRegionLeftTopYPos(0); 
 | 
        regions.setRegionRightBottomXPos(255); 
 | 
        regions.setRegionRightBottomYPos(31); 
 | 
        request.setRegions(new ArrayList<>()); 
 | 
        request.getRegions().add(regions); 
 | 
        regions.setSpeed(speed>0?speed:13); 
 | 
        body.setParams(request); 
 | 
        BaseResponse response =  HKService.transparentchannel(head,body); 
 | 
        if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ 
 | 
            log.setHkInfo("请求失败:"+JSONObject.toJSONString(response)); 
 | 
            log.setHkStatus(Constants.THREE); 
 | 
        }else{ 
 | 
            log.setHkInfo("请求成功"); 
 | 
            log.setHkStatus(Constants.TWO); 
 | 
        } 
 | 
        log.setDeviceType(Constants.ONE); 
 | 
        log.setName("设置LED屏显内容"); 
 | 
        return log; 
 | 
    } 
 | 
} 
 |