k94314517
2024-09-11 b2cb07157105f1ad8ba43ce174c8069c7ac8cfd1
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -5,12 +5,17 @@
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.doumee.config.DataSyncConfig;
import com.doumee.config.SpringContextUtil;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.haikang.model.HKConstants;
import com.doumee.core.haikang.model.param.request.CustomBroadcastRequest;
import com.doumee.core.haikang.model.param.request.TransparentChannelBodyRequest;
import com.doumee.core.haikang.model.param.request.TransparentChannelHeadRequest;
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;
@@ -28,6 +33,8 @@
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.yaml.snakeyaml.scanner.Constant;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
@@ -69,7 +76,13 @@
    private PlatformMapper platformMapper;
    @Autowired
    private PlatformDeviceMapper platformDeviceMapper;
    @Autowired
    private PlatformJobMapper platformJobMapper;
    @Autowired
    private PlatformWmsDetailMapper platformWmsDetailMapper;
    @Autowired
    private PlatformEventMapper platformEventMapper;
    @Autowired
    private PlatformLogMapper platformLogMapper;
    /**
     * 海康门禁事件推送
@@ -844,6 +857,7 @@
            }
            //门禁事件集合
            List<EventPlatformCarsInfoRequest> events  = param.getParams().getEvents();
            List<PlatformEvent> eventList = new ArrayList<>();
            for(EventPlatformCarsInfoRequest request : events){
                if( request.getData() ==null ||  request.getData().size()==0){
                    continue;
@@ -863,6 +877,7 @@
                    }
                    //各车道车辆状态
                    for(EventPlatformCarsStatusInfoRequest status : data.getHPVehicleStatus()){
                        eventList.add(initPlatformEventModel(request,data,status));//封装事件(已月台通道为维度)
                        if(StringUtils.isBlank(status.getPlateNo())){
                            continue;//如果车辆信息为空,不处理直接跳过
                        }
@@ -875,29 +890,44 @@
                        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())){
                            //如果是车辆离开,不做相关自动完成作业业务处理
                         /*   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());
                            update.setDoneDate(update.getEditDate());*/
                        }else  if(StringUtils.equals(status.getMotionStatus(),"enter")){
                            //如果是车辆进入
                            if(job ==null || !Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.CALLED.getKey())){
                                //说明车辆进错月台 或者还未叫号状态,发起警告
                                dealCarsInErrorPlatformBiz(job,status);
                            }
                            if(job.getStartDate() == null){
                                update.setStartDate(update.getEditDate());
                            }
                            update.setStatus(Constants.PlatformJobStatus.WORKING.getKey());//开始作业
                        }else{
                            continue;//其他状态不处理,跳过
                        }
                        platformJobMapper.updateById(update);//更新作业状态
                        dealPlatformJobLogBiz(update,status);//记录作业日志
                        //暂时不做相关自动完成作业业务处理
//                        dealPlatformJobLogBiz(update,status);//记录作业日志
                    }
                    break;//只处理第一个数据状态
                }
            }
            if(eventList.size()>0){
                //生成事件
                platformEventMapper.insert(eventList);
            }
            result = "成功";
            log.error("【海康月台车辆状态事件推送】========成功=======");
@@ -910,12 +940,53 @@
        return  null;
    }
    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());
@@ -924,21 +995,27 @@
        log.setObjId(job.getId()+"");
        if(Constants.equalsInteger(job.getStatus(),Constants.PlatformJobStatus.DONE.getKey())){
            //如果是作业完成
//            log.setObjType(Constants.LOg);
            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.PlatformJobStatus.WORKING.getKey())
                    .eq(PlatformLog::getJobId,job.getJobId())
                    .eq(PlatformLog::getObjType,Constants.PlatformJobLogType.WORKING.getKey())
                    .eq(PlatformLog::getJobId,job.getId())
                    .orderByDesc(PlatformLog::getCreateDate)
                    .last(" limit 1");
                    .last(" limit 1"));
            String v = Long.toString(job.getDoneDate().getTime() - lastBeginPlatform.getCreateDate().getTime() / 1000) ;
            lastBeginPlatform.setParam3(v);
            lastBeginPlatform.setParam2(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
            platformLogMapper.updateById(lastBeginPlatform);//更新上一次作业的完成时间和作业时长
        }else{
            //如果是作业中
            log.setParam1(DateUtil.getDate(lastBeginPlatform.getCreateDate(),"yyyy-MM-dd HH:mm:ss"));
//            log.setObjType(Constants.Jobl);
            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);
    }
@@ -949,5 +1026,53 @@
     */
    private void dealCarsInErrorPlatformBiz( PlatformJob model,EventPlatformCarsStatusInfoRequest status) {
        //TODO-----------------处理车辆进入错误月台业务逻辑
        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 ="车辆"+model.getCarCodeFront()+"停错月台了";
        List<String> broadcastList = new ArrayList<>();
        for(PlatformDevice device : deviceList){
            if(StringUtils.isNotBlank(device.getHkId())){
                continue;
            }
            if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
                //如果是LED
                TransparentChannelBodyRequest request = new TransparentChannelBodyRequest();
                TransparentChannelHeadRequest head = new TransparentChannelHeadRequest();
                head.setAbility("cld");//固定值
                head.setTreatyType("haixuan_led_net");//固定值
                head.setDeviceIndexCode(device.getHkId());
                request.setMethod("ControlLedGereral");//固定值
                request.setIndexCode(device.getHkId());
                request.setActionType(0);
                request.setContent(content);
                request.setOperationType(219);//固定值
                request.setRegionNo(1);
                request.setRegionType(14);
                request.setFontColor(1);
                request.setCircleTimes(1);//循环次数
                request.setFontSize(16);//
                request.setStayTime(1);//单位??
                HKService.transparentchannel(head,request);
            }else  if(Constants.equalsInteger(device.getType(),Constants.ZERO)){
                //如果是广播点
                broadcastList.add(device.getHkId());
            }
        }
        if(broadcastList.size()>0){
            CustomBroadcastRequest request = new CustomBroadcastRequest();
            request.setAudioPointIndexCode(broadcastList);
            request.setPlayDuration(60);//单位秒
            request.setBroadCastMode("tts");
            request.setPriority(15);
            request.setState(1);//播放/停止标识 1-播放,0-停止
            request.setPlayTtsContent(content);
            HKService.customBroadcast(request);
        }
    }
}