package com.engine.kq.biz; import com.engine.kq.log.KQLog; import weaver.cache.CacheBase; import weaver.cache.CacheColumn; import weaver.cache.CacheColumnType; import weaver.cache.CacheItem; import weaver.cache.CacheMap; import weaver.cache.PKColumn; import weaver.conn.RecordSet; import weaver.general.Util; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 班次一天内上下班次数缓存类 */ public class KQShiftOnOffWorkSectionComInfo extends CacheBase implements Serializable { /* * 需要关注 : 如果完全在 initCache 自己定义数据初始化, 这个字段可以不定义 */ protected static String TABLE_NAME = ""; /* * 需要关注 : 如果完全在 initCache 自己定义数据初始化,或者不需要指定固定的条件, 这个字段可以不定义 * sql中的where信息,不要以where开始 */ protected static String TABLE_WHERE = null; /* * 需要关注 : 如果完全在 initCache 自己定义数据初始化,或者不需要指定顺序, 这个字段可以不定义 sql中的order * by信息,不要以order by开始 * */ protected static String TABLE_ORDER = null; @PKColumn(type = CacheColumnType.NUMBER) protected static String PK_NAME = "id"; @CacheColumn protected static int serial; private KQLog kqLog = new KQLog(); @Override protected boolean autoInitIfNotFound() { return false; } @Override public CacheMap initCache() { CacheMap localData = createCacheMap(); RecordSet rs = new RecordSet(); kqLog = new KQLog(); try { List serials = new ArrayList<>(); List workSectionList = new ArrayList<>(); List sectionList = new ArrayList<>(); Map serialMaps = new HashMap<>();//分组用的map Map groupSectionMaps = new HashMap<>();//分组用的map Map sectionMap = new HashMap<>(); String serialidold = ""; String getStartWorkSections = "select * from kq_ShiftOnOffWorkSections where 1=1 order by serialid,record "; rs.executeQuery(getStartWorkSections); while (rs.next()) { String id = Util.null2String(rs.getString("id")); String serialid = Util.null2String(rs.getString("serialid")); String across = Util.null2String(rs.getString("across")); String times = Util.null2String(rs.getString("times")); String mins = Util.null2String(rs.getString("mins")); //增加了打卡规则,每一个班次的时间点都有允许打卡开始时间和结束时间,这个_next就是和mins相对应的打卡开始和结束时间 String mins_next = Util.null2s(rs.getString("mins_next"),"-1"); String record = Util.null2String(rs.getString("record")); String onoffworktype = Util.null2String(rs.getString("onoffworktype")); sectionMap = new HashMap<>(); sectionMap.put("across", across); sectionMap.put("times", times); sectionMap.put("mins", mins); sectionMap.put("mins_next", mins_next); if(serialMaps.get(serialid) != null){ Map tmpgroupSectionMaps = (Map)serialMaps.get(serialid); if(tmpgroupSectionMaps.get(record) != null){ List tmpWorkSection = (List) tmpgroupSectionMaps.get(record); List tmpSection = ((List)tmpWorkSection.get(tmpWorkSection.size()-1)); if("start".equalsIgnoreCase(onoffworktype)){ tmpSection.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ tmpSection.set(1, sectionMap); } }else{ workSectionList = new ArrayList<>(); sectionList = new ArrayList<>(); sectionList.add(""); sectionList.add(""); if("start".equalsIgnoreCase(onoffworktype)){ sectionList.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ sectionList.set(1, sectionMap); } workSectionList.add(sectionList); tmpgroupSectionMaps.put(record, workSectionList); } }else{ groupSectionMaps = new HashMap<>(); workSectionList = new ArrayList<>(); serialMaps.put(serialid, groupSectionMaps); if(groupSectionMaps.get(record) != null){ List tmpWorkSection = (List) groupSectionMaps.get(record); List tmpSection = ((List)tmpWorkSection.get(tmpWorkSection.size()-1)); if("start".equalsIgnoreCase(onoffworktype)){ tmpSection.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ tmpSection.set(1, sectionMap); } }else{ sectionList = new ArrayList<>(); sectionList.add(""); sectionList.add(""); if("start".equalsIgnoreCase(onoffworktype)){ sectionList.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ sectionList.set(1, sectionMap); } workSectionList.add(sectionList); groupSectionMaps.put(record, workSectionList); } } } List valList = new ArrayList<>(); for(Map.Entry me : serialMaps.entrySet()){ valList = new ArrayList<>(); String id = me.getKey(); Map val = (Map)me.getValue(); for(Map.Entry mee : val.entrySet()){ valList.addAll((List)mee.getValue()); } CacheItem cacheItem = createCacheItem(); cacheItem.set(PK_INDEX, id); cacheItem.set(serial, valList); modifyCacheItem(id, cacheItem); localData.put(id, cacheItem); } } catch (Exception e) { writeLog(e); } return localData; } /** * 根据班次id获取工作时段 * @param serialid * @return */ public List getWorkSectionTimes(String serialid){ //return (List) getObjValue(serial, serialid); RecordSet rs = new RecordSet(); kqLog = new KQLog(); List valList = new ArrayList<>(); List workSectionList = new ArrayList<>(); try { List serials = new ArrayList<>(); List sectionList = new ArrayList<>(); Map serialMaps = new HashMap<>();//分组用的map Map groupSectionMaps = new HashMap<>();//分组用的map Map sectionMap = new HashMap<>(); String serialidold = ""; String getStartWorkSections = "select * from kq_ShiftOnOffWorkSections where serialid=? order by serialid,record "; rs.executeQuery(getStartWorkSections,serialid); while (rs.next()) { String id = Util.null2String(rs.getString("id")); //String serialid = Util.null2String(rs.getString("serialid")); String across = Util.null2String(rs.getString("across")); String times = Util.null2String(rs.getString("times")); String mins = Util.null2String(rs.getString("mins")); //增加了打卡规则,每一个班次的时间点都有允许打卡开始时间和结束时间,这个_next就是和mins相对应的打卡开始和结束时间 String mins_next = Util.null2s(rs.getString("mins_next"),"-1"); String record = Util.null2String(rs.getString("record")); String onoffworktype = Util.null2String(rs.getString("onoffworktype")); sectionMap = new HashMap<>(); sectionMap.put("across", across); sectionMap.put("times", times); sectionMap.put("mins", mins); sectionMap.put("mins_next", mins_next); if(serialMaps.get(serialid) != null){ Map tmpgroupSectionMaps = (Map)serialMaps.get(serialid); if(tmpgroupSectionMaps.get(record) != null){ List tmpWorkSection = (List) tmpgroupSectionMaps.get(record); List tmpSection = ((List)tmpWorkSection.get(tmpWorkSection.size()-1)); if("start".equalsIgnoreCase(onoffworktype)){ tmpSection.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ tmpSection.set(1, sectionMap); } }else{ workSectionList = new ArrayList<>(); sectionList = new ArrayList<>(); sectionList.add(""); sectionList.add(""); if("start".equalsIgnoreCase(onoffworktype)){ sectionList.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ sectionList.set(1, sectionMap); } workSectionList.add(sectionList); tmpgroupSectionMaps.put(record, workSectionList); } }else{ groupSectionMaps = new HashMap<>(); workSectionList = new ArrayList<>(); serialMaps.put(serialid, groupSectionMaps); if(groupSectionMaps.get(record) != null){ List tmpWorkSection = (List) groupSectionMaps.get(record); List tmpSection = ((List)tmpWorkSection.get(tmpWorkSection.size()-1)); if("start".equalsIgnoreCase(onoffworktype)){ tmpSection.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ tmpSection.set(1, sectionMap); } }else{ sectionList = new ArrayList<>(); sectionList.add(""); sectionList.add(""); if("start".equalsIgnoreCase(onoffworktype)){ sectionList.set(0, sectionMap); }else if("end".equalsIgnoreCase(onoffworktype)){ sectionList.set(1, sectionMap); } workSectionList.add(sectionList); groupSectionMaps.put(record, workSectionList); } } } for(Map.Entry me : serialMaps.entrySet()){ valList = new ArrayList<>(); String id = me.getKey(); Map val = (Map)me.getValue(); for(Map.Entry mee : val.entrySet()){ valList.addAll((List)mee.getValue()); } } } catch (Exception e) { writeLog(e); } return valList; } /** * 删除缓存信息 */ public void removeShiftWorkSectionCache() { removeCache(); } }