diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java index a24dd280..bdff5c94 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.java @@ -1,4 +1,5 @@ package cn.cloudwalk.service.organization.export; +// 业务服务 import cn.cloudwalk.client.organization.batch.param.download.FilePartFinishPara; import cn.cloudwalk.client.organization.batch.param.download.FilePartInitResult; import cn.cloudwalk.client.organization.common.enums.FileStatusEnum; @@ -17,14 +18,21 @@ import cn.cloudwalk.client.organization.result.PersonProListResult; import cn.cloudwalk.client.organization.service.ICommonAppDownloadCenterService; import cn.cloudwalk.client.organization.service.ICommonAppFileManageService; import cn.cloudwalk.client.organization.service.ICommonStorageService; +import cn.cloudwalk.client.organization.service.LabelService; import cn.cloudwalk.client.organization.service.OrganizationService; import cn.cloudwalk.client.organization.service.store.result.OrganizationResult; import cn.cloudwalk.cloud.context.CloudwalkCallContext; import cn.cloudwalk.cloud.result.CloudwalkResult; import cn.cloudwalk.intelligent.davinci.storage.bean.part.dto.PartInitResultDTO; +import cn.cloudwalk.intelligent.davinci.storage.manager.FilePartManager; +import cn.cloudwalk.intelligent.davinci.storage.manager.FileStorageManager; +import cn.cloudwalk.service.organization.common.AbstractImagStoreService; import cn.cloudwalk.service.organization.common.CommonDownloadDataConfig; import cn.cloudwalk.service.organization.common.MultipartFileUtils; import cn.cloudwalk.service.organization.config.ChannelFileReader; +import cn.cloudwalk.service.organization.export.CommonAppExportFileByLabelHandler; +import cn.cloudwalk.service.organization.export.CommonAppExportFileByOrgHandler; +import cn.cloudwalk.service.organization.export.CommonAppExportFileHandler; import com.alibaba.fastjson.JSONObject; import java.io.File; import java.io.IOException; @@ -34,437 +42,451 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Service; import org.springframework.util.Base64Utils; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; + @Service @EnableAsync -public class CommonAppExportExecuteTask extends AbstractImagStoreService { -private static final Logger log = LoggerFactory.getLogger(CommonAppExportExecuteTask.class); -@Autowired -private ICommonAppDownloadCenterService commonAppDownloadCenterService; -@Autowired -private CommonDownloadDataConfig commonDownloadDataConfig; -@Autowired -private ICommonStorageService commonAppStorageService; -@Autowired -private ImgStorePersonService imgStorePersonService; -@Autowired -private OrganizationService organizationService; -@Autowired -private LabelService labelService; -@Autowired -private ImgStorePersonPropertiesService imgStorePersonPropertiesService; -@Autowired -private ICommonAppFileManageService iCommonAppFileManageService; -@Autowired -private FilePartManager filePartManager; -@Autowired -private FileStorageManager fileStorageManager; -@Value("${cloudwalk.common-app.download.shardingSize}") -private Integer shardingSize; -String fileName = "人员信息"; -String orgFileName = "机构信息"; -String labelFileName = "标签信息"; -@Async -public void execute(ExportRecordTaskParam task, CloudwalkCallContext cloudwalkCallContext) { -this.logger.info("开始执行人员信息导出功能"); -QueryImgPersonParam queryImgPersonParam = new QueryImgPersonParam(); -BeanUtils.copyProperties(task, queryImgPersonParam); -try { -CloudwalkResult> recordList = getPersonData(queryImgPersonParam, cloudwalkCallContext); -if (CollectionUtils.isEmpty((Collection)recordList.getData())) { -this.logger.info("查询导出记录为空, businessId = {}, task = {}", task.getBusinessId(), task); -exportUpload(task.getBusinessId(), task.getFileId(), null); -return; -} -this.logger.info("导出记录总数为{}", Integer.valueOf(((List)recordList.getData()).size())); -Map> dataMap = new HashMap<>(); -dataMap.put(this.fileName, recordList.getData()); -PersonProListResult personProListResult = (PersonProListResult)this.imgStorePersonPropertiesService.getList(task.getBusinessId()).getData(); -List properties = personProListResult.getProperties(); -ImgPersonProGetResult result1 = new ImgPersonProGetResult(); -result1.setId("1"); -result1.setName("门禁设备(在线)"); -result1.setCode("onlineDevices"); -result1.setStatus(Integer.valueOf(0)); -result1.setType(Short.valueOf((short)1)); -result1.setOrderNum(Integer.valueOf(17)); -result1.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result2 = new ImgPersonProGetResult(); -result2.setId("2"); -result2.setName("门禁设备(离线)"); -result2.setCode("offlineDevices"); -result2.setStatus(Integer.valueOf(0)); -result2.setType(Short.valueOf((short)1)); -result2.setOrderNum(Integer.valueOf(18)); -result2.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result3 = new ImgPersonProGetResult(); -result3.setId("3"); -result3.setName("派梯楼层权限"); -result3.setCode("floorNames"); -result3.setStatus(Integer.valueOf(0)); -result3.setType(Short.valueOf((short)1)); -result3.setOrderNum(Integer.valueOf(19)); -result3.setHasDefault(Integer.valueOf(1)); -properties.add(result1); -properties.add(result2); -properties.add(result3); -this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); -this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows().intValue()); -this.commonDownloadDataConfig.setHasContainImage(task.getHasContainImage()); -Path zipPath = (new CommonAppExportFileHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult)).process(); -int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); -if (status > 1) { -this.logger.info("下载中心已取消下载文件,fileId = {}", task.getFileId()); -exportUpload(task.getBusinessId(), task.getFileId(), null); -return; -} -exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); -} -catch (Exception e) { -this.logger.error("导出人员任务失败:{}", e.getMessage()); -this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); -throw new RuntimeException("执行导出人员记录任务异常"); -} -} -@Async -public void executeOrg(ExportOrgTaskParam task, CloudwalkCallContext context) { -this.logger.info("开始执行机构信息导出功能"); -QueryOrganizationParam queryImgPersonParam = new QueryOrganizationParam(); -BeanUtils.copyProperties(task, queryImgPersonParam); -try { -CloudwalkResult> recordList = getOrgData(queryImgPersonParam, context); -if (CollectionUtils.isEmpty((Collection)recordList.getData())) { -this.logger.info("查询导出记录为空, businessId = {}, task = {}", task.getBusinessId(), task); -exportUpload(task.getBusinessId(), task.getFileId(), null); -return; -} -this.logger.info("导出记录总数为{}", Integer.valueOf(((List)recordList.getData()).size())); -Map> dataMap = new HashMap<>(); -dataMap.put(this.orgFileName, recordList.getData()); -PersonProListResult personProListResult = new PersonProListResult(); -List properties = new ArrayList<>(); -ImgPersonProGetResult result1 = new ImgPersonProGetResult(); -result1.setId("1"); -result1.setName("机构名称"); -result1.setCode("name"); -result1.setStatus(Integer.valueOf(0)); -result1.setType(Short.valueOf((short)1)); -result1.setOrderNum(Integer.valueOf(1)); -result1.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result2 = new ImgPersonProGetResult(); -result2.setId("2"); -result2.setName("机构id"); -result2.setCode("id"); -result2.setStatus(Integer.valueOf(0)); -result2.setType(Short.valueOf((short)1)); -result2.setOrderNum(Integer.valueOf(2)); -result2.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result3 = new ImgPersonProGetResult(); -result3.setId("3"); -result3.setName("机构类型"); -result3.setCode("type"); -result3.setStatus(Integer.valueOf(0)); -result3.setType(Short.valueOf((short)1)); -result3.setOrderNum(Integer.valueOf(3)); -result3.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result4 = new ImgPersonProGetResult(); -result4.setId("4"); -result4.setName("人员数量"); -result4.setCode("personCount"); -result4.setStatus(Integer.valueOf(0)); -result4.setType(Short.valueOf((short)1)); -result4.setOrderNum(Integer.valueOf(4)); -result4.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result5 = new ImgPersonProGetResult(); -result5.setId("5"); -result5.setName("状态:0-已启用"); -result5.setCode("isDel"); -result5.setStatus(Integer.valueOf(0)); -result5.setType(Short.valueOf((short)1)); -result5.setOrderNum(Integer.valueOf(5)); -result5.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result6 = new ImgPersonProGetResult(); -result6.setId("6"); -result6.setName("门禁设备(在线)"); -result6.setCode("onlineDevices"); -result6.setStatus(Integer.valueOf(0)); -result6.setType(Short.valueOf((short)1)); -result6.setOrderNum(Integer.valueOf(6)); -result6.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result7 = new ImgPersonProGetResult(); -result7.setId("7"); -result7.setName("门禁设备(离线)"); -result7.setCode("offlineDevices"); -result7.setStatus(Integer.valueOf(0)); -result7.setType(Short.valueOf((short)1)); -result7.setOrderNum(Integer.valueOf(7)); -result7.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result8 = new ImgPersonProGetResult(); -result8.setId("8"); -result8.setName("派梯楼层权限"); -result8.setCode("floorNames"); -result8.setStatus(Integer.valueOf(0)); -result8.setType(Short.valueOf((short)1)); -result8.setOrderNum(Integer.valueOf(8)); -result8.setHasDefault(Integer.valueOf(1)); -properties.add(result1); -properties.add(result2); -properties.add(result3); -properties.add(result4); -properties.add(result5); -properties.add(result6); -properties.add(result7); -properties.add(result8); -personProListResult.setProperties(properties); -this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); -this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows().intValue()); -Path zipPath = (new CommonAppExportFileByOrgHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult)).process(); -int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); -if (status > 1) { -this.logger.info("下载中心已取消下载文件,fileId = {}", task.getFileId()); -exportUpload(task.getBusinessId(), task.getFileId(), null); -return; -} -exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); -} -catch (Exception e) { -this.logger.error("导出机构任务失败:{}", e); -this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); -throw new RuntimeException("执行导出机构信息任务异常"); -} -} -@Async -public void executeLabel(ExportLabelTaskParam task, CloudwalkCallContext context) { -this.logger.info("开始执行标签信息导出功能"); -PageLabelParam pageLabelParam = new PageLabelParam(); -BeanUtils.copyProperties(task, pageLabelParam); -try { -CloudwalkResult> recordList = getLabelData(pageLabelParam, context); -if (CollectionUtils.isEmpty((Collection)recordList.getData())) { -this.logger.info("查询导出记录为空, businessId = {}, task = {}", task.getBusinessId(), task); -exportUpload(task.getBusinessId(), task.getFileId(), null); -return; -} -this.logger.info("导出记录总数为{}", Integer.valueOf(((List)recordList.getData()).size())); -Map> dataMap = new HashMap<>(); -dataMap.put(this.labelFileName, recordList.getData()); -PersonProListResult personProListResult = new PersonProListResult(); -List properties = new ArrayList<>(); -ImgPersonProGetResult result1 = new ImgPersonProGetResult(); -result1.setId("1"); -result1.setName("标签名称"); -result1.setCode("name"); -result1.setStatus(Integer.valueOf(0)); -result1.setType(Short.valueOf((short)1)); -result1.setOrderNum(Integer.valueOf(1)); -result1.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result2 = new ImgPersonProGetResult(); -result2.setId("2"); -result2.setName("标签id"); -result2.setCode("id"); -result2.setStatus(Integer.valueOf(0)); -result2.setType(Short.valueOf((short)1)); -result2.setOrderNum(Integer.valueOf(2)); -result2.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result3 = new ImgPersonProGetResult(); -result3.setId("3"); -result3.setName("标签编号"); -result3.setCode("code"); -result3.setStatus(Integer.valueOf(0)); -result3.setType(Short.valueOf((short)1)); -result3.setOrderNum(Integer.valueOf(3)); -result3.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result4 = new ImgPersonProGetResult(); -result4.setId("4"); -result4.setName("人员数量"); -result4.setCode("personCount"); -result4.setStatus(Integer.valueOf(0)); -result4.setType(Short.valueOf((short)1)); -result4.setOrderNum(Integer.valueOf(4)); -result4.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result5 = new ImgPersonProGetResult(); -result5.setId("5"); -result5.setName("标签类型:0-手动创建,1-应用初始,2-应用创建"); -result5.setCode("addType"); -result5.setStatus(Integer.valueOf(0)); -result5.setType(Short.valueOf((short)1)); -result5.setOrderNum(Integer.valueOf(5)); -result5.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result6 = new ImgPersonProGetResult(); -result6.setId("6"); -result6.setName("门禁设备(在线)"); -result6.setCode("onlineDevices"); -result6.setStatus(Integer.valueOf(0)); -result6.setType(Short.valueOf((short)1)); -result6.setOrderNum(Integer.valueOf(6)); -result6.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result7 = new ImgPersonProGetResult(); -result7.setId("7"); -result7.setName("门禁设备(离线)"); -result7.setCode("offlineDevices"); -result7.setStatus(Integer.valueOf(0)); -result7.setType(Short.valueOf((short)1)); -result7.setOrderNum(Integer.valueOf(7)); -result7.setHasDefault(Integer.valueOf(1)); -ImgPersonProGetResult result8 = new ImgPersonProGetResult(); -result8.setId("8"); -result8.setName("派梯楼层权限"); -result8.setCode("floorNames"); -result8.setStatus(Integer.valueOf(0)); -result8.setType(Short.valueOf((short)1)); -result8.setOrderNum(Integer.valueOf(8)); -result8.setHasDefault(Integer.valueOf(1)); -properties.add(result1); -properties.add(result2); -properties.add(result3); -properties.add(result4); -properties.add(result5); -properties.add(result6); -properties.add(result7); -properties.add(result8); -personProListResult.setProperties(properties); -this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); -this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows().intValue()); -Path zipPath = (new CommonAppExportFileByLabelHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult)).process(); -int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); -if (status > 1) { -this.logger.info("下载中心已取消下载文件,fileId = {}", task.getFileId()); -exportUpload(task.getBusinessId(), task.getFileId(), null); -return; -} -exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); -} -catch (Exception e) { -this.logger.error("导出标签任务失败:{}", e); -this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); -throw new RuntimeException("执行导出标签信息任务异常"); -} -} -private CloudwalkResult> getPersonData(QueryImgPersonParam queryImgPersonParam, CloudwalkCallContext cloudwalkCallContext) { -CloudwalkResult> recordList = new CloudwalkResult(); -try { -recordList = this.imgStorePersonService.listByPage(queryImgPersonParam, cloudwalkCallContext); -} catch (Exception e) { -this.logger.error("查询记录数据失败"); -} -return recordList; -} -private CloudwalkResult> getOrgData(QueryOrganizationParam param, CloudwalkCallContext context) { -CloudwalkResult> recordList = new CloudwalkResult(); -try { -recordList = this.organizationService.listByPage(param, context); -} catch (Exception e) { -this.logger.error("查询机构记录数据失败"); -} -return recordList; -} -private CloudwalkResult> getLabelData(PageLabelParam param, CloudwalkCallContext cloudwalkCallContext) { -CloudwalkResult> recordList = new CloudwalkResult(); -try { -recordList = this.labelService.listByPage(param, cloudwalkCallContext); -} catch (Exception e) { -this.logger.error("查询标签记录数据失败"); -} -return recordList; -} -private void exportUpload(String businessId, String fileId, String zipPathStr) throws IOException { -try { -if (StringUtils.isNotBlank(zipPathStr)) { -uploadFile(businessId, fileId, zipPathStr); -} else { -byte[] data = Base64Utils.decodeFromString("UEsDBBQACAgIAAuPmlAAAAAAAAAAAAAAAAAGAAAAZW1wdHkvAwBQSwcIAAAAAAIAAAAAAAAAUEsBAhQAFAAICAgAC4+aUAAAAAACAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAGVtcHR5L1BLBQYAAAAAAQABADQAAAA2AAAAAAA="); -uploadFile(businessId, fileId, data, data.length); -} -} catch (Exception e) { -this.logger.error("将导出文件生成的zip上传到文件管理中心发生异常:{}", e.getMessage()); -throw new RuntimeException("将导出文件生成的zip上传到文件管理中心发生异常"); -} finally { -this.logger.debug("删除压缩包:{}", zipPathStr); -File file = new File(zipPathStr); -if (file.exists()) { -Files.delete(file.toPath()); -} -} -} -private void uploadFile(String businessId, String fileId, byte[] data, long fileSize) { -String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); -String name = uuidCode + this.commonDownloadDataConfig.getCompressionType(); -String filePath = this.commonAppStorageService.saveFileBySharding(name, data); -this.logger.info("存储文件名:fileId = {}, filePath = {}", fileId, filePath); -int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); -if (status == FileStatusEnum.PRODUCING.getCode().intValue() || status == FileStatusEnum.ERROR.getCode().intValue()) { -this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); -} else { -this.commonAppStorageService.deleteFile(filePath); -} -} -private void uploadFile(String businessId, String fileId, String zipPathStr) throws IOException { -ChannelFileReader reader = new ChannelFileReader(zipPathStr, this.shardingSize.intValue()); -try { -String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); -String name = uuidCode + this.commonDownloadDataConfig.getCompressionType(); -FilePartInitResult resp = this.iCommonAppFileManageService.filePartInit(name); -if (resp == null) { -this.logger.info("分片上传文件初始化返回值为空"); -return; -} -AtomicInteger i = new AtomicInteger(1); -long fileSize = 0L; -while (reader.read() != -1) { -this.logger.info("分片上传第{}次", Integer.valueOf(i.get())); -fileSize += (reader.getArray()).length; -uploadFileBySharding(reader.getArray(), resp.getFilePath(), resp.getUploadId(), this.fileName, String.valueOf(i.getAndAdd(1))); -} -String filePath = filePartFinish(fileSize, resp); -if (filePath == null) { -this.logger.info("分片上传文件完成接口返回值为空"); -return; -} -this.logger.info("分片上传文件完成接口返回值 filePath = {}", filePath); -this.logger.info("存储文件名:fileId = {}, filePath = {}", fileId, filePath); -int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); -if (status == FileStatusEnum.PRODUCING.getCode().intValue() || status == FileStatusEnum.ERROR.getCode().intValue()) { -this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); -} else { -this.commonAppStorageService.deleteFile(filePath); -} -this.logger.info("完成上传任务 fileId = {}", fileId); -} catch (Exception e) { -this.logger.error("分片上传文件报错 {}: {}", e.getClass().getName(), e.getMessage()); -} finally { -reader.close(); -} -} -private String filePartFinish(long fileSize, FilePartInitResult resp) { -FilePartFinishPara para = new FilePartFinishPara(); -BeanUtils.copyProperties(resp, para); -para.setFileSize(Long.valueOf(fileSize)); -para.setReturnType(Integer.valueOf(0)); -return this.iCommonAppFileManageService.filePartFinish(para); -} -private void uploadFileBySharding(byte[] bytes, String filePath, String uploadId, String fileName, String partNumber) { -MultipartFile mfile = MultipartFileUtils.getMultipartFile(fileName, bytes); -try { -PartInitResultDTO partInitResultDTO = this.filePartManager.append(filePath, Integer.valueOf(partNumber), uploadId, mfile); -} catch (Exception e) { -this.logger.error("分片更新文件错误{}:{}", e.getClass().getName(), e.getMessage()); -} -} +public class CommonAppExportExecuteTask +extends AbstractImagStoreService { + private static final Logger log = LoggerFactory.getLogger(CommonAppExportExecuteTask.class); + @Autowired + private ICommonAppDownloadCenterService commonAppDownloadCenterService; + @Autowired + private CommonDownloadDataConfig commonDownloadDataConfig; + @Autowired + private ICommonStorageService commonAppStorageService; + @Autowired + private ImgStorePersonService imgStorePersonService; + @Autowired + private OrganizationService organizationService; + @Autowired + private LabelService labelService; + @Autowired + private ImgStorePersonPropertiesService imgStorePersonPropertiesService; + @Autowired + private ICommonAppFileManageService iCommonAppFileManageService; + @Autowired + private FilePartManager filePartManager; + @Autowired + private FileStorageManager fileStorageManager; + @Value(value="${cloudwalk.common-app.download.shardingSize}") + private Integer shardingSize; + String fileName = "人员信息"; + String orgFileName = "机构信息"; + String labelFileName = "标签信息"; + + @Async + public void execute(ExportRecordTaskParam task, CloudwalkCallContext cloudwalkCallContext) { + this.logger.info("开始执行人员信息导出功能"); + QueryImgPersonParam queryImgPersonParam = new QueryImgPersonParam(); + BeanUtils.copyProperties((Object)task, (Object)queryImgPersonParam); + try { + CloudwalkResult> recordList = this.getPersonData(queryImgPersonParam, cloudwalkCallContext); + if (CollectionUtils.isEmpty((Collection)((Collection)recordList.getData()))) { + this.logger.info("查询导出记录为空, businessId = {}, task = {}", (Object)task.getBusinessId(), (Object)task); + this.exportUpload(task.getBusinessId(), task.getFileId(), null); + return; + } + this.logger.info("导出记录总数为{}", (Object)((List)recordList.getData()).size()); + HashMap> dataMap = new HashMap>(); + dataMap.put(this.fileName, (List)recordList.getData()); + PersonProListResult personProListResult = (PersonProListResult)this.imgStorePersonPropertiesService.getList(task.getBusinessId()).getData(); + List properties = personProListResult.getProperties(); + ImgPersonProGetResult result1 = new ImgPersonProGetResult(); + result1.setId("1"); + result1.setName("门禁设备(在线)"); + result1.setCode("onlineDevices"); + result1.setStatus(Integer.valueOf(0)); + result1.setType(Short.valueOf((short)1)); + result1.setOrderNum(Integer.valueOf(17)); + result1.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result2 = new ImgPersonProGetResult(); + result2.setId("2"); + result2.setName("门禁设备(离线)"); + result2.setCode("offlineDevices"); + result2.setStatus(Integer.valueOf(0)); + result2.setType(Short.valueOf((short)1)); + result2.setOrderNum(Integer.valueOf(18)); + result2.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result3 = new ImgPersonProGetResult(); + result3.setId("3"); + result3.setName("派梯楼层权限"); + result3.setCode("floorNames"); + result3.setStatus(Integer.valueOf(0)); + result3.setType(Short.valueOf((short)1)); + result3.setOrderNum(Integer.valueOf(19)); + result3.setHasDefault(Integer.valueOf(1)); + properties.add(result1); + properties.add(result2); + properties.add(result3); + this.logger.info("导出的字段属性为:{}", JSONObject.toJSON((Object)properties)); + this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows()); + this.commonDownloadDataConfig.setHasContainImage(task.getHasContainImage()); + Path zipPath = new CommonAppExportFileHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult).process(); + int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); + if (status > 1) { + this.logger.info("下载中心已取消下载文件,fileId = {}", (Object)task.getFileId()); + this.exportUpload(task.getBusinessId(), task.getFileId(), null); + return; + } + this.exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); + } + catch (Exception e) { + this.logger.error("导出人员任务失败:{}", (Object)e.getMessage()); + this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); + throw new RuntimeException("执行导出人员记录任务异常"); + } + } + + @Async + public void executeOrg(ExportOrgTaskParam task, CloudwalkCallContext context) { + this.logger.info("开始执行机构信息导出功能"); + QueryOrganizationParam queryImgPersonParam = new QueryOrganizationParam(); + BeanUtils.copyProperties((Object)task, (Object)queryImgPersonParam); + try { + CloudwalkResult> recordList = this.getOrgData(queryImgPersonParam, context); + if (CollectionUtils.isEmpty((Collection)((Collection)recordList.getData()))) { + this.logger.info("查询导出记录为空, businessId = {}, task = {}", (Object)task.getBusinessId(), (Object)task); + this.exportUpload(task.getBusinessId(), task.getFileId(), null); + return; + } + this.logger.info("导出记录总数为{}", (Object)((List)recordList.getData()).size()); + HashMap> dataMap = new HashMap>(); + dataMap.put(this.orgFileName, (List)recordList.getData()); + PersonProListResult personProListResult = new PersonProListResult(); + ArrayList properties = new ArrayList(); + ImgPersonProGetResult result1 = new ImgPersonProGetResult(); + result1.setId("1"); + result1.setName("机构名称"); + result1.setCode("name"); + result1.setStatus(Integer.valueOf(0)); + result1.setType(Short.valueOf((short)1)); + result1.setOrderNum(Integer.valueOf(1)); + result1.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result2 = new ImgPersonProGetResult(); + result2.setId("2"); + result2.setName("机构id"); + result2.setCode("id"); + result2.setStatus(Integer.valueOf(0)); + result2.setType(Short.valueOf((short)1)); + result2.setOrderNum(Integer.valueOf(2)); + result2.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result3 = new ImgPersonProGetResult(); + result3.setId("3"); + result3.setName("机构类型"); + result3.setCode("type"); + result3.setStatus(Integer.valueOf(0)); + result3.setType(Short.valueOf((short)1)); + result3.setOrderNum(Integer.valueOf(3)); + result3.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result4 = new ImgPersonProGetResult(); + result4.setId("4"); + result4.setName("人员数量"); + result4.setCode("personCount"); + result4.setStatus(Integer.valueOf(0)); + result4.setType(Short.valueOf((short)1)); + result4.setOrderNum(Integer.valueOf(4)); + result4.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result5 = new ImgPersonProGetResult(); + result5.setId("5"); + result5.setName("状态:0-已启用"); + result5.setCode("isDel"); + result5.setStatus(Integer.valueOf(0)); + result5.setType(Short.valueOf((short)1)); + result5.setOrderNum(Integer.valueOf(5)); + result5.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result6 = new ImgPersonProGetResult(); + result6.setId("6"); + result6.setName("门禁设备(在线)"); + result6.setCode("onlineDevices"); + result6.setStatus(Integer.valueOf(0)); + result6.setType(Short.valueOf((short)1)); + result6.setOrderNum(Integer.valueOf(6)); + result6.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result7 = new ImgPersonProGetResult(); + result7.setId("7"); + result7.setName("门禁设备(离线)"); + result7.setCode("offlineDevices"); + result7.setStatus(Integer.valueOf(0)); + result7.setType(Short.valueOf((short)1)); + result7.setOrderNum(Integer.valueOf(7)); + result7.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result8 = new ImgPersonProGetResult(); + result8.setId("8"); + result8.setName("派梯楼层权限"); + result8.setCode("floorNames"); + result8.setStatus(Integer.valueOf(0)); + result8.setType(Short.valueOf((short)1)); + result8.setOrderNum(Integer.valueOf(8)); + result8.setHasDefault(Integer.valueOf(1)); + properties.add(result1); + properties.add(result2); + properties.add(result3); + properties.add(result4); + properties.add(result5); + properties.add(result6); + properties.add(result7); + properties.add(result8); + personProListResult.setProperties(properties); + this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); + this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows()); + Path zipPath = new CommonAppExportFileByOrgHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult).process(); + int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); + if (status > 1) { + this.logger.info("下载中心已取消下载文件,fileId = {}", (Object)task.getFileId()); + this.exportUpload(task.getBusinessId(), task.getFileId(), null); + return; + } + this.exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); + } + catch (Exception e) { + this.logger.error("导出机构任务失败:{}", e); + this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); + throw new RuntimeException("执行导出机构信息任务异常"); + } + } + + @Async + public void executeLabel(ExportLabelTaskParam task, CloudwalkCallContext context) { + this.logger.info("开始执行标签信息导出功能"); + PageLabelParam pageLabelParam = new PageLabelParam(); + BeanUtils.copyProperties((Object)task, (Object)pageLabelParam); + try { + CloudwalkResult> recordList = this.getLabelData(pageLabelParam, context); + if (CollectionUtils.isEmpty((Collection)((Collection)recordList.getData()))) { + this.logger.info("查询导出记录为空, businessId = {}, task = {}", (Object)task.getBusinessId(), (Object)task); + this.exportUpload(task.getBusinessId(), task.getFileId(), null); + return; + } + this.logger.info("导出记录总数为{}", (Object)((List)recordList.getData()).size()); + HashMap> dataMap = new HashMap>(); + dataMap.put(this.labelFileName, (List)recordList.getData()); + PersonProListResult personProListResult = new PersonProListResult(); + ArrayList properties = new ArrayList(); + ImgPersonProGetResult result1 = new ImgPersonProGetResult(); + result1.setId("1"); + result1.setName("标签名称"); + result1.setCode("name"); + result1.setStatus(Integer.valueOf(0)); + result1.setType(Short.valueOf((short)1)); + result1.setOrderNum(Integer.valueOf(1)); + result1.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result2 = new ImgPersonProGetResult(); + result2.setId("2"); + result2.setName("标签id"); + result2.setCode("id"); + result2.setStatus(Integer.valueOf(0)); + result2.setType(Short.valueOf((short)1)); + result2.setOrderNum(Integer.valueOf(2)); + result2.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result3 = new ImgPersonProGetResult(); + result3.setId("3"); + result3.setName("标签编号"); + result3.setCode("code"); + result3.setStatus(Integer.valueOf(0)); + result3.setType(Short.valueOf((short)1)); + result3.setOrderNum(Integer.valueOf(3)); + result3.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result4 = new ImgPersonProGetResult(); + result4.setId("4"); + result4.setName("人员数量"); + result4.setCode("personCount"); + result4.setStatus(Integer.valueOf(0)); + result4.setType(Short.valueOf((short)1)); + result4.setOrderNum(Integer.valueOf(4)); + result4.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result5 = new ImgPersonProGetResult(); + result5.setId("5"); + result5.setName("标签类型:0-手动创建,1-应用初始,2-应用创建"); + result5.setCode("addType"); + result5.setStatus(Integer.valueOf(0)); + result5.setType(Short.valueOf((short)1)); + result5.setOrderNum(Integer.valueOf(5)); + result5.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result6 = new ImgPersonProGetResult(); + result6.setId("6"); + result6.setName("门禁设备(在线)"); + result6.setCode("onlineDevices"); + result6.setStatus(Integer.valueOf(0)); + result6.setType(Short.valueOf((short)1)); + result6.setOrderNum(Integer.valueOf(6)); + result6.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result7 = new ImgPersonProGetResult(); + result7.setId("7"); + result7.setName("门禁设备(离线)"); + result7.setCode("offlineDevices"); + result7.setStatus(Integer.valueOf(0)); + result7.setType(Short.valueOf((short)1)); + result7.setOrderNum(Integer.valueOf(7)); + result7.setHasDefault(Integer.valueOf(1)); + ImgPersonProGetResult result8 = new ImgPersonProGetResult(); + result8.setId("8"); + result8.setName("派梯楼层权限"); + result8.setCode("floorNames"); + result8.setStatus(Integer.valueOf(0)); + result8.setType(Short.valueOf((short)1)); + result8.setOrderNum(Integer.valueOf(8)); + result8.setHasDefault(Integer.valueOf(1)); + properties.add(result1); + properties.add(result2); + properties.add(result3); + properties.add(result4); + properties.add(result5); + properties.add(result6); + properties.add(result7); + properties.add(result8); + personProListResult.setProperties(properties); + this.logger.info("导出的字段属性为:{}", JSONObject.toJSON(properties)); + this.commonDownloadDataConfig.setExcelMaxRows(task.getExcelMaxRows()); + Path zipPath = new CommonAppExportFileByLabelHandler(task.getBusinessId(), this.fileName, task.getFileId(), dataMap, this.commonDownloadDataConfig, this.fileStorageManager, this.commonAppDownloadCenterService, personProListResult).process(); + int status = this.commonAppDownloadCenterService.queryDownloadStatus(task.getBusinessId(), task.getFileId()); + if (status > 1) { + this.logger.info("下载中心已取消下载文件,fileId = {}", (Object)task.getFileId()); + this.exportUpload(task.getBusinessId(), task.getFileId(), null); + return; + } + this.exportUpload(task.getBusinessId(), task.getFileId(), zipPath.toString()); + } + catch (Exception e) { + this.logger.error("导出标签任务失败:{}", e); + this.commonAppDownloadCenterService.finishDownload(task.getBusinessId(), task.getFileId(), null, null, FileStatusEnum.ERROR.getCode()); + throw new RuntimeException("执行导出标签信息任务异常"); + } + } + + private CloudwalkResult> getPersonData(QueryImgPersonParam queryImgPersonParam, CloudwalkCallContext cloudwalkCallContext) { + CloudwalkResult recordList = new CloudwalkResult(); + try { + recordList = this.imgStorePersonService.listByPage(queryImgPersonParam, cloudwalkCallContext); + } + catch (Exception e) { + this.logger.error("查询记录数据失败"); + } + return recordList; + } + + private CloudwalkResult> getOrgData(QueryOrganizationParam param, CloudwalkCallContext context) { + CloudwalkResult recordList = new CloudwalkResult(); + try { + recordList = this.organizationService.listByPage(param, context); + } + catch (Exception e) { + this.logger.error("查询机构记录数据失败"); + } + return recordList; + } + + private CloudwalkResult> getLabelData(PageLabelParam param, CloudwalkCallContext cloudwalkCallContext) { + CloudwalkResult recordList = new CloudwalkResult(); + try { + recordList = this.labelService.listByPage(param, cloudwalkCallContext); + } + catch (Exception e) { + this.logger.error("查询标签记录数据失败"); + } + return recordList; + } + + private void exportUpload(String businessId, String fileId, String zipPathStr) throws IOException { + try { + if (StringUtils.isNotBlank((CharSequence)zipPathStr)) { + this.uploadFile(businessId, fileId, zipPathStr); + } else { + byte[] data = Base64Utils.decodeFromString((String)"UEsDBBQACAgIAAuPmlAAAAAAAAAAAAAAAAAGAAAAZW1wdHkvAwBQSwcIAAAAAAIAAAAAAAAAUEsBAhQAFAAICAgAC4+aUAAAAAACAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAGVtcHR5L1BLBQYAAAAAAQABADQAAAA2AAAAAAA="); + this.uploadFile(businessId, fileId, data, data.length); + } + } + catch (Exception e) { + this.logger.error("将导出文件生成的zip上传到文件管理中心发生异常:{}", (Object)e.getMessage()); + throw new RuntimeException("将导出文件生成的zip上传到文件管理中心发生异常"); + } + finally { + this.logger.debug("删除压缩包:{}", (Object)zipPathStr); + File file = new File(zipPathStr); + if (file.exists()) { + Files.delete(file.toPath()); + } + } + } + + private void uploadFile(String businessId, String fileId, byte[] data, long fileSize) { + String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); + String name = new StringBuffer(uuidCode).append(this.commonDownloadDataConfig.getCompressionType()).toString(); + String filePath = this.commonAppStorageService.saveFileBySharding(name, data); + this.logger.info("存储文件名:fileId = {}, filePath = {}", (Object)fileId, (Object)filePath); + int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); + if (status == FileStatusEnum.PRODUCING.getCode() || status == FileStatusEnum.ERROR.getCode()) { + this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); + } else { + this.commonAppStorageService.deleteFile(filePath); + } + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + private void uploadFile(String businessId, String fileId, String zipPathStr) throws IOException { + try (ChannelFileReader reader = new ChannelFileReader(zipPathStr, this.shardingSize);){ + String uuidCode = UUID.randomUUID().toString().replaceAll("-", ""); + String name = new StringBuffer(uuidCode).append(this.commonDownloadDataConfig.getCompressionType()).toString(); + FilePartInitResult resp = this.iCommonAppFileManageService.filePartInit(name); + if (resp == null) { + this.logger.info("分片上传文件初始化返回值为空"); + return; + } + AtomicInteger i = new AtomicInteger(1); + long fileSize = 0L; + while (reader.read() != -1) { + this.logger.info("分片上传第{}次", (Object)i.get()); + fileSize += (long)reader.getArray().length; + this.uploadFileBySharding(reader.getArray(), resp.getFilePath(), resp.getUploadId(), this.fileName, String.valueOf(i.getAndAdd(1))); + } + String filePath = this.filePartFinish(fileSize, resp); + if (filePath == null) { + this.logger.info("分片上传文件完成接口返回值为空"); + return; + } + this.logger.info("分片上传文件完成接口返回值 filePath = {}", (Object)filePath); + this.logger.info("存储文件名:fileId = {}, filePath = {}", (Object)fileId, (Object)filePath); + int status = this.commonAppDownloadCenterService.queryDownloadStatus(businessId, fileId); + if (status == FileStatusEnum.PRODUCING.getCode() || status == FileStatusEnum.ERROR.getCode()) { + this.commonAppDownloadCenterService.finishDownload(businessId, fileId, filePath, Long.valueOf(fileSize), FileStatusEnum.FINISH.getCode()); + } else { + this.commonAppStorageService.deleteFile(filePath); + } + this.logger.info("完成上传任务 fileId = {}", (Object)fileId); + } + } + + private String filePartFinish(long fileSize, FilePartInitResult resp) { + FilePartFinishPara para = new FilePartFinishPara(); + BeanUtils.copyProperties((Object)resp, (Object)para); + para.setFileSize(Long.valueOf(fileSize)); + para.setReturnType(Integer.valueOf(0)); + return this.iCommonAppFileManageService.filePartFinish(para); + } + + private void uploadFileBySharding(byte[] bytes, String filePath, String uploadId, String fileName, String partNumber) { + MultipartFile mfile = MultipartFileUtils.getMultipartFile(fileName, bytes); + try { + PartInitResultDTO partInitResultDTO = this.filePartManager.append(filePath, Integer.valueOf(partNumber), uploadId, mfile); + } + catch (Exception e) { + this.logger.error("分片更新文件错误{}:{}", (Object)e.getClass().getName(), (Object)e.getMessage()); + } + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/export/CommonAppExportExecuteTask.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java index 6788a80d..bc805fc3 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/schedule/PersonBatchImportTask.java @@ -203,7 +203,7 @@ PersonBatchImportTask.BATCH_SEMAPHORE.release(); private void cleanFiles(BatchImportContext context) { try { FileUtils.deleteDirectory(context.getUnzipFolder()); -this.personFileService.delete(Lists.newArrayList((Object[])new String[] { context.getBatchImport().getFilePath() })); +this.personFileService.delete(Lists.newArrayList(context.getBatchImport().getFilePath() )); FileUtils.deleteQuietly(new File(this.tempPath, context.getBatchImport().getBatchNo() + ".zip")); } catch (Exception ex) { logger.error("", ex); diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppExportTaskServiceImpl.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppExportTaskServiceImpl.java index 4bf9cf5d..156c8282 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppExportTaskServiceImpl.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppExportTaskServiceImpl.java @@ -19,81 +19,85 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Service; + @Service @EnableAsync -public class CommonAppExportTaskServiceImpl extends AbstractImagStoreService implements ICommonAppExportTaskService { -private static final Logger log = LoggerFactory.getLogger(CommonAppExportTaskServiceImpl.class); -@Autowired -private ICommonAppDownloadCenterService commonAppDownloadCenterService; -@Autowired -private ImgStorePersonService imgStorePersonService; -@Autowired -private CommonAppExportExecuteTask commonAppExportExecuteTask; -@Autowired -private CommonDownloadDataConfig commonAppRecordDataConfig; -@Autowired -private ComponentInnerKafkaConfig componentInnerKafkaConfig; -String fileName = "人员信息"; -String orgFileName = "机构信息"; -String labelFileName = "标签信息"; -public String add(CloudwalkCallContext cloudwalkCallContext, ExportRecordTaskParam task) throws ServiceException { -String name = createFileName(this.fileName); -this.logger.info("创建下载任务,任务文件名称:name = {}", name); -updateCloudwalkContext(cloudwalkCallContext, task); -String fileId = this.commonAppDownloadCenterService.createDownload(cloudwalkCallContext, name, task.getBusinessId()); -task.setFileId(fileId); -task.setFileName(name); -this.commonAppExportExecuteTask.execute(task, cloudwalkCallContext); -return fileId; -} -public String addOrgExport(CloudwalkCallContext context, ExportOrgTaskParam task) throws ServiceException { -String name = createFileName(this.orgFileName); -this.logger.info("创建下载任务,任务文件名称:name = {}", name); -ExportRecordTaskParam taskParam = new ExportRecordTaskParam(); -taskParam.setBusinessId(task.getBusinessId()); -updateCloudwalkContext(context, taskParam); -String fileId = this.commonAppDownloadCenterService.createDownload(context, name, task.getBusinessId()); -task.setFileId(fileId); -task.setFileName(name); -this.commonAppExportExecuteTask.executeOrg(task, context); -return fileId; -} -public String addLabelExport(CloudwalkCallContext context, ExportLabelTaskParam task) throws ServiceException { -String name = createFileName(this.labelFileName); -this.logger.info("创建下载任务,任务文件名称:name = {}", name); -ExportRecordTaskParam taskParam = new ExportRecordTaskParam(); -taskParam.setBusinessId(task.getBusinessId()); -updateCloudwalkContext(context, taskParam); -String fileId = this.commonAppDownloadCenterService.createDownload(context, name, task.getBusinessId()); -task.setFileId(fileId); -task.setFileName(name); -this.commonAppExportExecuteTask.executeLabel(task, context); -return fileId; -} -private void updateCloudwalkContext(CloudwalkCallContext cloudwalkCallContext, ExportRecordTaskParam task) { -cloudwalkCallContext.setServiceCode(this.componentInnerKafkaConfig.getServiceCode()); -UserContext userContext = new UserContext(); -userContext.setCaller(cloudwalkCallContext.getUser().getCaller()); -userContext.setCallerName(cloudwalkCallContext.getUser().getCallerName()); -cloudwalkCallContext.setUser(userContext); -CompanyContext companyContext = new CompanyContext(); -companyContext.setCompanyId(task.getBusinessId()); -cloudwalkCallContext.setCompany(companyContext); -} -private String createFileName(String type) { -StringBuilder nameBuilder = new StringBuilder(); -LocalDateTime now = LocalDateTime.now(); -nameBuilder.append(type); -nameBuilder.append("_"); -nameBuilder.append(now.getYear()).append(now.getMonthValue()).append(now.getDayOfMonth()); -nameBuilder.append("_"); -nameBuilder.append(now.getHour()).append(now.getMinute()).append(now.getSecond()); -return nameBuilder.toString(); -} +public class CommonAppExportTaskServiceImpl +extends AbstractImagStoreService +implements ICommonAppExportTaskService { + private static final Logger log = LoggerFactory.getLogger(CommonAppExportTaskServiceImpl.class); + @Autowired + private ICommonAppDownloadCenterService commonAppDownloadCenterService; + @Autowired + private ImgStorePersonService imgStorePersonService; + @Autowired + private CommonAppExportExecuteTask commonAppExportExecuteTask; + @Autowired + private CommonDownloadDataConfig commonAppRecordDataConfig; + @Autowired + private ComponentInnerKafkaConfig componentInnerKafkaConfig; + String fileName = "人员信息"; + String orgFileName = "机构信息"; + String labelFileName = "标签信息"; + + public String add(CloudwalkCallContext cloudwalkCallContext, ExportRecordTaskParam task) throws ServiceException { + String name = this.createFileName(this.fileName); + this.logger.info("创建下载任务,任务文件名称:name = {}", (Object)name); + this.updateCloudwalkContext(cloudwalkCallContext, task); + String fileId = this.commonAppDownloadCenterService.createDownload(cloudwalkCallContext, name, task.getBusinessId()); + task.setFileId(fileId); + task.setFileName(name); + this.commonAppExportExecuteTask.execute(task, cloudwalkCallContext); + return fileId; + } + + public String addOrgExport(CloudwalkCallContext context, ExportOrgTaskParam task) throws ServiceException { + String name = this.createFileName(this.orgFileName); + this.logger.info("创建下载任务,任务文件名称:name = {}", (Object)name); + ExportRecordTaskParam taskParam = new ExportRecordTaskParam(); + taskParam.setBusinessId(task.getBusinessId()); + this.updateCloudwalkContext(context, taskParam); + String fileId = this.commonAppDownloadCenterService.createDownload(context, name, task.getBusinessId()); + task.setFileId(fileId); + task.setFileName(name); + this.commonAppExportExecuteTask.executeOrg(task, context); + return fileId; + } + + public String addLabelExport(CloudwalkCallContext context, ExportLabelTaskParam task) throws ServiceException { + String name = this.createFileName(this.labelFileName); + this.logger.info("创建下载任务,任务文件名称:name = {}", (Object)name); + ExportRecordTaskParam taskParam = new ExportRecordTaskParam(); + taskParam.setBusinessId(task.getBusinessId()); + this.updateCloudwalkContext(context, taskParam); + String fileId = this.commonAppDownloadCenterService.createDownload(context, name, task.getBusinessId()); + task.setFileId(fileId); + task.setFileName(name); + this.commonAppExportExecuteTask.executeLabel(task, context); + return fileId; + } + + private void updateCloudwalkContext(CloudwalkCallContext cloudwalkCallContext, ExportRecordTaskParam task) { + cloudwalkCallContext.setServiceCode(this.componentInnerKafkaConfig.getServiceCode()); + UserContext userContext = new UserContext(); + userContext.setCaller(cloudwalkCallContext.getUser().getCaller()); + userContext.setCallerName(cloudwalkCallContext.getUser().getCallerName()); + cloudwalkCallContext.setUser(userContext); + CompanyContext companyContext = new CompanyContext(); + companyContext.setCompanyId(task.getBusinessId()); + cloudwalkCallContext.setCompany(companyContext); + } + + private String createFileName(String type) { + StringBuilder nameBuilder = new StringBuilder(); + LocalDateTime now = LocalDateTime.now(); + nameBuilder.append(type); + nameBuilder.append("_"); + nameBuilder.append(now.getYear()).append(now.getMonthValue()).append(now.getDayOfMonth()); + nameBuilder.append("_"); + nameBuilder.append(now.getHour()).append(now.getMinute()).append(now.getSecond()); + return nameBuilder.toString(); + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/CommonAppExportTaskServiceImpl.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppFileManageServiceImpl.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppFileManageServiceImpl.java index 86c954b9..30078f67 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppFileManageServiceImpl.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CommonAppFileManageServiceImpl.java @@ -13,44 +13,47 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + @Service -public class CommonAppFileManageServiceImpl implements ICommonAppFileManageService { -private static final Logger log = LoggerFactory.getLogger(CommonAppFileManageServiceImpl.class); -@Autowired -private FilePartManager filePartManager; -public FilePartInitResult filePartInit(String fileName) { -FilePartInitResult result = new FilePartInitResult(); -PartInitDTO dto = new PartInitDTO(); -dto.setFileName(fileName); -PartInitResultDTO partInitResultDTO = new PartInitResultDTO(); -try { -partInitResultDTO = this.filePartManager.init(dto); -} catch (DavinciServiceException e) { -log.error("分片上传文件初始化接口错误 request = {}", fileName); -} -BeanUtils.copyProperties(partInitResultDTO, result); -return result; -} -public FilePartInitResult filePartAppend(FilePartAppendPara para) { -return null; -} -public String filePartFinish(FilePartFinishPara para) { -PartFinishDTO partFinishDTO = new PartFinishDTO(); -partFinishDTO.setFilePath(para.getFilePath()); -partFinishDTO.setFileSize(para.getFileSize()); -partFinishDTO.setReturnType(para.getReturnType()); -partFinishDTO.setUploadId(para.getUploadId()); -try { -return this.filePartManager.finish(partFinishDTO); -} catch (DavinciServiceException e) { -log.error("分片上传文件完成接口错误{}:{}", e.getClass().getName(), e.getMessage()); -return null; -} -} +public class CommonAppFileManageServiceImpl +implements ICommonAppFileManageService { + private static final Logger log = LoggerFactory.getLogger(CommonAppFileManageServiceImpl.class); + @Autowired + private FilePartManager filePartManager; + + public FilePartInitResult filePartInit(String fileName) { + FilePartInitResult result = new FilePartInitResult(); + PartInitDTO dto = new PartInitDTO(); + dto.setFileName(fileName); + PartInitResultDTO partInitResultDTO = new PartInitResultDTO(); + try { + partInitResultDTO = this.filePartManager.init(dto); + } + catch (DavinciServiceException e) { + log.error("分片上传文件初始化接口错误 request = {}", (Object)fileName); + } + BeanUtils.copyProperties((Object)partInitResultDTO, (Object)result); + return result; + } + + public FilePartInitResult filePartAppend(FilePartAppendPara para) { + return null; + } + + public String filePartFinish(FilePartFinishPara para) { + PartFinishDTO partFinishDTO = new PartFinishDTO(); + partFinishDTO.setFilePath(para.getFilePath()); + partFinishDTO.setFileSize(para.getFileSize()); + partFinishDTO.setReturnType(para.getReturnType()); + partFinishDTO.setUploadId(para.getUploadId()); + try { + return this.filePartManager.finish(partFinishDTO); + } + catch (DavinciServiceException e) { + log.error("分片上传文件完成接口错误{}:{}", (Object)((Object)((Object)e)).getClass().getName(), (Object)e.getMessage()); + return null; + } + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/CommonAppFileManageServiceImpl.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonServiceImpl.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonServiceImpl.java index 4b55fc5b..93cc60a1 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonServiceImpl.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonServiceImpl.java @@ -687,7 +687,7 @@ groupPersonRefParam.setGroupStatus(GroupModelStatusEnum.MODEL_WAIT.getCode()); } } } -this.groupPersonRefMapper.updateImageData(groupPersonRefParam, Lists.newArrayList((Object[])new String[] { imgStorePerson.getId() })); +this.groupPersonRefMapper.updateImageData(groupPersonRefParam, Lists.newArrayList(imgStorePerson.getId() )); } } public CloudwalkResult> page(QueryImageStorePersonParam queryParam, CloudwalkCallContext context) { diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonSynManager.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonSynManager.java index 454224f5..11d3f566 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonSynManager.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonSynManager.java @@ -106,9 +106,9 @@ handleGroupPersonSynTask(imageStoreId); public void addGroupPersonSynTask(String imageStoreId, String personId, boolean isAdd) { GroupPersonSynData groupPersonSynData = new GroupPersonSynData(); if (isAdd) { -groupPersonSynData.setAddPersonIds(Lists.newArrayList((Object[])new String[] { personId })); +groupPersonSynData.setAddPersonIds(Lists.newArrayList(personId )); } else { -groupPersonSynData.setDelPersonIds(Lists.newArrayList((Object[])new String[] { personId })); +groupPersonSynData.setDelPersonIds(Lists.newArrayList(personId )); } String jsonData = JsonUtils.toJson(groupPersonSynData); addWaitSynTask(imageStoreId, jsonData); @@ -138,7 +138,7 @@ Map imageStoreIdsMap = this.cpImageStorePersonManager.ge List imageStoreIds = Lists.newArrayList(imageStoreIdsMap.keySet()); if (Collections3.isNotEmpty(imageStoreIds)) { GroupPersonSynData groupPersonSynData = new GroupPersonSynData(); -groupPersonSynData.setAddPersonIds(Lists.newArrayList((Object[])new String[] { personId })); +groupPersonSynData.setAddPersonIds(Lists.newArrayList(personId )); String jsonData = JsonUtils.toJson(groupPersonSynData); for (String imageStoreId : imageStoreIds) { addWaitSynTask(imageStoreId, jsonData); @@ -171,7 +171,7 @@ List imageStoreIdsNeedDelete = Lists.newArrayList(imageStoreIdsBefore); this.logger.info("addGroupPersonSynTask - 新增图库待同步任务(更新人员注册照) imageStoreIdsAfter:{};imageStoreIdsNeedDelete: {}", imageStoreIds, imageStoreIdsNeedDelete); if (Collections3.isNotEmpty(imageStoreIdsNeedDelete)) { GroupPersonSynData groupPersonSynData = new GroupPersonSynData(); -groupPersonSynData.setDelPersonIds(Lists.newArrayList((Object[])new String[] { personId })); +groupPersonSynData.setDelPersonIds(Lists.newArrayList(personId )); String jsonData = JsonUtils.toJson(groupPersonSynData); for (String imageStoreId : imageStoreIdsNeedDelete) { addWaitSynTask(imageStoreId, jsonData); @@ -408,11 +408,11 @@ List syncPersonList = Lists.newArrayList(); if (StringUtils.isNotBlank(synData.getPersonId())) { this.logger.info("CpImageStorePersonSynManager handleImageStoreIncrementSyn 单人员更新注册照:{},{}", synData .getPersonId(), synData.getOldImageId()); -Map associatedPersonResultsAfterUpdate = this.cpImageStorePersonManager.getGroupPersonRefByPersons(waitSyncImageStore.getId(), Lists.newArrayList((Object[])new String[] { synData.getPersonId() })); -Map associatedPersonResultsBeforeUpdate = this.cpImageStorePersonManager.getOldAssociatedPersonIds(waitSyncImageStore.getId(), Lists.newArrayList((Object[])new String[] { synData.getPersonId() })); +Map associatedPersonResultsAfterUpdate = this.cpImageStorePersonManager.getGroupPersonRefByPersons(waitSyncImageStore.getId(), Lists.newArrayList(synData.getPersonId() )); +Map associatedPersonResultsBeforeUpdate = this.cpImageStorePersonManager.getOldAssociatedPersonIds(waitSyncImageStore.getId(), Lists.newArrayList(synData.getPersonId() )); GroupPersonRef refAfterUpdate = associatedPersonResultsAfterUpdate.get(synData.getPersonId()); if (refAfterUpdate != null) { -List associatedPersonExpiryDateAfterUpdate = this.imgStorePersonMapper.selectExpiryDateByIds(Lists.newArrayList((Object[])new String[] { synData.getPersonId() })); +List associatedPersonExpiryDateAfterUpdate = this.imgStorePersonMapper.selectExpiryDateByIds(Lists.newArrayList(synData.getPersonId() )); if (CollectionUtil.isNotEmpty(associatedPersonExpiryDateAfterUpdate)) { ImgStorePerson personExpiryDate = associatedPersonExpiryDateAfterUpdate.get(0); if (personExpiryDate.getExpiryBeginDate() != null || personExpiryDate.getExpiryEndDate() != null) { diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonTxHandler.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonTxHandler.java index 0a4467d6..b1720eff 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonTxHandler.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonTxHandler.java @@ -228,7 +228,7 @@ this.groupPersonRefMapper.logicDeleteExpireNullByParam(deleteParam); } for (String deleteImageStoreId : imageStoreIdsNeedDelete) { handleImageStoreImageChange(deleteImageStoreId, -Sets.newHashSet((Object[])new String[] { imgStorePerson.getImageId() }), false); +Sets.newHashSet(imgStorePerson.getImageId() ), false); } } @Async("handleImageTaskExecutor") diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonValidateManager.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonValidateManager.java index a064cf9d..0070567b 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonValidateManager.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStorePersonValidateManager.java @@ -1,14 +1,24 @@ package cn.cloudwalk.service.organization.service; // 业务服务 + import cn.cloudwalk.client.organization.service.store.utils.SnowFlake; import cn.cloudwalk.data.organization.dto.QueryGroupPersonDTO; import cn.cloudwalk.data.organization.dto.SyncPersonDTO; import cn.cloudwalk.data.organization.entity.GroupPersonRef; +import cn.cloudwalk.data.organization.mapper.GroupPersonRefMapper; import cn.cloudwalk.service.organization.common.JsonUtils; +import cn.cloudwalk.service.organization.service.CpImageStorePersonTxHandler; +import cn.cloudwalk.service.organization.service.CpImageStoreSyncManager; import cn.cloudwalk.service.organization.utils.BeanCopyUtils; +import cn.cloudwalk.task.sdk.client.TaskExecClient; +import cn.cloudwalk.task.sdk.starter.config.init.properties.QuartzTaskProperties; import cn.hutool.core.collection.ConcurrentHashSet; +import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.Iterator; @@ -18,499 +28,577 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; +import org.springframework.data.redis.core.RedisCallback; +import javax.annotation.Resource; import org.apache.commons.lang3.StringUtils; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerBuilder; import org.quartz.TriggerKey; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; -import org.springframework.dao.DataAccessException; -import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.ReturnType; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; + @Service public class CpImageStorePersonValidateManager { -private static final Logger log = LoggerFactory.getLogger(CpImageStorePersonValidateManager.class); -private final String VALIDATE_JOB_GROUP_LOCK = "validate_job_group_lock:"; -@Value("${group-person.syn.config.lock-validate-job-group-second:30}") -private String lockValidateJobGroupSecond; -@Value("${group-person.syn.config.lock-validate-job-group-time-out:120}") -private String lockValidateJobGroupTimeOut; -@Value("${group-person.syn.config.delay-add-validate-data:false}") -private Boolean delayAddValidateData; -@Value("${group-person.syn.config.delay-add-validate-hour:48}") -private Long delayAddValidateHour; -@Autowired -private QuartzTaskProperties quartzTaskProperties; -@Autowired -private TaskExecClient taskExecClient; -@Autowired -private CpImageStorePersonTxHandler cpImageStorePersonTxHandler; -@Autowired -private CpImageStoreSyncManager cpImageStoreSyncManager; -@Autowired -private StringRedisTemplate redisTemplate; -@Autowired -private DefaultRedisScript lockValidateJobRedisScript; -@Autowired -private DefaultRedisScript unlockValidateJobRedisScript; -@Resource -private GroupPersonRefMapper groupPersonRefMapper; -public void addValidateData(List syncPersonList) { -log.info("bind接口service 查询syncPersonList:{}", JSONObject.toJSONString(syncPersonList)); -ConcurrentHashSet concurrentHashSet = new ConcurrentHashSet(); -Map> addMap = new ConcurrentHashMap<>(); -Map> removeMap = new ConcurrentHashMap<>(); -ConcurrentHashSet concurrentHashSet1 = new ConcurrentHashSet(); -Set changeGroupIdSet = Sets.newHashSet(); -long currentTime = System.currentTimeMillis(); -syncPersonList.parallelStream().forEach(syncPersonDTO -> { -syncPersonDTO.setOldExpiryBeginDate(Optional.ofNullable(syncPersonDTO.getOldExpiryBeginDate()).orElse(null)); -syncPersonDTO.setOldExpiryEndDate(Optional.ofNullable(syncPersonDTO.getOldExpiryEndDate()).orElse(null)); -syncPersonDTO.setNewExpiryBeginDate(Optional.ofNullable(syncPersonDTO.getNewExpiryBeginDate()).orElse(null)); -syncPersonDTO.setNewExpiryEndDate(Optional.ofNullable(syncPersonDTO.getNewExpiryEndDate()).orElse(null)); -changeGroupIdSet.add(syncPersonDTO.getImageStoreId()); -int action = syncPersonDTO.getAction(); -switch (action) { -case -1: -delDataManager(currentTime, syncPersonDTO, deleteSet, removeMap, addMap); -break; -case 0: -addDataManager(currentTime, syncPersonDTO, addSet, removeMap, addMap); -break; -case 1: -updateDataManage(currentTime, syncPersonDTO, deleteSet, addSet, removeMap, addMap); -break; -} -}); -Iterator iterator = concurrentHashSet1.iterator(); -while (iterator.hasNext()) { -SyncPersonDTO syncPersonDTO = iterator.next(); -if (concurrentHashSet.contains(syncPersonDTO)) { -concurrentHashSet.remove(syncPersonDTO); -iterator.remove(); continue; -} if (StringUtils.isBlank(syncPersonDTO.getImageId())) { -iterator.remove(); -} -} -Scheduler scheduler = this.taskExecClient.getScheduler(this.quartzTaskProperties.getSchedulerName()); -for (Map.Entry> entry : removeMap.entrySet()) { -Long key = entry.getKey(); -Long lockValue = Long.valueOf(SnowFlake.nextId()); -try { if (validateJobGroupLock(key, lockValue)) -{ TriggerKey triggerKey = TriggerKey.triggerKey(key.toString(), "QZ_PERSON_VALIDATE_JOB"); -Trigger trigger = scheduler.getTrigger(triggerKey); -if (trigger == null) -{ -validateJobGroupUnLock(key, lockValue); continue; } String dataSet = trigger.getJobDataMap().getString("VALIDATE_TRIGGER_KEY"); if (StringUtils.isNotBlank(dataSet)) { List syncPersonDTOS = JsonUtils.toObjList(dataSet, SyncPersonLocal.class); syncPersonDTOS = removeAll(syncPersonDTOS, entry.getValue()); if (addMap.containsKey(key)) { Set keyAddSet = addMap.get(key); syncPersonDTOS = addAll(syncPersonDTOS, keyAddSet); addMap.remove(key); } trigger.getJobDataMap().put("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(syncPersonDTOS)); scheduler.rescheduleJob(triggerKey, trigger); } } else { log.error("CpImageStorePersonValidateManager addValidateData removeJob time out"); } } catch (SchedulerException e) { log.error("获取trigger异常:{}", e.getLocalizedMessage()); } catch (Exception e) { log.error("移除trigger未知异常:{}", e.getMessage()); } finally { validateJobGroupUnLock(key, lockValue); } -} -for (Map.Entry> entry : addMap.entrySet()) { -if (!((Set)entry.getValue()).isEmpty()) { -Long key = entry.getKey(); -Long lockValue = Long.valueOf(SnowFlake.nextId()); -Long addValidateTime = Long.valueOf(currentTime + this.delayAddValidateHour.longValue() * 60L * 60L * 1000L); -if (this.delayAddValidateData.booleanValue() && key.longValue() > addValidateTime.longValue()) { -continue; -} -try { -if (validateJobGroupLock(key, lockValue)) { -TriggerKey triggerKey = TriggerKey.triggerKey(key.toString(), "QZ_PERSON_VALIDATE_JOB"); -Trigger trigger = scheduler.getTrigger(triggerKey); -if (trigger == null) { -trigger = TriggerBuilder.newTrigger().withIdentity(key.toString(), "QZ_PERSON_VALIDATE_JOB").withDescription("trigger at:" + key).forJob("PERSON_VALIDATE_JOB_NAME", "QZ_PERSON_VALIDATE_JOB").startAt(new Date(key.longValue())).usingJobData("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(entry.getValue())).build(); -scheduler.scheduleJob(trigger); -} else { -String dataSet = trigger.getJobDataMap().getString("VALIDATE_TRIGGER_KEY"); -if (StringUtils.isNotBlank(dataSet)) { -syncPersonDtoList = JsonUtils.toObjList(dataSet, SyncPersonLocal.class); -} else { -syncPersonDtoList = Lists.newArrayList(); -} -List syncPersonDtoList = addAll(syncPersonDtoList, entry.getValue()); -trigger.getJobDataMap().put("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(syncPersonDtoList)); -scheduler.rescheduleJob(triggerKey, trigger); -} -} else { -log.error("CpImageStorePersonValidateManager addValidateData addOrModJob time out"); -} -} catch (SchedulerException e) { -log.error("添加trigger异常:{}", e.getLocalizedMessage()); -} catch (Exception e) { -log.error("添加trigger未知异常:{}", e.getMessage()); -} finally { -validateJobGroupUnLock(key, lockValue); -} -} -} -updateExpiryDateStatus(Long.valueOf(currentTime), syncPersonList); -Map> deleteImageMap = (Map>)concurrentHashSet.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); -for (Map.Entry> entry : deleteImageMap.entrySet()) { -Set keySet = (Set)((List)entry.getValue()).parallelStream().map(SyncPersonDTO::getImageId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, false); -} -Map> addImageMap = (Map>)concurrentHashSet1.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); -for (Map.Entry> entry : addImageMap.entrySet()) { -Set keySet = (Set)((List)entry.getValue()).parallelStream().map(SyncPersonDTO::getImageId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, true); -} -this.cpImageStoreSyncManager.sendChangeToDevice(changeGroupIdSet, false); -} -private void updateExpiryDateStatus(Long currentTime, List syncPersonList) { -GroupPersonRef groupPersonRef = new GroupPersonRef(); -syncPersonList.stream().forEach(syncPerson -> { -Long addValidateTime = Long.valueOf(currentTime.longValue() + this.delayAddValidateHour.longValue() * 60L * 60L * 1000L); -groupPersonRef.setId(syncPerson.getGroupPersonRefId()); -groupPersonRef.setExpiryBeginDateStatus(Integer.valueOf(1)); -if (this.delayAddValidateData.booleanValue() && null != syncPerson.getNewExpiryBeginDate() && syncPerson.getNewExpiryBeginDate().longValue() > addValidateTime.longValue()) { -groupPersonRef.setExpiryBeginDateStatus(Integer.valueOf(0)); -} -groupPersonRef.setExpiryEndDateStatus(Integer.valueOf(1)); -if (this.delayAddValidateData.booleanValue() && null != syncPerson.getNewExpiryEndDate() && syncPerson.getNewExpiryEndDate().longValue() > addValidateTime.longValue()) { -groupPersonRef.setExpiryEndDateStatus(Integer.valueOf(0)); -} -Set ids = new HashSet<>(); -ids.add(groupPersonRef.getId()); -this.groupPersonRefMapper.updateStatusByIds(groupPersonRef, ids); -}); -} -private boolean validateJobGroupLock(Long key, Long lockValue) { -Long start = Long.valueOf(System.currentTimeMillis()); -log.info("CpImageStorePersonValidateManager validateJobGroupLock:{},{},{}", new Object[] { key, lockValue, start }); -String lockKey = "validate_job_group_lock:" + key; -while (true) { -Long lockResult = (Long)this.redisTemplate.execute(connection -> (Long)connection.eval(this.lockValidateJobRedisScript.getScriptAsString().getBytes(), ReturnType.INTEGER, 0, new byte[][] { lockKey.getBytes(), String.valueOf(lockValue).getBytes(), this.lockValidateJobGroupSecond.getBytes() })); -if (0L == lockResult.longValue()) { -log.info("CpImageStorePersonValidateManager validateJobGroupLock success:{}", key); -return true; -} -long waitTime = System.currentTimeMillis() - start.longValue(); -log.info("CpImageStorePersonValidateManager validateJobGroupLock wait:{},{}", key, Long.valueOf(waitTime)); -if (waitTime >= Long.valueOf(this.lockValidateJobGroupTimeOut).longValue()) { -log.info("CpImageStorePersonValidateManager validateJobGroupLock wait out:{}", key); -return false; -} -try { -Thread.sleep(100L); -} catch (InterruptedException e) { -log.error("CpImageStorePersonValidateManager validateJobGroupLock sleep error:", e); -Thread.currentThread().interrupt(); -} -} -} -private boolean validateJobGroupUnLock(Long key, Long lockValue) { -log.info("CpImageStorePersonValidateManager validateJobGroupUnLock:{},{}", key, lockValue); -String lockKey = "validate_job_group_lock:" + key; -Long lockResult = (Long)this.redisTemplate.execute(connection -> (Long)connection.eval(this.unlockValidateJobRedisScript.getScriptAsString().getBytes(), ReturnType.INTEGER, 0, new byte[][] { lockKey.getBytes(), String.valueOf(lockValue).getBytes() })); -if (0L == lockResult.longValue()) { -log.info("CpImageStorePersonValidateManager validateJobGroupUnLock success:{},{}", key, lockValue); -return true; -} -log.error("CpImageStorePersonValidateManager validateJobGroupUnLock fail:{},{}", key, lockValue); -return false; -} -private void delDataManager(long currentTime, SyncPersonDTO syncPersonDTO, Set deleteSet, Map> removeMap, Map> addMap) { -Long oldExpiryBeginDate = syncPersonDTO.getOldExpiryBeginDate(); -Long oldExpiryEndDate = syncPersonDTO.getOldExpiryEndDate(); -Long newExpiryBeginDate = syncPersonDTO.getNewExpiryBeginDate(); -Long newExpiryEndDate = syncPersonDTO.getNewExpiryEndDate(); -deleteSet.add(syncPersonDTO); -if (oldExpiryBeginDate != null) { -Set removeAddSet = removeMap.computeIfAbsent(oldExpiryBeginDate, k -> new ConcurrentHashSet()); -removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO -.getImageId(), 0)); -} -if (oldExpiryEndDate != null) { -Set removeEndSet = removeMap.computeIfAbsent(oldExpiryEndDate, k -> new ConcurrentHashSet()); -removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO -.getImageId(), -1)); -} -if (newExpiryBeginDate != null && newExpiryBeginDate.longValue() > currentTime) { -Set timeSet = addMap.computeIfAbsent(newExpiryBeginDate, k -> new ConcurrentHashSet()); -timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); -} -if (newExpiryEndDate != null && newExpiryEndDate.longValue() > currentTime) { -Set timeSet = addMap.computeIfAbsent(newExpiryEndDate, k -> new ConcurrentHashSet()); -timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); -} -} -private void addDataManager(long currentTime, SyncPersonDTO syncPersonDTO, Set addSet, Map> removeMap, Map> addMap) { -Long oldExpiryBeginDate = syncPersonDTO.getOldExpiryBeginDate(); -Long oldExpiryEndDate = syncPersonDTO.getOldExpiryEndDate(); -Long newExpiryBeginDate = syncPersonDTO.getNewExpiryBeginDate(); -Long newExpiryEndDate = syncPersonDTO.getNewExpiryEndDate(); -if (newExpiryBeginDate == null || newExpiryBeginDate.longValue() <= currentTime) { -addSet.add(syncPersonDTO); -} else { -Set timeSet = addMap.computeIfAbsent(newExpiryBeginDate, k -> new ConcurrentHashSet()); -timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); -} -if (newExpiryEndDate != null && newExpiryEndDate.longValue() <= currentTime) { -addSet.remove(syncPersonDTO); -} else if (newExpiryEndDate != null) { -Set timeSet = addMap.computeIfAbsent(newExpiryEndDate, k -> new ConcurrentHashSet()); -timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); -} -if (oldExpiryBeginDate != null) { -Set removeAddSet = removeMap.computeIfAbsent(oldExpiryBeginDate, k -> new ConcurrentHashSet()); -removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO -.getImageId(), 0)); -} -if (oldExpiryEndDate != null) { -Set removeEndSet = removeMap.computeIfAbsent(oldExpiryEndDate, k -> new ConcurrentHashSet()); -removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO -.getImageId(), -1)); -} -} -private void updateDataManage(long currentTime, SyncPersonDTO syncPersonDTO, Set deleteSet, Set addSet, Map> removeMap, Map> addMap) { -String oldImageId = syncPersonDTO.getOldImageId(); -Long oldExpiryBeginDate = syncPersonDTO.getOldExpiryBeginDate(); -Long oldExpiryEndDate = syncPersonDTO.getOldExpiryEndDate(); -Long newExpiryBeginDate = syncPersonDTO.getNewExpiryBeginDate(); -Long newExpiryEndDate = syncPersonDTO.getNewExpiryEndDate(); -boolean addFlag = ((newExpiryBeginDate == null || newExpiryBeginDate.longValue() <= currentTime) && (newExpiryEndDate == null || newExpiryEndDate.longValue() > currentTime)); -if (addFlag) { -addSet.add(syncPersonDTO); -} -if (StringUtils.isNotBlank(oldImageId)) { -SyncPersonDTO delDto = new SyncPersonDTO(); -BeanCopyUtils.copyProperties(syncPersonDTO, delDto); -delDto.setImageId(oldImageId); -deleteSet.add(delDto); -} else { -boolean delFlag = (StringUtils.isBlank(oldImageId) && (oldExpiryBeginDate == null || oldExpiryBeginDate.longValue() <= currentTime) && (oldExpiryEndDate == null || oldExpiryEndDate.longValue() > currentTime)); -if (delFlag) { -deleteSet.add(syncPersonDTO); -} -} -if (oldExpiryBeginDate != null) { -Set removeAddSet = removeMap.computeIfAbsent(oldExpiryBeginDate, k -> new ConcurrentHashSet()); -if (StringUtils.isNotBlank(oldImageId)) { -removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), oldImageId, 0)); -} else { -removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO -.getImageId(), 0)); -} -} -if (oldExpiryEndDate != null) { -Set removeEndSet = removeMap.computeIfAbsent(oldExpiryEndDate, k -> new ConcurrentHashSet()); -if (StringUtils.isNotBlank(oldImageId)) { -removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), oldImageId, -1)); -} else { -removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO -.getImageId(), -1)); -} -} -if (newExpiryBeginDate != null && newExpiryBeginDate.longValue() > currentTime) { -Set timeSet = addMap.computeIfAbsent(newExpiryBeginDate, k -> new ConcurrentHashSet()); -timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); -} -if (newExpiryEndDate != null && newExpiryEndDate.longValue() > currentTime) { -Set timeSet = addMap.computeIfAbsent(newExpiryEndDate, k -> new ConcurrentHashSet()); -timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); -} -} private static class SyncPersonLocal { -private String groupPersonRefId; private String imageStoreId; private String imageId; private int action; -public void setGroupPersonRefId(String groupPersonRefId) { this.groupPersonRefId = groupPersonRefId; } public void setImageStoreId(String imageStoreId) { this.imageStoreId = imageStoreId; } public void setImageId(String imageId) { this.imageId = imageId; } public void setAction(int action) { this.action = action; } public String toString() { return "CpImageStorePersonValidateManager.SyncPersonLocal(groupPersonRefId=" + getGroupPersonRefId() + ", imageStoreId=" + getImageStoreId() + ", imageId=" + getImageId() + ", action=" + getAction() + ")"; } -public SyncPersonLocal() {} -public SyncPersonLocal(String groupPersonRefId, String imageStoreId, String imageId, int action) { -this.groupPersonRefId = groupPersonRefId; -this.imageStoreId = imageStoreId; -this.imageId = imageId; -this.action = action; -} -public String getGroupPersonRefId() { -return this.groupPersonRefId; -} public String getImageStoreId() { -return this.imageStoreId; -} public String getImageId() { -return this.imageId; -} -public int getAction() { -return this.action; -} -public boolean equals(Object o) { -if (o == this) { -return true; -} -if (!(o instanceof SyncPersonLocal)) { -return false; -} -SyncPersonLocal other = (SyncPersonLocal)o; -return (getAction() == other.getAction() && (( -getGroupPersonRefId() == null && other.getGroupPersonRefId() == null) || (getGroupPersonRefId() != null && getGroupPersonRefId().equals(other.getGroupPersonRefId()))) && (( -getImageId() == null && other.getImageId() == null) || (getImageId() != null && getImageId().equals(other.getImageId()))) && (( -getImageStoreId() == null && other.getImageStoreId() == null) || (getImageStoreId() != null && getImageStoreId().equals(other.getImageStoreId())))); -} -public int hashCode() { -return super.hashCode(); -} -} -public void syncDataToGroup(String dataJson) { -log.info("CpImageStorePersonValidateManager syncDataToGroup start dataJson:{}", dataJson); -List syncPersonDTOS = JsonUtils.toObjList(dataJson, SyncPersonLocal.class); -Map> map = (Map>)syncPersonDTOS.parallelStream().collect(Collectors.groupingBy(SyncPersonLocal::getAction)); -List addList = map.get(Integer.valueOf(0)); -List deleteList = map.get(Integer.valueOf(-1)); -if (!CollectionUtils.isEmpty(deleteList)) { -Map> deleteMap = (Map>)deleteList.parallelStream().collect(Collectors.groupingBy(SyncPersonLocal::getImageStoreId)); -for (Map.Entry> entry : deleteMap.entrySet()) { -Set keySet = (Set)((List)entry.getValue()).parallelStream().map(SyncPersonLocal::getImageId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, false); -} -} -if (!CollectionUtils.isEmpty(addList)) { -Map> addMap = (Map>)addList.parallelStream().collect(Collectors.groupingBy(SyncPersonLocal::getImageStoreId)); -for (Map.Entry> entry : addMap.entrySet()) { -Set keySet = (Set)((List)entry.getValue()).parallelStream().map(SyncPersonLocal::getImageId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, true); -} -} -if (!CollectionUtils.isEmpty(addList)) { -Set addRefIds = (Set)addList.parallelStream().map(SyncPersonLocal::getGroupPersonRefId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.updateGroupPersonRefStatus((short)0, addRefIds); -} -if (!CollectionUtils.isEmpty(deleteList)) { -Set deleteRefIds = (Set)deleteList.parallelStream().map(SyncPersonLocal::getGroupPersonRefId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.updateGroupPersonRefStatus((short)1, deleteRefIds); -} -if (!CollectionUtils.isEmpty(syncPersonDTOS)) { -Set changeGroupIdSet = (Set)syncPersonDTOS.parallelStream().map(SyncPersonLocal::getImageStoreId).collect(Collectors.toSet()); -this.cpImageStoreSyncManager -.sendChangeToDevice(changeGroupIdSet, true); -} -log.info("CpImageStorePersonValidateManager syncDataToGroup end"); -} -private static List removeAll(List list, Set set) { -if (set != null && !set.isEmpty()) { -Iterator it = set.iterator(); -while (it.hasNext()) { -list.remove(it.next()); -} -} -return list; -} -private static List addAll(List list, Set set) { -if (!CollectionUtils.isEmpty(set)) { -Iterator it = set.iterator(); -while (it.hasNext()) { -list.add(it.next()); -} -} -return list; -} -public void delayAddValidateTrigger() { -if (!this.delayAddValidateData.booleanValue()) { -log.debug("DelayPersonValidateTask 未开启延迟添加定时任务开关"); -return; -} -Long currentTime = Long.valueOf(System.currentTimeMillis()); -Long delayTime = Long.valueOf(currentTime.longValue() + this.delayAddValidateHour.longValue() * 60L * 60L * 1000L); -QueryGroupPersonDTO queryGroupPersonDTO = new QueryGroupPersonDTO(); -queryGroupPersonDTO.setStartTime(currentTime); -queryGroupPersonDTO.setEndTime(delayTime); -queryGroupPersonDTO.setExpiryBeginDateStatus(Integer.valueOf(0)); -queryGroupPersonDTO.setExpiryEndDateStatus(Integer.valueOf(0)); -List waitAddValidateList = this.groupPersonRefMapper.queryByExpiryDateStatus(queryGroupPersonDTO); -if (CollectionUtils.isEmpty(waitAddValidateList)) { -log.debug("[{}-{}]时间范围内没有需要添加的trigger", queryGroupPersonDTO.getStartTime(), queryGroupPersonDTO.getEndTime()); -} -Map> addMap = new ConcurrentHashMap<>(); -ConcurrentHashSet concurrentHashSet = new ConcurrentHashSet(); -ConcurrentHashSet concurrentHashSet1 = new ConcurrentHashSet(); -Set changeGroupIdSet = Sets.newHashSet(); -List syncPersonList = Lists.newArrayListWithCapacity(waitAddValidateList.size()); -waitAddValidateList = (List)waitAddValidateList.stream().sorted(Comparator.comparing(GroupPersonRef::getExpiryBeginDate)).collect( -Collectors.toList()); -waitAddValidateList.stream().forEach(waitAddValidate -> { -waitAddValidate.setExpiryBeginDate(Optional.ofNullable(waitAddValidate.getExpiryBeginDate()).orElse(null)); -waitAddValidate.setExpiryEndDate(Optional.ofNullable(waitAddValidate.getExpiryEndDate()).orElse(null)); -changeGroupIdSet.add(waitAddValidate.getImageStoreId()); -if (waitAddValidate.getExpiryBeginDateStatus().intValue() == 0) { -SyncPersonDTO addSyncPersonDTO = this.cpImageStorePersonTxHandler.generateSyncPersonDTO(waitAddValidate, 0, null, null); -syncPersonList.add(addSyncPersonDTO); -if (waitAddValidate.getExpiryBeginDate().longValue() <= currentTime.longValue()) { -addSet.add(addSyncPersonDTO); -} else if (waitAddValidate.getExpiryBeginDate().longValue() <= delayTime.longValue()) { -Set timeSet = addMap.computeIfAbsent(waitAddValidate.getExpiryBeginDate(), k -> new HashSet<>()); -timeSet.add(new SyncPersonLocal(addSyncPersonDTO.getGroupPersonRefId(), addSyncPersonDTO.getImageStoreId(), addSyncPersonDTO.getImageId(), 0)); -} -} -if (waitAddValidate.getExpiryEndDateStatus().intValue() == 0) { -SyncPersonDTO deleteSyncPersonDTO = this.cpImageStorePersonTxHandler.generateSyncPersonDTO(waitAddValidate, -1, null, null); -syncPersonList.add(deleteSyncPersonDTO); -if (waitAddValidate.getExpiryEndDate().longValue() <= currentTime.longValue()) { -deleteSet.add(deleteSyncPersonDTO); -} else if (waitAddValidate.getExpiryEndDate().longValue() <= delayTime.longValue()) { -Set timeSet = addMap.computeIfAbsent(waitAddValidate.getExpiryEndDate(), k -> new HashSet<>()); -timeSet.add(new SyncPersonLocal(deleteSyncPersonDTO.getGroupPersonRefId(), deleteSyncPersonDTO.getImageStoreId(), deleteSyncPersonDTO.getImageId(), -1)); -} -} -}); -Iterator iterator = concurrentHashSet.iterator(); -while (iterator.hasNext()) { -SyncPersonDTO syncPersonDTO = iterator.next(); -if (concurrentHashSet1.contains(syncPersonDTO)) { -concurrentHashSet1.remove(syncPersonDTO); -iterator.remove(); continue; -} if (StringUtils.isBlank(syncPersonDTO.getImageId())) { -iterator.remove(); -} -} -Scheduler scheduler = this.taskExecClient.getScheduler(this.quartzTaskProperties.getSchedulerName()); -for (Map.Entry> entry : addMap.entrySet()) { -if (!((Set)entry.getValue()).isEmpty()) { -Long key = entry.getKey(); -Long lockValue = Long.valueOf(SnowFlake.nextId()); -try { -if (validateJobGroupLock(key, lockValue)) { -TriggerKey triggerKey = TriggerKey.triggerKey(key.toString(), "QZ_PERSON_VALIDATE_JOB"); -Trigger trigger = scheduler.getTrigger(triggerKey); -if (trigger == null) { -trigger = TriggerBuilder.newTrigger().withIdentity(key.toString(), "QZ_PERSON_VALIDATE_JOB").withDescription("trigger at:" + key).forJob("PERSON_VALIDATE_JOB_NAME", "QZ_PERSON_VALIDATE_JOB").startAt(new Date(key.longValue())).usingJobData("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(entry.getValue())).build(); -scheduler.scheduleJob(trigger); -} else { -String dataSet = trigger.getJobDataMap().getString("VALIDATE_TRIGGER_KEY"); -if (StringUtils.isNotBlank(dataSet)) { -syncPersonDtoList = JsonUtils.toObjList(dataSet, SyncPersonLocal.class); -} else { -syncPersonDtoList = Lists.newArrayList(); -} -List syncPersonDtoList = addAll(syncPersonDtoList, entry.getValue()); -trigger.getJobDataMap().put("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(syncPersonDtoList)); -scheduler.rescheduleJob(triggerKey, trigger); -} -} else { -log.error("CpImageStorePersonValidateManager addValidateData addOrModJob time out"); -} -} catch (SchedulerException e) { -log.error("添加trigger异常:{}", e.getLocalizedMessage()); -} catch (Exception e) { -log.error("添加trigger未知异常:{}", e.getMessage()); -} finally { -validateJobGroupUnLock(key, lockValue); -} -} -} -updateExpiryDateStatus(currentTime, syncPersonList); -Map> deleteImageMap = (Map>)concurrentHashSet1.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); -for (Map.Entry> entry : deleteImageMap.entrySet()) { -Set keySet = (Set)((List)entry.getValue()).parallelStream().map(SyncPersonDTO::getImageId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, false); -} -Map> addImageMap = (Map>)concurrentHashSet.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); -for (Map.Entry> entry : addImageMap.entrySet()) { -Set keySet = (Set)((List)entry.getValue()).parallelStream().map(SyncPersonDTO::getImageId).collect(Collectors.toSet()); -this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, true); -} -this.cpImageStoreSyncManager.sendChangeToDevice(changeGroupIdSet, false); -} + private static final Logger log = LoggerFactory.getLogger(CpImageStorePersonValidateManager.class); + private final String VALIDATE_JOB_GROUP_LOCK = "validate_job_group_lock:"; + @Value(value="${group-person.syn.config.lock-validate-job-group-second:30}") + private String lockValidateJobGroupSecond; + @Value(value="${group-person.syn.config.lock-validate-job-group-time-out:120}") + private String lockValidateJobGroupTimeOut; + @Value(value="${group-person.syn.config.delay-add-validate-data:false}") + private Boolean delayAddValidateData; + @Value(value="${group-person.syn.config.delay-add-validate-hour:48}") + private Long delayAddValidateHour; + @Autowired + private QuartzTaskProperties quartzTaskProperties; + @Autowired + private TaskExecClient taskExecClient; + @Autowired + private CpImageStorePersonTxHandler cpImageStorePersonTxHandler; + @Autowired + private CpImageStoreSyncManager cpImageStoreSyncManager; + @Autowired + private StringRedisTemplate redisTemplate; + @Autowired + private DefaultRedisScript lockValidateJobRedisScript; + @Autowired + private DefaultRedisScript unlockValidateJobRedisScript; + @Resource + private GroupPersonRefMapper groupPersonRefMapper; + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void addValidateData(List syncPersonList) { + Long lockValue; + log.info("bind接口service 查询syncPersonList:{}", (Object)JSONObject.toJSONString(syncPersonList)); + ConcurrentHashSet deleteSet = new ConcurrentHashSet(); + ConcurrentHashMap addMap = new ConcurrentHashMap(); + ConcurrentHashMap removeMap = new ConcurrentHashMap(); + ConcurrentHashSet addSet = new ConcurrentHashSet(); + HashSet changeGroupIdSet = Sets.newHashSet(); + long currentTime = System.currentTimeMillis(); + syncPersonList.parallelStream().forEach(arg_0 -> this.lambda$addValidateData$4(changeGroupIdSet, currentTime, (Set)deleteSet, removeMap, addMap, (Set)addSet, arg_0)); + Iterator iterator = addSet.iterator(); + while (iterator.hasNext()) { + SyncPersonDTO syncPersonDTO = (SyncPersonDTO)iterator.next(); + if (deleteSet.contains(syncPersonDTO)) { + deleteSet.remove(syncPersonDTO); + iterator.remove(); + continue; + } + if (!StringUtils.isBlank((CharSequence)syncPersonDTO.getImageId())) continue; + iterator.remove(); + } + Scheduler scheduler = this.taskExecClient.getScheduler(this.quartzTaskProperties.getSchedulerName()); + for (Map.Entry> entry : ((Map>) (Map) removeMap).entrySet()) { + Long l = (Long)entry.getKey(); + lockValue = SnowFlake.nextId(); + try { + if (this.validateJobGroupLock(l, lockValue)) { + String dataSet; + TriggerKey triggerKey = TriggerKey.triggerKey((String)l.toString(), (String)"QZ_PERSON_VALIDATE_JOB"); + Trigger trigger = scheduler.getTrigger(triggerKey); + if (trigger == null || !StringUtils.isNotBlank((CharSequence)(dataSet = trigger.getJobDataMap().getString("VALIDATE_TRIGGER_KEY")))) continue; + List syncPersonDTOS = JsonUtils.toObjList(dataSet, SyncPersonLocal.class); + syncPersonDTOS = CpImageStorePersonValidateManager.removeAll(syncPersonDTOS, entry.getValue()); + if (addMap.containsKey(l)) { + Set keyAddSet = (Set)addMap.get(l); + syncPersonDTOS = CpImageStorePersonValidateManager.addAll(syncPersonDTOS, keyAddSet); + addMap.remove(l); + } + trigger.getJobDataMap().put("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(syncPersonDTOS)); + scheduler.rescheduleJob(triggerKey, trigger); + continue; + } + log.error("CpImageStorePersonValidateManager addValidateData removeJob time out"); + } + catch (SchedulerException e) { + log.error("获取trigger异常:{}", (Object)e.getLocalizedMessage()); + } + catch (Exception e) { + log.error("移除trigger未知异常:{}", (Object)e.getMessage()); + } + finally { + this.validateJobGroupUnLock(l, lockValue); + } + } + for (Map.Entry> entry : ((Map>) (Map) addMap).entrySet()) { + if (((Set)entry.getValue()).isEmpty()) continue; + Long l = (Long)entry.getKey(); + lockValue = SnowFlake.nextId(); + Long addValidateTime = currentTime + this.delayAddValidateHour * 60L * 60L * 1000L; + if (this.delayAddValidateData.booleanValue() && l > addValidateTime) continue; + try { + if (this.validateJobGroupLock(l, lockValue)) { + TriggerKey triggerKey = TriggerKey.triggerKey((String)l.toString(), (String)"QZ_PERSON_VALIDATE_JOB"); + Trigger trigger = scheduler.getTrigger(triggerKey); + if (trigger == null) { + trigger = TriggerBuilder.newTrigger().withIdentity(l.toString(), "QZ_PERSON_VALIDATE_JOB").withDescription("trigger at:" + l).forJob("PERSON_VALIDATE_JOB_NAME", "QZ_PERSON_VALIDATE_JOB").startAt(new Date(l)).usingJobData("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(entry.getValue())).build(); + scheduler.scheduleJob(trigger); + continue; + } + String dataSet = trigger.getJobDataMap().getString("VALIDATE_TRIGGER_KEY"); + List syncPersonDtoList = StringUtils.isNotBlank((CharSequence)dataSet) ? JsonUtils.toObjList(dataSet, SyncPersonLocal.class) : new ArrayList<>(); + syncPersonDtoList = CpImageStorePersonValidateManager.addAll(syncPersonDtoList, entry.getValue()); + trigger.getJobDataMap().put("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(syncPersonDtoList)); + scheduler.rescheduleJob(triggerKey, trigger); + continue; + } + log.error("CpImageStorePersonValidateManager addValidateData addOrModJob time out"); + } + catch (SchedulerException e) { + log.error("添加trigger异常:{}", (Object)e.getLocalizedMessage()); + } + catch (Exception e) { + log.error("添加trigger未知异常:{}", (Object)e.getMessage()); + } + finally { + this.validateJobGroupUnLock(l, lockValue); + } + } + this.updateExpiryDateStatus(currentTime, syncPersonList); + Map> deleteImageMap = (Map>) (Map) deleteSet.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); + for (Map.Entry> entry : deleteImageMap.entrySet()) { + Set keySet = entry.getValue().parallelStream().map(s -> s.getImageId()).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.handleImageStoreImageChange((String)entry.getKey(), keySet, false); + } + Map> addImageMap = (java.util.Map>) addSet.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); + for (Map.Entry> entry : addImageMap.entrySet()) { + Set keySet = entry.getValue().parallelStream().map(SyncPersonDTO::getImageId).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, true); + } + this.cpImageStoreSyncManager.sendChangeToDevice(changeGroupIdSet, false); + } + + private void updateExpiryDateStatus(Long currentTime, List syncPersonList) { + GroupPersonRef groupPersonRef = new GroupPersonRef(); + syncPersonList.stream().forEach(syncPerson -> { + Long addValidateTime = currentTime + this.delayAddValidateHour * 60L * 60L * 1000L; + groupPersonRef.setId(syncPerson.getGroupPersonRefId()); + groupPersonRef.setExpiryBeginDateStatus(Integer.valueOf(1)); + if (this.delayAddValidateData.booleanValue() && null != syncPerson.getNewExpiryBeginDate() && syncPerson.getNewExpiryBeginDate() > addValidateTime) { + groupPersonRef.setExpiryBeginDateStatus(Integer.valueOf(0)); + } + groupPersonRef.setExpiryEndDateStatus(Integer.valueOf(1)); + if (this.delayAddValidateData.booleanValue() && null != syncPerson.getNewExpiryEndDate() && syncPerson.getNewExpiryEndDate() > addValidateTime) { + groupPersonRef.setExpiryEndDateStatus(Integer.valueOf(0)); + } + HashSet ids = new HashSet(); + ids.add(groupPersonRef.getId()); + this.groupPersonRefMapper.updateStatusByIds(groupPersonRef, ids); + }); + } + + private boolean validateJobGroupLock(Long key, Long lockValue) { + Long start = System.currentTimeMillis(); + log.info("CpImageStorePersonValidateManager validateJobGroupLock:{},{},{}", new Object[]{key, lockValue, start}); + String lockKey = "validate_job_group_lock:" + key; + while (true) { + Long lockResult; + if (0L == (lockResult = (Long)this.redisTemplate.execute((RedisCallback) connection -> (Long)connection.eval(this.lockValidateJobRedisScript.getScriptAsString().getBytes(), ReturnType.INTEGER, 0, (byte[][])new byte[][]{lockKey.getBytes(), String.valueOf(lockValue).getBytes(), this.lockValidateJobGroupSecond.getBytes()})))) { + log.info("CpImageStorePersonValidateManager validateJobGroupLock success:{}", (Object)key); + return true; + } + long waitTime = System.currentTimeMillis() - start; + log.info("CpImageStorePersonValidateManager validateJobGroupLock wait:{},{}", (Object)key, (Object)waitTime); + if (waitTime >= Long.valueOf(this.lockValidateJobGroupTimeOut)) { + log.info("CpImageStorePersonValidateManager validateJobGroupLock wait out:{}", (Object)key); + return false; + } + try { + Thread.sleep(100L); + continue; + } + catch (InterruptedException e) { + log.error("CpImageStorePersonValidateManager validateJobGroupLock sleep error:", e); + Thread.currentThread().interrupt(); + continue; + } + break; + } + } + + private boolean validateJobGroupUnLock(Long key, Long lockValue) { + log.info("CpImageStorePersonValidateManager validateJobGroupUnLock:{},{}", (Object)key, (Object)lockValue); + String lockKey = "validate_job_group_lock:" + key; + Long lockResult = (Long)this.redisTemplate.execute((RedisCallback) connection -> (Long)connection.eval(this.unlockValidateJobRedisScript.getScriptAsString().getBytes(), ReturnType.INTEGER, 0, (byte[][])new byte[][]{lockKey.getBytes(), String.valueOf(lockValue).getBytes()})); + if (0L == lockResult) { + log.info("CpImageStorePersonValidateManager validateJobGroupUnLock success:{},{}", (Object)key, (Object)lockValue); + return true; + } + log.error("CpImageStorePersonValidateManager validateJobGroupUnLock fail:{},{}", (Object)key, (Object)lockValue); + return false; + } + + private void delDataManager(long currentTime, SyncPersonDTO syncPersonDTO, Set deleteSet, Map> removeMap, Map> addMap) { + Set timeSet; + Long oldExpiryBeginDate = syncPersonDTO.getOldExpiryBeginDate(); + Long oldExpiryEndDate = syncPersonDTO.getOldExpiryEndDate(); + Long newExpiryBeginDate = syncPersonDTO.getNewExpiryBeginDate(); + Long newExpiryEndDate = syncPersonDTO.getNewExpiryEndDate(); + deleteSet.add(syncPersonDTO); + if (oldExpiryBeginDate != null) { + Set removeAddSet = removeMap.computeIfAbsent(oldExpiryBeginDate, k -> new ConcurrentHashSet()); + removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); + } + if (oldExpiryEndDate != null) { + Set removeEndSet = removeMap.computeIfAbsent(oldExpiryEndDate, k -> new ConcurrentHashSet()); + removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); + } + if (newExpiryBeginDate != null && newExpiryBeginDate > currentTime) { + timeSet = addMap.computeIfAbsent(newExpiryBeginDate, k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); + } + if (newExpiryEndDate != null && newExpiryEndDate > currentTime) { + timeSet = addMap.computeIfAbsent(newExpiryEndDate, k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); + } + } + + private void addDataManager(long currentTime, SyncPersonDTO syncPersonDTO, Set addSet, Map> removeMap, Map> addMap) { + Set timeSet; + Long oldExpiryBeginDate = syncPersonDTO.getOldExpiryBeginDate(); + Long oldExpiryEndDate = syncPersonDTO.getOldExpiryEndDate(); + Long newExpiryBeginDate = syncPersonDTO.getNewExpiryBeginDate(); + Long newExpiryEndDate = syncPersonDTO.getNewExpiryEndDate(); + if (newExpiryBeginDate == null || newExpiryBeginDate <= currentTime) { + addSet.add(syncPersonDTO); + } else { + timeSet = addMap.computeIfAbsent(newExpiryBeginDate, k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); + } + if (newExpiryEndDate != null && newExpiryEndDate <= currentTime) { + addSet.remove(syncPersonDTO); + } else if (newExpiryEndDate != null) { + timeSet = addMap.computeIfAbsent(newExpiryEndDate, k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); + } + if (oldExpiryBeginDate != null) { + Set removeAddSet = removeMap.computeIfAbsent(oldExpiryBeginDate, k -> new ConcurrentHashSet()); + removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); + } + if (oldExpiryEndDate != null) { + Set removeEndSet = removeMap.computeIfAbsent(oldExpiryEndDate, k -> new ConcurrentHashSet()); + removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); + } + } + + private void updateDataManage(long currentTime, SyncPersonDTO syncPersonDTO, Set deleteSet, Set addSet, Map> removeMap, Map> addMap) { + Set timeSet; + boolean addFlag; + String oldImageId = syncPersonDTO.getOldImageId(); + Long oldExpiryBeginDate = syncPersonDTO.getOldExpiryBeginDate(); + Long oldExpiryEndDate = syncPersonDTO.getOldExpiryEndDate(); + Long newExpiryBeginDate = syncPersonDTO.getNewExpiryBeginDate(); + Long newExpiryEndDate = syncPersonDTO.getNewExpiryEndDate(); + boolean bl = addFlag = !(newExpiryBeginDate != null && newExpiryBeginDate > currentTime || newExpiryEndDate != null && newExpiryEndDate <= currentTime); + if (addFlag) { + addSet.add(syncPersonDTO); + } + if (StringUtils.isNotBlank((CharSequence)oldImageId)) { + SyncPersonDTO delDto = new SyncPersonDTO(); + BeanCopyUtils.copyProperties((Object)syncPersonDTO, (Object)delDto); + delDto.setImageId(oldImageId); + deleteSet.add(delDto); + } else { + boolean delFlag; + boolean bl2 = delFlag = !(!StringUtils.isBlank((CharSequence)oldImageId) || oldExpiryBeginDate != null && oldExpiryBeginDate > currentTime || oldExpiryEndDate != null && oldExpiryEndDate <= currentTime); + if (delFlag) { + deleteSet.add(syncPersonDTO); + } + } + if (oldExpiryBeginDate != null) { + Set removeAddSet = removeMap.computeIfAbsent(oldExpiryBeginDate, k -> new ConcurrentHashSet()); + if (StringUtils.isNotBlank((CharSequence)oldImageId)) { + removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), oldImageId, 0)); + } else { + removeAddSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); + } + } + if (oldExpiryEndDate != null) { + Set removeEndSet = removeMap.computeIfAbsent(oldExpiryEndDate, k -> new ConcurrentHashSet()); + if (StringUtils.isNotBlank((CharSequence)oldImageId)) { + removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), oldImageId, -1)); + } else { + removeEndSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); + } + } + if (newExpiryBeginDate != null && newExpiryBeginDate > currentTime) { + timeSet = addMap.computeIfAbsent(newExpiryBeginDate, k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), 0)); + } + if (newExpiryEndDate != null && newExpiryEndDate > currentTime) { + timeSet = addMap.computeIfAbsent(newExpiryEndDate, k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(syncPersonDTO.getGroupPersonRefId(), syncPersonDTO.getImageStoreId(), syncPersonDTO.getImageId(), -1)); + } + } + + public void syncDataToGroup(String dataJson) { + Set keySet; + log.info("CpImageStorePersonValidateManager syncDataToGroup start dataJson:{}", (Object)dataJson); + List syncPersonDTOS = JsonUtils.toObjList(dataJson, SyncPersonLocal.class); + Map> map = syncPersonDTOS.parallelStream().collect(Collectors.groupingBy(SyncPersonLocal::getAction)); + List addList = map.get(0); + List deleteList = map.get(-1); + if (!CollectionUtils.isEmpty(deleteList)) { + Map> deleteMap = deleteList.parallelStream().collect(Collectors.groupingBy(SyncPersonLocal::getImageStoreId)); + for (Map.Entry> entry : deleteMap.entrySet()) { + keySet = entry.getValue().parallelStream().map(SyncPersonLocal::getImageId).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, false); + } + } + if (!CollectionUtils.isEmpty(addList)) { + Map> addMap = addList.parallelStream().collect(Collectors.groupingBy(SyncPersonLocal::getImageStoreId)); + for (Map.Entry> entry : addMap.entrySet()) { + keySet = entry.getValue().parallelStream().map(SyncPersonLocal::getImageId).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, true); + } + } + if (!CollectionUtils.isEmpty(addList)) { + Set addRefIds = addList.parallelStream().map(SyncPersonLocal::getGroupPersonRefId).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.updateGroupPersonRefStatus((short)0, addRefIds); + } + if (!CollectionUtils.isEmpty(deleteList)) { + Set deleteRefIds = deleteList.parallelStream().map(SyncPersonLocal::getGroupPersonRefId).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.updateGroupPersonRefStatus((short)1, deleteRefIds); + } + if (!CollectionUtils.isEmpty(syncPersonDTOS)) { + Set changeGroupIdSet = syncPersonDTOS.parallelStream().map(SyncPersonLocal::getImageStoreId).collect(Collectors.toSet()); + this.cpImageStoreSyncManager.sendChangeToDevice(changeGroupIdSet, true); + } + log.info("CpImageStorePersonValidateManager syncDataToGroup end"); + } + + private static List removeAll(List list, Set set) { + if (set != null && !set.isEmpty()) { + Iterator it = set.iterator(); + while (it.hasNext()) { + list.remove(it.next()); + } + } + return list; + } + + private static List addAll(List list, Set set) { + if (!CollectionUtils.isEmpty(set)) { + Iterator it = set.iterator(); + while (it.hasNext()) { + list.add(it.next()); + } + } + return list; + } + + /* + * WARNING - Removed try catching itself - possible behaviour change. + */ + public void delayAddValidateTrigger() { + if (!this.delayAddValidateData.booleanValue()) { + log.debug("DelayPersonValidateTask 未开启延迟添加定时任务开关"); + return; + } + Long currentTime = System.currentTimeMillis(); + Long delayTime = currentTime + this.delayAddValidateHour * 60L * 60L * 1000L; + QueryGroupPersonDTO queryGroupPersonDTO = new QueryGroupPersonDTO(); + queryGroupPersonDTO.setStartTime(currentTime); + queryGroupPersonDTO.setEndTime(delayTime); + queryGroupPersonDTO.setExpiryBeginDateStatus(Integer.valueOf(0)); + queryGroupPersonDTO.setExpiryEndDateStatus(Integer.valueOf(0)); + List waitAddValidateList = this.groupPersonRefMapper.queryByExpiryDateStatus(queryGroupPersonDTO); + if (CollectionUtils.isEmpty((Collection)waitAddValidateList)) { + log.debug("[{}-{}]时间范围内没有需要添加的trigger", (Object)queryGroupPersonDTO.getStartTime(), (Object)queryGroupPersonDTO.getEndTime()); + } + ConcurrentHashMap addMap = new ConcurrentHashMap(); + ConcurrentHashSet addSet = new ConcurrentHashSet(); + ConcurrentHashSet deleteSet = new ConcurrentHashSet(); + HashSet changeGroupIdSet = Sets.newHashSet(); + ArrayList syncPersonList = Lists.newArrayListWithCapacity((int)waitAddValidateList.size()); + waitAddValidateList = (List) waitAddValidateList.stream().sorted(Comparator.comparing(GroupPersonRef::getExpiryBeginDate)).collect(Collectors.toList()); + waitAddValidateList.stream().forEach(arg_0 -> this.lambda$delayAddValidateTrigger$24(changeGroupIdSet, syncPersonList, currentTime, (Set)addSet, delayTime, addMap, (Set)deleteSet, arg_0)); + Iterator iterator = addSet.iterator(); + while (iterator.hasNext()) { + SyncPersonDTO syncPersonDTO = (SyncPersonDTO)iterator.next(); + if (deleteSet.contains(syncPersonDTO)) { + deleteSet.remove(syncPersonDTO); + iterator.remove(); + continue; + } + if (!StringUtils.isBlank((CharSequence)syncPersonDTO.getImageId())) continue; + iterator.remove(); + } + Scheduler scheduler = this.taskExecClient.getScheduler(this.quartzTaskProperties.getSchedulerName()); + for (Map.Entry> entry : ((Map>) (Map) addMap).entrySet()) { + if (((Set)entry.getValue()).isEmpty()) continue; + Long l = (Long)entry.getKey(); + Long lockValue = SnowFlake.nextId(); + try { + if (this.validateJobGroupLock(l, lockValue)) { + TriggerKey triggerKey = TriggerKey.triggerKey((String)l.toString(), (String)"QZ_PERSON_VALIDATE_JOB"); + Trigger trigger = scheduler.getTrigger(triggerKey); + if (trigger == null) { + trigger = TriggerBuilder.newTrigger().withIdentity(l.toString(), "QZ_PERSON_VALIDATE_JOB").withDescription("trigger at:" + l).forJob("PERSON_VALIDATE_JOB_NAME", "QZ_PERSON_VALIDATE_JOB").startAt(new Date(l)).usingJobData("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(entry.getValue())).build(); + scheduler.scheduleJob(trigger); + continue; + } + String dataSet = trigger.getJobDataMap().getString("VALIDATE_TRIGGER_KEY"); + List syncPersonDtoList = StringUtils.isNotBlank((CharSequence)dataSet) ? JsonUtils.toObjList(dataSet, SyncPersonLocal.class) : new ArrayList<>(); + syncPersonDtoList = CpImageStorePersonValidateManager.addAll(syncPersonDtoList, entry.getValue()); + trigger.getJobDataMap().put("VALIDATE_TRIGGER_KEY", JsonUtils.toJson(syncPersonDtoList)); + scheduler.rescheduleJob(triggerKey, trigger); + continue; + } + log.error("CpImageStorePersonValidateManager addValidateData addOrModJob time out"); + } + catch (SchedulerException e) { + log.error("添加trigger异常:{}", (Object)e.getLocalizedMessage()); + } + catch (Exception e) { + log.error("添加trigger未知异常:{}", (Object)e.getMessage()); + } + finally { + this.validateJobGroupUnLock(l, lockValue); + } + } + this.updateExpiryDateStatus(currentTime, syncPersonList); + Map> deleteImageMap = (Map>) (Map) deleteSet.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); + for (Map.Entry> entry : deleteImageMap.entrySet()) { + Set keySet = entry.getValue().parallelStream().map(s -> s.getImageId()).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.handleImageStoreImageChange((String)entry.getKey(), keySet, false); + } + Map> addImageMap = (java.util.Map>) addSet.parallelStream().collect(Collectors.groupingBy(SyncPersonDTO::getImageStoreId)); + for (Map.Entry> entry : addImageMap.entrySet()) { + Set keySet = entry.getValue().parallelStream().map(SyncPersonDTO::getImageId).collect(Collectors.toSet()); + this.cpImageStorePersonTxHandler.handleImageStoreImageChange(entry.getKey(), keySet, true); + } + this.cpImageStoreSyncManager.sendChangeToDevice(changeGroupIdSet, false); + } + + private /* synthetic */ void lambda$delayAddValidateTrigger$24(Set changeGroupIdSet, List syncPersonList, Long currentTime, Set addSet, Long delayTime, Map addMap, Set deleteSet, GroupPersonRef waitAddValidate) { + Set timeSet; + waitAddValidate.setExpiryBeginDate((Long)Optional.ofNullable(waitAddValidate.getExpiryBeginDate()).map(date -> date / 1000L * 1000L).orElse(null)); + waitAddValidate.setExpiryEndDate((Long)Optional.ofNullable(waitAddValidate.getExpiryEndDate()).map(date -> date / 1000L * 1000L).orElse(null)); + changeGroupIdSet.add(waitAddValidate.getImageStoreId()); + if (waitAddValidate.getExpiryBeginDateStatus() == 0) { + SyncPersonDTO addSyncPersonDTO = this.cpImageStorePersonTxHandler.generateSyncPersonDTO(waitAddValidate, 0, null, null); + syncPersonList.add(addSyncPersonDTO); + if (waitAddValidate.getExpiryBeginDate() <= currentTime) { + addSet.add(addSyncPersonDTO); + } else if (waitAddValidate.getExpiryBeginDate() <= delayTime) { + timeSet = (java.util.Set) addMap.computeIfAbsent(waitAddValidate.getExpiryBeginDate(), k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(addSyncPersonDTO.getGroupPersonRefId(), addSyncPersonDTO.getImageStoreId(), addSyncPersonDTO.getImageId(), 0)); + } + } + if (waitAddValidate.getExpiryEndDateStatus() == 0) { + SyncPersonDTO deleteSyncPersonDTO = this.cpImageStorePersonTxHandler.generateSyncPersonDTO(waitAddValidate, -1, null, null); + syncPersonList.add(deleteSyncPersonDTO); + if (waitAddValidate.getExpiryEndDate() <= currentTime) { + deleteSet.add(deleteSyncPersonDTO); + } else if (waitAddValidate.getExpiryEndDate() <= delayTime) { + timeSet = (java.util.Set) addMap.computeIfAbsent(waitAddValidate.getExpiryEndDate(), k -> new ConcurrentHashSet()); + timeSet.add(new SyncPersonLocal(deleteSyncPersonDTO.getGroupPersonRefId(), deleteSyncPersonDTO.getImageStoreId(), deleteSyncPersonDTO.getImageId(), -1)); + } + } + } + + private /* synthetic */ void lambda$addValidateData$4(Set changeGroupIdSet, long currentTime, Set deleteSet, Map removeMap, Map addMap, Set addSet, SyncPersonDTO syncPersonDTO) { + syncPersonDTO.setOldExpiryBeginDate((Long)Optional.ofNullable(syncPersonDTO.getOldExpiryBeginDate()).map(date -> date / 1000L * 1000L).orElse(null)); + syncPersonDTO.setOldExpiryEndDate((Long)Optional.ofNullable(syncPersonDTO.getOldExpiryEndDate()).map(date -> date / 1000L * 1000L).orElse(null)); + syncPersonDTO.setNewExpiryBeginDate((Long)Optional.ofNullable(syncPersonDTO.getNewExpiryBeginDate()).map(date -> date / 1000L * 1000L).orElse(null)); + syncPersonDTO.setNewExpiryEndDate((Long)Optional.ofNullable(syncPersonDTO.getNewExpiryEndDate()).map(date -> date / 1000L * 1000L).orElse(null)); + changeGroupIdSet.add(syncPersonDTO.getImageStoreId()); + int action = syncPersonDTO.getAction(); + switch (action) { + case -1: { + this.delDataManager(currentTime, syncPersonDTO, deleteSet, removeMap, addMap); + break; + } + case 0: { + this.addDataManager(currentTime, syncPersonDTO, addSet, removeMap, addMap); + break; + } + case 1: { + this.updateDataManage(currentTime, syncPersonDTO, deleteSet, addSet, removeMap, addMap); + break; + } + } + } + + private static class SyncPersonLocal { + private String groupPersonRefId; + private String imageStoreId; + private String imageId; + private int action; + + public SyncPersonLocal() { + } + + public SyncPersonLocal(String groupPersonRefId, String imageStoreId, String imageId, int action) { + this.groupPersonRefId = groupPersonRefId; + this.imageStoreId = imageStoreId; + this.imageId = imageId; + this.action = action; + } + + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (!(o instanceof SyncPersonLocal)) { + return false; + } + SyncPersonLocal other = (SyncPersonLocal)o; + return this.getAction() == other.getAction() && (this.getGroupPersonRefId() == null && other.getGroupPersonRefId() == null || this.getGroupPersonRefId() != null && this.getGroupPersonRefId().equals(other.getGroupPersonRefId())) && (this.getImageId() == null && other.getImageId() == null || this.getImageId() != null && this.getImageId().equals(other.getImageId())) && (this.getImageStoreId() == null && other.getImageStoreId() == null || this.getImageStoreId() != null && this.getImageStoreId().equals(other.getImageStoreId())); + } + + public int hashCode() { + return super.hashCode(); + } + + public String getGroupPersonRefId() { + return this.groupPersonRefId; + } + + public String getImageStoreId() { + return this.imageStoreId; + } + + public String getImageId() { + return this.imageId; + } + + public int getAction() { + return this.action; + } + + public void setGroupPersonRefId(String groupPersonRefId) { + this.groupPersonRefId = groupPersonRefId; + } + + public void setImageStoreId(String imageStoreId) { + this.imageStoreId = imageStoreId; + } + + public void setImageId(String imageId) { + this.imageId = imageId; + } + + public void setAction(int action) { + this.action = action; + } + + public String toString() { + return "CpImageStorePersonValidateManager.SyncPersonLocal(groupPersonRefId=" + this.getGroupPersonRefId() + ", imageStoreId=" + this.getImageStoreId() + ", imageId=" + this.getImageId() + ", action=" + this.getAction() + ")"; + } + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/CpImageStorePersonValidateManager.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStoreServiceImpl.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStoreServiceImpl.java deleted file mode 100644 index 32573f40..00000000 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/CpImageStoreServiceImpl.java +++ /dev/null @@ -1,783 +0,0 @@ -package cn.cloudwalk.service.organization.service; -// 业务服务 -import cn.cloudwalk.client.account.account.param.GeneralQueryBusinessParam; -import cn.cloudwalk.client.account.account.result.AcBusinessDTO; -import cn.cloudwalk.client.account.account.service.AcBusinessService; -import cn.cloudwalk.client.aggregate.application.param.ApplicationImageStoreQueryParam; -import cn.cloudwalk.client.aggregate.application.result.ApplicationImageStoreQueryResult; -import cn.cloudwalk.client.aggregate.application.service.ApplicationImageStoreService; -import cn.cloudwalk.client.aggregate.common.enums.DelStatusEnum; -import cn.cloudwalk.client.aggregate.common.enums.SyncStatusEnum; -import cn.cloudwalk.client.aggregate.device.param.DeviceImageStoreQueryParam; -import cn.cloudwalk.client.aggregate.device.result.DeviceImageStoreQueryResult; -import cn.cloudwalk.client.aggregate.device.service.AggDeviceImageStoreService; -import cn.cloudwalk.client.aggregate.group.param.AgImageStoreAddParam; -import cn.cloudwalk.client.aggregate.group.param.AgImageStoreEditParam; -import cn.cloudwalk.client.aggregate.group.param.AgImageStoreKeyParam; -import cn.cloudwalk.client.aggregate.group.param.AgImageStoreQueryParam; -import cn.cloudwalk.client.aggregate.group.result.AgImageStoreResult; -import cn.cloudwalk.client.aggregate.group.service.AgImageStoreService; -import cn.cloudwalk.client.device.mgn.atomic.param.CoreDeviceQueryParam; -import cn.cloudwalk.client.device.mgn.atomic.result.AtomicDeviceGetResult; -import cn.cloudwalk.client.device.mgn.atomic.service.AtomicDeviceService; -import cn.cloudwalk.client.organization.common.enums.CpImageStoreMatchPatternEnum; -import cn.cloudwalk.client.organization.service.store.param.AddImageStoreParam; -import cn.cloudwalk.client.organization.service.store.param.AssociatedParam; -import cn.cloudwalk.client.organization.service.store.param.BaseImageStoreParam; -import cn.cloudwalk.client.organization.service.store.param.DelImageStoreParam; -import cn.cloudwalk.client.organization.service.store.param.DetailImageStoreParam; -import cn.cloudwalk.client.organization.service.store.param.EditImageStoreParam; -import cn.cloudwalk.client.organization.service.store.param.QueryImageStoreParam; -import cn.cloudwalk.client.organization.service.store.result.AssociatedResult; -import cn.cloudwalk.client.organization.service.store.result.DeviceInfoResult; -import cn.cloudwalk.client.organization.service.store.result.ImageStoreDetailResult; -import cn.cloudwalk.client.organization.service.store.result.ImageStoreResult; -import cn.cloudwalk.client.organization.service.store.result.ImgStorePersonResult; -import cn.cloudwalk.client.organization.service.store.result.LabelResult; -import cn.cloudwalk.client.organization.service.store.result.OrganizationResult; -import cn.cloudwalk.client.organization.service.store.result.PageImageStoreResult; -import cn.cloudwalk.client.organization.service.store.service.CpImageStoreService; -import cn.cloudwalk.client.resource.application.param.ApplicationBasicParam; -import cn.cloudwalk.client.resource.application.param.ApplicationQueryParam; -import cn.cloudwalk.client.resource.application.result.ApplicationResult; -import cn.cloudwalk.client.resource.application.service.ApplicationService; -import cn.cloudwalk.client.resource.common.en.CommonStatusEnum; -import cn.cloudwalk.cloud.annotation.CloudwalkParamsValidate; -import cn.cloudwalk.cloud.context.CloudwalkCallContext; -import cn.cloudwalk.cloud.exception.ServiceException; -import cn.cloudwalk.cloud.page.CloudwalkPageAble; -import cn.cloudwalk.cloud.page.CloudwalkPageInfo; -import cn.cloudwalk.cloud.result.CloudwalkResult; -import cn.cloudwalk.cloud.utils.BeanCopyUtils; -import cn.cloudwalk.cloud.utils.CloudwalkDateUtils; -import cn.cloudwalk.data.organization.dto.DelGroupPersonDTO; -import cn.cloudwalk.data.organization.dto.GetsImageStoreAssociatedDTO; -import cn.cloudwalk.data.organization.dto.ImageStoreCountDTO; -import cn.cloudwalk.data.organization.dto.ImgStorePersonQueryDto; -import cn.cloudwalk.data.organization.dto.OrganizationImageStoreQueryDTO; -import cn.cloudwalk.data.organization.dto.QueryGroupPersonDTO; -import cn.cloudwalk.data.organization.entity.GroupPersonRef; -import cn.cloudwalk.data.organization.entity.ImgStorePerson; -import cn.cloudwalk.data.organization.entity.IsImageStoreAssociated; -import cn.cloudwalk.data.organization.entity.OrganizationImageStore; -import cn.cloudwalk.data.organization.mapper.GroupPersonRefMapper; -import cn.cloudwalk.data.organization.mapper.ImgStoreLabelMapper; -import cn.cloudwalk.data.organization.mapper.ImgStoreOrganizationMapper; -import cn.cloudwalk.data.organization.mapper.ImgStorePersonMapper; -import cn.cloudwalk.data.organization.mapper.IsImageStoreAssociatedMapper; -import cn.cloudwalk.data.organization.mapper.OrganizationImageStoreMapper; -import cn.cloudwalk.service.organization.common.AbstractImagStoreService; -import cn.cloudwalk.service.organization.common.JsonUtils; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Lists; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import javax.annotation.Resource; -import org.apache.commons.lang3.StringUtils; -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.springside.modules.utils.Collections3; -@Service -public class CpImageStoreServiceImpl -extends AbstractImagStoreService -implements CpImageStoreService -{ -@Autowired -private IsImageStoreAssociatedMapper isImageStoreAssociatedMapper; -@Autowired -private ImgStoreLabelMapper imgStoreLabelMapper; -@Autowired -private ImgStoreOrganizationMapper imgStoreOrganizationMapper; -@Autowired -private ImgStorePersonMapper personMapper; -@Autowired -private GroupPersonRefMapper groupPersonRefMapper; -@Autowired -private OrganizationImageStoreMapper organizationImageStoreMapper; -@Autowired -private AcBusinessService acBusinessService; -@Autowired -private ApplicationService applicationService; -@Autowired -private AgImageStoreService agImageStoreService; -@Autowired -private ApplicationImageStoreService applicationImageStoreService; -@Autowired -private AggDeviceImageStoreService deviceImageStoreService; -@Autowired -private CpImageStorePersonSynManager cpImageStorePersonSynManager; -@Resource -private CpImageStorePersonManager cpImageStorePersonManager; -@Resource -private AtomicDeviceService atomicDeviceService; -@Resource -private ApplicationImageStoreService appImageStoreService; -@Value("${cloudwalk.imagestore.person.searchSize:2}") -private int searchSize; -@Transactional(rollbackFor = {Exception.class}) -@CloudwalkParamsValidate -public CloudwalkResult add(AddImageStoreParam param, CloudwalkCallContext context) throws ServiceException { -String imageStoreId = CloudwalkDateUtils.getUUID(); -AgImageStoreAddParam addParam = new AgImageStoreAddParam(); -addParam.setId(imageStoreId); -addParam.setName(param.getName()); -addParam.setType(param.getType()); -addParam.setBusinessId(param.getBusinessId()); -addParam.setSourceApplicationId(param.getSourceApplicationId()); -if (StringUtils.isBlank(param.getBusinessId())) -{ -addParam.setBusinessId(context.getCompany().getCompanyId()); -} -List imageStoreAssociatedList = addBaseImageStore((BaseImageStoreParam)param, context, imageStoreId, addParam.getBusinessId()); -if (imageStoreAssociatedList.size() > 0) { -this.isImageStoreAssociatedMapper.batchInsert(imageStoreAssociatedList); -} -CloudwalkResult addResult = this.agImageStoreService.add(addParam, context); -if (!addResult.isSuccess()) { -throw new ServiceException(addResult.getCode(), addResult.getMessage()); -} -this.cpImageStorePersonSynManager.addGroupPersonSynTask(Lists.newArrayList(imageStoreId ), "isAll"); -return CloudwalkResult.success(imageStoreId); -} -@Transactional(rollbackFor = {Exception.class}) -@CloudwalkParamsValidate -public CloudwalkResult edit(EditImageStoreParam param, CloudwalkCallContext context) throws ServiceException { -checkExistAndStatus(param.getImageStoreId()); -AgImageStoreEditParam editParam = new AgImageStoreEditParam(); -editParam.setId(param.getImageStoreId()); -editParam.setName(param.getName()); -String businessId = param.getBusinessId(); -if (StringUtils.isBlank(businessId)) -{ -businessId = context.getCompany().getCompanyId(); -} -List imageStoreAssociatedList = addBaseImageStore((BaseImageStoreParam)param, context, param.getImageStoreId(), businessId); -if (checkAssociatedIsChange(param.getImageStoreId(), imageStoreAssociatedList)) { -this.isImageStoreAssociatedMapper.deleteAllByImageId(param.getImageStoreId()); -if (imageStoreAssociatedList.size() > 0) { -this.isImageStoreAssociatedMapper.batchInsert(imageStoreAssociatedList); -} -editParam.setStatus(SyncStatusEnum.SYNC_WAIT.getCode()); -} -CloudwalkResult editResult = this.agImageStoreService.edit(editParam, context); -if (!editResult.isSuccess()) { -throw new ServiceException(editResult.getCode(), editResult.getMessage()); -} -this.cpImageStorePersonSynManager.addGroupPersonSynTask(Lists.newArrayList(param.getImageStoreId() ), "isAll"); -return CloudwalkResult.success(Boolean.TRUE); -} -private boolean checkAssociatedIsChange(String imageStoreId, List associatedListAfterUpdate) { -GetsImageStoreAssociatedDTO queryDTO = new GetsImageStoreAssociatedDTO(); -queryDTO.setImageStoreId(imageStoreId); -List associatedListBeforeUpdate = this.isImageStoreAssociatedMapper.gets(queryDTO); -if (CollectionUtils.isEmpty(associatedListBeforeUpdate) && -CollectionUtils.isEmpty(associatedListAfterUpdate)) { -return false; -} -if (associatedListBeforeUpdate.size() != associatedListAfterUpdate.size()) { -return true; -} -Set associatedStrBeforeUpdate = new HashSet<>(associatedListBeforeUpdate.size()); -for (IsImageStoreAssociated associateBefore : associatedListBeforeUpdate) { -String action = (associateBefore.getAssociatedAction() != null) ? String.valueOf(associateBefore.getAssociatedAction()) : ""; -associatedStrBeforeUpdate.add(action + associateBefore.getAssociatedObjectIdType() + associateBefore.getAssociatedObjectId() + associateBefore -.getExpiryBeginDate() + associateBefore.getExpiryEndDate() + associateBefore.getValidDateCron()); -} -Set associatedStrAfterUpdate = new HashSet<>(associatedListAfterUpdate.size()); -for (IsImageStoreAssociated associateBeforeAfter : associatedListAfterUpdate) { -String action = (associateBeforeAfter.getAssociatedAction() != null) ? String.valueOf(associateBeforeAfter.getAssociatedAction()) : ""; -associatedStrAfterUpdate.add(action + associateBeforeAfter.getAssociatedObjectIdType() + associateBeforeAfter.getAssociatedObjectId() + associateBeforeAfter -.getExpiryBeginDate() + associateBeforeAfter.getExpiryEndDate() + associateBeforeAfter.getValidDateCron()); -} -associatedStrBeforeUpdate.removeAll(associatedStrAfterUpdate); -return !CollectionUtils.isEmpty(associatedStrBeforeUpdate); -} -@Transactional(rollbackFor = {Exception.class}) -@CloudwalkParamsValidate -public CloudwalkResult delete(DelImageStoreParam param, CloudwalkCallContext context) throws ServiceException { -checkAppRefByImageStoreIdForDelete(param.getId(), context); -checkExistAndStatus(param.getId()); -QueryGroupPersonDTO queryDTO = new QueryGroupPersonDTO(); -queryDTO.setImageStoreId(param.getId()); -queryDTO.setIsDel(Short.valueOf(DelStatusEnum.NORAML.getCode().shortValue())); -List groupPersonList = this.groupPersonRefMapper.query(queryDTO); -this.isImageStoreAssociatedMapper.deleteAllByImageId(param.getId()); -DelGroupPersonDTO delGroupPersonDTO = new DelGroupPersonDTO(); -delGroupPersonDTO.setImageStoreId(param.getId()); -delGroupPersonDTO.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -delGroupPersonDTO.setLastUpdateUserId(context.getUser().getCaller()); -this.groupPersonRefMapper.logicDeleteByParam(delGroupPersonDTO); -CloudwalkResult delete = this.agImageStoreService.delete((AgImageStoreKeyParam)BeanCopyUtils.copyProperties(param, AgImageStoreKeyParam.class), context); -if (!delete.isSuccess()) { -throw new ServiceException(delete.getCode(), delete.getMessage()); -} -return CloudwalkResult.success(Boolean.TRUE); -} -private void checkAppRefByImageStoreIdForDelete(String imageStoreId, CloudwalkCallContext context) throws ServiceException { -ApplicationImageStoreQueryParam queryParam = new ApplicationImageStoreQueryParam(); -queryParam.setImageStoreId(imageStoreId); -CloudwalkResult> queryResult = this.applicationImageStoreService.query(queryParam, context); -if (!queryResult.isSuccess()) { -throw new ServiceException(queryResult.getCode(), queryResult.getMessage()); -} -if (!CollectionUtils.isEmpty((Collection)queryResult.getData())) { -throw new ServiceException("53013545", -getMessage("53013545")); -} -} -public CloudwalkResult> page(QueryImageStoreParam queryImageStoreParam, CloudwalkCallContext context) throws ServiceException { -boolean isEnd = handleQueryParam(queryImageStoreParam); -if (isEnd) { -return CloudwalkResult.success(new CloudwalkPageAble(new ArrayList(), new CloudwalkPageInfo(queryImageStoreParam -.getCurrentPage(), queryImageStoreParam.getRowsOfPage()), 0L)); -} -AgImageStoreQueryParam queryParam = (AgImageStoreQueryParam)BeanCopyUtils.copyProperties(queryImageStoreParam, AgImageStoreQueryParam.class); -if (StringUtils.isBlank(queryParam.getBusinessId())) -{ -queryParam.setBusinessId(context.getCompany().getCompanyId()); -} -CloudwalkResult> agPageResult = this.agImageStoreService.page(queryParam); -if (!agPageResult.isSuccess()) { -return CloudwalkResult.fail(agPageResult.getCode(), agPageResult.getMessage()); -} -if (agPageResult.getData() == null) { -return CloudwalkResult.success(new CloudwalkPageAble(new ArrayList(), new CloudwalkPageInfo(queryParam -.getCurrentPage(), queryParam.getRowsOfPage()), 0L)); -} -List resultList = packageCpResult(((CloudwalkPageAble)agPageResult.getData()).getDatas(), queryParam.getBusinessId()); -return CloudwalkResult.success(new CloudwalkPageAble(resultList, new CloudwalkPageInfo( -(int)((CloudwalkPageAble)agPageResult.getData()).getCurrentPage(), (int)((CloudwalkPageAble)agPageResult.getData()).getPageSize()), ((CloudwalkPageAble)agPageResult -.getData()).getTotalRows())); -} -public CloudwalkResult> list(QueryImageStoreParam queryImageStoreParam, CloudwalkCallContext cloudwalkContext) throws ServiceException { -List resultList = new ArrayList<>(); -boolean isEnd = handleQueryParam(queryImageStoreParam); -if (isEnd) { -return CloudwalkResult.success(resultList); -} -AgImageStoreQueryParam queryParam = (AgImageStoreQueryParam)BeanCopyUtils.copyProperties(queryImageStoreParam, AgImageStoreQueryParam.class); -if (StringUtils.isBlank(queryParam.getBusinessId())) -{ -queryParam.setBusinessId(cloudwalkContext.getCompany().getCompanyId()); -} -CloudwalkResult> agQueryResult = this.agImageStoreService.query(queryParam); -if (!agQueryResult.isSuccess()) { -return CloudwalkResult.fail(agQueryResult.getCode(), agQueryResult.getMessage()); -} -if (!CollectionUtils.isEmpty(queryImageStoreParam.getLabelIds())) { -GetsImageStoreAssociatedDTO get = new GetsImageStoreAssociatedDTO(); -get.setAssociatedObjectIds(queryImageStoreParam.getLabelIds()); -get.setAssociatedObjectIdType(Integer.valueOf(2)); -List associateds = this.isImageStoreAssociatedMapper.gets(get); -if (CollectionUtils.isEmpty(associateds)) { -return CloudwalkResult.success(resultList); -} -List imageStoreIds = Collections3.extractToList(associateds, "imageStoreId"); -List collect = (List)((List)agQueryResult.getData()).stream().filter(a -> imageStoreIds.contains(a.getId())).collect( -Collectors.toList()); -agQueryResult.setData(collect); -} -resultList = packageImageStoreResult((Collection)agQueryResult.getData(), queryParam.getBusinessId()); -return CloudwalkResult.success(resultList); -} -@CloudwalkParamsValidate -public CloudwalkResult detail(DetailImageStoreParam param, CloudwalkCallContext context) { -AgImageStoreQueryParam queryParam = new AgImageStoreQueryParam(); -queryParam.setId(param.getId()); -CloudwalkResult> queryResult = this.agImageStoreService.query(queryParam); -if (!queryResult.isSuccess()) { -return CloudwalkResult.fail(queryResult.getCode(), queryResult.getMessage()); -} -if (CollectionUtils.isEmpty((Collection)queryResult.getData())) { -return CloudwalkResult.fail("53013502", -getMessage("53013502")); -} -AgImageStoreResult agImageStoreResult = ((List)queryResult.getData()).get(0); -ImageStoreDetailResult result = (ImageStoreDetailResult)BeanCopyUtils.copyProperties(agImageStoreResult, ImageStoreDetailResult.class); -result.setPersonNum(getPersonNum(agImageStoreResult.getId())); -try { -result.setBusinessName(getBusinessName(result.getBusinessId())); -} catch (ServiceException e) { -this.logger.error("查询企业名称错误e:{}", e.getMessage()); -return CloudwalkResult.fail(e.getCode(), e.getMessage()); -} -try { -result.setSourceApplicationName(getSourceApplicationName(result.getSourceApplicationId())); -} catch (ServiceException e) { -this.logger.error("查询来源应用名称错误e:{}", e.getMessage()); -return CloudwalkResult.fail(e.getCode(), e.getMessage()); -} -getAssociated(result); -DeviceImageStoreQueryParam deviceParam = new DeviceImageStoreQueryParam(); -deviceParam.setImageStoreId(param.getId()); -CloudwalkResult> deviceResult = this.deviceImageStoreService.query(deviceParam, context); -if (deviceResult.isSuccess()) { -result.setDevices(getDeviceList((List)deviceResult.getData(), context)); -} else { -this.logger.error("图库详情关联设备名称获取失败,result:[{}]", JSONObject.toJSONString(deviceResult)); -} -ApplicationImageStoreQueryParam appParam = new ApplicationImageStoreQueryParam(); -appParam.setImageStoreId(param.getId()); -CloudwalkResult> appResult = this.applicationImageStoreService.query(appParam, context); -if (appResult.isSuccess()) { -result.setApplicationNames(Collections3.extractToList((Collection)appResult.getData(), "applicationName")); -} else { -this.logger.error("图库详情关联应用名称获取失败,result:[{}]", JSONObject.toJSONString(appResult)); -} -return CloudwalkResult.success(result); -} -private List getDeviceList(List resultList, CloudwalkCallContext context) { -List list = Lists.newArrayListWithCapacity(resultList.size()); -try { -List deviceIds = (List)resultList.stream().map(DeviceImageStoreQueryResult::getDeviceId).collect(Collectors.toList()); -CoreDeviceQueryParam param = new CoreDeviceQueryParam(); -param.setIds(deviceIds); -param.setBusinessId(context.getCompany().getCompanyId()); -CloudwalkResult> deviceResult = this.atomicDeviceService.list(param, context); -Map deviceMap = new HashMap<>(); -if (deviceResult.isSuccess()) { -deviceMap = (Map)((List)deviceResult.getData()).stream().collect(Collectors.toMap(device -> device.getId(), device -> device.getDeviceCode())); -} -for (DeviceImageStoreQueryResult result : resultList) { -DeviceInfoResult dr = new DeviceInfoResult(); -dr.setDeviceId(result.getDeviceId()); -dr.setDeviceCode(deviceMap.get(result.getDeviceId())); -dr.setDeviceName(result.getDeviceName()); -dr.setIdentifyType(result.getIdentifyType()); -list.add(dr); -} -} catch (Exception e) { -this.logger.error("exception:{}", e.getMessage()); -} -return list; -} -private IsImageStoreAssociated getAssociated(String objectId, long time, String userId, String imageStoreId, Integer action, Integer objectType) { -IsImageStoreAssociated associated = new IsImageStoreAssociated(); -associated.setId(getPrimaryId()); -associated.setAssociatedAction(action); -associated.setAssociatedObjectId(objectId); -associated.setAssociatedObjectIdType(objectType); -associated.setCreateTime(Long.valueOf(time)); -associated.setCreateUserId(userId); -associated.setImageStoreId(imageStoreId); -associated.setLastUpdateTime(Long.valueOf(time)); -associated.setLastUpdateUserId(userId); -return associated; -} -private IsImageStoreAssociated getAssociated(AssociatedParam associatedParam, long time, String userId, String imageStoreId, Integer action, Integer objectType) { -IsImageStoreAssociated associated = getAssociated(associatedParam.getObjectId(), time, userId, imageStoreId, action, objectType); -associated.setExpiryBeginDate(associatedParam.getExpiryBeginDate()); -associated.setExpiryEndDate(associatedParam.getExpiryEndDate()); -associated.setValidDateCron(null); -if (!CollectionUtils.isEmpty(associatedParam.getValidDateCron())) { -associated.setValidDateCron(JSON.toJSONString(associatedParam.getValidDateCron())); -} -return associated; -} -private List addBaseImageStore(BaseImageStoreParam param, CloudwalkCallContext context, String imageStoreId, String businessId) throws ServiceException { -List includePersonIds; -long time = System.currentTimeMillis(); -if (CollectionUtils.isEmpty(param.getIncludePersons())) { -includePersonIds = new ArrayList<>(); -} else { -includePersonIds = (List)param.getIncludePersons().stream().map(AssociatedParam::getObjectId).collect(Collectors.toList()); -} -if (CollectionUtils.isEmpty(param.getIncludeOrganizations()) && -CollectionUtils.isEmpty(param.getIncludeLabels()) && -CollectionUtils.isEmpty(includePersonIds)) { -return new ArrayList<>(); -} -List imageStoreAssociatedList = new ArrayList<>(); -if (CpImageStoreMatchPatternEnum.getByCode(param.getMatchPattern()) != null) { -imageStoreAssociatedList.add(getAssociated(param.getMatchPattern(), time, context.getUser().getCaller(), imageStoreId, (Integer)null, -Integer.valueOf(4))); -} else { -imageStoreAssociatedList.add(getAssociated(CpImageStoreMatchPatternEnum.MERGE.getCode(), time, context.getUser().getCaller(), imageStoreId, (Integer)null, -Integer.valueOf(4))); -} -AssociatedParam imageStoreAssociatedParam = new AssociatedParam(); -imageStoreAssociatedParam.setObjectId(imageStoreId); -imageStoreAssociatedParam.setExpiryBeginDate(param.getExpiryBeginDate()); -imageStoreAssociatedParam.setExpiryEndDate(param.getExpiryEndDate()); -imageStoreAssociatedParam.setValidDateCron(param.getValidDateCron()); -imageStoreAssociatedList.add(getAssociated(imageStoreAssociatedParam, time, context.getUser().getCaller(), imageStoreId, -Integer.valueOf(0), Integer.valueOf(5))); -if (!CollectionUtils.isEmpty(param.getIncludeOrganizations())) { -if (this.imgStoreOrganizationMapper.getOrgByIds(param.getIncludeOrganizations(), businessId).size() != param -.getIncludeOrganizations().size()) { -throw new ServiceException("53013513", getMessage("53013513")); -} -for (String objectId : param.getIncludeOrganizations()) { -imageStoreAssociatedList.add(getAssociated(objectId, time, context.getUser().getCaller(), imageStoreId, -Integer.valueOf(0), Integer.valueOf(1))); -} -} -if (!CollectionUtils.isEmpty(param.getIncludeLabels())) { -if (this.imgStoreLabelMapper.getLabelByIds(param.getIncludeLabels(), businessId).size() != param -.getIncludeLabels().size()) { -throw new ServiceException("53013514", getMessage("53013514")); -} -for (String objectId : param.getIncludeLabels()) { -imageStoreAssociatedList.add(getAssociated(objectId, time, context.getUser().getCaller(), imageStoreId, -Integer.valueOf(0), Integer.valueOf(2))); -} -} -if (!CollectionUtils.isEmpty(includePersonIds)) { -ImgStorePersonQueryDto dto = new ImgStorePersonQueryDto(); -dto.setIds(includePersonIds); -dto.setBusinessId(businessId); -dto.setIsDel(DelStatusEnum.NORAML.getCode()); -if (this.personMapper.gets(dto).size() != includePersonIds.size()) { -throw new ServiceException("53013515", getMessage("53013515")); -} -for (AssociatedParam associatedParam : param.getIncludePersons()) { -if (!param.getNullDateIsLongTerm().booleanValue() && (null == associatedParam -.getExpiryBeginDate() || null == associatedParam.getExpiryEndDate())) { -associatedParam.setExpiryBeginDate(imageStoreAssociatedParam.getExpiryBeginDate()); -associatedParam.setExpiryEndDate(imageStoreAssociatedParam.getExpiryEndDate()); -associatedParam.setValidDateCron(imageStoreAssociatedParam.getValidDateCron()); -} -imageStoreAssociatedList.add(getAssociated(associatedParam, time, context.getUser().getCaller(), imageStoreId, -Integer.valueOf(0), Integer.valueOf(3))); -} -} -if (!CollectionUtils.isEmpty(param.getExcludeLabels())) { -if (this.imgStoreLabelMapper.getLabelByIds(param.getExcludeLabels(), businessId).size() != param -.getExcludeLabels().size()) { -throw new ServiceException("53013516", getMessage("53013516")); -} -for (String objectId : param.getExcludeLabels()) { -imageStoreAssociatedList.add(getAssociated(objectId, time, context.getUser().getCaller(), imageStoreId, -Integer.valueOf(1), Integer.valueOf(2))); -} -} -if (!CollectionUtils.isEmpty(param.getExcludePersons())) { -ImgStorePersonQueryDto dto = new ImgStorePersonQueryDto(); -dto.setIds(param.getExcludePersons()); -dto.setBusinessId(businessId); -dto.setIsDel(DelStatusEnum.NORAML.getCode()); -if (this.personMapper.gets(dto).size() != param.getExcludePersons().size()) { -throw new ServiceException("53013517", getMessage("53013517")); -} -for (String objectId : param.getExcludePersons()) { -imageStoreAssociatedList.add(getAssociated(objectId, time, context.getUser().getCaller(), imageStoreId, -Integer.valueOf(1), Integer.valueOf(3))); -} -} -return imageStoreAssociatedList; -} -private String getBusinessName(String businessId) throws ServiceException { -GeneralQueryBusinessParam generalQueryBusinessParam = new GeneralQueryBusinessParam(); -generalQueryBusinessParam.setId(businessId); -CloudwalkResult> cloudwalkResult = this.acBusinessService.generalQuery(generalQueryBusinessParam); -if (cloudwalkResult == null) { -throw new ServiceException("53013535", -getMessage("53013535")); -} -if (!cloudwalkResult.isSuccess()) { -throw new ServiceException(cloudwalkResult.getCode(), cloudwalkResult.getMessage()); -} -if (cloudwalkResult.getData() != null && ((List)cloudwalkResult.getData()).size() > 0) { -return ((AcBusinessDTO)((List)cloudwalkResult.getData()).get(0)).getName(); -} -return null; -} -private String getSourceApplicationName(String sourceApplicationId) throws ServiceException { -if (StringUtils.isEmpty(sourceApplicationId)) { -return null; -} -ApplicationBasicParam applicationBasicParam = new ApplicationBasicParam(); -applicationBasicParam.setIds(Arrays.asList(new String[] { sourceApplicationId })); -CloudwalkResult> cloudwalkResult = this.applicationService.gets(applicationBasicParam); -if (cloudwalkResult == null) { -throw new ServiceException("53013547", -getMessage("53013547")); -} -if (!cloudwalkResult.isSuccess()) { -throw new ServiceException(cloudwalkResult.getCode(), cloudwalkResult.getMessage()); -} -if (cloudwalkResult.getData() != null && ((List)cloudwalkResult.getData()).size() > 0) { -return ((ApplicationResult)((List)cloudwalkResult.getData()).get(0)).getName(); -} -return null; -} -private void checkExistAndStatus(String iamgeStoreId) throws ServiceException { -AgImageStoreQueryParam queryParam = new AgImageStoreQueryParam(); -queryParam.setId(iamgeStoreId); -CloudwalkResult> query = this.agImageStoreService.query(queryParam); -if (!query.isSuccess()) { -throw new ServiceException(query.getCode(), query.getMessage()); -} -if (CollectionUtils.isEmpty((Collection)query.getData())) { -throw new ServiceException("53013502", -getMessage("53013502")); -} -if (SyncStatusEnum.SYNC_ING.getCode().equals(((AgImageStoreResult)((List)query.getData()).get(0)).getStatus())) { -throw new ServiceException("53013512", -getMessage("53013512")); -} -} -private Map getBusinessNameMap() throws ServiceException { -CloudwalkResult> listCloudwalkResult = this.acBusinessService.generalQuery(new GeneralQueryBusinessParam()); -if (!listCloudwalkResult.isSuccess()) { -throw new ServiceException(listCloudwalkResult.getCode(), listCloudwalkResult.getMessage()); -} -if (CollectionUtils.isEmpty((Collection)listCloudwalkResult.getData())) { -return new HashMap<>(); -} -return Collections3.extractToMap((Collection)listCloudwalkResult.getData(), "id", "name"); -} -private Map getSourceApplicationNameMap(String businessId) throws ServiceException { -ApplicationQueryParam param = new ApplicationQueryParam(); -param.setBusinessId(businessId); -param.setStatus(CommonStatusEnum.ENABLE.getCode()); -CloudwalkResult> listCloudwalkResult = this.applicationService.query(param); -if (!listCloudwalkResult.isSuccess()) { -throw new ServiceException(listCloudwalkResult.getCode(), listCloudwalkResult.getMessage()); -} -if (CollectionUtils.isEmpty((Collection)listCloudwalkResult.getData())) { -return new HashMap<>(); -} -return Collections3.extractToMap((Collection)listCloudwalkResult.getData(), "id", "name"); -} -private void getAssociated(ImageStoreDetailResult result) { -GetsImageStoreAssociatedDTO get = new GetsImageStoreAssociatedDTO(); -get.setImageStoreId(result.getId()); -List associateds = this.isImageStoreAssociatedMapper.gets(get); -String matchPattern = null; -List includeLabelIds = new ArrayList<>(); -List includeOrganizationIds = new ArrayList<>(); -List includePersonIds = new ArrayList<>(); -Map includePersonMap = new HashMap<>(); -List excludeLabelIds = new ArrayList<>(); -List excludePersonIds = new ArrayList<>(); -String businessId = result.getBusinessId(); -for (IsImageStoreAssociated associated : associateds) { -if (4 == associated.getAssociatedObjectIdType().intValue()) { -matchPattern = associated.getAssociatedObjectId(); continue; -} -if (0 == associated.getAssociatedAction().intValue()) { -if (1 == associated.getAssociatedObjectIdType().intValue()) { -includeOrganizationIds.add(associated.getAssociatedObjectId()); continue; -} if (2 == associated.getAssociatedObjectIdType().intValue()) { -includeLabelIds.add(associated.getAssociatedObjectId()); continue; -} if (3 == associated.getAssociatedObjectIdType().intValue()) { -includePersonIds.add(associated.getAssociatedObjectId()); -AssociatedResult associatedResult = new AssociatedResult(); -BeanCopyUtils.copyProperties(associated, associatedResult); -associatedResult.setObjectId(associated.getAssociatedObjectId()); -includePersonMap.put(associated.getAssociatedObjectId(), associatedResult); continue; -} if (5 == associated.getAssociatedObjectIdType().intValue()) { -result.setExpiryBeginDate(associated.getExpiryBeginDate()); -result.setExpiryEndDate(associated.getExpiryEndDate()); -result.setValidDateCron(JsonUtils.toStrList(associated.getValidDateCron())); -} continue; -} if (1 == associated.getAssociatedAction().intValue()) { -if (2 == associated.getAssociatedObjectIdType().intValue()) { -excludeLabelIds.add(associated.getAssociatedObjectId()); continue; -} if (3 == associated.getAssociatedObjectIdType().intValue()) { -excludePersonIds.add(associated.getAssociatedObjectId()); -} -} -} -result.setMatchPattern(matchPattern); -if (!CollectionUtils.isEmpty(includeLabelIds)) { -result.setIncludeLabels(BeanCopyUtils.copy(this.imgStoreLabelMapper.getLabelByIds(includeLabelIds, businessId), LabelResult.class)); -} else { -result.setIncludeLabels(new ArrayList()); -} -if (!CollectionUtils.isEmpty(includeOrganizationIds)) { -result.setIncludeOrganizations(BeanCopyUtils.copy(this.imgStoreOrganizationMapper.getOrgByIds(includeOrganizationIds, businessId), OrganizationResult.class)); -} else { -result.setIncludeOrganizations(new ArrayList()); -} -ImgStorePersonQueryDto getDTO = new ImgStorePersonQueryDto(); -if (!CollectionUtils.isEmpty(includePersonIds)) { -getDTO.setIds(includePersonIds); -getDTO.setIsDel(DelStatusEnum.NORAML.getCode()); -List personList = this.personMapper.gets(getDTO); -List includePersons = new ArrayList<>(); -personList.forEach(imgStorePerson -> { -ImgStorePersonResult imgStorePersonResult = new ImgStorePersonResult(); -BeanCopyUtils.copyProperties(imgStorePerson, imgStorePersonResult); -AssociatedResult associatedResult = (AssociatedResult)includePersonMap.get(imgStorePerson.getId()); -BeanCopyUtils.copyProperties(associatedResult, imgStorePersonResult); -imgStorePersonResult.setValidDateCron(JsonUtils.toStrList(associatedResult.getValidDateCron())); -includePersons.add(imgStorePersonResult); -}); -result.setIncludePersons(includePersons); -} else { -result.setIncludePersons(new ArrayList()); -} -if (!CollectionUtils.isEmpty(excludeLabelIds)) { -result.setExcludeLabels(BeanCopyUtils.copy(this.imgStoreLabelMapper.getLabelByIds(excludeLabelIds, businessId), LabelResult.class)); -} else { -result.setExcludeLabels(new ArrayList()); -} -if (!CollectionUtils.isEmpty(excludePersonIds)) { -getDTO.setIds(excludePersonIds); -getDTO.setIsDel(DelStatusEnum.NORAML.getCode()); -result.setExcludePersons(BeanCopyUtils.copy(this.personMapper.gets(getDTO), ImgStorePersonResult.class)); -} else { -result.setExcludePersons(new ArrayList()); -} -} -private boolean handleQueryParam(QueryImageStoreParam queryParam) { -if (StringUtils.isNotBlank(queryParam.getOrgId()) || -!CollectionUtils.isEmpty(queryParam.getOrgIds())) { -List orgImageStoreList = this.organizationImageStoreMapper.query((OrganizationImageStoreQueryDTO)BeanCopyUtils.copyProperties(queryParam, OrganizationImageStoreQueryDTO.class)); -GetsImageStoreAssociatedDTO orgParam = new GetsImageStoreAssociatedDTO(); -orgParam.setAssociatedObjectIdType(Integer.valueOf(1)); -List orgIds = new ArrayList<>(500); -if (StringUtils.isNotBlank(queryParam.getOrgId())) { -orgIds.add(queryParam.getOrgId()); -} -if (!CollectionUtils.isEmpty(queryParam.getOrgIds())) { -orgIds.addAll(queryParam.getOrgIds()); -} -orgParam.setAssociatedObjectIds(orgIds); -List orgResultList = this.isImageStoreAssociatedMapper.gets(orgParam); -if (CollectionUtils.isEmpty(orgImageStoreList) && CollectionUtils.isEmpty(orgResultList)) { -return true; -} -List imageStoreIds = Collections3.extractToList(orgImageStoreList, "imageStoreId"); -imageStoreIds.addAll(Collections3.extractToList(orgResultList, "imageStoreId")); -if (StringUtils.isNotBlank(queryParam.getId())) { -if (!imageStoreIds.contains(queryParam.getId())) { -return true; -} -} else if (!CollectionUtils.isEmpty(queryParam.getIds())) { -imageStoreIds.retainAll(queryParam.getIds()); -} -if (CollectionUtils.isEmpty(imageStoreIds)) { -return true; -} -queryParam.setIds(imageStoreIds); -} -if (!CollectionUtils.isEmpty(queryParam.getPersonIds())) { -QueryGroupPersonDTO queryGroupPersonDTO = (QueryGroupPersonDTO)BeanCopyUtils.copyProperties(queryParam, QueryGroupPersonDTO.class); -queryGroupPersonDTO.setIsDel(DelStatusEnum.NORAML.getCode()); -List queryResult = this.groupPersonRefMapper.query(queryGroupPersonDTO); -if (CollectionUtils.isEmpty(queryResult)) { -return true; -} -List imageStoreIds = Collections3.extractToList(queryResult, "imageStoreId"); -if (StringUtils.isNotBlank(queryParam.getId())) { -if (!imageStoreIds.contains(queryParam.getId())) { -return true; -} -} else if (!CollectionUtils.isEmpty(queryParam.getIds())) { -imageStoreIds.retainAll(queryParam.getIds()); -} -if (CollectionUtils.isEmpty(imageStoreIds)) { -return true; -} -queryParam.setIds(imageStoreIds); -} -if (!CollectionUtils.isEmpty(queryParam.getLabelIds())) { -GetsImageStoreAssociatedDTO labelParam = new GetsImageStoreAssociatedDTO(); -labelParam.setAssociatedObjectIdType(Integer.valueOf(2)); -labelParam.setAssociatedObjectIds(queryParam.getLabelIds()); -List labelResultList = this.isImageStoreAssociatedMapper.gets(labelParam); -if (CollectionUtils.isEmpty(labelResultList)) { -return true; -} -List imageStoreIds = Collections3.extractToList(labelResultList, "imageStoreId"); -if (StringUtils.isNotBlank(queryParam.getId())) { -if (!imageStoreIds.contains(queryParam.getId())) { -return true; -} -} else if (!CollectionUtils.isEmpty(queryParam.getIds())) { -imageStoreIds.retainAll(queryParam.getIds()); -} -if (CollectionUtils.isEmpty(imageStoreIds)) { -return true; -} -queryParam.setIds(imageStoreIds); -} -return false; -} -private List packageImageStoreResult(Collection agDatas, String businessId) throws ServiceException { -if (CollectionUtils.isEmpty(agDatas)) { -return new ArrayList<>(); -} -List imageIds = (List)agDatas.stream().map(AgImageStoreResult::getId).collect(Collectors.toList()); -long startTime = System.currentTimeMillis(); -List countByImageStoreIds = Lists.newArrayListWithCapacity(imageIds.size()); -List> partition = Lists.partition(imageIds, this.searchSize); -partition.stream().forEach(p -> { -List list = this.groupPersonRefMapper.getCountByImageStoreIds(p); -if (!CollectionUtils.isEmpty(list)) { -countByImageStoreIds.addAll(list); -} -}); -long endTime = System.currentTimeMillis(); -this.logger.info("图库分页查询耗时:[{}],searchSize:[{}]", Long.valueOf(endTime - startTime), Integer.valueOf(this.searchSize)); -Map countMap = (Map)countByImageStoreIds.stream().filter(imageStoreCountDTO -> (null != imageStoreCountDTO)).collect(Collectors.toMap(ImageStoreCountDTO::getId, ImageStoreCountDTO::getCount, (k1, k2) -> k1)); -Map businessNameMap = getBusinessNameMap(); -Map sourceApplicationNameMap = getSourceApplicationNameMap(businessId); -List resultList = new ArrayList<>(agDatas.size()); -for (AgImageStoreResult agData : agDatas) { -ImageStoreResult temp = (ImageStoreResult)BeanCopyUtils.copyProperties(agData, ImageStoreResult.class); -temp.setBusinessName(businessNameMap.get(temp.getBusinessId())); -temp.setSourceApplicationName(sourceApplicationNameMap.get(temp.getSourceApplicationId())); -temp.setPersonNum(countMap.containsKey(agData.getId()) ? countMap.get(agData.getId()) : Integer.valueOf(0)); -getAssociated((ImageStoreDetailResult)temp); -resultList.add(temp); -} -return resultList; -} -private List packageCpResult(Collection agDatas, String businessId) throws ServiceException { -if (CollectionUtils.isEmpty(agDatas)) { -return new ArrayList<>(); -} -List imageIds = (List)agDatas.stream().map(AgImageStoreResult::getId).collect(Collectors.toList()); -long startTime = System.currentTimeMillis(); -List countByImageStoreIds = Lists.newArrayListWithCapacity(imageIds.size()); -List> partition = Lists.partition(imageIds, this.searchSize); -partition.stream().forEach(p -> { -List list = this.groupPersonRefMapper.getCountByImageStoreIds(p); -if (!CollectionUtils.isEmpty(list)) { -countByImageStoreIds.addAll(list); -} -}); -long endTime = System.currentTimeMillis(); -this.logger.info("图库分页查询耗时:[{}],searchSize:[{}]", Long.valueOf(endTime - startTime), Integer.valueOf(this.searchSize)); -Map countMap = (Map)countByImageStoreIds.stream().filter(imageStoreCountDTO -> (null != imageStoreCountDTO)).collect(Collectors.toMap(ImageStoreCountDTO::getId, ImageStoreCountDTO::getCount, (k1, k2) -> k1)); -Map businessNameMap = getBusinessNameMap(); -Map sourceApplicationNameMap = getSourceApplicationNameMap(businessId); -List resultList = new ArrayList<>(agDatas.size()); -for (AgImageStoreResult agData : agDatas) { -PageImageStoreResult temp = (PageImageStoreResult)BeanCopyUtils.copyProperties(agData, PageImageStoreResult.class); -temp.setBusinessName(businessNameMap.get(temp.getBusinessId())); -temp.setSourceApplicationName(sourceApplicationNameMap.get(temp.getSourceApplicationId())); -temp.setPersonNum(countMap.containsKey(agData.getId()) ? countMap.get(agData.getId()) : Integer.valueOf(0)); -resultList.add(temp); -} -return resultList; -} -private Integer getPersonNum(String id) { -List countByImageStoreIds = this.groupPersonRefMapper.getCountByImageStoreIds(Lists.newArrayList(id )); -if (CollectionUtils.isEmpty(countByImageStoreIds) || countByImageStoreIds.get(0) == null) { -return Integer.valueOf(0); -} -return ((ImageStoreCountDTO)countByImageStoreIds.get(0)).getCount(); -} -} - - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/CpImageStoreServiceImpl.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/DeviceGroupRefChangeEventHandler.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/DeviceGroupRefChangeEventHandler.java index 4af86cf4..99044769 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/DeviceGroupRefChangeEventHandler.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/DeviceGroupRefChangeEventHandler.java @@ -3,7 +3,6 @@ package cn.cloudwalk.service.organization.service; import cn.cloudwalk.client.aggregate.device.param.DeviceImageStoreQueryParam; import cn.cloudwalk.client.aggregate.device.param.DeviceImageStoreReSyncParam; import cn.cloudwalk.client.aggregate.device.result.DeviceImageStoreQueryResult; -import cn.cloudwalk.client.aggregate.device.result.DeviceImageStoreReSyncResult; import cn.cloudwalk.client.aggregate.device.service.AggDeviceImageStoreService; import cn.cloudwalk.client.device.mgn.atomic.param.AtomicDeviceCommonParam; import cn.cloudwalk.client.device.mgn.atomic.result.CoreDeviceDetailResult; @@ -21,10 +20,12 @@ import cn.cloudwalk.data.organization.mapper.DeviceImageStoreMapper; import cn.cloudwalk.data.organization.mapper.DevicePersonSyncLogMapper; import cn.cloudwalk.data.organization.mapper.GroupPersonRefMapper; import cn.cloudwalk.service.organization.common.AbstractImagStoreService; +import cn.cloudwalk.service.organization.service.CpImageStoreSyncManager; import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; @@ -35,200 +36,200 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; + @Component public class DeviceGroupRefChangeEventHandler -extends AbstractImagStoreService -{ -@Resource -private AggDeviceImageStoreService aggDeviceImageStoreService; -@Resource -private AtomicDeviceService atomicDeviceService; -@Resource -private CpImageStoreSyncManager cpImageStoreSyncManager; -@Resource -private DevicePersonSyncLogMapper devicePersonSyncLogMapper; -@Resource -private DeviceImageStoreMapper deviceImageStoreMapper; -@Resource -private GroupPersonRefMapper groupPersonRefMapper; -@Resource -private UUIDSerial uuidSerial; -@Value("${person.partition.size:100}") -private Integer personPartitionSize; -@Async("deviceGroupChangeTaskExecutor") -public void handler(DeviceGroupRefChangeEvent event) { -if (null == event) { -return; -} -if (StringUtils.isBlank(event.getDeviceId()) || StringUtils.isBlank(event.getGroupId())) { -this.logger.warn("设备[{}]或者图库[{}]为空", event.getDeviceId(), event.getGroupId()); -return; -} -this.logger.debug("Kafka消费设备图库变更数据:[{}]", JSON.toJSONString(event)); -try { -AtomicDeviceCommonParam queryDevice = new AtomicDeviceCommonParam(); -queryDevice.setId(event.getDeviceId()); -CloudwalkResult deviceResult = this.atomicDeviceService.detail(queryDevice, getCloudwalkContext()); -if (!deviceResult.isSuccess() || null == deviceResult.getData()) { -this.logger.warn("查询设备[{}]失败", event.getDeviceId()); -return; -} -CoreDeviceDetailResult device = (CoreDeviceDetailResult)deviceResult.getData(); -if (device.getIdentifyType().shortValue() != 0) { -this.logger.warn("设备[{}]非前端识别", device.getId()); -return; -} -saveDeviceImageStoreChange(event); -unbindDeviceImageStore(event, device); -bindDeviceImageStore(event); -} catch (Exception e) { -this.logger.error("执行报错 {}: {}", e.getClass().getName(), e.getMessage()); -} -} -private int saveDeviceImageStoreChange(DeviceGroupRefChangeEvent event) { -Long time = Long.valueOf(System.currentTimeMillis()); -DeviceImageStore query = new DeviceImageStore(); -query.setDeviceId(event.getDeviceId()); -query.setImageStoreId(event.getGroupId()); -query.setType(Integer.valueOf(event.getType().shortValue())); -query.setLastUpdateTime(time); -List result = this.deviceImageStoreMapper.select(query); -if (CollectionUtils.isEmpty(result)) { -this.logger.debug("根据设备[{}]图库[{}]未查询到变更记录,新增", event.getDeviceId(), event.getGroupId()); -query.setId(this.uuidSerial.uuid()); -query.setCreateTime(time); -return this.deviceImageStoreMapper.insertSelective(query); -} -this.logger.debug("根据设备[{}]图库[{}]查询到变更记录[{}],修改", new Object[] { event.getDeviceId(), event.getGroupId(), ((DeviceImageStore)result.get(0)).getId() }); -query.setFinishPullTime(null); -query.setStatus(StatusEnum.UNNOTIFY.getValue()); -return this.deviceImageStoreMapper.update(query); -} -private void unbindDeviceImageStore(DeviceGroupRefChangeEvent event, CoreDeviceDetailResult device) { -if (event.getType().shortValue() != 2) { -return; -} -this.logger.debug("开始处理设备[{}]图库[{}]解绑", event.getDeviceId(), event.getGroupId()); -try { -DeviceImageStoreQueryParam storeQueryParam = new DeviceImageStoreQueryParam(); -storeQueryParam.setDeviceId(event.getDeviceId()); -CloudwalkResult> imageStoreResult = this.aggDeviceImageStoreService.query(storeQueryParam, getCloudwalkContext()); -if (imageStoreResult.isSuccess() && !CollectionUtils.isEmpty((Collection)imageStoreResult.getData())) { -this.logger.debug("设备[{}]仍绑定其他图库", event.getDeviceId()); -String deviceCode = device.getDeviceCode(); -if (null == device.getSupportMultiPersonGroup() || -Objects.equals(Integer.valueOf(device.getSupportMultiPersonGroup().intValue()), -Integer.valueOf(DeviceAbilityEnum.NOT_SUPPORT_MULTI_PERSON_GROUP.getCode()))) { -this.logger.debug("设备[{}]code[{}]不支持多图库,下发50009", event.getDeviceId(), deviceCode); -List imageStoreIds = (List)((List)imageStoreResult.getData()).stream().map(DeviceImageStoreQueryResult::getImageStoreId).collect( -Collectors.toList()); -updateSyncLog(event, imageStoreIds); -Set changeGroupIdSet = Sets.newHashSet(); -changeGroupIdSet.add(event.getGroupId()); -((List)imageStoreResult.getData()).stream().forEach(imageStore -> changeGroupIdSet.add(imageStore.getImageStoreId())); -this.cpImageStoreSyncManager.sendChangeToDevice(event.getDeviceId(), changeGroupIdSet, false); -return; -} -} -notify50010(event); -} catch (Exception e) { -this.logger.error("设备[{}]图库[{}]解绑执行异常:{}", new Object[] { event.getDeviceId(), event.getGroupId(), e.getMessage() }); -} -} -private void updateSyncLog(DeviceGroupRefChangeEvent event, List imageStoreIds) { -DevicePersonSyncLogDTO query = new DevicePersonSyncLogDTO(); -query.setDeviceId(event.getDeviceId()); -query.setImageStoreId(event.getGroupId()); -List dbSyncLogList = this.devicePersonSyncLogMapper.query(query); -Set personIdSet = (Set)dbSyncLogList.stream().map(DevicePersonSyncLog::getPersonId).collect( -Collectors.toSet()); -List> personIdPartition = Lists.partition(Lists.newArrayList(personIdSet), this.personPartitionSize.intValue()); -for (List personIds : personIdPartition) { -query.setImageStoreIds(imageStoreIds); -query.setPersonIds(personIds); -List personIdList = this.devicePersonSyncLogMapper.findPersonIds(query); -Long currentTime = Long.valueOf(System.currentTimeMillis()); -if (!CollectionUtils.isEmpty(personIdList)) { -this.logger.info("移除在其他图库中的人员:[{}]", personIdList); -personIdSet.removeAll(personIdList); -query.setPersonIds(personIdList); -query.setLastUpdateTime(currentTime); -this.devicePersonSyncLogMapper.updateLastTimeOfGroupPerson(query); -query.setLastUpdateTime(null); -query.setIsDel(Integer.valueOf(StatusEnum.INVALID.getValue().intValue())); -query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); -int res = this.devicePersonSyncLogMapper.updateIsDel(query); -this.logger.info("设备[{}]图库[{}]更新[{}]条人员存在其他图库中", new Object[] { event.getDeviceId(), event.getGroupId(), Integer.valueOf(res) }); -} -this.groupPersonRefMapper.updateLastUpdateTimeByPersonIds(event.getGroupId(), personIds, currentTime); -} -if (!CollectionUtils.isEmpty(personIdSet)) { -personIdPartition = Lists.partition(Lists.newArrayList(personIdSet), this.personPartitionSize.intValue()); -query = new DevicePersonSyncLogDTO(); -query.setDeviceId(event.getDeviceId()); -query.setImageStoreId(event.getGroupId()); -for (List personIds : personIdPartition) { -query.setPersonIds(personIds); -query.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -query.setIsDel(Integer.valueOf(StatusEnum.INVALID.getValue().intValue())); -query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); -int res = this.devicePersonSyncLogMapper.updateIsDel(query); -this.logger.info("设备[{}]图库[{}]更新[{}]条人员不存在其他图库中", new Object[] { event.getDeviceId(), event.getGroupId(), Integer.valueOf(res) }); -} -} -} -private void notify50010(DeviceGroupRefChangeEvent event) { -try { -DevicePersonSyncLogDTO query = new DevicePersonSyncLogDTO(); -query.setDeviceId(event.getDeviceId()); -query.setImageStoreId(event.getGroupId()); -query.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -query.setIsDel(Integer.valueOf(StatusEnum.INVALID.getValue().intValue())); -query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); -int res = this.devicePersonSyncLogMapper.updateIsDel(query); -this.logger.debug("设备[{}]图库[{}]解绑,逻辑删除[{}]条同步记录", new Object[] { event.getDeviceId(), event.getGroupId(), Integer.valueOf(res) }); -this.logger.debug("设备[{}]图库[{}]下发50010", event.getDeviceId(), event.getGroupId()); -DeviceImageStoreReSyncParam deviceImageStoreReSyncParam = new DeviceImageStoreReSyncParam(); -deviceImageStoreReSyncParam.setDeviceId(event.getDeviceId()); -deviceImageStoreReSyncParam.setImageStoreId(event.getGroupId()); -CloudwalkResult> result = this.aggDeviceImageStoreService.reSync(deviceImageStoreReSyncParam, getCloudwalkContext()); -if (result.isSuccess()) { -DeviceImageStore notify = new DeviceImageStore(); -notify.setDeviceId(event.getDeviceId()); -notify.setImageStoreId(event.getGroupId()); -List deviceImageStoreList = this.deviceImageStoreMapper.select(notify); -if (!CollectionUtils.isEmpty(deviceImageStoreList)) { -notify = deviceImageStoreList.get(0); -notify.setStatus(StatusEnum.NOTIFY.getValue()); -notify.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -this.deviceImageStoreMapper.update(notify); -} -} -} catch (Exception e) { -this.logger.error("设备[{}]图库[{}]解绑执行异常:{}", new Object[] { event.getDeviceId(), event.getGroupId(), e.getMessage() }); -} -} -private void bindDeviceImageStore(DeviceGroupRefChangeEvent event) { -if (event.getType().shortValue() != 1) { -return; -} -this.logger.debug("开始处理设备[{}]图库[{}]绑定", event.getDeviceId(), event.getGroupId()); -DevicePersonSyncLogDTO query = new DevicePersonSyncLogDTO(); -query.setDeviceId(event.getDeviceId()); -query.setImageStoreId(event.getGroupId()); -query.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -query.setIsDel(Integer.valueOf(StatusEnum.VALID.getValue().intValue())); -query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); -int res = this.devicePersonSyncLogMapper.updateIsDel(query); -this.logger.debug("设备[{}]图库[{}]绑定,更新[{}]条同步记录", new Object[] { event.getDeviceId(), event.getGroupId(), Integer.valueOf(res) }); -Set changeGroupIdSet = Sets.newHashSet(); -changeGroupIdSet.add(event.getGroupId()); -this.cpImageStoreSyncManager.sendChangeToDevice(event.getDeviceId(), changeGroupIdSet, false); -} +extends AbstractImagStoreService { + @Resource + private AggDeviceImageStoreService aggDeviceImageStoreService; + @Resource + private AtomicDeviceService atomicDeviceService; + @Resource + private CpImageStoreSyncManager cpImageStoreSyncManager; + @Resource + private DevicePersonSyncLogMapper devicePersonSyncLogMapper; + @Resource + private DeviceImageStoreMapper deviceImageStoreMapper; + @Resource + private GroupPersonRefMapper groupPersonRefMapper; + @Resource + private UUIDSerial uuidSerial; + @Value(value="${person.partition.size:100}") + private Integer personPartitionSize; + + @Async(value="deviceGroupChangeTaskExecutor") + public void handler(DeviceGroupRefChangeEvent event) { + if (null == event) { + return; + } + if (StringUtils.isBlank((CharSequence)event.getDeviceId()) || StringUtils.isBlank((CharSequence)event.getGroupId())) { + this.logger.warn("设备[{}]或者图库[{}]为空", (Object)event.getDeviceId(), (Object)event.getGroupId()); + return; + } + this.logger.debug("Kafka消费设备图库变更数据:[{}]", (Object)JSON.toJSONString((Object)event)); + try { + AtomicDeviceCommonParam queryDevice = new AtomicDeviceCommonParam(); + queryDevice.setId(event.getDeviceId()); + CloudwalkResult deviceResult = this.atomicDeviceService.detail(queryDevice, this.getCloudwalkContext()); + if (!deviceResult.isSuccess() || null == deviceResult.getData()) { + this.logger.warn("查询设备[{}]失败", (Object)event.getDeviceId()); + return; + } + CoreDeviceDetailResult device = (CoreDeviceDetailResult)deviceResult.getData(); + if (device.getIdentifyType() != 0) { + this.logger.warn("设备[{}]非前端识别", (Object)device.getId()); + return; + } + this.saveDeviceImageStoreChange(event); + this.unbindDeviceImageStore(event, device); + this.bindDeviceImageStore(event); + } + catch (Exception e) { + this.logger.error("执行报错 {}: {}", (Object)e.getClass().getName(), (Object)e.getMessage()); + } + } + + private int saveDeviceImageStoreChange(DeviceGroupRefChangeEvent event) { + Long time = System.currentTimeMillis(); + DeviceImageStore query = new DeviceImageStore(); + query.setDeviceId(event.getDeviceId()); + query.setImageStoreId(event.getGroupId()); + query.setType(Integer.valueOf(event.getType().shortValue())); + query.setLastUpdateTime(time); + List result = this.deviceImageStoreMapper.select(query); + if (CollectionUtils.isEmpty((Collection)result)) { + this.logger.debug("根据设备[{}]图库[{}]未查询到变更记录,新增", (Object)event.getDeviceId(), (Object)event.getGroupId()); + query.setId(this.uuidSerial.uuid()); + query.setCreateTime(time); + return this.deviceImageStoreMapper.insertSelective(query); + } + this.logger.debug("根据设备[{}]图库[{}]查询到变更记录[{}],修改", new Object[]{event.getDeviceId(), event.getGroupId(), ((DeviceImageStore)result.get(0)).getId()}); + query.setFinishPullTime(null); + query.setStatus(StatusEnum.UNNOTIFY.getValue()); + return this.deviceImageStoreMapper.update(query); + } + + private void unbindDeviceImageStore(DeviceGroupRefChangeEvent event, CoreDeviceDetailResult device) { + if (event.getType() != 2) { + return; + } + this.logger.debug("开始处理设备[{}]图库[{}]解绑", (Object)event.getDeviceId(), (Object)event.getGroupId()); + try { + DeviceImageStoreQueryParam storeQueryParam = new DeviceImageStoreQueryParam(); + storeQueryParam.setDeviceId(event.getDeviceId()); + CloudwalkResult imageStoreResult = this.aggDeviceImageStoreService.query(storeQueryParam, this.getCloudwalkContext()); + if (imageStoreResult.isSuccess() && !CollectionUtils.isEmpty((Collection)((Collection)imageStoreResult.getData()))) { + this.logger.debug("设备[{}]仍绑定其他图库", (Object)event.getDeviceId()); + String deviceCode = device.getDeviceCode(); + if (null == device.getSupportMultiPersonGroup() || Objects.equals(device.getSupportMultiPersonGroup().intValue(), DeviceAbilityEnum.NOT_SUPPORT_MULTI_PERSON_GROUP.getCode())) { + this.logger.debug("设备[{}]code[{}]不支持多图库,下发50009", (Object)event.getDeviceId(), (Object)deviceCode); + List imageStoreIds = ((List)imageStoreResult.getData()).stream().map(DeviceImageStoreQueryResult::getImageStoreId).collect(Collectors.toList()); + this.updateSyncLog(event, imageStoreIds); + HashSet changeGroupIdSet = Sets.newHashSet(); + changeGroupIdSet.add(event.getGroupId()); + ((List)imageStoreResult.getData()).stream().forEach(imageStore -> changeGroupIdSet.add(imageStore.getImageStoreId())); + this.cpImageStoreSyncManager.sendChangeToDevice(event.getDeviceId(), changeGroupIdSet, false); + return; + } + } + this.notify50010(event); + } + catch (Exception e) { + this.logger.error("设备[{}]图库[{}]解绑执行异常:{}", new Object[]{event.getDeviceId(), event.getGroupId(), e.getMessage()}); + } + } + + private void updateSyncLog(DeviceGroupRefChangeEvent event, List imageStoreIds) { + DevicePersonSyncLogDTO query = new DevicePersonSyncLogDTO(); + query.setDeviceId(event.getDeviceId()); + query.setImageStoreId(event.getGroupId()); + List dbSyncLogList = this.devicePersonSyncLogMapper.query(query); + Set personIdSet = dbSyncLogList.stream().map(DevicePersonSyncLog::getPersonId).collect(Collectors.toSet()); + List personIdPartition = Lists.partition((List)Lists.newArrayList(personIdSet), (int)this.personPartitionSize); + for (List personIds : personIdPartition) { + query.setImageStoreIds(imageStoreIds); + query.setPersonIds(personIds); + List personIdList = this.devicePersonSyncLogMapper.findPersonIds(query); + Long currentTime = System.currentTimeMillis(); + if (!CollectionUtils.isEmpty((Collection)personIdList)) { + this.logger.info("移除在其他图库中的人员:[{}]", (Object)personIdList); + personIdSet.removeAll(personIdList); + query.setPersonIds(personIdList); + query.setLastUpdateTime(currentTime); + this.devicePersonSyncLogMapper.updateLastTimeOfGroupPerson(query); + query.setLastUpdateTime(null); + query.setIsDel(Integer.valueOf(StatusEnum.INVALID.getValue())); + query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); + int res = this.devicePersonSyncLogMapper.updateIsDel(query); + this.logger.info("设备[{}]图库[{}]更新[{}]条人员存在其他图库中", new Object[]{event.getDeviceId(), event.getGroupId(), res}); + } + this.groupPersonRefMapper.updateLastUpdateTimeByPersonIds(event.getGroupId(), personIds, currentTime); + } + if (!CollectionUtils.isEmpty(personIdSet)) { + personIdPartition = Lists.partition((List)Lists.newArrayList(personIdSet), (int)this.personPartitionSize); + query = new DevicePersonSyncLogDTO(); + query.setDeviceId(event.getDeviceId()); + query.setImageStoreId(event.getGroupId()); + for (List personIds : personIdPartition) { + query.setPersonIds(personIds); + query.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + query.setIsDel(Integer.valueOf(StatusEnum.INVALID.getValue())); + query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); + int res = this.devicePersonSyncLogMapper.updateIsDel(query); + this.logger.info("设备[{}]图库[{}]更新[{}]条人员不存在其他图库中", new Object[]{event.getDeviceId(), event.getGroupId(), res}); + } + } + } + + private void notify50010(DeviceGroupRefChangeEvent event) { + try { + DevicePersonSyncLogDTO query = new DevicePersonSyncLogDTO(); + query.setDeviceId(event.getDeviceId()); + query.setImageStoreId(event.getGroupId()); + query.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + query.setIsDel(Integer.valueOf(StatusEnum.INVALID.getValue())); + query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); + int res = this.devicePersonSyncLogMapper.updateIsDel(query); + this.logger.debug("设备[{}]图库[{}]解绑,逻辑删除[{}]条同步记录", new Object[]{event.getDeviceId(), event.getGroupId(), res}); + this.logger.debug("设备[{}]图库[{}]下发50010", (Object)event.getDeviceId(), (Object)event.getGroupId()); + DeviceImageStoreReSyncParam deviceImageStoreReSyncParam = new DeviceImageStoreReSyncParam(); + deviceImageStoreReSyncParam.setDeviceId(event.getDeviceId()); + deviceImageStoreReSyncParam.setImageStoreId(event.getGroupId()); + CloudwalkResult result = this.aggDeviceImageStoreService.reSync(deviceImageStoreReSyncParam, this.getCloudwalkContext()); + if (result.isSuccess()) { + DeviceImageStore notify = new DeviceImageStore(); + notify.setDeviceId(event.getDeviceId()); + notify.setImageStoreId(event.getGroupId()); + List deviceImageStoreList = this.deviceImageStoreMapper.select(notify); + if (!CollectionUtils.isEmpty((Collection)deviceImageStoreList)) { + notify = (DeviceImageStore)deviceImageStoreList.get(0); + notify.setStatus(StatusEnum.NOTIFY.getValue()); + notify.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + this.deviceImageStoreMapper.update(notify); + } + } + } + catch (Exception e) { + this.logger.error("设备[{}]图库[{}]解绑执行异常:{}", new Object[]{event.getDeviceId(), event.getGroupId(), e.getMessage()}); + } + } + + private void bindDeviceImageStore(DeviceGroupRefChangeEvent event) { + if (event.getType() != 1) { + return; + } + this.logger.debug("开始处理设备[{}]图库[{}]绑定", (Object)event.getDeviceId(), (Object)event.getGroupId()); + DevicePersonSyncLogDTO query = new DevicePersonSyncLogDTO(); + query.setDeviceId(event.getDeviceId()); + query.setImageStoreId(event.getGroupId()); + query.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + query.setIsDel(Integer.valueOf(StatusEnum.VALID.getValue())); + query.setStatus(Integer.valueOf(SyncStatusEnum.NOT_PULL.getValue())); + int res = this.devicePersonSyncLogMapper.updateIsDel(query); + this.logger.debug("设备[{}]图库[{}]绑定,更新[{}]条同步记录", new Object[]{event.getDeviceId(), event.getGroupId(), res}); + HashSet changeGroupIdSet = Sets.newHashSet(); + changeGroupIdSet.add(event.getGroupId()); + this.cpImageStoreSyncManager.sendChangeToDevice(event.getDeviceId(), changeGroupIdSet, false); + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/DeviceGroupRefChangeEventHandler.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/ImgPersonHandler.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/ImgPersonHandler.java index cfcc925d..4e32ca1f 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/ImgPersonHandler.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/ImgPersonHandler.java @@ -388,7 +388,7 @@ this.imgStoreLabelMapper.deletePerson(delPersonLabelDTO); List imageIdResultList = Lists.newArrayList(); for (Map.Entry> entry : delMap.entrySet()) { GroupPersonSynData groupPersonSynData = new GroupPersonSynData(); -groupPersonSynData.setDelPersonIds(Lists.newArrayList((Object[])new String[] { entry.getKey() })); +groupPersonSynData.setDelPersonIds(Lists.newArrayList(entry.getKey() )); String jsonData = JsonUtils.toJson(groupPersonSynData); for (String imageStoreId : entry.getValue()) { this.cpImageStorePersonSynManager.addWaitSynTask(imageStoreId, jsonData); diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/OrganizationServiceImpl.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/OrganizationServiceImpl.java index eefe46ad..45757c5c 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/OrganizationServiceImpl.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/OrganizationServiceImpl.java @@ -1,5 +1,6 @@ package cn.cloudwalk.service.organization.service; // 业务服务 + import cn.cloudwalk.client.account.account.result.AcAccountDTO; import cn.cloudwalk.client.account.account.service.AcAccountService; import cn.cloudwalk.client.aggregate.common.enums.DelStatusEnum; @@ -14,7 +15,6 @@ import cn.cloudwalk.client.organization.param.DelUnitZoneForm; import cn.cloudwalk.client.organization.param.QueryZoneUnitParam; import cn.cloudwalk.client.organization.param.organization.AddOrganizationParam; import cn.cloudwalk.client.organization.param.organization.DelOrganizationParam; -import cn.cloudwalk.client.organization.param.organization.EditOrganizationExtendDetailParam; import cn.cloudwalk.client.organization.param.organization.EditOrganizationExtendParam; import cn.cloudwalk.client.organization.param.organization.EditOrganizationParam; import cn.cloudwalk.client.organization.param.organization.NextTreeOrganizationParam; @@ -25,6 +25,7 @@ import cn.cloudwalk.client.organization.result.NextTreeOrganizationResult; import cn.cloudwalk.client.organization.result.TreeOrganizationResult; import cn.cloudwalk.client.organization.result.ZoneUnitResultDTO; import cn.cloudwalk.client.organization.service.IOperationLogService; +import cn.cloudwalk.client.organization.service.OrganizationService; import cn.cloudwalk.client.organization.service.store.result.OrganizationAreaResult; import cn.cloudwalk.client.organization.service.store.result.OrganizationExtendDetailResult; import cn.cloudwalk.client.organization.service.store.result.OrganizationExtendResult; @@ -56,11 +57,19 @@ import cn.cloudwalk.data.organization.entity.Organization; import cn.cloudwalk.data.organization.entity.OrganizationType; import cn.cloudwalk.data.organization.entity.SysLog; import cn.cloudwalk.data.organization.mapper.ImgStoreOrganizationMapper; +import cn.cloudwalk.data.organization.mapper.ImgStoreOrganizationTypeMapper; +import cn.cloudwalk.data.organization.mapper.ImgStorePersonMapper; +import cn.cloudwalk.data.organization.mapper.ImgStorePersonOrganizationMapper; +import cn.cloudwalk.data.organization.mapper.OrganizationAreaRefMapper; +import cn.cloudwalk.data.organization.mapper.OrganizationExtendDetailMapper; import cn.cloudwalk.data.organization.mapper.OrganizationExtendMapper; import cn.cloudwalk.data.organization.mapper.SysLogMapper; +import cn.cloudwalk.service.organization.common.AbstractImagStoreService; import cn.cloudwalk.service.organization.common.ToolUtil; +import cn.cloudwalk.service.organization.service.CpImageStorePersonSynManager; import cn.cloudwalk.service.organization.service.feign.CrkAccessFeignClient; import cn.cloudwalk.service.organization.service.feign.ElevatorFeignClient; +import cn.cloudwalk.service.organization.service.feign.ZoneFeignClient; import com.alibaba.fastjson.JSON; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; @@ -75,7 +84,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -87,1039 +95,1035 @@ import org.springframework.context.annotation.Primary; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import org.springside.modules.utils.Collections3; + @Primary -@Service("coreOrganizationServiceImpl") -public class OrganizationServiceImpl extends AbstractImagStoreService implements OrganizationService { -@Resource -private ElevatorFeignClient elevatorFeignClient; -@Resource -private CrkAccessFeignClient crkAccessFeignClient; -@Resource -private ImgStoreOrganizationMapper imgStoreOrganizationMapper; -@Resource -private ImgStoreOrganizationTypeMapper imgStoreOrganizationTypeMapper; -@Resource -private OrganizationExtendMapper organizationExtendMapper; -@Resource -private OrganizationExtendDetailMapper organizationExtendDetailMapper; -@Resource -private OrganizationAreaRefMapper organizationAreaRefMapper; -@Resource -private ImgStorePersonMapper personMapper; -@Resource -private ImgStorePersonOrganizationMapper imgStorePersonOrganizationMapper; -@Autowired -private AcAccountService acAccountService; -@Autowired -private IOperationLogService operationLogService; -@Autowired -private UserService userService; -@CloudwalkParamsValidate -public CloudwalkResult add(AddOrganizationParam param, CloudwalkCallContext context) { -String businessId; -if (StringUtils.isNotBlank(param.getBusinessId())) { -businessId = param.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -GetsOrganizationDTO getsOrganizationDTO = new GetsOrganizationDTO(); -getsOrganizationDTO.setBusinessId(businessId); -getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); -if (!StringUtils.isEmpty(param.getParentId())) { -getsOrganizationDTO.setId(param.getParentId()); -List list = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -if (CollectionUtils.isEmpty(list)) -{ -return CloudwalkResult.fail("53003307", getMessage("53003307")); -} -Organization organization1 = list.get(0); -OrganizationType organizationType = this.imgStoreOrganizationTypeMapper.selectByPrimaryKey(organization1.getTypeId()); -if (organizationType != null && organizationType.getHasLowerLevel().intValue() != 1) -{ -return CloudwalkResult.fail("53003306", getMessage("53003306")); -} -} else { -List parent = this.imgStoreOrganizationMapper.getParentNode(businessId); -if (!CollectionUtils.isEmpty(parent)) -{ -return CloudwalkResult.fail("53003314", getMessage("53003314")); -} -} -getsOrganizationDTO.setId(null); -getsOrganizationDTO.setName(param.getName()); -getsOrganizationDTO.setParentId(param.getParentId()); -List names = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -if (!CollectionUtils.isEmpty(names)) -{ -return CloudwalkResult.fail("53003316", getMessage("53003316")); -} -long time = System.currentTimeMillis(); -Organization organization = (Organization)BeanCopyUtils.copyProperties(param, Organization.class); -organization.setId(getPrimaryId()); -organization.setCreateTime(Long.valueOf(time)); -organization.setCreateUserId(context.getUser().getCaller()); -organization.setIsDel(Short.valueOf((short)0)); -organization.setLastUpdateTime(Long.valueOf(time)); -organization.setLastUpdateUserId(context.getUser().getCaller()); -organization.setName(param.getName()); -organization.setParentId(param.getParentId()); -organization.setBusinessId(businessId); -organization.setIsValid(Integer.valueOf(1)); -SysLog logParam = new SysLog(); -logParam.setLogType(Integer.valueOf(5)); -logParam.setRemark(OperationLogEnum.ORR_ADD.getName() + "-" + organization.getName()); -saveSysLog(logParam, context); -this.imgStoreOrganizationMapper.insertSelective(organization); -AddUnitZoneRefForm addUnitZoneRefForm = new AddUnitZoneRefForm(); -addUnitZoneRefForm.setUnitId(organization.getId()); -addUnitZoneRefForm.setUnitName(organization.getName()); -addUnitZoneRefForm.setZoneIds(param.getZoneIds()); -this.zoneFeignClient.addUnitRef(addUnitZoneRefForm); -return CloudwalkResult.success(organization.getId()); -} -@Autowired -private SysLogMapper sysLogMapper; @Autowired -private MessageSource messageSource; -@CloudwalkParamsValidate -public CloudwalkResult edit(EditOrganizationParam param, CloudwalkCallContext context) throws ServiceException { -String businessId; -if (StringUtils.isNotBlank(param.getBusinessId())) { -businessId = param.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -GetsOrganizationDTO getsOrganizationDTO = new GetsOrganizationDTO(); -getsOrganizationDTO.setId(param.getId()); -getsOrganizationDTO.setBusinessId(businessId); -getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); -List organizationList = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -if (CollectionUtils.isEmpty(organizationList)) -{ -return CloudwalkResult.fail("53003310", getMessage("53003310")); -} -List res = null; -Organization old = organizationList.get(0); -Organization edit = (Organization)BeanCopyUtils.copyProperties(param, Organization.class); -edit.setId(old.getId()); -if (!StringUtils.isEmpty(param.getParentId())) { -try { -res = judgeNodeLevel(param, businessId); -} catch (ServiceException e) { -return CloudwalkResult.fail(e.getCode(), e.getMessage()); -} -edit.setParentId(param.getParentId()); -} -if (!StringUtils.isEmpty(param.getName())) { -if (res == null) -{ -res = BeanCopyUtils.copy(this.imgStoreOrganizationMapper.getAllOrg(businessId), TreeOrganizationResult.class); -} -for (TreeOrganizationResult org : res) { -if (org.getName().equals(param.getName()) && !org.getId().equals(param.getId()) && org.getParentId().equals(param.getParentId())) -{ -return CloudwalkResult.fail("53003316", getMessage("53003316")); -} -} -edit.setName(param.getName()); -} -edit.setLastUpdateUserId(context.getUser().getCaller()); -edit.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -SysLog logParam = new SysLog(); -logParam.setLogType(Integer.valueOf(3)); -logParam.setRemark(OperationLogEnum.ORG_EDIT.getName() + "-" + edit.getName()); -saveSysLog(logParam, context); -this.imgStoreOrganizationMapper.updateByPrimaryKeySelective(edit); -AddUnitZoneRefForm addUnitZoneRefForm = new AddUnitZoneRefForm(); -addUnitZoneRefForm.setUnitId(edit.getId()); -addUnitZoneRefForm.setUnitName(edit.getName()); -addUnitZoneRefForm.setZoneIds(param.getZoneIds()); -this.zoneFeignClient.addUnitRef(addUnitZoneRefForm); -if (param.getExtend() != null) { -saveOrUpdateExtendDetails(param, businessId); -} -if (param.getOfficeArea() != null || param.getPassableArea() != null) { -saveAreaDetails(param, businessId); -} -return CloudwalkResult.success(Boolean.TRUE); -} @Autowired -private CpImageStorePersonSynManager cpImageStorePersonSynManager; @Resource -private ZoneFeignClient zoneFeignClient; private static final short IS_DEL = 1; protected static final short IS_NOT_DEL = 0; @Value("${download.rows.of.page:5000}") -private int rowsOfPage; -@CloudwalkParamsValidate -public CloudwalkResult delete(DelOrganizationParam param, CloudwalkCallContext context) { -String businessId; -if (StringUtils.isNotBlank(param.getBusinessId())) { -businessId = param.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -if (!CollectionUtils.isEmpty(param.getIds())) { -List orgByIds = this.imgStoreOrganizationMapper.getOrgByIds(param.getIds(), businessId); -if (orgByIds.size() != param.getIds().size()) -{ -return CloudwalkResult.fail("53060411", getMessage("53060411")); -} -if (!CollectionUtils.isEmpty(this.imgStoreOrganizationMapper.getParentIdIsNull(param.getIds()))) -{ -return CloudwalkResult.fail("53003313", getMessage("53003313")); -} -String delName = ((Organization)orgByIds.get(0)).getName(); -if (orgByIds.size() > 1) { -for (int i = 1; i < orgByIds.size(); i++) { -delName = delName + "、" + ((Organization)orgByIds.get(i)).getName(); -} -} -if (delName.length() > 100) { -delName = delName.substring(0, 100) + "等"; -} -SysLog logParam = new SysLog(); -logParam.setLogType(Integer.valueOf(6)); -logParam.setRemark(OperationLogEnum.ORG_DELETE.getName() + "-" + delName); -saveSysLog(logParam, context); -this.imgStoreOrganizationMapper.batchDel(param.getIds(), System.currentTimeMillis(), context.getUser().getCaller(), businessId); -this.imgStorePersonOrganizationMapper.deleteByOrgIds(param.getIds()); -DelUnitZoneForm delUnitZoneForm = new DelUnitZoneForm(); -delUnitZoneForm.setUnitIds(param.getIds()); -CloudwalkResult data = this.zoneFeignClient.delUnit(delUnitZoneForm); -this.logger.info("删除关联机构{}", data.getData()); -} -return CloudwalkResult.success(Boolean.TRUE); -} -private UserQueryResult getByUserId(String userId, CloudwalkCallContext context) throws ServiceException { -UserGetsParam param = new UserGetsParam(); -param.setIds(Lists.newArrayList((Object[])new String[] { userId })); -CloudwalkResult> userList = this.userService.gets(param, context); -if (userList.isSuccess() && !CollectionUtils.isEmpty((Collection)userList.getData())) { -return ((List)userList.getData()).get(0); -} -this.logger.error("通过登录用户查询机构,查询登录用户失败:{},{},{}", new Object[] { userId, userList.getCode(), userList.getMessage() }); -return null; -} -private CloudwalkResult> getOrgIdsByLoginUser(String businessId, CloudwalkCallContext context) { -Set orgAllIds = new HashSet<>(); -try { -String userId = context.getUser().getCaller(); -this.logger.info("通过登录用户查询机构:{}", userId); -UserQueryResult user = getByUserId(userId, context); -if (user != null) { -AcAccountDTO account = getAccountById(user.getLoginId()); -String personId = account.getPersonId(); -if (StringUtils.isNotBlank(personId)) { -ImgStorePersonOrganization personOrganization = new ImgStorePersonOrganization(); -personOrganization.setPersonId(personId); -List organizationList = this.imgStorePersonOrganizationMapper.select(personOrganization); -if (!CollectionUtils.isEmpty(organizationList)) { -List orgIds = Collections3.extractToList(organizationList, "orgId"); -orgAllIds.addAll(orgIds); -while (true) { -List resByPIds = BeanCopyUtils.copy(this.imgStoreOrganizationMapper.getOrgByParentIds(orgIds, businessId), TreeOrganizationResult.class); -if (!CollectionUtils.isEmpty(resByPIds)) { -orgIds = Collections3.extractToList(resByPIds, "id"); -orgAllIds.addAll(orgIds); -continue; -} -break; -} -} -} -return CloudwalkResult.success(new ArrayList<>(orgAllIds)); -} -return CloudwalkResult.fail("00000001", getMessage("00000001")); -} -catch (ServiceException e) { -String errorMessage = this.messageSource.getMessage(e.getCode(), null, LocaleContextHolder.getLocale()); -this.logger.error("通过登录用户查询机构:{},{}", e.getCode(), errorMessage); -return CloudwalkResult.fail(e.getCode(), errorMessage); -} -} -public CloudwalkResult> tree(NextTreeOrganizationParam param, CloudwalkCallContext context) throws ServiceException { -List res; -String businessId = context.getCompany().getCompanyId(); -List tree = new ArrayList<>(); -if (StringUtils.isBlank(param.getParentId())) { -List allOrg = this.imgStoreOrganizationMapper.getAllOrg(businessId); -res = BeanCopyUtils.copy(allOrg, TreeOrganizationResult.class); -res = (List)res.stream().filter(ToolUtil.distinctByKey(TreeOrganizationResult::getId)).collect(Collectors.toList()); -} else { -res = getTreeByParentId(param.getParentId(), businessId); -} -addPersonCount(res); -addTypeName(res, businessId); -for (TreeOrganizationResult nodeX : res) { -boolean mark = false; -for (TreeOrganizationResult nodeY : res) { -if (nodeX.getParentId() != null && nodeX.getParentId().equals(nodeY.getId())) { -mark = true; -if (nodeY.getChildren() == null) { -nodeY.setChildren(new ArrayList()); -} -nodeY.getChildren().add(nodeX); -break; -} -} -if (!mark) { -tree.add(nodeX); -} -} -addLevel(tree, 1); -return CloudwalkResult.success(tree); -} -private List getTreeByParentId(String parentId, String businessId) { -List parentIdList = new ArrayList<>(); -parentIdList.add(parentId); -List resultAll = new ArrayList<>(); -while (!CollectionUtils.isEmpty(parentIdList)) { -List resultOnce = this.imgStoreOrganizationMapper.getOrgByParentIds(parentIdList, businessId); -if (!CollectionUtils.isEmpty(resultOnce)) { -resultAll.addAll(resultOnce); -parentIdList.clear(); -for (Organization organization : resultOnce) -parentIdList.add(organization.getId()); continue; -} break; -} -return BeanCopyUtils.copy(resultAll, TreeOrganizationResult.class); -} -private List getListByParentId(GetsOrganizationDTO dto, Integer retainParent) { -List parentIdList = new ArrayList<>(); -String parentId = dto.getParentId(); -parentIdList.add(parentId); -dto.setParentId(null); -List resultAll = new ArrayList<>(); -while (!CollectionUtils.isEmpty(parentIdList)) { -dto.setParentIds(parentIdList); -List resultOnce = this.imgStoreOrganizationMapper.gets(dto); -if (!CollectionUtils.isEmpty(resultOnce)) { -resultAll.addAll(resultOnce); -parentIdList.clear(); -for (Organization organization : resultOnce) -parentIdList.add(organization.getId()); continue; -} -break; -} -if (retainParent != null && retainParent.intValue() == 1) { -Organization organization = this.imgStoreOrganizationMapper.selectByPrimaryKey(parentId); -resultAll.add(organization); -} -return resultAll; -} -public CloudwalkResult> getNextTree(NextTreeOrganizationParam param, CloudwalkCallContext context) { -String businessId; -if (StringUtils.isNotBlank(param.getBusinessId())) { -businessId = param.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -List res = BeanCopyUtils.copy(this.imgStoreOrganizationMapper.getNextOrg(param.getParentId(), businessId), NextTreeOrganizationResult.class); -List ids = new ArrayList<>(); -Set typeIds = new HashSet<>(); -for (NextTreeOrganizationResult nextTreeOrganizationResult : res) { -ids.add(nextTreeOrganizationResult.getId()); -typeIds.add(nextTreeOrganizationResult.getTypeId()); -} -if (!CollectionUtils.isEmpty(ids)) { -Map map = new HashMap<>(); -Map typeMap = new HashMap<>(); -List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); -OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); -typeQueryDto.setIds(new ArrayList<>(typeIds)); -List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); -for (OrgCountDTO dto : orgCountDTOS) { -map.put(dto.getId(), dto.getCount()); -} -if (!CollectionUtils.isEmpty(orgTypeList)) { -for (OrganizationType organizationType : orgTypeList) { -typeMap.put(organizationType.getId(), organizationType); -} -} -for (NextTreeOrganizationResult nextTreeOrganizationResult : res) { -Integer count = map.get(nextTreeOrganizationResult.getId()); -if (count != null) { -nextTreeOrganizationResult.setPersonCount(count); -} else { -nextTreeOrganizationResult.setPersonCount(Integer.valueOf(0)); -} -OrganizationType organizationType = typeMap.get(nextTreeOrganizationResult.getTypeId()); -if (organizationType != null) { -String typeName = organizationType.getName(); -nextTreeOrganizationResult.setType((typeName == null) ? "" : typeName); -nextTreeOrganizationResult.setHasLowerLevel(organizationType.getHasLowerLevel()); continue; -} -nextTreeOrganizationResult.setType(""); -nextTreeOrganizationResult.setHasLowerLevel(null); -} -} -return CloudwalkResult.success(res); -} -@CloudwalkParamsValidate -public CloudwalkResult addPerson(AddPersonOrgParam personOrgParam, CloudwalkCallContext context) { -if (CollectionUtils.isEmpty(personOrgParam.getPersonIds())) -{ -return CloudwalkResult.fail("53060411", getMessage("53060411")); -} -Organization personOrg = this.imgStoreOrganizationMapper.selectByPrimaryKey(personOrgParam.getOrganizationId()); -if (personOrg == null || personOrg.getIsDel().shortValue() == 1 || !context.getCompany().getCompanyId().equals(personOrg.getBusinessId())) { -return CloudwalkResult.fail("53003310", getMessage("53003310")); -} -List personIds = this.imgStoreOrganizationMapper.getPersonIdInRef((AddPersonOrgDTO)BeanCopyUtils.copyProperties(personOrgParam, AddPersonOrgDTO.class)); -if (!CollectionUtils.isEmpty(personIds)) -{ -personOrgParam.getPersonIds().removeAll(personIds); -} -if (CollectionUtils.isEmpty(personOrgParam.getPersonIds())) { -return CloudwalkResult.success(Boolean.TRUE); -} -ImgStorePersonQueryDto dto = new ImgStorePersonQueryDto(); -dto.setIds(personOrgParam.getPersonIds()); -dto.setBusinessId(StringUtils.isEmpty(personOrgParam.getBusinessId()) ? context.getCompany().getCompanyId() : personOrgParam.getBusinessId()); -dto.setIsDel(DelStatusEnum.NORAML.getCode()); -if (this.personMapper.gets(dto).size() != personOrgParam.getPersonIds().size()) -{ -return CloudwalkResult.fail("53003311", getMessage("53003311")); -} -List list = new ArrayList<>(); -long time = System.currentTimeMillis(); -for (String id : personOrgParam.getPersonIds()) { -ImgStorePersonOrganization org = new ImgStorePersonOrganization(); -org.setCreateTime(Long.valueOf(time)); -org.setCreateUserId(context.getUser().getCaller()); -org.setId(getPrimaryId()); -org.setLastUpdateTime(Long.valueOf(time)); -org.setLastUpdateUserId(context.getUser().getCaller()); -org.setOrgId(personOrgParam.getOrganizationId()); -org.setPersonId(id); -list.add(org); -} -this.imgStoreOrganizationMapper.batchInsert(list); -ImgStorePersonBatchUpdateDto record = new ImgStorePersonBatchUpdateDto(); -record.setIds(personOrgParam.getPersonIds()); -record.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -this.personMapper.updateBatchByIds(record); -List imageIdResultList = this.cpImageStorePersonSynManager.addGroupPersonSynTask(personOrgParam.getOrganizationId(), personOrgParam.getPersonIds(), true); -if (Collections3.isNotEmpty(imageIdResultList)) { -imageIdResultList.parallelStream() -.forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask(imageId)); -} -return CloudwalkResult.success(Boolean.TRUE); -} -@CloudwalkParamsValidate -public CloudwalkResult delPerson(DelPersonOrgParam personOrgParam, CloudwalkCallContext context) { -String businessId; -if (StringUtils.isNotBlank(personOrgParam.getBusinessId())) { -businessId = personOrgParam.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -GetsOrganizationDTO getsOrganizationDTO = new GetsOrganizationDTO(); -getsOrganizationDTO.setId(personOrgParam.getOrganizationId()); -getsOrganizationDTO.setBusinessId(businessId); -List organizationList = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -if (CollectionUtils.isEmpty(organizationList)) -{ -return CloudwalkResult.fail("53003310", getMessage("53003310")); -} -if (!CollectionUtils.isEmpty(personOrgParam.getPersonIds())) { -this.imgStoreOrganizationMapper.delPerson((DelPersonOrgDTO)BeanCopyUtils.copyProperties(personOrgParam, DelPersonOrgDTO.class)); -ImgStorePersonBatchUpdateDto record = new ImgStorePersonBatchUpdateDto(); -record.setIds(personOrgParam.getPersonIds()); -record.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -this.personMapper.updateBatchByIds(record); -List imageIdResultList = this.cpImageStorePersonSynManager.addGroupPersonSynTask(personOrgParam.getOrganizationId(), personOrgParam.getPersonIds(), false); -if (Collections3.isNotEmpty(imageIdResultList)) { -imageIdResultList.parallelStream() -.forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask(imageId)); -} -} -return CloudwalkResult.success(Boolean.TRUE); -} -protected AcAccountDTO getAccountById(String loginId) throws ServiceException { -CloudwalkResult result = this.acAccountService.getAcAccountById(loginId); -if (result == null) { -throw new ServiceException("56000001", getMessage("56000001")); -} -if (!"00000000".equals(result.getCode())) { -throw new ServiceException(result.getCode(), result.getMessage()); -} -if (result.getData() == null) { -throw new ServiceException("56000043", getMessage("56000043")); -} -return (AcAccountDTO)result.getData(); -} -public CloudwalkResult> getList(QueryOrganizationParam param, CloudwalkCallContext context) { -String businessId; -List resultData; -if (StringUtils.isNotBlank(param.getBusinessId())) { -businessId = param.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -List orgIds = new ArrayList<>(); -if (param.getByLoginUser() != null && param.getByLoginUser().booleanValue()) { -CloudwalkResult> orgIdsByLoginUser = getOrgIdsByLoginUser(businessId, context); -if (!orgIdsByLoginUser.isSuccess()) { -return CloudwalkResult.fail(orgIdsByLoginUser.getCode(), orgIdsByLoginUser.getMessage()); -} -if (!CollectionUtils.isEmpty((Collection)orgIdsByLoginUser.getData())) { -orgIds = (List)orgIdsByLoginUser.getData(); -} else { -return CloudwalkResult.success(new ArrayList()); -} -} -GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties(param, GetsOrganizationDTO.class); -getsOrganizationDTO.setBusinessId(businessId); -getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); -if (!CollectionUtils.isEmpty(orgIds)) { -List list = param.getIds(); -if (!CollectionUtils.isEmpty(list)) { -orgIds.retainAll(list); -if (CollectionUtils.isEmpty(orgIds)) { -return CloudwalkResult.success(new ArrayList()); -} -} -getsOrganizationDTO.setIds(orgIds); -} -if (StringUtils.isNotBlank(param.getParentId()) && param.getHasCascade() != null && param.getHasCascade().intValue() == 1) { -resultData = getListByParentId(getsOrganizationDTO, param.getRetainParent()); -} else { -resultData = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -} -List ids = new ArrayList<>(); -Set typeIds = new HashSet<>(); -for (Organization organization : resultData) { -ids.add(organization.getId()); -typeIds.add(organization.getTypeId()); -} -List resultList = BeanCopyUtils.copy(resultData, OrganizationResult.class); -if (!CollectionUtils.isEmpty(ids)) { -Map map = new HashMap<>(); -Map typeMap = new HashMap<>(); -List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); -OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); -typeQueryDto.setIds(new ArrayList<>(typeIds)); -List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); -if (!CollectionUtils.isEmpty(orgCountDTOS)) { -for (OrgCountDTO dto : orgCountDTOS) { -map.put(dto.getId(), dto.getCount()); -} -} -if (!CollectionUtils.isEmpty(orgTypeList)) { -for (OrganizationType organizationType : orgTypeList) { -typeMap.put(organizationType.getId(), organizationType); -} -} -for (OrganizationResult result : resultList) { -Integer count = map.get(result.getId()); -if (count != null) { -result.setPersonCount(count); -} else { -result.setPersonCount(Integer.valueOf(0)); -} -OrganizationType organizationType = typeMap.get(result.getTypeId()); -if (organizationType != null) { -String typeName = organizationType.getName(); -result.setType((typeName == null) ? "" : typeName); -result.setHasLowerLevel(organizationType.getHasLowerLevel()); continue; -} -result.setType(""); -result.setHasLowerLevel(null); -} -} -return CloudwalkResult.success(resultList); -} -public CloudwalkResult> getPage(QueryOrganizationParam param, CloudwalkPageInfo page, CloudwalkCallContext context) { -String businessId; -if (StringUtils.isNotBlank(param.getBusinessId())) { -businessId = param.getBusinessId(); -} else { -businessId = context.getCompany().getCompanyId(); -} -PageHelper.startPage(page.getCurrentPage(), page.getPageSize()); -GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties(param, GetsOrganizationDTO.class); -getsOrganizationDTO.setBusinessId(businessId); -getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); -Page pageData = (Page)this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -List resultData = pageData.getResult(); -List ids = new ArrayList<>(); -Set typeIds = new HashSet<>(); -for (Organization organization : resultData) { -ids.add(organization.getId()); -typeIds.add(organization.getTypeId()); -} -List resultList = BeanCopyUtils.copy(resultData, OrganizationResult.class); -if (!CollectionUtils.isEmpty(ids)) { -Map map = new HashMap<>(); -Map typeMap = new HashMap<>(); -List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); -OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); -typeQueryDto.setIds(new ArrayList<>(typeIds)); -List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); -if (!CollectionUtils.isEmpty(orgCountDTOS)) { -for (OrgCountDTO dto : orgCountDTOS) { -map.put(dto.getId(), dto.getCount()); -} -} -if (!CollectionUtils.isEmpty(orgTypeList)) { -for (OrganizationType organizationType : orgTypeList) { -typeMap.put(organizationType.getId(), organizationType); -} -} -for (OrganizationResult result : resultList) { -Integer count = map.get(result.getId()); -if (count != null) { -result.setPersonCount(count); -} else { -result.setPersonCount(Integer.valueOf(0)); -} -OrganizationType organizationType = typeMap.get(result.getTypeId()); -if (organizationType != null) { -String typeName = organizationType.getName(); -result.setType((typeName == null) ? "" : typeName); -result.setHasLowerLevel(organizationType.getHasLowerLevel()); continue; -} -result.setType(""); -result.setHasLowerLevel(null); -} -} -CloudwalkPageAble pageAble = new CloudwalkPageAble(resultList, page, pageData.getTotal()); -return CloudwalkResult.success(pageAble); -} -public CloudwalkResult> listByPage(QueryOrganizationParam param, CloudwalkCallContext context) throws ServiceException { -String businessId = StringUtils.isEmpty(param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); -try { -GetsOrganizationDTO dto = (GetsOrganizationDTO)BeanCopyUtils.copyProperties(param, new GetsOrganizationDTO()); -dto.setIsDel(DelStatusEnum.NORAML.getCode()); -dto.setBusinessId(businessId); -long s1 = System.currentTimeMillis(); -int totalCount = this.imgStoreOrganizationMapper.count(dto); -long e1 = System.currentTimeMillis(); -this.logger.info("机构导出查询总数{},耗时{}毫秒", Integer.valueOf(totalCount), Long.valueOf(e1 - s1)); -int totalPage = 1; -if (totalCount != 0) { -totalPage = (totalCount % this.rowsOfPage == 0) ? (totalCount / this.rowsOfPage) : (totalCount / this.rowsOfPage + 1); -} -List orgList = Lists.newArrayListWithCapacity(totalCount); -for (int i = 1; i <= totalPage; i++) { -PageHelper.startPage(i, this.rowsOfPage); -PageHelper.orderBy("LAST_UPDATE_TIME DESC, ID DESC"); -this.logger.info("分页查询机构信息列表,查询参数:[{}]", JSON.toJSONString(dto)); -long s2 = System.currentTimeMillis(); -Page gets = (Page)this.imgStoreOrganizationMapper.gets(dto); -long e2 = System.currentTimeMillis(); -this.logger.info("机构导出第{}次分页查询,耗时{}毫秒", Integer.valueOf(i), Long.valueOf(e2 - s2)); -orgList.addAll(gets.getResult()); -} -List ids = new ArrayList<>(); -Set typeIds = new HashSet<>(); -for (Organization organization : orgList) { -ids.add(organization.getId()); -typeIds.add(organization.getTypeId()); -} -List resultList = BeanCopyUtils.copy(orgList, OrganizationResult.class); -if (!CollectionUtils.isEmpty(ids)) { -Map map = new HashMap<>(); -Map typeMap = new HashMap<>(); -List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); -OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); -typeQueryDto.setIds(new ArrayList<>(typeIds)); -List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); -if (!CollectionUtils.isEmpty(orgCountDTOS)) { -for (OrgCountDTO countDTO : orgCountDTOS) { -map.put(countDTO.getId(), countDTO.getCount()); -} -} -if (!CollectionUtils.isEmpty(orgTypeList)) { -for (OrganizationType organizationType : orgTypeList) { -typeMap.put(organizationType.getId(), organizationType); -} -} -for (OrganizationResult orgResult : resultList) { -Integer count = map.get(orgResult.getId()); -if (count != null) { -orgResult.setPersonCount(count); -} else { -orgResult.setPersonCount(Integer.valueOf(0)); -} -OrganizationType organizationType = typeMap.get(orgResult.getTypeId()); -if (organizationType != null) { -String typeName = organizationType.getName(); -orgResult.setType((typeName == null) ? "" : typeName); -orgResult.setHasLowerLevel(organizationType.getHasLowerLevel()); -} else { -orgResult.setType(""); -orgResult.setHasLowerLevel(null); -} -AcsDeviceRestructureConditionForm conditionForm = new AcsDeviceRestructureConditionForm(); -conditionForm.setOrgId(orgResult.getId()); -conditionForm.setBusinessId(context.getCompany().getCompanyId()); -CloudwalkResult> deviceList = this.crkAccessFeignClient.listCondition(conditionForm); -if (!CollectionUtils.isEmpty((Collection)deviceList.getData())) { -String online = ""; -String offline = ""; -for (int j = 0; j < ((List)deviceList.getData()).size(); j++) { -if ("2".equals(((AcsDeviceNewResult)((List)deviceList.getData()).get(j)).getDeviceOnlineStatus())) { -if ("".equals(online)) { -online = online + ((AcsDeviceNewResult)((List)deviceList.getData()).get(j)).getDeviceName(); -} else { -online = online + "," + ((AcsDeviceNewResult)((List)deviceList.getData()).get(j)).getDeviceName(); -} -} else if ("".equals(offline)) { -offline = offline + ((AcsDeviceNewResult)((List)deviceList.getData()).get(j)).getDeviceName(); -} else { -offline = offline + ',' + ((AcsDeviceNewResult)((List)deviceList.getData()).get(j)).getDeviceName(); -} -} -orgResult.setOnlineDevices(online); -orgResult.setOfflineDevices(offline); -} -AcsRestructureQueryForm acsPassRuleImageForm = new AcsRestructureQueryForm(); -acsPassRuleImageForm.setOrgId(orgResult.getId()); -acsPassRuleImageForm.setBusinessId(businessId); -CloudwalkResult> images = this.elevatorFeignClient.listCondition(acsPassRuleImageForm); -if (Objects.equals(images.getCode(), "00000000")) { -List floorList = new ArrayList<>(); -String zoneNames = ""; -List acsPassRuleImageResultDtoList = (List)images.getData(); -for (int j = 0; j < acsPassRuleImageResultDtoList.size(); j++) { -if (j > 0) { -zoneNames = zoneNames + ","; -} -zoneNames = zoneNames + ((AcsDeviceRestructureResult)acsPassRuleImageResultDtoList.get(j)).getZoneName(); -floorList.add(((AcsDeviceRestructureResult)acsPassRuleImageResultDtoList.get(j)).getZoneId()); -} -orgResult.setFloorNames(zoneNames); -} -} -} -return CloudwalkResult.success(resultList); -} catch (Exception e) { -this.logger.error("执行报错 {}: {}", e.getClass().getName(), e.getMessage()); -return null; -} -} -public CloudwalkResult detail(QueryOrganizationParam param, CloudwalkCallContext context) { -String businessId = context.getCompany().getCompanyId(); -GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties(param, GetsOrganizationDTO.class); -getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); -List resultData = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -Organization organization = null; -if (!CollectionUtils.isEmpty(resultData)) { -organization = resultData.get(0); -} else { -return CloudwalkResult.success(null); -} -String orgId = organization.getId(); -String typeId = organization.getTypeId(); -List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(Collections.singletonList(orgId)); -OrganizationType organizationType = this.imgStoreOrganizationTypeMapper.selectByPrimaryKey(typeId); -OrganizationResult result = (OrganizationResult)BeanCopyUtils.copyProperties(organization, OrganizationResult.class); -if (!CollectionUtils.isEmpty(orgCountDTOS)) { -result.setPersonCount(((OrgCountDTO)orgCountDTOS.get(0)).getCount()); -} else { -result.setPersonCount(Integer.valueOf(0)); -} -if (organizationType != null) { -result.setType(organizationType.getName()); -result.setHasLowerLevel(organizationType.getHasLowerLevel()); -} else { -result.setType(""); -result.setHasLowerLevel(null); -} -if (result.getParentId() == null) { -result.setLevel(Integer.valueOf(1)); -} -result.setIsValid(organization.getIsValid()); -if (Objects.equals(organizationType.getCode(), OrganizationTypeCodeEnum.UNIT.getCode())) { -OrganizationExtendDTO extendDTO = Optional.ofNullable(this.organizationExtendMapper.selectByOrgId(orgId)).orElse(new OrganizationExtendDTO()); -OrganizationExtendResult extendResult = (OrganizationExtendResult)BeanCopyUtils.copyProperties(extendDTO, OrganizationExtendResult.class); -if (extendDTO.getId() != null) { -List detail = this.organizationExtendDetailMapper.selectByOrgId(orgId, businessId); -List extendDetail = BeanCopyUtils.copy(detail, OrganizationExtendDetailResult.class); -extendResult.setDetail(extendDetail); -} -result.setExtend(extendResult); -List refDTOS = Optional.>ofNullable(this.organizationAreaRefMapper.listByOrgId(orgId, businessId)).orElse(Collections.emptyList()); -List officeArea = (List)refDTOS.stream().filter(it -> (it.getRefType().intValue() == 0)).map(OrganizationAreaRefDTO::getAreaId).collect(Collectors.toList()); -List passableArea = (List)refDTOS.stream().filter(it -> (it.getRefType().intValue() == 1)).map(OrganizationAreaRefDTO::getAreaId).collect(Collectors.toList()); -result.setPassableArea(passableArea); -result.setOfficeArea(officeArea); -QueryZoneUnitParam queryZoneUnitParam = new QueryZoneUnitParam(); -queryZoneUnitParam.setUnitIds(Collections.singletonList(organization.getId())); -CloudwalkResult> zoneDetail = this.zoneFeignClient.findZoneDetailByUnitIds(queryZoneUnitParam); -List zoneIds = new ArrayList<>(); -if (Objects.equals(zoneDetail.getCode(), "00000000")) { -List data = (List)zoneDetail.getData(); -zoneIds = (List)data.stream().map(ZoneUnitResultDTO::getZoneId).collect(Collectors.toList()); -} -result.setZoneIds(zoneIds); -} -return CloudwalkResult.success(result); -} -public CloudwalkResult> listNames(QueryOrganizationParam param, CloudwalkCallContext context) { -if (param.getId() == null && (param.getIds() == null || param.getIds().isEmpty())) { -return CloudwalkResult.fail("", "请输入查询参数"); -} -String businessId = context.getCompany().getCompanyId(); -List ids = new ArrayList<>(); -if (param.getId() != null) { -ids.add(param.getId()); -} else { -ids = param.getIds(); -} -List organizations = Optional.>ofNullable(this.imgStoreOrganizationMapper.listNames(ids, businessId)).orElse(Collections.emptyList()); -Map collect = (Map)organizations.stream().collect(Collectors.toMap(it -> it.getId(), v -> v.getName())); -return CloudwalkResult.success(collect); -} -public CloudwalkResult listAreas(QueryOrganizationParam param, CloudwalkCallContext context) { -String businessId = context.getCompany().getCompanyId(); -List refDTOS = Optional.>ofNullable(this.organizationAreaRefMapper.listByOrgId(param.getId(), businessId)).orElse(Collections.emptyList()); -List office = new ArrayList<>(); -List passable = new ArrayList<>(); -for (OrganizationAreaRefDTO refDTO : refDTOS) { -if (refDTO.getRefType().intValue() == 0) { -office.add(refDTO.getAreaId()); continue; -} -passable.add(refDTO.getAreaId()); -} -OrganizationAreaResult result = new OrganizationAreaResult(); -result.setOrganizationId(param.getId()); -result.setBusinessId(businessId); -result.setOfficeArea(office); -result.setPassableArea(passable); -return CloudwalkResult.success(result); -} -public CloudwalkResult>> getOrg(List ids, String businessId, CloudwalkCallContext cloudwalkContext) { -List orgTreeDTOS = this.imgStoreOrganizationMapper.selectAllType(businessId); -Map> treeDTOMap = new HashMap<>(); -Iterator iterator = orgTreeDTOS.iterator(); -while (iterator.hasNext()) { -OrgTreeDTO orgTreeDTO = iterator.next(); -if (CollectionUtils.isEmpty(treeDTOMap.get(orgTreeDTO.getId()))) { -List list = new ArrayList<>(); -treeDTOMap.put(orgTreeDTO.getId(), list); -} -List dtos = treeDTOMap.get(orgTreeDTO.getId()); -dtos.add(orgTreeDTO); -treeDTOMap.put(orgTreeDTO.getId(), dtos); -iterator.remove(); -} -Map> result = new HashMap<>(ids.size()); -for (String id : ids) { -List stringList = process(id, treeDTOMap); -if (CollectionUtils.isEmpty(result.get(id))) { -List list = new ArrayList<>(); -result.put(id, list); -} -List typeIdList = result.get(id); -typeIdList.addAll(stringList); -result.put(id, typeIdList); -} -return CloudwalkResult.success(result); -} -public CloudwalkResult enable(QueryOrganizationParam param, CloudwalkCallContext cloudwalkContext) { -Boolean result = updateIsValid(param, 0, 1); -return CloudwalkResult.success(result); -} -public CloudwalkResult disable(QueryOrganizationParam param, CloudwalkCallContext cloudwalkContext) { -Boolean result = updateIsValid(param, 1, 0); -return CloudwalkResult.success(result); -} -private List judgeNodeLevel(EditOrganizationParam param, String businessId) throws ServiceException { -List res = null; -Organization parent = this.imgStoreOrganizationMapper.selectByPrimaryKey(param.getParentId()); -if (parent == null || parent.getIsDel().shortValue() == 1 || !businessId.equals(parent.getBusinessId())) { -throw new ServiceException("53003307", getMessage("53003307")); -} -res = BeanCopyUtils.copy(this.imgStoreOrganizationMapper.getAllOrg(businessId), TreeOrganizationResult.class); -TreeOrganizationResult currentNode = null; -for (TreeOrganizationResult org : res) { -if (org.getId().equals(param.getId())) { -currentNode = org; -break; -} -} -for (TreeOrganizationResult nodeX : res) { -label33: for (TreeOrganizationResult nodeY : res) { -if (nodeX.getParentId() != null && nodeX.getParentId().equals(nodeY.getId())) { -if (nodeY.getChildren() == null) { -nodeY.setChildren(new ArrayList()); break label33; -} -nodeY.getChildren().add(nodeX); -} -} -} -if (currentNode != null && !CollectionUtils.isEmpty(currentNode.getChildren())) { -List values = new ArrayList<>(); -judgeTreeNode(currentNode.getChildren(), values); -values.add(param.getId()); -if (values.contains(param.getParentId())) -{ -throw new ServiceException("53060425", getMessage("53060425")); -} -} -return res; -} -private void saveOrUpdateExtendDetails(EditOrganizationParam param, String businessId) throws ServiceException { -EditOrganizationExtendParam extend = param.getExtend(); -OrganizationExtendDTO organizationExtendDTO = (OrganizationExtendDTO)BeanCopyUtils.copyProperties(extend, OrganizationExtendDTO.class); -organizationExtendDTO.setBusinessId(businessId); -organizationExtendDTO.setOrganizationId(param.getId()); -int update = this.organizationExtendMapper.updateByOrganizationId(organizationExtendDTO); -if (update != 1) { -throw new ServiceException("2", "2"); -} -List detailList = extend.getDetail(); -List detailDTOList = BeanCopyUtils.copy(detailList, OrganizationExtendDetailDTO.class); -for (OrganizationExtendDetailDTO detailDTO : detailDTOList) { -this.organizationExtendDetailMapper.insertSelective(detailDTO); -} -} -private void saveAreaDetails(EditOrganizationParam param, String businessId) { -List passableArea = param.getPassableArea(); -String organizationId = param.getId(); -int type = 1; -this.organizationAreaRefMapper.deleteAllByOrgId(organizationId, businessId); -List passableList = (List)passableArea.stream().map(areaId -> { OrganizationAreaRefDTO refDTO = new OrganizationAreaRefDTO(); refDTO.setAreaId(areaId); refDTO.setId(CloudwalkDateUtils.getUUID()); refDTO.setRefType(Integer.valueOf(1)); refDTO.setOrgId(organizationId); refDTO.setBusinessId(businessId); refDTO.setCreateTime(Long.valueOf(System.currentTimeMillis())); return refDTO; }).collect(Collectors.toList()); -List officeArea = param.getOfficeArea(); -List officeList = (List)officeArea.stream().map(areaId -> { OrganizationAreaRefDTO refDTO = new OrganizationAreaRefDTO(); refDTO.setAreaId(areaId); refDTO.setId(CloudwalkDateUtils.getUUID()); refDTO.setRefType(Integer.valueOf(0)); refDTO.setOrgId(organizationId); refDTO.setBusinessId(businessId); refDTO.setCreateTime(Long.valueOf(System.currentTimeMillis())); return refDTO; }).collect(Collectors.toList()); -passableList.addAll(officeList); -if (passableList.size() > 0) { -this.organizationAreaRefMapper.insertBatch(passableList); -} -} -private Boolean updateIsValid(QueryOrganizationParam param, int i, int i2) { -GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties(param, GetsOrganizationDTO.class); -getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); -List resultData = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); -Organization organization = null; -if (!CollectionUtils.isEmpty(resultData)) { -organization = resultData.get(0); -} -if (null != organization && (null == organization.getIsValid() || i == organization.getIsValid().intValue())) { -organization.setIsValid(Integer.valueOf(i2)); -} -return Boolean.valueOf((this.imgStoreOrganizationMapper.updateByPrimaryKeySelective(organization) > 0)); -} -private List process(String id, Map> treeDTOMap) { -List> lists = new ArrayList<>(); -List track = new ArrayList<>(); -List result = new ArrayList<>(); -addOrg(id, track, treeDTOMap, lists); -for (List list : lists) { -Collections.reverse(list); -result.addAll(list); -} -return result; -} -private void addOrg(String id, List track, Map> treeDTOMap, List> lists) { -if (null == id) { -lists.add(new ArrayList<>(track)); -return; -} -List dtos = treeDTOMap.get(id); -if (CollectionUtils.isEmpty(dtos)) { -lists.add(new ArrayList<>(track)); -return; -} -for (OrgTreeDTO dto : dtos) { -track.add(dto.getName()); -addOrg(dto.getParentId(), track, treeDTOMap, lists); -track.remove(dto.getName()); -} -} -private void addLevel(List tree, int level) { -if (!CollectionUtils.isEmpty(tree)) { -for (TreeOrganizationResult result : tree) { -result.setLevel(Integer.valueOf(level)); -addLevel(result.getChildren(), level + 1); -} -} -} -private void addPersonCount(List res) { -List ids = new ArrayList<>(); -for (TreeOrganizationResult organizationResult : res) { -ids.add(organizationResult.getId()); -} -if (!CollectionUtils.isEmpty(ids)) { -Map map = new HashMap<>(); -List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); -for (OrgCountDTO dto : orgCountDTOS) { -map.put(dto.getId(), dto.getCount()); -} -for (TreeOrganizationResult organizationResult : res) { -Integer count = map.get(organizationResult.getId()); -if (count != null) { -organizationResult.setPersonCount(count); continue; -} -organizationResult.setPersonCount(Integer.valueOf(0)); -} -} -} -private void addTypeName(List res, String businessId) { -Map editableMap = OrganizationTypeCodeEnum.editable(OrganizationTypeCodeEnum.UNIT.getGroup()); -Set typeIds = new HashSet<>(); -Map typeMap = new HashMap<>(); -for (TreeOrganizationResult result : res) { -typeIds.add(result.getTypeId()); -} -OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); -typeQueryDto.setIds(new ArrayList<>(typeIds)); -List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); -if (!CollectionUtils.isEmpty(orgTypeList)) { -for (OrganizationType organizationType : orgTypeList) { -typeMap.put(organizationType.getId(), organizationType); -} -} -for (TreeOrganizationResult result : res) { -OrganizationType organizationType = typeMap.get(result.getTypeId()); -if (organizationType == null) { -result.setType(""); -result.setHasLowerLevel(Integer.valueOf(0)); -result.setEditable(Integer.valueOf(1)); continue; -} -Integer editable = editableMap.get(organizationType.getCode()); -if (editable != null) { -result.setEditable(editable); -} else { -result.setEditable(Integer.valueOf(1)); -} -String typeName = organizationType.getName(); -result.setType((typeName == null) ? "" : typeName); -result.setHasLowerLevel(organizationType.getHasLowerLevel()); -} -} -private void saveSysLog(SysLog param, CloudwalkCallContext context) { -param.setId(getPrimaryId()); -param.setLoginName(context.getUser().getCallerName()); -param.setContactPerson(param.getLoginName()); -param.setCreateUserId(context.getUser().getCaller()); -param.setCreateTime(Long.valueOf(System.currentTimeMillis())); -param.setLastUpdateTime(param.getCreateTime()); -param.setLastUpdateUserId(param.getCreateUserId()); -param.setBusinessId(context.getCompany().getCompanyId()); -param.setServiceCode("imgstoreApp"); -param.setModule("org"); -param.setStatus(Integer.valueOf(1)); -ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); -HttpServletRequest request = requestAttributes.getRequest(); -param.setIp(ToolUtil.getClientIp(request)); -try { -this.sysLogMapper.addLog(param); -} catch (Exception e) { -this.logger.error("新增系统操作日志失败,失败原因是:{}", e); -} -} -private void judgeTreeNode(List children, List values) { -if (!CollectionUtils.isEmpty(children)) -for (TreeOrganizationResult result : children) { -values.add(result.getId()); -judgeTreeNode(result.getChildren(), values); -} -} +@Service(value="coreOrganizationServiceImpl") +public class OrganizationServiceImpl +extends AbstractImagStoreService +implements OrganizationService { + @Resource + private ElevatorFeignClient elevatorFeignClient; + @Resource + private CrkAccessFeignClient crkAccessFeignClient; + @Resource + private ImgStoreOrganizationMapper imgStoreOrganizationMapper; + @Resource + private ImgStoreOrganizationTypeMapper imgStoreOrganizationTypeMapper; + @Resource + private OrganizationExtendMapper organizationExtendMapper; + @Resource + private OrganizationExtendDetailMapper organizationExtendDetailMapper; + @Resource + private OrganizationAreaRefMapper organizationAreaRefMapper; + @Resource + private ImgStorePersonMapper personMapper; + @Resource + private ImgStorePersonOrganizationMapper imgStorePersonOrganizationMapper; + @Autowired + private AcAccountService acAccountService; + @Autowired + private IOperationLogService operationLogService; + @Autowired + private UserService userService; + @Autowired + private SysLogMapper sysLogMapper; + @Autowired + private MessageSource messageSource; + @Autowired + private CpImageStorePersonSynManager cpImageStorePersonSynManager; + @Resource + private ZoneFeignClient zoneFeignClient; + private static final short IS_DEL = 1; + protected static final short IS_NOT_DEL = 0; + @Value(value="${download.rows.of.page:5000}") + private int rowsOfPage; + + @CloudwalkParamsValidate + public CloudwalkResult add(AddOrganizationParam param, CloudwalkCallContext context) { + String businessId = StringUtils.isNotBlank((CharSequence)param.getBusinessId()) ? param.getBusinessId() : context.getCompany().getCompanyId(); + GetsOrganizationDTO getsOrganizationDTO = new GetsOrganizationDTO(); + getsOrganizationDTO.setBusinessId(businessId); + getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); + if (!StringUtils.isEmpty((CharSequence)param.getParentId())) { + getsOrganizationDTO.setId(param.getParentId()); + List list = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + if (CollectionUtils.isEmpty((Collection)list)) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003307", (String)this.getMessage("53003307")); + } + Organization organization = (Organization)list.get(0); + OrganizationType organizationType = this.imgStoreOrganizationTypeMapper.selectByPrimaryKey(organization.getTypeId()); + if (organizationType != null && organizationType.getHasLowerLevel() != 1) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003306", (String)this.getMessage("53003306")); + } + } else { + List parent = this.imgStoreOrganizationMapper.getParentNode(businessId); + if (!CollectionUtils.isEmpty((Collection)parent)) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003314", (String)this.getMessage("53003314")); + } + } + getsOrganizationDTO.setId(null); + getsOrganizationDTO.setName(param.getName()); + getsOrganizationDTO.setParentId(param.getParentId()); + List names = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + if (!CollectionUtils.isEmpty((Collection)names)) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003316", (String)this.getMessage("53003316")); + } + long time = System.currentTimeMillis(); + Organization organization = (Organization)BeanCopyUtils.copyProperties((Object)param, Organization.class); + organization.setId(this.getPrimaryId()); + organization.setCreateTime(Long.valueOf(time)); + organization.setCreateUserId(context.getUser().getCaller()); + organization.setIsDel(Short.valueOf((short)0)); + organization.setLastUpdateTime(Long.valueOf(time)); + organization.setLastUpdateUserId(context.getUser().getCaller()); + organization.setName(param.getName()); + organization.setParentId(param.getParentId()); + organization.setBusinessId(businessId); + organization.setIsValid(Integer.valueOf(1)); + SysLog logParam = new SysLog(); + logParam.setLogType(Integer.valueOf(5)); + logParam.setRemark(OperationLogEnum.ORR_ADD.getName() + "-" + organization.getName()); + this.saveSysLog(logParam, context); + this.imgStoreOrganizationMapper.insertSelective(organization); + AddUnitZoneRefForm addUnitZoneRefForm = new AddUnitZoneRefForm(); + addUnitZoneRefForm.setUnitId(organization.getId()); + addUnitZoneRefForm.setUnitName(organization.getName()); + addUnitZoneRefForm.setZoneIds(param.getZoneIds()); + this.zoneFeignClient.addUnitRef(addUnitZoneRefForm); + return (CloudwalkResult)CloudwalkResult.success(organization.getId()); + } + + @CloudwalkParamsValidate + public CloudwalkResult edit(EditOrganizationParam param, CloudwalkCallContext context) throws ServiceException { + String businessId = StringUtils.isNotBlank((CharSequence)param.getBusinessId()) ? param.getBusinessId() : context.getCompany().getCompanyId(); + GetsOrganizationDTO getsOrganizationDTO = new GetsOrganizationDTO(); + getsOrganizationDTO.setId(param.getId()); + getsOrganizationDTO.setBusinessId(businessId); + getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); + List organizationList = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + if (CollectionUtils.isEmpty((Collection)organizationList)) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003310", (String)this.getMessage("53003310")); + } + List res = null; + Organization old = (Organization)organizationList.get(0); + Organization edit = (Organization)BeanCopyUtils.copyProperties((Object)param, Organization.class); + edit.setId(old.getId()); + if (!StringUtils.isEmpty((CharSequence)param.getParentId())) { + try { + res = this.judgeNodeLevel(param, businessId); + } + catch (ServiceException e) { + return (CloudwalkResult)CloudwalkResult.fail((String)e.getCode(), (String)e.getMessage()); + } + edit.setParentId(param.getParentId()); + } + if (!StringUtils.isEmpty((CharSequence)param.getName())) { + if (res == null) { + res = BeanCopyUtils.copy((Collection)this.imgStoreOrganizationMapper.getAllOrg(businessId), TreeOrganizationResult.class); + } + for (TreeOrganizationResult org : res) { + if (!org.getName().equals(param.getName()) || org.getId().equals(param.getId()) || !org.getParentId().equals(param.getParentId())) continue; + return (CloudwalkResult)CloudwalkResult.fail((String)"53003316", (String)this.getMessage("53003316")); + } + edit.setName(param.getName()); + } + edit.setLastUpdateUserId(context.getUser().getCaller()); + edit.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + SysLog logParam = new SysLog(); + logParam.setLogType(Integer.valueOf(3)); + logParam.setRemark(OperationLogEnum.ORG_EDIT.getName() + "-" + edit.getName()); + this.saveSysLog(logParam, context); + this.imgStoreOrganizationMapper.updateByPrimaryKeySelective(edit); + AddUnitZoneRefForm addUnitZoneRefForm = new AddUnitZoneRefForm(); + addUnitZoneRefForm.setUnitId(edit.getId()); + addUnitZoneRefForm.setUnitName(edit.getName()); + addUnitZoneRefForm.setZoneIds(param.getZoneIds()); + this.zoneFeignClient.addUnitRef(addUnitZoneRefForm); + if (param.getExtend() != null) { + this.saveOrUpdateExtendDetails(param, businessId); + } + if (param.getOfficeArea() != null || param.getPassableArea() != null) { + this.saveAreaDetails(param, businessId); + } + return (CloudwalkResult)CloudwalkResult.success(Boolean.TRUE); + } + + @CloudwalkParamsValidate + public CloudwalkResult delete(DelOrganizationParam param, CloudwalkCallContext context) { + String businessId = StringUtils.isNotBlank((CharSequence)param.getBusinessId()) ? param.getBusinessId() : context.getCompany().getCompanyId(); + if (!CollectionUtils.isEmpty((Collection)param.getIds())) { + List orgByIds = this.imgStoreOrganizationMapper.getOrgByIds(param.getIds(), businessId); + if (orgByIds.size() != param.getIds().size()) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53060411", (String)this.getMessage("53060411")); + } + if (!CollectionUtils.isEmpty((Collection)this.imgStoreOrganizationMapper.getParentIdIsNull(param.getIds()))) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003313", (String)this.getMessage("53003313")); + } + String delName = ((Organization)orgByIds.get(0)).getName(); + if (orgByIds.size() > 1) { + for (int i = 1; i < orgByIds.size(); ++i) { + delName = delName + "、" + ((Organization)orgByIds.get(i)).getName(); + } + } + if (delName.length() > 100) { + delName = delName.substring(0, 100) + "等"; + } + SysLog logParam = new SysLog(); + logParam.setLogType(Integer.valueOf(6)); + logParam.setRemark(OperationLogEnum.ORG_DELETE.getName() + "-" + delName); + this.saveSysLog(logParam, context); + this.imgStoreOrganizationMapper.batchDel(param.getIds(), System.currentTimeMillis(), context.getUser().getCaller(), businessId); + this.imgStorePersonOrganizationMapper.deleteByOrgIds(param.getIds()); + DelUnitZoneForm delUnitZoneForm = new DelUnitZoneForm(); + delUnitZoneForm.setUnitIds(param.getIds()); + CloudwalkResult data = this.zoneFeignClient.delUnit(delUnitZoneForm); + this.logger.info("删除关联机构{}", data.getData()); + } + return (CloudwalkResult)CloudwalkResult.success(Boolean.TRUE); + } + + private UserQueryResult getByUserId(String userId, CloudwalkCallContext context) throws ServiceException { + UserGetsParam param = new UserGetsParam(); + param.setIds((List)Lists.newArrayList(userId)); + CloudwalkResult userList = this.userService.gets(param, context); + if (userList.isSuccess() && !CollectionUtils.isEmpty((Collection)((Collection)userList.getData()))) { + return (UserQueryResult)((List)userList.getData()).get(0); + } + this.logger.error("通过登录用户查询机构,查询登录用户失败:{},{},{}", new Object[]{userId, userList.getCode(), userList.getMessage()}); + return null; + } + + private CloudwalkResult> getOrgIdsByLoginUser(String businessId, CloudwalkCallContext context) { + HashSet orgAllIds = new HashSet(); + try { + String userId = context.getUser().getCaller(); + this.logger.info("通过登录用户查询机构:{}", (Object)userId); + UserQueryResult user = this.getByUserId(userId, context); + if (user != null) { + AcAccountDTO account = this.getAccountById(user.getLoginId()); + String personId = account.getPersonId(); + if (StringUtils.isNotBlank((CharSequence)personId)) { + ImgStorePersonOrganization personOrganization = new ImgStorePersonOrganization(); + personOrganization.setPersonId(personId); + List organizationList = this.imgStorePersonOrganizationMapper.select(personOrganization); + if (!CollectionUtils.isEmpty((Collection)organizationList)) { + List resByPIds; + List orgIds = Collections3.extractToList((Collection)organizationList, (String)"orgId"); + orgAllIds.addAll(orgIds); + while (!CollectionUtils.isEmpty((Collection)(resByPIds = BeanCopyUtils.copy((Collection)this.imgStoreOrganizationMapper.getOrgByParentIds(orgIds, businessId), TreeOrganizationResult.class)))) { + orgIds = Collections3.extractToList((Collection)resByPIds, (String)"id"); + orgAllIds.addAll(orgIds); + } + } + } + return (CloudwalkResult)CloudwalkResult.success(new ArrayList(orgAllIds)); + } + return (CloudwalkResult)CloudwalkResult.fail((String)"00000001", (String)this.getMessage("00000001")); + } + catch (ServiceException e) { + String errorMessage = this.messageSource.getMessage(e.getCode(), null, LocaleContextHolder.getLocale()); + this.logger.error("通过登录用户查询机构:{},{}", (Object)e.getCode(), (Object)errorMessage); + return (CloudwalkResult)CloudwalkResult.fail((String)e.getCode(), (String)errorMessage); + } + } + + public CloudwalkResult> tree(NextTreeOrganizationParam param, CloudwalkCallContext context) throws ServiceException { + List res; + String businessId = context.getCompany().getCompanyId(); + ArrayList tree = new ArrayList(); + if (StringUtils.isBlank((CharSequence)param.getParentId())) { + List allOrg = this.imgStoreOrganizationMapper.getAllOrg(businessId); + res = BeanCopyUtils.copy((Collection)allOrg, TreeOrganizationResult.class); + res = (List) res.stream().filter(ToolUtil.distinctByKey(TreeOrganizationResult::getId)).collect(Collectors.toList()); + } else { + res = this.getTreeByParentId(param.getParentId(), businessId); + } + this.addPersonCount(res); + this.addTypeName(res, businessId); + for (TreeOrganizationResult nodeX : (List) res) { + boolean mark = false; + for (TreeOrganizationResult nodeY : (List) res) { + if (nodeX.getParentId() == null || !nodeX.getParentId().equals(nodeY.getId())) continue; + mark = true; + if (nodeY.getChildren() == null) { + nodeY.setChildren(new ArrayList()); + } + nodeY.getChildren().add(nodeX); + break; + } + if (mark) continue; + tree.add(nodeX); + } + this.addLevel(tree, 1); + return (CloudwalkResult)CloudwalkResult.success(tree); + } + + private List getTreeByParentId(String parentId, String businessId) { + List resultOnce; + ArrayList parentIdList = new ArrayList(); + parentIdList.add(parentId); + ArrayList resultAll = new ArrayList(); + while (!CollectionUtils.isEmpty(parentIdList) && !CollectionUtils.isEmpty((Collection)(resultOnce = this.imgStoreOrganizationMapper.getOrgByParentIds(parentIdList, businessId)))) { + resultAll.addAll(resultOnce); + parentIdList.clear(); + for (Organization organization : (List) resultOnce) { + parentIdList.add(organization.getId()); + } + } + return BeanCopyUtils.copy(resultAll, TreeOrganizationResult.class); + } + + private List getListByParentId(GetsOrganizationDTO dto, Integer retainParent) { + ArrayList parentIdList = new ArrayList(); + String parentId = dto.getParentId(); + parentIdList.add(parentId); + dto.setParentId(null); + ArrayList resultAll = new ArrayList(); + while (!CollectionUtils.isEmpty(parentIdList)) { + dto.setParentIds(parentIdList); + List resultOnce = this.imgStoreOrganizationMapper.gets(dto); + if (CollectionUtils.isEmpty((Collection)resultOnce)) break; + resultAll.addAll(resultOnce); + parentIdList.clear(); + for (Organization organization : resultOnce) { + parentIdList.add(organization.getId()); + } + } + if (retainParent != null && retainParent == 1) { + Organization organization = this.imgStoreOrganizationMapper.selectByPrimaryKey(parentId); + resultAll.add(organization); + } + return resultAll; + } + + public CloudwalkResult> getNextTree(NextTreeOrganizationParam param, CloudwalkCallContext context) { + String businessId = StringUtils.isNotBlank((CharSequence)param.getBusinessId()) ? param.getBusinessId() : context.getCompany().getCompanyId(); + List res = BeanCopyUtils.copy((Collection)this.imgStoreOrganizationMapper.getNextOrg(param.getParentId(), businessId), NextTreeOrganizationResult.class); + ArrayList ids = new ArrayList(); + HashSet typeIds = new HashSet(); + for (NextTreeOrganizationResult nextTreeOrganizationResult : (List) res) { + ids.add(nextTreeOrganizationResult.getId()); + typeIds.add(nextTreeOrganizationResult.getTypeId()); + } + if (!CollectionUtils.isEmpty(ids)) { + HashMap map = new HashMap(); + HashMap typeMap = new HashMap(); + List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); + OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); + typeQueryDto.setIds(new ArrayList(typeIds)); + List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); + for (OrgCountDTO dto : (List) orgCountDTOS) { + map.put(dto.getId(), dto.getCount()); + } + if (!CollectionUtils.isEmpty((Collection)orgTypeList)) { + for (OrganizationType organizationType : (List) orgTypeList) { + typeMap.put(organizationType.getId(), organizationType); + } + } + for (NextTreeOrganizationResult nextTreeOrganizationResult : (List) res) { + Integer count = (Integer)map.get(nextTreeOrganizationResult.getId()); + if (count != null) { + nextTreeOrganizationResult.setPersonCount(count); + } else { + nextTreeOrganizationResult.setPersonCount(Integer.valueOf(0)); + } + OrganizationType organizationType = (OrganizationType)typeMap.get(nextTreeOrganizationResult.getTypeId()); + if (organizationType != null) { + String typeName = organizationType.getName(); + nextTreeOrganizationResult.setType(typeName == null ? "" : typeName); + nextTreeOrganizationResult.setHasLowerLevel(organizationType.getHasLowerLevel()); + continue; + } + nextTreeOrganizationResult.setType(""); + nextTreeOrganizationResult.setHasLowerLevel(null); + } + } + return (CloudwalkResult)CloudwalkResult.success(res); + } + + @CloudwalkParamsValidate + public CloudwalkResult addPerson(AddPersonOrgParam personOrgParam, CloudwalkCallContext context) { + if (CollectionUtils.isEmpty((Collection)personOrgParam.getPersonIds())) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53060411", (String)this.getMessage("53060411")); + } + Organization personOrg = this.imgStoreOrganizationMapper.selectByPrimaryKey(personOrgParam.getOrganizationId()); + if (personOrg == null || personOrg.getIsDel() == 1 || !context.getCompany().getCompanyId().equals(personOrg.getBusinessId())) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003310", (String)this.getMessage("53003310")); + } + List personIds = this.imgStoreOrganizationMapper.getPersonIdInRef((AddPersonOrgDTO)BeanCopyUtils.copyProperties((Object)personOrgParam, AddPersonOrgDTO.class)); + if (!CollectionUtils.isEmpty((Collection)personIds)) { + personOrgParam.getPersonIds().removeAll(personIds); + } + if (CollectionUtils.isEmpty((Collection)personOrgParam.getPersonIds())) { + return (CloudwalkResult)CloudwalkResult.success(Boolean.TRUE); + } + ImgStorePersonQueryDto dto = new ImgStorePersonQueryDto(); + dto.setIds((Collection)personOrgParam.getPersonIds()); + dto.setBusinessId(StringUtils.isEmpty((CharSequence)personOrgParam.getBusinessId()) ? context.getCompany().getCompanyId() : personOrgParam.getBusinessId()); + dto.setIsDel(DelStatusEnum.NORAML.getCode()); + if (this.personMapper.gets(dto).size() != personOrgParam.getPersonIds().size()) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003311", (String)this.getMessage("53003311")); + } + ArrayList list = new ArrayList(); + long time = System.currentTimeMillis(); + for (String id : personOrgParam.getPersonIds()) { + ImgStorePersonOrganization org = new ImgStorePersonOrganization(); + org.setCreateTime(Long.valueOf(time)); + org.setCreateUserId(context.getUser().getCaller()); + org.setId(this.getPrimaryId()); + org.setLastUpdateTime(Long.valueOf(time)); + org.setLastUpdateUserId(context.getUser().getCaller()); + org.setOrgId(personOrgParam.getOrganizationId()); + org.setPersonId(id); + list.add(org); + } + this.imgStoreOrganizationMapper.batchInsert(list); + ImgStorePersonBatchUpdateDto record = new ImgStorePersonBatchUpdateDto(); + record.setIds(personOrgParam.getPersonIds()); + record.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + this.personMapper.updateBatchByIds(record); + List imageIdResultList = this.cpImageStorePersonSynManager.addGroupPersonSynTask(personOrgParam.getOrganizationId(), (List)personOrgParam.getPersonIds(), true); + if (Collections3.isNotEmpty(imageIdResultList)) { + imageIdResultList.parallelStream().forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask((String)imageId)); + } + return (CloudwalkResult)CloudwalkResult.success(Boolean.TRUE); + } + + @CloudwalkParamsValidate + public CloudwalkResult delPerson(DelPersonOrgParam personOrgParam, CloudwalkCallContext context) { + String businessId = StringUtils.isNotBlank((CharSequence)personOrgParam.getBusinessId()) ? personOrgParam.getBusinessId() : context.getCompany().getCompanyId(); + GetsOrganizationDTO getsOrganizationDTO = new GetsOrganizationDTO(); + getsOrganizationDTO.setId(personOrgParam.getOrganizationId()); + getsOrganizationDTO.setBusinessId(businessId); + List organizationList = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + if (CollectionUtils.isEmpty((Collection)organizationList)) { + return (CloudwalkResult)CloudwalkResult.fail((String)"53003310", (String)this.getMessage("53003310")); + } + if (!CollectionUtils.isEmpty((Collection)personOrgParam.getPersonIds())) { + this.imgStoreOrganizationMapper.delPerson((DelPersonOrgDTO)BeanCopyUtils.copyProperties((Object)personOrgParam, DelPersonOrgDTO.class)); + ImgStorePersonBatchUpdateDto record = new ImgStorePersonBatchUpdateDto(); + record.setIds(personOrgParam.getPersonIds()); + record.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + this.personMapper.updateBatchByIds(record); + List imageIdResultList = this.cpImageStorePersonSynManager.addGroupPersonSynTask(personOrgParam.getOrganizationId(), (List)personOrgParam.getPersonIds(), false); + if (Collections3.isNotEmpty(imageIdResultList)) { + imageIdResultList.parallelStream().forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask((String)imageId)); + } + } + return (CloudwalkResult)CloudwalkResult.success(Boolean.TRUE); + } + + protected AcAccountDTO getAccountById(String loginId) throws ServiceException { + CloudwalkResult result = this.acAccountService.getAcAccountById(loginId); + if (result == null) { + throw new ServiceException("56000001", this.getMessage("56000001")); + } + if (!"00000000".equals(result.getCode())) { + throw new ServiceException(result.getCode(), result.getMessage()); + } + if (result.getData() == null) { + throw new ServiceException("56000043", this.getMessage("56000043")); + } + return (AcAccountDTO)result.getData(); + } + + public CloudwalkResult> getList(QueryOrganizationParam param, CloudwalkCallContext context) { + ArrayList ids; + String businessId = StringUtils.isNotBlank((CharSequence)param.getBusinessId()) ? param.getBusinessId() : context.getCompany().getCompanyId(); + List orgIds = new ArrayList(); + if (param.getByLoginUser() != null && param.getByLoginUser().booleanValue()) { + CloudwalkResult> orgIdsByLoginUser = this.getOrgIdsByLoginUser(businessId, context); + if (!orgIdsByLoginUser.isSuccess()) { + return (CloudwalkResult)CloudwalkResult.fail((String)orgIdsByLoginUser.getCode(), (String)orgIdsByLoginUser.getMessage()); + } + if (!CollectionUtils.isEmpty((Collection)((Collection)orgIdsByLoginUser.getData()))) { + orgIds = (List)orgIdsByLoginUser.getData(); + } else { + return (CloudwalkResult)CloudwalkResult.success(new ArrayList()); + } + } + GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties((Object)param, GetsOrganizationDTO.class); + getsOrganizationDTO.setBusinessId(businessId); + getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); + if (!CollectionUtils.isEmpty(orgIds)) { + ids = new ArrayList<>(param.getIds()); + if (!CollectionUtils.isEmpty((Collection)ids)) { + orgIds.retainAll(ids); + if (CollectionUtils.isEmpty(orgIds)) { + return (CloudwalkResult)CloudwalkResult.success(new ArrayList()); + } + } + getsOrganizationDTO.setIds(orgIds); + } + List resultData = StringUtils.isNotBlank((CharSequence)param.getParentId()) && param.getHasCascade() != null && param.getHasCascade() == 1 ? this.getListByParentId(getsOrganizationDTO, param.getRetainParent()) : this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + ids = new ArrayList(); + HashSet typeIds = new HashSet(); + for (Organization organization : resultData) { + ids.add(organization.getId()); + typeIds.add(organization.getTypeId()); + } + List resultList = BeanCopyUtils.copy(resultData, OrganizationResult.class); + if (!CollectionUtils.isEmpty(ids)) { + HashMap map = new HashMap(); + HashMap typeMap = new HashMap(); + List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); + OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); + typeQueryDto.setIds(new ArrayList(typeIds)); + List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); + if (!CollectionUtils.isEmpty((Collection)orgCountDTOS)) { + for (OrgCountDTO dto : (List) orgCountDTOS) { + map.put(dto.getId(), dto.getCount()); + } + } + if (!CollectionUtils.isEmpty((Collection)orgTypeList)) { + for (OrganizationType organizationType : (List) orgTypeList) { + typeMap.put(organizationType.getId(), organizationType); + } + } + for (OrganizationResult result : (List) resultList) { + Integer count = (Integer)map.get(result.getId()); + if (count != null) { + result.setPersonCount(count); + } else { + result.setPersonCount(Integer.valueOf(0)); + } + OrganizationType organizationType = (OrganizationType)typeMap.get(result.getTypeId()); + if (organizationType != null) { + String typeName = organizationType.getName(); + result.setType(typeName == null ? "" : typeName); + result.setHasLowerLevel(organizationType.getHasLowerLevel()); + continue; + } + result.setType(""); + result.setHasLowerLevel(null); + } + } + return (CloudwalkResult)CloudwalkResult.success(resultList); + } + + public CloudwalkResult> getPage(QueryOrganizationParam param, CloudwalkPageInfo page, CloudwalkCallContext context) { + String businessId = StringUtils.isNotBlank((CharSequence)param.getBusinessId()) ? param.getBusinessId() : context.getCompany().getCompanyId(); + PageHelper.startPage((int)page.getCurrentPage(), (int)page.getPageSize()); + GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties((Object)param, GetsOrganizationDTO.class); + getsOrganizationDTO.setBusinessId(businessId); + getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); + Page pageData = (Page)this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + List resultData = pageData.getResult(); + ArrayList ids = new ArrayList(); + HashSet typeIds = new HashSet(); + for (Organization organization : (List) resultData) { + ids.add(organization.getId()); + typeIds.add(organization.getTypeId()); + } + List resultList = BeanCopyUtils.copy((Collection)resultData, OrganizationResult.class); + if (!CollectionUtils.isEmpty(ids)) { + HashMap map = new HashMap(); + HashMap typeMap = new HashMap(); + List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); + OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); + typeQueryDto.setIds(new ArrayList(typeIds)); + List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); + if (!CollectionUtils.isEmpty((Collection)orgCountDTOS)) { + for (OrgCountDTO dto : (List) orgCountDTOS) { + map.put(dto.getId(), dto.getCount()); + } + } + if (!CollectionUtils.isEmpty((Collection)orgTypeList)) { + for (OrganizationType organizationType : (List) orgTypeList) { + typeMap.put(organizationType.getId(), organizationType); + } + } + for (OrganizationResult result : (List) resultList) { + Integer count = (Integer)map.get(result.getId()); + if (count != null) { + result.setPersonCount(count); + } else { + result.setPersonCount(Integer.valueOf(0)); + } + OrganizationType organizationType = (OrganizationType)typeMap.get(result.getTypeId()); + if (organizationType != null) { + String typeName = organizationType.getName(); + result.setType(typeName == null ? "" : typeName); + result.setHasLowerLevel(organizationType.getHasLowerLevel()); + continue; + } + result.setType(""); + result.setHasLowerLevel(null); + } + } + CloudwalkPageAble pageAble = new CloudwalkPageAble((Collection)resultList, page, pageData.getTotal()); + return (CloudwalkResult)CloudwalkResult.success(pageAble); + } + + public CloudwalkResult> listByPage(QueryOrganizationParam param, CloudwalkCallContext context) throws ServiceException { + String businessId = StringUtils.isEmpty((CharSequence)param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); + try { + GetsOrganizationDTO dto = (GetsOrganizationDTO)BeanCopyUtils.copyProperties((Object)param, (Object)new GetsOrganizationDTO()); + dto.setIsDel(DelStatusEnum.NORAML.getCode()); + dto.setBusinessId(businessId); + long s1 = System.currentTimeMillis(); + int totalCount = this.imgStoreOrganizationMapper.count(dto); + long e1 = System.currentTimeMillis(); + this.logger.info("机构导出查询总数{},耗时{}毫秒", (Object)totalCount, (Object)(e1 - s1)); + int totalPage = 1; + if (totalCount != 0) { + totalPage = totalCount % this.rowsOfPage == 0 ? totalCount / this.rowsOfPage : totalCount / this.rowsOfPage + 1; + } + ArrayList orgList = Lists.newArrayListWithCapacity((int)totalCount); + for (int i = 1; i <= totalPage; ++i) { + PageHelper.startPage((int)i, (int)this.rowsOfPage); + PageHelper.orderBy((String)"LAST_UPDATE_TIME DESC, ID DESC"); + this.logger.info("分页查询机构信息列表,查询参数:[{}]", (Object)JSON.toJSONString((Object)dto)); + long s2 = System.currentTimeMillis(); + Page gets = (Page)this.imgStoreOrganizationMapper.gets(dto); + long e2 = System.currentTimeMillis(); + this.logger.info("机构导出第{}次分页查询,耗时{}毫秒", (Object)i, (Object)(e2 - s2)); + orgList.addAll(gets.getResult()); + } + ArrayList ids = new ArrayList(); + HashSet typeIds = new HashSet(); + for (Organization organization : (List) orgList) { + ids.add(organization.getId()); + typeIds.add(organization.getTypeId()); + } + List resultList = BeanCopyUtils.copy((Collection)orgList, OrganizationResult.class); + if (!CollectionUtils.isEmpty(ids)) { + HashMap map = new HashMap(); + HashMap typeMap = new HashMap(); + List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); + OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); + typeQueryDto.setIds(new ArrayList(typeIds)); + List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); + if (!CollectionUtils.isEmpty((Collection)orgCountDTOS)) { + for (OrgCountDTO countDTO : (List) orgCountDTOS) { + map.put(countDTO.getId(), countDTO.getCount()); + } + } + if (!CollectionUtils.isEmpty((Collection)orgTypeList)) { + for (OrganizationType organizationType : (List) orgTypeList) { + typeMap.put(organizationType.getId(), organizationType); + } + } + for (OrganizationResult orgResult : (List) resultList) { + Integer count = (Integer)map.get(orgResult.getId()); + if (count != null) { + orgResult.setPersonCount(count); + } else { + orgResult.setPersonCount(Integer.valueOf(0)); + } + OrganizationType organizationType = (OrganizationType)typeMap.get(orgResult.getTypeId()); + if (organizationType != null) { + String typeName = organizationType.getName(); + orgResult.setType(typeName == null ? "" : typeName); + orgResult.setHasLowerLevel(organizationType.getHasLowerLevel()); + } else { + orgResult.setType(""); + orgResult.setHasLowerLevel(null); + } + AcsDeviceRestructureConditionForm conditionForm = new AcsDeviceRestructureConditionForm(); + conditionForm.setOrgId(orgResult.getId()); + conditionForm.setBusinessId(context.getCompany().getCompanyId()); + CloudwalkResult> deviceList = this.crkAccessFeignClient.listCondition(conditionForm); + if (!CollectionUtils.isEmpty((Collection)((Collection)deviceList.getData()))) { + String online = ""; + String offline = ""; + for (int i = 0; i < ((List)deviceList.getData()).size(); ++i) { + if ("2".equals(((AcsDeviceNewResult)((List)deviceList.getData()).get(i)).getDeviceOnlineStatus())) { + if ("".equals(online)) { + online = online + ((AcsDeviceNewResult)((List)deviceList.getData()).get(i)).getDeviceName(); + continue; + } + online = online + "," + ((AcsDeviceNewResult)((List)deviceList.getData()).get(i)).getDeviceName(); + continue; + } + offline = "".equals(offline) ? offline + ((AcsDeviceNewResult)((List)deviceList.getData()).get(i)).getDeviceName() : offline + ',' + ((AcsDeviceNewResult)((List)deviceList.getData()).get(i)).getDeviceName(); + } + orgResult.setOnlineDevices(online); + orgResult.setOfflineDevices(offline); + } + AcsRestructureQueryForm acsPassRuleImageForm = new AcsRestructureQueryForm(); + acsPassRuleImageForm.setOrgId(orgResult.getId()); + acsPassRuleImageForm.setBusinessId(businessId); + CloudwalkResult> images = this.elevatorFeignClient.listCondition(acsPassRuleImageForm); + if (!"00000000".equals(images.getCode())) continue; + ArrayList floorList = new ArrayList(); + String zoneNames = ""; + List acsPassRuleImageResultDtoList = (List)images.getData(); + for (int i = 0; i < acsPassRuleImageResultDtoList.size(); ++i) { + if (i > 0) { + zoneNames = zoneNames + ","; + } + zoneNames = zoneNames + ((AcsDeviceRestructureResult)acsPassRuleImageResultDtoList.get(i)).getZoneName(); + floorList.add(((AcsDeviceRestructureResult)acsPassRuleImageResultDtoList.get(i)).getZoneId()); + } + orgResult.setFloorNames(zoneNames); + } + } + return (CloudwalkResult)CloudwalkResult.success(resultList); + } + catch (Exception e) { + this.logger.error("执行报错 {}: {}", (Object)e.getClass().getName(), (Object)e.getMessage()); + return null; + } + } + + public CloudwalkResult detail(QueryOrganizationParam param, CloudwalkCallContext context) { + String businessId = context.getCompany().getCompanyId(); + GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties((Object)param, GetsOrganizationDTO.class); + getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); + List resultData = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + Organization organization = null; + if (CollectionUtils.isEmpty((Collection)resultData)) { + return (CloudwalkResult)CloudwalkResult.success(null); + } + organization = (Organization)resultData.get(0); + String orgId = organization.getId(); + String typeId = organization.getTypeId(); + List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(Collections.singletonList(orgId)); + OrganizationType organizationType = this.imgStoreOrganizationTypeMapper.selectByPrimaryKey(typeId); + OrganizationResult result = (OrganizationResult)BeanCopyUtils.copyProperties((Object)organization, OrganizationResult.class); + if (!CollectionUtils.isEmpty((Collection)orgCountDTOS)) { + result.setPersonCount(((OrgCountDTO)orgCountDTOS.get(0)).getCount()); + } else { + result.setPersonCount(Integer.valueOf(0)); + } + if (organizationType != null) { + result.setType(organizationType.getName()); + result.setHasLowerLevel(organizationType.getHasLowerLevel()); + } else { + result.setType(""); + result.setHasLowerLevel(null); + } + if (result.getParentId() == null) { + result.setLevel(Integer.valueOf(1)); + } + result.setIsValid(organization.getIsValid()); + if (Objects.equals(organizationType.getCode(), OrganizationTypeCodeEnum.UNIT.getCode())) { + OrganizationExtendDTO extendDTO = Optional.ofNullable(this.organizationExtendMapper.selectByOrgId(orgId)).orElse(new OrganizationExtendDTO()); + OrganizationExtendResult extendResult = (OrganizationExtendResult)BeanCopyUtils.copyProperties((Object)extendDTO, OrganizationExtendResult.class); + if (extendDTO.getId() != null) { + List detail = this.organizationExtendDetailMapper.selectByOrgId(orgId, businessId); + List extendDetail = BeanCopyUtils.copy((Collection)detail, OrganizationExtendDetailResult.class); + extendResult.setDetail(extendDetail); + } + result.setExtend(extendResult); + List refDTOS = Optional.ofNullable(this.organizationAreaRefMapper.listByOrgId(orgId, businessId)).orElse(Collections.emptyList()); + List officeArea = refDTOS.stream().filter(it -> it.getRefType() == 0).map(o -> o.getAreaId()).collect(Collectors.toList()); + List passableArea = refDTOS.stream().filter(it -> it.getRefType() == 1).map(o -> o.getAreaId()).collect(Collectors.toList()); + result.setPassableArea(passableArea); + result.setOfficeArea(officeArea); + QueryZoneUnitParam queryZoneUnitParam = new QueryZoneUnitParam(); + queryZoneUnitParam.setUnitIds(Collections.singletonList(organization.getId())); + CloudwalkResult> zoneDetail = this.zoneFeignClient.findZoneDetailByUnitIds(queryZoneUnitParam); + List zoneIds = new ArrayList(); + if ("00000000".equals(zoneDetail.getCode())) { + List data = (List)zoneDetail.getData(); + zoneIds = data.stream().map(z -> z.getZoneId()).collect(Collectors.toList()); + } + result.setZoneIds(zoneIds); + } + return (CloudwalkResult)CloudwalkResult.success(result); + } + + public CloudwalkResult> listNames(QueryOrganizationParam param, CloudwalkCallContext context) { + if (param.getId() == null && (param.getIds() == null || param.getIds().isEmpty())) { + return (CloudwalkResult)CloudwalkResult.fail((String)"", (String)"请输入查询参数"); + } + String businessId = context.getCompany().getCompanyId(); + List ids = new ArrayList(); + if (param.getId() != null) { + ids.add(param.getId()); + } else { + ids = new ArrayList<>(param.getIds()); + } + List organizations = Optional.ofNullable(this.imgStoreOrganizationMapper.listNames(ids, businessId)).orElse(Collections.emptyList()); + Map collect = (Map) organizations.stream().collect(Collectors.toMap(it -> it.getId(), v -> v.getName())); + return (CloudwalkResult)CloudwalkResult.success(collect); + } + + public CloudwalkResult listAreas(QueryOrganizationParam param, CloudwalkCallContext context) { + String businessId = context.getCompany().getCompanyId(); + List refDTOS = Optional.ofNullable(this.organizationAreaRefMapper.listByOrgId(param.getId(), businessId)).orElse(Collections.emptyList()); + ArrayList office = new ArrayList(); + ArrayList passable = new ArrayList(); + for (OrganizationAreaRefDTO refDTO : refDTOS) { + if (refDTO.getRefType() == 0) { + office.add(refDTO.getAreaId()); + continue; + } + passable.add(refDTO.getAreaId()); + } + OrganizationAreaResult result = new OrganizationAreaResult(); + result.setOrganizationId(param.getId()); + result.setBusinessId(businessId); + result.setOfficeArea(office); + result.setPassableArea(passable); + return (CloudwalkResult)CloudwalkResult.success(result); + } + + public CloudwalkResult>> getOrg(List ids, String businessId, CloudwalkCallContext cloudwalkContext) { + List orgTreeDTOS = this.imgStoreOrganizationMapper.selectAllType(businessId); + HashMap> treeDTOMap = new HashMap>(); + Iterator iterator = orgTreeDTOS.iterator(); + while (iterator.hasNext()) { + OrgTreeDTO orgTreeDTO = (OrgTreeDTO)iterator.next(); + if (CollectionUtils.isEmpty((Collection)((Collection)treeDTOMap.get(orgTreeDTO.getId())))) { + ArrayList list = new ArrayList(); + treeDTOMap.put(orgTreeDTO.getId(), list); + } + List dtos = (List)treeDTOMap.get(orgTreeDTO.getId()); + dtos.add(orgTreeDTO); + treeDTOMap.put(orgTreeDTO.getId(), dtos); + iterator.remove(); + } + HashMap result = new HashMap(ids.size()); + for (String id : ids) { + List stringList = this.process(id, treeDTOMap); + if (CollectionUtils.isEmpty((Collection)((Collection)result.get(id)))) { + ArrayList list = new ArrayList(); + result.put(id, list); + } + List typeIdList = (List)result.get(id); + typeIdList.addAll(stringList); + result.put(id, typeIdList); + } + return (CloudwalkResult)CloudwalkResult.success(result); + } + + public CloudwalkResult enable(QueryOrganizationParam param, CloudwalkCallContext cloudwalkContext) { + Boolean result = this.updateIsValid(param, 0, 1); + return (CloudwalkResult)CloudwalkResult.success(result); + } + + public CloudwalkResult disable(QueryOrganizationParam param, CloudwalkCallContext cloudwalkContext) { + Boolean result = this.updateIsValid(param, 1, 0); + return (CloudwalkResult)CloudwalkResult.success(result); + } + + private List judgeNodeLevel(EditOrganizationParam param, String businessId) throws ServiceException { + List res = null; + Organization parent = this.imgStoreOrganizationMapper.selectByPrimaryKey(param.getParentId()); + if (parent == null || parent.getIsDel() == 1 || !businessId.equals(parent.getBusinessId())) { + throw new ServiceException("53003307", this.getMessage("53003307")); + } + res = BeanCopyUtils.copy((Collection)this.imgStoreOrganizationMapper.getAllOrg(businessId), TreeOrganizationResult.class); + TreeOrganizationResult currentNode = null; + for (TreeOrganizationResult org : res) { + if (!org.getId().equals(param.getId())) continue; + currentNode = org; + break; + } + block1: for (TreeOrganizationResult nodeX : res) { + for (TreeOrganizationResult nodeY : res) { + if (nodeX.getParentId() == null || !nodeX.getParentId().equals(nodeY.getId())) continue; + if (nodeY.getChildren() == null) { + nodeY.setChildren(new ArrayList()); + } + nodeY.getChildren().add(nodeX); + continue block1; + } + } + if (currentNode != null && !CollectionUtils.isEmpty((Collection)currentNode.getChildren())) { + ArrayList values = new ArrayList(); + this.judgeTreeNode(currentNode.getChildren(), values); + values.add(param.getId()); + if (values.contains(param.getParentId())) { + throw new ServiceException("53060425", this.getMessage("53060425")); + } + } + return res; + } + + private void saveOrUpdateExtendDetails(EditOrganizationParam param, String businessId) throws ServiceException { + EditOrganizationExtendParam extend = param.getExtend(); + OrganizationExtendDTO organizationExtendDTO = (OrganizationExtendDTO)BeanCopyUtils.copyProperties((Object)extend, OrganizationExtendDTO.class); + organizationExtendDTO.setBusinessId(businessId); + organizationExtendDTO.setOrganizationId(param.getId()); + int update = this.organizationExtendMapper.updateByOrganizationId(organizationExtendDTO); + if (update != 1) { + throw new ServiceException("2", "2"); + } + List detailList = extend.getDetail(); + List detailDTOList = BeanCopyUtils.copy((Collection)detailList, OrganizationExtendDetailDTO.class); + for (OrganizationExtendDetailDTO detailDTO : detailDTOList) { + this.organizationExtendDetailMapper.insertSelective(detailDTO); + } + } + + private void saveAreaDetails(EditOrganizationParam param, String businessId) { + List passableArea = param.getPassableArea(); + String organizationId = param.getId(); + boolean type = true; + this.organizationAreaRefMapper.deleteAllByOrgId(organizationId, businessId); + List passableList = passableArea.stream().map(areaId -> { + OrganizationAreaRefDTO refDTO = new OrganizationAreaRefDTO(); + refDTO.setAreaId(areaId); + refDTO.setId(CloudwalkDateUtils.getUUID()); + refDTO.setRefType(Integer.valueOf(1)); + refDTO.setOrgId(organizationId); + refDTO.setBusinessId(businessId); + refDTO.setCreateTime(Long.valueOf(System.currentTimeMillis())); + return refDTO; + }).collect(Collectors.toList()); + List officeArea = param.getOfficeArea(); + List officeList = officeArea.stream().map(areaId -> { + OrganizationAreaRefDTO refDTO = new OrganizationAreaRefDTO(); + refDTO.setAreaId(areaId); + refDTO.setId(CloudwalkDateUtils.getUUID()); + refDTO.setRefType(Integer.valueOf(0)); + refDTO.setOrgId(organizationId); + refDTO.setBusinessId(businessId); + refDTO.setCreateTime(Long.valueOf(System.currentTimeMillis())); + return refDTO; + }).collect(Collectors.toList()); + passableList.addAll(officeList); + if (passableList.size() > 0) { + this.organizationAreaRefMapper.insertBatch(passableList); + } + } + + private Boolean updateIsValid(QueryOrganizationParam param, int i, int i2) { + GetsOrganizationDTO getsOrganizationDTO = (GetsOrganizationDTO)BeanCopyUtils.copyProperties((Object)param, GetsOrganizationDTO.class); + getsOrganizationDTO.setIsDel(Short.valueOf((short)0)); + List resultData = this.imgStoreOrganizationMapper.gets(getsOrganizationDTO); + Organization organization = null; + if (!CollectionUtils.isEmpty((Collection)resultData)) { + organization = (Organization)resultData.get(0); + } + if (null != organization && (null == organization.getIsValid() || i == organization.getIsValid())) { + organization.setIsValid(Integer.valueOf(i2)); + } + return this.imgStoreOrganizationMapper.updateByPrimaryKeySelective(organization) > 0; + } + + private List process(String id, Map> treeDTOMap) { + ArrayList> lists = new ArrayList>(); + ArrayList track = new ArrayList(); + ArrayList result = new ArrayList(); + this.addOrg(id, track, treeDTOMap, lists); + for (List list : lists) { + Collections.reverse(list); + result.addAll(list); + } + return result; + } + + private void addOrg(String id, List track, Map> treeDTOMap, List> lists) { + if (null == id) { + lists.add(new ArrayList(track)); + return; + } + List dtos = treeDTOMap.get(id); + if (CollectionUtils.isEmpty(dtos)) { + lists.add(new ArrayList(track)); + return; + } + for (OrgTreeDTO dto : dtos) { + track.add(dto.getName()); + this.addOrg(dto.getParentId(), track, treeDTOMap, lists); + track.remove(dto.getName()); + } + } + + private void addLevel(List tree, int level) { + if (!CollectionUtils.isEmpty(tree)) { + for (TreeOrganizationResult result : tree) { + result.setLevel(Integer.valueOf(level)); + this.addLevel(result.getChildren(), level + 1); + } + } + } + + private void addPersonCount(List res) { + ArrayList ids = new ArrayList(); + for (TreeOrganizationResult organizationResult : res) { + ids.add(organizationResult.getId()); + } + if (!CollectionUtils.isEmpty(ids)) { + HashMap map = new HashMap(); + List orgCountDTOS = this.imgStoreOrganizationMapper.getPersonCount(ids); + for (OrgCountDTO dto : orgCountDTOS) { + map.put(dto.getId(), dto.getCount()); + } + for (TreeOrganizationResult organizationResult : res) { + Integer count = (Integer)map.get(organizationResult.getId()); + if (count != null) { + organizationResult.setPersonCount(count); + continue; + } + organizationResult.setPersonCount(Integer.valueOf(0)); + } + } + } + + private void addTypeName(List res, String businessId) { + Map editableMap = OrganizationTypeCodeEnum.editable((String)OrganizationTypeCodeEnum.UNIT.getGroup()); + HashSet typeIds = new HashSet(); + HashMap typeMap = new HashMap(); + for (TreeOrganizationResult result : res) { + typeIds.add(result.getTypeId()); + } + OrganizationTypeQueryDto typeQueryDto = new OrganizationTypeQueryDto(); + typeQueryDto.setIds(new ArrayList(typeIds)); + List orgTypeList = this.imgStoreOrganizationTypeMapper.select(typeQueryDto); + if (!CollectionUtils.isEmpty((Collection)orgTypeList)) { + for (OrganizationType organizationType : orgTypeList) { + typeMap.put(organizationType.getId(), organizationType); + } + } + for (TreeOrganizationResult result : res) { + OrganizationType organizationType = (OrganizationType)typeMap.get(result.getTypeId()); + if (organizationType == null) { + result.setType(""); + result.setHasLowerLevel(Integer.valueOf(0)); + result.setEditable(Integer.valueOf(1)); + continue; + } + Integer editable = (Integer)editableMap.get(organizationType.getCode()); + if (editable != null) { + result.setEditable(editable); + } else { + result.setEditable(Integer.valueOf(1)); + } + String typeName = organizationType.getName(); + result.setType(typeName == null ? "" : typeName); + result.setHasLowerLevel(organizationType.getHasLowerLevel()); + } + } + + private void saveSysLog(SysLog param, CloudwalkCallContext context) { + param.setId(this.getPrimaryId()); + param.setLoginName(context.getUser().getCallerName()); + param.setContactPerson(param.getLoginName()); + param.setCreateUserId(context.getUser().getCaller()); + param.setCreateTime(Long.valueOf(System.currentTimeMillis())); + param.setLastUpdateTime(param.getCreateTime()); + param.setLastUpdateUserId(param.getCreateUserId()); + param.setBusinessId(context.getCompany().getCompanyId()); + param.setServiceCode("imgstoreApp"); + param.setModule("org"); + param.setStatus(Integer.valueOf(1)); + ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = requestAttributes.getRequest(); + param.setIp(ToolUtil.getClientIp(request)); + try { + this.sysLogMapper.addLog(param); + } + catch (Exception e) { + this.logger.error("新增系统操作日志失败,失败原因是:{}", e); + } + } + + private void judgeTreeNode(List children, List values) { + if (!CollectionUtils.isEmpty(children)) { + for (TreeOrganizationResult result : children) { + values.add(result.getId()); + this.judgeTreeNode(result.getChildren(), values); + } + } + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/OrganizationServiceImpl.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/PersonAuditServiceImpl.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/PersonAuditServiceImpl.java index 4ac36d86..3498943d 100644 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/PersonAuditServiceImpl.java +++ b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/PersonAuditServiceImpl.java @@ -1,6 +1,7 @@ package cn.cloudwalk.service.organization.service; // 业务服务 import cn.cloudwalk.client.account.verify.param.CheckCaptchaParam; +import cn.cloudwalk.client.account.verify.service.AcCaptchaService; import cn.cloudwalk.client.aggregate.group.param.AgFeatureExtractParam; import cn.cloudwalk.client.aggregate.group.result.AgFeatureExtractResult; import cn.cloudwalk.client.organization.common.constant.ImageStoreConstants; @@ -35,11 +36,10 @@ import cn.cloudwalk.client.organization.service.PersonZoneRefService; import cn.cloudwalk.client.organization.service.store.param.CpFaceDetectParam; import cn.cloudwalk.client.organization.service.store.param.QueryPersonRegistryParam; import cn.cloudwalk.client.organization.service.store.result.DeviceResult; -import cn.cloudwalk.client.organization.service.store.result.LabelResult; -import cn.cloudwalk.client.organization.service.store.result.OrganizationResult; import cn.cloudwalk.client.organization.service.store.result.PersonPropertiesResult; import cn.cloudwalk.client.organization.service.store.result.PersonRegistryResult; import cn.cloudwalk.client.organization.service.store.service.CpImageStoreToolService; +import cn.cloudwalk.client.organization.service.store.service.PersonRegistryService; import cn.cloudwalk.cloud.annotation.CloudwalkParamsValidate; import cn.cloudwalk.cloud.context.CloudwalkCallContext; import cn.cloudwalk.cloud.exception.ServiceException; @@ -47,7 +47,6 @@ import cn.cloudwalk.cloud.page.CloudwalkPageAble; import cn.cloudwalk.cloud.page.CloudwalkPageInfo; import cn.cloudwalk.cloud.result.CloudwalkResult; import cn.cloudwalk.cloud.serial.UUIDSerial; -import cn.cloudwalk.cloud.utils.BeanCopyUtils; import cn.cloudwalk.data.organization.dto.ImageInfoDto; import cn.cloudwalk.data.organization.dto.ImgStoreAuditUserQueryDto; import cn.cloudwalk.data.organization.dto.ImgStorePersonAuditQueryDto; @@ -60,6 +59,9 @@ import cn.cloudwalk.data.organization.mapper.ImgStorePersonPropertiesMapper; import cn.cloudwalk.service.organization.common.Base64Utils; import cn.cloudwalk.service.organization.common.OpenCvUtils; import cn.cloudwalk.service.organization.common.ToolUtil; +import cn.cloudwalk.service.organization.service.CpImageStorePersonSynManager; +import cn.cloudwalk.service.organization.service.ImgPersonHandler; +import cn.cloudwalk.service.organization.service.PersonFileServiceImpl; import cn.cloudwalk.service.organization.service.feign.PineappleEngineClient; import cn.cloudwalk.service.organization.service.feign.ZoneFeignClient; import cn.cloudwalk.service.organization.utils.BeanCopyUtils; @@ -77,6 +79,8 @@ import java.io.IOException; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; +import java.util.Base64; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -99,778 +103,768 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ReflectionUtils; import org.springside.modules.utils.Collections3; + @Service -public class PersonAuditServiceImpl implements IPersonAuditServcie { -protected final Logger logger = LoggerFactory.getLogger(getClass()); -@Autowired -private MessageSource messageSource; -@Value("${imageQualityScore}") -private Double imgQualityScore; -@Value("${ocr.card.face.score:0.65}") -private Double faceCompareScore; -@Autowired -private ImgStorePersonAuditMapper imgStorePersonAuditMapper; -@Resource -private ImgStorePersonPropertiesMapper imgStorePersonPropertiesMapper; -@Autowired -private PersonFileService personFileService; -@Autowired -private ImgStorePersonService imgStorePersonService; -@Autowired -private ImgPersonHandler imgPersonHandler; -@Autowired -private PersonRegistryService personRegistryService; -@Autowired -private AcCaptchaService captchaService; -@Autowired -private CpImageStoreToolService cpImageStoreToolService; -@Autowired -private CpImageStorePersonSynManager cpImageStorePersonSynManager; -@Autowired -private OpenCvUtils openCvUtils; -@Autowired -private UUIDSerial uuidSerial; -@Resource -private PineappleEngineClient pineappleClient; -@Autowired -private PersonZoneRefService personZoneRefService; -@Autowired -private ZoneFeignClient zoneFeignClient; -@CloudwalkParamsValidate -public CloudwalkResult add(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { -this.logger.debug("添加注册记录,请求参数:[{}]", JSON.toJSONString(param)); -checkSource(param); -String businessId = StringUtils.isEmpty(param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); -boolean syncAccount = (param.getCreateSysAccount() != null && param.getCreateSysAccount().intValue() == 1); -if (syncAccount && StringUtils.isBlank(param.getSysAccountId())) { -String errorMessage = this.messageSource.getMessage("53014027", null, LocaleContextHolder.getLocale()); -throw new ServiceException("53014027", errorMessage); -} -String auditId = ToolUtil.generateUUID(); -Integer settingType = RegistryTypeEnum.SELF_REGISTRY.getValue(); -if (CpPersonSourceEnum.CERT.getCode().shortValue() == param.getSource().shortValue()) { -settingType = RegistryTypeEnum.CERT_REGISTRY.getValue(); -} -try { -String frontIdentityImage = param.getFrontIdentityImage(); -String comparePicture = param.getComparePicture(); -checkCard(frontIdentityImage, comparePicture); -checkNameByOcrCard(frontIdentityImage, param.getName()); -QueryPersonRegistryParam settingParam = new QueryPersonRegistryParam(); -settingParam.setBusinessId(businessId); -settingParam.setType(settingType); -CloudwalkResult settingResult = this.personRegistryService.detail(settingParam, context); -PersonRegistryResult registrySetting = (settingResult != null) ? (PersonRegistryResult)settingResult.getData() : null; -if (registrySetting == null) { -throw new ServiceException("53060541", this.messageSource -.getMessage("53060541", null, LocaleContextHolder.getLocale())); -} -boolean needAudit = checkAudit(param.getSource(), param.getDeviceCode(), registrySetting); -checkPicture(param); -processParam(registrySetting, param); -if (!needAudit) { -return this.imgStorePersonService.add((AddImgPersonParam)param, context); -} -Pair, List> codeNamePair = checkProperties(registrySetting.getPropertyList(), param); -checkUniqueProperty(param, context); -ImgStorePersonAudit personAudit = (ImgStorePersonAudit)BeanCopyUtils.copyProperties(param, ImgStorePersonAudit.class); -personAudit.setDeviceName(getDeviceName(param.getDeviceCode(), registrySetting.getDeviceList())); -personAudit.setBusinessId(businessId); -personAudit.setId(auditId); -long time = System.currentTimeMillis(); -personAudit.setCreateTime(Long.valueOf(time)); -personAudit.setLastUpdateTime(Long.valueOf(time)); -personAudit.setOrganizationIds(listToString(param.getOrganizationIds())); -personAudit.setOrganizationNames(listToString(param.getOrganizationNames())); -personAudit.setLabelIds(listToString(param.getLabelIds())); -personAudit.setLabelNames(listToString(param.getLabelNames())); -personAudit.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); -personAudit.setUserProperties(JSONObject.toJSONString(codeNamePair.getKey())); -personAudit.setUserPropertiesName(JSONObject.toJSONString(codeNamePair.getValue())); -DateTime now = DateTime.now(); -personAudit.setExpiryBeginDate(Long.valueOf(now.getTime())); -now.setMutable(false); -DateTime end = now.offset(DateField.YEAR, 1); -personAudit.setExpiryEndDate(Long.valueOf(end.getTime())); -List zoneIdList = new ArrayList<>(); -for (String organizationId : param.getOrganizationIds()) { -List zoneIdResultList = getZoneIdByUnitId(organizationId); -if (!CollectionUtils.isEmpty(zoneIdResultList)) { -zoneIdList.addAll(zoneIdResultList); -} -} -this.personZoneRefService.add(personAudit.getId(), zoneIdList, personAudit.getCreateUserId()); -this.imgStorePersonAuditMapper.insert(personAudit); -} catch (ServiceException e) { -this.logger.error("人员注册新增失败,原因:{}", e.getMessage()); -throw e; -} catch (Exception e) { -this.logger.error("人员注册新增失败,原因:{}", e.getMessage()); -throw new ServiceException("53060535", this.messageSource -.getMessage("53060535", null, LocaleContextHolder.getLocale())); -} -return CloudwalkResult.success(auditId); -} -private List getZoneIdByUnitId(String unitId) { -QueryZoneUnitParam queryZoneUnitParam = new QueryZoneUnitParam(); -queryZoneUnitParam.setUnitId(unitId); -CloudwalkResult zoneIdResult = this.zoneFeignClient.findZoneIdByUnitId(queryZoneUnitParam); -if (zoneIdResult == null) { -return null; -} -QueryZoneByUnitResultDTO data = (QueryZoneByUnitResultDTO)zoneIdResult.getData(); -if (data == null) { -return null; -} -return data.getZoneIdList(); -} -private void checkCard(String frontIdentityImage, String comparePicture) throws ServiceException { -if (StringUtils.isBlank(frontIdentityImage)) { -return; -} -FaceDetectResult.FaceData faceData = detectFace(frontIdentityImage); -if (faceData == null) { -throw new ServiceException("获取人脸数据失败"); -} -BufferedImage bufferedImage = base64ToBufferedImage(frontIdentityImage); -if (bufferedImage == null) { -throw new ServiceException("获取图片大小失败"); -} -int x = PersonFileServiceImpl.getX(faceData); -int y = PersonFileServiceImpl.getY(faceData); -int width = PersonFileServiceImpl.getWidth(faceData, bufferedImage, x); -int height = PersonFileServiceImpl.getHeight(faceData, bufferedImage, y); -String cropBase64 = this.openCvUtils.cropImgBase64(frontIdentityImage, x, y, width, height); -ExtractFeatureResult extractFeatureResult = this.pineappleClient.extractFeature(ExtractFeatureParam.builder() -.img(cropBase64) -.build()); -if (extractFeatureResult == null) { -throw new ServiceException("获取身份证正面人脸特征失败"); -} -String featureOne = extractFeatureResult.getFeature(); -ExtractFeatureResult extractFeatureResultTwo = this.pineappleClient.extractFeature(ExtractFeatureParam.builder() -.img(comparePicture) -.build()); -if (extractFeatureResultTwo == null) { -throw new ServiceException("获取人脸特征失败"); -} -String featureTwo = extractFeatureResultTwo.getFeature(); -ImgCompareParam imgCompareParam = ImgCompareParam.builder().featureA(featureOne).featureB(featureTwo).build(); -ImgCompareResult imgCompareResult = this.pineappleClient.imgCompare(imgCompareParam); -if (imgCompareResult == null) { -this.logger.error("证件识别失败,未返回响应"); -throw new ServiceException("证件识别失败"); -} -String score = imgCompareResult.getScore(); -if (StringUtils.isBlank(score)) { -this.logger.error("证件识别失败,可信分未返回"); -throw new ServiceException("证件识别失败"); -} -double scoreDouble = Double.parseDouble(score); -if (scoreDouble < this.faceCompareScore.doubleValue()) { -this.logger.error("证件比对失败,未达到可信分"); -throw new ServiceException("证件比对失败"); -} -} -private BufferedImage base64ToBufferedImage(String imgBase64) { -byte[] image = Base64.getDecoder().decode(imgBase64); -BufferedImage bufferedImage = null; -try (ByteArrayInputStream bais = new ByteArrayInputStream(image)) { -bufferedImage = ImageIO.read(bais); -} catch (IOException e) { -this.logger.error("获取图片大小异常:{}", e.getMessage()); -} -return bufferedImage; -} -private FaceDetectResult.FaceData detectFace(String imgBase64) throws ServiceException { -CpFaceDetectParam faceDetectParam = new CpFaceDetectParam(); -faceDetectParam.setImageBase64(imgBase64); -CloudwalkResult result = this.cpImageStoreToolService.faceDetect(faceDetectParam); -if (CollectionUtils.isEmpty(((FaceDetectResult)result.getData()).getFaces())) { -throw new ServiceException("53060432", this.messageSource -.getMessage("53060432", null, LocaleContextHolder.getLocale())); -} -if (((FaceDetectResult)result.getData()).getFaces().size() > 1) { -throw new ServiceException("53060433", this.messageSource -.getMessage("53060433", null, LocaleContextHolder.getLocale())); -} -return ((FaceDetectResult)result.getData()).getFaces().get(0); -} -private void checkNameByOcrCard(String frontIdentityImage, String paramName) throws ServiceException { -OcrCardParam cardParam = OcrCardParam.builder().app_id("").app_secret("").img(frontIdentityImage).build(); -OcrCardResult ocrCardResult = this.pineappleClient.ocrCard(cardParam); -if (ocrCardResult == null) { -this.logger.error("根据身份证获取姓名失败,未正常响应"); -throw new ServiceException("员工姓名与身份证姓名校验失败"); -} -String name = ocrCardResult.getName(); -if (StringUtils.isBlank(name)) { -this.logger.error("根据身份证获取姓名失败,引擎未返回姓名"); -throw new ServiceException("员工姓名与身份证姓名校验失败"); -} -if (!name.equals(paramName)) { -throw new ServiceException("员工姓名与身份证姓名不匹配"); -} -} -public CloudwalkResult edit(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { -if (StringUtils.isBlank(param.getBusinessId())) { -param.setBusinessId(context.getCompany().getCompanyId()); -} -boolean syncAccount = (param.getCreateSysAccount() != null && param.getCreateSysAccount().intValue() == 1); -if (syncAccount && StringUtils.isBlank(param.getSysAccountId())) { -String errorMessage = this.messageSource.getMessage("53014027", null, LocaleContextHolder.getLocale()); -throw new ServiceException("53014027", errorMessage); -} -ImgStorePersonAudit personAudit = this.imgStorePersonAuditMapper.selectByPrimaryKey(param.getId(), null); -if (null == personAudit) { -throw new ServiceException("53060548", this.messageSource.getMessage("53060548", null, LocaleContextHolder.getLocale())); -} -if (Objects.equals(personAudit.getAuditStatus(), CpPersonAuditEnum.AGREE.getCode())) { -throw new ServiceException("53060549", this.messageSource -.getMessage("53060549", null, LocaleContextHolder.getLocale())); -} -Integer settingType = RegistryTypeEnum.SELF_REGISTRY.getValue(); -if (CpPersonSourceEnum.CERT.getCode().shortValue() == personAudit.getSource().shortValue()) { -settingType = RegistryTypeEnum.CERT_REGISTRY.getValue(); -} -QueryPersonRegistryParam settingParam = new QueryPersonRegistryParam(); -settingParam.setBusinessId(personAudit.getBusinessId()); -settingParam.setType(settingType); -CloudwalkResult settingResult = this.personRegistryService.detail(settingParam, context); -if (!settingResult.isSuccess() || null == settingResult.getData()) { -throw new ServiceException("53060541", this.messageSource -.getMessage("53060541", null, LocaleContextHolder.getLocale())); -} -PersonRegistryResult personRegistry = (PersonRegistryResult)settingResult.getData(); -boolean needAudit = checkAudit(param.getSource(), param.getDeviceCode(), personRegistry); -checkPicture(param); -processParam(personRegistry, param); -if (!needAudit) { -try { -return this.imgStorePersonService.add((AddImgPersonParam)param, context); -} catch (Exception e) { -this.logger.error("exception:{}", e.getMessage()); -} -} -checkProperties(personRegistry.getPropertyList(), param); -checkUniqueProperty(param, context); -try { -List codes = JSONObject.parseArray(personAudit.getUserProperties(), String.class); -for (String code : codes) { -if ("organizationIds".contains(code)) { -personAudit.setOrganizationIds(listToString(param.getOrganizationIds())); -personAudit.setOrganizationNames(listToString(param.getOrganizationNames())); continue; -} if ("labelIds".equals(code)) { -personAudit.setLabelIds(listToString(param.getLabelIds())); -personAudit.setLabelNames(listToString(param.getLabelNames())); continue; -} -Field sourceField = ReflectionUtils.findField(AddPersonAuditParam.class, code); -Field targetField = ReflectionUtils.findField(ImgStorePersonAudit.class, code); -if (null == sourceField || null == targetField) { -throw new ServiceException("53014016", this.messageSource -.getMessage("53014016", null, LocaleContextHolder.getLocale())); -} -sourceField.setAccessible(true); -targetField.setAccessible(true); -Object fieldValue = ReflectionUtils.getField(sourceField, param); -ReflectionUtils.setField(targetField, personAudit, fieldValue); -} -personAudit.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); -this.imgStorePersonAuditMapper.updateByPrimaryKey(personAudit); -} catch (Exception e) { -this.logger.error("人员注册修改失败,原因:{}", e); -throw new ServiceException("53060535", this.messageSource -.getMessage("53060535", null, LocaleContextHolder.getLocale())); -} -return CloudwalkResult.success(personAudit.getId()); -} -private String getDeviceName(String deviceCode, List deviceResultList) { -if (!CollectionUtils.isEmpty(deviceResultList)) { -for (DeviceResult item : deviceResultList) { -if (Objects.equals(item.getDeviceCode(), deviceCode)) { -return item.getDeviceName(); -} -} -} -return null; -} -private Pair, List> checkProperties(List propertyList, T param) throws ServiceException { -if (propertyList == null) { -throw new ServiceException("53014018", this.messageSource -.getMessage("53014018", null, LocaleContextHolder.getLocale())); -} -List codeList = new ArrayList<>(); -List nameList = new ArrayList<>(); -for (PersonPropertiesResult item : propertyList) { -if (item.getHasChecked().intValue() != 1) { -continue; -} -String code = item.getCode(); -String name = item.getName(); -codeList.add(code); -nameList.add(name); -if (item.getHasRequired().intValue() == 1) { -Field field = ReflectionUtils.findField(param.getClass(), code); -if (field == null) { -throw new ServiceException("53014016", this.messageSource -.getMessage("53014016", null, LocaleContextHolder.getLocale())); -} -field.setAccessible(true); -Object fieldValue = ReflectionUtils.getField(field, param); -if (fieldValue == null || StringUtils.isEmpty(String.valueOf(fieldValue))) { -throw new ServiceException("53014017", item.getReminder()); -} -} -} -return new Pair(codeList, nameList); -} -private void checkUniqueProperty(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { -if (StringUtils.isNotEmpty(param.getUserName())) { -ImgStorePersonUniqueDto queryDto = new ImgStorePersonUniqueDto(); -queryDto.setId(param.getId()); -queryDto.setBusinessId(param.getBusinessId()); -queryDto.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); -queryDto.setUserName(param.getUserName()); -ImgStorePersonAudit conditionAudit = this.imgStorePersonAuditMapper.findByCondition(queryDto); -if (conditionAudit != null) { -throw new ServiceException("53014013", this.messageSource -.getMessage("53014013", null, LocaleContextHolder.getLocale())); -} -} -if (StringUtils.isNotEmpty(param.getPersonCode())) { -ImgStorePersonUniqueDto queryDto = new ImgStorePersonUniqueDto(); -queryDto.setId(param.getId()); -queryDto.setBusinessId(param.getBusinessId()); -queryDto.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); -queryDto.setPersonCode(param.getPersonCode()); -ImgStorePersonAudit conditionAudit = this.imgStorePersonAuditMapper.findByCondition(queryDto); -if (conditionAudit != null) { -throw new ServiceException("53014012", this.messageSource -.getMessage("53014012", null, LocaleContextHolder.getLocale())); -} -} -if (CpPersonSourceEnum.CERT.getCode().shortValue() == param.getSource().shortValue()) { -QueryPersonRegistryParam registryParam = new QueryPersonRegistryParam(); -registryParam.setBusinessId(param.getBusinessId()); -registryParam.setType(RegistryTypeEnum.CERT_REGISTRY.getValue()); -registryParam.setBindPropertyCode(CertPropertyEnum.CARD_ID.getValue()); -CloudwalkResult personPropertiesResult = this.personRegistryService.getBindProperty(registryParam, context); -if (personPropertiesResult.isSuccess() && personPropertiesResult.getData() != null) { -PersonPropertiesResult personProperties = (PersonPropertiesResult)personPropertiesResult.getData(); -ImgStorePersonAudit auditParam = new ImgStorePersonAudit(); -auditParam.setBusinessId(param.getBusinessId()); -auditParam.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); -Field paramField = ReflectionUtils.findField(param.getClass(), personProperties.getCode()); -paramField.setAccessible(true); -Object value = ReflectionUtils.getField(paramField, param); -Field personParamField = ReflectionUtils.findField(auditParam.getClass(), personProperties.getCode()); -personParamField.setAccessible(true); -ReflectionUtils.setField(personParamField, auditParam, value); -List queryList = this.imgStorePersonAuditMapper.queryMore(auditParam); -if (!CollectionUtil.isEmpty(queryList)) { -throw new ServiceException("53014023", this.messageSource -.getMessage("53014023", null, LocaleContextHolder.getLocale())); -} -} else { -throw new ServiceException("53014022", this.messageSource -.getMessage("53014022", null, LocaleContextHolder.getLocale())); -} -} -CloudwalkResult uniqueResult = this.imgPersonHandler.checkUniqueProperty((AddImgPersonParam)param, context); -if (!uniqueResult.isSuccess()) { -throw new ServiceException(uniqueResult.getCode(), uniqueResult.getMessage()); -} -} -private void checkPicture(AddPersonAuditParam param) throws ServiceException { -boolean isBase64 = Objects.equals(param.getIsBase64(), Integer.valueOf(1)); -checkPicQuality(param.getComparePicture(), isBase64); -checkPicQuality(param.getFrontIdentityImage(), isBase64); -checkPicQuality(param.getReverseIdentityImage(), isBase64); -if (isBase64) { -String showPicPath, comparePicPath = uploadImg(param.getComparePicture()); -if (Objects.equals(param.getShowPicture(), param.getComparePicture())) { -showPicPath = comparePicPath; -} else { -showPicPath = uploadImg(param.getShowPicture()); -} -param.setShowPicture(showPicPath); -param.setComparePicture(comparePicPath); -param.setFrontIdentityPicture(uploadImg(param.getFrontIdentityImage())); -param.setReverseIdentityPicture(uploadImg(param.getReverseIdentityImage())); -} -} -private void checkSource(AddPersonAuditParam param) throws ServiceException { -if (!param.isValidSource()) { -throw new ServiceException("53060533", this.messageSource -.getMessage("53060533", null, LocaleContextHolder.getLocale())); -} -} -private boolean isPropAllChecked(PersonRegistryResult registrySetting, String... propName) { -List propList = Arrays.asList(propName); -long count = registrySetting.getPropertyList().stream().filter(item -> (propList.contains(item.getCode()) && Objects.equals(item.getHasChecked(), StatusEnum.CHECKED.getValue()))).count(); -return (count == propName.length); -} -private void processParam(PersonRegistryResult registrySetting, AddPersonAuditParam param) throws ServiceException { -if (CollectionUtils.isEmpty(param.getOrganizationIds()) && CollectionUtils.isEmpty(registrySetting.getOrganizationList()) && -CollectionUtils.isEmpty(param.getLabelIds()) && CollectionUtils.isEmpty(registrySetting.getLabelList()) && -isPropAllChecked(registrySetting, new String[] { "labelIds", "organizationIds" })) { -throw new ServiceException("53014020", this.messageSource -.getMessage("53014020", null, -LocaleContextHolder.getLocale())); -} -if (CollectionUtils.isEmpty(param.getOrganizationIds()) && -!CollectionUtils.isEmpty(registrySetting.getOrganizationList())) { -List organizationIds = new ArrayList<>(); -List organizationNames = new ArrayList<>(); -registrySetting.getOrganizationList().forEach(item -> { -organizationIds.add(item.getId()); -organizationNames.add(item.getName()); -}); -param.setOrganizationIds(organizationIds); -param.setOrganizationNames(organizationNames); -} -if (CollectionUtils.isEmpty(param.getLabelIds()) && !CollectionUtils.isEmpty(registrySetting.getLabelList())) { -List labelIds = new ArrayList<>(); -List labelNames = new ArrayList<>(); -registrySetting.getLabelList().forEach(item -> { -labelIds.add(item.getId()); -labelNames.add(item.getName()); -}); -param.setLabelIds(labelIds); -param.setLabelNames(labelNames); -} -} -private String listToString(List list) { -if (CollectionUtils.isEmpty(list)) { -return null; -} -StringBuilder sb = new StringBuilder(); -list.stream().filter(item -> !StringUtils.isEmpty(item)).forEach(item -> sb.append(item).append(",")); -if (sb.length() > 0) { -sb.deleteCharAt(sb.length() - 1); -} -return sb.toString(); -} -private boolean checkAudit(Short source, String deviceCode, PersonRegistryResult registrySetting) throws ServiceException { -if (Objects.equals(CpPersonSourceEnum.DEVICE.getCode(), source) || Objects.equals(CpPersonSourceEnum.CERT.getCode(), source)) { -if (StringUtils.isEmpty(deviceCode)) { -throw new ServiceException("53060542", this.messageSource -.getMessage("53060542", null, LocaleContextHolder.getLocale())); -} -if (!Objects.equals(registrySetting.getStatus(), Integer.valueOf(1))) { -throw new ServiceException("53060534", this.messageSource -.getMessage("53060534", null, LocaleContextHolder.getLocale())); -} -if (!isDeviceValid(deviceCode, registrySetting.getDeviceList())) { -throw new ServiceException("53060543", this.messageSource -.getMessage("53060543", null, LocaleContextHolder.getLocale())); -} -return Objects.equals(registrySetting.getDeviceStatus(), Integer.valueOf(1)); -} -return Objects.equals(registrySetting.getCodeStatus(), Integer.valueOf(1)); -} -private void checkPicQuality(String data, boolean isBase64) throws ServiceException { -if (StringUtils.isEmpty(data)) { -return; -} -AgFeatureExtractParam featureExtractParam = new AgFeatureExtractParam(); -if (isBase64) { -featureExtractParam.setImageBase64(data); -} else { -featureExtractParam.setImageUrl(data); -} -CloudwalkResult result = this.cpImageStoreToolService.extractFeature(featureExtractParam); -this.logger.info("scoreResult:{}", JSONObject.toJSONString(result)); -if (result.isSuccess() && result.getData() != null) { -AgFeatureExtractResult featureExtractResult = (AgFeatureExtractResult)result.getData(); -Double score = featureExtractResult.getScore(); -this.logger.info("score:{}", score); -if (this.imgQualityScore.doubleValue() > score.doubleValue()) -{ -throw new ServiceException("53003820", this.messageSource -.getMessage("53003820", null, LocaleContextHolder.getLocale())); -} -} else { -throw new ServiceException(result.getCode(), result.getMessage()); -} -} -private String uploadImg(String base64) throws ServiceException { -if (StringUtils.isEmpty(base64)) { -return null; -} -ImageInfoDto compressInfoDto = Optional.ofNullable(this.openCvUtils.getGraphicsCompressBase64(base64)).orElse(new ImageInfoDto()); -if (StringUtils.isEmpty(compressInfoDto.getBase64Compress())) { -this.logger.error("图片压缩失败"); -return null; -} -String compressBase64 = compressInfoDto.getBase64Compress(); -byte[] bytes = Base64Utils.getBytes(compressBase64); -if (bytes.length > ImageStoreConstants.MAX_FILE.intValue()) { -throw new ServiceException("53060428", this.messageSource -.getMessage("53060428", null, LocaleContextHolder.getLocale())); -} -String fileName = ToolUtil.generateUUID(); -this.logger.info("上传文件:{},size={}", fileName, Integer.valueOf(bytes.length)); -CloudwalkResult storeResult = this.personFileService.upload(fileName, bytes); -if (storeResult != null && storeResult.isSuccess() && StringUtils.isNotBlank((CharSequence)storeResult.getData())) { -return (String)storeResult.getData(); -} -throw new ServiceException("80014013", this.messageSource -.getMessage("80014013", null, LocaleContextHolder.getLocale())); -} -private boolean isDeviceValid(String deviceCode, List deviceList) { -if (CollectionUtils.isEmpty(deviceList)) { -return false; -} -return deviceList.stream().anyMatch(device -> StringUtils.equals(deviceCode, device.getDeviceCode())); -} -@CloudwalkParamsValidate -public CloudwalkResult auditAgree(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { -param.setCreateSysAccount(Short.valueOf((short)0)); -ImgStorePersonAudit personAudit = getAuditById(param.getId()); -try { -checkPicture(param); -BeanCopyUtils.copyPropertiesIgnoreNull(personAudit, param); -if (CollectionUtils.isEmpty(param.getOrganizationIds()) && -StringUtils.isNotEmpty(personAudit.getOrganizationIds())) { -param.setOrganizationIds(Arrays.asList(personAudit.getOrganizationIds().split(","))); -} -if (CollectionUtils.isEmpty(param.getLabelIds()) && StringUtils.isNotEmpty(personAudit.getLabelIds())) { -param.setLabelIds(Arrays.asList(personAudit.getLabelIds().split(","))); -} -String personId = this.uuidSerial.uuid(); -PersonAuditServiceImpl proxyObj = (PersonAuditServiceImpl)AopContext.currentProxy(); -List imageIdResultList = proxyObj.auditAgreeTransactional(param, context, personAudit, personId); -if (Collections3.isNotEmpty(imageIdResultList)) { -imageIdResultList.parallelStream() -.forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask(imageId)); -} -return CloudwalkResult.success(personId); -} catch (ServiceException e) { -this.logger.error("人员注册审核通过失败,原因:{}", e.getMessage()); -throw e; -} catch (Exception e) { -this.logger.error("人员注册审核通过失败,原因:{}", e); -throw new ServiceException("53060539", this.messageSource -.getMessage("53060539", null, LocaleContextHolder.getLocale())); -} -} -@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}, value = "transactionManager") -public List auditAgreeTransactional(AddPersonAuditParam param, CloudwalkCallContext context, ImgStorePersonAudit personAudit, String personId) throws ServiceException, ImageStoreException { -List result = this.imgPersonHandler.addTransactional((AddImgPersonParam)param, context, personId); -BeanCopyUtils.copyPropertiesIgnoreNull(param, personAudit); -if (!CollectionUtils.isEmpty(param.getOrganizationIds())) { -personAudit.setOrganizationIds(listToString(param.getOrganizationIds())); -} -if (!CollectionUtils.isEmpty(param.getOrganizationNames())) { -personAudit.setOrganizationNames(listToString(param.getOrganizationNames())); -} -if (!CollectionUtils.isEmpty(param.getLabelIds())) { -personAudit.setLabelIds(listToString(param.getLabelIds())); -} -if (!CollectionUtils.isEmpty(param.getLabelNames())) { -personAudit.setLabelNames(listToString(param.getLabelNames())); -} -personAudit.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -personAudit.setLastUpdateUserId(context.getUser().getCaller()); -personAudit.setAuditStatus(CpPersonAuditEnum.AGREE.getCode()); -this.imgStorePersonAuditMapper.update(personAudit); -return result; -} -private ImgStorePersonAudit getAuditById(String id) throws ServiceException { -if (StringUtils.isEmpty(id)) { -throw new ServiceException("53060537", this.messageSource -.getMessage("53060537", null, LocaleContextHolder.getLocale())); -} -ImgStorePersonAudit personAudit = this.imgStorePersonAuditMapper.selectByPrimaryKey(id, CpPersonAuditEnum.INIT.getCode()); -if (personAudit == null) { -throw new ServiceException("53060538", this.messageSource -.getMessage("53060538", null, LocaleContextHolder.getLocale())); -} -return personAudit; -} -@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}, value = "transactionManager") -@CloudwalkParamsValidate -public CloudwalkResult auditRefuse(String id, CloudwalkCallContext context) throws ServiceException { -ImgStorePersonAudit personAudit = getAuditById(id); -personAudit.setId(id); -personAudit.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); -personAudit.setLastUpdateUserId(context.getUser().getCaller()); -personAudit.setAuditStatus(CpPersonAuditEnum.REFUSE.getCode()); -try { -this.imgStorePersonAuditMapper.update(personAudit); -} catch (Exception e) { -this.logger.error("人员注册审核拒绝失败,原因:", e); -throw new ServiceException("53060539", this.messageSource -.getMessage("53060539", null, LocaleContextHolder.getLocale())); -} -return CloudwalkResult.success(Boolean.valueOf(true)); -} -@CloudwalkParamsValidate -public CloudwalkResult batchAgree(List ids, CloudwalkCallContext context) throws ServiceException { -if (CollectionUtils.isEmpty(ids)) { -throw new ServiceException("53060537", this.messageSource -.getMessage("53060537", null, LocaleContextHolder.getLocale())); -} -try { -List auditList = this.imgStorePersonAuditMapper.queryByIds(ids, CpPersonAuditEnum.INIT.getCode()); -if (CollectionUtils.isEmpty(auditList)) { -return CloudwalkResult.fail("53060538", this.messageSource -.getMessage("53060538", null, LocaleContextHolder.getLocale())); -} -String updateUserId = context.getUser().getCaller(); -List imageIdResultList = this.imgPersonHandler.batchAgreeTransactional(context, auditList, updateUserId); -if (Collections3.isNotEmpty(imageIdResultList)) { -imageIdResultList.parallelStream() -.forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask(imageId)); -} -} catch (ServiceException e) { -this.logger.error("人员注册批量同构失败,原因:{}", e.getMessage()); -throw e; -} catch (Exception e) { -this.logger.error("人员注册批量同构失败,原因:{}", e); -throw new ServiceException("53060539", this.messageSource -.getMessage("53060539", null, LocaleContextHolder.getLocale())); -} -return CloudwalkResult.success(Boolean.valueOf(true)); -} -@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}, value = "transactionManager") -@CloudwalkParamsValidate -public CloudwalkResult batchRefuse(List ids, CloudwalkCallContext context) throws ServiceException { -if (CollectionUtils.isEmpty(ids)) { -throw new ServiceException("53060537", this.messageSource -.getMessage("53060537", null, LocaleContextHolder.getLocale())); -} -long time = System.currentTimeMillis(); -String updateUserId = context.getUser().getCaller(); -List applyList = (List)ids.stream().map(id -> new ImgStorePersonAuditApply(id, Long.valueOf(time), updateUserId, CpPersonAuditEnum.REFUSE.getCode())).collect(Collectors.toList()); -try { -this.imgStorePersonAuditMapper.batchUpdate(applyList, CpPersonAuditEnum.INIT.getCode()); -} catch (Exception e) { -this.logger.error("人员注册批量拒绝失败,原因:", e); -throw new ServiceException("53060539", this.messageSource -.getMessage("53060539", null, LocaleContextHolder.getLocale())); -} -return CloudwalkResult.success(Boolean.valueOf(true)); -} -public CloudwalkResult> page(PersonAuditQueryParam param, CloudwalkPageInfo page, CloudwalkCallContext context) throws ServiceException { -CloudwalkPageAble pageAble; -String businessId = StringUtils.isEmpty(param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); -ImgStorePersonAuditQueryDto dto = (ImgStorePersonAuditQueryDto)BeanCopyUtils.copyProperties(param, new ImgStorePersonAuditQueryDto()); -dto.setBusinessId(businessId); -try { -PageHelper.startPage(page.getCurrentPage(), page.getPageSize()); -Page pageData = (Page)this.imgStorePersonAuditMapper.query(dto); -List result = Optional.>ofNullable(pageData.getResult()).orElse(Collections.emptyList()); -List propertyList = this.imgStorePersonPropertiesMapper.selectByIds(businessId, null); -Map propertyMap = (Map)propertyList.stream().collect(Collectors.toMap(ImgStorePersonProperties::getCode, pro -> pro)); -List collect = (List)result.stream().map(item -> { PersonAuditGetResult auditGetResult = (PersonAuditGetResult)BeanCopyUtils.copyProperties(item, PersonAuditGetResult.class); auditGetResult.setUserPropertiesList(getUserProperties(item, propertyMap)); return auditGetResult; }).collect(Collectors.toList()); -pageAble = new CloudwalkPageAble(collect, page, pageData.getTotal()); -} catch (Exception e) { -this.logger.error("分页查询人员注册信息失败,原因:", e); -throw new ServiceException("53060540", this.messageSource -.getMessage("53060540", null, LocaleContextHolder.getLocale())); -} -return CloudwalkResult.success(pageAble); -} -private List getUserProperties(ImgStorePersonAudit audit, Map propertyMap) { -List result = new ArrayList<>(); -if (audit == null) { -return result; -} -List codes = JSONObject.parseArray(audit.getUserProperties(), String.class); -List names = JSONObject.parseArray(audit.getUserPropertiesName(), String.class); -if (!CollectionUtils.isEmpty(codes) && !CollectionUtils.isEmpty(names) && codes.size() == names.size()) { -for (int i = 0; i < codes.size(); i++) { -Object fieldValue; UserProperties properties = new UserProperties(); -String code = codes.get(i); -properties.setCode(code); -properties.setLabel(names.get(i)); -properties.setType(((ImgStorePersonProperties)propertyMap.get(code)).getType().shortValue()); -if (Objects.equals(code, "organizationIds")) { -fieldValue = audit.getOrganizationNames(); -} else if (Objects.equals(code, "labelIds")) { -fieldValue = audit.getLabelNames(); -} else { -Field field = ReflectionUtils.findField(audit.getClass(), code); -if (field == null) { -continue; -} -field.setAccessible(true); -fieldValue = ReflectionUtils.getField(field, audit); -} -properties.setValue(fieldValue); -result.add(properties); -continue; -} -} -if (Objects.equals(audit.getSource(), CpPersonSourceEnum.DEVICE.getCode())) { -UserProperties properties = new UserProperties(); -properties.setCode("deviceName"); -properties.setLabel("设备名称"); -properties.setValue(audit.getDeviceName()); -result.add(properties); -} -return result; -} -public CloudwalkResult userCheck(PersonAuditCheckParam param, CloudwalkCallContext context) throws ServiceException { -ImgStorePersonAudit personAudit; -CloudwalkResult checkCaptcha = this.captchaService.checkCaptcha((CheckCaptchaParam)param); -if (!checkCaptcha.isSuccess()) { -throw new ServiceException("53060546", this.messageSource -.getMessage("53060546", null, LocaleContextHolder.getLocale())); -} -String businessId = StringUtils.isEmpty(param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); -param.setBusinessId(businessId); -String column = CpPersonAuditUniqueEnum.getMessage(param.getCheckName()); -if (column == null) { -throw new ServiceException("53060547", this.messageSource -.getMessage("53060547", null, LocaleContextHolder.getLocale())); -} -ImgStoreAuditUserQueryDto queryDto = new ImgStoreAuditUserQueryDto(); -queryDto.setBusinessId(businessId); -Field targetField = ReflectionUtils.findField(queryDto.getClass(), param.getCheckName()); -if (targetField == null) { -throw new ServiceException("53060547", this.messageSource -.getMessage("53060547", null, LocaleContextHolder.getLocale())); -} -targetField.setAccessible(true); -ReflectionUtils.setField(targetField, queryDto, param.getCheckNameValue()); -try { -personAudit = this.imgStorePersonAuditMapper.userQuery(queryDto); -} catch (Exception e) { -this.logger.error("人员注册查询失败,原因:{}", e.getMessage()); -return CloudwalkResult.fail("53060548", this.messageSource -.getMessage("53060548", null, LocaleContextHolder.getLocale())); -} -if (personAudit == null) { -return CloudwalkResult.fail("53060548", this.messageSource -.getMessage("53060548", null, LocaleContextHolder.getLocale())); -} -Short auditStatus = personAudit.getAuditStatus(); -PersonAuditResult auditResult = new PersonAuditResult(); -auditResult.setAuditStatus(auditStatus); -auditResult.setAuditStatusStr(CpPersonAuditEnum.getMessage(auditStatus)); -return CloudwalkResult.success(auditResult); -} -public CloudwalkResult checkById(PersonAuditParam param, CloudwalkCallContext context) throws ServiceException { -if (StringUtils.isBlank(param.getId())) { -return CloudwalkResult.fail("53060545", this.messageSource.getMessage("53060545", null, LocaleContextHolder.getLocale())); -} -ImgStorePersonAudit personAudit = this.imgStorePersonAuditMapper.selectByPrimaryKey(param.getId(), null); -if (null == personAudit) { -throw new ServiceException("53060548", this.messageSource.getMessage("53060548", null, LocaleContextHolder.getLocale())); -} -List propertyList = this.imgStorePersonPropertiesMapper.selectByIds(personAudit.getBusinessId(), null); -Map propertyMap = (Map)propertyList.stream().collect(Collectors.toMap(ImgStorePersonProperties::getCode, pro -> pro)); -PersonAuditGetResult result = (PersonAuditGetResult)BeanCopyUtils.copyProperties(personAudit, PersonAuditGetResult.class); -result.setUserPropertiesList(getUserProperties(personAudit, propertyMap)); -return CloudwalkResult.success(result); -} +public class PersonAuditServiceImpl +implements IPersonAuditServcie { + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + @Autowired + private MessageSource messageSource; + @Value(value="${imageQualityScore}") + private Double imgQualityScore; + @Value(value="${ocr.card.face.score:0.65}") + private Double faceCompareScore; + @Autowired + private ImgStorePersonAuditMapper imgStorePersonAuditMapper; + @Resource + private ImgStorePersonPropertiesMapper imgStorePersonPropertiesMapper; + @Autowired + private PersonFileService personFileService; + @Autowired + private ImgStorePersonService imgStorePersonService; + @Autowired + private ImgPersonHandler imgPersonHandler; + @Autowired + private PersonRegistryService personRegistryService; + @Autowired + private AcCaptchaService captchaService; + @Autowired + private CpImageStoreToolService cpImageStoreToolService; + @Autowired + private CpImageStorePersonSynManager cpImageStorePersonSynManager; + @Autowired + private OpenCvUtils openCvUtils; + @Autowired + private UUIDSerial uuidSerial; + @Resource + private PineappleEngineClient pineappleClient; + @Autowired + private PersonZoneRefService personZoneRefService; + @Autowired + private ZoneFeignClient zoneFeignClient; + + @CloudwalkParamsValidate + public CloudwalkResult add(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { + boolean syncAccount; + this.logger.debug("添加注册记录,请求参数:[{}]", (Object)JSON.toJSONString((Object)param)); + this.checkSource(param); + String businessId = StringUtils.isEmpty((CharSequence)param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); + boolean bl = syncAccount = param.getCreateSysAccount() != null && param.getCreateSysAccount().intValue() == 1; + if (syncAccount && StringUtils.isBlank((CharSequence)param.getSysAccountId())) { + String errorMessage = this.messageSource.getMessage("53014027", null, LocaleContextHolder.getLocale()); + throw new ServiceException("53014027", errorMessage); + } + String auditId = ToolUtil.generateUUID(); + Integer settingType = RegistryTypeEnum.SELF_REGISTRY.getValue(); + if (CpPersonSourceEnum.CERT.getCode().shortValue() == param.getSource().shortValue()) { + settingType = RegistryTypeEnum.CERT_REGISTRY.getValue(); + } + try { + PersonRegistryResult registrySetting; + String frontIdentityImage = param.getFrontIdentityImage(); + String comparePicture = param.getComparePicture(); + this.checkCard(frontIdentityImage, comparePicture); + this.checkNameByOcrCard(frontIdentityImage, param.getName()); + QueryPersonRegistryParam settingParam = new QueryPersonRegistryParam(); + settingParam.setBusinessId(businessId); + settingParam.setType(settingType); + CloudwalkResult settingResult = this.personRegistryService.detail(settingParam, context); + PersonRegistryResult personRegistryResult = registrySetting = settingResult != null ? (PersonRegistryResult)settingResult.getData() : null; + if (registrySetting == null) { + throw new ServiceException("53060541", this.messageSource.getMessage("53060541", null, LocaleContextHolder.getLocale())); + } + boolean needAudit = this.checkAudit(param.getSource(), param.getDeviceCode(), registrySetting); + this.checkPicture(param); + this.processParam(registrySetting, param); + if (!needAudit) { + return this.imgStorePersonService.add((AddImgPersonParam)param, context); + } + Pair, List> codeNamePair = this.checkProperties(registrySetting.getPropertyList(), param); + this.checkUniqueProperty(param, context); + ImgStorePersonAudit personAudit = (ImgStorePersonAudit)cn.cloudwalk.cloud.utils.BeanCopyUtils.copyProperties((Object)param, ImgStorePersonAudit.class); + personAudit.setDeviceName(this.getDeviceName(param.getDeviceCode(), registrySetting.getDeviceList())); + personAudit.setBusinessId(businessId); + personAudit.setId(auditId); + long time = System.currentTimeMillis(); + personAudit.setCreateTime(Long.valueOf(time)); + personAudit.setLastUpdateTime(Long.valueOf(time)); + personAudit.setOrganizationIds(this.listToString(param.getOrganizationIds())); + personAudit.setOrganizationNames(this.listToString(param.getOrganizationNames())); + personAudit.setLabelIds(this.listToString(param.getLabelIds())); + personAudit.setLabelNames(this.listToString(param.getLabelNames())); + personAudit.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); + personAudit.setUserProperties(JSONObject.toJSONString((Object)codeNamePair.getKey())); + personAudit.setUserPropertiesName(JSONObject.toJSONString((Object)codeNamePair.getValue())); + DateTime now = DateTime.now(); + personAudit.setExpiryBeginDate(Long.valueOf(now.getTime())); + now.setMutable(false); + DateTime end = now.offset(DateField.YEAR, 1); + personAudit.setExpiryEndDate(Long.valueOf(end.getTime())); + ArrayList zoneIdList = new ArrayList(); + for (String organizationId : param.getOrganizationIds()) { + List zoneIdResultList = this.getZoneIdByUnitId(organizationId); + if (CollectionUtils.isEmpty(zoneIdResultList)) continue; + zoneIdList.addAll(zoneIdResultList); + } + this.personZoneRefService.add(personAudit.getId(), zoneIdList, personAudit.getCreateUserId()); + this.imgStorePersonAuditMapper.insert(personAudit); + } + catch (ServiceException e) { + this.logger.error("人员注册新增失败,原因:{}", (Object)e.getMessage()); + throw e; + } + catch (Exception e) { + this.logger.error("人员注册新增失败,原因:{}", (Object)e.getMessage()); + throw new ServiceException("53060535", this.messageSource.getMessage("53060535", null, LocaleContextHolder.getLocale())); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + + private List getZoneIdByUnitId(String unitId) { + QueryZoneUnitParam queryZoneUnitParam = new QueryZoneUnitParam(); + queryZoneUnitParam.setUnitId(unitId); + CloudwalkResult zoneIdResult = this.zoneFeignClient.findZoneIdByUnitId(queryZoneUnitParam); + if (zoneIdResult == null) { + return null; + } + QueryZoneByUnitResultDTO data = (QueryZoneByUnitResultDTO)zoneIdResult.getData(); + if (data == null) { + return null; + } + return data.getZoneIdList(); + } + + private void checkCard(String frontIdentityImage, String comparePicture) throws ServiceException { + if (StringUtils.isBlank((CharSequence)frontIdentityImage)) { + return; + } + FaceDetectResult.FaceData faceData = this.detectFace(frontIdentityImage); + if (faceData == null) { + throw new ServiceException("获取人脸数据失败"); + } + BufferedImage bufferedImage = this.base64ToBufferedImage(frontIdentityImage); + if (bufferedImage == null) { + throw new ServiceException("获取图片大小失败"); + } + int x = PersonFileServiceImpl.getX(faceData); + int y = PersonFileServiceImpl.getY(faceData); + int width = PersonFileServiceImpl.getWidth(faceData, bufferedImage, x); + int height = PersonFileServiceImpl.getHeight(faceData, bufferedImage, y); + String cropBase64 = this.openCvUtils.cropImgBase64(frontIdentityImage, x, y, width, height); + ExtractFeatureResult extractFeatureResult = this.pineappleClient.extractFeature(ExtractFeatureParam.builder().img(cropBase64).build()); + if (extractFeatureResult == null) { + throw new ServiceException("获取身份证正面人脸特征失败"); + } + String featureOne = extractFeatureResult.getFeature(); + ExtractFeatureResult extractFeatureResultTwo = this.pineappleClient.extractFeature(ExtractFeatureParam.builder().img(comparePicture).build()); + if (extractFeatureResultTwo == null) { + throw new ServiceException("获取人脸特征失败"); + } + String featureTwo = extractFeatureResultTwo.getFeature(); + ImgCompareParam imgCompareParam = ImgCompareParam.builder().featureA(featureOne).featureB(featureTwo).build(); + ImgCompareResult imgCompareResult = this.pineappleClient.imgCompare(imgCompareParam); + if (imgCompareResult == null) { + this.logger.error("证件识别失败,未返回响应"); + throw new ServiceException("证件识别失败"); + } + String score = imgCompareResult.getScore(); + if (StringUtils.isBlank((CharSequence)score)) { + this.logger.error("证件识别失败,可信分未返回"); + throw new ServiceException("证件识别失败"); + } + double scoreDouble = Double.parseDouble(score); + if (scoreDouble < this.faceCompareScore) { + this.logger.error("证件比对失败,未达到可信分"); + throw new ServiceException("证件比对失败"); + } + } + + private BufferedImage base64ToBufferedImage(String imgBase64) { + byte[] image = Base64.getDecoder().decode(imgBase64); + BufferedImage bufferedImage = null; + try (ByteArrayInputStream bais = new ByteArrayInputStream(image);){ + bufferedImage = ImageIO.read(bais); + } + catch (IOException e) { + this.logger.error("获取图片大小异常:{}", (Object)e.getMessage()); + } + return bufferedImage; + } + + private FaceDetectResult.FaceData detectFace(String imgBase64) throws ServiceException { + CpFaceDetectParam faceDetectParam = new CpFaceDetectParam(); + faceDetectParam.setImageBase64(imgBase64); + CloudwalkResult result = this.cpImageStoreToolService.faceDetect(faceDetectParam); + if (CollectionUtils.isEmpty((Collection)((FaceDetectResult)result.getData()).getFaces())) { + throw new ServiceException("53060432", this.messageSource.getMessage("53060432", null, LocaleContextHolder.getLocale())); + } + if (((FaceDetectResult)result.getData()).getFaces().size() > 1) { + throw new ServiceException("53060433", this.messageSource.getMessage("53060433", null, LocaleContextHolder.getLocale())); + } + return (FaceDetectResult.FaceData)((FaceDetectResult)result.getData()).getFaces().get(0); + } + + private void checkNameByOcrCard(String frontIdentityImage, String paramName) throws ServiceException { + OcrCardParam cardParam = OcrCardParam.builder().app_id("").app_secret("").img(frontIdentityImage).build(); + OcrCardResult ocrCardResult = this.pineappleClient.ocrCard(cardParam); + if (ocrCardResult == null) { + this.logger.error("根据身份证获取姓名失败,未正常响应"); + throw new ServiceException("员工姓名与身份证姓名校验失败"); + } + String name = ocrCardResult.getName(); + if (StringUtils.isBlank((CharSequence)name)) { + this.logger.error("根据身份证获取姓名失败,引擎未返回姓名"); + throw new ServiceException("员工姓名与身份证姓名校验失败"); + } + if (!name.equals(paramName)) { + throw new ServiceException("员工姓名与身份证姓名不匹配"); + } + } + + public CloudwalkResult edit(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { + boolean syncAccount; + if (StringUtils.isBlank((CharSequence)param.getBusinessId())) { + param.setBusinessId(context.getCompany().getCompanyId()); + } + boolean bl = syncAccount = param.getCreateSysAccount() != null && param.getCreateSysAccount().intValue() == 1; + if (syncAccount && StringUtils.isBlank((CharSequence)param.getSysAccountId())) { + String errorMessage = this.messageSource.getMessage("53014027", null, LocaleContextHolder.getLocale()); + throw new ServiceException("53014027", errorMessage); + } + ImgStorePersonAudit personAudit = this.imgStorePersonAuditMapper.selectByPrimaryKey(param.getId(), null); + if (null == personAudit) { + throw new ServiceException("53060548", this.messageSource.getMessage("53060548", null, LocaleContextHolder.getLocale())); + } + if (Objects.equals(personAudit.getAuditStatus(), CpPersonAuditEnum.AGREE.getCode())) { + throw new ServiceException("53060549", this.messageSource.getMessage("53060549", null, LocaleContextHolder.getLocale())); + } + Integer settingType = RegistryTypeEnum.SELF_REGISTRY.getValue(); + if (CpPersonSourceEnum.CERT.getCode().shortValue() == personAudit.getSource().shortValue()) { + settingType = RegistryTypeEnum.CERT_REGISTRY.getValue(); + } + QueryPersonRegistryParam settingParam = new QueryPersonRegistryParam(); + settingParam.setBusinessId(personAudit.getBusinessId()); + settingParam.setType(settingType); + CloudwalkResult settingResult = this.personRegistryService.detail(settingParam, context); + if (!settingResult.isSuccess() || null == settingResult.getData()) { + throw new ServiceException("53060541", this.messageSource.getMessage("53060541", null, LocaleContextHolder.getLocale())); + } + PersonRegistryResult personRegistry = (PersonRegistryResult)settingResult.getData(); + boolean needAudit = this.checkAudit(param.getSource(), param.getDeviceCode(), personRegistry); + this.checkPicture(param); + this.processParam(personRegistry, param); + if (!needAudit) { + try { + return this.imgStorePersonService.add((AddImgPersonParam)param, context); + } + catch (Exception e) { + this.logger.error("exception:{}", (Object)e.getMessage()); + } + } + this.checkProperties(personRegistry.getPropertyList(), param); + this.checkUniqueProperty(param, context); + try { + List codes = JSONObject.parseArray((String)personAudit.getUserProperties(), String.class); + for (String code : codes) { + if ("organizationIds".contains(code)) { + personAudit.setOrganizationIds(this.listToString(param.getOrganizationIds())); + personAudit.setOrganizationNames(this.listToString(param.getOrganizationNames())); + continue; + } + if ("labelIds".equals(code)) { + personAudit.setLabelIds(this.listToString(param.getLabelIds())); + personAudit.setLabelNames(this.listToString(param.getLabelNames())); + continue; + } + Field sourceField = ReflectionUtils.findField(AddPersonAuditParam.class, (String)code); + Field targetField = ReflectionUtils.findField(ImgStorePersonAudit.class, (String)code); + if (null == sourceField || null == targetField) { + throw new ServiceException("53014016", this.messageSource.getMessage("53014016", null, LocaleContextHolder.getLocale())); + } + sourceField.setAccessible(true); + targetField.setAccessible(true); + Object fieldValue = ReflectionUtils.getField((Field)sourceField, (Object)param); + ReflectionUtils.setField((Field)targetField, (Object)personAudit, (Object)fieldValue); + } + personAudit.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); + this.imgStorePersonAuditMapper.updateByPrimaryKey(personAudit); + } + catch (Exception e) { + this.logger.error("人员注册修改失败,原因:{}", e); + throw new ServiceException("53060535", this.messageSource.getMessage("53060535", null, LocaleContextHolder.getLocale())); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + + private String getDeviceName(String deviceCode, List deviceResultList) { + if (!CollectionUtils.isEmpty(deviceResultList)) { + for (DeviceResult item : deviceResultList) { + if (!Objects.equals(item.getDeviceCode(), deviceCode)) continue; + return item.getDeviceName(); + } + } + return null; + } + + private Pair, List> checkProperties(List propertyList, T param) throws ServiceException { + if (propertyList == null) { + throw new ServiceException("53014018", this.messageSource.getMessage("53014018", null, LocaleContextHolder.getLocale())); + } + ArrayList codeList = new ArrayList(); + ArrayList nameList = new ArrayList(); + for (PersonPropertiesResult item : propertyList) { + if (item.getHasChecked() != 1) continue; + String code = item.getCode(); + String name = item.getName(); + codeList.add(code); + nameList.add(name); + if (item.getHasRequired() != 1) continue; + Field field = ReflectionUtils.findField(param.getClass(), (String)code); + if (field == null) { + throw new ServiceException("53014016", this.messageSource.getMessage("53014016", null, LocaleContextHolder.getLocale())); + } + field.setAccessible(true); + Object fieldValue = ReflectionUtils.getField((Field)field, param); + if (fieldValue != null && !StringUtils.isEmpty((CharSequence)String.valueOf(fieldValue))) continue; + throw new ServiceException("53014017", item.getReminder()); + } + return new Pair(codeList, nameList); + } + + private void checkUniqueProperty(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { + CloudwalkResult uniqueResult; + ImgStorePersonAudit conditionAudit; + ImgStorePersonUniqueDto queryDto; + if (StringUtils.isNotEmpty((CharSequence)param.getUserName())) { + queryDto = new ImgStorePersonUniqueDto(); + queryDto.setId(param.getId()); + queryDto.setBusinessId(param.getBusinessId()); + queryDto.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); + queryDto.setUserName(param.getUserName()); + conditionAudit = this.imgStorePersonAuditMapper.findByCondition(queryDto); + if (conditionAudit != null) { + throw new ServiceException("53014013", this.messageSource.getMessage("53014013", null, LocaleContextHolder.getLocale())); + } + } + if (StringUtils.isNotEmpty((CharSequence)param.getPersonCode())) { + queryDto = new ImgStorePersonUniqueDto(); + queryDto.setId(param.getId()); + queryDto.setBusinessId(param.getBusinessId()); + queryDto.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); + queryDto.setPersonCode(param.getPersonCode()); + conditionAudit = this.imgStorePersonAuditMapper.findByCondition(queryDto); + if (conditionAudit != null) { + throw new ServiceException("53014012", this.messageSource.getMessage("53014012", null, LocaleContextHolder.getLocale())); + } + } + if (CpPersonSourceEnum.CERT.getCode().shortValue() == param.getSource().shortValue()) { + QueryPersonRegistryParam registryParam = new QueryPersonRegistryParam(); + registryParam.setBusinessId(param.getBusinessId()); + registryParam.setType(RegistryTypeEnum.CERT_REGISTRY.getValue()); + registryParam.setBindPropertyCode(CertPropertyEnum.CARD_ID.getValue()); + CloudwalkResult personPropertiesResult = this.personRegistryService.getBindProperty(registryParam, context); + if (personPropertiesResult.isSuccess() && personPropertiesResult.getData() != null) { + PersonPropertiesResult personProperties = (PersonPropertiesResult)personPropertiesResult.getData(); + ImgStorePersonAudit auditParam = new ImgStorePersonAudit(); + auditParam.setBusinessId(param.getBusinessId()); + auditParam.setAuditStatus(CpPersonAuditEnum.INIT.getCode()); + Field paramField = ReflectionUtils.findField(param.getClass(), (String)personProperties.getCode()); + paramField.setAccessible(true); + Object value = ReflectionUtils.getField((Field)paramField, (Object)param); + Field personParamField = ReflectionUtils.findField(auditParam.getClass(), (String)personProperties.getCode()); + personParamField.setAccessible(true); + ReflectionUtils.setField((Field)personParamField, (Object)auditParam, (Object)value); + List queryList = this.imgStorePersonAuditMapper.queryMore(auditParam); + if (!CollectionUtil.isEmpty((Collection)queryList)) { + throw new ServiceException("53014023", this.messageSource.getMessage("53014023", null, LocaleContextHolder.getLocale())); + } + } else { + throw new ServiceException("53014022", this.messageSource.getMessage("53014022", null, LocaleContextHolder.getLocale())); + } + } + if (!(uniqueResult = this.imgPersonHandler.checkUniqueProperty((AddImgPersonParam)param, context)).isSuccess()) { + throw new ServiceException(uniqueResult.getCode(), uniqueResult.getMessage()); + } + } + + private void checkPicture(AddPersonAuditParam param) throws ServiceException { + boolean isBase64 = Objects.equals(param.getIsBase64(), 1); + this.checkPicQuality(param.getComparePicture(), isBase64); + this.checkPicQuality(param.getFrontIdentityImage(), isBase64); + this.checkPicQuality(param.getReverseIdentityImage(), isBase64); + if (isBase64) { + String comparePicPath = this.uploadImg(param.getComparePicture()); + String showPicPath = Objects.equals(param.getShowPicture(), param.getComparePicture()) ? comparePicPath : this.uploadImg(param.getShowPicture()); + param.setShowPicture(showPicPath); + param.setComparePicture(comparePicPath); + param.setFrontIdentityPicture(this.uploadImg(param.getFrontIdentityImage())); + param.setReverseIdentityPicture(this.uploadImg(param.getReverseIdentityImage())); + } + } + + private void checkSource(AddPersonAuditParam param) throws ServiceException { + if (!param.isValidSource()) { + throw new ServiceException("53060533", this.messageSource.getMessage("53060533", null, LocaleContextHolder.getLocale())); + } + } + + private boolean isPropAllChecked(PersonRegistryResult registrySetting, String ... propName) { + List propList = Arrays.asList(propName); + long count = registrySetting.getPropertyList().stream().filter(item -> propList.contains(item.getCode()) && Objects.equals(item.getHasChecked(), StatusEnum.CHECKED.getValue())).count(); + return count == (long)propName.length; + } + + private void processParam(PersonRegistryResult registrySetting, AddPersonAuditParam param) throws ServiceException { + if (CollectionUtils.isEmpty((Collection)param.getOrganizationIds()) && CollectionUtils.isEmpty((Collection)registrySetting.getOrganizationList()) && CollectionUtils.isEmpty((Collection)param.getLabelIds()) && CollectionUtils.isEmpty((Collection)registrySetting.getLabelList()) && this.isPropAllChecked(registrySetting, "labelIds", "organizationIds")) { + throw new ServiceException("53014020", this.messageSource.getMessage("53014020", null, LocaleContextHolder.getLocale())); + } + if (CollectionUtils.isEmpty((Collection)param.getOrganizationIds()) && !CollectionUtils.isEmpty((Collection)registrySetting.getOrganizationList())) { + ArrayList organizationIds = new ArrayList(); + ArrayList organizationNames = new ArrayList(); + registrySetting.getOrganizationList().forEach(item -> { + organizationIds.add(item.getId()); + organizationNames.add(item.getName()); + }); + param.setOrganizationIds(organizationIds); + param.setOrganizationNames(organizationNames); + } + if (CollectionUtils.isEmpty((Collection)param.getLabelIds()) && !CollectionUtils.isEmpty((Collection)registrySetting.getLabelList())) { + ArrayList labelIds = new ArrayList(); + ArrayList labelNames = new ArrayList(); + registrySetting.getLabelList().forEach(item -> { + labelIds.add(item.getId()); + labelNames.add(item.getName()); + }); + param.setLabelIds(labelIds); + param.setLabelNames(labelNames); + } + } + + private String listToString(List list) { + if (CollectionUtils.isEmpty(list)) { + return null; + } + StringBuilder sb = new StringBuilder(); + list.stream().filter(item -> !StringUtils.isEmpty((CharSequence)item)).forEach(item -> sb.append((String)item).append(",")); + if (sb.length() > 0) { + sb.deleteCharAt(sb.length() - 1); + } + return sb.toString(); + } + + private boolean checkAudit(Short source, String deviceCode, PersonRegistryResult registrySetting) throws ServiceException { + if (Objects.equals(CpPersonSourceEnum.DEVICE.getCode(), source) || Objects.equals(CpPersonSourceEnum.CERT.getCode(), source)) { + if (StringUtils.isEmpty((CharSequence)deviceCode)) { + throw new ServiceException("53060542", this.messageSource.getMessage("53060542", null, LocaleContextHolder.getLocale())); + } + if (!Objects.equals(registrySetting.getStatus(), 1)) { + throw new ServiceException("53060534", this.messageSource.getMessage("53060534", null, LocaleContextHolder.getLocale())); + } + if (!this.isDeviceValid(deviceCode, registrySetting.getDeviceList())) { + throw new ServiceException("53060543", this.messageSource.getMessage("53060543", null, LocaleContextHolder.getLocale())); + } + return Objects.equals(registrySetting.getDeviceStatus(), 1); + } + return Objects.equals(registrySetting.getCodeStatus(), 1); + } + + private void checkPicQuality(String data, boolean isBase64) throws ServiceException { + if (StringUtils.isEmpty((CharSequence)data)) { + return; + } + AgFeatureExtractParam featureExtractParam = new AgFeatureExtractParam(); + if (isBase64) { + featureExtractParam.setImageBase64(data); + } else { + featureExtractParam.setImageUrl(data); + } + CloudwalkResult result = this.cpImageStoreToolService.extractFeature(featureExtractParam); + this.logger.info("scoreResult:{}", (Object)JSONObject.toJSONString((Object)result)); + if (result.isSuccess() && result.getData() != null) { + AgFeatureExtractResult featureExtractResult = (AgFeatureExtractResult)result.getData(); + Double score = featureExtractResult.getScore(); + this.logger.info("score:{}", (Object)score); + if (this.imgQualityScore > score) { + throw new ServiceException("53003820", this.messageSource.getMessage("53003820", null, LocaleContextHolder.getLocale())); + } + } else { + throw new ServiceException(result.getCode(), result.getMessage()); + } + } + + private String uploadImg(String base64) throws ServiceException { + if (StringUtils.isEmpty((CharSequence)base64)) { + return null; + } + ImageInfoDto compressInfoDto = Optional.ofNullable(this.openCvUtils.getGraphicsCompressBase64(base64)).orElse(new ImageInfoDto()); + if (StringUtils.isEmpty((CharSequence)compressInfoDto.getBase64Compress())) { + this.logger.error("图片压缩失败"); + return null; + } + String compressBase64 = compressInfoDto.getBase64Compress(); + byte[] bytes = Base64Utils.getBytes(compressBase64); + if (bytes.length > ImageStoreConstants.MAX_FILE) { + throw new ServiceException("53060428", this.messageSource.getMessage("53060428", null, LocaleContextHolder.getLocale())); + } + String fileName = ToolUtil.generateUUID(); + this.logger.info("上传文件:{},size={}", (Object)fileName, (Object)bytes.length); + CloudwalkResult storeResult = this.personFileService.upload(fileName, bytes); + if (storeResult != null && storeResult.isSuccess() && StringUtils.isNotBlank((CharSequence)((CharSequence)storeResult.getData()))) { + return (String)storeResult.getData(); + } + throw new ServiceException("80014013", this.messageSource.getMessage("80014013", null, LocaleContextHolder.getLocale())); + } + + private boolean isDeviceValid(String deviceCode, List deviceList) { + if (CollectionUtils.isEmpty(deviceList)) { + return false; + } + return deviceList.stream().anyMatch(device -> StringUtils.equals((CharSequence)deviceCode, (CharSequence)device.getDeviceCode())); + } + + @CloudwalkParamsValidate + public CloudwalkResult auditAgree(AddPersonAuditParam param, CloudwalkCallContext context) throws ServiceException { + param.setCreateSysAccount(Short.valueOf((short)0)); + ImgStorePersonAudit personAudit = this.getAuditById(param.getId()); + try { + this.checkPicture(param); + BeanCopyUtils.copyPropertiesIgnoreNull(personAudit, param); + if (CollectionUtils.isEmpty((Collection)param.getOrganizationIds()) && StringUtils.isNotEmpty((CharSequence)personAudit.getOrganizationIds())) { + param.setOrganizationIds(Arrays.asList(personAudit.getOrganizationIds().split(","))); + } + if (CollectionUtils.isEmpty((Collection)param.getLabelIds()) && StringUtils.isNotEmpty((CharSequence)personAudit.getLabelIds())) { + param.setLabelIds(Arrays.asList(personAudit.getLabelIds().split(","))); + } + String personId = this.uuidSerial.uuid(); + PersonAuditServiceImpl proxyObj = (PersonAuditServiceImpl)AopContext.currentProxy(); + List imageIdResultList = proxyObj.auditAgreeTransactional(param, context, personAudit, personId); + if (Collections3.isNotEmpty(imageIdResultList)) { + imageIdResultList.parallelStream().forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask((String)imageId)); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + catch (ServiceException e) { + this.logger.error("人员注册审核通过失败,原因:{}", (Object)e.getMessage()); + throw e; + } + catch (Exception e) { + this.logger.error("人员注册审核通过失败,原因:{}", e); + throw new ServiceException("53060539", this.messageSource.getMessage("53060539", null, LocaleContextHolder.getLocale())); + } + } + + @Transactional(propagation=Propagation.REQUIRED, rollbackFor={Exception.class}, value="transactionManager") + public List auditAgreeTransactional(AddPersonAuditParam param, CloudwalkCallContext context, ImgStorePersonAudit personAudit, String personId) throws ServiceException, ImageStoreException { + List result = this.imgPersonHandler.addTransactional((AddImgPersonParam)param, context, personId); + BeanCopyUtils.copyPropertiesIgnoreNull(param, personAudit); + if (!CollectionUtils.isEmpty((Collection)param.getOrganizationIds())) { + personAudit.setOrganizationIds(this.listToString(param.getOrganizationIds())); + } + if (!CollectionUtils.isEmpty((Collection)param.getOrganizationNames())) { + personAudit.setOrganizationNames(this.listToString(param.getOrganizationNames())); + } + if (!CollectionUtils.isEmpty((Collection)param.getLabelIds())) { + personAudit.setLabelIds(this.listToString(param.getLabelIds())); + } + if (!CollectionUtils.isEmpty((Collection)param.getLabelNames())) { + personAudit.setLabelNames(this.listToString(param.getLabelNames())); + } + personAudit.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + personAudit.setLastUpdateUserId(context.getUser().getCaller()); + personAudit.setAuditStatus(CpPersonAuditEnum.AGREE.getCode()); + this.imgStorePersonAuditMapper.update(personAudit); + return result; + } + + private ImgStorePersonAudit getAuditById(String id) throws ServiceException { + if (StringUtils.isEmpty((CharSequence)id)) { + throw new ServiceException("53060537", this.messageSource.getMessage("53060537", null, LocaleContextHolder.getLocale())); + } + ImgStorePersonAudit personAudit = this.imgStorePersonAuditMapper.selectByPrimaryKey(id, CpPersonAuditEnum.INIT.getCode()); + if (personAudit == null) { + throw new ServiceException("53060538", this.messageSource.getMessage("53060538", null, LocaleContextHolder.getLocale())); + } + return personAudit; + } + + @Transactional(propagation=Propagation.REQUIRED, rollbackFor={Exception.class}, value="transactionManager") + @CloudwalkParamsValidate + public CloudwalkResult auditRefuse(String id, CloudwalkCallContext context) throws ServiceException { + ImgStorePersonAudit personAudit = this.getAuditById(id); + personAudit.setId(id); + personAudit.setLastUpdateTime(Long.valueOf(System.currentTimeMillis())); + personAudit.setLastUpdateUserId(context.getUser().getCaller()); + personAudit.setAuditStatus(CpPersonAuditEnum.REFUSE.getCode()); + try { + this.imgStorePersonAuditMapper.update(personAudit); + } + catch (Exception e) { + this.logger.error("人员注册审核拒绝失败,原因:", e); + throw new ServiceException("53060539", this.messageSource.getMessage("53060539", null, LocaleContextHolder.getLocale())); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + + @CloudwalkParamsValidate + public CloudwalkResult batchAgree(List ids, CloudwalkCallContext context) throws ServiceException { + if (CollectionUtils.isEmpty(ids)) { + throw new ServiceException("53060537", this.messageSource.getMessage("53060537", null, LocaleContextHolder.getLocale())); + } + try { + List auditList = this.imgStorePersonAuditMapper.queryByIds(ids, CpPersonAuditEnum.INIT.getCode()); + if (CollectionUtils.isEmpty((Collection)auditList)) { + return (CloudwalkResult) CloudwalkResult.fail(results); + } + String updateUserId = context.getUser().getCaller(); + List imageIdResultList = this.imgPersonHandler.batchAgreeTransactional(context, auditList, updateUserId); + if (Collections3.isNotEmpty(imageIdResultList)) { + imageIdResultList.parallelStream().forEach(imageId -> this.cpImageStorePersonSynManager.handleGroupPersonSynTask((String)imageId)); + } + } + catch (ServiceException e) { + this.logger.error("人员注册批量同构失败,原因:{}", (Object)e.getMessage()); + throw e; + } + catch (Exception e) { + this.logger.error("人员注册批量同构失败,原因:{}", e); + throw new ServiceException("53060539", this.messageSource.getMessage("53060539", null, LocaleContextHolder.getLocale())); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + + @Transactional(propagation=Propagation.REQUIRED, rollbackFor={Exception.class}, value="transactionManager") + @CloudwalkParamsValidate + public CloudwalkResult batchRefuse(List ids, CloudwalkCallContext context) throws ServiceException { + if (CollectionUtils.isEmpty(ids)) { + throw new ServiceException("53060537", this.messageSource.getMessage("53060537", null, LocaleContextHolder.getLocale())); + } + long time = System.currentTimeMillis(); + String updateUserId = context.getUser().getCaller(); + List applyList = ids.stream().map(id -> new ImgStorePersonAuditApply(id, Long.valueOf(time), updateUserId, CpPersonAuditEnum.REFUSE.getCode())).collect(Collectors.toList()); + try { + this.imgStorePersonAuditMapper.batchUpdate(applyList, CpPersonAuditEnum.INIT.getCode()); + } + catch (Exception e) { + this.logger.error("人员注册批量拒绝失败,原因:", e); + throw new ServiceException("53060539", this.messageSource.getMessage("53060539", null, LocaleContextHolder.getLocale())); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + + public CloudwalkResult> page(PersonAuditQueryParam param, CloudwalkPageInfo page, CloudwalkCallContext context) throws ServiceException { + CloudwalkPageAble pageAble; + String businessId = StringUtils.isEmpty((CharSequence)param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); + ImgStorePersonAuditQueryDto dto = (ImgStorePersonAuditQueryDto)cn.cloudwalk.cloud.utils.BeanCopyUtils.copyProperties((Object)param, (Object)new ImgStorePersonAuditQueryDto()); + dto.setBusinessId(businessId); + try { + PageHelper.startPage((int)page.getCurrentPage(), (int)page.getPageSize()); + Page pageData = (Page)this.imgStorePersonAuditMapper.query(dto); + List result = Optional.ofNullable(pageData.getResult()).orElse(Collections.emptyList()); + List propertyList = this.imgStorePersonPropertiesMapper.selectByIds(businessId, null); + Map propertyMap = propertyList.stream().collect(Collectors.toMap(ImgStorePersonProperties::getCode, pro -> pro)); + List collect = result.stream().map(item -> { + PersonAuditGetResult auditGetResult = (PersonAuditGetResult)cn.cloudwalk.cloud.utils.BeanCopyUtils.copyProperties((Object)item, PersonAuditGetResult.class); + auditGetResult.setUserPropertiesList(this.getUserProperties((ImgStorePersonAudit)item, propertyMap)); + return auditGetResult; + }).collect(Collectors.toList()); + pageAble = new CloudwalkPageAble(collect, page, pageData.getTotal()); + } + catch (Exception e) { + this.logger.error("分页查询人员注册信息失败,原因:", e); + throw new ServiceException("53060540", this.messageSource.getMessage("53060540", null, LocaleContextHolder.getLocale())); + } + return (CloudwalkResult) CloudwalkResult.success(results); + } + + private List getUserProperties(ImgStorePersonAudit audit, Map propertyMap) { + ArrayList result = new ArrayList(); + if (audit == null) { + return result; + } + List codes = JSONObject.parseArray((String)audit.getUserProperties(), String.class); + List names = JSONObject.parseArray((String)audit.getUserPropertiesName(), String.class); + if (!CollectionUtils.isEmpty((Collection)codes) && !CollectionUtils.isEmpty((Collection)names) && codes.size() == names.size()) { + for (int i = 0; i < codes.size(); ++i) { + Object fieldValue; + UserProperties properties = new UserProperties(); + String code = (String)codes.get(i); + properties.setCode(code); + properties.setLabel((String)names.get(i)); + properties.setType((int)propertyMap.get(code).getType().shortValue()); + if (Objects.equals(code, "organizationIds")) { + fieldValue = audit.getOrganizationNames(); + } else if (Objects.equals(code, "labelIds")) { + fieldValue = audit.getLabelNames(); + } else { + Field field = ReflectionUtils.findField(audit.getClass(), (String)code); + if (field == null) continue; + field.setAccessible(true); + fieldValue = ReflectionUtils.getField((Field)field, (Object)audit); + } + properties.setValue(fieldValue); + result.add(properties); + } + } + if (Objects.equals(audit.getSource(), CpPersonSourceEnum.DEVICE.getCode())) { + UserProperties properties = new UserProperties(); + properties.setCode("deviceName"); + properties.setLabel("设备名称"); + properties.setValue((Object)audit.getDeviceName()); + result.add(properties); + } + return result; + } + + public CloudwalkResult userCheck(PersonAuditCheckParam param, CloudwalkCallContext context) throws ServiceException { + ImgStorePersonAudit personAudit; + CloudwalkResult checkCaptcha = this.captchaService.checkCaptcha((CheckCaptchaParam)param); + if (!checkCaptcha.isSuccess()) { + throw new ServiceException("53060546", this.messageSource.getMessage("53060546", null, LocaleContextHolder.getLocale())); + } + String businessId = StringUtils.isEmpty((CharSequence)param.getBusinessId()) ? context.getCompany().getCompanyId() : param.getBusinessId(); + param.setBusinessId(businessId); + String column = CpPersonAuditUniqueEnum.getMessage((String)param.getCheckName()); + if (column == null) { + throw new ServiceException("53060547", this.messageSource.getMessage("53060547", null, LocaleContextHolder.getLocale())); + } + ImgStoreAuditUserQueryDto queryDto = new ImgStoreAuditUserQueryDto(); + queryDto.setBusinessId(businessId); + Field targetField = ReflectionUtils.findField(queryDto.getClass(), (String)param.getCheckName()); + if (targetField == null) { + throw new ServiceException("53060547", this.messageSource.getMessage("53060547", null, LocaleContextHolder.getLocale())); + } + targetField.setAccessible(true); + ReflectionUtils.setField((Field)targetField, (Object)queryDto, (Object)param.getCheckNameValue()); + try { + personAudit = this.imgStorePersonAuditMapper.userQuery(queryDto); + } + catch (Exception e) { + this.logger.error("人员注册查询失败,原因:{}", (Object)e.getMessage()); + return (CloudwalkResult) CloudwalkResult.fail(results); + } + if (personAudit == null) { + return (CloudwalkResult) CloudwalkResult.fail(results); + } + Short auditStatus = personAudit.getAuditStatus(); + PersonAuditResult auditResult = new PersonAuditResult(); + auditResult.setAuditStatus(auditStatus); + auditResult.setAuditStatusStr(CpPersonAuditEnum.getMessage((Short)auditStatus)); + return (CloudwalkResult) CloudwalkResult.success(results); + } + + public CloudwalkResult checkById(PersonAuditParam param, CloudwalkCallContext context) throws ServiceException { + if (StringUtils.isBlank((CharSequence)param.getId())) { + return (CloudwalkResult) CloudwalkResult.fail(results); + } + ImgStorePersonAudit personAudit = this.imgStorePersonAuditMapper.selectByPrimaryKey(param.getId(), null); + if (null == personAudit) { + throw new ServiceException("53060548", this.messageSource.getMessage("53060548", null, LocaleContextHolder.getLocale())); + } + List propertyList = this.imgStorePersonPropertiesMapper.selectByIds(personAudit.getBusinessId(), null); + Map propertyMap = propertyList.stream().collect(Collectors.toMap(ImgStorePersonProperties::getCode, pro -> pro)); + PersonAuditGetResult result = (PersonAuditGetResult)cn.cloudwalk.cloud.utils.BeanCopyUtils.copyProperties((Object)personAudit, PersonAuditGetResult.class); + result.setUserPropertiesList(this.getUserProperties(personAudit, propertyMap)); + return (CloudwalkResult) CloudwalkResult.success(results); + } } - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/PersonAuditServiceImpl.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file diff --git a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/SelfRegistryHandler.java b/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/SelfRegistryHandler.java deleted file mode 100644 index 8379ade0..00000000 --- a/maven-ninca-common-component-organization/cwos-component-organization-service/src/main/java/cn/cloudwalk/service/organization/service/SelfRegistryHandler.java +++ /dev/null @@ -1,264 +0,0 @@ -package cn.cloudwalk.service.organization.service; -// 业务服务 -import cn.cloudwalk.client.device.mgn.atomic.param.CoreDeviceQueryParam; -import cn.cloudwalk.client.device.mgn.atomic.result.AtomicDeviceGetResult; -import cn.cloudwalk.client.device.mgn.atomic.service.AtomicDeviceService; -import cn.cloudwalk.client.organization.common.enums.DefaultPropertyEnum; -import cn.cloudwalk.client.organization.common.enums.RegistryTypeEnum; -import cn.cloudwalk.client.organization.common.enums.StatusEnum; -import cn.cloudwalk.client.organization.common.enums.UniquePropertyEnum; -import cn.cloudwalk.client.organization.service.store.param.AddPersonRegistryParam; -import cn.cloudwalk.client.organization.service.store.param.QueryPersonRegistryParam; -import cn.cloudwalk.client.organization.service.store.result.DeviceResult; -import cn.cloudwalk.client.organization.service.store.result.PersonPropertiesResult; -import cn.cloudwalk.client.organization.service.store.result.PersonRegistryResult; -import cn.cloudwalk.client.organization.service.store.service.IPersonRegistryHandler; -import cn.cloudwalk.cloud.annotation.CloudwalkParamsValidate; -import cn.cloudwalk.cloud.context.CloudwalkCallContext; -import cn.cloudwalk.cloud.exception.ServiceException; -import cn.cloudwalk.cloud.result.CloudwalkResult; -import cn.cloudwalk.cloud.utils.BeanCopyUtils; -import cn.cloudwalk.data.organization.entity.ImgStorePersonProperties; -import cn.cloudwalk.data.organization.entity.PersonRegistry; -import cn.cloudwalk.data.organization.entity.PersonRegistryDevice; -import cn.cloudwalk.data.organization.entity.PersonRegistryProperties; -import cn.cloudwalk.data.organization.mapper.ImgStorePersonPropertiesMapper; -import cn.cloudwalk.data.organization.mapper.PersonRegistryDeviceMapper; -import cn.cloudwalk.data.organization.mapper.PersonRegistryPropertiesMapper; -import cn.cloudwalk.service.organization.common.AbstractImagStoreService; -import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Lists; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.concurrent.atomic.AtomicReference; -import java.util.stream.Collectors; -import javax.annotation.Resource; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springside.modules.utils.Collections3; -@Service("SelfRegistryHandler") -public class SelfRegistryHandler -extends AbstractImagStoreService -implements IPersonRegistryHandler -{ -@Resource -private CommonPersonRegistryService commonPersonRegistryService; -@Resource -private AtomicDeviceService atomicDeviceService; -@Resource -private ImgStorePersonPropertiesMapper imgStorePersonPropertiesMapper; -@Resource -private PersonRegistryPropertiesMapper personRegistryPropertiesMapper; -@Resource -private PersonRegistryDeviceMapper personRegistryDeviceMapper; -@CloudwalkParamsValidate -@Transactional(propagation = Propagation.REQUIRED, rollbackFor = {Exception.class}, value = "transactionManager") -public CloudwalkResult save(AddPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -String businessId = context.getCompany().getCompanyId(); -param.setBusinessId(businessId); -CloudwalkResult result = validateParams(param, context); -if (!result.isSuccess()) { -return result; -} -PersonRegistry personRegistry = this.commonPersonRegistryService.getByBusinessAndType(businessId, RegistryTypeEnum.SELF_REGISTRY.getValue()); -if (null != personRegistry) { -param.setId(personRegistry.getId()); -update(param, context); -} else { -insert(param, context); -} -return CloudwalkResult.success(Boolean.valueOf(true)); -} -private CloudwalkResult validateParams(AddPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -if (null == param.getCodeStatus()) { -return CloudwalkResult.fail("53014502", -getMessage("53014502")); -} -if (CollectionUtils.isEmpty(param.getPropertyIdList())) { -return CloudwalkResult.fail("53014503", -getMessage("53014503")); -} -List dbPersonProList = this.imgStorePersonPropertiesMapper.selectByIds(param.getBusinessId(), param.getPropertyIdList()); -if (CollectionUtils.isEmpty(dbPersonProList) || dbPersonProList.size() != param.getPropertyIdList().size()) { -this.logger.warn("注册属性不属于人员基本属性,注册属性Id列表:[{}]", JSONObject.toJSONString(param.getPropertyIdList())); -return CloudwalkResult.fail("53014508", -getMessage("53014508")); -} -for (DefaultPropertyEnum default_property : DefaultPropertyEnum.values()) { -Optional requiredOptional = dbPersonProList.stream().filter(property -> default_property.getValue().equals(property.getCode())).findFirst(); -if (!requiredOptional.isPresent()) { -this.logger.warn("{}未勾选,注册属性Id列表:[{}]", default_property.getDescription(), -JSONObject.toJSONString(param.getPropertyIdList())); -return CloudwalkResult.fail("53014511", "注册属性" + default_property -.getDescription() + "必须勾选"); -} -} -if (Objects.equals(param.getDeviceStatus(), StatusEnum.CLOSE.getValue()) || -Objects.equals(param.getCodeStatus(), StatusEnum.CLOSE.getValue())) { -ImgStorePersonProperties queryPersonPro = new ImgStorePersonProperties(); -queryPersonPro.setBusinessId(param.getBusinessId()); -queryPersonPro.setStatus(StatusEnum.VALID.getValue()); -queryPersonPro.setHasRequired(StatusEnum.REQUIRED.getValue()); -List requiredPersonProList = this.imgStorePersonPropertiesMapper.select(queryPersonPro); -if (!CollectionUtils.isEmpty(requiredPersonProList)) { -List requiredPersonProIdList = Collections3.extractToList(requiredPersonProList, "id"); -dbPersonProList = (List)dbPersonProList.stream().filter(pro -> requiredPersonProIdList.contains(pro.getId())).collect(Collectors.toList()); -if (dbPersonProList.size() != requiredPersonProList.size()) { -this.logger.warn("设备注册审核和扫码注册审核未同时打开,有未勾选的必填属性,注册属性Id列表:[{}]", -JSONObject.toJSONString(param.getPropertyIdList())); -return CloudwalkResult.fail("53014511", -getMessage("53014511")); -} -} -} -this.commonPersonRegistryService.validateOrg(param); -this.commonPersonRegistryService.validateLabel(param); -this.commonPersonRegistryService.validateDevice(param, context); -return CloudwalkResult.success(Boolean.valueOf(true)); -} -private CloudwalkResult insert(AddPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -String id = getPrimaryId(); -this.commonPersonRegistryService.insertPersonRegistry(id, param, context); -this.commonPersonRegistryService.batchInsertPersonRegistryProperty(id, param); -this.commonPersonRegistryService.batchInsertPersonRegistryDevice(id, param, context, Boolean.valueOf(false)); -return CloudwalkResult.success(Boolean.valueOf(true)); -} -private CloudwalkResult update(AddPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -this.commonPersonRegistryService.updatePersonRegistry(param, context); -this.commonPersonRegistryService.batchUpdatePersonRegistryProperty(param); -this.commonPersonRegistryService.batchUpdatePersonRegistryDevice(param, context, Boolean.valueOf(false)); -return CloudwalkResult.success(Boolean.valueOf(true)); -} -@CloudwalkParamsValidate -public CloudwalkResult detail(QueryPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -String businessId = param.getBusinessId(); -if (StringUtils.isBlank(businessId)) { -businessId = context.getCompany().getCompanyId(); -} -PersonRegistryResult result = new PersonRegistryResult(); -ImgStorePersonProperties queryPersonPro = new ImgStorePersonProperties(); -queryPersonPro.setBusinessId(businessId); -queryPersonPro.setStatus(StatusEnum.VALID.getValue()); -List personPropertyList = this.imgStorePersonPropertiesMapper.select(queryPersonPro); -if (CollectionUtils.isEmpty(personPropertyList)) { -this.logger.warn("不存在人员属性"); -return CloudwalkResult.fail("53014524", -getMessage("53014524")); -} -List proResultList = BeanCopyUtils.copy(personPropertyList, PersonPropertiesResult.class); -proResultList.forEach(propertyResult -> { -if (DefaultPropertyEnum.hasProperty(propertyResult.getCode())) { -propertyResult.setHasChecked(StatusEnum.CHECKED.getValue()); -propertyResult.setHasDisabled(StatusEnum.DISABLED.getValue()); -} -}); -proResultList = (List)proResultList.stream().sorted(Comparator.comparing(PersonPropertiesResult::getOrderNum)).collect(Collectors.toList()); -result.setPropertyList(proResultList); -PersonRegistry dbPersonRegistry = this.commonPersonRegistryService.getByBusinessAndType(businessId, RegistryTypeEnum.SELF_REGISTRY.getValue()); -if (null != dbPersonRegistry) { -result = (PersonRegistryResult)BeanCopyUtils.copyProperties(dbPersonRegistry, PersonRegistryResult.class); -result.setPropertyList(proResultList); -this.commonPersonRegistryService.setOrg(dbPersonRegistry, result); -this.commonPersonRegistryService.setLabel(dbPersonRegistry, result); -List dbPersonRegistryDeviceList = this.personRegistryDeviceMapper.select(dbPersonRegistry.getId(), null); -if (!CollectionUtils.isEmpty(dbPersonRegistryDeviceList)) { -CoreDeviceQueryParam coreDeviceQueryParam = new CoreDeviceQueryParam(); -coreDeviceQueryParam.setBusinessId(businessId); -coreDeviceQueryParam -.setDeviceCodes(Collections3.extractToList(dbPersonRegistryDeviceList, "deviceCode")); -CloudwalkResult> deviceGetResult = this.atomicDeviceService.list(coreDeviceQueryParam, context); -if (!CollectionUtils.isEmpty((Collection)deviceGetResult.getData())) { -List deviceResultList = Lists.newArrayListWithCapacity(((List)deviceGetResult.getData()).size()); -((List)deviceGetResult.getData()).forEach(device -> { -DeviceResult deviceResult = new DeviceResult(); -deviceResult.setDeviceCode(device.getDeviceCode()); -deviceResult.setDeviceName(device.getDeviceName()); -deviceResultList.add(deviceResult); -}); -result.setDeviceList(deviceResultList); -} -} -List dbPersonRegistryProList = this.personRegistryPropertiesMapper.select(dbPersonRegistry.getId(), null); -List personPropertyIdList = Collections3.extractToList(dbPersonRegistryProList, "personPropertyId"); -result.getPropertyList().forEach(propertyResult -> { -if (personPropertyIdList.contains(propertyResult.getId())) { -propertyResult.setHasChecked(StatusEnum.CHECKED.getValue()); -} -}); -} -return CloudwalkResult.success(result); -} -@CloudwalkParamsValidate -public CloudwalkResult> getRegistryPropertyList(QueryPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -String businessId = param.getBusinessId(); -if (StringUtils.isBlank(businessId)) { -businessId = context.getCompany().getCompanyId(); -} -PersonRegistry dbPersonRegistry = (PersonRegistry)this.commonPersonRegistryService.getResultByBusinessAndType(businessId, RegistryTypeEnum.SELF_REGISTRY.getValue()).getData(); -this.commonPersonRegistryService.validateDevice(param, dbPersonRegistry); -return CloudwalkResult.success(getPersonPropertyList(dbPersonRegistry, true)); -} -@CloudwalkParamsValidate -public CloudwalkResult> getAuditPropertyList(QueryPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -String businessId = param.getBusinessId(); -if (StringUtils.isBlank(businessId)) { -businessId = context.getCompany().getCompanyId(); -} -PersonRegistry dbPersonRegistry = (PersonRegistry)this.commonPersonRegistryService.getResultByBusinessAndType(businessId, RegistryTypeEnum.SELF_REGISTRY.getValue()).getData(); -return CloudwalkResult.success(getPersonPropertyList(dbPersonRegistry, false)); -} -private List getPersonPropertyList(PersonRegistry personRegistry, boolean isChecked) { -List dbPersonRegistryProList = this.personRegistryPropertiesMapper.select(personRegistry.getId(), null); -List personProIdList = Collections3.extractToList(dbPersonRegistryProList, "personPropertyId"); -ImgStorePersonProperties queryPersonPro = new ImgStorePersonProperties(); -queryPersonPro.setBusinessId(personRegistry.getBusinessId()); -queryPersonPro.setStatus(StatusEnum.VALID.getValue()); -List dbPersonProList = this.imgStorePersonPropertiesMapper.select(queryPersonPro); -List proResultList = BeanCopyUtils.copy(dbPersonProList, PersonPropertiesResult.class); -List defaultProList = BeanCopyUtils.copy(dbPersonProList, PersonPropertiesResult.class); -proResultList = (List)proResultList.stream().filter(proResult -> (personProIdList.contains(proResult.getId()) == isChecked)).collect(Collectors.toList()); -defaultProList = (List)defaultProList.stream().filter(proResult -> DefaultPropertyEnum.hasProperty(proResult.getCode())).collect(Collectors.toList()); -if (isChecked) { -proResultList.removeAll(defaultProList); -proResultList.addAll(defaultProList); -proResultList.forEach(proResult -> { -proResult.setHasChecked(StatusEnum.CHECKED.getValue()); -if (DefaultPropertyEnum.hasProperty(proResult.getCode())) { -proResult.setHasDisabled(StatusEnum.DISABLED.getValue()); -} -}); -} else { -proResultList.removeAll(defaultProList); -} -proResultList = (List)proResultList.stream().sorted(Comparator.comparing(PersonPropertiesResult::getOrderNum)).collect(Collectors.toList()); -return proResultList; -} -@CloudwalkParamsValidate -public CloudwalkResult getUniqueRegistryProperty(QueryPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -String businessId = param.getBusinessId(); -if (StringUtils.isBlank(businessId)) { -businessId = context.getCompany().getCompanyId(); -} -PersonRegistry dbPersonRegistry = (PersonRegistry)this.commonPersonRegistryService.getResultByBusinessAndType(businessId, RegistryTypeEnum.SELF_REGISTRY.getValue()).getData(); -List propertyList = getPersonPropertyList(dbPersonRegistry, true); -AtomicReference result = new AtomicReference<>(); -propertyList.stream().filter(property -> UniquePropertyEnum.hasProperty(property.getCode())) -.findFirst().ifPresent(personPropertiesResult -> result.set(personPropertiesResult)); -return CloudwalkResult.success(result.get()); -} -public CloudwalkResult getBindProperty(QueryPersonRegistryParam param, CloudwalkCallContext context) throws ServiceException { -return null; -} -} - - -/* Location: /media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization/ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib/cwos-component-organization-service-v2.9.2_xinghewan.jar!/cn/cloudwalk/service/organization/service/SelfRegistryHandler.class - * Java compiler version: 8 (52.0) - * JD-Core Version: 1.1.3 - */ \ No newline at end of file