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.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.*;
|
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.getISO8601DateByStr(happentTime));
|
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.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.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())
|
.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)
|
.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.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);
|
}
|
}
|
}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;
|
}
|
|
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;
|
}
|
}
|