From 7ef593e1e3c35aaeecf9318f0b3941230d3ed002 Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期三, 09 十月 2024 11:22:54 +0800
Subject: [PATCH] 增加在数据点计算规则后数据点名称加_n的适配

---
 collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java |  179 ++++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 116 insertions(+), 63 deletions(-)

diff --git a/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java b/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java
index 82748cd..1dfb57a 100644
--- a/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java
+++ b/collect/src/main/java/com/qianwen/mdc/collect/cache/WorkstationCache.java
@@ -2,8 +2,10 @@
 
 import java.time.Duration;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
 
@@ -14,18 +16,15 @@
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 //import com.qianwen.core.redis.cache.BladeRedis;
-
+import com.qianwen.mdc.collect.dto.WorkstationDTO;
+import com.qianwen.mdc.collect.entity.mgr.EmployeeOnOffWork;
 import com.qianwen.mdc.collect.entity.mgr.GlobalWcsOfRps;
+import com.qianwen.mdc.collect.entity.mgr.Workstation;
+import com.qianwen.mdc.collect.mapper.mgr.EmployeeOnOffWorkMapper;
 import com.qianwen.mdc.collect.mapper.mgr.GlobalWcsOfRpsMapper;
+import com.qianwen.mdc.collect.service.WorkstationService;
 import com.qianwen.mdc.collect.utils.redis.RedisUtil;
-//import com.qianwen.posting.convert.WorkstationConvert;
-//import com.qianwen.posting.dto.WorkStationDTO;
-//import com.qianwen.posting.entity.mysql.EmployeeOnOffWork;
-
-//import com.qianwen.posting.entity.mysql.Workstation;
-//import com.qianwen.posting.mapper.mysql.EmployeeOnOffWorkMapper;
-
-//import com.qianwen.posting.service.IWorkstationService;
+import cn.hutool.core.util.ObjectUtil;
 
 @Component
 public class WorkstationCache {
@@ -37,53 +36,94 @@
     @Autowired
     private RedisUtil redisUtil;
     private static final Logger log = LoggerFactory.getLogger(WorkstationCache.class);
-    //private static final BladeRedis bladeRedis = (BladeRedis) SpringUtil.getBean(BladeRedis.class);
-    //private static final IWorkstationService workStationService = (IWorkstationService) SpringUtil.getBean(IWorkstationService.class);
+    
     @Autowired
     private GlobalWcsOfRpsMapper globalWcsOfRpsMapper;
-    //private static final EmployeeOnOffWorkMapper employeeOnOffWorkMapper = (EmployeeOnOffWorkMapper) SpringUtil.getBean(EmployeeOnOffWorkMapper.class);
-
-    /*
-
-    public static Map<String, WorkStationDTO> getWorkStations() {
+    @Autowired
+    private WorkstationService workstationService;
+    @Autowired
+    private EmployeeOnOffWorkMapper employeeOnOffWorkMapper;
+    
+    
+    public Map<Long, WorkstationDTO> getWorkstations() {
         String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ALL);
-        Map<String, WorkStationDTO> map = bladeRedis.hGetAll(redisKey);
+        /*Map<String, WorkstationDTO> map = bladeRedis.hGetAll(redisKey);
+       
+        
         if (Func.isEmpty(map)) {
             map = setWorkStations();
         }
         return map;
-    }
-
-    private static Map<String, WorkStationDTO> setWorkStations() {
-        List<Workstation> list = workStationService.list();
-        String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ALL);
-        if (Func.isNotEmpty(list)) {
-            list.forEach(workStation -> {
-                WorkStationDTO workStationDTO = WorkstationConvert.INSTANCE.convertDTO(workStation);
-                bladeRedis.hSet(redisKey, workStation.getId(), workStationDTO);
-            });
-            bladeRedis.expire(redisKey, 259200L);
+        */
+        Map<Long, WorkstationDTO> map = convertMap(redisUtil.hmget(redisKey));
+       
+        if (ObjectUtil.isEmpty(map)) {
+            map = setWorkstations();
         }
-        return bladeRedis.hGetAll(redisKey);
-    }
 
+        return map;
+        
+    }
+    
+    private Map<Long, WorkstationDTO> setWorkstations() {
+        List<Workstation> list = workstationService.list();
+        String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ALL);
+       
+        list.forEach(ws -> {
+        	/*
+            WorkStationDTO workStationDTO = WorkstationConvert.INSTANCE.convertDTO(workStation);
+            bladeRedis.hSet(redisKey, workStation.getId(), workStationDTO);
+            */
+        	WorkstationDTO dto = new WorkstationDTO();
+        	dto.setCalendarCode(ws.getCalendarCode());
+        	dto.setCode(ws.getCode());
+        	dto.setId(ws.getId());
+        	dto.setName(ws.getName());
+            redisUtil.hset(redisKey, ws.getId(), dto);
+        });
+       
+        //bladeRedis.expire(redisKey, 259200L);
+        redisUtil.expire(redisKey, 259200L);
+        //return bladeRedis.hGetAll(redisKey);
+        
+        return convertMap(redisUtil.hmget(redisKey));
+    }
+    
+    static <K,V> Map<K,V> convertMap(Map<?,?> map){
+    	Map<K,V> result = new HashMap<>();
+    	for(Map.Entry<?,?> entry : map.entrySet()) {
+    		result.put((K)entry.getKey(), (V)entry.getValue());
+    	}
+    	return result;
+    }
+    /*
     public static Boolean clearWorkStationCache() {
         String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ALL);
         return bladeRedis.del(redisKey);
     }
-    
-    public static String getWorkstationCalendarCodeForDate(Long workstationId, String date) {
+    */
+    /**
+     * 鑾峰彇鎸囧畾鏃ユ湡鐨勬棩鍘嗕唬鐮�
+     * @param workstationId
+     * @param date
+     * @return
+     */
+    public String getWorkstationCalendarCodeForDate(Long workstationId, String date) {
         String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ID).concat(workstationId.toString().concat(CALENDAR_DATE)).concat(date);
-        String calendarCode = (String) bladeRedis.get(redisKey);
-        if (Func.isEmpty(calendarCode)) {
-            log.warn("鑾峰彇宸ヤ綅{}鎸囧畾鏃ユ湡{}鏃ュ巻缂撳瓨涓嶅瓨鍦�", workstationId, date);
-            Optional.ofNullable(workStationService.getById(workstationId)).ifPresent(workStation -> {
-                bladeRedis.setEx(redisKey, workStation.getCalendarCode(), 259200L);
+        //String calendarCode = (String) bladeRedis.get(redisKey);
+        String calendarCode = (String) redisUtil.get(redisKey);
+        if (ObjectUtil.isEmpty(calendarCode)) {
+            log.warn("鑾峰彇宸ヤ綅{}鎸囧畾鏃ユ湡{}鏃ュ巻缂撳瓨涓嶅瓨鍦�,浠庢暟鎹簱鍐呰幏鍙栧苟鐢熸垚缂撳瓨", workstationId, date);
+            Optional.ofNullable(workstationService.getById(workstationId)).ifPresent(workStation -> {
+                //bladeRedis.setEx(redisKey, workStation.getCalendarCode(), 259200L);
+                redisUtil.set(redisKey, workStation.getCalendarCode(), 259200L);
             });
         }
-        return (String) bladeRedis.get(redisKey);
+        
+        //return (String) bladeRedis.get(redisKey);
+        return calendarCode;
     }
-	*/
+	
     public GlobalWcsOfRps getWorkstationWcsSetting(Long workstationId, String code) {
         String redisKey = "posting:workstation".concat("::").concat(WORKSTATION_ID).concat(workstationId.toString()
             .concat(WCS_SETTING));
@@ -107,28 +147,41 @@
         return wcsSetting;
       }
 
-    /*
-    public static Long getBelongToEmployeeForWorkstation(Long workstationId, Date timePoint) {
-        Long employeeId = null;
-        String redisKey = "posting:workstation".concat("::").concat("workstation:id:").concat(workstationId.toString()
-            .concat(EMPLOYEE));
-        Set<EmployeeOnOffWork> employeeOnOffWorks = bladeRedis.sMembers(redisKey);
-        EmployeeOnOffWork matchRecord = null;
-        if (Func.isNotEmpty(employeeOnOffWorks))
-          matchRecord = employeeOnOffWorks.stream().filter(item -> (item.getOnlineTime().getTime() <= timePoint.getTime() && (item.getOfflineTime() == null || item.getOfflineTime().getTime() > timePoint.getTime()))).findFirst().orElse(null); 
-        if (Func.isNotEmpty(matchRecord)) {
-          employeeId = matchRecord.getOnEmployeeId();
-        } else {
-          List<EmployeeOnOffWork> queryResult = employeeOnOffWorkMapper.selectList(Wrappers.<EmployeeOnOffWork>lambdaQuery()
-              .eq(EmployeeOnOffWork::getWorkstationId, workstationId)
-              .le(EmployeeOnOffWork::getOnlineTime, timePoint)
-              .and(wrapper -> wrapper.gt(EmployeeOnOffWork::getOfflineTime, timePoint).or().isNull(EmployeeOnOffWork::getOfflineTime)));
-          if (Func.isNotEmpty(queryResult)) {
-            employeeId = ((EmployeeOnOffWork)queryResult.get(0)).getOnEmployeeId();
-            bladeRedis.sAdd(redisKey, new Object[] { queryResult.get(0) });
-            bladeRedis.expire(redisKey, 259200L);
-          } 
-        } 
-        return employeeId;
-      }*/
+    /**
+     * 鑾峰彇宸ヤ綅鍦ㄦ寚瀹氭椂闂寸殑涓婄彮鍛樺伐
+     * @param workstationId
+     * @param timePoint
+     * @return
+     */
+	public Long getBelongToEmployeeForWorkstation(Long workstationId, Date timePoint) {
+		Long employeeId = null;
+		String redisKey = "posting:workstation".concat("::").concat("workstation:id:")
+				.concat(workstationId.toString().concat(EMPLOYEE));
+		// Set<EmployeeOnOffWork> employeeOnOffWorks = bladeRedis.sMembers(redisKey);
+
+		Set<EmployeeOnOffWork> employeeOnOffWorks = (Set<EmployeeOnOffWork>) redisUtil.sGet(redisKey);
+		EmployeeOnOffWork matchEmployee = null;
+		if (ObjectUtil.isNotEmpty(employeeOnOffWorks)) {
+			matchEmployee = employeeOnOffWorks.stream().filter(
+					item -> (item.getOnlineTime().getTime() <= timePoint.getTime() && (item.getOfflineTime() == null
+							|| item.getOfflineTime().getTime() > timePoint.getTime())))
+					.findFirst().orElse(null);
+		}
+		if (ObjectUtil.isNotEmpty(matchEmployee)) {
+			employeeId = matchEmployee.getOnEmployeeId();
+		} else {
+			List<EmployeeOnOffWork> queryResult = employeeOnOffWorkMapper.selectList(
+					Wrappers.<EmployeeOnOffWork>lambdaQuery().eq(EmployeeOnOffWork::getWorkstationId, workstationId)
+							.le(EmployeeOnOffWork::getOnlineTime, timePoint)
+							.and(wrapper -> wrapper.gt(EmployeeOnOffWork::getOfflineTime, timePoint).or()
+									.isNull(EmployeeOnOffWork::getOfflineTime)));
+			if (ObjectUtil.isNotEmpty(queryResult)) {
+				employeeId = ((EmployeeOnOffWork) queryResult.get(0)).getOnEmployeeId();
+				//bladeRedis.sAdd(redisKey, new Object[] { queryResult.get(0) });
+				//bladeRedis.expire(redisKey, 259200L);
+				redisUtil.sSetAndTime(redisKey, 259200L,  new Object[] { queryResult.get(0) });
+			}
+		}
+		return employeeId;
+	}
 }

--
Gitblit v1.9.3