1.1
编写目的
项目开发总结报告的编制是为了总结本项目开发工作的经验,说明
实际取得的开发结果以及对整个开发工作的各个方面的评价。
本文档预期的读者为软件开发人员
项目名称:云悦智销
系统名称:云悦智销
英文名称:RyFit
生产率:
①用来表示产出与投入比率的术语(总产出除以劳动投入是劳动生产
率)。如果相同数量的投入生产了更多的产出,则生产率就增长了。劳
动生产率的增长是由于技术进步、劳动技能的改善和资本深化。
②概括在生物的生产过程中有关物质循环或能量转换速度的各个方面的
术语。也有译为生产力的。过去这个词,具有生产速度(生产量)或潜
在生产能力的含意,进而也含有土地的生产力、肥沃度(ferti-lity)
或循环率等各种意义,非常混乱,国际上给予了上述的定义,而且提出
了有关不使用这个词的附文。可是直到现在,这个词仍是混乱地被较广
泛地使用,因此,附文中所使用的生产率一词的意义是什么,只能从附
文的前后内容加以判断。G.L.Clarke(1946)认为这个词多半用来表示
关于现存量、生产速度(生产量)和收获量的任何一个大小范围的
云悦销(RyFit)软件是一款通用性极强的商业企业进销存管理系统,软件囊括了商业企业日常经营管理的全过程。软件适用于食品、服装、保健品、电子、电器、物资、化妆品等商业领域的企业。软件覆盖商业企业商品的采购、销售、库存、管理决策支持等各个环节,软件的各个模块操作界面简单、实用,软件帮助系统图文并茂,让用户可以在最短的时间内掌握软件的使用方法,助用户生意早日更上一层楼。
软件的采购管理、销售管理、库存管理功能强大,灵活,同时为用户提供方便实用的模糊查询功能,用户可以在最短时间内找到自己所需要的信息。软件系统采用流行的B/S结构,任何用户只需要通过浏览器登录即可进入使用系统。软件采用模块级安全管理,系统安全性高。软件对在使用过程中可能出现的外部意外情况,如断电、网络中断等均进行了妥善处理,可以确保用户数据的完整性,同时在外部故障消除后,系统仍能继续操作。
系统软件采用Java平台进行开发并实现,用户数据库支持MY SQL、Oracle、SQL Server等各种主流数据库。
人员组成(Java开发,实施人员)
管理员(项目经理,产品经理)
团队(3-5人)
Java开发员是必需有的
Java开发人员(3个左右)
历时5个月
统一软件平台实现对下属各商户网点的商品、销售、采购等各项管理;
商品管理:可以实现对商品明细的销售管理、简单成本管理;
门店的管理:实现多门店的经营状况、结算等管理;
报表管理:实现各种报表管理;
查询管理:实现企业领导者对经营状况的实时查询管理;
包括销售订单、销售出货、客户退货、部门零售以及统计查询等功能。
基本流程以客户先下订单,后出货的日常业务需求,系统自动跟踪每张单据的完成情况。
支持一张销售订单,多次出货,系统会准确的调整库存数量及金额,并记录每次销售的详细情况。
支持根据一张销售订单直接生成一张相应的销售出库单。
支持独立新增销售出库单,不用根据订单出货,如果客户直接上门提货则通过销售出货单来直接出货。
客户需求的灵活性,系统同样支持通过退货单实现直接退货。
支持客户直接零售的,零售单据准确记录日常零售记录,每次零售后,系统准确直观的算出每次零售利润、利润率等。
支持客户预先支付相应款项,再根据单据金额扣除。
支持每种单据及时查询详情。
根据部门或者员工查询销售业绩,并且根据销售情况准确计算出销售利润等,让销售主管可以轻松掌握并进行部署工作。
包括采购订单、采购入库、采购退货以及查询统计功能等功能。
实现先下采购订单,再分批进货的日常业务需求,根据每次进货的情况,系统自动核算对应的采购订单的完成情况。
支持同一订单,分多次进货,系统会准确的调整库存数量及金额,并记录每次采购的详细情况。
支持调用采购入库单直接退货。
支持每种单据及时查询详情,以及所有采购的商品汇总以及明细查询。
支持对最后一次进货价的提醒,方便核对采购价格的变化。
根据销售订单直接生成采购订单,这样减轻采购的操作工作量。
能自动根据与供应商达成的供应协议,可以根据品牌的采购折扣率自动计算出采购价格。
包括转仓、盘点、报废、损溢、赠送、组/拆装和成本调价单等功能模块,实现对仓库常用事务的管理,并能监控库存明细,商品的具体流通情况。
实现根据盘点中的历史数据和现有数据,生成盈亏数量及金额,支持自动生成相应的报损单。
商品的进出都必须是经过审核,提高系统以及数据的操作安全性。
实现自动计算库存数量和金额的变化,并反映在“库存汇总”、"库存明细表”、“出入库汇总”中。
支持商品库存上、下限的设置,自动对缺货或高于库存上限的商品进行报警。
可以追溯数据从库存汇总表追溯到库存明细表,再追溯到每个出入库单据中。这样便于追查数据的来历。
收款管理,可以对一张销售单进行分次收款,也可以对多张销售单进行合并一次收款。
付款管理,可以对一张采购单进行分次付款,也可以对多张采购单进行合并一次付款。
应收应付账目管理,清晰管理应收应付的发生变动情况,提供应收账款汇总表、应收账款明细表、应付账款 汇总表、应付账款明细表。数据可以追溯,汇总表可以自动追溯到明细表,明细表可以自动追溯到各张单据,这样有利于财务人员的对账处理。
费用管理,发生的各项费用可以方便的进行记录和管理,提供费用单据。
采购发票管理,可以对一张采购单进行多次开票,也可以多张采购单一次开票。
销售发票管理,可以对一张销售单进行多次开票,也可以多张销售单一次开票。
负责对已销售的家具进行数据统计,制定有针对性的个性化的采购计划。
负责对客户人群的分析,包括但不限于消费金额和所对应的家具风格。为采购提供数据支持。
项目的模块组成
基本组成
基础模块(所有系统都可能有)
采购模块(核心)
库存模块(核心)
销售模块(核心)
财务模块(扩展)
物流模块(扩展)
更细的一些组成
权限模块
产品模块
报表模块
组织机构模块:
1.员工管理 2.部门(门市)管理
系统管理模块
1.角色管理 2.菜单管理 3.权限管理 4.导入管理
基础数据模块
1.数据字典类型 2. 数据字典明细 3.产品类型 4.产品管理 5. 供应商管理
采购模块
1.采购管理 2. 采购报表
库存模块
销售模块
财务模块
系统管理模块
权限管理:
使用Shiro权限框架分配给不同登录用户的角色
导入管理:
使用EasyPoi技术完成批量导入导出
采购模块
采购管理:
共设计了7个字段:
交易时间 交易总金额 交易总数量 供应商 录入人 采购员 单据状态
可以供管理人员查看当前所有采购订单的详细情况
采购报表:
对所有采购订单作数据统计,
采供报表中可以根据年,月,日,
三种状态码(已审,待审,作废),
供应商,采购员,
月份进行不同需求的查询,
查询结果显示有分类总数量,总金额,产品类型,交易时间,单价,个数,状态就行表格展示,
也可以选择3D圆饼图进行展示
采购报表业务:
1 需求部门提出申请,填入相应的需求提交申请单
2 采购人员根据需求寻找供应商,价格,存入咨询表中
3 管理人员查看咨询单进行选择评比确认需求
4 管理人员填写采购订单,经理审核采购订单
5 通过审核订单后下采购订单
6 财务付款单
7 准备采购入库单
部门懒加载问题:
hibernate自动为懒加载对象加上了一些属性
但是这几个属性在SpringMVC生成json数据的数据,就会报错(No serializer)
Ignore:忽视
① noSession:
EntityManager提前关系了
web.xml中配置Spring的过滤器
<!--解决no-session的问题-->
<filter>
<filter-name>openEntityManager</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openEntityManager</filter-name>
<url-pattern>/*
②, noSerializer
hibernate添加了一些字段(变成Json时报错)
解决方案一: 字段上加注解 @JsonIgnoreProperties(value={“hibernateLazyInitializer”,“handler”,“fieldHandler”})
解决方案二:自己配置(拷备过来用即可) 在项目第三天解决的代码
数据丢失问题:
员工类修改的时候,设计密码框被隐藏,不能修改,
在将修改的值传递回后台的时候,会没有密码的值,导致密码数据丢失
解决办法三个:
(1)隐藏要传递的值,缺点是如果字段过多,代码量会比较大
(2)在丢失字段加上注解@Column(updatable = false)
(3)先查询数据库,获取持久状态的对象,然后把页面的数据set到对象里面
修改值得时候出现n-to-n错误:
解决办法:
在controller层将关联对象设置为空
shiro怎么解决ajax请求的问题?
解决办法:
写一个类继承PermissionsAuthorizationFilter重写AuthorizationFilter中的此方法,将响应头设置为springmvc中json响应头样式
框架使用主要使用了Spring+Spring MVC+SpringDateJpa框架
前端:EasyUI框架+Bootstrap框架
权限过滤器:shiro框架 (用户密码加密使用的是MD5加密方式)
数据库:MySQL
数据库查询加入了jpa-spec插件(分页加排序查询更方便)
在添加数据框中使用了EasyUI中的validatebox 插件来验证一个表单
使用了velocity模板生成技术 在ider中使用了EasyCode插件完成模板生成
导入导出Excel模块使用了EasyPOI框架
采购订单图形报表处理使用的是HighChart框架
Spring做的一个MVC框架(三层中的控制层)
MVC:模型,视图,控制器
SpringMVC的执行流程(998)
核心控制器(DispatcherServlet,view,…)
spring---------持久层:负责数据的访问和操作
--------------------控制反转 Ioc (依赖注入) 由容器来管理对象的调用 --------》spring的核心
---------------------Aop 面相切面编程
类包的规划
------------dao : 对数据库与java链接需要Dao层实现 (JDBC的范畴或用orm框架)----(orm框架:对象映射关系是一种程序技术 作用:把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去,在具体操作对象的时候便不再需要复杂的SQL语句打交道)
-----------service 业务层 业务逻辑的实现
-----------web controller 响应需求并在后台自动运行(springmvc)
序列化 :将对象的状态信息转换为可以存储或传输的形式过程
springMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架
M 是指model 也可以理解为 spring容器
v 是指 视图 也就是说 用户界面
c controller 也就是控制器
是构建工具
ant和svn结合的一种服务器
集合了ant功能将编译成的jar和调用的jar都存在maven服务器上
在运行 maven 项目 的 时
记住 用 run as 中的 maven install 进行安装 然后 在juit测试单元通过的 前提下 — 会在 target文件里 出现
war包
将 war包 放在 tomcat 的 webapp文件下 后 运行 tomcat 并在 浏览器 网址上输入 lohast:/8080/war包的名字
maven 加入依赖包 的方法
利用 pom。xml 文件里的
Dependencies 里来添加
说实话 但你填写完 pom.xml文件之后 会自动下载 相应的依赖包
还需记住一点 利用项目右键的 maven 里 的 update 来更新 pom.xml
来解决 pom。xml红叉的问题 。
操作数据库,自己写JDBC是比较麻烦的,开发效率低!所以我们选择了JPA这个东西!
JPA: ORM(对象关系映射)规范,操作数据库变得更加简单,兼容各种数据库,开发效率极高!
Hibernate:对JPA有最完美的实现!
最大的问题:性能差(运行效率低)!
1问题来了: 哪些项目对JPA是比较合适的!
对性能要求不高,但开发时间要求高!-> 中小型项目
2 问题来了: 大型项目可以使用JPA嘛? 性能问题怎么解决?
性能的提高 : 分库分表(Hibernate支持)
对于性能要求高的操作,单独写SQL
SpringDataJPA:是Spring为JPA又做了一层封装
优势:开发更加简单与方便,随便hibernate的性能的提高,以及Spring的支持!个人认为SpringDataJPA会慢慢被多开发者所使用!
JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口所在包为javax.persistence,详细内容可参考https://github.com/javaee/jpa-spec)
JPA的出现主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。总的来说,JPA包括以下3方面的技术:
ORM映射元数据: 支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系
API: 操作实体对象来执行CRUD操作
查询语言: 通过面向对象而非面向数据库的查询语言(JPQL)查询数据,避免程序的SQL语句 ,紧密耦合
create:每次运行程序时,都会重新创建表,故而数据会丢失
create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表
upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)
validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错
none: 禁用DDL处理
JPA自带的几种主键生成策略
TABLE: 使用一个特定的数据库表格来保存主键
SEQUENCE: 根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要与generator一起使用,generator 指定生成主键使用的生成器(可能是orcale中自己编写的序列)
IDENTITY: 主键由数据库自动生成(主要是支持自动增长的数据库,如mysql)
AUTO: 主键由程序控制,也是GenerationType的默认值
简介
在项目中,有时会出现需要将数据库数据导出报表等功能,这时一般会用到poi库。poi是一个专门给Java程序提供格式文档读写功能的API接口,包括各种微软的格式文档入excel、word等。最常用的还是Excel格式导入导出。
Easypoi是在poi接口基础上进行了封装,简化了操作。
使用Easypoi导出仅需以下几步:
添加依赖项
改造模型,添加注解
从数据库查询数据,使用Easypoi工具类生成Workbook对象,存储为文件(导出)。
简介以及功能描述
Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相 当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时 可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。
Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用
户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用
户对某个资源是否具有某个权限;
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信
息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的;
Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
Web Support:Web 支持,可以非常容易的集成到 Web 环境;
Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能
把权限自动传播过去;
Testing:提供测试支持;
Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录
记住一点,Shiro 不会去维护用户、维护权限;这些需要我们自己去设计/提供;然后通过
相应的接口注入给 Shiro 即可。
了