日志: 我收的到页面分页接口, 规则创建、更新接口

This commit is contained in:
furongxin 2024-04-15 10:38:47 +08:00
parent a7776f5f8e
commit 9096be7cf3
22 changed files with 393 additions and 94 deletions

View File

@ -5,7 +5,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.*;
import cn.iocoder.yudao.module.system.convert.worklog.LogFormConvert;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogRuleDO;
import cn.iocoder.yudao.module.system.service.worklog.LogFormService;
import cn.iocoder.yudao.module.system.service.worklog.LogRuleService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -28,6 +30,9 @@ public class LogFormController {
@Resource
private LogFormService formService;
@Resource
private LogRuleService logRuleService;
@PostMapping("/create")
@Operation(summary = "创建动态模板")
@PreAuthorize("@ss.hasPermission('worklog:form:create')")
@ -57,8 +62,20 @@ public class LogFormController {
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('worklog:form:query')")
public CommonResult<LogFormRespVO> getForm(@RequestParam("id") Long id) {
LogFormDO form = formService.getForm(id);
return success(LogFormConvert.INSTANCE.convert(form));
LogFormRespVO logFormRespVO = LogFormConvert.INSTANCE.convert(form);
if (form != null) {
//获取规则信息
LogRuleDO logRuleDO = logRuleService.getLogRule(form.getRuleId());
//设置日志类型
logFormRespVO.setType(logRuleDO.getType());
}
return success(logFormRespVO);
}
@GetMapping("/list-all-simple")
@ -77,7 +94,7 @@ public class LogFormController {
}
@GetMapping("/page-by-rule")
@Operation(summary = "获得配置规则后的模板分页")
@Operation(summary = "获得我可以使用的模板分页")
@PreAuthorize("@ss.hasPermission('worklog:form:query')")
public CommonResult<PageResult<LogFormRespVO>> getFormPageByRule(@Valid LogFormPageReqVO pageVO) {

View File

@ -6,11 +6,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserRespVO;
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.dal.dataobject.worklog.LogInstanceDO;
import cn.iocoder.yudao.module.system.convert.worklog.LogInstanceConvert;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService;
import cn.iocoder.yudao.module.system.service.worklog.LogReadService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@ -23,10 +26,14 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 日志实例")
@RestController
@ -37,6 +44,12 @@ public class LogInstanceController {
@Resource
private LogInstanceService logInstanceService;
@Resource
private LogReadService logReadService;
@Resource
private AdminUserService userService;
@PostMapping("/create")
@Operation(summary = "创建日志实例")
@PreAuthorize("@ss.hasPermission('system:log-instance:create')")
@ -63,11 +76,15 @@ public class LogInstanceController {
@GetMapping("/get")
@Operation(summary = "获得日志实例")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('system:log-instance:query')")
@Parameter(name = "id", description = "编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('system:view-log:query')")
public CommonResult<LogInstanceRespVO> getLogInstance(@RequestParam("id") Long id) {
LogInstanceDO logInstance = logInstanceService.getLogInstance(id);
return success(BeanUtils.toBean(logInstance, LogInstanceRespVO.class));
//查看日志详情时变更当前用户日志的阅读状态
logReadService.updateReadStatus(id, getLoginUserId());
LogInstanceRespVO logInstance = logInstanceService.getLogInstance(id);
return success(logInstance);
}
@GetMapping("/page")
@ -75,7 +92,16 @@ public class LogInstanceController {
@PreAuthorize("@ss.hasPermission('system:view-log:query')")
public CommonResult<IPage<LogInstanceRespVO>> getLogInstancePage(@ModelAttribute LogInstancePageReqVO pageReqVO) {
IPage<LogInstanceRespVO> pageResult = logInstanceService.getLogInstancePage(pageReqVO);
IPage<LogInstanceRespVO> pageResult = logInstanceService.getLogInstancePage(pageReqVO, 0);
return success(pageResult);
}
@GetMapping("/my-page")
@Operation(summary = "获得我的日志分页列表")
@PreAuthorize("@ss.hasPermission('system:view-log:query')")
public CommonResult<IPage<LogInstanceRespVO>> getMyLogInstancePage(@ModelAttribute LogInstancePageReqVO pageReqVO) {
IPage<LogInstanceRespVO> pageResult = logInstanceService.getLogInstancePage(pageReqVO, 1);
return success(pageResult);
}
@ -90,11 +116,42 @@ public class LogInstanceController {
@GetMapping("/get-upLog")
@Operation(summary = "获取上一篇日志,用于导入上一篇日志")
@Parameter(name = "type", description = "日志类型", required = true, example = "1")
@Parameter(name = "formId", description = "日志模板编号", required = true, example = "1")
@PreAuthorize("@ss.hasPermission('system:view-log:query')")
public CommonResult<LogInstanceRespVO> getUpLog(@RequestParam("type") Integer type) {
public CommonResult<LogInstanceRespVO> getUpLog(@RequestParam("formId") Long formId) {
return success(BeanUtils.toBean(logInstanceService.getUpLog(type), LogInstanceRespVO.class));
LogInstanceRespVO logInstanceRespVO = LogInstanceConvert.INSTANCE.convert(logInstanceService.getUpLog(formId, null));
logInstanceRespVO = logInstanceService.setContentFun(logInstanceRespVO);
return success(logInstanceRespVO);
}
@PostMapping("/getByLogId")
@Operation(summary = "获得可查看日志的用户详情")
@Parameter(name = "logId", description = "日志编号", required = true, example = "10")
@PreAuthorize("@ss.hasPermission('system:view-log:query')")
public CommonResult<List<Map<String, Object>>> getUserByLogId(@RequestParam("logId") Long logId) {
List<Map<String, Object>> readUserVO = new ArrayList<>();
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);
Map<String, Object> unReadMap = new HashMap<>();
Map<String, Object> readMap = new HashMap<>();
unReadMap.put("readStatus", 0);
unReadMap.put("value", unReadUserInfo);
readMap.put("readStatus", 1);
readMap.put("value", readUserInfo);
readUserVO.add(unReadMap);
readUserVO.add(readMap);
return success(readUserVO);
}
@GetMapping("/export-excel")
@ -104,7 +161,7 @@ public class LogInstanceController {
public void exportLogInstanceExcel(@Valid LogInstancePageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<LogInstanceRespVO> list = logInstanceService.getLogInstancePage(pageReqVO).getRecords();
List<LogInstanceRespVO> list = logInstanceService.getLogInstancePage(pageReqVO,null).getRecords();
// 导出 Excel
ExcelUtils.write(response, "日志实例的拓展.xls", "数据", LogInstanceRespVO.class,
BeanUtils.toBean(list, LogInstanceRespVO.class));

View File

@ -17,6 +17,9 @@ public class LogFormRespVO extends LogFormBaseVO {
@Schema(description = "表单编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
private Long id;
@Schema(description = "日志类型", example = "1")
private Integer type;
@Schema(description = "表单的配置-JSON 字符串", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "表单的配置不能为空")
private String conf;

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -9,7 +8,6 @@ import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@ -41,16 +39,12 @@ public class LogInstancePageReqVO extends PageParam {
private Long formId;
@Schema(description = "模板值")
private Map<String, Object> formVariables;
private String formVariables;
@Schema(description = "创建时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "未读", example = "0")
private Integer unRead;
@Schema(description = "分页类型 0是我收到1是我的", example = "0")
private Integer pagingType;
}

View File

@ -1,8 +1,15 @@
package cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.List;
import java.util.Map;
@Schema(description = "管理后台 - 日志实例的拓展 Response VO")
@Data
@ -10,6 +17,7 @@ import lombok.Data;
public class LogInstanceRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20649")
@JsonSerialize(using = ToStringSerializer.class)
private Long id;
@Schema(description = "日志发起人的用户编号", example = "146")
@ -36,13 +44,21 @@ public class LogInstanceRespVO {
@Schema(description = "模板值")
private String formVariables;
@Schema(description = "工作日志内容(部分)")
@Schema(description = "工作日志内容(部分) | 分页列表使用")
private String workLogContent;
@Schema(description = "工作日志内容详情")
private List<Map<String, String>> logDetail;
@Schema(description = "附件信息")
private String fileItems ;
@Schema(description = "日志日期")
private String time;
@Schema(description = "创建时间")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private String createTime;
@Schema(description = "阅读状态, 0:未读、1:已读", example = "0")

View File

@ -35,4 +35,6 @@ public class LogInstanceSaveReqVO {
@Schema(description = "附件信息")
private List<UploadUserFile> fileItems ;
@Schema(description = "日志详情,日期的值 | yyyy-MM-dd", example = "2024-04-14")
private String time;
}

View File

@ -1,12 +1,15 @@
package cn.iocoder.yudao.module.system.convert.worklog;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
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.dal.dataobject.worklog.LogInstanceDO;
import com.alibaba.fastjson.JSONObject;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.time.format.DateTimeFormatter;
/**
* 日志详情 Convert
*
@ -19,8 +22,14 @@ public interface LogInstanceConvert {
LogInstanceDO convert(LogInstanceSaveReqVO bean);
default LogInstanceRespVO convert(LogInstanceDO logInstanceDO) {
LogInstanceRespVO convert(LogInstanceDO bean);
LogInstanceRespVO logInstanceRespVO = BeanUtils.toBean(logInstanceDO, LogInstanceRespVO.class);
PageResult<LogInstanceRespVO> convertPage(PageResult<LogInstanceDO> page);
logInstanceRespVO.setFormVariables(JSONObject.toJSONString(logInstanceDO.getFormVariables()));
logInstanceRespVO.setFileItems(JSONObject.toJSONString(logInstanceDO.getFileItems()));
logInstanceRespVO.setCreateTime(logInstanceDO.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
return logInstanceRespVO;
}
}

View File

@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.system.dal.mysql.worklog;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.form.LogFormPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.statistics.WorkLogStatisticsModelVO;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO;
import org.apache.ibatis.annotations.Mapper;
@ -19,10 +19,9 @@ public interface LogFormMapper extends BaseMapperX<LogFormDO> {
.orderByDesc("id"));
}
default PageResult<LogFormDO> selectPageByRule(LogFormPageReqVO reqVO) {
return selectPage(reqVO, new QueryWrapperX<LogFormDO>()
.likeIfPresent("name", reqVO.getName())
.isNotNull("rule_id")
.orderByDesc("id"));
default PageResult<LogFormDO> selectPageByRule(LogFormPageReqVO reqVO, List<Long> formIds) {
return selectPage(reqVO, new LambdaQueryWrapperX<LogFormDO>()
.in(LogFormDO::getId, formIds)
.orderByDesc(LogFormDO::getId));
}
}

View File

@ -22,15 +22,20 @@ import java.util.List;
public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {
default List<LogInstanceDO> getUpLog(Long userId, Integer type){
default List<LogInstanceDO> getUpLog(Long userId, Long formId, Integer type){
return selectList(new LambdaQueryWrapperX<LogInstanceDO>()
.eq(LogInstanceDO::getStartUserId, userId)
.eq(LogInstanceDO::getType, type)
.eqIfPresent(LogInstanceDO::getFormId, formId)
.eqIfPresent(LogInstanceDO::getType, type)
.orderByDesc(LogInstanceDO::getCreateTime));
}
IPage<LogInstanceRespVO> selectPageResult(@Param("page")Page<LogInstanceRespVO> page, @Param("reqVO")LogInstancePageReqVO reqVO, @Param("userId")Long userId);
IPage<LogInstanceRespVO> selectPageResult(@Param("page")Page<LogInstanceRespVO> page, @Param("reqVO")LogInstancePageReqVO reqVO,
@Param("userId")Long userId, @Param("pagingType") Integer pagingType, @Param("logId")Long logId);
LogInstanceRespVO selectPageResult(@Param("reqVO")LogInstancePageReqVO reqVO, @Param("userId")Long userId,
@Param("pagingType") Integer pagingType, @Param("logId")Long logId);
List<LogReadUserRespDTO> selectRaedUser(Long deptId);
}

View File

@ -1,9 +1,12 @@
package cn.iocoder.yudao.module.system.dal.mysql.worklog;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogReadDo;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 日志查看 Mapper
*
@ -11,4 +14,19 @@ import org.apache.ibatis.annotations.Mapper;
*/
@Mapper
public interface LogReadMapper extends BaseMapperX<LogReadDo> {
default List<LogReadDo> selectUserByLogId(Long logId, Integer readStatus) {
return selectList(new LambdaQueryWrapperX<LogReadDo>()
.eq(LogReadDo::getLogInstanceId, logId)
.eq(LogReadDo::getReadStatus, readStatus));
}
default void updateReadStatus(Long logId, Long userId){
update(new LogReadDo().setReadStatus(1),
new LambdaQueryWrapperX<LogReadDo>()
.eq(LogReadDo::getLogInstanceId, logId)
.eq(LogReadDo::getReadUserId, userId));
}
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.system.dal.mysql.worklog;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogUseDO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.ibatis.annotations.Mapper;
@ -29,5 +30,12 @@ public interface LogUseMapper extends BaseMapperX<LogUseDO> {
.in(LogUseDO::getUseUserId, userIds));
}
default Long getCountByUser(Long formId, Long userId){
return selectCount(new LambdaQueryWrapperX<LogUseDO>()
.eq(LogUseDO::getUseUserId, userId)
.eq(LogUseDO::getFormId, formId));
}
List<Long> getDeptByFormId(Long formId);
}

View File

@ -25,6 +25,7 @@ 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;
@ -74,6 +75,9 @@ public class AdminUserServiceImpl implements AdminUserService {
@Resource
private UserPostMapper userPostMapper;
@Resource
private LogInstanceService logInstanceService;
@Resource
private FileApi fileApi;

View File

@ -18,6 +18,7 @@ import javax.annotation.Resource;
import java.util.*;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
/**
* 动态表单 Service 实现类
@ -31,6 +32,9 @@ public class LogFormServiceImpl implements LogFormService{
@Resource
private LogFormMapper formMapper;
@Resource
private LogUseService logUseService;
@Override
public Long createForm(LogFormCreateReqVO createReqVO) {
this.checkFields(createReqVO.getFields());
@ -87,7 +91,13 @@ public class LogFormServiceImpl implements LogFormService{
@Override
public PageResult<LogFormDO> getFormPageByRule(LogFormPageReqVO pageReqVO) {
return formMapper.selectPageByRule(pageReqVO);
List<Long> formIds = logUseService.getFormIdByUserId(getLoginUserId());
if (formIds.isEmpty()) {
return null;
}
return formMapper.selectPageByRule(pageReqVO, formIds);
}
/**

View File

@ -45,7 +45,7 @@ public interface LogInstanceService {
* @param id 编号
* @return 日志实例的拓展
*/
LogInstanceDO getLogInstance(Long id);
LogInstanceRespVO getLogInstance(Long id);
/**
* 获得日志实例分页
@ -53,7 +53,7 @@ public interface LogInstanceService {
* @param pageReqVO 分页查询
* @return 日志实例的拓展分页
*/
IPage<LogInstanceRespVO> getLogInstancePage(LogInstancePageReqVO pageReqVO);
IPage<LogInstanceRespVO> getLogInstancePage(LogInstancePageReqVO pageReqVO, Integer pagingType);
/**
* 获得我收到的日志页面中的部门列表
@ -63,5 +63,7 @@ public interface LogInstanceService {
/**
* 获取上一篇日志
*/
LogInstanceDO getUpLog(Integer type);
LogInstanceDO getUpLog(Long formId, Integer type);
LogInstanceRespVO setContentFun(LogInstanceRespVO logInstanceRespVO);
}

View File

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.system.service.worklog;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONObject;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptRespVO;
@ -25,18 +24,15 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.WeekFields;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOG_INSTANCE_NOT_EXISTS;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOG_RULE_NOT_FIND;
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
/**
* 日志实例的拓展 Service 实现类
@ -54,11 +50,14 @@ public class LogInstanceServiceImpl implements LogInstanceService {
private DeptService deptService;
@Resource
private LogRuleService logRuleService;
private LogUseService logUseService;
@Resource
private LogFormService logFormService;
@Resource
private LogRuleService logRuleService;
@Resource
private AdminUserService adminUserService;
@ -75,13 +74,16 @@ public class LogInstanceServiceImpl implements LogInstanceService {
//获取日志类型
LogFormDO logFormDo = logFormService.getForm(createReqVO.getFormId());
LogRuleDO logRuleDO = logRuleService.getLogRule(logFormDo.getRuleId());
if (logRuleDO == null) {
throw exception(LOG_RULE_NOT_FIND);
Long count = logUseService.getCountByUser(logFormDo.getId(), getLoginUserId());
if (count == 0L) {
throw exception(LOG_FORM_NOT_USE);
}
//获取部门信息
AdminUserDO adminUserDO = adminUserService.getUser(getLoginUserId());
//获取规则信息
LogRuleDO logRuleDO = logRuleService.getLogRule(logFormDo.getRuleId());
//设置发起人用户编号
logInstance.setStartUserId(getLoginUserId());
@ -95,8 +97,8 @@ public class LogInstanceServiceImpl implements LogInstanceService {
logInstance.setType(logRuleDO.getType());
//设置日志名称
logInstance.setName(adminUserDO.getNickname() + "" + logFormDo.getName());
//设置时间
logInstance.setTime(DateUtil.format(new Date(),"yyyy-MM-dd"));
//设置日志日期
logInstance.setTime(createReqVO.getTime());
// 插入
logInstanceMapper.insert(logInstance);
@ -112,51 +114,55 @@ public class LogInstanceServiceImpl implements LogInstanceService {
return logInstance.getId();
}
/**
* 校验当前日志类型的日志 是否已提交过
*/
private void validateLogInstanceByType(LogInstanceSaveReqVO createReqVO) {
LogInstanceDO logInstanceDO = getUpLog(createReqVO.getType());
if (logInstanceDO != null) {
LogInstanceDO logInstanceDO = getUpLog(null, createReqVO.getType());
if (logInstanceDO == null) {
return;
}
LocalDate oldTime = logInstanceDO.getCreateTime().toLocalDate();
LocalDate nowTime = LocalDate.now();
LocalDate oldTime = LocalDate.parse(logInstanceDO.getTime());
LocalDate nowTime = LocalDate.now();
//根据日志类型判断
switch (createReqVO.getType()){
//根据日志类型判断
switch (createReqVO.getType()){
//日志类型为日报
case 1:
if (oldTime.equals(nowTime)) {
//日志类型为日报
case 1:
if (oldTime.equals(nowTime)) {
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType());
}
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "日报");
}
//日志类型为周报
case 2:
WeekFields weekFields = WeekFields.of(Locale.getDefault());
case 2:
WeekFields weekFields = WeekFields.of(Locale.getDefault());
// 获取两个日期所属的周数和年份
int oldWeek = oldTime.get(weekFields.weekOfWeekBasedYear());
int oldYear = oldTime.get(weekFields.weekBasedYear());
// 获取两个日期所属的周数和年份
int oldWeek = oldTime.get(weekFields.weekOfWeekBasedYear());
int oldYear = oldTime.get(weekFields.weekBasedYear());
int nowWeek = nowTime.get(weekFields.weekOfWeekBasedYear());
int nowYear = nowTime.get(weekFields.weekBasedYear());
int nowWeek = nowTime.get(weekFields.weekOfWeekBasedYear());
int nowYear = nowTime.get(weekFields.weekBasedYear());
if (oldWeek == nowWeek && oldYear == nowYear) {
if (oldWeek == nowWeek && oldYear == nowYear) {
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType());
}
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "周报");
}
//日志类型为月报
case 3:
if (oldTime.getYear() == nowTime.getYear() && oldTime.getMonth() == nowTime.getMonth()) {
case 3:
if (oldTime.getYear() == nowTime.getYear() && oldTime.getMonth() == nowTime.getMonth()) {
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType());
}
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "月报");
}
//日志类型为年报
case 4:
if (oldTime.getYear() == nowTime.getYear()) {
case 4:
if (oldTime.getYear() == nowTime.getYear()) {
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, createReqVO.getType());
}
}
throw exception(ErrorCodeConstants.LOG_TYPE_EXISTS, "年报");
}
}
}
@ -164,6 +170,25 @@ public class LogInstanceServiceImpl implements LogInstanceService {
public void updateLogInstance(LogInstanceSaveReqVO updateReqVO) {
// 校验存在
validateLogInstanceExists(updateReqVO.getId());
//校验要修改的日志是否是当天发送的
LogInstanceDO logInstanceDO = logInstanceMapper.selectById(updateReqVO.getId());
if (!logInstanceDO.getCreateTime().toLocalDate().equals(LocalDate.now())) {
throw exception(LOG_NOT_DATE);
}
LogRuleDO logRuleDO = logRuleService.getLogRuleByFormId(updateReqVO.getFormId());
String endTime = logRuleDO.getEndTime();
if (logRuleDO.getType() != 1) {
endTime = endTime.split(",")[1];
}
if (LocalTime.now().isBefore(LocalTime.parse(endTime))) {
throw exception(LOG_NOT_UPDATE);
}
// 更新
LogInstanceDO updateObj = BeanUtils.toBean(updateReqVO, LogInstanceDO.class);
logInstanceMapper.updateById(updateObj);
@ -184,15 +209,20 @@ public class LogInstanceServiceImpl implements LogInstanceService {
}
@Override
public LogInstanceDO getLogInstance(Long id) {
return logInstanceMapper.selectById(id);
public LogInstanceRespVO getLogInstance(Long id) {
//获取日志详情
LogInstanceRespVO logInstanceRespVO = logInstanceMapper.selectPageResult(new LogInstancePageReqVO(), getLoginUserId(), null, id);
//设置日志详情 模板内容和时间
return setContentFun(logInstanceRespVO);
}
@Override
public IPage<LogInstanceRespVO> getLogInstancePage(LogInstancePageReqVO pageReqVO) {
public IPage<LogInstanceRespVO> getLogInstancePage(LogInstancePageReqVO pageReqVO, Integer pagingType) {
Page<LogInstanceRespVO> page = new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize());
IPage<LogInstanceRespVO> pageList = logInstanceMapper.selectPageResult(page, pageReqVO, getLoginUserId());
IPage<LogInstanceRespVO> pageList = logInstanceMapper.selectPageResult(page, pageReqVO, getLoginUserId(), pagingType, null);
List<LogInstanceRespVO> records = pageList.getRecords();
if (!records.isEmpty()) {
@ -228,11 +258,11 @@ public class LogInstanceServiceImpl implements LogInstanceService {
LocalDateTime createTime = LocalDateTime.parse(item.getCreateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//日志创建时间是当前日期时
if (createTime.toLocalDate().equals(nowDate)) {
item.setCreateTime("今日 " + createTime.getHour() + ":" + createTime.getMinute());
item.setCreateTime("今日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm")));
}
//日志创建时间是当前日期前一天时
if (createTime.toLocalDate().equals(nowDate.minusDays(1))) {
item.setCreateTime("昨日 " + createTime.getHour() + ":" + createTime.getMinute());
item.setCreateTime("昨日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm")));
}
});
}
@ -253,14 +283,56 @@ public class LogInstanceServiceImpl implements LogInstanceService {
}
@Override
public LogInstanceDO getUpLog(Integer type) {
public LogInstanceDO getUpLog(Long formId, Integer type) {
LogInstanceDO logInstanceDO = new LogInstanceDO();
List<LogInstanceDO> logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), type);
List<LogInstanceDO> logInstanceDOS = logInstanceMapper.getUpLog(getLoginUserId(), formId, type);
if (!logInstanceDOS.isEmpty()) {
logInstanceDO = logInstanceDOS.get(0);
return logInstanceDOS.get(0);
}
return logInstanceDO;
return null;
}
@Override
public LogInstanceRespVO setContentFun(LogInstanceRespVO logInstanceRespVO) {
if (logInstanceRespVO.getFormId() == null) {
return logInstanceRespVO;
}
//获取模板信息
LogFormDO logFormDO = logFormService.getForm(logInstanceRespVO.getFormId());
List<String> fields = logFormDO.getFields();
List<Map<String, String>> logDetail = new ArrayList<>();
if (!logInstanceRespVO.getFormVariables().isEmpty()) {
JSONObject workLogContentJson = new JSONObject(logInstanceRespVO.getFormVariables());
for (String fieldItem : fields) {
Map<String, String> detail = new HashMap<>();
JSONObject fieldJson = new JSONObject(fieldItem);
String fieldStr = fieldJson.getStr("field");
String title = fieldJson.getStr("title");
String field = workLogContentJson.getStr(fieldStr);
detail.put("title", title);
detail.put("value", field);
logDetail.add(detail);
}
logInstanceRespVO.setLogDetail(logDetail);
}
//设置时间
LocalDate nowDate = LocalDate.now();
LocalDateTime createTime = LocalDateTime.parse(logInstanceRespVO.getCreateTime(), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//日志创建时间是当前日期时
if (createTime.toLocalDate().equals(nowDate)) {
logInstanceRespVO.setCreateTime("今日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm")));
}
//日志创建时间是当前日期前一天时
if (createTime.toLocalDate().equals(nowDate.minusDays(1))) {
logInstanceRespVO.setCreateTime("昨日 " + createTime.toLocalTime().format(DateTimeFormatter.ofPattern("HH:mm")));
}
return logInstanceRespVO;
}
}

View File

@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;
/**
* 日志查看 Service 接口
@ -19,4 +20,18 @@ public interface LogReadService {
* @param createReqVO 创建信息
*/
void createLogRule(@Valid List<LogReadUserRespDTO> createReqVO, Long logInstanceId, Long startUserId);
/**
* 获取日志可查看的用户编号组
* @param logId 日志编号
* @return 阅读状态用户编号组
*/
Map<Integer, List<Long>> getUserId(Long logId);
/**
* 更新日志阅读状态
* @param logId 日志编号
* @param userId 查看者用户编号
*/
void updateReadStatus(Long logId, Long userId);
}

View File

@ -7,9 +7,13 @@ import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
/**
* 日志查看 Service 实现类
*
@ -39,4 +43,24 @@ public class LogReadServiceImpl implements LogReadService{
logReadMapper.insertBatch(userInfoList);
}
@Override
public Map<Integer, List<Long>> getUserId(Long logId) {
Map<Integer, List<Long>> readDoMap = new HashMap<>();
List<LogReadDo> UnReadDos = logReadMapper.selectUserByLogId(logId, 0);
List<LogReadDo> readDos = logReadMapper.selectUserByLogId(logId, 1);
readDoMap.put(0, convertList(UnReadDos, LogReadDo::getReadUserId));
readDoMap.put(1, convertList(readDos, LogReadDo::getReadUserId));
return readDoMap;
}
@Override
public void updateReadStatus(Long logId, Long userId) {
logReadMapper.updateReadStatus(logId, userId);
}
}

View File

@ -45,6 +45,14 @@ public interface LogRuleService {
*/
LogRuleDO getLogRule(Long id);
/**
* 获得日志规则
*
* @param formId 模板编号
* @return 日志规则
*/
LogRuleDO getLogRuleByFormId(Long formId);
/**
* 获得日志规则分页
*

View File

@ -106,6 +106,11 @@ public class LogRuleServiceImpl implements LogRuleService {
return logRuleMapper.selectById(id);
}
@Override
public LogRuleDO getLogRuleByFormId(Long formId) {
return logRuleMapper.selectOne(LogRuleDO::getFormId, formId);
}
@Override
public PageResult<LogRuleDO> getLogRulePage(LogRulePageReqVO pageReqVO) {
return logRuleMapper.selectPage(pageReqVO);

View File

@ -41,4 +41,19 @@ public interface LogUseService {
* @return 日志模板使用者的部门编号组
*/
List<Long> getUserByFormId(Long formId);
/**
* 根据使用者编号和模板编号查询模板数量
* @param formId 模板编号
* @param userId 用户编号
* @return 数量
*/
Long getCountByUser(Long formId, Long userId);
/**
* 获取我可以使用的模板编号组
* @param userId 用户编号
* @return 日志模板编号组
*/
List<Long> getFormIdByUserId(Long userId);
}

View File

@ -74,4 +74,17 @@ public class LogUseServiceImpl implements LogUseService {
List<LogUseDO> logUseDOS = logUseMapper.selectList(LogUseDO::getFormId, formId);
return convertList(logUseDOS, LogUseDO::getUseUserId);
}
@Override
public Long getCountByUser(Long formId, Long userId) {
return logUseMapper.getCountByUser(formId, userId);
}
@Override
public List<Long> getFormIdByUserId(Long userId) {
List<LogUseDO> logUseDOS = logUseMapper.selectList(LogUseDO::getUseUserId, userId);
return convertList(logUseDOS, LogUseDO::getFormId);
}
}

View File

@ -92,12 +92,15 @@
COUNT(d.log_instance_id) AS unreadCount
FROM
work_log_instance_ext as a
LEFT JOIN work_log_comment as b ON a.start_user_id = b.user_id
LEFT JOIN work_log_comment as b ON a.id = b.work_log_id
LEFT JOIN work_log_read as e ON a.id = e.log_instance_id and e.read_user_id = #{userId}
LEFT JOIN work_log_read as c ON a.id = c.log_instance_id and c.read_status = 1
LEFT JOIN work_log_read as d ON a.id = d.log_instance_id and d.read_status = 0
where
1=1
<if test="logId != null">
and a.id = #{logId}
</if>
<if test="reqVO.type != null">
and a.type = #{reqVO.type}
</if>
@ -116,10 +119,10 @@
<if test="reqVO.unRead != null">
and e.read_status = 0
</if>
<if test="reqVO.pagingType == 0">
<if test="pagingType == 0">
and a.start_user_id != #{userId}
</if>
<if test="reqVO.pagingType == 1">
<if test="pagingType == 1">
and a.start_user_id = #{userId}
</if>
GROUP BY a.id,e.read_status