思微特电器进销存总结

    • 项目开发人员配置:
    • 项目完成使用时间:
    • 使用的开发工具:
    • 项目开发环境:
      • 项目用到的技术:
    • 日志功能版本:
  • 本系统为客户解决的问题:
  • 本系统的主要模块:
  • 各个模块功能介绍
  • 本人具体负责的模块
    • 1.权限模块
    • 业务分析
    • 具体功能实现
  • 2.报表模块
    • 业务分析
    • 具体功能实现
  • 项目中遇到的错误总结
    • 1. NO SESSION
      • 问题原因
      • 解决办法
    • 2. NO SERILAER 问题
      • 问题原因
      • 解决办法
        • 解决方式一
        • 解决方式二
    • 3.数据丢失问题
      • 问题原因
      • 解决办法
        • 方式一
        • 方式二
    • 4. n to n 问题
      • 问题原因
      • 解决办法

当前版本:1.0 version
完成日期:2019/11/23

项目开发人员配置:

Java开发人员:4人;
前段开发人员:1人;
测试人员:1人;

项目完成使用时间:

历时3个半月

使用的开发工具:

ideal2019.1

项目开发环境:

使用maven-3.5.2

项目用到的技术:

spring:4.2.5.RELEASE
spring-data-jpa:1.9.0.RELEASE
springmvc:4.2.5.RELEASE
shiro-all 1.4.0
Hibernate:4.3.8.Final jpa-spec 3.1.1
easypoi-base 3.2.0
quartz 1.5.2
javax.mail 1.4.1
apache-tomcat-8.0.41

日志功能版本:

org.slf4j:1.6.1

本系统为客户解决的问题:

本系统是为了解决,思微特电器销售股份有限公司,对于从各个产品从进货到入库再到销售这整个流程中存在对供应商、产品信息、库存信息、客户信息、库存信息等等不能及时了解统计、分析等而造成的流程混乱、信息错误、供需分析不足,对公司人员权限管理混乱等等问题;

本系统的主要模块:

  • 用户登录系统
  • 基本资料维护模块
  • 采购模块
  • 产品销售模块
  • 库存管理模块
    • 邮件
  • 权限模块
  • 报表模块
  • 扩展模块

各个模块功能介绍

模块 功能名称 描述
用户登录系统 用户登录 对用户输入的用户名和密码进行验证,后台对用户的密码进行MD5算法加密处理保证密码的安全性,该用户验证通过后,可以使用系统中自己拥有的权限的那部分功能,不会对当前用户提供其他功能.
基本资料维护模块 商品资料维护 用户修改,删除,新增或查询商品数据,系统根据用户的操作,对商品资料进行更新或显示。
供应商资料维护 用户修改,删除,新增或查询供应商数据(其中包括对供应商的联系人的修改,删除,新增与查询以及对供应商交易记录的查询),系统根据用户的操作,对供应商资料进行更新或显示。
采购 采购入库 用户通过录入采购入库单增加采购的货物,并可对采购入库单及其单据中的货物明细进行修改、删除与查询。
采购退货 用户录入通过采购退货单退回货物,并可对采购退货单及其单据中的货物明细进行修改、删除与查询。
销售模块 销售出库 用户通过录入销售出库单记录销售的货物,并可对销售出库单及其单据中的货物明细进行修改、删除与查询。
销售退货 用户通过录入销售退货单退回已销售货物,并可对销售退货单及其单据中的货物明细进行修改、删除与查询。
库存管理模块 库存查询 用户通过组合不同条件,对各个地区仓库库存数据的统计、对库存进行查询、盘点,每天定时对库存不足的商品进行邮件通知.(这里包括有年终的盘盈/盘亏功能,每个月为客户提供一个报盈/报损单)。
权限模块 角色管理 拥有角色管理权限的用户可以对其他用户分配角色,更改用户对系统的访问权限。
扩展功能模块(报表的导入导出) 出库明细表 打印出某一个时间段的出库明细信息
入库明细表 打印出某一个时间段的入库明细信息
客户对账表 查询、打印出某一个时间段内某一客户的订购情况
库存台账 查询、打印某一个产品的详细入库及出库记录及结存;
导出库存预警 库存量低于安全存量的商品系统向用户提供警示信息(以邮件形式),以提醒用户及时进货。用户也可将警示信息导出到Excel中
导出商品资料 将商品资料信息导出到Excel中
导入导出员工资料 对员工资料导出excel和以excel导入到系统.

本人具体负责的模块

1.权限模块

数据库中涉及到的表: 员工信息表,角色表,权限表

业务分析

公司的每一个员工职位不同,在公司有不同的职能,有不同的权限,享有不同的角色.
所有不同员工登录到系统的权限是不同的,登陆后的界面也是不同的.根据员工的角色展示相应的界面.

具体功能实现

1.员工没有登录进行拦截跳到登录界面
2.员工登录到系统后根据其角色信息,只会展示他所拥有的权限的菜单和按钮.
3. 拥有角色管理权限的员工,可以为员工分配角色
4. 员工没有此权限,但是访问到了相应的url,进行拦截,跳到友好提示界面.
5. 登录过期进行重新登录.

2.报表模块

业务分析

公司需要对商品库存情况,商品销售情况,人员信息,财务状况 进行掌握,需要得到相应的报表.

具体功能实现

1.对员工信息使用poi进行excel导入导出(数据库).
2.通过使用highchart技术,对所有的采购数据进行模型数据分析,采购商价格占比分配、采购商占比情况、各个商品的占比情况、最近需要支付费用的占比情况等等,柱状图、折线图、饼图互相对应,自由转换。

项目中遇到的错误总结

1. NO SESSION

问题原因

因为domain外键配置了懒加载,前端请求数据时,是先加载其他的,再其他加载完毕后就再次请求外键内容,但是当前的线程中的entitymanager已经关闭,再去操作数据库,就会报nosession问题

解决办法

在加载完整个页面再关闭entityManager .

在web.xml中配置过滤器<!--在相应完整个页面后再关闭entityManager--><filter><filter-name>openEntity</filter-name><filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class></filter><filter-mapping><filter-name>openEntity</filter-name><url-pattern>/*</url-pattern></filter-mapping>

2. NO SERILAER 问题

问题原因

SpringMVC与Jpa集成的时候(有懒加载)就会出现这个问题
(这是因为你需要序列化对象有一个属性是一类类型,而你使用了Hibernate的延迟加载所以这里是个Hibernate的代理对象。该代理对象有些属性不能被序列化所以会报错。)

解决办法

解决方式一
在字段上加上注解
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
解决方式二
第一步:创建一个新的类(重写com.fasterxml.jackson.databind.ObjectMapper)
package cn.itsource.pss.common;import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;public class CustomMapper extends ObjectMapper {public CustomMapper() {this.setSerializationInclusion(JsonInclude.Include.NON_NULL);// 设置 SerializationFeature.FAIL_ON_EMPTY_BEANS 为 falsethis.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);}
}第二步:在applicationContext-mvc.xml中配置一下即可
<!-- Spring MVC 配置 -->
<mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="supportedMediaTypes"><list><value>application/json; charset=UTF-8</value><value>application/x-www-form-urlencoded; charset=UTF-8</value></list></property><!-- No serializer:配置 objectMapper 为我们自定义扩展后的 CustomMapper,解决了返回对象有关系对象的报错问题 --><property name="objectMapper"><bean class="cn.itsource.pss.common.CustomMapper"></bean></property></bean></mvc:message-converters>
</mvc:annotation-driven>

3.数据丢失问题

问题原因

前端页面修改数据,一般不修改密码,是用disable禁用密码框,使其不向后台传输密码提高安全性,但是后台用domain对象去接收会导致数据丢失问题.

解决办法

方式一
在domain字段上加上注解,让数据库不修改该字段,这种做法不灵活
@Column(update = false)
private String password;
方式二

添加@ModelAttribute:被打上此注解的方法,当请求到来的时候,会在该Controller类所有方法之前执行

//    解决修改资料不修改密码以及不传递密码问题@ModelAttribute("editEmployee")     //他会在所有带有requestMapp标签的方法执行之前执行public Employee beforeEdit(Long id,String cmd) {//        接收到前台传的domain对象,向数据库中进行查询if (id != null && "update".equals(cmd)) {  //只让edit进入Employee employeeTemp = employeeService.findOne(id);return employeeTemp;}else {return null;}}@RequestMapping("/update")@ResponseBodypublic ResponseResult upload(@ModelAttribute("editEmployee")Employee employee) { //将前台的employee和数据库中查询出来的进行合并try {                                                                        //前台传过来的字段有值就用前台的数据,没有值就用数据库employeeService.update(employee);return new ResponseResult(true, null);} catch (Exception e) {e.printStackTrace();return new ResponseResult(false, e.getMessage());}}

4. n to n 问题

问题原因

使用了@ModelAttribute 才会产生此问题
前端传递的传递的字段名称是department.id 后台的接收的时候会执行 employee.getDepartment(),会执行JPA的查询操作,也就是会弄出来一个持久化的department对象,然后再执行下面这一段代码的时候会合并数据,如果员工没有修改部门则不会出现这个问题,如果修改了部门,也就是修改了持久化对象OID,就会报n to n 问题

解决办法

不让spring去持久化一个department对象出来,(将关联对象设置为null)//    解决修改资料不修改密码以及不传递密码问题@ModelAttribute("editEmployee")     //他会在所有带有requestMapp标签的方法执行之前执行public Employee beforeEdit(Long id,String cmd) {//        接收到前台传的domain对象,向数据库中进行查询if (id != null && "update".equals(cmd)) {  //只让edit进入Employee employeeTemp = employeeService.findOne(id);employeeTemp.setDepartment(null);return employeeTemp;}else {return null;}}

思微特电器进销存总结相关推荐

  1. 中微通用进销存软件 绿色软件联盟

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  2. java毕业设计超市进销存管理系统Mybatis+系统+数据库+调试部署

    java毕业设计超市进销存管理系统Mybatis+系统+数据库+调试部署 java毕业设计超市进销存管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  3. python超市进销存毕业设计-附源码211549

    摘 要 随着计算机技术的高速发展,人们对计算机的依赖性越来越强,特别是用计算机开发的数据库以及数据管理系统在生活应用中表现得更为突出,为此开发此系统.通过使用超市进销存管理系统,使超市的管理工作系统化 ...

  4. Python+超市进销存 毕业设计-附源码211549

    摘 要 随着计算机技术的高速发展,人们对计算机的依赖性越来越强,特别是用计算机开发的数据库以及数据管理系统在生活应用中表现得更为突出,为此开发此系统.通过使用超市进销存管理系统,使超市的管理工作系统化 ...

  5. bs架构 erp 进销存_从应用架构看生鲜电商信息化建设

    编辑导读:对于生鲜电商来说,信息化建设是很重要的一环,所有的业务开展都离不开信息化的支持.本文作者讲从应用架构角度出发,对生鲜电商信息化建设展开分析,希望对你有帮助. 一.背景语言共识 之前介绍了从业 ...

  6. 五金行业:强行业性的进销存系统具体看三项

    很多五金的中小企业,都是从小作坊.个体户做大,普遍有着规模小,管理方式传统,行业内部管理水平偏低等缺陷.从年初忙到年尾,经营者也不清楚是赚是亏,竞争力不强,很多五金企业只要用上管理软件,就能领先同行. ...

  7. 5款服装进销存软件测评,教您如何挑选出好用的

    目前市场上的进销存软件非常之多,用户很容易选择困难.但其实很多进销存软件是分用途的,比如有些是服装类常用的,有些针对的是一些生产型企业. 这次带来的就是服装类进销存软件大盘点,相较于其他行业,服装类进 ...

  8. java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计

    java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计 java-php-python-晨光文具店进销存系统设计与开发计算机毕业设计 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. 计算机毕业设计Java超市货品进销存系统后台(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java超市货品进销存系统后台(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java超市货品进销存系统后台(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构 ...

最新文章

  1. SHELL训练营--day5__shell脚本(1)
  2. 我加入一家硅谷骗子创业公司的奇葩经历
  3. 开源!mathAI 手写拍照自动能解高数题,还不快试试?
  4. SVN使用和解决方案
  5. LeetCode 640. 求解方程(字符串)
  6. python实现解析oui.txt并抽取MAC前缀及组织名称
  7. oracle 主键 字典表,oracle 增 删 改 查 新建表 主键 序列 数据字典
  8. 在mudbuilder上的胡扯1
  9. Android 资源和国际化
  10. 编译Android 4.4.4 r1的源码刷Nexus 5手机详细教程
  11. 国开大学计算机实操,国开大学计算机实操答案一.doc
  12. mysql jdbc dao_MYSQL 之 JDBC(九):增删改查(七)DAO的补充和重构
  13. Python自动化操作word--批量替换word文档中的文字
  14. python网页开发数据库访问_python 网页读取数据库
  15. 2023年武汉市中等职业学校技能大赛 “网络搭建与应用”
  16. 爱普生photo EX3打印机四个灯同时闪的解决方法
  17. 产品设计-13.制作产品结构图
  18. 西安公交车路线汇总(1)
  19. 部署在IIS上的网站返回错误码 “405”解决方案
  20. 各大银行ATM跨行取款收费一览表 程序员的切身利益 不得不看啊

热门文章

  1. 汇编---智慧交通场景的模拟实现
  2. 秒杀项目之秒杀商品展示及商品秒杀
  3. 【Flink】Flink简介及Standalone、Yarn和Kubernetes模式的部署
  4. linux单机 游戏弓箭手,弓箭手们吃鸡了
  5. java 游戏 弓箭手 法师 战士_盛世皇城职业选择推荐 战士法师弓箭手哪个厉害
  6. loadrunner监控windows系统资源
  7. 盲源分离matlab程序,Ica盲源分离Matlab程序
  8. c语言 bnf,c语言的bnf总结
  9. 河南省开封市谷歌高清卫星地图下载
  10. PostgreSQL中的距离计算问题 ST_Length