package com.engine.kq.cmd.shiftmanagement; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.engine.common.biz.AbstractCommonCommand; import com.engine.common.biz.SimpleBizLogger; import com.engine.common.constant.BizLogSmallType4Hrm; import com.engine.common.constant.BizLogType; import com.engine.common.entity.BizLogContext; import com.engine.core.interceptor.CommandContext; import com.engine.kq.biz.KQGroupBiz; import com.engine.kq.biz.KQGroupComInfo; import com.engine.kq.biz.KQConfigComInfo; import com.engine.kq.biz.KQGroupBiz; import com.engine.kq.biz.KQGroupComInfo; import com.engine.kq.biz.KQShiftManagementComInfo; import com.engine.kq.biz.KQShiftOnOffWorkSectionComInfo; import com.engine.kq.biz.KQShiftRestTimeSectionComInfo; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.UUID; import weaver.common.StringUtil; import weaver.conn.RecordSet; import weaver.conn.RecordSetTrans; import weaver.general.Util; import weaver.hrm.HrmUserVarify; import weaver.hrm.Reminder.KQAutoCardTask; import weaver.hrm.User; import weaver.hrm.common.database.dialect.DbDialectFactory; import weaver.hrm.common.database.dialect.IDbDialectSql; import weaver.systeminfo.SystemEnv; /** * 保存班次管理基本信息表单 * @author pzy * */ public class SaveShiftManagementBaseFormCmd extends AbstractCommonCommand>{ private SimpleBizLogger logger; public SaveShiftManagementBaseFormCmd() { } public SaveShiftManagementBaseFormCmd(Map params, User user) { this.user = user; this.params = params; this.logger = new SimpleBizLogger(); BizLogContext logContext = new BizLogContext(); logContext.setDateObject(new Date()); logContext.setLogType(BizLogType.HRM_ENGINE); logContext.setBelongType(BizLogSmallType4Hrm.HRM_ENGINE_SHIFTMANAGER); logContext.setLogSmallType(BizLogSmallType4Hrm.HRM_ENGINE_SHIFTMANAGER); logContext.setParams(params); logger.setUser(user);//当前操作人 if(params != null && params.containsKey("data")){ String datas = Util.null2String(params.get("data")); JSONObject jsonObj = JSON.parseObject(datas); String serialid = Util.null2String(jsonObj.get("id")); if(serialid.length() > 0){ String mainSql = " select * from kq_ShiftManagement where id= "+serialid +" "; logger.setMainSql(mainSql);//主表sql logger.setMainPrimarykey("id");//主日志表唯一key logger.setMainTargetNameColumn("serial"); SimpleBizLogger.SubLogInfo subLogInfo1 = logger.getNewSubLogInfo(); String subSql1 = "select * from kq_ShiftOnOffWorkSections where serialid="+serialid; subLogInfo1.setSubTargetNameColumn("times"); subLogInfo1.setGroupId("0"); //所属分组, 按照groupid排序显示在详情中, 不设置默认按照add的顺序。 subLogInfo1.setSubGroupNameLabel(27961); //在详情中显示的分组名称,不设置默认显示明细x subLogInfo1.setSubSql(subSql1); logger.addSubLogInfo(subLogInfo1); SimpleBizLogger.SubLogInfo subLogInfo = logger.getNewSubLogInfo(); String subSql = " select * from kq_ShiftRestTimeSections where serialid = "+serialid; subLogInfo.setSubSql(subSql); subLogInfo.setSubTargetNameColumn("time"); subLogInfo.setGroupId("1"); //所属分组, 按照groupid排序显示在详情中, 不设置默认按照add的顺序。 subLogInfo.setSubGroupNameLabel(505603); //在详情中显示的分组名称,不设置默认显示明细x logger.addSubLogInfo(subLogInfo); logger.before(logContext); } } } @Override public BizLogContext getLogContext() { // TODO Auto-generated method stub return null; } @Override public List getLogContexts() { return logger.getBizLogContexts(); } /** * 获取日志对象的名称 * @param id * @param para2 * @return */ public String getTargetName(String id,String para2){ try { return para2; } catch (Exception e) { e.printStackTrace(); return ""; } } @Override public Map execute(CommandContext commandContext) { Map retmap = new HashMap(); String datas = Util.null2String(params.get("data")); JSONObject jsonObj = JSON.parseObject(datas); String serialid = Util.null2String(jsonObj.get("id")); if(!HrmUserVarify.checkUserRight("KQClass:Management",user)) { retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(2012, user.getLanguage())); return retmap; } try{ if(serialid.length() > 0){ edit(retmap,jsonObj); }else{ add(retmap,jsonObj); } KQShiftManagementComInfo kqShiftManagementComInfo = new KQShiftManagementComInfo(); kqShiftManagementComInfo.removeShiftManagementCache(); if(retmap.containsKey("id")){ KQConfigComInfo kqConfigComInfo = new KQConfigComInfo(); String auto_card_cominfo = Util.null2String(kqConfigComInfo.getValue("auto_card_cominfo"),"0"); if("1".equalsIgnoreCase(auto_card_cominfo)){ String serial_id = Util.null2String(retmap.get("id")); KQGroupBiz kqGroupBiz = new KQGroupBiz(); List groupList = kqGroupBiz.getGroupIdByUesedSerialId(serial_id); KQGroupComInfo kqGroupComInfo = new KQGroupComInfo(); if(!groupList.isEmpty()){ for(String groupId : groupList){ String auto_checkin = kqGroupComInfo.getAuto_checkin(groupId); String auto_checkout = kqGroupComInfo.getAuto_checkout(groupId); if("1".equalsIgnoreCase(auto_checkout) || "1".equalsIgnoreCase(auto_checkin)){ //当前班次存在自动打卡设置,修改班次后,不影响当天的自动打卡时间,变更后的班次自动打卡需要第二天才起作用 retmap.put("message", "当前班次存在自动打卡设置,修改班次后,不影响当天的自动打卡时间,变更后的班次自动打卡需要第二天才起作用"); break; } } } } } }catch (Exception e){ retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); writeLog(e); } return retmap; } /** * 编辑班次基本信息 * @param retmap * @param jsonObj */ public void edit(Map retmap,JSONObject jsonObj) throws Exception{ RecordSetTrans rst = new RecordSetTrans(); rst.setAutoCommit(true); RecordSet rs = new RecordSet(); String serialid = Util.null2String(jsonObj.get("id")); String serial = Util.null2String(jsonObj.get("serial"));//班次名称 String subcompanyid = Util.null2o(Util.null2String(jsonObj.get("subcompanyid"))); int rest_shift = StringUtil.parseToInt(jsonObj.getString("rest_shift"),0);//休息班 String shiftOnOffWorkCount = Util.null2o(Util.null2String(jsonObj.get("shiftonoffworkcount")));//一天内上下班次数 String punchSettings = "1";//打卡时段是否开启 1表示开启 String isOffDutyFreeCheck = Util.null2o(Util.null2String(jsonObj.get("isoffdutyfreecheck")));//允许下班不打卡 1表示开启 String isRestTimeOpen = Util.null2o(Util.null2String(jsonObj.get("isresttimeopen")));//排除休息时间是否开启 1表示开启 String worktime = Util.null2o(Util.null2String(jsonObj.get("worktime")));//工作时长 // String color = Util.null2o(Util.null2String(jsonObj.get("color")));//工作时长 String color = "#000"; String cardRemind = Util.null2s(jsonObj.getString("cardRemind"),"0");//是否开启打卡提醒:0-不开启、1-开启。默认不开启 String cardRemOfSignIn = Util.null2s(jsonObj.getString("cardRemOfSignIn"),"1");//上班打卡提醒:0-不提醒、1-自定义提前提醒分钟数。默认为1 String minsBeforeSignIn = Util.null2s(jsonObj.getString("minsBeforeSignIn"),"10");//自定义提前提醒分钟数。默认10分钟 String cardRemOfSignOut = Util.null2s(jsonObj.getString("cardRemOfSignOut"),"1");//下班打卡提醒:0-不提醒、1-自定义延后提醒分钟数。默认为1 String minsAfterSignOut = Util.null2s(jsonObj.getString("minsAfterSignOut"),"0");//自定义延后提醒分钟数。默认0分钟 String remindMode = Util.null2s(jsonObj.getString("remindMode"),"1");//提醒方式:1-消息中心提醒、2-邮件提醒、3-短信提醒。默认消息中心提醒 String remindOnPC = Util.null2s(jsonObj.getString("remindOnPC"),"0");//登陆PC端弹窗提醒:0-不开启、1-开启 String halfcalrule = Util.null2s(jsonObj.getString("halfcalrule"),"0");//半天计算规则 String halfcalpoint = Util.null2s(jsonObj.getString("halfcalpoint"),"");//半天分界点 String halfcalpoint2cross = Util.null2s(jsonObj.getString("halfcalpoint2cross"),"0");//当日 if(duplicationCheck(serial,serialid)){ retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(389019,user.getLanguage())); return ; } String[] works = new String[]{"start","end"}; JSONArray workSections = (JSONArray)jsonObj.get("workSections"); checkRule(retmap,workSections,works); if(!retmap.isEmpty()){ return ; } String mainSql = "update kq_ShiftManagement set serial=?,subcompanyid=?,shiftonoffworkcount=?,punchsettings=?,isoffdutyfreecheck=?,isresttimeopen=?,worktime=?,color=?," + "cardRemind=? ,cardRemOfSignIn=? ,minsBeforeSignIn=? ,cardRemOfSignOut=? ,minsAfterSignOut=? ,remindMode=? ,remindOnPC=?,halfcalrule=?,halfcalpoint=?,halfcalpoint2cross=?,rest_shift= ? where id = ? "; boolean isUpdated = rst.executeUpdate(mainSql, serial,subcompanyid,shiftOnOffWorkCount,punchSettings,isOffDutyFreeCheck,isRestTimeOpen,worktime,color, cardRemind ,cardRemOfSignIn ,minsBeforeSignIn ,cardRemOfSignOut ,minsAfterSignOut ,remindMode ,remindOnPC,halfcalrule,halfcalpoint,halfcalpoint2cross,rest_shift,serialid); if(isUpdated){ //对于休息时间和工作时间,直接删除后重新创建 String delRestSql = "delete from kq_ShiftRestTimeSections where serialid = ? "; rs = new RecordSet(); rst.executeUpdate(delRestSql, serialid); String delWorkSql = "delete from kq_ShiftOnOffWorkSections where serialid = ? "; rs = new RecordSet(); rst.executeUpdate(delWorkSql, serialid); //休息时间 resttype:start开始时间,end结束时间 JSONArray restTimeSections = (JSONArray)jsonObj.get("restTimeSections"); //工作时间 across是否跨天,1表示跨天;beginMin上班前分钟数开始签到,endMin下班后分钟数停止签退;times具体上下班时间;onOffWorkType:start开始时间,end结束时间 String restSql = "insert into kq_ShiftRestTimeSections(serialid,resttype,time,across,record1,orderId) values(?,?,?,?,?,?)"; int restCount = restTimeSections.size(); rs = new RecordSet(); for(int i = 0 ; i < restCount ; i++){ JSONObject jsonRest = ((JSONObject)restTimeSections.get(i)); if(jsonRest.containsKey("start") && jsonRest.containsKey("end")){ String record=Util.null2String(jsonRest.get("record")); String orderId=Util.null2String(jsonRest.get("orderId")); JSONObject start_jsonRest = (JSONObject) jsonRest.get("start"); String time=Util.null2String(start_jsonRest.get("time")); String resttype="start"; String across=Util.null2String(start_jsonRest.get("accross")); rst.executeUpdate(restSql, serialid,resttype,time,across,record,orderId); JSONObject end_jsonRest = (JSONObject) jsonRest.get("end"); time=Util.null2String(end_jsonRest.get("time")); resttype="end"; across=Util.null2String(end_jsonRest.get("accross")); rst.executeUpdate(restSql, serialid,resttype,time,across,record,orderId); } } rs = new RecordSet(); String workSql = "insert into kq_ShiftOnOffWorkSections(serialid,across,mins,times,onoffworktype,record,mins_next,clockinnot) values(?,?,?,?,?,?,?,?)"; int workCount = workSections.size(); for(int i = 0 ; i < workCount ; i++){ JSONObject jsonWork = ((JSONObject)workSections.get(i)); String record = Util.null2String(jsonWork.get("record")); for(int j = 0 ; j < works.length ; j++){ String onOffWorkType=works[j]; JSONObject inWork=(JSONObject)jsonWork.get(onOffWorkType); String across=Util.null2String(inWork.get("across")); String mins = Util.null2s(Util.null2String(inWork.get("mins")),"0"); String times=Util.null2String(inWork.get("times")); String mins_next=Util.null2String(inWork.get("mins_next")); String clockinnot=Util.null2s(Util.null2String(inWork.get("clockinnot")),"0"); rst.executeUpdate(workSql, serialid,across,mins,times,onOffWorkType,record,mins_next,clockinnot); } } retmap.put("id", serialid); retmap.put("status", "1"); retmap.put("message", SystemEnv.getHtmlLabelName(18758, user.getLanguage())); }else{ retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); } } /** * 新增班次基本信息 * @param retmap * @param jsonObj */ public void add(Map retmap,JSONObject jsonObj) throws Exception{ RecordSetTrans rst = new RecordSetTrans(); rst.setAutoCommit(true); RecordSet rs = new RecordSet(); String subcompanyid = Util.null2o(Util.null2String(jsonObj.get("subcompanyid"))); int rest_shift = StringUtil.parseToInt(jsonObj.getString("rest_shift"),0);//休息班 String serial = Util.null2String(jsonObj.get("serial"));//班次名称 String shiftOnOffWorkCount = Util.null2o(Util.null2String(jsonObj.get("shiftonoffworkcount")));//一天内上下班次数 String punchSettings = "1";//打卡时段是否开启 1表示开启 String isOffDutyFreeCheck = Util.null2o(Util.null2String(jsonObj.get("isoffdutyfreecheck")));//允许下班不打卡 1表示开启 String isRestTimeOpen = Util.null2o(Util.null2String(jsonObj.get("isresttimeopen")));//排除休息时间是否开启 1表示开启 String worktime = Util.null2o(Util.null2String(jsonObj.get("worktime")));//工作时长 // String color = Util.null2o(Util.null2String(jsonObj.get("color")));//工作时长 String color = "#000"; String uuid = UUID.randomUUID().toString();//uuid供查询使用 String cardRemind = Util.null2s(jsonObj.getString("cardRemind"),"0");//是否开启打卡提醒:0-不开启、1-开启。默认不开启 String cardRemOfSignIn = Util.null2s(jsonObj.getString("cardRemOfSignIn"),"1");//上班打卡提醒:0-不提醒、1-自定义提前提醒分钟数。默认为1 String minsBeforeSignIn = Util.null2s(jsonObj.getString("minsBeforeSignIn"),"10");//自定义提前提醒分钟数。默认10分钟 String cardRemOfSignOut = Util.null2s(jsonObj.getString("cardRemOfSignOut"),"1");//下班打卡提醒:0-不提醒、1-自定义延后提醒分钟数。默认为1 String minsAfterSignOut = Util.null2s(jsonObj.getString("minsAfterSignOut"),"0");//自定义延后提醒分钟数。默认0分钟 String remindMode = Util.null2s(jsonObj.getString("remindMode"),"1");//提醒方式:1-消息中心提醒、2-邮件提醒、3-短信提醒。默认消息中心提醒 String remindOnPC = Util.null2s(jsonObj.getString("remindOnPC"),"0");//登陆PC端弹窗提醒:0-不开启、1-开启 String halfcalrule = Util.null2s(jsonObj.getString("halfcalrule"),"0");//半天计算规则 String halfcalpoint = Util.null2s(jsonObj.getString("halfcalpoint"),"");//半天分界点 String halfcalpoint2cross = Util.null2s(jsonObj.getString("halfcalpoint2cross"),"0");//当日 if(duplicationCheck(serial,"")){ retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(389019,user.getLanguage())); return ; } //工作时间 across是否跨天,1表示跨天;beginMin上班前分钟数开始签到,endMin下班后分钟数停止签退;times具体上下班时间;onOffWorkType:start开始时间,end结束时间 JSONArray workSections = (JSONArray)jsonObj.get("workSections"); String[] works = new String[]{"start","end"}; checkRule(retmap,workSections,works); if(!retmap.isEmpty()){ return ; } //color改为前台获取 // String color = getRandomColor(); boforeLog(uuid); String mainSql = "insert into kq_ShiftManagement(serial,subcompanyid,shiftonoffworkcount,punchsettings,isoffdutyfreecheck,isresttimeopen,worktime,uuid,color," + "cardRemind ,cardRemOfSignIn ,minsBeforeSignIn ,cardRemOfSignOut ,minsAfterSignOut ,remindMode ,remindOnPC,halfcalrule,halfcalpoint,halfcalpoint2cross,rest_shift)" + " values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; boolean isUpdated = rst.executeUpdate(mainSql, serial,subcompanyid,shiftOnOffWorkCount,punchSettings,isOffDutyFreeCheck,isRestTimeOpen,worktime,uuid,color, cardRemind ,cardRemOfSignIn ,minsBeforeSignIn ,cardRemOfSignOut ,minsAfterSignOut ,remindMode ,remindOnPC,halfcalrule,halfcalpoint,halfcalpoint2cross,rest_shift); if(isUpdated){ int serialid = 0; String idSql = "select id from kq_ShiftManagement where uuid=? and (isdelete is null or isdelete <> '1') "; rs = new RecordSet(); rs.executeQuery(idSql,uuid); if(rs.next()) { serialid = rs.getInt("id"); } if(serialid > 0){ //休息时间 resttype:start开始时间,end结束时间 JSONArray restTimeSections = (JSONArray)jsonObj.get("restTimeSections"); String restSql = "insert into kq_ShiftRestTimeSections(serialid,resttype,time,across,record1,orderId) values(?,?,?,?,?,?)"; int restCount = restTimeSections.size(); rs = new RecordSet(); for(int i = 0 ; i < restCount ; i++){ JSONObject jsonRest = ((JSONObject)restTimeSections.get(i)); if(jsonRest.containsKey("start") && jsonRest.containsKey("end")){ String record=Util.null2String(jsonRest.get("record")); String orderId=Util.null2String(jsonRest.get("orderId")); JSONObject start_jsonRest = (JSONObject) jsonRest.get("start"); String time=Util.null2String(start_jsonRest.get("time")); String resttype="start"; String across=Util.null2String(start_jsonRest.get("accross")); rst.executeUpdate(restSql, serialid,resttype,time,across,record,orderId); JSONObject end_jsonRest = (JSONObject) jsonRest.get("end"); time=Util.null2String(end_jsonRest.get("time")); resttype="end"; across=Util.null2String(end_jsonRest.get("accross")); rst.executeUpdate(restSql, serialid,resttype,time,across,record,orderId); } } rs = new RecordSet(); String workSql = "insert into kq_ShiftOnOffWorkSections(serialid,across,mins,times,onoffworktype,record,mins_next,clockinnot) values(?,?,?,?,?,?,?,?)"; int workCount = workSections.size(); for(int i = 0 ; i < workCount ; i++){ JSONObject jsonWork = ((JSONObject)workSections.get(i)); String record = Util.null2String(jsonWork.get("record")); for(int j = 0 ; j < works.length ; j++){ String onOffWorkType=works[j]; JSONObject inWork=(JSONObject)jsonWork.get(onOffWorkType); String across=Util.null2String(inWork.get("across")); String mins = Util.null2s(Util.null2String(inWork.get("mins")),"1"); String times=Util.null2String(inWork.get("times")); String mins_next=Util.null2String(inWork.get("mins_next")); String clockinnot = Util.null2s(Util.null2String(inWork.get("clockinnot")),"0"); rst.executeUpdate(workSql, serialid,across,mins,times,onOffWorkType,record,mins_next,clockinnot); } } retmap.put("status", "1"); retmap.put("id", serialid); retmap.put("message", SystemEnv.getHtmlLabelName(18758, user.getLanguage())); }else{ retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); } }else{ retmap.put("status", "-1"); retmap.put("message", SystemEnv.getHtmlLabelName(382661,user.getLanguage())); } } private void checkRule(Map retmap, JSONArray workSections, String[] works) { for(int i = 0 ; i < workSections.size() ; i++) { JSONObject jsonWork = ((JSONObject) workSections.get(i)); for(int j = 0 ; j < works.length ; j++){ String onOffWorkType=works[j]; JSONObject inWork=(JSONObject)jsonWork.get(onOffWorkType); String mins = Util.null2String(inWork.get("mins")); if(mins.length() == 0 || Util.getIntValue(mins) == 0){ retmap.put("status", "-1"); retmap.put("message", ""+ SystemEnv.getHtmlLabelName(10005343,weaver.general.ThreadVarLanguage.getLang())+""); break; } } } } /** * 判断是否重名 * @param serial * @param serialid 为空表示新增 * @return */ private boolean duplicationCheck(String serial,String serialid){ boolean isDuplicated = false; RecordSet rs = new RecordSet(); String checkSql = "select 1 from kq_ShiftManagement where serial=? and (isdelete is null or isdelete <> '1') "; if(serialid.length() > 0){ checkSql += " and id != "+serialid; } rs.executeQuery(checkSql, Util.null2s(serial, "").trim()); if(rs.next()){ isDuplicated = true; } return isDuplicated; } /** * 生成随机的颜色 * @return */ private String getRandomColor(){ RecordSet rs = new RecordSet(); List colorLists = new ArrayList<>(); String hasSameColor = "select color from kq_ShiftManagement group by color "; rs.executeQuery(hasSameColor); while (rs.next()){ colorLists.add(rs.getString("color")); } String color = ""; Random random = null; int i = 0 ; // while(true){ // random = new Random(); // //颜色就要深色的 // String[] colors = new String[]{"0","1","2","3","4","5","6"}; // int not_r = random.nextInt(16); // int not_g = random.nextInt(16); // int not_b = random.nextInt(16); // int not_r1 = random.nextInt(16); // int not_g1 = random.nextInt(16); // int not_b1 = random.nextInt(16); // color = "#"+colors[not_r]+colors[not_g]+colors[not_b]+colors[not_r1]+colors[not_g1]+colors[not_b1]; // //以防死锁 // if(i > 1000){ // break; // } // if(!colorLists.contains(color)){ // break; // } // i++; // } return color; } public void boforeLog(String uuid){ BizLogContext logContext = new BizLogContext(); logContext.setDateObject(new Date()); logContext.setLogType(BizLogType.HRM_ENGINE); logContext.setBelongType(BizLogSmallType4Hrm.HRM_ENGINE_SHIFTMANAGER); logContext.setLogSmallType(BizLogSmallType4Hrm.HRM_ENGINE_SHIFTMANAGER); logContext.setParams(params); String log_mainSql = " select * from kq_ShiftManagement where uuid in('"+uuid+"')"; logger.setMainSql(log_mainSql);//主表sql logger.setMainPrimarykey("id");//主日志表唯一key logger.setMainTargetNameColumn("serial"); SimpleBizLogger.SubLogInfo subLogInfo1 = logger.getNewSubLogInfo(); String subSql1 = "select * from kq_ShiftOnOffWorkSections where serialid in (select id from kq_ShiftManagement where uuid in('"+uuid+"'))" ; subLogInfo1.setSubTargetNameColumn("times"); subLogInfo1.setGroupId("0"); //所属分组, 按照groupid排序显示在详情中, 不设置默认按照add的顺序。 subLogInfo1.setSubGroupNameLabel(27961); //在详情中显示的分组名称,不设置默认显示明细x subLogInfo1.setSubSql(subSql1); logger.addSubLogInfo(subLogInfo1); SimpleBizLogger.SubLogInfo subLogInfo = logger.getNewSubLogInfo(); String subSql = " select * from kq_ShiftRestTimeSections where serialid in (select id from kq_ShiftManagement where uuid in('"+uuid+"'))" ; subLogInfo.setSubSql(subSql); subLogInfo.setSubTargetNameColumn("time"); subLogInfo.setGroupId("1"); //所属分组, 按照groupid排序显示在详情中, 不设置默认按照add的顺序。 subLogInfo.setSubGroupNameLabel(505603); //在详情中显示的分组名称,不设置默认显示明细x logger.addSubLogInfo(subLogInfo); logger.before(logContext); } }