定时将计划班次表中的数据放入实际班次表中(上)
开发工具与关键技术:Visual Studio 2015 定时任务
作者:孙水兵
撰写时间:2019年7月7
一、 达到的目的
将计划班次表中所有符合的并且实际班次表中不存在的班次信息查询出来,然后在实际班次表中生成这些表以后七天的数据(上)。将实际班次表中已经存在的班次的数据,在实际班次表中生成往后一天的数据(下)。
二、 涉及到的表格
三、 代码
1、查询出符合并且实际班次及表中不存在的计划班次ID
因为有些班次可能还没有安排车辆,因此只有计划班次表和班次循环表表中都存在计划班次ID才能在实际班次表中生成数据。先在计划班次表中连接班次循环表查询出两个表中都存在的并且班次状态为true的计划班次ID并用listPlanClassesID来接收,然后在实际班次表中查询所有的计划班次的ID并去除重复的数据,然后foreach循环所有从实际班次表中查询出的计划班次的ID,在listPlanClassesID集合中移除从实际班次表中查询出的计划班次的ID。这些计划班次ID所在的计划班次信息都是生成之后七天的数据。
2、查询出所有需要放入实际班次表中的数据
创建实体TimeClassesVo:在实体中继承计划班次表,然后声明两个list集合PassengerCarID、CirculationCode,分别用来放入班次循环表中的班次ID和循环号。
判断listPlanClassesID中的是否存在数据,若不存在,就不需要往下执行了。若存在,从班次循环表中根据计划班次ID分组,查询出计划班次ID(PlanClassesID)、循环号(CirculationCode)、车辆ID(PassengerCarID)。然后new一个集合用来接收需要放入实际班次表中的信息。foreach循环listPlanClassesID,然后在其中再foreach循环从班次循环表中查询出来的数据。然后判断两个的计划班次ID是否相等,若相等,在计划班次表中查询出相对应的数据并让车辆ID等于班次循环表中查询出来的车辆ID,循环号也是如此。然后将查询出来的数据放入前面new的一个集合中。
3、将数据保存到实际班次表中
先new一个实际班次的列表。然后foreach循环上面查询出来需要放入实际班次表中的数据的集合。然后声明获取到当前的时间。并声明一个int类型的j并让其等于1。然后写一个for循环,让i的初始值为0并且让i小于7,并让其自增。然后判断j是否大于要保存的班次信息中的循环号的最后一个值,若大于,让j等于1,否则,往下执行。new一个实际班次的变量,然后将数据赋值给对应的实际班次中的字段,其中车辆ID是循环号所对应的车辆ID。因为下标是从0开始,因此j需要减1。而发车日期是根据当前的日期来加上i获取的。now.AddDays(i):是当前日期加上i天之后的日期。然后将数据加入到listsysRealityClasses集合中。让j自增。然后在foreach循环外将数据保存到数据库。
定时调用:(在我的博客中:定时插件FluentScheduler的使用 中详细说明)
全部代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using FluentScheduler;
using TransportManagment.Models;
using TransportManagment.EntityClass;
namespace TransportManagment.Timer
{
public class createClasses : IJob
{
Models.TransportManagmentEntities myModels = new TransportManagmentEntities();
public void Execute()
{
//达到目的——可以查询出所有符合的以后七天的班次,并且班次中的车辆是根据班次循环表中的车辆来循环
//先查询出所有符合的计划班次的ID
List<int> listPlanClassesID = (from tbPlanClasses in myModels.SYS_PlanClasses
join tbClassesCirculation in myModels.SYS_ClassesCirculation
on tbPlanClasses.PlanClassesID equals tbClassesCirculation.PlanClassesID
where tbPlanClasses.ClassesState == true
select tbPlanClasses.PlanClassesID).Distinct().ToList();
//查询出所有实际班次中的计划班次的ID
List<int> listRealityClasses = (from tbRealityClasses in myModels.SYS_RealityClasses
select tbRealityClasses.PlanClassesID).Distinct().ToList();
//在查询出所有符合的计划班次的ID中移除所有实际班次中的计划班次的ID
foreach (var item in listRealityClasses)
{
listPlanClassesID.Remove(item);
}
if (listPlanClassesID.Count>0)
{
//从循环表中查询出数据
var ClassesCirculationCode = (from tbClassesCirculation in myModels.SYS_ClassesCirculation
group tbClassesCirculation by tbClassesCirculation.PlanClassesID into tbClasses
select new
{
PlanClassesID = tbClasses.Key,
CirculationCode = tbClasses.OrderBy(m => m.CirculationCode).Select(m => m.CirculationCode).ToList(),
PassengerCarID = tbClasses.OrderBy(m => m.CirculationCode).Select(m => m.PassengerCarID).ToList(),
}).ToList();
//接收需要生成的班次信息
List<TimeClassesVo> listSysPlanClasses = new List<TimeClassesVo>();
foreach (int PlanClassesID in listPlanClassesID)
{
foreach (var item in ClassesCirculationCode)
{
if (PlanClassesID == item.PlanClassesID)
{
try
{
//在计划班次表中查询出所有符合的班次信息
TimeClassesVo sysPlanClasses = (from tbPlanClasses in myModels.SYS_PlanClasses
where tbPlanClasses.PlanClassesID == item.PlanClassesID
select new TimeClassesVo
{
PlanClassesID = tbPlanClasses.PlanClassesID,
CircuitID = tbPlanClasses.CircuitID,
PassengerCarID = item.PassengerCarID,
PlanClassesCode = tbPlanClasses.PlanClassesCode,
PlanDepartTime = tbPlanClasses.PlanDepartTime,
TicketCheck = tbPlanClasses.TicketCheck,
TicketOffice = tbPlanClasses.TicketOffice,
ClassesRemark = tbPlanClasses.ClassesRemark,
CirculationCode = item.CirculationCode
}).Single();
listSysPlanClasses.Add(sysPlanClasses);
}
catch (Exception e)
{
}
}
}
}
//生成以后七天的班次并保存
List<SYS_RealityClasses> listsysRealityClasses = new List<SYS_RealityClasses>();
foreach (var ClassesInfo in listSysPlanClasses)
{
DateTime now = DateTime.Now;
int j = 1;
for (int i = 0; i < 7; i++)
{
if (j > ClassesInfo.CirculationCode.Last())
{
j = 1;
}
SYS_RealityClasses sysRealityClasses = new SYS_RealityClasses();
sysRealityClasses.ClassesTypeID = 1;
sysRealityClasses.CircuitID = ClassesInfo.CircuitID;
sysRealityClasses.PlanClassesID = ClassesInfo.PlanClassesID;
sysRealityClasses.PassengerCarID = ClassesInfo.PassengerCarID[j - 1];
sysRealityClasses.RealityClassesCode = ClassesInfo.PlanClassesCode;
sysRealityClasses.RealityDepartDate = now.AddDays(i);
sysRealityClasses.RealityDepartTime = ClassesInfo.PlanDepartTime;
sysRealityClasses.RealityTicketCheck = ClassesInfo.TicketCheck;
sysRealityClasses.RealityTicketOffice = ClassesInfo.TicketOffice;
sysRealityClasses.WhetherAttendClass = true;
listsysRealityClasses.Add(sysRealityClasses);
j++;
}
}
myModels.SYS_RealityClasses.AddRange(listsysRealityClasses);
myModels.SaveChanges();
}
}
}
}