package com.doumee.service.business.impl.hksync; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; 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.respose.*; import com.doumee.core.haikang.service.HKService; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.dao.business.DeviceMapper; import com.doumee.dao.business.join.EmpowerJoinMapper; import com.doumee.dao.business.join.VisitsJoinMapper; import com.doumee.dao.business.model.Device; import com.doumee.dao.business.model.Empower; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Visits; 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 java.util.ArrayList; import java.util.Date; import java.util.List; /** * 海康门禁授权业务Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service @Slf4j public class HkSyncEmpowerServiceImpl extends HkSyncBaseServiceImpl { @Autowired private EmpowerJoinMapper empowerMapper; @Autowired private DeviceMapper deviceMapper; /** * 定时查询权限下发任务进度执行结果 */ @Override public void syncEmpowerDetailData(){ if(Constants.DEALING_HK_EMPOWER_DETAIL){ return ; } Constants.DEALING_HK_EMPOWER_DETAIL = true; try { //查询所有完成下载,待查询结果的数据记录 List list = getDealListDetail(); if(list == null || list.size() ==0){ return; } for(Empower c : list){ AuthItemListRequest param = new AuthItemListRequest(); param.setPageNo(1); param.setPageSize(100); // param.setPersonIds(new ArrayList<>()); // AuthItemListPersonRequest p = new AuthItemListPersonRequest(); // p.setPersonIds(c.getMemberHkId()); param.setPersonIds(new String[]{c.getMemberHkId()}); param.setQueryType(c.getDeviceType()); TaskDataAdditionResourceRequest rec = new TaskDataAdditionResourceRequest(); rec.setResourceIndexCode(c.getDeviceIndexCode()); rec.setResourceType(c.getDeviceType()); rec.setChannelNos(c.getDeviceChannelNo().split(",")); List resourceRequests = new ArrayList<>(); resourceRequests.add(rec); // param.setResourceInfos(resourceRequests); //查询已下载 // param.setPersonStatus(new Integer[]{3}); //查询下发状态 BaseResponse response = HKService.authItemList(param); if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) && response.getData()!=null && response.getData().getList() != null && response.getData().getList().size()>0 ){ //更新已完成下载任务 empowerMapper.update(null,new UpdateWrapper() .lambda() .eq(Empower::getHkId,c.getHkId() ) .set(Empower::getSendStatus,Constants.EmpowerStatus.pass) ); } } }catch (Exception e){ e.printStackTrace(); }finally { Constants.DEALING_HK_EMPOWER_DETAIL=false; } } /** * 定时查询权限下发任务进度执行结果 */ @Override public void syncEmpowerResultData(){ if(Constants.DEALING_HK_EMPOWER_RESULT){ return ; } Constants.DEALING_HK_EMPOWER_RESULT=true; try { //查询所有执行中得数据 List list = getIngTaskListResult(); if(list == null || list.size() ==0){ return; } for(Empower c : list){ TaskProgressRequest param = new TaskProgressRequest(); param.setTaskId(c.getHkId()); //查询下发状态 BaseResponse response = HKService.taskProgressNum(param); if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE) && response.getData()!=null && response.getData().getIsDownloadFinished() != null && response.getData().getIsDownloadFinished() ){ //更新已完成下载任务 empowerMapper.update(null,new UpdateWrapper() .lambda() .eq(Empower::getHkId,c.getHkId() ) .set(Empower::getSendStatus,Constants.EmpowerStatus.downloaded) ); } } }catch (Exception e){ e.printStackTrace(); }finally { Constants.DEALING_HK_EMPOWER_RESULT =false; } } /** * 处理人员授权数据,定时下发 */ @Override public void syncEmpowerData() { if(Constants.DEALING_HK_EMPOWER){ return ; } Constants.DEALING_HK_EMPOWER =true; try { //先删除所有需要取消授权的数据 dealDelListTask(getDealList(Constants.ONE)); //查询所有需要同步的数据 dealNewListTask(getDealList(Constants.ZERO)); }catch (Exception e){ e.printStackTrace(); }finally { Constants.DEALING_HK_EMPOWER =false; } } private void dealDelListTask(List list) { //按照父级申请分批处理每次申请数据 if(list ==null || list.size()==0){ return; } Date date = new Date(); //创建任务 String taskId = hkTaskAddtion(); List successList = new ArrayList<>(); List errorList = new ArrayList<>(); for(Empower c : list) { //向任务添加人员、设备信息数据 if(addTaskData(c,taskId,HKConstants.OPERA_TYPE.DEL.getKey())){ successList.add(c); }else{ errorList.add(c); } } if(successList.size()>0){ //开始执行下发 boolean status = startTask(taskId); for(Empower model : successList){ Empower update = new Empower(); update.setId(model.getId()); update.setSendDate(date); update.setEditDate(date); update.setHkId(taskId); update.setRemark(status?"下发任务执行成功":"下发任务执行失败"); //下发中 update.setSendStatus(status?Constants.EmpowerStatus.ing:Constants.EmpowerStatus.fail); empowerMapper.updateById(update); } } for(Empower model : errorList){ Empower update = new Empower(); update.setId(model.getId()); update.setSendDate(date); update.setEditDate(date); update.setHkId(taskId); update.setSendStatus(Constants.EmpowerStatus.fail); // update.setRemark( "添加下发任务数据刪除授权失败"); empowerMapper.updateById(update); } } private void dealNewListTask(List list) { //按照父级申请分批处理每次申请数据 if(list ==null || list.size()==0){ return; } // clearAllEmpowerFirst(list); Date date = new Date(); //创建任务 String taskId = hkTaskAddtion(); List successList = new ArrayList<>(); List errorList = new ArrayList<>(); for(Empower c : list) { //向任务添加人员、设备信息数据 if(addTaskData(c,taskId,HKConstants.OPERA_TYPE.ADD.getKey())){ successList.add(c); }else{ errorList.add(c); } } if(successList.size()>0){ //开始执行下发 boolean status = startTask(taskId); for(Empower model : successList){ Empower update = new Empower(); update.setId(model.getId()); update.setSendDate(date); update.setEditDate(date); update.setHkId(taskId); update.setRemark(status?"下发任务成功":"下发任务失败"); //下发中 update.setSendStatus(status?Constants.EmpowerStatus.ing:Constants.EmpowerStatus.fail); empowerMapper.updateById(update); } } for(Empower model : errorList){ Empower update = new Empower(); update.setId(model.getId()); update.setSendDate(date); update.setEditDate(date); update.setHkId(taskId); update.setSendStatus(Constants.EmpowerStatus.fail); update.setRemark( "添加下发任务数据失败"); empowerMapper.updateById(update); } } private void clearAllEmpowerFirst(List list) { //查询全部数据 List allDevice = deviceMapper.selectList(new QueryWrapper().lambda().isNotNull(Device::getHkId)); //创建任务 String taskId = hkTaskAddtion(); for(Empower c : list) { //向任务刪除人员的所有设备信息数据 addTaskDataAllDel(c.getHkId(),taskId,allDevice); } startTask(taskId); } private boolean addTaskData(Empower c,String taskId,int type) { if(StringUtils.isBlank(c.getMemberHkId() ) ||StringUtils.isBlank(c.getDeviceChannelNo()) ||StringUtils.isBlank(c.getDeviceType()) ||StringUtils.isBlank(c.getDeviceIndexCode())){ //必填参数校验 c.setRemark("设备信息不支持授权下发,检查人员是否已下发海康或者设备是否【设备类型、通道号】是否完善"); return false; } TaskDataAdditionRequest param = new TaskDataAdditionRequest(); param.setTaskId(taskId); List resourceInfos = new ArrayList<>();// object[] True 资源对象 TaskDataAdditionResourceRequest res = new TaskDataAdditionResourceRequest(); res.setChannelNos(c.getDeviceChannelNo().split(",")); res.setResourceType(c.getDeviceType()); res.setResourceIndexCode(c.getDeviceIndexCode()); resourceInfos.add(res); List personInfos = new ArrayList<>(); TaskDataAdditionPersonRequest pinfo = new TaskDataAdditionPersonRequest(); pinfo.setName(c.getMemberName()); pinfo.setEndTime(DateUtil.getISO8601Timestamp(c.getEndTime())); pinfo.setStartTime(DateUtil.getISO8601Timestamp(c.getStartTime())); pinfo.setOperatorType(type); pinfo.setPersonId(c.getMemberHkId()); personInfos.add(pinfo);// param.setResourceInfos(resourceInfos); param.setPersonInfos(personInfos); BaseResponse response = HKService.taskDataAddition(param); if(response!=null && StringUtils.equals(response.getCode(),HKConstants.RESPONSE_SUCCEE)){ return true; }else{ c.setRemark("添加人员、设备通道权限下发数据失败"+(response!=null?response.getMsg():"")); return false; } } private List getDealList(int del ) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Empower.class); queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType); queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId); queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId); queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.wait); queryWrapper.eq( Empower::getIsdeleted,del); // queryWrapper.last("limit 100");//每次限制下发100个 List list = empowerMapper.selectJoinList(Empower.class,queryWrapper); return list; } private List getDealListDetail() { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Empower.class); queryWrapper.selectAs(Device::getChannelNo,Empower::getDeviceChannelNo); queryWrapper.selectAs(Member::getHkId,Empower::getMemberHkId); queryWrapper.leftJoin(Member.class,Member::getId,Empower::getMemberId); queryWrapper.selectAs(Device::getHkId,Empower::getDeviceIndexCode); queryWrapper.selectAs(Device::getResourceType,Empower::getDeviceType); queryWrapper.leftJoin(Device.class,Device::getId,Empower::getDeviceId); queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.downloaded); List list = empowerMapper.selectJoinList(Empower.class,queryWrapper); return list; } private List getIngTaskListResult() { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Empower.class); queryWrapper.eq(Empower::getSendStatus,Constants.EmpowerStatus.ing); queryWrapper.groupBy(Empower::getHkId); List list = empowerMapper.selectJoinList(Empower.class,queryWrapper); return list; } }