From c30cfcc106111b8087691557ee8143f6be9c4e5d Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 07 十二月 2023 15:21:35 +0800
Subject: [PATCH] 海康接口对接开发

---
 server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java |  186 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 186 insertions(+), 0 deletions(-)

diff --git a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
index 8a2db93..041f876 100644
--- a/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
+++ b/server/dmvisit_service/src/main/java/com/doumee/service/business/impl/VisitsServiceImpl.java
@@ -1,19 +1,35 @@
 package com.doumee.service.business.impl;
 
+import cn.hutool.core.util.IdcardUtil;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.DESUtil;
 import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.DeviceRoleMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.ProblemLogMapper;
 import com.doumee.dao.business.VisitsMapper;
+import com.doumee.dao.business.model.DeviceRole;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.ProblemLog;
 import com.doumee.dao.business.model.Visits;
 import com.doumee.service.business.VisitsService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.DigestUtils;
 
+import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -26,13 +42,183 @@
 
     @Autowired
     private VisitsMapper visitsMapper;
+    @Autowired
+    private DeviceRoleMapper deviceRoleMapper;
+    @Autowired
+    private ProblemLogMapper problemLogMapper ;
+    @Autowired
+    private MemberMapper memberMapper ;
 
+    @Autowired
+    private SystemDictDataBiz systemDictDataBiz;
     @Override
     public Integer create(Visits visits) {
         visitsMapper.insert(visits);
         return visits.getId();
     }
 
+    /**
+     * 鏅�氳瀹㈢敵璇�
+     * @param visits
+     * @return
+     */
+    @Override
+    public Integer createFk(Visits visits) {
+        if(visits.getStarttime() == null
+                || visits.getEndtime() == null
+                ||  StringUtils.isBlank(visits.getReason())
+                ||  StringUtils.isBlank( visits.getName())
+                ||  StringUtils.isBlank( visits.getPhone())
+                ||  visits.getIdcardType() == null
+                ||  StringUtils.isBlank( visits.getFaceImg() )
+                ||  StringUtils.isBlank( visits.getIdcardNo() )
+                || visits.getReceptMemberId() == null){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝淇℃伅濉啓涓嶆纭紒");
+        }
+        //妫�鏌ユ槸鍚﹀繀椤荤瓟棰橈紝骞朵笖绗﹀悎绛旈瑕佹眰
+        ProblemLog problemLog = isValidProblemLog(visits);
+        //鑾峰彇鐢宠鐨勬捣搴疯闂棬绂佺粍淇℃伅
+        String[] hkIds = getHkDeviceRoles(visits);
+        //妫�楠屾嫓璁夸汉鏄惁鍚堟硶
+        isValideVisitedUser(visits.getReceptMemberId());
+        //妫�鏌ラ殢璁夸汉鍛樻槸鍚﹀悎娉�,鐢熸垚闅忚浜哄憳鏂板闆嗗悎
+        List<Member> withUsers = isValideWithUsers(visits.getWithUserList());
+
+        if(Constants.equalsInteger(Constants.ZERO, visits.getIdcardType()) &&!IdcardUtil.isValidCard(visits.getIdcardNo())){
+            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝韬唤璇佸彿鐮佹湁璇紝璇锋牳瀹炲悗閲嶈瘯锛�");
+        }
+        Date date = new Date();
+
+        visits.setBirthday(Constants.getBirthdyByCardNo(visits.getIdcardNo()));
+        //韬唤璇佸彿瀛樺偍瀵嗘枃
+        visits.setIdcardNo(DESUtil.encrypt(Constants.EDS_PWD, visits.getIdcardNo()));//韬唤璇佸彿鍔犲瘑
+        visits.setIdcardDecode(Constants.getTuominStr(visits.getIdcardNo()));//鑴辨晱鎵嬫満鍙�
+        visits.setCreateDate(date);
+
+        //璁垮淇℃伅(浣跨敤韬唤璇佸彿鏌ヨ鏄惁宸插瓨鍦ㄦ敼鏅�氳瀹紝娌℃湁鍒欐柊澧烇紝瀛樺湪鍒欐洿鏂皁penid绛変俊鎭�)
+        Member member = getMemberByIdcardno(visits);
+        visitsMapper.insert(visits);
+
+
+        updateProblemLog(visits,problemLog,member);
+
+        return visits.getId();
+    }
+
+    private Member getMemberByIdcardno(Visits idcardNo) {
+        Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+//                .eq(Member::getType,Constants.MEMBER_TYPE)
+                .eq(Member::getIdcardNo,idcardNo.getIdcardNo())
+        );
+        return  null;
+    }
+
+    private List<Member> isValideWithUsers(List<Visits> withUserList) {
+        if(withUserList!= null && withUserList .size()>0){
+            for(Visits model:withUserList){
+
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * 濡傛灉鏈夌瓟棰樿褰曪紝鏇存柊绛旈璁板綍鍏宠仈鏁版嵁
+     * @param visits
+     * @param problemLog
+     * @param member
+     */
+
+    private void updateProblemLog(Visits visits, ProblemLog problemLog,Member member) {
+        if(problemLog!=null){
+            problemLog.setEditDate(visits.getCreateDate());
+            problemLog.setName(visits.getName());
+            problemLog.setUserId(member.getId());
+            problemLog.setPhone(member.getPhone());
+            problemLog.setLogId(visits.getId());
+            problemLogMapper.updateById(problemLog);
+        }
+    }
+
+    /**
+     *   妫�鏌ヨ浜烘槸鍚﹀悎娉�
+     * @param receptMemberId
+     */
+    private Member isValideVisitedUser(Integer receptMemberId) {
+        Member member = memberMapper.selectById(receptMemberId);
+        if(member == null || Constants.equalsInteger(Constants.ZERO,member.getIsdeleted())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ユ嫓璁夸汉鏆傛椂涓嶈兘鎺ュ彈鎮ㄧ殑鎷滆鐢宠锛�");
+        }
+        if(!Constants.equalsInteger(member.getStatus(), Constants.ZERO)){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ユ嫓璁夸汉鏆傛椂涓嶈兘鎺ュ彈鎮ㄧ殑鎷滆鐢宠.");
+        }
+        if(!Constants.equalsInteger(Constants.ONE, member.getCanVisit())){
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇ユ嫓璁夸汉鏆傛椂涓嶈兘鎺ュ彈鎮ㄧ殑鎷滆鐢宠~");
+        }
+        return  member;
+    }
+
+    private ProblemLog isValidProblemLog(Visits visits) {
+        String required = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.PROBLEM_VISIT_REQUIRED).getCode();
+        if(StringUtils.equals(required,Constants.ONE+"")){
+            //濡傛灉蹇呴』绛旈锛屾煡鎵剧瓟棰樿褰�
+            if(visits.getUserAnswerId() == null){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇峰厛鎸夎姹傝繘琛屽畨鍏ㄧ煡璇嗙瓟棰橈紒");
+            }
+            ProblemLog log = problemLogMapper.selectById(visits.getUserAnswerId());
+            if(log == null){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇峰厛鎸夎姹傝繘琛屽畨鍏ㄧ煡璇嗙瓟棰�.");
+            }
+            if(log.getLogId() !=null){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇峰厛鎸夎姹傝繘琛屽畨鍏ㄧ煡璇嗙瓟棰榽");
+            }
+            return  log;
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇鐢宠鐨勬捣搴疯闂棬绂佺粍淇℃伅
+     * @param visits
+     * @return
+     */
+    private String[] getHkDeviceRoles(Visits visits) {
+        String mustSelectDoors = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.SELECT_DOORS_VISIT_REQUIRED).getCode();
+        List<DeviceRole> roles = null;
+        if(StringUtils.equals(mustSelectDoors,Constants.ZERO+"")){
+            //濡傛灉蹇呴』閫夋嫨闂ㄧ锛屼絾鏈�夋嫨
+            if(StringUtils.isBlank(visits.getDoors())){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇烽�夋嫨璁块棶闂ㄧ锛�");
+            }
+            //鏍¢獙闂ㄧ缁勪俊鎭槸鍚︽纭�
+            String[] dIds = visits.getDoors().split(",");
+            roles = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+                    .eq(DeviceRole::getIsdeleted,Constants.ZERO)
+                    .eq(DeviceRole::getType,Constants.DeviceRoleType.fk)
+                    .in(DeviceRole::getId, Arrays.asList(dIds)));
+            if(roles == null || roles.size()==0 || roles.size() != dIds.length){
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝璇烽�夋嫨鏈夋晥璁块棶闂ㄧ锛�");
+            }
+        }else{
+            //濡傛灉璁剧疆涓嶉�夋嫨闂ㄧ锛屽垯鎻愪緵榛樿闂ㄧ缁勪俊鎭�
+            String[] dIds = visits.getDoors().split(",");
+            roles = deviceRoleMapper.selectList(new QueryWrapper<DeviceRole>().lambda()
+                    .eq(DeviceRole::getIsdeleted,Constants.ZERO)
+                    .eq(DeviceRole::getIsDefault,Constants.ZERO)
+                    .eq(DeviceRole::getType,Constants.DeviceRoleType.fk));
+            if(roles.size() ==0){
+
+                throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝鏆備笉瀛樺湪鍙闂殑璁垮闂ㄧ锛屾棤娉曡繘琛岀敵璇锋搷浣滐紒");
+            }
+        }
+        String[] ids =new String[roles.size()];
+        for (int i = 0; i < roles.size(); i++) {
+            ids[i] = roles.get(i).getHkId();
+        }
+        return  ids;
+    }
+
     @Override
     public void deleteById(Integer id) {
         visitsMapper.deleteById(id);

--
Gitblit v1.9.3