From 7e8773c06d9391c94b7a0111b63d17cf5bdb6d8e Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期三, 17 九月 2025 14:43:55 +0800 Subject: [PATCH] 发起请假审批 --- ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java | 2 ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java | 175 +++++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java | 28 ++ ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java | 5 ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java | 20 + ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDetailVO.java | 25 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java | 10 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java | 59 ++++ ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java | 2 ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml | 16 + ruoyi-system/src/main/java/com/ruoyi/system/dto/AddNotificationDTO.java | 15 + ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDeptUserDetailVO.java | 23 + ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserDetailVO.java | 22 + ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java | 16 + ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java | 156 +++++++++++ ruoyi-system/src/main/java/com/ruoyi/system/utils/UUIDUtil.java | 103 +++++++ ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserVO.java | 21 + ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java | 8 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java | 45 +++ ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java | 7 20 files changed, 749 insertions(+), 9 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java index cc9bf2d..60f51a2 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalApplicationsController.java +++ b/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(); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java index 25826b7..d3b950d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaApprovalFlowNodeController.java +++ b/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) { diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java index 4ec73e1..3f36a01 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/OaNotificationController.java +++ b/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(); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java new file mode 100644 index 0000000..d600dde --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddLeaveDTO.java @@ -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; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddNotificationDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddNotificationDTO.java new file mode 100644 index 0000000..bfdfddb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/dto/AddNotificationDTO.java @@ -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 { + + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java index b4410f2..d50c11c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/OaNotificationMapper.java +++ b/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); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java index 10fb53d..8292ad7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApproval.java +++ b/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; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java index 80c258b..8510900 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaApprovalApplications.java +++ b/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") diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java b/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java index 937d503..f5db75a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/model/OaNotification.java +++ b/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; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java b/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java new file mode 100644 index 0000000..948f083 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/query/NotificationListQuery.java @@ -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; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java index 7bf2dc8..30e62a8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/OaNotificationService.java +++ b/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); + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java index 77d6ed2..e581beb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/OaNotificationServiceImpl.java +++ b/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; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java new file mode 100644 index 0000000..c3cc586 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/ApprovalTypeEnum.java @@ -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; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/utils/UUIDUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/utils/UUIDUtil.java new file mode 100644 index 0000000..e9e3c62 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/utils/UUIDUtil.java @@ -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(); + } + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDeptUserDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDeptUserDetailVO.java new file mode 100644 index 0000000..98c28c5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDeptUserDetailVO.java @@ -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; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDetailVO.java new file mode 100644 index 0000000..1b30980 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationDetailVO.java @@ -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; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserDetailVO.java new file mode 100644 index 0000000..c280777 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserDetailVO.java @@ -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; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserVO.java new file mode 100644 index 0000000..f40d58b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationUserVO.java @@ -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; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java new file mode 100644 index 0000000..6fa1952 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/vo/system/NotificationVO.java @@ -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; + +} diff --git a/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml b/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml index 814196c..3caab6c 100644 --- a/ruoyi-system/src/main/resources/mapper/system/OaNotificationMapper.xml +++ b/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> -- Gitblit v1.7.1