ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java
@@ -1,8 +1,30 @@ package com.ruoyi.web.controller.api; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.dto.AddLeaveDTO; import com.ruoyi.system.dto.SetApprovalDTO; import com.ruoyi.system.model.OaApprovalApplications; import com.ruoyi.system.model.OaApprovalFlowNode; import com.ruoyi.system.service.*; import com.ruoyi.system.utils.ApprovalTypeEnum; import com.ruoyi.system.utils.UUIDUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.Date; /** * <p> @@ -13,8 +35,43 @@ * @since 2025-09-15 */ @RestController @Api("审批-发起审批") @RequestMapping("/oa-approval-applications") public class OaApprovalApplicationsController { @Resource private OaApprovalService approvalService; @Resource private TokenService tokenService; @Resource private OaApprovalApplicationsService approvalApplicationsService; @Resource private ISysUserService sysUserService; @Resource private OaApprovalApplicationAttendanceService approvalApplicationAttendanceService; @Resource private TDeptService deptService; @Log(title = "审批-发起请假", businessType = BusinessType.INSERT) @ApiOperation(value = "发起请假") @PostMapping(value = "/setApproval") public R setDept(@RequestBody AddLeaveDTO dto) { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String code = "qj"+sdf.format(new Date()) + UUIDUtil.getNumberRandom(5); OaApprovalApplications oaApprovalApplications = new OaApprovalApplications(); oaApprovalApplications.setApplicationCode(code); oaApprovalApplications.setApprovalId(ApprovalTypeEnum.LEAVE_APPLICATION.getId()); oaApprovalApplications.setApplicantUserId(tokenService.getLoginUser().getUserId().intValue()); SysUser sysUser = sysUserService.selectUserById(tokenService.getLoginUser().getUserId()); TDept dept = deptService.getById(sysUser.getDeptId()); oaApprovalApplications.setApplicantName(sysUser.getNickName()); oaApprovalApplications.setDeptId(Integer.valueOf(sysUser.getDeptId())); oaApprovalApplications.setDeptName(dept.getDeptName()); oaApprovalApplications.setApplicationDate(LocalDate.now()); oaApprovalApplications.setApplicationReason(dto.getApplicationReason()); oaApprovalApplications.setApprovalStatus(1); oaApprovalApplications.setAttachmentUrl(dto.getAttachmentUrl()); // oaApprovalApplications.setCurrentFlowNodeId(); approvalApplicationsService.save(oaApprovalApplications); return R.ok(); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java
@@ -1,8 +1,10 @@ package com.ruoyi.web.controller.api; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.dto.SetApprovalDTO; import com.ruoyi.system.dto.SetDeptDTO; import com.ruoyi.system.model.OaApproval; @@ -35,11 +37,11 @@ private OaApprovalFlowNodeService oaApprovalFlowNodeService; /** * 获取部门树列表 * 审批流程设计列表 */ @ApiOperation("审批流程设计列表") @PostMapping("/pageList") public R<List<OaApprovalFlowNode>> pageList(@RequestBody ApprovalListQuery query) { @PostMapping("list") public R<List<OaApprovalFlowNode>> list(@RequestBody ApprovalListQuery query) { return R.ok( oaApprovalFlowNodeService.pageList(query)); } @ApiOperation(value = "启用禁用") @@ -58,6 +60,8 @@ oaApprovalFlowNodeService.updateById(approval); return R.ok(); } @Log(title = "审批流程-设置审批人", businessType = BusinessType.UPDATE) @ApiOperation(value = "设置审批人") @PostMapping(value = "/setApproval") public R setDept(@RequestBody SetApprovalDTO dto) { ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java
@@ -1,8 +1,35 @@ package com.ruoyi.web.controller.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.dto.SetDeptDTO; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaNotifationUser; import com.ruoyi.system.model.OaNotification; import com.ruoyi.system.query.ApprovalListQuery; import com.ruoyi.system.query.NotificationListQuery; import com.ruoyi.system.service.*; import com.ruoyi.system.vo.system.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.BeanUtils; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.sql.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -13,8 +40,133 @@ * @since 2025-09-15 */ @RestController @Api("消息通知") @RequestMapping("/oa-notification") public class OaNotificationController { @Resource private OaNotificationService oaNotificationService; @Resource private OaNotifationUserService oaNotifationUserService; @Resource private TDeptService deptService; @Resource private ISysUserService sysUserService; /** * 获取部门树列表 */ @ApiOperation("消息通知分页列表") @PostMapping("/pageList") public R<PageInfo<NotificationVO>> pageList(@RequestBody NotificationListQuery query) { return R.ok(oaNotificationService.pageList(query)); } @ApiOperation(value = "删除消息通知") @Log(title = "删除消息通知", businessType = BusinessType.DELETE) @DeleteMapping(value = "/delete") public R delete(@RequestParam String ids) { List<String> notificationIds = Arrays.asList(ids.split(",")); // 删除后 将已发送的消息通知一并删除 oaNotificationService.removeBatchByIds(notificationIds); oaNotifationUserService.remove(new LambdaQueryWrapper<OaNotifationUser>() .in(OaNotifationUser::getNotificationId,notificationIds)); return R.ok(); } @Log(title = "消息通知-新增消息", businessType = BusinessType.INSERT) @ApiOperation(value = "新增消息") @PostMapping(value = "/add") public R<Boolean> add( @RequestBody OaNotification dto) { oaNotificationService.save(dto); ArrayList<OaNotifationUser> oaNotifationUsers = new ArrayList<>(); // 发送消息通知 if (dto.getType()){ // 指定人员发送 Arrays.asList(dto.getUserIds().split(",")) .forEach(userId -> { OaNotifationUser oaNotifationUser = new OaNotifationUser(); oaNotifationUser.setUserId(Integer.parseInt(userId)); oaNotifationUser.setNotificationId(dto.getId()); oaNotifationUsers.add(oaNotifationUser); }); }else{ // 所有人发送 List<SysUser> sysUsers = sysUserService.selectAllList(); sysUsers.forEach(sysUser -> { OaNotifationUser oaNotifationUser = new OaNotifationUser(); oaNotifationUser.setUserId(sysUser.getUserId().intValue()); oaNotifationUser.setNotificationId(dto.getId()); oaNotifationUsers.add(oaNotifationUser); }); } oaNotifationUserService.saveBatch(oaNotifationUsers); return R.ok(); } @ApiOperation(value = "消息通知详情") @GetMapping(value = "/detail") public R<NotificationDetailVO> detail(String id) { NotificationDetailVO notificationDetailVO = new NotificationDetailVO(); OaNotification oaNotification = oaNotificationService.getById(id); BeanUtils.copyProperties(oaNotification, notificationDetailVO); StringBuilder deptName = new StringBuilder(); List<TDept> tDepts = deptService.list(); List<SysUser> sysUsers = sysUserService.selectAllList(); List<OaNotifationUser> notifationUsers = oaNotifationUserService.lambdaQuery().eq(OaNotifationUser::getNotificationId, id) .list(); Map<Integer, String> deptMap = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); Map<Long, SysUser> userMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getUserId, e->e)); if (oaNotification.getType()){ for (String deptId : oaNotification.getDeptIds().split(",")) { String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), ""); deptName.append(orDefault).append(","); } notificationDetailVO.setDeptName(deptName.substring(0,deptName.length()-1)); List<NotificationDeptUserDetailVO> notificationUserVOS = new ArrayList<>(); List<Long> userIds = notifationUsers.stream().map(e -> e.getUserId().longValue()).collect(Collectors.toList()); if (!userIds.isEmpty()){ Map<String, List<SysUser>> deptUserList = sysUsers.stream().filter(e -> userIds.contains(e.getUserId())) .collect(Collectors.groupingBy(SysUser::getDeptId)); // 遍历这个map for (Map.Entry<String, List<SysUser>> entry : deptUserList.entrySet()) { List<SysUser> users = entry.getValue(); String deptId = entry.getKey(); NotificationDeptUserDetailVO notificationDeptUserDetailVO = new NotificationDeptUserDetailVO(); notificationDeptUserDetailVO.setDeptName(deptMap.getOrDefault(Integer.parseInt(deptId), "")); notificationDeptUserDetailVO.setUsers(users); // 查询部门下的员工数是否和users一致 long count = sysUsers.stream().filter(e -> e.getDeptId().equals(deptId)).count(); if (count==users.size()){ notificationDeptUserDetailVO.setIsAll(true); }else{ notificationDeptUserDetailVO.setIsAll(false); } notificationUserVOS.add(notificationDeptUserDetailVO); } } notificationDetailVO.setNotificationDeptUserDetailVOList(notificationUserVOS); }else{ notificationDetailVO.setDeptName("全部人员"); } List<NotificationUserDetailVO> notificationUserDetailVOS = new ArrayList<>(); for (OaNotifationUser notifationUser : notifationUsers) { NotificationUserDetailVO notificationUserDetailVO = new NotificationUserDetailVO(); BeanUtils.copyProperties(notifationUser, notificationUserDetailVO); SysUser sysUser = userMap.get(notifationUser.getUserId().longValue()); if (sysUser==null){ continue; } notificationUserDetailVO.setDeptName(deptMap.getOrDefault(Integer.parseInt(sysUser.getDeptId()), "")); notificationUserDetailVO.setNickName(sysUser.getNickName()); notificationUserDetailVO.setPhonenumber(sysUser.getPhonenumber()); notificationUserDetailVO.setPosition(sysUser.getPosition()); notificationUserDetailVOS.add(notificationUserDetailVO); } notificationDetailVO.setNotificationUserDetailVOS(notificationUserDetailVOS); return R.ok(); } } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java
New file @@ -0,0 +1,28 @@ package com.ruoyi.system.dto; import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; @Data @ApiModel(value = "发起请假申请记录DTO") public class AddLeaveDTO implements Serializable { @ApiModelProperty(value = "开始请假/外出/出差/销假时间") private LocalDateTime startTime; @ApiModelProperty(value = "结束请假/外出/出差/销假时间") private LocalDateTime endTime; @ApiModelProperty(value = "请假/外出/出差/销假时长(天)") private Double duration; @ApiModelProperty(value = "事由/原因/说明") private String applicationReason; @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") private String attachmentUrl; } ruoyi-system/src/main/java/com/ruoyi/system/dto/AddNotificationDTO.java
New file @@ -0,0 +1,15 @@ package com.ruoyi.system.dto; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.system.model.OaNotification; import io.swagger.annotations.ApiModel; import lombok.Data; @Data @ApiModel(value = "新增编辑消息通知DTO") public class AddNotificationDTO extends OaNotification { } ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java
@@ -1,7 +1,13 @@ package com.ruoyi.system.mapper; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaNotification; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.system.query.NotificationListQuery; import com.ruoyi.system.vo.system.NotificationVO; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> @@ -13,4 +19,6 @@ */ public interface OaNotificationMapper extends BaseMapper<OaNotification> { List<NotificationVO> pageList(@Param("query")NotificationListQuery query, @Param("pageInfo")PageInfo<NotificationVO> pageInfo); } ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java
@@ -36,7 +36,7 @@ @TableField("approval_name") private String approvalName; @ApiModelProperty(value = "审批类型 1-请假申请,2-外出申请,3-出差申请,4-销假申请,5-采购申请,6-资产入库,7-物品领用,8-借用归还,9-资产处置,10-资产表更,11-报销申请,12-款项申请,13-进度款支付,14-内部联系单,15-广告制作申请") @ApiModelProperty(value = "审批类型 1-请假申请,2-外出申请,3-出差申请,4-销假申请,5-采购申请,6-资产入库,7-物品领用,8-物品借用,9-借用归还,10-资产处置,11-资产表更,12-报销申请,13-款项申请,14-合同文件,15-进度款支付,16-内部联系单,17-广告制作申请") @TableField("approval_category") private Boolean approvalCategory; ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java
@@ -67,7 +67,7 @@ @ApiModelProperty(value = "审批状态 0-草稿,1-待审批,2-审批通过,3-审批拒绝 ,4-已撤回") @TableField("approval_status") private Boolean approvalStatus; private Integer approvalStatus; @ApiModelProperty(value = "附件地址,多个使用英文逗号拼接") @TableField("attachment_url") ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java
@@ -64,5 +64,10 @@ @TableField("disabled") private Boolean disabled; @ApiModelProperty(value = "通知部门ids 逗号拼接") @TableField("dept_ids") private String deptIds; @ApiModelProperty(value = "指定人员ids 逗号拼接") @TableField(exist = false) private String userIds; } ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java
New file @@ -0,0 +1,20 @@ package com.ruoyi.system.query; import com.ruoyi.common.core.domain.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "消息通知分页列表query") public class NotificationListQuery extends BasePage { @ApiModelProperty(value = "标题") private String title; @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "部门ids 前端忽略") private List<Integer> deptIds; } ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java
@@ -1,7 +1,10 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.system.model.OaNotification; import com.ruoyi.system.query.NotificationListQuery; import com.ruoyi.system.vo.system.NotificationVO; /** * <p> @@ -13,4 +16,6 @@ */ public interface OaNotificationService extends IService<OaNotification> { PageInfo<NotificationVO> pageList(NotificationListQuery query); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java
@@ -1,10 +1,22 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.core.domain.entity.TDept; import com.ruoyi.system.mapper.OaNotificationMapper; import com.ruoyi.system.mapper.TDeptMapper; import com.ruoyi.system.model.OaNotification; import com.ruoyi.system.query.NotificationListQuery; import com.ruoyi.system.service.OaNotificationService; import com.ruoyi.system.vo.system.NotificationVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * <p> @@ -17,4 +29,37 @@ @Service public class OaNotificationServiceImpl extends ServiceImpl<OaNotificationMapper, OaNotification> implements OaNotificationService { @Autowired private TDeptMapper deptMapper; @Override public PageInfo<NotificationVO> pageList(NotificationListQuery query) { List<TDept> tDepts = deptMapper.selectList(null); Map<Integer, String> deptMap = tDepts.stream().collect(Collectors.toMap(TDept::getId, TDept::getDeptName)); if (StringUtils.hasLength(query.getDeptName())){ List<Integer> deptIds = deptMapper.selectList(new LambdaQueryWrapper<TDept>().like(TDept::getDeptName, query.getDeptName())) .stream().map(TDept::getId).collect(Collectors.toList()); if (deptIds.isEmpty()){ return new PageInfo<>(); } query.setDeptIds(deptIds); } PageInfo<NotificationVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List<NotificationVO> list = this.baseMapper.pageList(query,pageInfo); for (NotificationVO notificationVO : list) { StringBuilder deptName = new StringBuilder(); if (notificationVO.getType()){ for (String deptId : notificationVO.getDeptIds().split(",")) { String orDefault = deptMap.getOrDefault(Integer.parseInt(deptId), ""); deptName.append(orDefault).append(","); } notificationVO.setDeptName(deptName.substring(0,deptName.length()-1)); }else{ notificationVO.setDeptName("全部人员"); } } pageInfo.setRecords(list); return null; } } ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java
New file @@ -0,0 +1,175 @@ package com.ruoyi.system.utils; /** * 审批类型枚举 * * @author YourName * @since 2025-09-17 */ public enum ApprovalTypeEnum { /** * 请假申请 */ LEAVE_APPLICATION(1, "请假申请"), /** * 外出申请 */ OUT_APPLICATION(2, "外出申请"), /** * 出差申请 */ BUSINESS_TRIP_APPLICATION(3, "出差申请"), /** * 销假申请 */ LEAVE_CANCELLATION_APPLICATION(4, "销假申请"), /** * 采购申请 */ PURCHASE_APPLICATION(5, "采购申请"), /** * 资产入库 */ ASSET_STORAGE(6, "资产入库"), /** * 物品领用 */ ITEM_RECEIVE(7, "物品领用"), /** * 物品借用 */ ITEM_BORROW(8, "物品借用"), /** * 借用归还 */ BORROW_RETURN(9, "借用归还"), /** * 资产处置 */ ASSET_DISPOSAL(10, "资产处置"), /** * 资产变更 */ ASSET_CHANGE(11, "资产变更"), /** * 报销申请 */ REIMBURSEMENT_APPLICATION(12, "报销申请"), /** * 款项申请 */ PAYMENT_APPLICATION(13, "款项申请"), /** * 合同文件 */ CONTRACT_DOCUMENT(14, "合同文件"), /** * 进度款支付 */ PROGRESS_PAYMENT(15, "进度款支付"), /** * 内部联系单 */ INTERNAL_CONTACT_FORM(16, "内部联系单"), /** * 广告制作申请 */ ADVERTISEMENT_APPLICATION(17, "广告制作申请"); private final Integer id; private final String name; /** * 构造方法 * * @param id 审批类型ID * @param name 审批类型名称 */ ApprovalTypeEnum(Integer id, String name) { this.id = id; this.name = name; } /** * 获取审批类型ID * * @return 审批类型ID */ public Integer getId() { return id; } /** * 获取审批类型名称 * * @return 审批类型名称 */ public String getName() { return name; } /** * 根据ID获取审批类型枚举 * * @param id 审批类型ID * @return 对应的审批类型枚举,如果未找到返回null */ public static ApprovalTypeEnum getById(Integer id) { if (id == null) { return null; } for (ApprovalTypeEnum type : values()) { if (type.id.equals(id)) { return type; } } return null; } /** * 根据名称获取审批类型枚举 * * @param name 审批类型名称 * @return 对应的审批类型枚举,如果未找到返回null */ public static ApprovalTypeEnum getByName(String name) { if (name == null || name.isEmpty()) { return null; } for (ApprovalTypeEnum type : values()) { if (type.name.equals(name)) { return type; } } return null; } /** * 判断给定ID是否为有效的审批类型 * * @param id 审批类型ID * @return 是否有效 */ public static boolean isValidId(Integer id) { return getById(id) != null; } } ruoyi-system/src/main/java/com/ruoyi/system/utils/UUIDUtil.java
New file @@ -0,0 +1,103 @@ package com.ruoyi.system.utils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; /** * 定义生成随机码的工具类 */ public class UUIDUtil { private int i = 1; /** * 定义生成原生的UUID随机码 * * @return */ public static String getNativeUUID() { return UUID.randomUUID().toString(); } /** * 生成32位随机码 * * @return */ public static String getRandomCode() { return UUIDUtil.getNativeUUID().replaceAll("-", ""); } /** * 获取给定长度的随机码 * * @param num * @return * @throws Exception */ public static String getRandomCode(Integer num) throws Exception { String str = null; if (0 < num) { if (num % 32 > 0) { Integer s = num / 32; Integer l = num % 32; StringBuffer sb = new StringBuffer(); for (int i = 0; i < s; i++) { sb.append(UUIDUtil.getRandomCode()); } sb.append(UUIDUtil.getRandomCode().substring(0, l)); str = sb.toString(); } else if (num % 32 == 0) { Integer s = num / 32; StringBuffer sb = new StringBuffer(); for (int i = 0; i < s; i++) { sb.append(UUIDUtil.getRandomCode()); } str = sb.toString(); } else { str = UUIDUtil.getRandomCode().substring(0, num); } } else { throw new Exception("参数只能大于0"); } return str; } /** * 获取根据当前时间的字符串数据 * * @return */ public synchronized static String getTimeStr() { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmssS"); return simpleDateFormat.format(new Date()); } /** * @Description: 获取数字随机码 * @Author pzb * @Date 2021/8/11 16:52 * @Param * @Return * @Exception */ public static String getNumberRandom(Integer num) { if (null == num) { num = 32; } StringBuffer sb = new StringBuffer(); for (int i = 0; i < num; i++) { sb.append(Double.valueOf(Math.random() * 10).intValue()); } return sb.toString(); } } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDeptUserDetailVO.java
New file @@ -0,0 +1,23 @@ package com.ruoyi.system.vo.system; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.system.model.OaNotifationUser; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "通知对象返回VO") public class NotificationDeptUserDetailVO { @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "人员列表") private List<SysUser> users; @ApiModelProperty(value = "是否全部 ") private Boolean isAll; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDetailVO.java
New file @@ -0,0 +1,25 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.OaNotification; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "消息通知分页返回VO") public class NotificationDetailVO extends OaNotification { @ApiModelProperty(value = "通知部门") private String deptName; @ApiModelProperty(value = "通知对象列表") private List<NotificationUserDetailVO> notificationUserDetailVOS; @ApiModelProperty(value = "部门-人员列表") private List<NotificationDeptUserDetailVO> notificationDeptUserDetailVOList; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserDetailVO.java
New file @@ -0,0 +1,22 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.OaNotifationUser; import com.ruoyi.system.model.OaNotification; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "通知对象返回VO") public class NotificationUserDetailVO extends OaNotifationUser { @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "姓名") private String nickName; @ApiModelProperty(value = "电话") private String phonenumber; @ApiModelProperty(value = "职位") private String position; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserVO.java
New file @@ -0,0 +1,21 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.OaNotifationUser; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "部门-用户列表返回VO") public class NotificationUserVO { @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "姓名") private String nickName; @ApiModelProperty(value = "部门名称") private String deptName; @ApiModelProperty(value = "部门id") private Integer deptId; } ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java
New file @@ -0,0 +1,16 @@ package com.ruoyi.system.vo.system; import com.ruoyi.system.model.OaApproval; import com.ruoyi.system.model.OaNotification; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "消息通知分页返回VO") public class NotificationVO extends OaNotification { @ApiModelProperty(value = "通知部门") private String deptName; } ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml
@@ -19,5 +19,21 @@ <sql id="Base_Column_List"> id, title, content, type, create_time, create_by, update_time, update_by, disabled </sql> <select id="pageList" resultType="com.ruoyi.system.vo.system.NotificationVO"> select * from oa_notification where 1=1 <if test="query.title != null and query.title != ''"> and title like concat('%',#{query.title},'%') </if> <if test="deptIds != null and deptIds.size() > 0"> AND ( <foreach collection="deptIds" item="deptId" separator=" OR "> FIND_IN_SET(#{deptId}, dept_ids) </foreach> ) </if> AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} order by create_time desc </select> </mapper>