123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- package com.galaxis.manatee.service;
- import com.fasterxml.jackson.core.type.TypeReference;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.galaxis.manatee.constant.ChuanYunConstant;
- import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
- import com.galaxis.manatee.dao.ChuanyunLogDao;
- import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
- import com.galaxis.manatee.dao.ChuanyunUserDepartmentNameDao;
- import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
- import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunLogDO;
- import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
- import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDepartmentNameDO;
- import com.galaxis.manatee.entity.chuanyun.dto.Filter;
- import com.galaxis.manatee.manager.ChuanYunManager;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.stereotype.Service;
- import org.springframework.util.StringUtils;
- import java.time.Instant;
- import java.time.LocalDateTime;
- import java.time.format.DateTimeFormatter;
- import java.time.temporal.ChronoUnit;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 下载日志原始数据
- * @author zcj
- * @version 0.1
- * @date 2021/3/13 2:14 上午
- */
- @Slf4j
- @Service
- public class LogDownloadService {
- private final ChuanYunManager chuanYunManager;
- private final ChuanyunLogDao chuanyunLogDao;
- private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
- private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
- private final ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao;
- public LogDownloadService(ChuanYunManager chuanYunManager, ChuanyunLogDao chuanyunLogDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserDepartmentNameDao chuanyunUserDepartmentNameDao) {
- this.chuanYunManager = chuanYunManager;
- this.chuanyunLogDao = chuanyunLogDao;
- this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
- this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
- this.chuanyunUserDepartmentNameDao = chuanyunUserDepartmentNameDao;
- }
- /**
- * 更新日志数据
- * @param isRecent 是否只更新最近30天
- */
- public void saveChuanyunLogDO(boolean isRecent){
- var objectMapper = new ObjectMapper();
- var start = 0;
- var totalCount = 0L;
- var flag = true;
- var pageSize=100;
- List<String> matchersString=new ArrayList<>();
- //由于需要统计流程中的日志,在日志数据同步时将状态为2的数据一并统计
- matchersString.add("Status_6,[1;2;3]");
- if(isRecent){
- //获取当前时间30天前日期
- DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
- LocalDateTime now = LocalDateTime.now();
- now = now.minus(30, ChronoUnit.DAYS);
- matchersString.add("logDate_1,"+df.format(now));
- }
- while (flag) {
- long startTime= Instant.now().getEpochSecond();
- try {
- //从氚云查询数据
- var filter= Filter.instance(start,start+pageSize,true,Filter.AND,matchersString);
- var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunLogDO.SCHEMA_CODE, filter);
- if (chuanyunFindAllResponse.getReturnData() == null) {
- flag = false;
- continue;
- }
- if (chuanyunFindAllResponse.getReturnData().getTotalCount() >= start + pageSize) {
- start += pageSize;
- } else {
- flag = false;
- }
- //转化为POJO
- List<ChuanyunLogDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
- });
- //处理日志数据
- result.forEach(this::updateChuanyunLogData);
- //获取项目总数
- totalCount = chuanyunFindAllResponse.getReturnData().getTotalCount();
- //保存
- chuanyunLogDao.saveAll(result);
- } catch (Exception e) {
- log.error(e.getMessage());
- e.printStackTrace();
- }
- log.info("日志100条保存时间"+(Instant.now().getEpochSecond()-startTime)+"秒");
- }
- log.info("最近一月历史日志信息保存" + totalCount);
- }
- /**
- * 更新氚云日志数据
- * @param chuanyunLogDO 待处理数据
- */
- private void updateChuanyunLogData(ChuanyunLogDO chuanyunLogDO){
- if(chuanyunLogDO.getDayLogList()==null||chuanyunLogDO.getDayLogList().size()==0){
- chuanyunLogDO.setDayLogList(new ArrayList<>());
- log.warn(chuanyunLogDO+"");
- log.warn("异常数据");
- }else{
- //如果有重复就删除
- chuanyunLogDao.findById(chuanyunLogDO.getObjectId()).ifPresent(chuanyunLogDao::delete);
- //根据projectId获取code,如果是生产项目,则不用处理
- //针对前期测试数据,可能出现日志为空的情况,跳过不处理
- chuanyunLogDO.getDayLogList().forEach(chuanyunDayLog -> {
- //离职人员补全用户Id及部门ID
- if (StringUtils.isEmpty(chuanyunLogDO.getUserId())){
- var name="";
- if (StringUtils.isEmpty(chuanyunDayLog.getContent())){
- name=chuanyunLogDO.getName();
- }else {
- name=chuanyunDayLog.getContent();
- }
- chuanyunLogDO.setUserId(getCharacters(name));
- ChuanyunUserDepartmentNameDO chuanyunUserDepartmentNameDO = chuanyunUserDepartmentNameDao.findByUserName(chuanyunLogDO.getUserId());
- if (chuanyunUserDepartmentNameDO!=null){
- chuanyunLogDO.setDepartmentName(chuanyunUserDepartmentNameDO.getDepartmentName());
- }
- }else {
- ChuanyunUserCompanyDO chuanyunUserCompanyDO = chuanyunUserCompanyDao.findByUserId(chuanyunLogDO.getUserObject().getObjectId());
- if (chuanyunUserCompanyDO!=null){
- chuanyunLogDO.setDepartmentName(getDepartmentName(chuanyunUserCompanyDO.getDepartment()));
- }
- }
- try{
- if(!ChuanYunConstant.PRODUCTION_PROJECT.equals(chuanyunDayLog.getProjectType())&& StringUtils.isEmpty(chuanyunDayLog.getProjectId())){
- log.info(chuanyunLogDO+"");
- }else if(!ChuanYunConstant.PRODUCTION_PROJECT.equals(chuanyunDayLog.getProjectType())){
- ChuanyunGroupProjectDO chuanyunGroupProjectDO=chuanyunGroupProjectDao.findById(chuanyunDayLog.getProjectId()).orElseThrow();
- chuanyunDayLog.setProjectCode(chuanyunGroupProjectDO.getProjectCode());
- }
- }catch (Exception e){
- e.printStackTrace();
- log.warn(chuanyunDayLog+"");
- }
- });
- }
- //处理项目userId
- if(chuanyunLogDO.getUserObject()!=null){
- chuanyunLogDO.setUserId(chuanyunLogDO.getUserObject().getObjectId());
- }
- }
- private String getCharacters(String str){
- String reg = "[^\u4e00-\u9fa5]";
- str = str.replaceAll(reg, " ");
- return str.trim();
- }
- private String getDepartmentName(String str){
- if (str.contains("/")){
- String[] department = str.split("/");
- return department[department.length-1];
- }else {
- return str;
- }
- }
- }
|