123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425 |
- package com.yx.face.service.impl;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.github.pagehelper.PageHelper;
- import com.github.pagehelper.PageInfo;
- import com.google.common.collect.Lists;
- import com.google.common.collect.Maps;
- import com.yx.face.boot.config.TaskPoolConfig;
- import com.yx.face.boot.restful.RestDTO;
- import com.yx.face.boot.restful.ServiceException;
- import com.yx.face.boot.uitls.*;
- import com.yx.face.dao.*;
- import com.yx.face.model.dto.WxInfoDTO;
- import com.yx.face.model.entity.*;
- import com.yx.face.model.query.QueryUser;
- import com.yx.face.model.vo.UserInfoVO;
- import com.yx.face.netty_client.NettyClient;
- import com.yx.face.service.UserInfoService;
- import com.yx.face.service.feign.TBDeviceFaceService;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.util.CollectionUtils;
- import org.springframework.util.StringUtils;
- import javax.annotation.Resource;
- import java.util.*;
- /**
- * @description: 用户基础信息表(UserInfo)表服务实现类 <br>
- * @author: PWB <br>
- * @since: 1.0 <br>
- * @date: 2021-06-04 14:25:50 <br>
- */
- @Slf4j
- @Service
- public class UserInfoServiceImpl implements UserInfoService {
- @Resource
- private UserInfoDao userInfoDao;
- @Resource
- private UserFaceRecordsDao userFaceRecordsDao;
- @Resource
- private FacePassDao facePassDao;
- @Resource
- private FaceDeviceDao faceDeviceDao;
- @Resource
- private FaceRequestLogDao faceRequestLogDao;
- @Resource
- private FaceTaskDao faceTaskDao;
- @Autowired
- private TBDeviceFaceService tbDeviceFaceService;
- //常客
- @Resource
- private UserWhitelistDao userWhitelistdao;
- @Resource
- private UserFaceRecordsFromDao userFaceRecordsFromDao;
- @Resource
- private UserVisitorListDao userVisitorListDao;
- @Resource
- private UserBlackListDao userBlackListDao;
- @Resource
- private UserInfoFromDao userInfoFromDao;
- @Autowired
- private TaskPoolConfig taskPoolConfig;
- @Autowired
- private NettyClient nettyClient;
- @Autowired
- private AsyncTriggerRetryImpl asyncTriggerRetryImpl;
- // @Value("${wx.phone.url}")
- private static final String wxUrl = "http://192.168.99.11:9810/winxin-fyzd/weiXin/getPhone";
- @Override
- public String getWxPhone(WxInfoDTO dto) {
- String sync = OkHttpUtils.builder().url(wxUrl)
- // 有参数的话添加参数,可多个
- .addParam("code", dto.getCode())
- .addParam("signature", dto.getSignature())
- .addParam("rawData", dto.getRawData())
- .addParam("iv", dto.getIv())
- .addParam("encryptedData", dto.getEncryptedData())
- .post(true)
- .sync();
- if (org.apache.commons.lang3.StringUtils.isBlank(sync)) {
- throw new ServiceException("获取登录后的session信息失败");
- }
- JSONObject jsonObject = JSON.parseObject(sync);
- String code = jsonObject.getString("code");
- if ("500".equals(code)) {
- throw new ServiceException("网络异常请重新获取哦~");
- }
- String phone = jsonObject.getString("phone");
- if (org.apache.commons.lang3.StringUtils.isBlank(phone)) {
- throw new ServiceException("网络异常请重新获取哦~");
- }
- String openid = jsonObject.getString("openid");
- if (org.apache.commons.lang3.StringUtils.isBlank(openid)) {
- throw new ServiceException("网络异常请重新获取哦~");
- }
- // UserInfo userInfo = new UserInfo();
- // userInfo.setPhone(phone);
- // userInfo = userInfoDao.selectOne(userInfo);
- // Date now = new Date();
- // if (userInfo != null) {
- // UserInfo info = new UserInfo();
- // info.setId(userInfo.getId());
- // info.setOpenId(openid);
- // info.setUpdateTime(now);
- // userInfoDao.updateByPrimaryKeySelective(info);
- // return phone;
- // }
- // userInfo = new UserInfo();
- // userInfo.setOpenId(openid);
- // userInfo.setPhone(phone);
- // userInfo.setUsername("");
- // userInfo.setIdNumber("");
- // userInfo.setRoleId(1);
- // userInfo.setAuthId(0);
- // userInfo.setUpdateTime(now);
- // userInfo.setCreateTime(now);
- // userInfoDao.insertSelective(userInfo);
- return phone;
- }
- @Override
- public void confirmFaceNotify(String result) {
- Map<String, Object> map = JsonUtils.toMap(result);
- if (CollectionUtils.isEmpty(map)) {
- return;
- }
- String taskId = map.get("taskId").toString();
- String name = map.get("name").toString();
- String phone = map.get("phone").toString();
- String idNumber = map.get("idNumber").toString();
- if (!StringUtils.hasText(taskId)) {
- return;
- }
- if (!StringUtils.hasText(name)) {
- return;
- }
- if (!StringUtils.hasText(phone)) {
- return;
- }
- if (!StringUtils.hasText(idNumber)) {
- return;
- }
- Date now = new Date();
- UserInfo userInfo = new UserInfo();
- userInfo.setPhone(phone);
- userInfo = userInfoDao.selectOne(userInfo);
- String image = buildImage(map.get("img").toString(), phone);
- if (userInfo == null) {
- userInfo = new UserInfo();
- userInfo.setUsername(name);
- userInfo.setPhone(phone);
- userInfo.setIdNumber(idNumber);
- userInfo.setRoleId(1);
- userInfo.setAuthId(0);
- userInfo.setAvatar(image);
- userInfo.setUpdateTime(now);
- userInfo.setCreateTime(now);
- userInfoDao.insertSelective(userInfo);
- } else {
- userInfo.setUsername(name);
- userInfo.setPhone(phone);
- userInfo.setAvatar(image);
- userInfo.setIdNumber(idNumber);
- userInfo.setUpdateTime(now);
- userInfoDao.updateByPrimaryKeySelective(userInfo);
- }
- UserFaceRecords faceRecords = new UserFaceRecords();
- faceRecords.setTaskId(taskId);
- faceRecords.setUserId(userInfo.getId());
- faceRecords.setPhone(userInfo.getPhone());
- faceRecords.setIdNumber(userInfo.getIdNumber());
- faceRecords.setUsername(name);
- faceRecords.setPhoto(image);
- faceRecords.setToken(map.get("token").toString());
- faceRecords.setCreateTime(now);
- userFaceRecordsDao.insertSelective(faceRecords);
- }
- @Override
- public PageInfo<UserInfoVO> getUsers(RestDTO<QueryUser> dto) {
- PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
- return new PageInfo<>(userInfoDao.getUsersByFacePass(dto.getData()));
- }
- @Override
- public Map<String, Object> doGetFacePass(Integer userId, String taskId) {
- log.info("数据*************; " + userId + "*******************" + taskId);
- String admin = taskId.split("-")[0];
- //返回值
- Map<String, Object> map = new HashMap<>(2);
- // 人员类型
- Integer type = 3;
- //时间
- Date now = new Date();
- //
- Date date = null;
- //用户信息
- UserInfo userInfo = userInfoDao.selectByPrimaryKey(userId);
- if (org.apache.commons.lang3.StringUtils.isBlank(userInfo.getPhone())) {
- throw new ServiceException("手机号为空请重新登录哦~");
- }
- //校验是否在黑名单
- UserBlackList userBlackList = new UserBlackList();
- userBlackList.setPhone(userBlackList.getPhone());
- userBlackList.setAdminId(Integer.valueOf(admin));
- UserBlackList userBlackOne = userBlackListDao.selectOne(userBlackList);
- if (userBlackOne != null) {
- throw new ServiceException("禁止下发哦~");
- }
- //常客
- UserWhitelist byPhoneAndId = userWhitelistdao.getByPhoneAndId(userInfo.getPhone(), null, Integer.valueOf(admin));
- // 访客
- UserVisitorList userVisitorList = userVisitorListDao.getByPhoneAndId(userInfo.getPhone(), Integer.valueOf(admin));
- //常客
- if (byPhoneAndId != null) {
- type = 2;
- //一年
- date = DateUtils.addYears(now, 1);
- } else {
- //12 小时
- date = DateUtils.addHours(now, 12);
- }
- //人脸下发
- try {
- downFaceByTask(userInfo, DateUtils.addMinutes(now, -10), date, type, taskId, byPhoneAndId, userVisitorList);
- } catch (Exception e) {
- log.info("日志" + e.getMessage());
- e.printStackTrace();
- throw new ServiceException("下发失败请重新再试哦~");
- }
- map.put("status", true);
- map.put("date", date);
- return map;
- }
- /**
- * @param userInfo 用户信息
- * @param startTime 开始时间
- * @param endTime 结束时间
- * @param type 类型
- * @param taskId id
- * @param byPhoneAndId 访客信息
- */
- @Transactional(rollbackFor = Exception.class)
- public void downFaceByTask(UserInfo userInfo, Date startTime, Date endTime, Integer type, String taskId, UserWhitelist byPhoneAndId, UserVisitorList userVisitorList) throws Exception {
- //获取adminId
- String admin = taskId.split("-")[0];
- //获取 adminId下的所有设备
- List<FaceDevice> snList = faceDeviceDao.getSnList(Integer.parseInt(admin));
- Map<String, Object> result;
- //天波人脸服务请求日志表
- FaceRequestLog requestLog;
- Date now = new Date();
- //人脸下发表
- FacePass facePass;
- //唯一id
- Long faceTaskId;
- //人脸清除定时任务
- FaceTask faceTask;
- //信息
- String msg;
- //人脸下发到设备里面
- if (!snList.isEmpty()) {
- for (FaceDevice device : snList) {
- Map<String, Object> params = Maps.newHashMapWithExpectedSize(3);
- List<Map<String, Object>> data = Lists.newArrayListWithExpectedSize(1);
- Map<String, Object> dataItem = Maps.newHashMapWithExpectedSize(8);
- // 下发参数
- dataItem.put("pin", userInfo.getId());
- dataItem.put("name", userInfo.getUsername());
- dataItem.put("validPeriodStart", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, startTime));
- dataItem.put("validPeriodEnd", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, endTime));
- dataItem.put("userType", 0);
- dataItem.put("photo", userInfo.getAvatar());
- if (type == 2) {
- dataItem.put("rightno", 105);
- } else if (type == 3) {
- dataItem.put("rightno", 104);
- }
- dataItem.put("cardid", userInfo.getIdNumber());
- data.add(dataItem);
- params.put("SN", device.getSn());
- params.put("Data", data);
- //天波人脸服务请求日志表
- requestLog = new FaceRequestLog();
- requestLog.setName("下发人脸");
- requestLog.setContext("/downUser");
- requestLog.setParams(JsonUtils.toJson(params));
- requestLog.setStatus(1);
- requestLog.setUsedTime(0L);
- requestLog.setUpdateTime(now);
- requestLog.setCreateTime(now);
- //人脸下发记录表
- faceRequestLogDao.insertSelective(requestLog);
- params.put("taskId", requestLog.getId());
- //人脸下发表
- facePass = new FacePass();
- facePass.setUserId(userInfo.getId());
- facePass.setDeviceSn(device.getSn());
- facePass.setDeviceId(device.getId());
- facePass.setStartTime(startTime);
- facePass.setEndTime(endTime);
- facePass.setAdminId(Integer.valueOf(admin));
- facePass.setStatus(2);
- facePass.setType(type);
- facePass.setTaskId(taskId);
- facePass.setUpdateTime(now);
- facePass.setCreateTime(now);
- // //人脸下发
- // try {
- // result = tbDeviceFaceService.downUser(params);
- // log.info("下发人脸downFace = {}", result);
- // if (result.get("msg") != null) {
- // msg = result.get("msg").toString();
- // if (msg.contains("不在线")) {
- // //设备不在线 重试 3次
- // Boolean retry = triggerRetry(params);
- // if (!retry) {
- // facePass.setStatus(3);
- // }
- // }
- // }
- // } catch (Exception e) {
- // log.info("下发失败 原因 {}", e.getMessage());
- // //设备不在线 重试 3次
- // Boolean retry = triggerRetry(params);
- // if (!retry) {
- // facePass.setStatus(3);
- // }
- // }
- // //添加人脸
- // facePassDao.insertSelective(facePass);
- //人脸下发
- //添加人脸
- facePassDao.insertSelective(facePass);
- asyncTriggerRetryImpl.send(params, facePass);
- faceTaskId = faceTaskDao.getFaceTaskId(device.getSn(), userInfo.getId());
- faceTask = new FaceTask();
- faceTask.setId(faceTaskId);
- faceTask.setTaskTime(facePass.getEndTime());
- faceTask.setStatus(0);
- faceTask.setUpdateTime(now);
- if (faceTaskId == null) {
- faceTask.setDeviceSn(device.getSn());
- faceTask.setUserId(userInfo.getId());
- faceTask.setCreateTime(now);
- faceTaskDao.insertSelective(faceTask);
- continue;
- }
- faceTaskDao.updateByPrimaryKeySelective(faceTask);
- }
- }
- if (byPhoneAndId != null) {
- //更新常客列表
- UserWhitelist userWhitelist = new UserWhitelist();
- userWhitelist.setStatus(1);
- userWhitelist.setUpdateTime(now);
- userWhitelist.setId(byPhoneAndId.getId());
- userWhitelist.setAvatar(userInfo.getAvatar());
- userWhitelist.setIdNumber(userInfo.getIdNumber());
- userWhitelistdao.updateByPrimaryKeySelective(userWhitelist);
- return;
- }
- UserVisitorList userVisitorOne = new UserVisitorList();
- if (userVisitorList == null) {
- //更新游客列表
- userVisitorOne.setAdminId(Integer.valueOf(admin));
- userVisitorOne.setCreateTime(now);
- userVisitorOne.setPhone(userInfo.getPhone());
- userVisitorOne.setAvatar(userInfo.getAvatar());
- userVisitorOne.setIdNumber(userInfo.getIdNumber());
- userVisitorOne.setName(userInfo.getUsername());
- userVisitorListDao.insert(userVisitorOne);
- } else {
- //更新游客列表
- userVisitorOne.setAdminId(Integer.valueOf(admin));
- userVisitorOne.setId(userVisitorList.getId());
- userVisitorOne.setUpdateTime(now);
- userVisitorOne.setAvatar(userInfo.getAvatar());
- userVisitorListDao.updateByPrimaryKeySelective(userVisitorOne);
- userVisitorOne = userVisitorListDao.selectByPrimaryKey(userVisitorList.getId());
- }
- //开启异步线程
- UserVisitorList finalUserVisitorOne = userVisitorOne;
- taskPoolConfig.executor().execute(new Runnable() {
- @Override
- public void run() {
- Map<String, String> map = new HashMap<>(1);
- map.put("user-visitor", JSONObject.toJSONString(finalUserVisitorOne));
- nettyClient.sendMessage(JSON.toJSONString(map));
- }
- });
- }
- private String buildImage(String image, String phone) {
- String path = null;
- if (StringUtils.hasText(image)) {
- String name = phone + UUID.randomUUID().toString().concat(".png");
- path = FileUploadUtil.uploadUtil(image, name);
- return path;
- }
- return path;
- }
- }
|