|
|
@@ -1,26 +1,46 @@
|
|
|
package com.zhongshu.card.server.core.service.visitor;
|
|
|
|
|
|
+import com.github.microservice.auth.client.model.UserFaceUploadModel;
|
|
|
+import com.github.microservice.auth.client.service.UserFaceService;
|
|
|
import com.github.microservice.components.data.base.util.PageEntityUtil;
|
|
|
import com.github.microservice.net.ResultContent;
|
|
|
import com.github.microservice.net.ResultMessage;
|
|
|
+import com.github.microservice.types.user.UserFromType;
|
|
|
import com.zhongshu.card.client.model.devices.DeviceInfoSimpleModel;
|
|
|
import com.zhongshu.card.client.model.visitor.VisitorMainModel;
|
|
|
import com.zhongshu.card.client.model.visitor.VisitorMainParam;
|
|
|
import com.zhongshu.card.client.model.visitor.VisitorMainSearch;
|
|
|
+import com.zhongshu.card.client.model.visitor.VisitorReViewParam;
|
|
|
+import com.zhongshu.card.client.type.visitor.VisitorState;
|
|
|
+import com.zhongshu.card.client.utils.DateUtils;
|
|
|
import com.zhongshu.card.server.core.dao.devices.DeviceInfoDao;
|
|
|
+import com.zhongshu.card.server.core.dao.org.OrganizationUserDao;
|
|
|
+import com.zhongshu.card.server.core.dao.org.UserCountDao;
|
|
|
import com.zhongshu.card.server.core.dao.scene.SceneComponentDao;
|
|
|
import com.zhongshu.card.server.core.dao.visitor.VisitorMainDao;
|
|
|
+import com.zhongshu.card.server.core.dao.visitor.VisitorSettingDao;
|
|
|
+import com.zhongshu.card.server.core.domain.devices.DeviceInfo;
|
|
|
+import com.zhongshu.card.server.core.domain.org.OrganizationUser;
|
|
|
+import com.zhongshu.card.server.core.domain.org.UserAccount;
|
|
|
import com.zhongshu.card.server.core.domain.scene.SceneComponent;
|
|
|
import com.zhongshu.card.server.core.domain.visitor.VisitorMain;
|
|
|
+import com.zhongshu.card.server.core.domain.visitor.VisitorSetting;
|
|
|
+import com.zhongshu.card.server.core.service.base.CommonService;
|
|
|
import com.zhongshu.card.server.core.service.base.SuperService;
|
|
|
import com.zhongshu.card.server.core.service.devices.DeviceInfoServiceImpl;
|
|
|
+import com.zhongshu.card.server.core.service.devices.permiss.Device2UseUsableService;
|
|
|
+import com.zhongshu.card.server.core.service.org.OrganizationUserServiceImpl;
|
|
|
+import com.zhongshu.card.server.core.service.orgManager.OrganizationManagerServiceImpl;
|
|
|
import com.zhongshu.card.server.core.service.user.UserAccountServiceImpl;
|
|
|
+import com.zhongshu.card.server.core.util.CommonUtil;
|
|
|
+import com.zhongshu.card.server.core.util.TempUserUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.data.domain.PageRequest;
|
|
|
import org.springframework.data.domain.Pageable;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@@ -39,9 +59,6 @@ public class VisitorMainService extends SuperService {
|
|
|
@Autowired
|
|
|
private VisitorMainDao visitorMainDao;
|
|
|
|
|
|
- @Autowired
|
|
|
- private DeviceInfoDao deviceInfoDao;
|
|
|
-
|
|
|
@Autowired
|
|
|
private DeviceInfoServiceImpl deviceInfoService;
|
|
|
|
|
|
@@ -51,20 +68,63 @@ public class VisitorMainService extends SuperService {
|
|
|
@Autowired
|
|
|
private SceneComponentDao sceneComponentDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private UserCountDao userCountDao;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrganizationUserServiceImpl organizationUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private UserFaceService userFaceService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CommonService commonService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private Device2UseUsableService device2UseUsableService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private VisitorSettingDao visitorSettingDao;
|
|
|
+
|
|
|
public ResultContent saveInfo(VisitorMainParam param) {
|
|
|
if (StringUtils.isEmpty(param.getSceneComponentId())) {
|
|
|
return ResultContent.buildFail("sceneComponentId 不能为空");
|
|
|
}
|
|
|
- if (StringUtils.isEmpty(param.getSceneComponentId())) {
|
|
|
- return ResultContent.buildFail("sceneComponentId 不能为空");
|
|
|
+ if (StringUtils.isEmpty(param.getVisitorUserId())) {
|
|
|
+ return ResultContent.buildFail("visitorUserId 不能为空");
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(param.getFaceUrl())) {
|
|
|
+ return ResultContent.buildFail("faceUrl 不能为空");
|
|
|
+ }
|
|
|
+ Long startTime = param.getStartTime();
|
|
|
+ if (CommonUtil.longIsEmpty(startTime)) {
|
|
|
+ return ResultContent.buildFail("到访时间不能为空");
|
|
|
}
|
|
|
+ Long minutes = param.getMinutes();
|
|
|
+ if (CommonUtil.longIsEmpty(minutes)) {
|
|
|
+ return ResultContent.buildFail("访问时长不能为空");
|
|
|
+ }
|
|
|
+ Long endTime = startTime + minutes * 60 * 1000l;
|
|
|
|
|
|
+ // 所属组件信息
|
|
|
String sceneComponentId = param.getSceneComponentId();
|
|
|
SceneComponent sceneComponent = sceneComponentDao.findTopById(sceneComponentId);
|
|
|
if (ObjectUtils.isEmpty(sceneComponent)) {
|
|
|
return ResultContent.buildFail("组件不存在");
|
|
|
}
|
|
|
|
|
|
+ VisitorSetting visitorSetting = visitorSettingDao.findTopBySceneComponentId(sceneComponentId);
|
|
|
+ if (ObjectUtils.isEmpty(visitorSetting)) {
|
|
|
+ return ResultContent.buildFail("访客组件参数未配置");
|
|
|
+ }
|
|
|
+
|
|
|
+ String projectOid = sceneComponent.getProjectOid();
|
|
|
+ UserAccount visitorUserAccount = userCountDao.findTopByUserId(param.getVisitorUserId());
|
|
|
+ if (ObjectUtils.isEmpty(visitorUserAccount)) {
|
|
|
+ return ResultContent.buildFail("被访人不存在");
|
|
|
+ }
|
|
|
+ OrganizationUser organizationUser = organizationUserService.getUserInProjectBindOrgUserInfo(projectOid, visitorUserAccount);
|
|
|
+
|
|
|
VisitorMain entity = null;
|
|
|
if (StringUtils.isNotEmpty(param.getId())) {
|
|
|
entity = visitorMainDao.findTopById(param.getId());
|
|
|
@@ -73,12 +133,45 @@ public class VisitorMainService extends SuperService {
|
|
|
}
|
|
|
initUpdateEntity(entity);
|
|
|
} else {
|
|
|
+ entity = new VisitorMain();
|
|
|
initEntityNoCheckOid(entity);
|
|
|
+ entity.setState(VisitorState.WaitReView);
|
|
|
}
|
|
|
+ BeanUtils.copyProperties(param, entity);
|
|
|
|
|
|
+ entity.setVisitorUserAccount(visitorUserAccount);
|
|
|
+ entity.setOrganizationUser(organizationUser);
|
|
|
|
|
|
- BeanUtils.copyProperties(param, param);
|
|
|
+ // 申请用户
|
|
|
+ String applyUserId = getCurrentUserId();
|
|
|
+ UserAccount applyUserAccount = null;
|
|
|
+ if (StringUtils.isNotEmpty(applyUserId)) {
|
|
|
+ applyUserAccount = userCountDao.findTopByUserId(applyUserId);
|
|
|
+ OrganizationUser organizationUser1 = organizationUserService.getUserInProjectBindOrgUserInfo(projectOid, applyUserAccount);
|
|
|
+ entity.setApplyOrganizationUser(organizationUser1);
|
|
|
+ }
|
|
|
+ entity.setApplyUserId(applyUserId);
|
|
|
+ entity.setApplyUserAccount(applyUserAccount);
|
|
|
+ entity.setEndTime(endTime);
|
|
|
+ entity.setProjectOid(projectOid);
|
|
|
+
|
|
|
+ Long preMinutes = visitorSetting.getMinutes();
|
|
|
+ if (preMinutes == null) {
|
|
|
+ preMinutes = 0L;
|
|
|
+ }
|
|
|
+ Long perStartTime = startTime - preMinutes * 60 * 60 * 1000l;
|
|
|
+ Long perEndTime = DateUtils.getDayEndTime(endTime);
|
|
|
+ entity.setPerStartTime(perStartTime);
|
|
|
+ entity.setPerEndTime(perEndTime);
|
|
|
|
|
|
+ String tempUserId = applyUserId;
|
|
|
+ UserFromType userFromType = UserFromType.SystemUser;
|
|
|
+ if (StringUtils.isEmpty(tempUserId)) {
|
|
|
+ tempUserId = TempUserUtil.getVisitorTempUserId();
|
|
|
+ userFromType = UserFromType.VisitorUser;
|
|
|
+ }
|
|
|
+ entity.setUserFromType(userFromType);
|
|
|
+ entity.setTempUserId(tempUserId);
|
|
|
visitorMainDao.save(entity);
|
|
|
return ResultContent.buildSuccess();
|
|
|
}
|
|
|
@@ -88,6 +181,7 @@ public class VisitorMainService extends SuperService {
|
|
|
if (entity == null) {
|
|
|
return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
|
|
|
}
|
|
|
+ checkReViewInfo(entity);
|
|
|
return ResultContent.buildSuccess(toModel(entity));
|
|
|
}
|
|
|
|
|
|
@@ -111,6 +205,176 @@ public class VisitorMainService extends SuperService {
|
|
|
return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 拒绝
|
|
|
+ *
|
|
|
+ * @param param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResultContent refuseVisitApply(VisitorReViewParam param) {
|
|
|
+ VisitorMain visitorMain = visitorMainDao.findTopById(param.getId());
|
|
|
+ if (visitorMain == null) {
|
|
|
+ return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
|
|
|
+ }
|
|
|
+ ResultContent resultContent = checkReViewInfo(visitorMain);
|
|
|
+ if (resultContent.isFailed()) {
|
|
|
+ return resultContent;
|
|
|
+ }
|
|
|
+ // 已拒绝状态
|
|
|
+ visitorMain.setState(VisitorState.Refuse);
|
|
|
+ visitorMain.setReviewRemark(param.getReviewRemark());
|
|
|
+ visitorMain.setReViewSuccess(Boolean.FALSE);
|
|
|
+ visitorMainDao.save(visitorMain);
|
|
|
+ return ResultContent.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 审核通过
|
|
|
+ *
|
|
|
+ * @param param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResultContent passVisitApply(VisitorReViewParam param) {
|
|
|
+ VisitorMain visitorMain = visitorMainDao.findTopById(param.getId());
|
|
|
+ if (visitorMain == null) {
|
|
|
+ return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
|
|
|
+ }
|
|
|
+ ResultContent resultContent = checkReViewInfo(visitorMain);
|
|
|
+ if (resultContent.isFailed()) {
|
|
|
+ return resultContent;
|
|
|
+ }
|
|
|
+ // 通过状态
|
|
|
+ visitorMain.setState(VisitorState.WaitVisit);
|
|
|
+ visitorMain.setReviewRemark(param.getReviewRemark());
|
|
|
+ visitorMain.setReViewSuccess(Boolean.TRUE);
|
|
|
+ if (ObjectUtils.isNotEmpty(param.getDeviceIds())) {
|
|
|
+ List<DeviceInfo> deviceInfos = deviceInfoService.getDevicesByDeviceIds(param.getDeviceIds());
|
|
|
+ visitorMain.setDeviceInfos(deviceInfos);
|
|
|
+ }
|
|
|
+ visitorMain.setDeviceIds(param.getDeviceIds());
|
|
|
+
|
|
|
+ String faceBase64 = commonService.getUrlFileBase64(visitorMain.getFaceUrl());
|
|
|
+ String updateFaceFileId = "";
|
|
|
+ // 维护管理权限中心用户的头像信息
|
|
|
+ UserFaceUploadModel userFaceUploadModel = new UserFaceUploadModel();
|
|
|
+ userFaceUploadModel.setUserId(visitorMain.getTempUserId());
|
|
|
+ userFaceUploadModel.setFile(faceBase64);
|
|
|
+ userFaceUploadModel.setUpdateFaceFileId(updateFaceFileId);
|
|
|
+ com.github.microservice.auth.client.content.ResultContent<String> content = userFaceService.upload(userFaceUploadModel);
|
|
|
+ if (content.isFailed()) {
|
|
|
+ return ResultContent.buildFail(content.getMsg());
|
|
|
+ }
|
|
|
+ updateFaceFileId = content.getContent();
|
|
|
+ visitorMain.setFaceFileId(updateFaceFileId);
|
|
|
+
|
|
|
+ // 把用户头像对应的设备权限写入 临时权限表
|
|
|
+ device2UseUsableService.addByVisitorData(visitorMain);
|
|
|
+
|
|
|
+ visitorMainDao.save(visitorMain);
|
|
|
+ return ResultContent.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 标记访客权限使用
|
|
|
+ *
|
|
|
+ * @param fromDataId
|
|
|
+ */
|
|
|
+ public VisitorMain markVisitor(String fromDataId) {
|
|
|
+ if (StringUtils.isNotEmpty(fromDataId)) {
|
|
|
+ VisitorMain visitorMain = visitorMainDao.findTopById(fromDataId);
|
|
|
+ if (ObjectUtils.isEmpty(visitorMain)) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if (visitorMain.getState() == VisitorState.WaitVisit) {
|
|
|
+ visitorMain.setState(VisitorState.Visit);
|
|
|
+ visitorMain.setFirstVisitTime(System.currentTimeMillis());
|
|
|
+ visitorMainDao.save(visitorMain);
|
|
|
+ return visitorMain;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查数据 审核是否是否已过期
|
|
|
+ *
|
|
|
+ * @param visitorMain
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResultContent checkReViewInfo(VisitorMain visitorMain) {
|
|
|
+ if (ObjectUtils.isNotEmpty(visitorMain)) {
|
|
|
+ if (visitorMain.getState() == VisitorState.WaitReView && visitorMain.getEndTime() <= System.currentTimeMillis()) {
|
|
|
+ // 待审核 结束时间已过期
|
|
|
+ visitorMain.setState(VisitorState.Cancel);
|
|
|
+ visitorMain.setReviewRemark("申请数据已失效");
|
|
|
+ visitorMainDao.save(visitorMain);
|
|
|
+ return ResultContent.buildFail("数据已失效");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResultContent.buildSuccess();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查数据是否过期
|
|
|
+ *
|
|
|
+ * @param visitorMain
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public ResultContent checkExpireInfo(VisitorMain visitorMain) {
|
|
|
+ if (ObjectUtils.isNotEmpty(visitorMain)) {
|
|
|
+ if (visitorMain.getReViewSuccess() != null && visitorMain.getReViewSuccess() && visitorMain.getEndTime() <= System.currentTimeMillis()) {
|
|
|
+ com.github.microservice.auth.client.content.ResultContent resultContent = userFaceService.delete(visitorMain.getTempUserId(), visitorMain.getFaceFileId());
|
|
|
+ if (resultContent.isSuccess()) {
|
|
|
+ visitorMain.setIsCancel(Boolean.TRUE);
|
|
|
+ visitorMain.setIsClearFace(Boolean.TRUE);
|
|
|
+ visitorMainDao.save(visitorMain);
|
|
|
+ return ResultContent.buildSuccess();
|
|
|
+ } else {
|
|
|
+ return ResultContent.buildFail(resultContent.getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ResultContent.buildFail("数据为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 每天检查数据,,如果访问时间已过期,则清除人脸数据
|
|
|
+ */
|
|
|
+ public void loopCheckVisitorData() {
|
|
|
+ this.checkAllWaitReView();
|
|
|
+ this.checkAllOverTimeData();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查所有的 审核通过的是否过期(好清理人脸信息)
|
|
|
+ */
|
|
|
+ private void checkAllOverTimeData() {
|
|
|
+ VisitorMainSearch param = new VisitorMainSearch();
|
|
|
+ param.setReViewSuccess(Boolean.TRUE);
|
|
|
+ param.setIsCancel(Boolean.FALSE);
|
|
|
+
|
|
|
+ Pageable pageable = PageRequest.of(0, 100);
|
|
|
+ Page<VisitorMain> page = visitorMainDao.page(pageable, param);
|
|
|
+ List<VisitorMain> list = page.getContent();
|
|
|
+ if (ObjectUtils.isNotEmpty(list)) {
|
|
|
+ list.forEach(visitorMain -> {
|
|
|
+ checkExpireInfo(visitorMain);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检查所有的待审核得数据是否过期
|
|
|
+ */
|
|
|
+ private void checkAllWaitReView() {
|
|
|
+ List<VisitorMain> list = visitorMainDao.findByState(VisitorState.WaitReView);
|
|
|
+ if (ObjectUtils.isNotEmpty(list)) {
|
|
|
+ list.stream().forEach(visitorMain -> {
|
|
|
+ checkReViewInfo(visitorMain);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public VisitorMainModel toModel(VisitorMain entity) {
|
|
|
VisitorMainModel model = null;
|
|
|
if (ObjectUtils.isNotEmpty(entity)) {
|