C# Asp.Net MVC 欧亚汽车维修管理系统项目总结
欧亚汽车维修企业管理系统模块(我负责的部分):
(1)系统管理:包含了权限的登录
(2)维修:包括业务受理(预约维修、一般维修、保险业务、公务业务)、检 验报告(都是在一般维修界面的切换选项卡里)
(3)零件:包含零件入库(采购入库、订货入库、其他入库、出库退货(销售或者领料回来退回来入库))、订货(为订货入库而用)、零件出库(销售出库、领料出库)、。
(4)财务管理:一般结算、收款登记、付款登记
(5)档案管理:零件目录、车辆客户、供应商、工具、司机档案
下面演示一个多表新增的功能(选取零件销售出库的新增)
控制器的代码:加载进去的时候就将出库单号显示出来:
public ActionResult SaleLeave()
{
try
{
S_EnterStoreType listEntertype = (from tbEntertype in myModel.S_EnterStoreType
where tbEntertype.EnterStoreTypeID == 4
select tbEntertype).Single();
string strEnterStoreType = listEntertype.EnterStoreType;
Session["EnterStoreType"] = strEnterStoreType;
int intEnterStoreTypeID = listEntertype.EnterStoreTypeID;
Session["EnterStoreTypeID"] = intEnterStoreTypeID;
ViewBag.EnterStoreType = strEnterStoreType;
string strUserNuber = Session["UserNuber"].ToString();
int strUserID = Convert.ToInt32(Session["UserID"]);
string ChuKuDanHao = "CK";
string XiaoShouDanHao = "FP";
R_MaxNumbers MaxDanHao = (from tbDanHao in myModel.R_MaxNumbers
select tbDanHao).SingleOrDefault();
string strMaxDanJuShu = MaxDanHao.LeaveStoreBillNumber.ToString().Trim();
int intMaxDanJuShu = Convert.ToInt32(strMaxDanJuShu) + 1;
string MaxDanJuShu = intMaxDanJuShu.ToString().Trim();
string Month = DateTime.Now.Month.ToString().Length == 1 ?
"0" + DateTime.Now.Month.ToString()
: DateTime.Now.Month.ToString();
string Day = DateTime.Now.Day.ToString().Length == 1 ?
"0" + DateTime.Now.Day.ToString()
: DateTime.Now.Day.ToString();
XiaoShouDanHao += (DateTime.Now.Year.ToString()
+ Month + Day);
ChuKuDanHao += (DateTime.Now.Year.ToString()
+ Month + Day);
for (int i = MaxDanJuShu.Length; i < 4; i++)
{
MaxDanJuShu = "0" + MaxDanJuShu;
}
XiaoShouDanHao += MaxDanJuShu;
ChuKuDanHao += MaxDanJuShu;
Session["LeaveStoreBillNumber"] = intMaxDanJuShu;
ViewBag.XiaoShouDanHao = XiaoShouDanHao;
ViewBag.ChuKuDanHao = ChuKuDanHao;
ViewBag.UserNuber = strUserNuber;
}
catch (Exception)
{
//无法获取session 重定向到登录界面 重新登录
return Redirect("/Main/Login");
}
return View();
}
新增的代码:(出库的数据新增一条然后库存的数量就相应地减少)
public ActionResult InsertXiaoShou(B_ComeStore BcomeStore,B_ComeStoreDetail BComeDetail)
{
string strMsg = "fail";
int ComeStoreId;
int UserID = Convert.ToInt32(Session["UserID"]);
int PartID = Convert.ToInt32(Session["PartsID"]);
int CustomerID = Convert.ToInt32(Session["CustomerID"]);
int LeaveNumber = Convert.ToInt32(Session["LeaveStoreBillNumber"]);
decimal ShuLiang = Convert.ToDecimal(Session["EnterAcount"]);
int EnterDetailId = Convert.ToInt32(Session["EnterStoreDetailID"]);
try
{
if (BcomeStore.ComeStoreID > 0 && BComeDetail.ComeStoreDetailID > 0)
{
myModel.Entry(BcomeStore).State = System.Data.Entity.EntityState.Modified;
myModel.Entry(BComeDetail).State = System.Data.Entity.EntityState.Modified;
}
else
{
BcomeStore.UserID = UserID;
BcomeStore.CustomerID = CustomerID;
myModel.B_ComeStore.Add(BcomeStore);
if (BcomeStore.Audit != true && BcomeStore.Gathering != true)
{
BcomeStore.Audit = false;
BcomeStore.Gathering = false;
}
if (myModel.SaveChanges() > 0)
{
ComeStoreId = BcomeStore.ComeStoreID;
BComeDetail.ComeStoreID = ComeStoreId;
BComeDetail.PartsID = PartID;
myModel.B_ComeStoreDetail.Add(BComeDetail);
}
R_MaxNumbers MaxDanHao = (from tbHeTong in myModel.R_MaxNumbers
select tbHeTong).SingleOrDefault();
MaxDanHao.LeaveStoreBillNumber = LeaveNumber;
myModel.Entry(MaxDanHao).State = System.Data.Entity.EntityState.Modified;
if (myModel.SaveChanges() > 0)
{
B_EnterStoreDetailTable priceEnt = (from tbEnter in myModel.B_EnterStoreDetailTable
where tbEnter.EnterStoreDetailID == EnterDetailId
select tbEnter).SingleOrDefault();
ShuLiang = (decimal)priceEnt.EnterAcount;
priceEnt.EnterAcount = priceEnt.EnterAcount - BComeDetail.Acount;
myModel.Entry(priceEnt).State = System.Data.Entity.EntityState.Modified;
}
}
myModel.SaveChanges();
strMsg = "success";
}
catch(Exception e)
{
Console.WriteLine(e);
}
return Json(strMsg,JsonRequestBehavior.AllowGet);
}
页面是用form表单写的
js的代码:
function SaveLeave() {
var CustomerReferred = $('#SaleLeaveForm [name="CustomerReferred"]').val();//客户简称
var Audit = $('#SaleLeaveForm [name="Audit"]').prop('checked');//审核否
var Gathering = $('#SaleLeaveForm [name="Gathering"]').prop('checked');//收款否
if (CustomerReferred != null && Audit != null && Gathering != null)
{
var layerIndex = layer.load(0);//显示加载层
$("#SaleLeaveForm").ajaxSubmit(function (data) {
layer.close(layerIndex);//关闭加载层
layer.alert(data, { title: '提示' });
if (data == "success") {
alert("出库新增成功")
}
});
}
}
出库单号、发票代码、发票号码都是第一段的代码加载页面的时候就自动生成这些单号
最后,做项目的心得:
欧亚汽车维修管理系统是我第二次做的练习项目,我觉得这一次的项目比第一次做鹏成医院管理的那一个进步一些,逻辑思维得到提升
我们这个阶段开发中遇到的问题基本都是一些很基础的问题,比如说我们使用的layer这个控件,引用这个控件比以前的自己编写分页的代码,这个方便很多,因为很多内容这个控件都已经封装好了的,
但是查询的时候必须要添加多一句倒叙(orderby tbCome.ComeStoreID descending)这一句代码才会正常查询出来,一开始我不懂,弄了很久,也是通过做这个项目我才知道,虽然上课的期间敲过代码,但是都不记得,所以做项目真的对我们成长很重要,更加进一步逼着自己去理解去学习这个代码的作用,去运用这个功能的代码在自己的项目上。引用这个控件的一个最大的难点就是在于表格的编辑之后进行数据获取的新增保存,这个功能困惑了我很久,经过和同桌讨论都得不出结果,后来就在网上搜索datatables-editable这一个插件实现了表格的编辑以及新增保存修改的功能,从这件事我得出了一个结论能够自己考虑的问题要尽量自己解决,解决不了找同学讨论,刚好我的同桌他的逻辑思维比较强一些,还有解决的方法经验也丰富一些,所以我就常常找我的同桌讨论,这样我们都能得到提高,最后都解决不了我们再找老师帮忙。编辑代码的过程中最重要的细心还要多思考,从多个角度去看问题,遇到错误不要慌张,一步步地分析问题。之前我遇到一个和简单的问题,就是在新增传输物理地址的错误,找了两节课都找不出来,就是action="/Finance/PaymentRegister/InsertPayment",第一次action这个接口弹出来的是uiactions这个,只是删掉了前两个字母导致的错误,一直没有意识到时这个错误,找错误的时候先分析是不是已进入界面就报错,不是就继续找进一步的代码,后来发现新增的时候不跳入这个地址,后来找到这个地址才发现是action写错了。
当出库,退货数量的改变也是卡了我很久,一开始想不明白出库要怎么样编程新增一条数据的时候入库的数量就相对应的减少,后来灵感一来,运用之前WCF学过的计算的代码加减不就得了嘛?后来通过这种方法就把功能实现了。在编辑的代码的过程中多站在客户的角度去思考,以及我们生活中去购买车或者修车的过程是怎么样走的?这样的界面,这样的功能是否合理,是否简单易懂?如果在编写代码的过程中能够这样多考虑,自己的代码变得更加严谨一些。
最后很感谢学校提供了做练习项目这样一个平台,严格要求我们去学习。很感谢同桌对我耐心的指导,
老师的耐心教导。通过这个项目,我对代码又更加地熟悉了,希望下一次的学习我能通过这一次的项目更加有目的性地去学习。