From 8d590f68b15baac8eecd2625b548a3fefece4f71 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 14 十二月 2023 11:54:06 +0800
Subject: [PATCH] 海康接口对接开发

---
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java |  330 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 323 insertions(+), 7 deletions(-)

diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
index aecac74..2ca62e8 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/hksync/HkSyncPushServiceImpl.java
@@ -1,20 +1,40 @@
 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.config.SpringContextUtil;
 import com.doumee.core.haikang.model.HKConstants;
+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.EventParkRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitDataRequest;
+import com.doumee.core.haikang.model.param.request.event.visit.EventVisitInfoRequest;
 import com.doumee.core.haikang.model.param.request.event.visit.EventVisitRequest;
-import com.doumee.dao.business.model.InterfaceLog;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DESUtil;
+import com.doumee.core.utils.DateUtil;
+import com.doumee.dao.business.*;
+import com.doumee.dao.business.join.VisitsJoinMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.DeviceEventService;
 import com.doumee.service.business.InterfaceLogService;
+import com.doumee.service.business.MemberService;
+import com.github.yulichang.interfaces.MPJBaseJoin;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.hikvision.artemis.sdk.config.ArtemisConfig;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.checkerframework.checker.units.qual.C;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 
 /**
  * 璁垮鏉冮檺缁勪俊鎭〃Service瀹炵幇
@@ -26,7 +46,19 @@
 public class HkSyncPushServiceImpl extends HkSyncBaseServiceImpl {
 
     @Autowired
-    private InterfaceLogService interfaceLogService;
+    private InterfaceLogMapper interfaceLogMapper;
+    @Autowired
+    private DeviceEventMapper deviceEventMapper;
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
+    private CarEventMapper carEventMapper;
+    @Autowired
+    private VisitEventMapper visitEventMapper;
+    @Autowired
+    private VisitsJoinMapper visitsMapper;
+    @Autowired
+    private RetentionMapper retentionMapper;
     /**
      * 娴峰悍闂ㄧ浜嬩欢鎺ㄩ��
      * @param param
@@ -38,10 +70,40 @@
         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<>();
+            for(EventAcsInfoRequest request : events){
+                EventDeviceDataRequest model = request.getData();
+                if(model ==null){
+                    continue;
+                }
+                //鏍规嵁鎺ㄩ�佷汉鍛樼紪鐮侊紝澶勭悊鍦ㄥ満銆佺鍦轰汉鍛樻暟鎹褰�
+                dealMemberDataByRequest(request,delRetentionLis,retentionList);
+                //灏佽闂ㄧ浜嬩欢淇℃伅琛ㄥ璞�
+                list.add(getDeviceEventModelByRequest(request));
+            }
+            if(list.size()>0){
+                //鎻掑叆闂ㄧ璁板綍
+                deviceEventMapper.insertBatchSomeColumn(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.insertBatchSomeColumn(retentionList);
+            }
             log.error("銆愭捣搴烽棬绂佷簨浠舵帹閫併��========鎴愬姛=======");
         }catch (Exception e) {
-
             log.error("銆愭捣搴烽棬绂佷簨浠舵帹閫併��========澶辫触=======锛歕n" + e.getMessage());
         }finally {
             saveInterfaceLog(param,"/business/hksync/push/acs",result);
@@ -49,6 +111,136 @@
         return  null;
 
     }
+
+    /**
+     * 鏍规嵁鎺ㄩ�佷汉鍛樼紪鐮侊紝澶勭悊鍦ㄥ満銆佺鍦轰汉鍛樻暟鎹褰�
+     * @param request
+     * @param delRetentionLis
+     * @param retentionList
+     */
+    private void dealMemberDataByRequest(EventAcsInfoRequest request, List<Integer> delRetentionLis, List<Retention> retentionList) {
+        //娴峰悍浜哄憳缂栫爜
+        String userNo = request.getData().getExtEventPersonNo();
+        if(StringUtils.isNotBlank(userNo)){
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda().eq(Member::getHkId,userNo).last("limit 1"));
+            if(member !=null){
+                //濡傛灉浜哄憳淇℃伅瀛樺湪锛屽垯鍒犻櫎涔嬪墠鐨勬墍鏈夎繘鍦烘暟鎹紙鏃犺姝ゆ鎺ㄩ�佹槸杩涘巶杩樻槸鍑哄満鎺ㄩ�佷簨浠讹級
+                delRetentionLis.add(member.getId());
+                if(Constants.formatIntegerNum(request.getData().getExtEventInOut()) == Constants.ONE){
+                    //濡傛灉鏄繘闂紝褰曞叆浜哄憳鐨勫湪鍦烘暟鎹褰�
+                    retentionList.add(getRetentionModelByRequest(member,request));
+                }
+            }
+        }
+    }
+
+    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.getData().getExtEventType()!=null?request.getData().getExtEventType()+"":null);
+        event.setAccessChannel(request.getData().getExtAccessChannel());
+        event.setUserType(request.getData().getUserType());
+        event.setSvrIndexCode(request.getData().getSvrIndexCode());
+        event.setStatus(request.getStatus());
+        event.setSrcType(request.getSrcType());
+        event.setSrcName(request.getSrcName());
+        event.setSrcIndex(request.getSrcIndex());
+        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));//韬唤璇佸彿鍔犲瘑
+                //鑴辨晱鎵嬫満鍙锋樉绀簄
+                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.getData().getExtReceiveTime()));
+        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.getData().getExtReceiveTime()));
+        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
@@ -60,7 +252,40 @@
         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.insertBatchSomeColumn(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.insertBatchSomeColumn(retentionList);
+            }
             log.error("銆愭捣搴疯瀹簨浠舵帹閫併��========鎴愬姛=======");
         }catch (Exception e){
 
@@ -69,6 +294,98 @@
         saveInterfaceLog(param,"/business/hksync/push/visit",result);
         return  null;
 
+    }
+
+    /**
+     *  鏍规嵁璁垮鎺ㄩ�佽瀹㈣褰曠紪鐮侊紝澶勭悊璁垮璁板綍銆佸湪鍦轰汉鍛樼瓑淇℃伅
+     */
+    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.eq(Visits::getHkId,model.getVisitorId() );
+        queryWrapper.last("limit 1");
+        Visits visits = visitsMapper.selectJoinOne(Visits.class,queryWrapper);
+        if(visits !=null){
+            //濡傛灉浜哄憳淇℃伅瀛樺湪锛屽垯鍒犻櫎涔嬪墠鐨勬墍鏈夎繘鍦烘暟鎹紙鏃犺姝ゆ鎺ㄩ�佹槸杩涘巶杩樻槸鍑哄満鎺ㄩ�佷簨浠讹級
+            delRetentionLis.add(visits.getMemberId());
+            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.setOutDate(DateUtil.getISO8601DateByStr(model.getStartTime()));
+            }else {
+                //濡傛灉鏄瀹㈢绂讳簨浠�
+                updateVistis.setOutDate(DateUtil.getISO8601DateByStr(model.getEndTime()));
+                updateVistis.setOutType(Constants.ZERO);
+                updateVistis.setOutInfo("璁垮姝e父绛剧");
+            }
+            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.setStatus(request.getStatus());
+        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.setPhotoUrl(getHkImgUrl(request.getData().getPhotoUrl()));
+        event.setPersonName(request.getData().getPersonName());
+        event.setIdType(request.getData().getIdType());
+        String idnum =request.getData().getIdNo();
+        if(StringUtils.isNotBlank(idnum)){
+            //韬唤璇佸彿瀛樺偍瀵嗘枃
+            event.setIdNo(DESUtil.encrypt(Constants.EDS_PWD,idnum));//韬唤璇佸彿鍔犲瘑
+            //鑴辨晱鎵嬫満鍙锋樉绀簄
+            event.setIdcardDecode(Constants.getTuominStr(idnum));
+        }
+        event.setEventType(request.getEventType());
+        event.setEventId(request.getEventId());
+        event.setHappenTime(event.getHappenTime());
+
+        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.getMemberClasses());
+        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.getEventType()+"");
+        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;
     }
 
     /**
@@ -92,7 +409,6 @@
         return  null;
     }
 
-
     private void saveInterfaceLog(Object param, String path,String result) {
         InterfaceLog hkMonitoryLogDO=new InterfaceLog();
         hkMonitoryLogDO.setType(1);
@@ -104,7 +420,7 @@
         hkMonitoryLogDO.setRepose(result);
         hkMonitoryLogDO.setName(path);
         hkMonitoryLogDO.setUrl(path);
-        interfaceLogService.create(hkMonitoryLogDO);
+        interfaceLogMapper.insert(hkMonitoryLogDO);
     }
 
 

--
Gitblit v1.9.3