物流管理系统.docx
《物流管理系统.docx》由会员分享,可在线阅读,更多相关《物流管理系统.docx(53页珍藏版)》请在咨信网上搜索。
² 第一天 国际物流 杰信商贸 + 搭建环境 1. 项目背景 杰信商贸是国际物流行业一家专门从事进出口玻璃器皿贸易的公司。公司总部位于十一个朝代的帝王之都西安,业务遍及欧美。随着公司不断发展壮大,旧的信息系统已无法满足公司的快速发展需求,妨碍公司成长,在此背景下,公司领导决定研发《杰信商贸综合管理平台》。 《杰信商贸综合管理平台》分三期完毕。一期完毕仓储管理(涉及:采购单、仓库、货品、条形码、入库、出库、退货、盘点、库存、库存上限报警、记录查询)和展会管理(涉及:展会管理、出单管理),形成货品统一数字化管理。二期完毕货运全流程管理,涉及购销协议、出货表记录、出口报运单、HOME装箱单、装箱单、委托书、发票、财务记录等。三期完毕决策分析(涉及:成本分析图、销售情况记录、重点客户、经营情况同期比对记录、工作绩效),为公司经营决策提供数据支持。 a) 用例图 2. 了解系统是所有功能模块 运用visio画系统功能结构图,目的让开发人员了解都有哪些业务模块,方便分工合作,根据每个页面模块的难度,复杂,投入的人力情况来衡量每个模块多少钱。验收标准。 数据库建模,业界都使用PowerDesinger 建模 3. 系统架构 4. 业务:生产厂家 a) 功能 在货品模块和附近模块,它们都有个生产厂家,讲生产厂家信息提出,成为一个单独的表。 b) 需求调研《需求说明书》 生产厂家表 FACTORY_C(_C业务后缀) 序号 名称 代码 是否 主键 类型(长度) 说明 1. 编号 FACTORY_ID 是 VARCHAR2(40) UUID 2. 全称 FULL_NAME 否 VARCHAR2(200) 相应客户比较模糊,翻倍2到4倍 3. 简称 FACTORY_NAME 否 VARCHAR2(50) 4. 联系人 CONTACTS 否 VARCHAR2(30) 人名20/30 5. 电话 PHONE 否 VARCHAR2(20) 6. 手机 MOBILE 否 VARCHAR2(20) 7. 传真 FAX 否 VARCHAR220) 8. 验货员 INSPECTOR 否 VARCHAR2(30) 9. 排序号 ORDER_NO 否 INT 10. 备注 CNOTE 否 VARCHAR2(500) 假如感觉它也许和关键字冲突,给它加个C前缀 11. 创建人 CREATE_BY 否 VARCHAR2(40) 权限字段,登陆人ID 12. 创建部门 CREATE_DEPT 否 VARCHAR2(40) 登陆人所在部门的ID 13. 创建时间 CREATE_TIME 否 TIMESTAMP ² 第二天 生产厂家CRUD + 购销协议 1. 业务:启用,停用 功能:和杰信合作生产厂家忽然有一天它以次品冒充优质品,杰信不跟这个厂家进行合作。在货品中生产厂家选择框,不能选择这个不再合作的厂家。在系统中不能直接删除这个厂家,由于我们的历史数据中具有对这个生产厂家的引用。软件是采用“伪删除”方式来解决。实际是在数据库表中加入列,作为标记,标记厂家是否可以被引用。0停用1启用。新增厂家默认1,可以修改某个厂家为停用。在货品中选择厂家的下拉列表,只显示为启用。 2. 加“启用”“停用”功能,修改状态。 3. 货运管理核心流程:购销协议 a) 需求调研过程 软件公司就会到杰信去需求调研, 项目经理,他面对客户的高层中层领导,目的跟客户安排好调研日程。 设计人员,带领初级程序员到具体的业务部门调研。聊天,围绕项目的目的,设计人员会自己记录谈话内容,(主干),初级程序员(所有内容)。回来整理笔记,整理《需求调研报告》 报告中怎么体现纸质报表?初级程序员将纸质报表转化成电子的。 b) 购销协议业务分析 4. 需求过程 杰信和生产厂家签到的协议,称为购销协议。一个购销协议中包含多个货品信息,一个货品信息涉及多个附件信息。 报表打印时,同一个生产厂家的货品信息才干放在同一个页上,不同生产厂家的货品信息不能放在同一个页上。 分析阶段,抠每个字段 5. 出货表 设计方案一(传统设计) 协议表,货品表,附件表多次左连接,SQL极其复杂,由于附件值特殊,SQL不能直接完毕,还需要代码去实现。 设计方案二(冗余设计) 通过冗余,都在货品表中,只需要协议表和货品表左连接即可。 6. 分析过程 将用户的需求(大白话)转化为开发人员看得懂的数据库表,表之间的关系,业务逻辑。给我们的开发人员看,开发人员依据设计来写代码。复杂,大型项目画类图,序列图辅助开发人员开发。 在实际开发中,架构师搭建项目框架,框架的基类都有,基础工具类,统同样式表,统一的公用的js,图片。公司提供一个CVS/SVN账号,配置环境,从中检出你负责的项目的代码。代码一般以项目结构。导入工程,在其上面开发新的业务模块。 7. 业务需求 销售人员录入协议时,它为草稿状态,这时只能销售人员自己看到。只有当销售人员检查协议无误,提交,状态变成“已上报”。这时候,其别人员才可以看到。销售的领导和船务专责才干看到。运用这个状态字段来控制对当前用户是否可见。(细粒度的权限控制-数据权限) 8. 重点知识回顾 货运管理核心业务流程:购销协议 1.定义 购销协议是杰信和生产厂家签订的协议。 2.业务复杂度 购销协议业务比较复杂,它是货运管理的一个流程,它涉及三部分内容,协议的主信息和多个货品信息和多个附件信息。协议主信息和货品是一对多,货品和附件信息是一对多。 3.从业务中迁出技术亮点 前期我参与了业务调研,重点负责购销协议。给客户交流后,我编写了《需求说明书》,然后参数购销协议的表设计。从需求说明书结合客户给的电子表格,我抽取出数据库表,运用PD进行建模。 设计: 1. 跟客户聊天,要引导性和他们聊天。业务基础术语,了解业务流程 2. 进一步内容,拿到客户手中现有某个模块表单,电子表格,填写的内容,每个内容要注意的事项。来源:手填,从其他模块来获取。抠每个字段,电子表格中每个内容。 3. 《具体说明书》功能的细化,业务逻辑说清楚,画图辅助开发,UML(类图、序列图、状态图)数据库建模细化。 目的:开发人员可以依照具体设计开始开发。 具体设计本意能达成开发人员无需和客户沟通,就可以在设计人员的指导下就可以直接开发出客户满意的代码。但实际中做不到。设计不到位。实际中开发往复比较多。 ² 第三天 购销协议+货品信息+附件信息 1. 业务需求:上报、取消 a) 功能: 上报实现销售人员拟定购销协议录入完毕,检查无误后,上报给领导,领导审核无误后,提交给船运部。 取消实现当船务专责未解决此相关的协议时,可以取消这个协议,重新修改协议内容,然后再次上报。假如船运专责已经开始解决报运的业务,不能取消,必须走货品增补流程。 b) 设计实现: 在表中增长状态字段,新增时默认状态为0草稿,当销售专责确认无误后,点击“上报”状态变为1已上报。 当船运专责未解决报运时,销售专责点击“取消”状态变为0,草稿。 状态为0时,只能销售专责自己看到,当状态为1时,他的领导和报运专责都可以看到。 ² ² 第四天 购销协议查看,SQL语句的Power 1. 附件业务实现 随时携带主表的ID 2. 购销协议查看 协议下货品,货品下面附件,在购销协议中所有浏览,体现货品和附件的关系。 构建对象关系 3. *细粒度权限控制 主菜单,左侧菜单,按钮,URL,方法,业界都称为粗粒度的权限控制。平常的小系统,基于用户,角色,权限架构足够用。 在实际大型项目中,光有上面的用户角色,URL这样的控制粒度不够细致,尚有数据访问权限。 1) 对数据的访问列是可以自己定制的。 例如:访问一个人员工资信息表,这个表中具有人员的工资。 2) 对数据的访问行可以受权限控制。 例如:工资表中有销售部人员的工资信息,尚有船运部人员的工资信息。当销售部领导登录时,他只能看到销售人员的工资信息,他不能看到船运部人员的工资信息。 3) 直接浏览数据库表,工资列不能直接看到其值。对这个数据库列进行加密。 上面统称为数据访问权限,这个权限加上角色用户这样这个系统才比较安全。也称为细粒度的权限控制。 a) 列访问控制: 单独建立表,权限分派某个角色能访问哪些列; b) 行访问控制: 1) 只能看自己创建的记录,不能看到别人创建的记录 Where create_by = 当前登陆人ID 2) 部门领导看到,他能看到本部门人员创建的记录,不能看到其他部门人员创建的记录 Where create_dept = 当前登陆人部门ID and user_level <4 3) 跨部门访问权限,分管领导跨部门,跨人员 再加一个配置表,分管领导可以管理的人和部门; ² 第七天 异构数据库支持+出口报运核心业务 1. 核心业务:货运管理第二个流程,出口报运 a) 定义: 做国际物流,货品要运往国外之前,向海关申报。向海关申报符合国家标准的货品,和货品的体积和重量信息。除了在协议中货品的基本信息外,在报运时新增7个字段,长,宽,高,毛重,净重,出口单价,含税。 分次报运 一个可以可以分多次来报运,体现在运送的货品数上。 例如:10000货品,第一次报运运送6000,第二次报运运送4000. 可以多次报运,这种情况很少。平常大多是一次报运。 b) 分析设计 一个出口报运单来自多个购销协议(一对多);给货品信息新增的7个字段的内容。 创建一个出口报运单表 c) 冗余设计 将货品信息冗余到报运单下的货品信息中。一个实现读取数据快速,减小业务的复杂度,业务逻辑简朴。 d) 打断设计实现跳跃查询 避免关联层级过多,数据量大了后,访问奇慢。打断设计。(表设计不成为文规定,表之间的关联关系不超过4层)在设计时使用一个虚线箭头来表达表之间是存在关联关系,在设计时,不是往常的外键关系。运用一个字段来存储主表和子表之间的关系。X,Y Where contract_id in (‘x’,’y’)。通过打断设计,表之间的关系不存在,跳跃查询。无需查询协议表,直接查询协议下的货品表。(新增) 通过上面的设计,后续业务变的更加简朴。 2. 业务,劳保报表 领用周期不同 鞋 帽子 手套 毛巾 军大衣 洗衣粉 饭盒 … 班组1 10 10 5 班组2 20 20 3 6000个单元格 哪个单元格的内容进行修改,代码只修改修改的框。给每个文本框增长一个隐藏域。12023个信息要提交。本来目的是优化,结果速度更慢。 最终每行添加一个隐藏域,当这行的数据进行了修改,在文本框的失去焦点事件onBlur,动态设立这个隐藏域为1。在修改代码时根据这个值判断,只有1的时候,数据才进行修改。不是1跳过。 批量新增,增长一个新增按钮,点一次调研一次addRecord方法,它的属性值,都为空串。 批量删除,表格dhtml提供删除行操作,remove,它把行从table中删除。数据库并没有删除,删除多个框时,记录下它们的id值,拼成一个串,用逗号隔开。后台代码判断这个隐藏域提交值不为空,删除这几个数据。 3. 知识回顾 a) 打断设计: 1.数据库设计先按照三范式,之后对一些需要优化的地方,使用反三范式设计(冗余)(以空间换设计) 2.实际业务非常复杂,关联层级过多,随着系统上线运营,用户的数据随着使用的时间,线性增长。不成文规定:关联层级在设计不超过4层。打断设计,在主表中加一个字段,字段来存储两个表之间的关系。多个的时候,之间用逗号隔开。一般情况下都是一次报运,就是一个协议一次报运,个别情况下多个协议一次报运,极端情况下3个协议一次报运。 由于打断设计,实现“跳跃查询”。报运需要协议下的货品信息时,无需通过多个协议对象,就可以直接查询货品的信息,通过这个打断设计的字段,运用SQL的in子查询。 b) 核心业务:货运管理,出口报运 业务,杰信获得订单后,安排多个生产厂家生产货品,与此同时杰信准备报关的材料,除了海关规定的一些制式文档和杰信系统打印的《出口商品报运单》,交给海关进行审核。 4. 页面控制 a) 报运单新增,暗度陈仓。 用户选择报运关联的多个协议,代码直接进行数据的保存。保存相关协议的id集合,协议号集合,保存冗余的货品信息,保存冗余的附件信息。 b) 批量修改 Mrecord自定义控件,来信息补录。批量,在页面上运用DHTML动态表格技术,实现表格元素的动态增长,动态创建行,动态创建单元格,运用innerHTML动态向单元格插入文本框,带数据的。在后台准备数据,拼接成js串,将它写入一个变量中,在页面的jQuery的ready事件中,调用这个变量,形成多个js串,依次执行。动态添加到表格中。由于js运营不久,用户感觉不到添加的过程,认为直接展示。这样为用户提供一个非常方便的操作。可以批量来修改货品信息。每行运用一个隐藏域,来存放是否修改标记,这样在记录行数过多时,修改的效应也非常高。 Mrecord控件它可以实现动态新增,还可以实现批量删除,自动排序。 ² 第八天 装箱、委托、发票、财务业务+协议归档 货运管理涉及:购销协议、出口报运、装箱、委托、发票、财务记录。 1. 装箱 海关批准杰信的申请,像船东申请集装箱,杰信找货代公司请他帮着订箱。杰信找拖车公司,订拖车,拖车公司到码头拉空箱。拉着空箱到生产厂家的仓库。生产厂家在杰信的验货员的监督下,先将货品装到纸箱子中,然后在将纸箱子装入集装箱。拖车拉着满箱到海关指定的码头指定的地方卸货。这几个箱子风吹雨淋。海关进行抽检。直到船来了。将集装箱放到船上。开船从装运港出发,到目的港。 装箱时,产生发票号。同时产生发票日期。 一个装箱单来自多个报运单(一对多) 2. 发票,委托 在货品装船的同时,杰信就开具发票,这个发票只是一个告知单,它的内容就是告诉客户货品已经发出,请支付剩余款项。同时快递客户一个提单。客户收到发票告知后,支付剩余款项,同时当货品到达目的港后,客户拿着提单去提货。客户联系货代公司,联系拖车公司,拖车拉着满箱到客户指定的仓库,卸货。客户验货,整个货运流程完毕,杰信和客户的协议完毕。 3. 财务 财务模块不属于货运的业务流程。它是杰信自己内部进行财务核算的模块。记录这单协议有无赚取利润。形成记录报表给领导展示。 4. 一对一特殊设计 一个委托来自一个发票,一个发票来自一个委托,一个财务来自一个委托。(一对一) 一对一的所有表内容可以合成一张表,结构不清楚,业务不清楚。 发票,委托,财务表的主键就是装箱单的ID。 上面三张表,它们的主键既外键。主外键一个值。 举例,假定拿到ID,不管是装箱、委托、发票、财务,都可以查询它们其中任何一个数据。 实现跳跃查询。 财务需要货品信息和附件信息,通过打断设计,可以直接跳过发票、委托,直接找到装箱,通过装箱的打断设计字段,直接去搜索报运下的货品和附件信息。由于之前进行了冗余设计,财务所需的货品信息和附件信息,在报运中都有。查询效率提高数倍。 5. 出口报运的状态 0-草稿 1-已上报 2-装箱 3-委托 4-发票 5-财务 体现流程,客户随时想了解订单进展情况,流程的跟踪。在报运的列表页面随时了解某个协议进行到哪里。 6. 数据库优化 a) 数据库表设计 l 由本来重视节省空间,变为重视性能。运用冗余,实现性能数倍提高。 l 表的优化,监测数据执行时间。分表1)分字段(纵向分表)精简完核心查询它只需要近30个字段。本来需要1分多的查询,现在只1秒多展现页面。2)数据(横向分表)一个表数据量过大。业务中有些数据不常用,将这些不常用的数据放到此外一张表中,称这个表为历史表。专门做一个历史查询的模块,提供用户还可以查询。 l 表之间的关联关系不要太复杂。打断设计 b) SQL优化,在做复杂关联关系,SQL优化极其重要。 Select * from contract_c,contract_product_c,ext_cproduct_c,factory_c Where contract_id,contract_product_id,factory_id… 先找最小的结果集,只查询某个协议下的货品,只查询某个货品下的附件,只要查看这个协议 c) 数据库的选型 l 单个数据库优先选择Oracle,DB2 l 集群mysql,读写分离,单独读数据数据库,单独写的数据库 l Web应用服务增长,可以增大访问量,同时分担数据库服务器压力。 分表,购销协议历史 当前的活动表,它和历史表的结构同样。 主模块中的所有表,历史中都有有。例如:购销协议,协议、货品、附件都需要相应的历史表。 创建domain 批量新增SQL,JDBC jdbcTemple spring 7. 在一个系统架构中 一般访问数据两种方式 l hiberntate/mybatis 完毕数据的持久化:新增,修改,删除,简朴查询 l jdbc/jdbcTemlpate/dbutil批量操作,批量新增,批量修改,级联删除,记录查询 重要框架来完毕平常业务,一般批量查询使用jdbc,对于这些模块,缓存就要注意使用。有时不要配置缓存。 8. 购销协议归档,取消归档 --协议表数据进行归档 INSERT INTO contract_his_c SELECT * FROM contract_c WHERE contract_id IN ('x','y') --货品的数据进行归档 INSERT INTO contract_product_his_c SELECT * FROM contract_product_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y')) --附件的数据进行归档 INSERT INTO ext_cproduct_his_c SELECT * FROM ext_cproduct_c WHERE ext_cproduct_id IN (SELECT ext_cproduct_id FROM ext_cproduct_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y')) --删除协议 DELETE FROM contract_c WHERE contract_id IN ('x','y') --删除货品 DELETE FROM contract_product_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y')) --删除附件 DELETE FROM ext_cproduct_c WHERE ext_cproduct_id IN (SELECT ext_cproduct_id FROM ext_cproduct_c WHERE contract_product_id IN (SELECT contract_product_id FROM contract_product_c WHERE contract_id IN('x','y')) 9. 知识回顾 a) 业务:货运管理, 购销协议,出口报运,home装箱单(预装箱),装箱,委托,发票(告知),财务记录。 b) 【面试】工作流实现有什么好处? 杰信系统实现状态控制流程。 浏览每步流程开始时间,操作人,结束时间,审核人 忽然在流程环节中增长一步 工作流扩充流程时,非常方便,修改一下流程图,工作流自动记录所有操作的人和操作时间,操作意见。状态的代码配合工作流来实现。状态采用常量来定义,只有新增长的状态,才需要编码。 c) 表设计 委托,发票,财务它们的表的主键既外键,它们的ID值都是装箱ID。由于它们4个的关系都是一对一。关联时最近配置,需要前面业务数据时,可以实现跳跃查询。这样查询的效率高。 d) 页面设计 装箱新增,它需要在新增页面表现装箱和报运的关系。Div URL链接。 携带的信息ID,checkbox中;no也放到checkbox,用竖杠隔开,一个checkbox传递了两个值,无需再次查询数据库,提高性能,手工解串。(大量(超过10个字段)或者信息比较敏感,不推荐使用这种方法,推荐还使用通过id查找其他内容) ² ² 第九天 图形报表~让微软都羡慕的报表 1. Java要实现图形报表都有什么方式? l jFreeChart 纯java API,运用生成一张图片。 l excel 图形报表,poi不能直接操作图形报表控件。变相解决,先做一个excel模板,插入好图表控件,然后运用poi动态设立它的数据。用户打开excel,图表直接展现。 l 第三方的报表软件,可视化开发。开发效率极高。可视化布局界面,配置数据源即可。(SQL的结果集)。收费。数巨报表(10w,每年服务费1w)。做一个应用程序,(C/S程序),IE上安装插件。兼容性。 l amCharts FLASH,只需要构建数据xml。 1) 需要swf控件,例如饼形通用 2) setting.xml 不通用的 3) data.xml、data.txt,xml格式更加直观,不通用的 l sqlDao查询结果集的封装,通用 , l 工作原理 amCharts只需要一次配置,公用flash,改造index.html,访问公用的swfobject.js和公用的flash swf本来文献。样式文献访问本地的,这样可以方便修改配置颜色,坐标,显示样式等。数据data.xml文献。将从数据库中读取的数据拼接成xml节点,写入到这个文本的文献中。转向jStat.jsp统一转向相应的forward参数目录下的index.html。(注意:html浏览器默认都有缓存,在做index.html要去掉缓存) <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache, must-revalidate"> <meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT"> 2. jFreeChart、excel、amCharts PK比较 l jFreeChart 纯java api,缺陷:图形非常粗糙,它实际是运用jFreeChart api生成的图片,表现力差,专门的api需要记忆。 a) 生产厂家销售情况-饼形图 需求: 生产厂家销售情况,厂家+销售 SELECT f.factory_name,cp.sumnum FROM (SELECT factory_id,factory_name FROM factory_c WHERE state=1) f LEFT JOIN ( SELECT factory_id,SUM(cnumber) AS sumnum FROM contract_product_c GROUP BY factory_id ) cp ON f.factory_id=cp.factory_id WHERE cp.sumnum IS NOT null b) 产品销售排行-柱状图 需求: 产品销售情况,畅销的产品的前10名,产品+销售 SELECT product_no,SUM(cnumber) AS sumnum FROM contract_product_c GROUP BY product_no ORDER BY sumnum DESC LIMIT 10 c) 系统访问压力图-曲线图 需求:系统访问压力图 记录用户登陆系统,就记录一条 记录天天登陆系统的次数 SELECT SUBSTRING(login_time,1,10),COUNT(login_time) FROM login_log_p GROUP BY SUBSTRING(login_time,1,10) 记录24小时系统访问的次数 当数据不够时,运用临时表凑数据 SELECT t.a1,IFNULL(p.countnum,0) AS countnum FROM (SELECT a1 FROM online_t) t LEFT JOIN ( SELECT SUBSTRING(login_time,12,2) AS a1,COUNT(login_time) AS countnum FROM login_log_p GROUP BY SUBSTRING(login_time,12,2) ) p ON t.a1=p.a1 总结: 图形报表业界已经相称成熟,提出公用,称作报表引擎。 3. 系统的监控,系统想知道系统的访问瓶颈在哪里? 需求 系统瓶颈是指,访问最长时间,写数据操作,写磁盘文献操作。都比较耗时,用户体验不好。 1) 找出系统这些操作慢的地方, 2) 分析因素 3) 优化,用户使用频繁模块,对其优化 实现一个性能监控的程序 a) 初期使用继承方式 记录开始时间,记录结束时间,结束时间-开始时间=耗时 写到日记文献中,写到数据库中 b) 拦截器 配置springmvc拦截器,记录开始时间,结束时间,打日记。 c) 开发环节 1) 写一个拦截器,实现一个接口HandlerInterceptor 2) 实现共用的变量,安全性 3) 配置springmvc拦截器配置,springmvc-servlet.xml package cn.itcast.jk.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.core.NamedThreadLocal; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import common.Logger; //功能:实现对所有类方法执行时间的监控 public class TimeInterceptor implements HandlerInterceptor { //引入log4j日记 private static Logger log = Logger.getLogger(TimeInterceptor.class); //运用ThreadLocal绑定一个变量,完毕线程安全 NamedThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("startTimeThreadLocal"); //解决类之前,执行preHandle方法 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { long startTime = System.currentTimeMillis(); //记录当前时间 startTimeThreadLocal.set(startTime); //绑定变量 return true; } //解决类之后,执行postHandler方法 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long stopTime = System.currentTimeMillis(); //记录结束时间 log.info(String.format("%s execute %d ms." ,request.getRequestURI() , stopTime - startTimeThreadLocal.get())); } //所有的动作完毕,执行一些方法 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub } } sprimgmvc-servlet.xml中配置 <!-- 3.拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/><!-- 拦截所有请求 --> <bean class="cn.itcast.jk.interceptor.TimeInterceptor"/> </mvc:interceptor> </mvc:interceptors> 4. 项目中使用Log4j a) 导入jar包 b) 配置log4j.properties log4j.rootLogger=DEBUG, stdout 配置日记级别 OFF,FANIL,ERROR,WARN,INFO,DEBUG,TRACE,ALL 提供8个级别,log4j推荐开发者使用4个级别: ERROR:错误信息,try,catch抛出异常,log.error(“”) ,WARN:警告信息 INFO:提醒 DEBUG:BUG很多时候,监控过程变量,调试 顺序级别,级别由低到高,高级别的信息会包含打印低档别的信息。 Stout输出地点,涉及:控制台,文献,数据库 log4j.rootLogger=DEBUG, stdout #Console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-5p - %m%n #LogFile log4j.appender.file=org.apache.log4j.FileAppender log4j.appender.file.File=../logs/jklog.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.logger.org.apache=INFO .itcast.jk=DEBUG c) 调用方法: public class TimeInterceptor implements HandlerInterceptor { //引入log4j日记 private static Logger log = Logger.getLogger(TimeInterceptor.class); 类中类似System.out.println() log.info(String.format("%s execute %d ms." ,request.getRequestURI() , stopTime - startTimeThreadLocal.get())); 5. POI导入 直接读取文献内容,形成SQL语句,批量插入数据库。 导入时,excel文档它单元格有类型。 1) 类型,根据不同的类型拼接不同的sql 2) 模板,自己定义一个模板,让用户将数据导入。模板要设立将所有的单元格设立为文本类型,导入的数据就都是文本。 3) 没有通用性,要根据具体业务做一个这样类。 4) 插入SQL语句。 6. 知识回顾 a) 项目记录分析核心模块 软件的核心价值: 举例:了解杰信有哪些现有的产品畅销,VIP客户,什么产品滞销。指导公司经营。 为公司经营决策提供数据支持。 在基础数据中挖掘有价值的信息。再次提炼。~ 数据挖掘。 b) 图表报表 1) 第三方报表,用户展现效果最佳,功能齐全,开发效果。收费 2) jFreeChart 古老,api繁杂,开发效率不高,生成图片 3) jReport 复杂 4) excel (公司中常采用) 5) javascript amCharts (收费) 6) amCharts Flash c) amCharts Flash 表现力酷炫,使用最简朴, 1) SQL的数据源 2) 动态生成data.xml d) 图形报表常见 1) 饼形图- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 物流 管理 系统
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文