自动判断转变2
问题:一般的公司员工在想要离职之前都要提前一段时间申请离职,即提前确定好离职时间,但是,在真正地离职之前,这个员工还要工作一段时间。我想要实现一个效果,就是:当有员工申请离职,确定好离职时间之后,就在员工的信息里填上离职时间,在过了这个离职时间之后这个员工的账号就不可以使用,即这个员工的账号的状态会在过了输入的离职时间之后自动的由启用变为禁用。而这个效果如何实现呢?
这里所用的方法我将它大致分为两步。
1、 第一步:控制器方法。
public ActionResult SelectDepartureUser1()
{
ReturnJson returnJson = new ReturnJson();
returnJson.State = false;
int Success = 0;
var datatime1 = DateTime.Now;
//匿名类型
var list = (from tb in myModel.S_User_b
where tb.UserStatus == true && tb.DepartureTime != null
&& tb.DepartureTime < datatime1
select tb).ToList();
for (int i = 0; i < list.Count(); i++)
{
list[i].UserStatus = false;
myModel.Entry(list[i]).State = EntityState.Modified;
Success++;
}
myModel.SaveChanges();
if (Success >0)
{
returnJson.State = true;
returnJson.Text = "近期有" + Success + "位员工离职";
}
else
{
returnJson.State = false;
}
return Json(returnJson, JsonRequestBehavior.AllowGet);
}
这里实际上就是修改数据,将状态为启用(true)的数据改为禁用(false)。
先实例化一个实体类方便记录状态以及返回提示,int声明一个变量记录成功修改的条数。
然后获取当前时间,用“DateTime”获取,通过“DateTime”获取现在时“Now”(获取到的时间和时间格式如下图)。
然后用Linq语句查询出所有过了离职时间并且状态还是为启用的数据,这里用的是匿名类型查询,
用列表查询也可以,但不能用Lambda表达式。因为查询c出的数据的可能不止一条,所以最后一定是使用“ToList”转换的。
然后用for循环给查询出的数据赋值,即修改数据,并且记录成功修改的数据的条数。然后“myModel.SaveChanges”将修改的数据保存到数据库,要记住保存到数据库的这句代码要写在for循环外。然后根据保存到数据库的状态返回实例化的实体类。
2、 第二步:页面加载事件。
$(function () {
//判断离职
var aa = new Date();
var dd = aa.getDay();
if (dd == 0 || dd == 1 || dd == 2 || dd == 3
|| dd == 4 || dd == 5 || dd == 6) {
$.post("SelectDepartureUser1", function (msg) {
if (msg.State == true) {
layer.alert(msg.Text, { icon: 6 });
}
});
}
});
因为这个效果是想要自动化的,不需要人为操作的,所以就直接把它设置为页面加载事件,当页面加载的时候自动执行这个代码。然后通过时间“Date”获取当前时,再通过“getDay”获取到星期,用一个if语句保证这段代码每一天都会执行,但这个时间事实上没有太大的作用;然后用post异步提交把控制器的方法返回的值通过提示框弹出提示。
注:之前写过一篇《自动判断转变》,同样是解决这个问题的,但是《自动判断转变》里的方法相对与这里用的方法而言,略复杂了些《自动判断转变》里的方法我将它大致分为三步,而这里所用的解决方法比较简单。有兴趣的可以去看一下《自动判断转变》。