2016-08-12 9 views
0

私はJavaを初めて使いました。私は過去数週間、Webアプリケーションを修正しようとしていました。私は2つに分割する必要があるmysqlテーブルにリンクされたリストを取得しました(1回目と2回目のワークブレークのリストと3回目のワークブレークのリスト)。私は、画面上のワークブレーク・メッセージを取得切断のいずれかであるとき、私は時にしたいブレーク1ブレイク2用の3行が含まれているし、今3ブレーク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; 
    } 

:このように今の私のリストが見えます別のメッセージを表示するには、ブレーク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」にリンクされている新しいリストを作成し、そしてisWorkBreak2内部の第三休憩をカバーするものです。しかし、今でも私はgetCurrentResultSet().isWorkBreakまたはgetCurrentResultSet().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でリストを分割し、それが別のメッセージを表示させることができる方法任意のヒント?ありがとう!

workbreakNumberを追加します。ここでは

は、あなたのテーブル構造が示されていないので、状況は完全には明らかではないが、おそらくこれは、任意の簡単な解決策になる可能性がされてtabel「workbreak」

workbreak

答えて

0

ですあなたのworkbreakテーブルに。これには、1から3の数字が含まれており、どのワークブレークであるかを示します。

もう1つの方法は、サブクエリを使用してそれを実行し、ワークブレークを時間順に並べ替えることです。

+0

テーブル構造も追加しました –

関連する問題