Files
mgm-daylight-mcrm-api-mobile/src/main/java/com/mgm/mcrm/notification/services/NotificationService.java
T
2026-09-28 10:28:04 +08:00

135 lines
5.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.mgm.mcrm.notification.services;
import com.alibaba.fastjson.JSON;
import com.mgm.mcrm.approval.repositories.ApprovalRoutingDao;
import com.mgm.mcrm.authorization.models.SysRouterPermission;
import com.mgm.mcrm.authorization.services.SysGroupPermissionService;
import com.mgm.mcrm.basesetting.daylight.dtos.response.ProfileDetailResponse;
import com.mgm.mcrm.basesetting.property.models.CfgProperties;
import com.mgm.mcrm.common.dtos.BaseApiResponse;
import com.mgm.mcrm.common.dtos.HttpResult;
import com.mgm.mcrm.common.httpclient.HttpHeaderBuilder;
import com.mgm.mcrm.common.services.HttpService;
import com.mgm.mcrm.common.utils.LogUtil;
import com.mgm.mcrm.logging.models.SysLogDeviceToken;
import com.mgm.mcrm.logging.repositories.SysLogDeviceTokenDao;
import com.mgm.mcrm.notification.dtos.request.SendNotificationRequest;
import com.mgm.mcrm.notification.dtos.response.ChangeNotificationStatusResponse;
import com.mgm.mcrm.notification.dtos.response.CountNotificationByUserIdResponse;
import com.mgm.mcrm.notification.dtos.response.GetNotificationResponse;
import com.mgm.mcrm.notification.models.SysLogNotification;
import com.mgm.mcrm.notification.repositories.SysLogNotificationRepository;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.hc.core5.http.Header;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.*;
@Slf4j
@Service
public class NotificationService {
@Resource
private SysLogNotificationRepository sysLogNotificationRepository;
@Resource
private SysGroupPermissionService sysGroupPermissionService;
@Resource
private HttpService httpService;
@Autowired
private ApprovalRoutingDao approvalRoutingDao;
public GetNotificationResponse getNotificationByUserId(String userId){
GetNotificationResponse response = new GetNotificationResponse();
response.setNotifications(sysLogNotificationRepository.findByUserIdAndStatus(userId, 0));
response.setSuccess(!response.getNotifications().isEmpty());
return response;
}
public CountNotificationByUserIdResponse countNotificationByUserId (String userId,String groupName){
CountNotificationByUserIdResponse response = new CountNotificationByUserIdResponse();
List<SysRouterPermission> userPermissions = new ArrayList<SysRouterPermission>();
boolean viewNotification = false;
boolean viewApprovalRouting = false;
Long count = 0L;
userPermissions = sysGroupPermissionService.getRouterPermissionsByGroupName(groupName);
if(userPermissions.size()>0) {
for(SysRouterPermission per:userPermissions) {
if(StringUtils.equals(per.getId(), "10001_05") ) viewApprovalRouting = true;
if(StringUtils.equals(per.getId(), "10001_06") ) viewNotification = true;
}
}
if (viewNotification) {
response.setNotificationCount(sysLogNotificationRepository.countByUserIdAndStatus(userId, 0));
count+=sysLogNotificationRepository.countByUserIdAndStatus(userId, 0);
}
if (viewApprovalRouting) {
response.setApprovalRoutingCount(approvalRoutingDao.countApprovalList(userId));
count+=approvalRoutingDao.countApprovalList(userId);
}
response.setCount(count);
return response;
}
public ChangeNotificationStatusResponse changeStatus(Long id) {
ChangeNotificationStatusResponse response = new ChangeNotificationStatusResponse();
if (id == null) {
response.setSuccess(false);
response.setCode("400");
response.setMessage("id is required");
return response;
}
Optional<SysLogNotification> optional = sysLogNotificationRepository.findById(id);
if (optional.isEmpty()) {
response.setSuccess(false);
response.setCode("404");
response.setMessage("Notification not found");
return response;
}
LogUtil.info(NotificationService.class,"Notification status changed,Id = "+id);
SysLogNotification notification = optional.get();
notification.setStatus(1);
notification.setUpdatedAt(LocalDateTime.now());
SysLogNotification saved = sysLogNotificationRepository.save(notification);
response.setSuccess(true);
response.setCode("200");
response.setId(saved.getId());
response.setStatus(saved.getStatus());
return response;
}
public BaseApiResponse<String> sendNotificationByRequest(HttpServletRequest request, SendNotificationRequest requestData) {
BaseApiResponse<String> response = new BaseApiResponse<>();
try {
String url = "/send_notification";
// 获取对应的值
Header[] headers = HttpHeaderBuilder.custom()
.contentType("application/json")
.build();
HttpResult responseData = httpService.sslSendNotification(url, headers, requestData);
response.setSuccess(responseData.getStatusCode()==200);
response.setCode(String.valueOf(responseData.getStatusCode()));
} catch (Exception e) {
log.info("invoke api gateway send notification request failed, ERROR MSG:{}",e.getMessage());
}
return response;
}
public BaseApiResponse<Integer> readAllNotifications(String userId) {
BaseApiResponse<Integer> response = new BaseApiResponse<>();
int updated = sysLogNotificationRepository.markAllAsReadByUserId(userId, LocalDateTime.now());
response.setSuccess(true);
response.setCode("200");
response.setData(updated);
return response;
}
}