票证下发

1.在视图写查询开始票号的方法

由于之前已经在数据库中加入了测试数据,所有我们可以在原来的票号加一上继续使用
1.在写具体方法之前,先编写全局变量
(1)用来存储加载模块的全局变量,以便全局使用
var layer, layuiTable;
(2)用来存储实例化的表格的全局变量
var TabTicket;
2.编写页面加载事件,用来存储表头渲染以及数据绑定方法
KaTeX parse error: Expected '}', got '#' at position 301: …able的id elem: "#̲tabTicket", (5)….post(“SelectUser”, function (data) {

        //});

(10)工号下拉框数据绑定方法
createSelect(“UserID(工号下拉框的id)”, “SelectUser(控制器查找数据的方法)”);

(11)开始票号数据绑定
$.get("@Url.Content("~/OthersMaintenance/IssuanceTicket/SelectStartTicketNo(控制器地址)")", function (num(传输数据的参数)) {

            $("#startTicketNo(开始票号框内的id)").val(num);
        })
    });

3.表格多条件查询方法
function tabSearchTicket() {
(1)获取工号下拉框的值
var userID = $("#UserID(下拉框的id)").val();
(2)对userID进行检查,如果是空就设置成零(如果是请选择,就要判断当前用户下面的数据)
if (userID==""||userID==null) {
userID = 0;
}
(3)多条件查询参数设置(对表格进行重新加载,实现多条件查询 reload(表格初始化是的ID,重新加载时的参数))
TabTicket = layuiTable.reload(“tabTicket”, {
url: ‘SelectTicketByUserId’,(控制器地址)
(4)指定分页信息
page: {
(5)让表格回到第一页
curr:1,
},
where: {
(6)加载需要传递的数据
userID:parseInt(userID),
}
})
}

4.工号改变时,票号改变事件
$("#UserID").change(function () {
tabSearchTicket();(直接调用表格多条件查询方法)
});
5.票证下发点击执行,添加数据
function InsetTicket() {
(1)获取票号
var userID = $("#UserID").val();(获取选择工号的值)
var votes = $("#Votes").val();(获取开始票号的框内的值)
(2)验证是否选择了工号
if (userID0) {
layer.alert(“请选择工号”);
return false;
}
(3)验证下发的票数是否为空
if (votes
"") {
layer.alert(“请输入下发的票号数量”);
return false;
}
6.将数据进行提交(请求后台)
(1)post数据请求
$.post("@Url.Content("~/OthersMaintenance/IssuanceTicket/InsertTicket")", {
UserID: parseInt(userID),(配置参数)
votes: parseInt(votes),
}, function (msg) {
if (msg.State) {
(1)成功
layer.alert(msg.Text, { icon: 6 });
(2)清除下发数
$("#Votes").val("");
(3)重新查询表格
tabSearchTicket();
(4)添加完数据后,票号需要更新,重新生成票号(开始票号数据绑定)
$.get("@Url.Content("~/OthersMaintenance/IssuanceTicket/SelectStartTicketNo")", function (num) {
$("#startTicketNo").val(num);
})
} else {
(5)失败
layer.alert(msg.Text, { icon: 5 });
}

            })
        }

2.控制器方法(视图调用)
1.实例化模型对象
Models.FJDPXTEntities myModel = new FJDPXTEntities();
2.跳转到登录页面的方法
public ActionResult Index()
{
//检查是否登录
try
{
int userID = Convert.ToInt32(Session[“userId”].ToString());(检查是否为当前用户)
}
catch (Exception e)
{
Console.WriteLine(e);
(1)如果出现异常就说明没有登录,重定向到登录页面
return Redirect(Url.Content("~/Main/Login"));
}(2)返回视图
return View();
}
3.根据用户ID查询出用户的下级员工及自己
public ActionResult SelectUser()
{
(1)通过session获取当前用户的id
int userID = Convert.ToInt32(Session[“UserID”].ToString());
(2)根据用户id查询出当前用户的信息
S_User dbUser = myModel.S_User.SingleOrDefault(o => o.userID == userID);
(3)查询所有下级用户组(linq递归查询),查询与userGroupID相同的GetChildGroup方法里面的superiorUserGroupID
//定义childGroups变量,用来存储查询出的数据
List<S_UserGroup> childGroups = GetChildGroup(调用递归查询下级用户的方法)(dbUser.userGroupID).ToList();
(4)/查询出所有的用户组id,根据id将用户查询出来(需要调用查询用户组方法)
List childGroupIds = childGroups.Select(o => o.userGroupID).ToList();
(5)根据用户表,查询员工
var list = (from tbUser in myModel.S_User
(将用户表与用户组表进行联表查询)
join tbUserGroup in myModel.S_UserGroup on tbUser.userGroupID equals tbUserGroup.userGroupID
where childGroupIds.Contains(tbUser.userGroupID)
select new {
(网页用户组下拉框的文字样式)
id= tbUser.userID,
text=tbUser.jobNumber+""+tbUser.userName
}).ToList();
(6)添加自己的信息到列表
list.Add(new
{
id = dbUser.userID,
text = dbUser.jobNumber + “” + dbUser.userName,
});
(7)根据id进行排序,OrderBy进行排序
list = list.OrderBy(m => m.id).ToList();
(8)将用户保存到session中,供列表查询时使用
List groupUserIdList = new List();
foreach (var u in list)
{
groupUserIdList.Add(u.id);
}
Session[“groupUserIdList”] = groupUserIdList;
return Json(list, JsonRequestBehavior.AllowGet);
}
4.递归查询下级用户
private IEnumerable<S_UserGroup>GetChildGroup(int superiorUserGroupId)
{
(1)查询二级用户(从S_UserGroup中查询,查询superiorUserGroupID是否与输入的值相同,相同则输出)
var query = (from tbUserGroup in myModel.S_UserGroup
where tbUserGroup.superiorUserGroupID == superiorUserGroupId
select tbUserGroup).ToList();
(2)将query变量里面的方法反复查询
(调用GetChildGroup方法本身,进行多次递归)
(利用userGroupID进行查询,查询与它相同的superiorUserGroupID)
IEnumerable<S_UserGroup> childGroup = query.ToList()
.SelectMany(m => GetChildGroup(反复查询该方法)(m.userGroupID));
(3)将query和childGroup变量查询出的结果合并在一起
return query.ToList().Concat(childGroup);
}
5.查询开始票号(上次结束票号加一)
public ActionResult SelectStartTicketNo()
{
(1)上一次结束的票号
(通过ticketID使用OrderByDescending方法,对id进行降序排列,)
(然后通过FirstOrDefault方法,将降序后的endTicketNo的第一个元素获取到)
string endTicketNo = myModel.S_Ticket.
OrderByDescending(m => m.ticketID).
FirstOrDefault().endTicketNo;
(2)开始的票数
(下次开始的票号为上次结束的票号+1)
int startTicketNo = Convert.ToInt32(endTicketNo) + 1;
(3)由于开始票号类要被多次引用,使用需要session保存数据,方便调用
Session[“startNo”] = startTicketNo;
(4)通过PadLeft这个方法限制票号长度以及让其自动补零
string strStartTicketNo = “E781-” + startTicketNo.ToString().PadLeft(10, ‘0’);
return Json(strStartTicketNo, JsonRequestBehavior.AllowGet);
}
6.根据userID查询出票号信息
public ActionResult SelectTicketByUserId(LayuiTablePage layuiTablePage, int userID )
{
(1)将S_Ticket、S_User、S_UserGroup进行联表查询,在将查询到的数据放到
List list = (from tbTicket in myModel.S_Ticket
join tbUser in myModel.S_User on tbTicket.userID equals tbUser.userID
join tbUserGroup in myModel.S_UserGroup on tbUser.userGroupID equals tbUserGroup.userGroupID
select new TicketVo {
ticketID = tbTicket.ticketID,//票号Id
strStartTicketNo = tbTicket.startTicketNo,
strEndTicketNo = tbTicket.endTicketNo,
strCurrTicketNo = tbTicket.currentTicketNo,
(2)将ticketdata换成strOpTime,因为定义那边已经对该数据进行了定义
strOpTime = tbTicket.ticketDate.ToString(),
userGroup = tbUserGroup.userGroupNumber,
userName = tbUser.userName,//
jobNumber = tbUser.jobNumber,//用户工号
userID = tbUser.userID,//用id
}).ToList();
(3)分页之前,先对数据进行筛选
if (userID==0)
{
(userid 为0时查询下拉框中所有的用户(自己和下级))
List groupUserIdList = Session[“groupUserIdList”] as List;
list=list.Where(m => groupUserIdList.Contains(m.userID.Value)).ToList();
}
else
{
(不为0时指定用户)
list = list.Where(m => m.userID == userID).ToList();
}

        (4)分页查询数据
        List<TicketVo> listTicket = list.OrderBy(m => m.ticketID).
            Skip(layuiTablePage.GetStartIndex()).
            Take(layuiTablePage.limit).ToList();
      (5)查询数据总条数
        int intTotalRow = list.Count();
        LayuiTableData<TicketVo> layuiTableDate = new LayuiTableData<TicketVo>()
        {
            count = intTotalRow,
            data= listTicket,
        };
       (6)返回对象
        return Json(layuiTableDate, JsonRequestBehavior.AllowGet);
        
    }

7.下发票号
public ActionResult InsertTicket(int UserID,int votes)
{(返回函数)
ReturnJson msg = new ReturnJson();
(1)获取保存在session中的开始票号
int startTicketNo = Convert.ToInt32(Session[“startNo”]);
(2)数据验证 用户id必须大于零
if (UserID>0)
{
if (votes>0)
{
S_Ticket modTicket = new S_Ticket();
(开始票号赋值)
modTicket.startTicketNo = startTicketNo.ToString().PadLeft(10,‘0’);
(结束票号赋值)
modTicket.endTicketNo = (startTicketNo + votes-1).ToString().PadLeft(10, ‘0’);
(当前时间)
modTicket.ticketDate = DateTime.Now;
(当前票号赋值,由于没有使用,当前票号就是开始票号)
modTicket.currentTicketNo= startTicketNo.ToString().PadLeft(10, ‘0’);
(目标用户id赋值)
modTicket.userID = UserID;
(是否启用,默认启用)
modTicket.isEnable = true;
myModel.S_Ticket.Add(modTicket);
if (myModel.SaveChanges()>0)
{
msg.State = true;
msg.Text = “力鸡化成功”;

                }
                else
                {
                    msg.Text = "驴德化成功";

                }
            }
            else
            {
                msg.Text = "请选择下发的票数";
            }
        }
        else
        {
            msg.Text = "请选择下发工号";
        }

(3)返回对象
return Json(msg, JsonRequestBehavior.AllowGet);
}

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值