《智百盛汽修汽配管理系统--汽修管理模块》项目研发总结

本次任务完成时间:2018年7月11日~2018年8月21日
开发工具与关键技术:MVC + SQL Server
完成模块功能: 汽修管理

一、 功能实现
1.1 登录
启动项目,进入登录页面,输入正确用名账号、密码、验证码,点击登录即可进入主页面,登录页面如下图显示:
在这里插入图片描述

1.2主页面
主页面如下图:

在这里插入图片描述
2.2 汽修管理
概述:汽修管理是整个汽修的一个重要环节,通过汽修管理功能可以科学、合理的管理整个修理过程及记录。
汽修管理主要功能如下:
在这里插入图片描述
事务流程:快速修车( 预约安排 --> 客户接待 --> 维修派工 --> 维修领料 --> 完工确认 --> 结算出厂 --> 三包索赔结算 --> 保险理赔结算 --> 售后服务 )

2.2.1预约安排
概述:预约安排主要是针对需要前来修车的客户的预约登记,录入车主、维修车辆基本信息(若已是老客户,可直接导入信息)及修理项目。
1. 登记车牌、车型、车主信息,方便后期查询车主资料。
2. 修理单号、修理类别、金额、开单日期和预约维修日期、接车人。
3. 修理项目(明细)、估计配件、其他费用、备注、保险索赔:方便维修人员进行维修领料,以及修理时的注意 事项,还有后期保险索赔的办理。
点击预约安排进入预约安排页面,如下图所示:
在这里插入图片描述

点击新增按钮清空文本框,选择车牌弹出车辆选择模态框,在模态框中可以进行新增保存的操作,也可以进行模糊查询车牌的操作,效果如下图所示:
在这里插入图片描述

选择一条车牌信息,点击‘选中’按钮或者双击表格行信息进行回填,如下图所示:
在这里插入图片描述
输入相关的文本框信息,在表格中添加相应的维修信息,如下图显示:
在这里插入图片描述

如果需要更改维修表格里面的内容,可以继续编辑表格的操作,如下图所示:
在这里插入图片描述

切换到产品材料点击添加弹出模态框,选择需要的数据然后点击‘选中’按钮如下图所示:

在这里插入图片描述

如果所需要的数据找不到可以点击‘增加’按钮,弹出增加配件模态框增加,如下图所示:
在这里插入图片描述

选中的数据会回填到主页面的配件信息表格里,也可以进行编辑表格信息,如下图所示:
在这里插入图片描述

数据没有错误,就可以点击保存按钮进行保存数据,如下图所示:
在这里插入图片描述

保存成功后提示是否进行审核预约安排,如果点击“是”后,数据不能再进行修改,如果需要改数据的话,先进行反审核操作,才能进行修改数据,如下图所示:
在这里插入图片描述
在这里插入图片描述
点击‘选择单据’按钮弹出单据记录模态框,选择一条数据可以进行回填,如下图所示:
在这里插入图片描述

审核并且未转维修单的数据可以进行转维修单操作,否则不能进行下一步操作,如下图所示:
在这里插入图片描述
在这里插入图片描述

2.2.2客户接待
概述:客户接待主要是对前来修车的客户及维修基本资料进行登记,把修理的明细录入,以便后期进行查询。
1. 登记车牌、车型、进厂里程、油量、车主信息、发动机号码:方便后期查询车主资料。
2. 修理编号、类别、金额、进厂日期和结算日期、送修人电话:方便管理人员管理,联系送修人在相应的时间来取车。
3. 修理项目(明细)、估计配件、其他费用、备注、保险索赔:方便维修人员进行维修领料,以及修理时的注意事项,还有后期保险索赔的办理。
预约安排单数据成功转维修单后,进入客户接待页面,并且把该单号车主信息进行回填,如下图所示:

在这里插入图片描述
填写相关的数据,选择相关的维修性质和金额,操作如下图:
在这里插入图片描述

当维修性质选择三包或者保险时,保险单会自动生成,如下图所示:
在这里插入图片描述
保存该单号信息后,会在单据里选择一条数据,当然也可以选择数据回填信息,如下图所示:
在这里插入图片描述
2.2.3维修派工
概述:对所有送来维修的车辆派工人去进行修理,同时方便后期查询修理项目和了解车辆维修的基本情况。
在客户接待回填数据后继续审核数据便可以转派工单继续派工,或者直接查询单据继续回填数据,如下图所示:
在这里插入图片描述
点击‘派工’按钮可以在表格里追加一行新的数据,点击‘多次派工’按钮会追加最后一行的数据,保存完整的信息后即默认已派工,否则视为未派工,该单据会在单据记录中显示,如下图所示:

在这里插入图片描述

2.2.4维修领料
概述:处理送修车辆的配件问题,可以查询送修车辆领料和退料以及领料人资料,以便后期结算。
1. 常用字段说明(编辑框操作说明请参见编辑框)
2. 领料员:记录是哪一位员工领的,领的什么配件,所在仓库及数量。
3. 业务操作说明:
4. 通过【查找单据】选择需要领用配件的单据号;
5. 点击【新增领料明细】选择需要领取的配件名称;
6. 如果该单据在接车登记过程中已经录入了估计配件,则可以通过【导入估计配件】选择已录入的配件;
7. 对不需要的配件可选择后点击【删除领料明细】进行删除;

点击维修领料,进入维修领料页面,如下图所示:
在这里插入图片描述
选择一条未领料的数据,然后点击‘领料’按钮进行领料操作,进入领料页面,如下图所示:
在这里插入图片描述
点击‘导入估计配件’弹出该单据之前所要的配件信息模态框,选择数据进行回填,如下图所示:

在这里插入图片描述
在这里插入图片描述
填写完整信息进行保存操作后,即可领料,相应的仓库会减掉相应的配件数,当然如果仓库没有该配件,是无法继续领料的操作的
退料和领料的操作基本一致,参考即可

2.2.5完工确认
概述:在送修车辆维修完工之后,需要对车辆进行出厂质检,在[完工审核]进行完工审核操作。如图:
1. 业务操作说明:
2. 完工审核:点击【查找单据】菜单,根据送修车辆的基本信息找到需要审核的车辆,点击【完工审核】菜单,然后【保存】完成审核。
3. 取消完工:如果需要对已完工的车辆进行返厂维修或者审核取消操作,点击【取消审核】然后【保存】完成取消。

在这里插入图片描述

2.2.6结算出厂
概述:对已经完成审核的车辆进行结算出厂。如果该维修单涉及到三包索赔或者保险,需要通过此处填写索赔信息。
1. 业务操作说明:
2. 点击【结算出厂】,会弹出查询窗口,选择你所要结算的车辆并且双击;
3. 点击【结算】,会弹出结算单进行收款,填上收款金额,入账方式,点击【确定】入账成功,最后保存。
点击结算出厂,进入结算出厂页面,默认弹出模态框选择一条结算的数据,如下图所示:
在这里插入图片描述
在这里插入图片描述

回填相关信息,确保信息无误后进行审核操作,未审核的数据是不能进行收款操作的,如果是已审核的数据便可以进行收款操作,如下图所示:
在这里插入图片描述
点击保存即可以进行收款

如果该单据有三包或者保险,要进行另外进行收款操作,如下图所示:
在这里插入图片描述
2.2.7 三包索赔结算
概述:对车辆进行三包理赔结算,填写好开单日期,维修单号,保险公司编号,保险公司名称等。
1. 业务操作说明:
2. 点击【查询单据】选择需要进行三包索赔的单据;
3. 确认金额无误后,点击【入账】在弹出入账窗口中输入入账金额进行保存;
4. 入账成功后,需要点击【审核】当前的单据进行审核。如果已审核单据,可以通过【反审核】进行再次入账操作;
可以点击三包索赔结算或者从结算出厂里‘三包索赔收款’按钮进入页面,进行回填数据,如下图所示:

在这里插入图片描述
在这里插入图片描述
收款操作和结算出厂的收款操作基本一致,参考即可

2.2.7 保险理赔结算
概述:对投保车辆进行保险理赔结算,填写好开单日期,维修单号,保险公司编号,保险公司名称等。
1. 业务操作说明:
2. 点击【查询单据】选择需要进行三包索赔的单据;
3. 选择相应的保险公司,录入理赔员工,报案编号,该车辆理赔的保单号,保单金额等信息后,点击保存。
4. 在确认金额无误后,点击【入账】在弹出入账窗口中输入入账金额进行保存;
5. 入账成功后,需要点击【审核】当前的单据进行审核。如果已审核单据,可以通过【反审核】进行再次入账操作;
具体操作参考三包索赔结算即可

2.2.8快速修车
概述:快速修车的功能是为了解决业务不是特别复杂的维修登记过程,如果汽修厂没有严格标准的前台接车、维修派工,仓库领料,维修接单处理,财务结算等独立的业务岗位,可以通过快速修车功能同窗口、一体化解决。
[快速修车]是将[客户接待]到[维修领料]整合到一起,实现快速修车登记管理的目的。
基本操作和前面的几大模块操作基本一致
点击快速修车进入快速修车页面,如下图所示在这里插入图片描述

二、相关业务表和关系
在这里插入图片描述

三、经典代码
同时从页面传到控制台里的数据(新增的数据和删除的数据)进行处理的代码:

 public ActionResult ListPredate(List<PW_Predate> listPredate, List<SYS_PreRepairItemDetail> listPreRepairItem,List<SYS_PreProductDetail> listPreProduct,
          List<SYS_PreOtherCostDetail> listPreOtherCost )
        {
            var PredateID = 0;
            try
            {
                //预约表
                if (listPredate[0].PredateID == 0)
                {
                    myModels.PW_Predate.Add(listPredate[0]);
                }
                else
                {
                    myModels.Entry(listPredate[0]).State = System.Data.Entity.EntityState.Modified;
                }
                if (myModels.SaveChanges() > 0)
                {
                    PredateID = listPredate[0].PredateID;
                    if (listPreRepairItem != null)
                    {   //维修明细表
                        List<int> oldID = new List<int>();//原来ID
                        List<int> newID = new List<int>();//新ID
                        List<int> listdelectID = new List<int>();//需要删除的ID集合
                        var list = myModels.SYS_PreRepairItemDetail.Where(m => m.PredateID == PredateID).Select(m => new { m.PreRepairItemDetailID }).ToList();
                        foreach (var item in list)
                        {
                            oldID.Add(item.PreRepairItemDetailID);
                        }
                        for (int i = 0; i < listPreRepairItem.Count; i++)
                        {
                            listPreRepairItem[i].PredateID = PredateID;
                            if (listPreRepairItem[i].PreRepairItemDetailID == 0)
                            {
                                myModels.SYS_PreRepairItemDetail.Add(listPreRepairItem[i]);//新增
                            }
                            else
                            {
                                newID.Add(listPreRepairItem[i].PreRepairItemDetailID);
                                myModels.Entry(listPreRepairItem[i]).State = System.Data.Entity.EntityState.Modified;//修改
                            }
                        }
                        listdelectID = oldID.Except(newID).ToList();//从某集合中删除其与另一个集合中相同的项;其实这个说简单点就是某集合中独有的元素(差集)
                        foreach (var item in listdelectID)
                        {
                            var listdelect = myModels.SYS_PreRepairItemDetail.Where(m => m.PreRepairItemDetailID == item).Single();//删除
                            myModels.SYS_PreRepairItemDetail.Remove(listdelect);
                        }
                    }
                    else {
                        var listdelect = myModels.SYS_PreRepairItemDetail.Where(m => m.PredateID == PredateID).ToList();//删除全部
                        myModels.SYS_PreRepairItemDetail.RemoveRange(listdelect);
                    }
                    if (listPreProduct != null)
                    { 
                        //配件明细表
                        List<int> oldID = new List<int>();//原来ID
                        List<int> newID = new List<int>();//新ID
                        List<int> listdelectID = new List<int>();//需要删除的ID集合
                        var list = myModels.SYS_PreProductDetail.Where(m => m.PredateID == PredateID).Select(m => new { m.PreProductDetailID }).ToList();
                        foreach (var item in list)
                        {
                            oldID.Add(item.PreProductDetailID);
                        }
                        for (int i = 0; i < listPreProduct.Count; i++)
                        {
                            listPreProduct[i].PredateID = PredateID;
                            if (listPreProduct[i].PreProductDetailID == 0)
                            {
                                myModels.SYS_PreProductDetail.Add(listPreProduct[i]);//新增
                            }
                            else
                            {
                                newID.Add(listPreProduct[i].PreProductDetailID);
                                myModels.Entry(listPreProduct[i]).State = System.Data.Entity.EntityState.Modified;//修改
                            }
                        }
                        listdelectID = oldID.Except(newID).ToList();//从某集合中删除其与另一个集合中相同的项;其实这个说简单点就是某集合中独有的元素(差集)
                        foreach (var item in listdelectID)
                        {
                            var listdelect = myModels.SYS_PreProductDetail.Where(m => m.PreProductDetailID == item).Single();//删除
                            myModels.SYS_PreProductDetail.Remove(listdelect);
                        }
                    }
                    else
                    {
                        var listdelect = myModels.SYS_PreProductDetail.Where(m => m.PredateID == PredateID).ToList();//删除全部
                        myModels.SYS_PreProductDetail.RemoveRange(listdelect);
                    }
                    if (listPreOtherCost != null)
                    {
                        //费用明细表
                        List<int> oldID = new List<int>();//原来ID
                        List<int> newID = new List<int>();//新ID
                        List<int> listdelectID = new List<int>();//需要删除的ID集合
                        var list = myModels.SYS_PreOtherCostDetail.Where(m => m.PredateID == PredateID).Select(m => new { m.PreOtherCostDetailID }).ToList();
                        foreach (var item in list)
                        {
                            oldID.Add(item.PreOtherCostDetailID);
                        }
                        for (int i = 0; i < listPreOtherCost.Count; i++)
                        {
                            listPreOtherCost[i].PredateID = PredateID;
                            if (listPreOtherCost[i].PreOtherCostDetailID == 0)
                            {
                                myModels.SYS_PreOtherCostDetail.Add(listPreOtherCost[i]);//新增
                            }
                            else
                            {
                                newID.Add(listPreOtherCost[i].PreOtherCostDetailID);
                                myModels.Entry(listPreOtherCost[i]).State = System.Data.Entity.EntityState.Modified;//修改
                            }
                        }
                        listdelectID = oldID.Except(newID).ToList();//从某集合中删除其与另一个集合中相同的项;其实这个说简单点就是某集合中独有的元素(差集)
                        foreach (var item in listdelectID)
                        {
                            var listdelect = myModels.SYS_PreOtherCostDetail.Where(m => m.PreOtherCostDetailID == item).Single();//删除
                            myModels.SYS_PreOtherCostDetail.Remove(listdelect);
                        }
                    }
                    else
                    {
                        var listdelect = myModels.SYS_PreOtherCostDetail.Where(m => m.PredateID == PredateID).ToList();//删除全部
                        myModels.SYS_PreOtherCostDetail.RemoveRange(listdelect);
                    }
                    myModels.SaveChanges();
                }
                else
                {
                    return Json(false, JsonRequestBehavior.AllowGet);
                }
            }
            catch (Exception)
            {
                return Json(false, JsonRequestBehavior.AllowGet);
            }
            return Json(PredateID, JsonRequestBehavior.AllowGet);
        }

四、开发总结

刚刚做这个项目的时候一脸懵逼,业务逻辑搞不懂,数据库关系理不清,后来通过操作了几遍该系统的软件思路才慢慢清晰起来,当然这个系统的业务逻辑大大提升了我对数据库关系的理解,还有一些代码的技巧,使我对功能的流程开发、文件流输出等技术有所提升;在做项目期间有时候对某些功能过于着急,一心急于求成,思路反而越来越乱,导致其他功能也不能做好,希望以后时刻注意,也要努力学习技术和放好心态;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
模块功能说明: 1.系统管理: ⑴ 管理用户:包括用户的添加、修改、删除,退出 ⑵ 修改密码:包括旧密码、新密码及新密码的确认 ⑶ 注销用户:退回到登陆模式 ⑷ 退出系统:退出 2.基本信息: ⑴ 零件基本信息:包括的功能有零件的添加、修改、删除、查询 ⑵ 汽车基本信息:包括的功能有汽车的添加、修改、删除、查询 ⑶ 修理工基本信息:包括的功能有修理工的添加、修改、删除、查询 3.表单操作: ⑴ 修车登记单:包括的功能有修车登记的添加、修改、删除、查询 ⑵ 汽车修理单:包括的功能有汽车修理的添加、修改、删除、查询 ⑶ 零件入库单:包括的功能有零件入库的添加、修改、删除、查询 ⑷ 零件领用单:包括的功能有零件领用的添加、修改、删除、查询 ⑸ 修车发票:包括的功能有修车发票的添加、修改、删除、查询 4.帐册操作 ⑴ 汽车登记册:包括的功能有汽车的添加、修改、删除、查询 ⑵ 修理工名册:包括的功能有修理工的添加、修改、删除、查询 ⑶ 汽车修理台账:自动汽车修理生成台账,有打印和查询的功能 ⑷ 库存零件台账:自动库存零件生成台账,可以更新和查询 5.报表操作 ⑴ 零件耗用月报表:自动生成,有打印和查询功能 ⑵ 员工工资月报表:自动生成,有打印和查询功能 ⑶ 零件定货计划表:自动生成,有打印和查询功能 6.帮助 ⑴ 帮助文档:用户操作手册 ⑵ 关于该系统:版本说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值