From 0d7c3e7923c420ae6d3f8feff280bf4fcaac5ce7 Mon Sep 17 00:00:00 2001
From: buhuazhen <hua100783@gmail.com>
Date: 星期四, 28 五月 2026 11:22:06 +0800
Subject: [PATCH] feat 人员合同、设备定时保养、排班之后APP推送通知
---
src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 102 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
index b05fc92..24d221d 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffSchedulingServiceImpl.java
@@ -2,36 +2,52 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysUserMapper;
+import com.ruoyi.project.system.service.ISysNoticeService;
import com.ruoyi.staff.dto.SaveStaffSchedulingDto;
import com.ruoyi.staff.dto.StaffSchedulingDto;
import com.ruoyi.staff.mapper.StaffSchedulingMapper;
+import com.ruoyi.staff.pojo.StaffOnJob;
import com.ruoyi.staff.pojo.StaffScheduling;
+import com.ruoyi.staff.mapper.StaffOnJobMapper;
import com.ruoyi.staff.service.StaffSchedulingService;
import com.ruoyi.staff.vo.SearchSchedulingVo;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
-import javax.annotation.Resource;
+import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.time.Duration;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
/**
* @author buhuazhen
* @description 閽堝琛ㄣ�恠taff_scheduling銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
* @createDate 2025-09-03 14:50:34
*/
+@Slf4j
@Service
@RequiredArgsConstructor
public class StaffSchedulingServiceImpl extends ServiceImpl<StaffSchedulingMapper, StaffScheduling>
implements StaffSchedulingService {
private final StaffSchedulingMapper staffSchedulingMapper;
+ private final StaffOnJobMapper staffOnJobMapper;
+ private final SysUserMapper sysUserMapper;
+ private final ISysNoticeService sysNoticeService;
@Lazy
@Resource
@@ -49,6 +65,91 @@
// minutes = minutes < 0.5 ? 0 : 0.5; 鍏徃涓�鑸互0.5涓烘爣鍑嗚绠�
staffScheduling.setWorkHours(BigDecimal.valueOf(hours + minutes));
staffSchedulingService.saveOrUpdate(staffScheduling);
+
+ // 鍙戦�佹帓鐝�氱煡
+ sendSchedulingNotification(staffScheduling);
+ }
+
+ /**
+ * 鍙戦�佹帓鐝�氱煡缁欒鎺掔彮浜哄憳
+ * @param staffScheduling 鎺掔彮淇℃伅
+ */
+ private void sendSchedulingNotification(StaffScheduling staffScheduling) {
+ try {
+ if (staffScheduling.getStaffId() == null || staffScheduling.getStaffId().isEmpty()) {
+ return;
+ }
+
+ // 瑙f瀽鍛樺伐ID鍒楄〃
+ List<Long> staffIds = Arrays.stream(staffScheduling.getStaffId().split(","))
+ .map(String::trim)
+ .filter(s -> !s.isEmpty())
+ .map(Long::parseLong)
+ .collect(Collectors.toList());
+
+ if (staffIds.isEmpty()) {
+ return;
+ }
+
+ // 鏌ヨ鍛樺伐妗f
+ List<StaffOnJob> staffList = staffOnJobMapper.selectList(Wrappers.<StaffOnJob>lambdaQuery()
+ .in(StaffOnJob::getId, staffIds)
+ .eq(StaffOnJob::getStaffState, 1));
+
+ if (staffList.isEmpty()) {
+ return;
+ }
+
+ // 鑾峰彇鍛樺伐缂栧彿鍒楄〃
+ List<String> staffNos = staffList.stream()
+ .map(StaffOnJob::getStaffNo)
+ .filter(s -> s != null && !s.isEmpty())
+ .collect(Collectors.toList());
+
+ if (staffNos.isEmpty()) {
+ return;
+ }
+
+ // 鏌ヨ绯荤粺鐢ㄦ埛
+ List<SysUser> users = sysUserMapper.selectList(Wrappers.<SysUser>lambdaQuery()
+ .in(SysUser::getUserName, staffNos)
+ .eq(SysUser::getStatus, "0"));
+
+ if (users.isEmpty()) {
+ log.warn("鎺掔彮閫氱煡锛氭湭鎵惧埌瀵瑰簲鐨勭郴缁熺敤鎴�");
+ return;
+ }
+
+ // 鏍煎紡鍖栨棩鏈熸椂闂�
+ DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
+
+ String workDateStr = staffScheduling.getWorkDate() != null
+ ? new java.text.SimpleDateFormat("yyyy-MM-dd").format(staffScheduling.getWorkDate())
+ : "";
+ String startTimeStr = staffScheduling.getWorkStartTime() != null
+ ? staffScheduling.getWorkStartTime().format(timeFormatter)
+ : "";
+ String endTimeStr = staffScheduling.getWorkEndTime() != null
+ ? staffScheduling.getWorkEndTime().format(timeFormatter)
+ : "";
+
+ // 鏋勫缓閫氱煡鍐呭
+ String title = "鎺掔彮閫氱煡";
+ String message = String.format("鎮ㄥソ锛屾偍宸茶瀹夋帓鍦� %s 涓婄彮锛屽伐浣滄椂闂达細%s - %s",
+ workDateStr, startTimeStr, endTimeStr);
+
+ // 鍙戦�侀�氱煡缁欐墍鏈夎鎺掔彮浜哄憳
+ List<Long> userIds = users.stream()
+ .map(SysUser::getUserId)
+ .collect(Collectors.toList());
+
+ sysNoticeService.simpleNoticeByUser(title, message, userIds, "/scheduling");
+
+ log.info("宸插悜 {} 鍚嶅憳宸ュ彂閫佹帓鐝�氱煡", userIds.size());
+ } catch (Exception e) {
+ log.error("鍙戦�佹帓鐝�氱煡澶辫触锛歿}", e.getMessage(), e);
+ }
}
@Override
--
Gitblit v1.9.3