浏览代码

工单申诉消息推送

ouyj 4 月之前
父节点
当前提交
07b7a679f4

+ 2 - 0
ygtx-common/src/main/java/com/ygtx/common/constant/CacheConstants.java

@@ -44,4 +44,6 @@ public class CacheConstants
 
     public static final String NOTIFY_KEY = "NOTIFY:";
     public static final String NOTIFY_STORAGE_KEY= "NOTIFY:STORAGE:USER_TASK_";
+
+    public static final String NOTIFY_STORAGE_APPEAL_KEY= "NOTIFY:STORAGE:USER_APPEAL_";
 }

+ 25 - 5
ygtx-gxt/src/main/java/com/ygtx/gxt/controller/mobile/GxtMobileNotifyController.java

@@ -48,6 +48,7 @@ public class GxtMobileNotifyController extends BaseController
                 List<OrderScoreInfo> orderScoreInfos= qxtOrderMineService.selectUnionOrderListMyTodo(repairOrder, workOrder, id);
                 boolean isSend = false;
                 boolean isSendBadge = true;
+
                 int taskNum = 0;
                 Object taskNumStr = redisCache.lGet(CacheConstants.NOTIFY_STORAGE_KEY, id);
                 taskNum = orderScoreInfos.size();
@@ -62,15 +63,34 @@ public class GxtMobileNotifyController extends BaseController
                     isSend = true;
                 }
                 redisCache.lPush(CacheConstants.NOTIFY_STORAGE_KEY,id, taskNum+"");
+                
+                // 获取申诉中的工单数量
+                int appealNum = 0;
+                boolean isAppealChanged = false;
+                Object appealNumStr = redisCache.lPop(CacheConstants.NOTIFY_STORAGE_APPEAL_KEY, id);
+                if (appealNumStr != null) {
+                    appealNum = Integer.parseInt(appealNumStr.toString());
+                }
+                if (appealNum != 0) {
+                    isAppealChanged = true;
+                }
                 GxtNotifyMessage notifyMessage = new GxtNotifyMessage();
-                if(isSend && taskNum > 0) {
+                if((isSend && taskNum > 0) || (isAppealChanged && appealNum > 0)) {
                     notifyMessage.setTitle(DateUtils.getHourTime() + "收到消息");
-                    notifyMessage.setDesc("您有" + taskNum + "个任务待处理");
+                    if (taskNum > 0 && appealNum > 0) {
+                        notifyMessage.setDesc("您有" + taskNum + "个任务待处理," + appealNum + "个申诉待处理");
+                    } else if (taskNum > 0) {
+                        notifyMessage.setDesc("您有" + taskNum + "个任务待处理");
+                    } else if (appealNum > 0) {
+                        notifyMessage.setDesc("您有" + appealNum + "个申诉待处理");
+                    }
                 }
-                if(!isSendBadge){
-                    taskNum = -1;
+                // 角标数字现在包括任务数量和申诉数量
+                int badgeNum = taskNum + appealNum;
+                if(!isSendBadge && !isAppealChanged){
+                    badgeNum = -1; // 总数未变,不更新角标
                 }
-                notifyMessage.setNum(taskNum);
+                notifyMessage.setNum(badgeNum);
                 return success(notifyMessage);
             }
         }catch (Exception ex){

+ 72 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtOrderScoreServiceImpl.java

@@ -1,13 +1,18 @@
 package com.ygtx.gxt.service.impl;
 
+import com.ygtx.common.constant.CacheConstants;
 import com.ygtx.common.constant.Constants;
 import com.ygtx.common.core.domain.entity.SysDept;
+import com.ygtx.common.core.redis.RedisCache;
 import com.ygtx.common.utils.DateUtils;
 import com.ygtx.common.utils.SecurityUtils;
 import com.ygtx.common.utils.StringUtils;
 import com.ygtx.common.utils.spring.SpringUtils;
+import com.ygtx.framework.web.service.SysPermissionService;
 import com.ygtx.gxt.domain.*;
 import com.ygtx.gxt.mapper.GxtOrderScoreMapper;
+import com.ygtx.gxt.mapper.GxtRepairOrderMapper;
+import com.ygtx.gxt.mapper.GxtWorkOrderMapper;
 import com.ygtx.gxt.service.*;
 import com.ygtx.system.mapper.SysDeptMapper;
 import com.ygtx.system.service.ISysConfigService;
@@ -23,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 工单评分Service业务层处理
@@ -69,6 +75,18 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
     @Autowired
     private SysDeptMapper sysDeptMapper;
 
+    @Autowired
+    private RedisCache redisCache;
+
+    @Autowired
+    private SysPermissionService permissionService;
+
+    @Autowired
+    private GxtRepairOrderMapper gxtRepairOrderMapper;
+
+    @Autowired
+    private GxtWorkOrderMapper gxtWorkOrderMapper;
+
     /**
      * 查询合并的工单列表(维修工单和维保工单)
      *
@@ -1674,6 +1692,9 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                 flow.setActionRemark("发起申诉:" + orderScoreInfo.getAppealReason());
                 repairOrderFlowService.insertGxtRepairOrderFlow(flow);
 
+                Long gxtCenterId = order.getGxtCenterId();
+                setRedisAppealNum(gxtCenterId);
+
                 return result;
             } else if (orderScoreInfo.getOrderType() == 2) {
                 // 维保工单申诉
@@ -1705,6 +1726,9 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
                 flow.setActionRemark("发起申诉:" + orderScoreInfo.getAppealReason());
                 gxtWorkOrderFlowService.insertGxtWorkOrderFlow(flow);
 
+                Long gxtCenterId = order.getGxtCenterId();
+                setRedisAppealNum(gxtCenterId);
+
                 return result;
             }
             return 0;
@@ -2213,4 +2237,52 @@ public class GxtOrderScoreServiceImpl implements IGxtOrderScoreService {
 
         return filteredOrders;
     }
+
+    private void setRedisAppealNum(Long deptId) {
+        SysUser sysUser = new SysUser();
+        sysUser.setDeptId(deptId);
+        List<SysUser> users = userMapper.selectUserList(sysUser);
+
+        // 过滤出属于目标部门且具有指定权限的用户
+        List<SysUser> targetUsers = users.stream()
+                .filter(user -> {
+                    // 检查用户是否具有"gxt:orderScore:finalEvaluation"权限
+                    Set<String> userPermissions = permissionService.getMenuPermission(user);
+                    return SecurityUtils.hasPermi(userPermissions, "gxt:orderScore:finalEvaluation");
+                })
+                .collect(Collectors.toList());
+
+        GxtRepairOrder gxtRepairOrder = new GxtRepairOrder();
+        gxtRepairOrder.setGxtCenterId(deptId);
+        gxtRepairOrder.setScoringStatus("appealing");
+        List<GxtRepairOrder> repairOrders = gxtRepairOrderMapper.selectGxtRepairOrderList(gxtRepairOrder);
+        // 过滤掉状态为"invalid"的工单
+        repairOrders = repairOrders.stream()
+                .filter(order -> !"invalid".equals(order.getWorkOrderStatus()))
+                .collect(Collectors.toList());
+        
+        GxtWorkOrder gxtWorkOrder = new GxtWorkOrder();
+        gxtWorkOrder.setGxtCenterId(deptId);
+        gxtWorkOrder.setScoringStatus("appealing");
+        List<GxtWorkOrder> workOrders = gxtWorkOrderMapper.selectGxtWorkOrderList(gxtWorkOrder);
+        // 过滤掉状态为"invalid"的工单
+        workOrders = workOrders.stream()
+                .filter(order -> !"invalid".equals(order.getWorkOrderStatus()))
+                .collect(Collectors.toList());
+
+        // 循环这些用户,更新他们的待申诉数量
+        for (SysUser user : targetUsers) {
+            Long userId = user.getUserId();
+            int taskNum = 0;
+            if (repairOrders != null && !repairOrders.isEmpty()) {
+                taskNum = taskNum + repairOrders.size() ;
+            }
+            if (workOrders != null && !workOrders.isEmpty()) {
+                taskNum = taskNum + workOrders.size() ;
+            }
+            if(taskNum > 0){
+                redisCache.lPush(CacheConstants.NOTIFY_STORAGE_APPEAL_KEY, userId, taskNum + "");
+            }
+        }
+    }
 }