如何拆分列表?

时间:2016-08-12 06:00:54

标签: java html mysql

我是Java新手,过去几周我试图修改一个Web应用程序。我有一个列表链接到一个mysql表,需要拆分为2(一个列表用于第一个和第二个workbreak,另一个列表用于第三个workbreak)。现在我的列表看起来像这样:

private List<Workbreak> workbreaks = new ArrayList<Workbreak>();

@OneToMany(fetch= FetchType.EAGER, cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
    @JoinTable(name = "workbreak", joinColumns = {@JoinColumn(name="conveyorId")}, inverseJoinColumns={@JoinColumn(name="Id")})
    public List<Workbreak> getWorkbreaks() {
        return workbreaks;
    }
    public void setWorkbreaks(List<Workbreak> workbreaks) {
        this.workbreaks = workbreaks;
    }

workbreak表包含3行Break 1 Break 2和Break 3.现在当任何一个休息时间我在屏幕上得到一个工作休息消息时,我想要什么时候休息3来显示不同的消息。

这是检查是否中断的方式:

<FRAMESET ROWS="100%" border="0" bordercolor="black" onLoad="starttime()">
 <% monitor.refreshInformation(request.getParameter("conveyorId"));%>

<%if (monitor.getCurrentResultSet() == null){%>
    <FRAME SRC="conveyorShiftbreak.jsp" SCROLLING=NO NAME=MAIN> 
<%}else {
    if (monitor.getCurrentResultSet().isWorkBreak()){ %>
            <FRAME SRC="conveyorWorkbreak.jsp" SCROLLING=YES NAME=MAIN>
    <%} else {%>
            <FRAME SRC="conveyorMonitor.jsp" SCROLLING=NO NAME=MAIN>    
    <%}%>
<%}%>

所以我得到了涵盖所有休息时间的isWorkBreak。

boolean isWorkBreak = false;
public boolean isWorkBreak(){

    try{
    isWorkBreak = false;
    Date current = Utils.getCalendarToTime(java.util.Calendar.getInstance());   
    int offset = TimeZone.getDefault().getOffset(current.getTime());
    java.util.Calendar calclone = java.util.Calendar.getInstance();
    calclone.setTime(current);
    calclone.add( java.util.Calendar.MILLISECOND, offset);
    long currentTime = calclone.getTimeInMillis();

    String sfStart = Utils.getFormatedTime(getShift().getStartTime());
    long shiftStart = Utils.parseTimestamp(sfStart).getTimeInMillis();
    String sfEnd = Utils.getFormatedTime(getShift().getEndTime());
    long shiftEnd =  Utils.parseTimestamp(sfEnd).getTimeInMillis();

    long shift = getShiftMinutes(sfStart, sfEnd);

    List<Workbreak> workbreaks = getWorkbreaks();
    for (Workbreak workbreak :workbreaks){
        String wbStart = Utils.getFormatedTime(workbreak.getStartTime());
        String wbEnd = Utils.getFormatedTime(workbreak.getEndTime());
        long wTimeFrame = getShiftMinutes(wbStart, wbEnd);
        if (wTimeFrame >0){
            long workbreakStart =  Utils.parseTimestamp(wbStart).getTimeInMillis();
            long workbreakEnd =  Utils.parseTimestamp(wbEnd).getTimeInMillis();
            //do correction
            if ( workbreakStart <shiftStart){//shift is in the next day
                workbreakStart +=  24*60*60*1000; //add one day 
                workbreakEnd +=  24*60*60*1000; //add one day 
            }

            if (shiftStart <= workbreakStart && currentTime<shiftStart){//curent time is next day
                currentTime +=  24*60*60*1000; //add one day
            }

            if (currentTime > workbreakStart && currentTime < workbreakEnd){
                isWorkBreak = true;
                workbrakeRemaingMinutes = (workbreakEnd - currentTime)/1000/60;
                break;
            }

        }
    }
    }
    catch (Exception e) {
        logger.error("!!!ERROR isWorkBreak" + e.getMessage());
    }
    return isWorkBreak;
}

所以我尝试的是创建一个链接到同一个表“workbreak”的新List,并覆盖isWorkBreak2中的第3个中断。但现在,即使我getCurrentResultSet().isWorkBreakgetCurrentResultSet().isWorkBreak2,我也会在屏幕上显示相同的消息。

<% monitor.refreshInformation(request.getParameter("conveyorId"));%>

<%if (monitor.getCurrentResultSet() == null){%>
            <FRAME SRC="conveyorShiftbreak.jsp" SCROLLING=NO NAME=MAIN> 
<%}else if (monitor.getCurrentResultSet().isWorkBreak2()){ %>
            <FRAME SRC="conveyorSDiscussion.jsp" SCROLLING=YES NAME=MAIN>
<%}else if (monitor.getCurrentResultSet().isWorkBreak()){ %>
            <FRAME SRC="conveyorWorkbreak.jsp" SCROLLING=NO NAME=MAIN>  
<%}else  {%>   
            <FRAME SRC="conveyorMonitor.jsp" SCROLLING=NO NAME=MAIN>
<%} %>  

有关如何将列表拆分为2并使其显示不同消息的任何提示?谢谢!

这是tabel'workbreak'

workbreak

1 个答案:

答案 0 :(得分:0)

您的表格结构未显示,因此情况并不完全清楚,但也许这可能是任何简单的解决方案:

将workbreakNumber添加到workbreak表中。这将只包含1到3之间的数字,以指示它是哪个工作分析。

另一种选择是使用子查询来完成,并按时间顺序排列工作分解。