解决依赖循环 - 提交日志新增修改日志统计 -
This commit is contained in:
parent
f268cb4373
commit
b1207b4bbe
@ -48,7 +48,7 @@ public class LogInstanceController {
|
||||
private LogReadService logReadService;
|
||||
|
||||
@Resource
|
||||
private AdminUserService userService;
|
||||
private AdminUserService adminUserService;
|
||||
|
||||
@PostMapping("/create")
|
||||
@Operation(summary = "创建日志实例")
|
||||
@ -136,8 +136,8 @@ public class LogInstanceController {
|
||||
|
||||
Map<Integer, List<Long>> usrMap = logReadService.getUserId(logId);
|
||||
|
||||
List<UserRespVO> unReadUserInfo = BeanUtils.toBean(userService.getUserList(usrMap.get(0)), UserRespVO.class);
|
||||
List<UserRespVO> readUserInfo = BeanUtils.toBean(userService.getUserList(usrMap.get(1)), UserRespVO.class);
|
||||
List<UserRespVO> unReadUserInfo = BeanUtils.toBean(adminUserService.getUserList(usrMap.get(0)), UserRespVO.class);
|
||||
List<UserRespVO> readUserInfo = BeanUtils.toBean(adminUserService.getUserList(usrMap.get(1)), UserRespVO.class);
|
||||
|
||||
Map<String, Object> unReadMap = new HashMap<>();
|
||||
Map<String, Object> readMap = new HashMap<>();
|
||||
|
@ -41,7 +41,7 @@ public class LogStatisticsController {
|
||||
}
|
||||
|
||||
@GetMapping("/getStatistics")
|
||||
@Operation(summary = "获取我管理的模版")
|
||||
@Operation(summary = "获取日志统计")
|
||||
public CommonResult<LogStatisticsDetailsListVO> getStatistics(@ModelAttribute LogStatisticsDetailsListDTO dto) {
|
||||
return success(logStatisticsService.getStatistics(dto));
|
||||
}
|
||||
|
@ -25,7 +25,6 @@ import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||
import cn.iocoder.yudao.module.system.service.dept.PostService;
|
||||
import cn.iocoder.yudao.module.system.service.permission.PermissionService;
|
||||
import cn.iocoder.yudao.module.system.service.tenant.TenantService;
|
||||
import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -75,9 +74,6 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
@Resource
|
||||
private UserPostMapper userPostMapper;
|
||||
|
||||
@Resource
|
||||
private LogInstanceService logInstanceService;
|
||||
|
||||
@Resource
|
||||
private FileApi fileApi;
|
||||
|
||||
@ -436,7 +432,7 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
}
|
||||
UserImportRespVO respVO = UserImportRespVO.builder().createUsernames(new ArrayList<>()).updateUsernames(new ArrayList<>()).failureUsernames(new LinkedHashMap<>()).build();
|
||||
importUsers.forEach(importUser -> {
|
||||
//校验,判断是否有不符合的原因
|
||||
//校验,判断是否有不符合的原因
|
||||
try {
|
||||
if (!isUpdateSupport) {
|
||||
validateUserForCreateOrUpdate(null, null, importUser.getMobile(), importUser.getEmail(), null, null);
|
||||
@ -537,9 +533,9 @@ public class AdminUserServiceImpl implements AdminUserService {
|
||||
String idCard = updateUser.getIdcard();
|
||||
|
||||
//通过身份证号码 获得出生日期
|
||||
LocalDate date = LocalDate.parse(idCard.substring(6,14));
|
||||
LocalDate date = LocalDate.parse(idCard.substring(6, 14));
|
||||
//通过身份证号码 获得性别
|
||||
Integer sex = Integer.parseInt(idCard.substring(16,17)) % 2 == 0 ? 2 : 1;
|
||||
Integer sex = Integer.parseInt(idCard.substring(16, 17)) % 2 == 0 ? 2 : 1;
|
||||
//通过身份证号码 获得年龄
|
||||
Integer age = nowDate.getYear() - date.getYear();
|
||||
|
||||
|
@ -1,26 +1,29 @@
|
||||
package cn.iocoder.yudao.module.system.service.worklog;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.LogStatisticsSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogStatisticsDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogInstanceMapper;
|
||||
import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
|
||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||
import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
@ -32,8 +35,6 @@ import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.WeekFields;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
|
||||
@ -69,6 +70,11 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
||||
@Resource
|
||||
private LogReadService logReadService;
|
||||
|
||||
@Resource
|
||||
@Lazy
|
||||
private LogStatisticsService logStatisticsService;
|
||||
|
||||
|
||||
@Override
|
||||
public Long createLogInstance(LogInstanceSaveReqVO createReqVO) {
|
||||
|
||||
@ -76,22 +82,22 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
||||
validateLogInstanceByType(createReqVO);
|
||||
|
||||
LogInstanceDO logInstance = BeanUtils.toBean(createReqVO, LogInstanceDO.class);
|
||||
|
||||
//获取当前登录用户id
|
||||
Long userId = getLoginUserId();
|
||||
//获取日志类型
|
||||
LogFormDO logFormDo = logFormService.getForm(createReqVO.getFormId());
|
||||
|
||||
Long count = logUseService.getCountByUser(logFormDo.getId(), getLoginUserId());
|
||||
Long count = logUseService.getCountByUser(logFormDo.getId(), userId);
|
||||
if (count == 0L) {
|
||||
throw exception(LOG_FORM_NOT_USE);
|
||||
}
|
||||
|
||||
//获取部门信息
|
||||
AdminUserDO adminUserDO = adminUserService.getUser(getLoginUserId());
|
||||
AdminUserDO adminUserDO = adminUserService.getUser(userId);
|
||||
//获取规则信息
|
||||
LogRuleDO logRuleDO = logRuleService.getLogRule(logFormDo.getRuleId());
|
||||
|
||||
//设置发起人用户编号
|
||||
logInstance.setStartUserId(getLoginUserId());
|
||||
logInstance.setStartUserId(userId);
|
||||
//设置发起人部门编号
|
||||
logInstance.setDeptId(adminUserDO.getDeptId());
|
||||
//设置发起人用户名称
|
||||
@ -107,10 +113,27 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
||||
|
||||
// 插入
|
||||
logInstanceMapper.insert(logInstance);
|
||||
|
||||
// 插入到统计中
|
||||
Date endTime = null;
|
||||
// Date statisticalTime = DateUtils.buildWeekHHmmTime(logRuleDO.getStatisticalTime());
|
||||
Date thisDate = new Date();
|
||||
if (logRuleDO.getType() == 1) {
|
||||
endTime = DateUtils.buildHHmmTime(logRuleDO.getEndTime());
|
||||
} else if (logRuleDO.getType() == 2) {
|
||||
endTime = DateUtils.buildWeekHHmmTime(logRuleDO.getEndTime());
|
||||
}
|
||||
logStatisticsService.saveOrUpdate(new LogStatisticsDO()
|
||||
.setFormId(logFormDo.getId())
|
||||
.setRuleId(logRuleDO.getId())
|
||||
.setUserId(userId)
|
||||
.setDeptId(adminUserDO.getDeptId())
|
||||
.setLogInstanceExtId(logInstance.getId())
|
||||
.setType(logRuleDO.getType())
|
||||
.setTime(createReqVO.getTime())
|
||||
.setStatus(thisDate.getTime() < endTime.getTime() ? 1 : 2)
|
||||
);
|
||||
//创建日志时,查询可以查看发起人日志的用户组 用线程控制
|
||||
new Thread(() -> {
|
||||
|
||||
List<LogReadUserRespDTO> respDTOS = logInstanceMapper.selectRaedUser(adminUserDO.getDeptId());
|
||||
logReadService.createLogRule(respDTOS, logInstance.getId(), logInstance.getStartUserId());
|
||||
}).start();
|
||||
@ -133,7 +156,7 @@ public class LogInstanceServiceImpl implements LogInstanceService {
|
||||
LocalDate nowTime = LocalDate.now();
|
||||
|
||||
//根据日志类型判断
|
||||
switch (createReqVO.getType()){
|
||||
switch (createReqVO.getType()) {
|
||||
|
||||
//日志类型为日报
|
||||
case 1:
|
||||
|
@ -86,4 +86,11 @@ public interface LogStatisticsService {
|
||||
* @return
|
||||
*/
|
||||
List<LogStatisticsDetailsVO> exportLogRuleExcel(LogStatisticsDetailsListDTO dto);
|
||||
|
||||
/**
|
||||
* 新增或者修改统计表
|
||||
*
|
||||
* @param logStatisticsDO
|
||||
*/
|
||||
void saveOrUpdate(LogStatisticsDO logStatisticsDO);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.service.worklog;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@ -17,6 +18,7 @@ import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogStatisticsMapper;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.worklog.LogUseMapper;
|
||||
import cn.iocoder.yudao.module.system.service.worklog.dto.LogUseVO;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
@ -91,7 +93,18 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
|
||||
List<LogFormDO> formList = new ArrayList<>();
|
||||
Map<Long, LogRuleDO> ruleMap = new HashMap<>();
|
||||
this.getFormAndRule(formIds, formList, ruleMap);
|
||||
//查询模版
|
||||
formList = logFormMapper.selectList(new LambdaQueryWrapper<LogFormDO>()
|
||||
.in(LogFormDO::getId, formIds)
|
||||
.eq(LogFormDO::getStatus, 1)
|
||||
.isNotNull(LogFormDO::getRuleId)
|
||||
);
|
||||
List<Long> ruleIds = formList.stream().map(LogFormDO::getRuleId).collect(Collectors.toList());
|
||||
List<LogRuleDO> logRuleDOS = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(ruleIds)) {
|
||||
logRuleDOS = logRuleService.getLogRuleByIds(ruleIds);
|
||||
ruleMap = logRuleDOS.stream().collect(Collectors.toMap(LogRuleDO::getId, v -> v));
|
||||
}
|
||||
|
||||
|
||||
Date thisDate = new Date();
|
||||
@ -121,7 +134,7 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
//迟交数量
|
||||
Integer lateNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), endTime, statisticalTime)).count());
|
||||
//未提交数量
|
||||
Integer unSubmittedNum = num - onTimeNum - lateNum;
|
||||
Integer unSubmittedNum = Math.max((num - onTimeNum - lateNum), 0);
|
||||
//按天统计
|
||||
vo.setOnTimeNum(onTimeNum);
|
||||
vo.setUnSubmittedNum(unSubmittedNum);
|
||||
@ -139,7 +152,7 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
//迟交数量
|
||||
Integer lateNum = Math.toIntExact(instanceDOS.stream().filter(a -> DateUtil.isIn(Date.from(a.getCreateTime().atZone(ZoneId.systemDefault()).toInstant()), endTime, statisticalTime)).count());
|
||||
//未提交数量
|
||||
Integer unSubmittedNum = num - onTimeNum - lateNum;
|
||||
Integer unSubmittedNum = Math.max((num - onTimeNum - lateNum), 0);
|
||||
//按天统计
|
||||
vo.setOnTimeNum(onTimeNum);
|
||||
vo.setUnSubmittedNum(unSubmittedNum);
|
||||
@ -151,28 +164,6 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取模版和规则
|
||||
*
|
||||
* @param formIds
|
||||
* @param formList
|
||||
* @param ruleMap
|
||||
*/
|
||||
private void getFormAndRule(List<Long> formIds, List<LogFormDO> formList, Map<Long, LogRuleDO> ruleMap) {
|
||||
//查询模版
|
||||
formList = logFormMapper.selectList(new LambdaQueryWrapper<LogFormDO>()
|
||||
.in(LogFormDO::getId, formIds)
|
||||
.eq(LogFormDO::getStatus, 1)
|
||||
.isNotNull(LogFormDO::getRuleId)
|
||||
);
|
||||
List<Long> ruleIds = formList.stream().map(LogFormDO::getRuleId).collect(Collectors.toList());
|
||||
List<LogRuleDO> logRuleDOS = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(ruleIds)) {
|
||||
logRuleDOS = logRuleService.getLogRuleByIds(ruleIds);
|
||||
ruleMap = logRuleDOS.stream().collect(Collectors.toMap(LogRuleDO::getId, v -> v));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AdminUserDO> getUnSubmittedUser(Long formId, String thisTime) {
|
||||
return logStatisticsMapper.getUnSubmittedUser(formId, thisTime);
|
||||
@ -220,7 +211,18 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
//获取模版和规则
|
||||
List<LogFormDO> formList = new ArrayList<>();
|
||||
Map<Long, LogRuleDO> ruleMap = new HashMap<>();
|
||||
this.getFormAndRule(formIds, formList, ruleMap);
|
||||
//查询模版
|
||||
formList = logFormMapper.selectList(new LambdaQueryWrapper<LogFormDO>()
|
||||
.in(LogFormDO::getId, formIds)
|
||||
.eq(LogFormDO::getStatus, 1)
|
||||
.isNotNull(LogFormDO::getRuleId)
|
||||
);
|
||||
List<Long> ruleIds = formList.stream().map(LogFormDO::getRuleId).collect(Collectors.toList());
|
||||
List<LogRuleDO> logRuleDOS = new ArrayList<>();
|
||||
if (CollectionUtil.isNotEmpty(ruleIds)) {
|
||||
logRuleDOS = logRuleService.getLogRuleByIds(ruleIds);
|
||||
ruleMap = logRuleDOS.stream().collect(Collectors.toMap(LogRuleDO::getId, v -> v));
|
||||
}
|
||||
|
||||
Date thisDate = new Date();
|
||||
Date beginDate = null;
|
||||
@ -279,10 +281,11 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
boolean flag = false;
|
||||
Date begin = DateUtil.parse(dto.getBeginTime(), "yyyy-MM-dd").toJdkDate();
|
||||
List<LogStatisticsDetailsVO> logStatisticsDOS = new ArrayList<>();
|
||||
Date thisDate = new Date();
|
||||
if (logRuleDO.getType() == 1) {
|
||||
flag = DateUtil.isSameDay(begin, new Date());
|
||||
flag = DateUtil.isSameDay(begin, thisDate);
|
||||
} else if (logRuleDO.getType() == 2) {
|
||||
flag = DateUtil.isSameWeek(begin, new Date(), true);
|
||||
flag = DateUtil.isSameWeek(begin, thisDate, true);
|
||||
}
|
||||
List<String> dateList = DateUtils.betweenDayStrList(dto.getBeginTime(), dto.getEndTime());
|
||||
// 这里将区间转换为具体的日期 因为mysql BETWEEN 会导致索引失效
|
||||
@ -293,4 +296,24 @@ public class LogStatisticsServiceImpl implements LogStatisticsService {
|
||||
}
|
||||
return logStatisticsDOS;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveOrUpdate(LogStatisticsDO logStatisticsDO) {
|
||||
if (logStatisticsDO.getStatus() == 1) {
|
||||
logStatisticsMapper.insert(logStatisticsDO);
|
||||
return;
|
||||
}
|
||||
List<LogStatisticsDO> logStatisticsDOS = logStatisticsMapper.selectList(new LambdaQueryWrapper<LogStatisticsDO>()
|
||||
.eq(LogStatisticsDO::getUserId, logStatisticsDO.getUserId())
|
||||
.eq(LogStatisticsDO::getFormId, logStatisticsDO.getFormId())
|
||||
.eq(LogStatisticsDO::getTime, logStatisticsDO.getTime()));
|
||||
if (CollUtil.isEmpty(logStatisticsDOS)) {
|
||||
logStatisticsMapper.insert(logStatisticsDO);
|
||||
} else {
|
||||
logStatisticsMapper.update(logStatisticsDO, new LambdaUpdateWrapper<LogStatisticsDO>()
|
||||
.eq(LogStatisticsDO::getUserId, logStatisticsDO.getUserId())
|
||||
.eq(LogStatisticsDO::getFormId, logStatisticsDO.getFormId())
|
||||
.eq(LogStatisticsDO::getTime, logStatisticsDO.getTime()));
|
||||
}
|
||||
}
|
||||
}
|
@ -58,7 +58,7 @@
|
||||
|
||||
<!-- 本地环境 -->
|
||||
<springProfile name="local">
|
||||
<root level="INFO">
|
||||
<root level="DEBUG">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
<appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 -->
|
||||
<appender-ref ref="ASYNC"/> <!-- 本地环境下,如果不想打印日志,可以注释掉本行 -->
|
||||
@ -66,7 +66,7 @@
|
||||
</springProfile>
|
||||
<!-- 其它环境 -->
|
||||
<springProfile name="dev,test,stage,prod,default">
|
||||
<root level="INFO">
|
||||
<root level="DEBUG">
|
||||
<appender-ref ref="STDOUT"/>
|
||||
<appender-ref ref="ASYNC"/>
|
||||
<appender-ref ref="GRPC"/>
|
||||
|
Loading…
Reference in New Issue
Block a user