来源: [转载]ASP.NET MVC (Razor)开发 <> 总结与分享 – sheng.chao – 博客园
过去我们使用过一些周报工具来完成项目组或部门的周报填写与考核工作,但多少有些不理想,要么功能太过简单,要么功能特别繁杂,不接地气,使用不便。
后来我们就考虑自己开发一个简单的,实用的,易用的,接地气的周报填报考核系统。
技术选型:
ASP.NET MVC + Razor 视图引擎,JQuery,数据库 SQL Server 2008 R2
微软企业库
数据访问层使用了自有ORM解决方案
这是一个比较简单和基础的系统,使用的技术也都非常基础,下面我将对开发过程进行一个简单的回顾和总结。
关于 ASP.NET MVC
开发效率非常的高,对于企业级应用来说,能够轻易的构建出健壮,完善的项目,并能够使代码拥有非常好的可读性。对于有WEB开发基础的人来说上手基本没有难度, 再加上微软的产品一向是给正常人类使用的,所以掌握起来非常的 Easy,当然,要做出出色的WEB应用,深入学习和理解是必不可少的,师傅领进门,修行在个人。
关于 Razor 视图引擎
对于企业级开发来说,Razor 最大的优点是出色的生产性与极高的代码可读性,可维护性。如果你没有接触过,可以先简单的把 Razor 理解为一种强类型的模版引擎(当然这个理解并不精确),整个 View ,就是一个 HTML 模版,在此模版中,你可以使用强类型的方式,访问与 View 关联的 Model,不论是在 HTML 代码中,还是 JavaScript 代码中;还可以通过一系列辅助类,动态输出 HTML 或者 JavaScript 代码, Razor 与这两者有极高的交互性。
关于 JQuery
没啥特别说的,生产性+++
关于ORM
在本系统中,使用了弱类型的自有ORM系统,在之前的博文中我做过详细的介绍。
表结构设计
除了基本的组织机构,角色,人员,权限这些表以外,周报的表使用了一对多的两张关进行关联,一张主表用于存储周报主要信息,子表用于存储周报的内容条目,也就是说一个周报,是多条数据组织汇总起来的。
为了方便对数据的统计分析和查询,周报表中对周次,日期,年月等做了冗余。
此外,周报系统一个通用的底层功能就是对周次的计算,直接贴代码
/// <summary> /// 获取指定日期,在为一年中为第几周 /// </summary> /// <param name="dt">指定时间</param> /// <reutrn>返回第几周</reutrn> public static int GetWeekOfYear(DateTime dt) { GregorianCalendar gc = new GregorianCalendar(); int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); return weekOfYear; } /// <summary> /// 获取指定日期为当月的第几周 /// </summary> /// <param name="dt"></param> /// <param name="weekStart"></param> /// <returns></returns> public static int GetWeekOfMonth(DateTime dt) { int weekStart = 1; //WeekStart //1表示 周一至周日 为一周 //2表示 周日至周六 为一周 DateTime FirstofMonth; FirstofMonth = Convert.ToDateTime(dt.Date.Year + "-" + dt.Date.Month + "-" + 1); int i = (int)FirstofMonth.Date.DayOfWeek; if (i == 0) { i = 7; } if (weekStart == 1) { return (dt.Date.Day + i - 2) / 7 + 1; } if (weekStart == 2) { return (dt.Date.Day + i - 1) / 7; } return 0; //错误返回值0 } /// <summary> /// 计算本周起始日期(礼拜一的日期) /// </summary> /// <param name="someDate">该周中任意一天</param> /// <returns>返回礼拜一日期,后面的具体时、分、秒和传入值相等</returns> public static DateTime CalculateFirstDateOfWeek(DateTime someDate) { int i = someDate.DayOfWeek - DayOfWeek.Monday; if (i == -1) i = 6;// i值 > = 0 ,因为枚举原因,Sunday排在最前,此时Sunday-Monday=-1,必须+7=6。 TimeSpan ts = new TimeSpan(i, 0, 0, 0); return someDate.Subtract(ts); } /// <summary> /// 计算本周结束日期(礼拜日的日期) /// </summary> /// <param name="someDate">该周中任意一天</param> /// <returns>返回礼拜日日期,后面的具体时、分、秒和传入值相等</returns> public static DateTime CalculateLastDateOfWeek(DateTime someDate) { int i = someDate.DayOfWeek - DayOfWeek.Sunday; if (i != 0) i = 7 - i;// 因为枚举原因,Sunday排在最前,相减间隔要被7减。 TimeSpan ts = new TimeSpan(i, 0, 0, 0); return someDate.Add(ts); }
最终完成功能与效果:
一:周报的填写;
1)周报中的“工作类型”、“工作任务”、“完成情况”作为基础数据自由配置;
2)“工作类型”、“工作任务”只需简单设置名称即可,无需繁杂的参与人负责人进度时间等数据,术业有专攻,这部分工作交给项目管理软件处理,此外,周报与绩效考核的使用场景不单单是项目研发,行管团队或传统企业一般不需要有“项目”的概念,只需一个工作分类即可。
3)可按组织机构或按个人对周报进行查询;
二:考核功能
1)可自由设置人员之间的考核关系,不和组织机构绑定,因为多数时候项目领导或部门领导都不会直接考核每一个人,另外也存在人员临时借调的情况,与组织机构并不一定完全一致;
2)考核项可自由配置,可根据自身需求自行添加要考核的项,如工作完成情况,工作质量,是否加班等,考核结果可设置分值,用于绩效统计;
三:统计
1)根据指定的时间段,对指定组织机构中的人员经过考核的周报进行汇总,并将考核得分累计排名,人员的工作绩效情况一目了然。
四:其它
完整的组织机构管理,人员管理,角色权限管理功能,可在此基础上继续开发。
我把已经完成的功能部署在了公网上,可以访问地址:http://e.zkebao.com 查看
可以在此地址上免费使用,我会继续更新维护它,欢迎批评指正。