Java 需要检查for循环中的可用日期并安排销售订单
我有一个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中的函数是这样的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
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自己来完成?我应该在这两者之间添加可用的日期吗我的疑问是,如果有不止一个日期不是连续的,并且中间有间隔,我将如何选择哪两个日期来查找中间的日期使用日历表(一个包含所有可用日期的表)您好,谢谢