Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要检查for循环中的可用日期并安排销售订单_Java_Sql Server - Fatal编程技术网

Java 需要检查for循环中的可用日期并安排销售订单

Java 需要检查for循环中的可用日期并安排销售订单,java,sql-server,Java,Sql Server,我有一个MS SQL server表,其中包含以下列-分配的日期、销售订单号、可用时间 内容如下: Date_Allotted | Sale_Order_No | Time_Available | Time_Needed ------------------------------------------------------------------- 02-02-2015 | 123456 | 90 mins | 50 mi

我有一个MS SQL server表,其中包含以下列-分配的日期、销售订单号、可用时间

内容如下:

Date_Allotted | Sale_Order_No | Time_Available | Time_Needed ------------------------------------------------------------------- 02-02-2015 | 123456 | 90 mins | 50 mins 08-02-2015 | 123457 | 70 mins | 30 mins 09-02-2015 | 123458 | 120 mins | 200 mins 10-02-2015 | 123459 | 320 mins | 100 mins 11-02-2015 | 123455 | 40 mins | 20 mins 15-02-2015 | 123454 | 30 mins | 15 mins 我在java中的函数是这样的

try
{  
     String tl = "";   

     SimpleDateFormat sdft = new SimpleDateFormat("HH:mm:ss");

     st5 = con.createStatement();

     ResultSet rs5 = st5.executeQuery("Select TimeLeft from DCP.dbo.TimeAllotted where DateAllotted = '"+lir.trim()+"'");

     while(rs5.next())
     {
            tl = rs5.getString("TimeLeft");  // it is the time left on that day
            System.out.println("TimeLeft : " + tl);
     }

     rs5.close();  
     st5.close();

     if((("").equals(tl.trim())) || ((" ").equals(tl.trim())))
           tl = "960";

     int ftl = 0, frt = 0;

     tl = tl.trim();

     RoutingTime = RoutingTime.trim(); // it is the time needed to execute a sale order

     ftl = Integer.parseInt(tl);
     System.out.println("ftl: " + ftl);

     frt = Integer.parseInt(RoutingTime);
     System.out.println("frt: " + frt);

     if(ftl >= frt)
     {
          Calendar calb = Calendar.getInstance();
          Calendar calc = Calendar.getInstance();
          Calendar cald = Calendar.getInstance();

          String cdatet = "18:30:00";

          calb.setTime(sdft.parse(cdatet));

          cdatet = sdft.format(calb.getTime());
          System.out.println("Fixed Date Time: " + cdatet);

          String cdateta = "09:00:00";

          cald.setTime(sdft.parse(cdateta));

          cdateta = sdft.format(cald.getTime());
          System.out.println("Fixed Date Time 1: " + cdateta);

          String cdatetc = sdft.format(calc.getTime());

          calc.setTime(sdft.parse(cdatetc));

          cdatetc = sdft.format(calc.getTime());
          System.out.println("Current Date Time: " + cdatetc);

          java.util.Date cdatetd = calb.getTime();
          java.util.Date cdatetcd = calc.getTime();
          java.util.Date cdatetcd1 = cald.getTime();

         int mins = (int) ((calb.getTime().getTime() - calc.getTime().getTime()) / (60000));
         System.out.println("mins : " + mins);

         int TimeLeft = 0;

         if((cdatetcd1.before(cdatetcd)) && (cdatetcd.before(cdatetd)) && (mins >= frt))
                TimeLeft = ftl - frt;

         Statement st3 = con.createStatement();

         String dd = "";

         String sql1 = "SELECT datediff(dd, LastItemReceiptDate, CustomerRequestDate) as 'ddiff' FROM DCP.dbo.DCPDate where SONo = '"+jtfSONo.getText().trim()+"' and LineItemNo = '"+jtfLineItemNo.getText().trim()+"'";

         ResultSet rs2 = st2.executeQuery(sql1);

         while(rs2.next())
          {
                dd = rs2.getString("ddiff");
          }

          rs2.close();  
          st3.close();

          int datediff = 0;

          datediff = Integer.parseInt(dd);
          System.out.println("datediff : " + datediff);

          tl = "" + TimeLeft;

          if(datediff >= 10)
          {
                if(TimeLeft <= frt)
                {
                      Statement st6 = con.createStatement();

                      ArrayList<String> solist = new ArrayList<String>();

                      String sql2i = "select l.DateAllotted as start from [DCP].[dbo].[TimeAllotted] as l left outer join [DCP].[dbo].[TimeAllotted] as r on l.DateAllotted + 1 = r.DateAllotted where r.DateAllotted is null and l.DateAllotted > '"+lir.trim()+"'";  // check which date are not in series

                      ResultSet rs6 = st6.executeQuery(sql2i);

                      while(rs6.next())
                      {
                            solist.add(rs6.getString("Start").trim());
                      }

                      rs6.close();  
                      st6.close();

                      for(int i = 0; i < solist.size(); i++)
                      {
                            for(int j = i; j <= (i+1); j++)
                            {
                                   Statement st7 = con.createStatement();

                                   ArrayList<String> linelist = new ArrayList<String>();  

                                   String sql3 = "Declare @sDate DATETIME, @eDate DATETIME select @sDate = '"+solist.get(i).toString().trim()+"'; select @eDate = '"+solist.get(i+1).toString().trim()+"'; ;with DATE(Date1) as ( select DATEADD(day, datediff(day, '19000101', @sDate), '19000101') union all select DATEADD(day, 1, Date1) from DATE where Date1 <= @eDate ) select convert(varchar(15),d1.DATE1,110) as [Working Date], datename(weekday,d1.Date1)[Working Day] from DATE d1 where (datename(weekday,d1.Date1))not in ('Saturday','Sunday')";  // check free dates using the dates not in series and consider only working dates

                                   ResultSet rs7 = st7.executeQuery(sql3);

                                   while(rs7.next())
                                   {
                                         linelist.add(rs7.getString("Working Date").trim());
                                   }

                                   for(int k = 0; k < linelist.size(); k++)
                                   {
                                         Statement st8 = con.createStatement();

                                        String lefttime = "";

                                        ResultSet rs8 = st8.executeQuery("Select TimeLeft from DCP.dbo.TimeAllotted where DateAllotted = '"+linelist.get(k).toString().trim()+"'"); // take up one date, if time is available, come out of the loop and schedule the sale order on that date.....

                                        while(rs8.next())
                                        {
                                             lefttime = rs8.getString("TimeLeft");
                                             System.out.println("TimeLeft : " + lefttime);
                                        }

                                        if((("").equals(lefttime.trim())) || ((" ").equals(lefttime.trim())))
                                             lefttime = "960";

                                        int ftla = 0, frta = 0;

                                        lefttime = lefttime.trim();

                                        RoutingTime = RoutingTime.trim();

                                        ftla = Integer.parseInt(lefttime);
                                        System.out.println("ftla: " + ftla);

                                        frta = Integer.parseInt(RoutingTime);
                                        System.out.println("frta: " + frta);

                                        if(ftla >= frta)
                                        {
                                             Calendar calbi = Calendar.getInstance();
                                             Calendar calci = Calendar.getInstance();
                                             Calendar caldi = Calendar.getInstance();

                                             String cdateti = "18:30:00";

                                             calbi.setTime(sdft.parse(cdateti));

                                             cdateti = sdft.format(calbi.getTime());
                                             System.out.println("Fixed Date Timei: " + cdateti);

                                             String cdatetai = "09:00:00";

                                             caldi.setTime(sdft.parse(cdatetai));

                                             cdatetai = sdft.format(caldi.getTime());
                                             System.out.println("Fixed Date Time 1i: " + cdatetai);

                                             String cdatetci = sdft.format(calci.getTime());

                                             calci.setTime(sdft.parse(cdatetci));

                                            cdatetci = sdft.format(calci.getTime());
                                            System.out.println("Current Date Timei: " + cdatetci);

                                            java.util.Date cdatetdi = calbi.getTime();
                                            java.util.Date cdatetcdi = calci.getTime();
                                            java.util.Date cdatetcd1i = caldi.getTime();

                                            int minsi = (int) ((calbi.getTime().getTime() - calci.getTime().getTime()) / (60000));
                                            System.out.println("minsi : " + minsi);

                                            int TimeLefti = 0;

                                           if((cdatetcd1i.before(cdatetcdi)) && (cdatetcdi.before(cdatetdi)) && (minsi >= frta))
                                                    TimeLefti = ftla - frta;

                                            lefttime = "" + TimeLefti;

                                            if(TimeLefti >= frta)
                                            {
                                                  EDCDate = linelist.get(k).toString().trim();  
                                                  break;
                                            }
                                      }
                                }
                         }
                  }

                  calca.add(Calendar.DATE, 1);

                  // check if the date is free

                  lir = sdf1.format(calca.getTime());
                  System.out.println("lir : " + lir);

                  EDCDate = lir.trim();
             }

             else
             {
                 EDCDate = lir.trim();
             }
       }

       else
       {
          if(TimeLeft <= frt)
          {
                 calda.add(Calendar.DATE, 1);

                 cr = sdf1.format(calda.getTime());
                 System.out.println("cr : " + cr);

                 EDCDate = cr.trim();
           }

           else
           {
                   EDCDate = cr.trim();
           }
       }
  }

  else
  {
     Calendar cala = Calendar.getInstance();

     String cdate = sdf.format(cala.getTime());

     cala.setTime(sdf.parse(cdate));

     cdate = sdf1.format(cala.getTime());
     System.out.println("Current Date : " + cdate);

     cala.add(Calendar.DATE, 1);

     cdate = sdf1.format(cala.getTime());
     System.out.println("cdate : " + cdate);

     EDCDate = cdate.trim();
     }
     }

     else
     {  
         SimpleDateFormat sdft = new SimpleDateFormat("HH:mm:ss");

         st5 = con.createStatement();

         ResultSet rs5 = st5.executeQuery("Select TimeLeft from DCP.dbo.TimeAllotted where DateAllotted = '"+lir.trim()+"'");

         while(rs5.next())
         {
             tl = rs5.getString("TimeLeft");
             System.out.println("TimeLeft : " + tl);
         }

         rs5.close();

         st5.close();

         if((("").equals(tl.trim())) || ((" ").equals(tl.trim())))
              tl = "960";

         int ftl = 0, frt = 0;

         tl = tl.trim();

         RoutingTime = RoutingTime.trim();

         ftl = Integer.parseInt(tl);
         System.out.println("ftl: " + ftl);

        frt = Integer.parseInt(RoutingTime);
        System.out.println("frt: " + frt);

        if(ftl >= frt)
        {
            Calendar calb = Calendar.getInstance();
            Calendar calc = Calendar.getInstance();
            Calendar cald = Calendar.getInstance();

            String cdatet = "18:30:00";

            calb.setTime(sdft.parse(cdatet));

            cdatet = sdft.format(calb.getTime());
            System.out.println("Fixed Date Time: " + cdatet);

            String cdateta = "09:00:00";

            cald.setTime(sdft.parse(cdateta));

            cdateta = sdft.format(cald.getTime());
            System.out.println("Fixed Date Time 1: " + cdateta);

            String cdatetc = sdft.format(calc.getTime());

            calc.setTime(sdft.parse(cdatetc));

            cdatetc = sdft.format(calc.getTime());
            System.out.println("Current Date Time: " + cdatetc);

            java.util.Date cdatetd = calb.getTime();
            java.util.Date cdatetcd = calc.getTime();
            java.util.Date cdatetcd1 = cald.getTime();

            int mins = (int) ((calb.getTime().getTime() - calc.getTime().getTime()) / (60000));
                                                                        System.out.println("mins : " + mins);

            int TimeLeft = 0;

            if((cdatetcd1.before(cdatetcd)) && (cdatetcd.before(cdatetd)) && (mins >= frt))
                    TimeLeft = ftl - frt;

            if(TimeLeft <= frt)
            {
                 calca.add(Calendar.DATE, 1);

                 lir = sdf1.format(calca.getTime());
                 System.out.println("lir : " + lir);

                 EDCDate = lir.trim();
            }

            else
            {
                  EDCDate = lir.trim();
            }
       }

       else
       {
              Calendar cala = Calendar.getInstance();

              String cdate = sdf.format(cala.getTime());

              cala.setTime(sdf.parse(cdate));

              cdate = sdf1.format(cala.getTime());
              System.out.println("Current Date : " + cdate);

              cala.add(Calendar.DATE, 1);

              cdate = sdf1.format(cala.getTime());
              System.out.println("cdate : " + cdate);

              EDCDate = cdate.trim();
          }
       }
试试看
{  
字符串tl=“”;
SimpleDataFormat sdft=新SimpleDataFormat(“HH:mm:ss”);
st5=con.createStatement();
ResultSet rs5=st5.executeQuery(“从DCP.dbo.timeAllocated中选择TimeLeft,其中dateAllocated=”“+lir.trim()+”);
while(rs5.next())
{
tl=rs5.getString(“TimeLeft”);//这是那天剩下的时间
System.out.println(“TimeLeft:+tl”);
}
rs5.close();
st5.close();
如果((“”).等于(tl.trim())| |((“”).等于(tl.trim()))
tl=“960”;
int ftl=0,frt=0;
tl=tl.trim();
RoutingTime=RoutingTime.trim();//这是执行销售订单所需的时间
ftl=整数.parseInt(tl);
系统输出打印项次(“ftl:+ftl”);
frt=整数.parseInt(路由时间);
系统输出打印项次(“frt:+frt”);
如果(ftl>=frt)
{
Calendar calb=Calendar.getInstance();
Calendar calc=Calendar.getInstance();
Calendar cald=Calendar.getInstance();
字符串cdatet=“18:30:00”;
计算设置时间(sdft.parse(cdatet));
cdatet=sdft.format(calb.getTime());
System.out.println(“固定日期时间:+cdatet”);
字符串cdateta=“09:00:00”;
计算设置时间(sdft.parse(cdateta));
cdateta=sdft.format(cald.getTime());
System.out.println(“固定日期时间1:+cdateta”);
字符串cdatetc=sdft.format(calc.getTime());
计算设置时间(sdft.parse(cdatetc));
cdatetc=sdft.format(calc.getTime());
System.out.println(“当前日期时间:+cdatetc”);
java.util.Date cdatetd=calb.getTime();
java.util.Date cdatetcd=calc.getTime();
java.util.Date cdatetcd1=cald.getTime();
intmins=(int)((calb.getTime().getTime()-calc.getTime().getTime())/(60000));
System.out.println(“分钟:+min”);
int TimeLeft=0;
如果((cdatetcd1.before(cdatetcd))&&(cdatetcd.before(cdatetd))&&(分钟>=frt))
TimeLeft=ftl-frt;
语句st3=con.createStatement();
字符串dd=“”;
String sql1=“从DCP.dbo.DCPDate中选择datediff(dd、LastItemReceiptDate、CustomerRequestDate)作为'ddiff',其中SONo='”+jtfSONo.getText().trim()+“'和LineItemNo='”+jtfLineItemNo.getText().trim()+“;
ResultSet rs2=st2.executeQuery(sql1);
while(rs2.next())
{
dd=rs2.getString(“ddiff”);
}
rs2.close();
st3.close();
int-datediff=0;
datediff=Integer.parseInt(dd);
System.out.println(“datediff:+datediff”);
tl=“”+时间限制;
如果(日期差>=10)
{
如果(时间延迟=frta))
TimeLefti=ftla-frta;
lefttime=“”+TimeLefti;
如果(TimeLefti>=frta)
{
EDCDate=linelist.get(k.toString().trim();
打破
}
}
}
}
}
计算添加(日历日期,1);
//检查日期是否是免费的
lir=sdf1.format(calc.getTime());
System.out.println(“lir:+lir”);
EDCDate=lir.trim();
}
其他的
{
EDCDate=lir.trim();
}
}
其他的
{
if(TimeLeft=frt)
{
Calendar calb=Calendar.getInstance();
Calendar calc=Calendar.getInstance();
Calendar cald=Calendar.getInstance();
字符串cdatet=“18:30:00”;
计算设置时间(sdft.parse(cdatet));
cdatet=sdft.format(calb.getTime());
System.out.println(“固定日期时间:+cdatet”);
字符串cdateta=“09:00:00”;
计算设置时间(sdft.parse(cdateta));
cdateta=sdft.format(cald.getTime());
System.out.println(“固定日期时间1:+cdateta”);
字符串cdatetc=sdft.format(calc.getTime());
计算设置时间(sdft.parse(cdatetc));
cdatetc=sdft.format(calc.getTime());
System.out.println(“当前日期时间:+cdatetc”);
java.util.Date cdatetd=calb.getTime();
java.util.Date cdatetcd=calc.getTime();
java.util.Date cdatetcd1=cald.getTime();
intmins=(int)((calb.getTime().getTime()-calc.getTime().getTime())/(60000));
System.out.println(“分钟:+min”);
int TimeLeft=0;
如果((cdatetcd1.before(cdatetcd))&&(cdatetcd.before(cdatetd))&&(分钟>=frt))
TimeLeft=ftl-frt;

如果(TimeLeft在SQL中创建一个日历表。一个包含所有日期的表。然后加入它,这样你就可以返回所有日期,即使它们没有出现在你的时间分配表中。

这与Java有什么关系吗?我很困惑,这是应该用Java还是可以用SQL server自己来完成?我应该在这两者之间添加可用的日期吗我的疑问是,如果有不止一个日期不是连续的,并且中间有间隔,我将如何选择哪两个日期来查找中间的日期使用日历表(一个包含所有可用日期的表)您好,谢谢