admin 管理员组

文章数量: 887111


2023年12月25日发(作者:vue parent)

第1章 项目介绍

1.1. 关于CCMS

CCMS内容管理系统

CCMS是Java版通用内容管理系统(Common Content Manage System)的简称,是一款自主研发的基于J2EE平台的内容管理系统

Java凭借其强大、稳定、安全、高效等多方面的优势,一直是企业级应用的首选。

CCMS使用目前java主流技术架构:hibernate3+struts1.3+spring。AJAX使用jquery和json实现。视图层并没有使用传统的JSP技术,而是使用更为专业、灵活、高效的自定义标签,使代码更为简洁,高效。 数据库使用MYSQL,并可支持orcale、DB2、SQLServer等主流数据库。应用服务器使用tomcat,并支持其他weblogic、websphere等应用服务器。

CCMS并不是一个只追求技术之先进,而不考虑用户实际使用的象牙塔CMS。系统的设计宗旨就是从用户的需求出发,提供最便利、合理的使用方式,懂html就能建站,从设计上满足搜索引擎优化,最小性能消耗满足小网站要求、可扩展群集满足大网站需要。

很多人觉得java、jsp难掌握,技术门槛高。ccms具有强大的模板机制。所有前台页面均由模板生成,通过在线模板设置轻松调整页面每个布局显示。模板内容不涉及任何java和jsp技术,只需掌握html语法和ccms标签即可完成动态网页制作,而且CCMS标签全部以中文形式并且用下拉框的形式选择,不需要用户去记住复杂的英文标签。只需要选择即可。而且我们在系统初始化时提供了大量的默认样式,所以用户几乎不需要再去修改里面的标签,只需要选择一下模板也某个位置具体放什么内容就行了。如果初始化样式无法满足用户的需求,用户可以自己控制显示内容和显示方式,标签只负责读取数据,想到什么就能做到什么,对于技术能力高和追求个性化的用户,可谓如鱼得水。

天然的静态页面技术,无需多余的urlrewrite。考虑到对搜索引擎的友好,系统在设计时就使用了静态页面技术,以.html作为url地址后缀,扁平的、可自 共 70 页 第1页

定义的路径结构。而且发布文章时可以自动提取文章的关键字和描述,然后发布出的文章页面的头部即自动包含了此文章页面对应的关键字,增加搜索引擎对网站各个页面创建的索引量,对于有特别需求者,可自定义页面后缀,如.php,.asp,.aspx等。

站群设计。对于大型的网站,往往需要通过次级域名建立子站群。各个子站后台管理权限可以分离,前台用户实现单点登录。大规模网站轻松建设。

1.2. CCMS系统特点

 模板页面可以由用户自己自由创建,只需按照我们的格式即可,模板全部使用文件形式保存,自由导入/导出模板,而且模板导入以后还可以在线修改,极大方便了用户模板设计、网站升级转移、全站换肤;

 首页、栏目页缓存处理,在使用了页面缓存,有利于提高系统反应速度,降低系统资源的消耗;

 用户自定义添加和切换分页、焦点图样式;

 轻松建立并管理多站点,所有站点权限和可以内容独立管理也可以集中管理;

 面向未来的过渡,具有很强的灵活性和稳定性;

 插件式的开发机制,使模块之间的耦合性降到最低。

 系统提供全文检索功能,是客户可以快速检索系统任何一个想要的资源。

1.3. 主要用户

 政府机构

政府网站是政府实施电子政务工程最生动的形象、最直观的应用和最鲜明的旗帜。基于互联网所体现出来的电子政务应用正显示其无穷的魅力。以政府的门户网站为代表,我国的电子政务已经从最初的以信息发布为主的形象工程阶段,向服务于社会提供更多便民服务的应用阶段发展。

CCMS提供的政府网站解决方案倡导“安全、共享、协同、应用”的理念,遵循国家电子政务标准实施中“统一组织领导、统一规划实施、统一标准规范、统一网络平台、统一安全管理”的基本原则,具备快速构建和按需扩展的特点,其建构可满足不同应用的政府网站需求,充分发挥政府网站有

效服务社会的应用职能,有效推进政府信息群架构进程。

 教育机构

随着网络信息技术的飞速发展和互联网的广泛应用,引起了教学理论与实践的深刻变革,从而给现代教育观念、远程教育教学方式方法、可获取的教学资源以及激发学习兴趣等方面都带来深刻的影响。网络信息技术引入教育后,要求教育者不仅仅是知识的传授者,更应该是学习的导航者、网络海洋中知识的导航者。

CCMS提供的教育机构网站解决方案本着“让信息创造价值,让信息转化为知识”的理念,一个新思想、一种新模式、一套新系统,全力提供全面的教育知识门户解决方案,高效构建教育网站信息的平台,提升信息系统平台的延续性和扩展性,加强网站的互动性,保护教育信息化的投资,利用网络在教育机构之间、教育机构内部及和教育者之间的信息传递,全面提升教育类网站由单一的信息展示转向多类型信息交互的层面。提供包含所有实施阶段在内的专业的售前和售后服务,从规划部署到系统运用,全程提供专业咨询与项目指导,帮助教育机构实现自己独特的设想。

 公司企业

随着计算机和电子通讯技术的飞速发展和网络的应用越来越广泛,国内外不少的大中小企业都不约而同地意识到利用网络传递信息可以在一定的程度上提高办事效率、提高企业的竞争力。通过Internet为自己做宣传、树立企业的形象和提高企业在业界知名度,这也是目前大多数企业的主要宣传方式。与传统的宣传方式相比较有着明显的投资少收益大的效果。传统的宣传方式存在花费大、范围小、形式单一、更新较难、无针对性、信息不足等问题。

CCMS提供现代企业构建自己的门户信息网站将单一的展示转向多类型信息交互层面。在构建企业网站的基础上,利用电子商务技术构建企业电子商务网站,开展网上电子商务,将企业的各级代理商、经销商及最终客户紧密联系起来,形成一个庞大的产业链。利用cCMS构建企业网站信息平台,将极大提升企业的竞争力,充分发挥企业网站本身应有的优势,提升信息系统的延续性和扩展性,保护企业IT系统的投资。

 专业站长

专业网站近来发展迅速,网站针对性地为业内人士提供行业内及行业相关信息服务,强化业内信息的分类,充分体现本行业特色。网站定位于行业的动态信息、产品信息、市场信息和技术发展信息,树立业内信息权威形象,为客户提供需要的信息和网上交流的空间,为业内的产品供应链管理,提供实际的商业机会,增强网站与客户进入良性互动性。

1.4. 技术架构

CCMS基于Java企业级平台(Java Platform, Enterprise Edition),继承了Java平台的跨平台、安全、强大、高性能等所有优势。

选用了经过java社区长时间使用,被证明稳定、可靠、安全、高性能的开源框架,包括struts1.3、spring、hibernate3、jquery等框架。使用这些框架可以使软件开发更加高效、易于维护,而且具有更好的性能、更高的安全性。

1.4.1. 跨操作系统平台

可以在Linux、UNIX、Windows等系统上运行。客户可以根据自身情况选择自己熟悉的或正在使用的操作系统,减小维护成本。

1.4.2. 跨数据库平台

数据库持久层采用hibernate实现,使得CCMS可以支持几乎所有的数据库平台,包括Oracle、DB2、Microsoft SQL Server、MySQL、PostgreSQL等。这对于已经购买或熟悉某一类型数据库产品的用户非常有利,用户不必购买或维护多套不同的数据库,大幅度减低成本。

1.4.3. 跨应用服务器

支持Tomcat、Weblogic、Webspere、JBoss等应用服务器。

1.4.4. 兼容多种浏览器

目前多种浏览器并存,使用非IE浏览器的用户越来越多,即使是IE浏览器也有多种版本。CCMS兼容IE6、IE7、IE8、FireFox、Chrome、Opera、Safari。

web页面制作遵循w3c标准制作,使用table布局,所有标签生成的html代码都经过跨浏览器测试。

javascript脚本基于jquery和javascript标准编写,有效的解决了js跨浏览器的问题。

第2章 系统核心功能预览

2.1. 栏目管理

采用直观、方便的树状组织形式进行网站栏目管理,层次鲜明,和前台页面栏目一一对应。可以导出栏目为excel格式,复制某几个栏目到别的栏目下,简便了系统操作人的操作,而且可以对某几个栏目进行排序,方便在前台按照此顺序显示。

点击某个栏目,可以给该栏目添加需要的子栏目。在添加栏目时可以指定栏目名称、链接地址、前台是否显示、此栏目下的文章是否需要手动审 核、可以指定栏目类型(多信息栏目还是单信息栏目)、可以设置发布方式、用户访问权限、是否同步发送本栏目的信息到其他栏目,是否接受其他栏目发送过来的信息,

此栏目下的文章格式(因为本系统的文章格式全部可以自定义)等等。

2.2. 文章内容管理

文章列表页面

文章信息是网站的主体成分,也就是说,栏目模板如果说是框架,信息那就是框架的内容,栏目模板和文章信息构成了整个网站。

文章管理是对栏目下文章信息的管理,对栏目下的信息可以新建、编辑、复制、转移、删除等操作。栏目下的信息可以是通过新建,也可通过导入、引用、复制等方法添加。同时,也可以通过导出、发送等方式把文章信息传送出去。

2.2.1. 新建

新建是指手工输入文章信息的各部分内容。

选择文章管理,展开左侧栏目树结构,选择某栏目,点击右侧上的新建,在出现的输入框中输入信息各部分内容,标题必填。

图 2.5.1-1 信息编辑页面

【标题】填写相应的文章标题(必填)。

【副标题】填写相应的文章副标题

【引题】填写相应的文章引题

【作者】添加文章作者,可以选择和填写。下拉框的作者在系统设置—>作者管理中添加。

【来源】指此文章的出处,可以选择和填写,同作者添加。

【内容】对文章的内容在高级编辑器中进行编辑,操作类似word排版。

【关键词】可以自己设置,也可以自动提取

【摘要】可以自己设置,也可以自动提取

【图片】点击选择按钮,出现媒体管理中上传的图片,可以选择。附件、媒体、动画等

类似。如图:

【审核并保存】可以对单条信息进行审核。

【置顶】把该信息置顶。

【有效日期】文章显示的有效日期,超过有效日期后可以自动撤稿。

【显示时间】信息标题在页面上的显示时间。

【发布时间】设定定时发布时间。

2.2.2. 复制

复制选中的信息

2.2.3. 粘贴

选择到某栏目下,然后粘贴复制的信息

2.2.4. 删除

把信息放进回收站,前台不显示

2.2.5. 清除

信息直接彻底删除

2.2.6. 导入

将现有的信息文档参照系统格式文本导入到系统中。支持 xml格式。

2.2.7. 导出

要将本栏目下所选的信息的条数导出,系统会根据系统默认的格式导出为xml文档。

例如:选择某信息,点击导出,在对话框中输入要导出信息是从第几条到第几条,选择导出生成文档类型,点击“确定”,然后选择保存文档的路径,保存。

2.2.8. 排序

信息根据导入或者新建的时间顺序进行排列,显示在前台页面,或者后台的管理栏目列表中。

例如:如果想对信息的排列顺序进行调整,可以先勾选要排序的信息,点击“排序”;也可以直接点击排序,输入要排序信息的范围,然后出现如图,选中某条或某些信息,通过向上、向下调整信息顺序。

图2.5.6-1 信息排序

2.2.9. 预览

预览信息在前台显示的文章页效果。此操作必须给先给此栏目下此格式的信息设置文章页模板。

2.2.10. 审核

对新增的信息发布设置是否需要审核后才能发布。

例如:如果在栏目管理中把此栏目下“审核”功能开启,则接下来新增的信息的状态为“未审” ,待有审核权限的用户审核后,才能发布,前台显示。

图3.1.10-1

2.2.11. 搜索

搜索可以根据信息标题中包括的字母、数字、汉字,进行检索。

2.2.12. 撤稿

撤稿指将过期或不需要在网页上显示的信息,从前台页面上撤下来。

例如:选择已发布的文章,进行撤稿,撤搞的文章在文章管理中的状态栏显示为未发布。

2.3. 格式管理

格式是对信息的约束,用来规定信息的各部分的组成输入,从而形成一篇完整的信息;系统默认带有常用信息的默认格式,对于默认信息格式不能满足要求的,系统支持数据字段的扩展,添加的扩展字段类型可以为字符类型、整数类型、小数类型、日期类型、图片类型、附件类型、媒体类型、枚举类型、长文字类型等。

2.3.1. 新建

新建格式,是指设置信息的各字段属性、以及是否必填,以及设置为默认的信息格式。

在“信息管理”下,选择好栏目添加信息时,如果为默认的格式,则在没有修改栏目下格式时,直接使用默认的信息格式;否则,使用选择的信息格式。系统提供一种常用的信息格式。

图:格式管理

如果没有合乎用户的要求,则可以通过添加按钮,在弹出的对话框中输入格式名称如政策法规。

图:格式新增

点击该格式右侧的属性,对格式内包含的各字段进行添加、删除,并支持对格式字段的排序功能。

站点管理员根据信息内容和布局的要求,如果现有的格式不能满足新信息的需求,则可以自建信息格式,并将此信息格式和栏目绑定,设置为此栏目的默认信息格式,在文章管理下对此栏目添加信息,会自动默认该格式。

管理员建好相应的信息格式并绑定后,进入信息管理下,对相应文件库进行信息录入操作,遵照已设定字段填写

2.3.2. 排序

对格式中各字段的信息处显示的顺序进行排序。

2.3.3. 删除

删除选择的信息格式

2.4. 文档管理

文档管理可以对上传到服务器中的图片、flash、压缩文件、视频等类型的文件进行分类管理。系统默认分为四种类型的管理:图片、flash、附件和js文件的上传。

注意:文档管理中对上传文件的大小设置为不能超过10M,否则影响平台效率。

2.4.1. 网站水印

为用户保护自己的图片版权,系统会自动给图片加上一些水印标识信息。

水印设置种类:文字水印,图片水印。

在新建水印的时候,对水印各属性保存为默认位置,在用户对图片选择水印后默认,设置好以后点击“保存”,这样在上传图片的时候就可以选择水印类型及哪个水印,系统支持对水印默认属性的修改。

备注:必须在系统设置→网站管理→系统水印,选择开启,才可以设置水印。

2.4.1.1. 文字水印

文字水印即在图片上加入文字标识信息,点击“新增”按钮,如下图所示:

图:文字水印

【水印位置】设置水印在图片上所处的位置。

【水印透明度】数据越大透明度越低。

2.4.1.2. 图片水印

图:图片水印

图片水印即在图片上加入图片标识信息,点击“导入”,导入图片水印。

2.4.2. 图片类别

2.4.2.1. 缩略图设置

选择是否生成缩略图,生成缩略图的默认尺寸,以及缩略图的手动大小设置。

2.4.2.2. 类别管理

目前图片类别下只支持一层类别管理。如:图片管理下新增了首页图片,首页图片下不能新增类别。

【新增】选择图片类别菜单,点击新增按钮,出现新增图片类别界面,填写类别名和类别描述,点击确定按钮,类别新增成功。

2.4.3. 媒体类别、Flash类别、附件类别、js脚本

同图片上传

2.4.4. 上传图片

选择一个图片类别,上传图片

上传图片

【图片上传】点击图片上传框内的“新建”,出现选择文件的路径选择框,选择某个图片文件,再点击上传按钮(图片说明可根据需要填写),上传成功后在图片文件列表框内显示此条图片的信息。

【水印选项】选择图片加载的水印,也可在系统设置里对水印的属性做修改。

【图片】点击每一行前面的缩略图可以与预览图片

图2.4.4 –2 图片管理

注意:FLASH类别、视频类别、附件类别同上

2.5. 模板管理

模板是网站的框架。前台页面必须先选择模板,进行单元标签设置,再通过信息内容与信息格式的绑定,才能生成真正的浏览网页。

模板管理可以分为模板类别,模板的上传、下载、更新,模板实例的单元设置。

2.5.1. 模板类别

模板分类,是为了便于页面的区分选择。用户可以将要用的模板导入到对应的模板类别下,也可以自定义新类别,如图2.7.1-1。

注意:其中首页模板、频道页模板、文章页模板、专题频道模板为系统默认设置。

图 2.7.1-1 模板类别管理

【新增】添加新类别。点击新增,出现新增界面,填写好类别名称,选择模板的属性,点击保存即可。

2.5.2. 模板导入

点击导入,进入导入界面,如图,选择需要导入的全部模板类文件。完整的模板类文件需包含:html模板页面(utf-8模式)、css文件、images图片文件夹的压缩包。注意导入模板的重名,命名可以为汉字。

导入模板

2.5.3. 模板更新

对于已上传模板文件的修改,可进行模板HTML页面文件的更新。

对已存在模块页面及图片,或者仅图片的更新,需选择页面文件及需要更新或者新上传的图片。

同模板“导入”,选择文件进行更新。

注意:更新的文件名必须与被更新的文件名一致。

2.5.4. 复制

将各栏目中需要使用相同的模板,进行复制操作,提避免重复上传,提高操作效率。

勾选需要复制的模板,点击复制,选择其他某类别,点击粘贴,模板被复制到此处。注意:同一类别下的模板不能复制粘贴。

2.5.5. 转移

选择需要转移的模板名称,点击转移,选择目标类别,将目前类别下的已勾选的模板转移到选择的类别下。注意:同一类别下的模板不能剪切粘贴。

2.5.6. 粘贴

将勾选的模板复制后,粘贴到某个目录下,粘贴后的模板名称为原模板名_类别。

2.5.7. 模板实例

当新增模板的时候,会从模板文件中生成模板实例,即为了保护模板原文件的复印品。只有对增加出来的模板实例进行修改设置。也可以对已经生成的但没有用到的实例进行删除。

可以捆绑某些栏目下的某一格式。

2.6. 模板设置

模板设置,其实是对从模板中生成的模板实例的设置。可以通过新增或选择模板实例,确定了模板后,对模板进行单元设置。

模板的设置是与栏目树有关的,每一个栏目的节点,都可以选择模板。模板还有继承性,如果父栏目选择了模板,子栏目没有选择,则所有子栏目继承根节点的模板,如果父栏目没有选择模板,子栏目继承网站的默认模板。

2.6.1. 新增

新增:是指从一个模板中复印出一个模板实例,又将这个实例选择给了某个栏目。

对每一层次的栏目增加模板。点击模板设置中的新增按钮,界面中有模板类别和模板信息。先选择模板类别,再选择模板类别下的模板信息,点击保存按钮。如需预览模板,点击“预览”。如选择错误,点击关闭。

2.6.2. 选择

选择是选择在模板预设中预置好的模板实例,操作同新增模板。

注意:新增模板是选择导入的模板;选择模板是选择这些导入模板的实例。

2.6.3. 撤销

点击撤销,即取消了模板实例的选择。

2.6.4. 单元设置

点击“设置”,就会打开生成的模板实例,页面上根据模板的标注设置,产生了多个虚线框,即页面单元模块。如图:

对这些单元的修改设置,称之为单元设置。必须通过单元设置才能把信息内容体现在前台页面。

点击任意虚线区域,弹出参数设置界面,如图

模板单元设置

【模板单元列表区】显示该模板页面上所有的单元名称,点击单元名称就可以对该单元进行相应的设置。

【单元类型】有9种单元类型可以选择。

【模板参数设置】设置该模板单元的相关参数。

【行列信息】填写信息显示的行数和列数。

如标题链接设置如下,其他单元设置不做详细描述

【字段标签】可以选择前台发布后需要选择的字段

【标题前缀、后缀】显示在标题前或后的图形或文字。如:New! ◇ ◆等。

【标题字数】控制信息标题的显示字数。

【摘要字数】只有图片新闻才有此项,填写摘要的字数,自动按字数截取摘要。

【前缀后缀有效期】指前缀或后缀显示的天数,多少天后失效,不再显示。

【更多】一般在信息右下角的链接。介绍标题链接时再介绍。

注意:如果是自定义栏目,需要手动修改字段标签。

【效果展示】显示所选样式的效果

【效果源码】显示所选样式的代码

【刷新模板】点击刷新模板才能使得设置的单元效果起作用。

【样式管理】系统默认的几种样式,可以选择使用,用户也可以自己导入或编辑。如果要编辑样式,编辑图2.8.4-1中的JavaScript脚本。如果要导入样式,点击图2.8.4-1中的“样式管理”按钮,进行导入,如下图所示:

样式可以进行新建、删除等操作

右击任意单元设置,出现如图所示界面:

模板单元设置

【剪切】同windows的剪切,剪切该单元的设置到另一个单元,可以剪切到同一个模板也可以剪切到不同的模板的单元中。

【复制】复制单元设置,同剪切的操作。

【粘贴】粘贴单元设置。

【删除】删除单元设置。

【刷新】刷新页面,功能同模板单元设置的模板刷新区。

【预览】预览设置的模板页。

2.7. 用户管理

2.7.1. 角色管理

角色列表

系统默认角色:网站管理员

【网站管理员】管理当前的网站,网站管理员也可以管理相应的机构。

图:添加角色

添加完角色后,对角色进行权限设定。

菜单权限设定

角色管理支持对各角色拥有的系统菜单的设置、拥有栏目的设定及各栏目具体功能的设定,以及对各栏目下文章的权限设定。

如果已经添加了用户,可以点【角色设置】把用户设置为某一角色,用户就有该角色的权限。

2.7.2. 机构管理

系统设置下有机构、用户角色的设定。

机构是指为便于对系统用户进行区分、管理,即用户属于某一机构,任某一职务。

图:新增机构

【机构名称】:填写该机构名称。

【上级机构】:点击选择按钮选择上级机构。

【机构描述】:详细描述机构。

2.7.3. 用户管理

【新增用户】添加用户,设定用户的登录名和密码,所属机构、电话等详细信息,以便管理员管理,如图所示。*号为必填写项。

新增用户

保存后设置用户的权限和角色,点击设定角色和权限,对用户赋予角色和权限,如下图所示:

图:用户权限设定

点击用户列表后的各权限设定按钮,在弹出的页面中列出网站的所有栏目列表,管理员根据需要可以赋给用户相应的栏目、文章、扩展功能权限,角色设定与之类似。

图:用户角色设定

用户栏目文章权限

其他系统功能,如系统设置,站内短信,个人设置,发布管理,网站管理,扩展功能不做具体描述。具体可参考CCMS操作手册。

第3章 系统可扩展性介绍

CCMS网站内容管理系统除了具备上述强大的内容管理功能外,还具备强大的扩展功能:

 可以整合现有政府机构常用办公系统,实现信息统一、数据同步、用户信息及权限统一管理,实现单点登录等功能

 可以整合现有企业管理软件、财务管理软件、库存管理软件等

 可以整合现有ASP/PHP/.NET/JSP等脚本语言开发的任何WEB管理系统

 可以在CCMS网站内容管理系统的基础上做重大的二次开发项目,在功能菜单管理中,以功能集的方式提供了对外功能接口,可以将二次开发

后的功能附加到CCMS后台管理系统中。

第4章 系统报价及相关服务

 系统报价:

CCMS知识产权共享费用:详细情况请联系我公司销售人员。

相关服务:

服务项目

系统安装服务

软件运行环境配置

服务器安全检测和配置

问题诊断与修复服务

软件升级操作服务

数据库迁移服务

数据库转换

小范围的网站模板修改

模板错误修正服务

网站目录结构调整(SEO优化)

模板定制服务

服务内容

指技术人员为您安装好CCMS系统(不包含相关的软件运行环境配置)

指技术人员为您安装配置好运行CCMS系统所需的环境(含各种所必需的软件的安装和配置,以及初步的安全配置)

指技术人员为您进行服务器的安全检测和配置,最大化的保护服务器的安全。

指当您的网站出现数据库损坏/运行速度慢/程序出错/软件不兼容等各种疑难问题时,由技术人员为您诊断并修复。

指技术人员为您将CCMS系统的程序和数据库从低版本升级到新版本。只限未改动数据结构的官方标准数据库。

指技术人员为您将数据库从一台服务器迁移到另一台服务器上,保证数据不丢失,系统正常运行。

指技术人员为您将同一版本的CCMS系统的数据在MySQL、SQL

Server、Oracle、DB2等数据库间进行转换。

指由技术人员为您进行网站模板的小范围修改(每次修改工作量不超过4小时间),以满足您的网站模板变更需求。

指当您使用的不是CCMS提供的官方模板或者在官方模板基础上进行了修改并发生错误时,由技术人员为您检测并修复模板中存在的问题。

技术人员根据SEO优化原理,对您的网站目录结构进行进行调整。如涉及页面调整,需要增加费用。

本服务只为CCMS整套模板定制价格,非单独页面定制价格。费用按客户需求及制作周期大致计算并报价,视具体情况另行协定。

本服务针对购买CCMS商业授权的客户,当功能模块有个性要求时需功能定制服务

要官方提供的定制服务,费用按开发周期大致计算并报价,视具体情况另行协定。

第5章 部分核心代码

package ;

import DateFormat;

import ;

import ;

import ce;

import ;

import ;

import ken;

import ilter;

import tion;

import pply;

import pplyService;

import ansformer;

import rializer;

/**

*

* @author csx

*

*/

public class GoodsApplyAction extends BaseAction{

@Resource

private GoodsApplyService goodsApplyService;

private GoodsApply goodsApply;

private Long applyId;

public Long getApplyId() {

return applyId;

}

public void setApplyId(Long applyId) {

d = applyId;

}

public GoodsApply getGoodsApply() {

return goodsApply;

}

public void setGoodsApply(GoodsApply goodsApply) {

pply = goodsApply;

//

//

//

}

/**

* 显示列表

*/

public String list(){

QueryFilter filter=new QueryFilter(getRequest());

List list= (filter);

Type type=new TypeToken>(){}.getType();

StringBuffer buff = new StringBuffer("{success:true,'totalCounts':")

.append(ingBean().getTotalItems()).append(",result:");

Gson gson=new Gson();

((list, type));

JSONSerializer serializer=new JSONSerializer();

orm(new DateTransformer("yyyy-MM-dd HH:mm:ss"),"applyDate");

(e(new String[]{"class"}).prettyPrint(list));

("}");

jsonString=ng();

return SUCCESS;

}

/**

* 批量删除

* @return

*/

public String multiDel(){

String[]ids=getRequest().getParameterValues("ids");

if(ids!=null){

for(String id:ids){

(new Long(id));

}

}

jsonString="{success:true}";

return SUCCESS;

}

/**

* 显示详细信息

* @return

*/

public String get(){

GoodsApply goodsApply=(applyId);

StringBuffer sb = new StringBuffer("{success:true,data:");

JSONSerializer serializer=new JSONSerializer();

orm(new DateTransformer("yyyy-MM-dd HH:mm:ss"),"applyDate");

(e(new String[]{"class"}).prettyPrint(goodsApply));

("}");

setJsonString(ng());

return SUCCESS;

}

/**

* 添加及保存操作

*/

public String save(){

SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss-SSSS");//自动生成申请号

lyNo("GA"+(new Date()));

if(lyId()==null){

rovalStatus((short)0);//设初始值为0,即是为未通过审批

}

(goodsApply);

setJsonString("{success:true}");

return SUCCESS;

}

}

package ;

import DateFormat;

import ;

import ;

import ce;

import ;

import imal;

import ;

import ken;

import ilter;

import tion;

import k;

import Goods;

import kService;

import GoodsService;

import ansformer;

import rializer;

/**

*

* @author csx

*

*/

public class InStockAction extends BaseAction{

@Resource

private InStockService inStockService;

private InStock inStock;

@Resource

private OfficeGoodsService officeGoodsService;

private Long buyId;

public Long getBuyId() {

return buyId;

}

public void setBuyId(Long buyId) {

= buyId;

}

public InStock getInStock() {

return inStock;

}

public void setInStock(InStock inStock) {

k = inStock;

}

/**

* 显示列表

*/

public String list(){

QueryFilter filter=new QueryFilter(getRequest());

List list= (filter);

StringBuffer buff = new StringBuffer("{success:true,'totalCounts':")

.append(ingBean().getTotalItems()).append(",result:");

JSONSerializer serializer=new JSONSerializer();

orm(new DateTransformer("yyyy-MM-dd HH:mm:ss"),"inDate");

(e(new String[]{"class"}).prettyPrint(list));

("}");

jsonString=ng();

return SUCCESS;

}

/**

* 批量删除

* @return

*/

public String multiDel(){

String[]ids=getRequest().getParameterValues("ids");

if(ids!=null){

for(String id:ids){

(new Long(id));

}

}

jsonString="{success:true}";

return SUCCESS;

}

/**

* 显示详细信息

* @return

*/

public String get(){

InStock inStock=(buyId);

StringBuffer sb = new StringBuffer("{success:true,data:");

JSONSerializer serializer=new JSONSerializer();

orm(new DateTransformer("yyyy-MM-dd HH:mm:ss"),"inDate");

(e(new String[]{"class"}).prettyPrint(inStock));

("}");

setJsonString(ng());

return SUCCESS;

}

/**

* 添加及保存操作

*/

public String save(){

SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss-SSS"); //自动生成入库单号

ckNo((new Date()));

Integer inCount= ounts();

BigDecimal price=ce();

BigDecimal amount=null;

if(inCount!=null&&price!=null){

amount=ly(f(inCount));//总额的计算

}

unt(amount);

Long goodsId=dsId();

OfficeGoods goods=(goodsId);

if(Id()==null){

ckCounts(ckCounts()+ounts());

}else{

Integer newInCount=ounts(); //修改之后的入库数量

Integer oldInCount=CountByBuyId(Id());//修改前的入库数量

if(!(newInCount)){

ckCounts(ckCounts()-oldInCount+newInCount);

}

}

(inStock);

(goods);

setJsonString("{success:true}");

return SUCCESS;

}

}

package ;

import DateFormat;

import ;

import ;

import ce;

import ;

import ;

import ken;

import ilter;

import tion;

import Goods;

import GoodsService;

import rializer;

/**

*

* @author csx

*

*/

public class OfficeGoodsAction extends BaseAction{

@Resource

private OfficeGoodsService officeGoodsService;

private OfficeGoods officeGoods;

private Long goodsId;

public Long getGoodsId() {

return goodsId;

}

public void setGoodsId(Long goodsId) {

d = goodsId;

}

public OfficeGoods getOfficeGoods() {

return officeGoods;

}

public void setOfficeGoods(OfficeGoods officeGoods) {

Goods = officeGoods;

}

/**

* 显示列表

*/

public String list(){

QueryFilter filter=new QueryFilter(getRequest());

List list= (filter);

StringBuffer buff = new StringBuffer("{success:true,'totalCounts':")

.append(ingBean().getTotalItems()).append(",result:");

JSONSerializer serializer=new JSONSerializer();

(e(new String[]{"class"}).prettyPrint(list));

("}");

jsonString=ng();

return SUCCESS;

}

/**

* 批量删除

* @return

*/

public String multiDel(){

String[]ids=getRequest().getParameterValues("ids");

if(ids!=null){

for(String id:ids){

(new Long(id));

}

}

jsonString="{success:true}";

return SUCCESS;

}

/**

* 显示详细信息

* @return

*/

public String get(){

OfficeGoods officeGoods=(goodsId);

StringBuffer sb = new StringBuffer("{success:true,data:");

JSONSerializer serializer=new JSONSerializer();

(e(new String[]{"class"}).prettyPrint(officeGoods));

("}");

setJsonString(ng());

return SUCCESS;

}

/**

* 添加及保存操作

*/

public String save(){

SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss-SSSS");//自动生成商品号

if(dsId()==null){

dsNo((new Date()));

ckCounts(0);

}

(officeGoods);

setJsonString("{success:true}");

return SUCCESS;

}

}

package ;

import ;

import ce;

import ;

import ;

import ken;

import ilter;

import tion;

import GoodsType;

import GoodsTypeService;

/**

*

* @author csx

*

*/

public class OfficeGoodsTypeAction extends BaseAction{

@Resource

private OfficeGoodsTypeService officeGoodsTypeService;

private OfficeGoodsType officeGoodsType;

private Long typeId;

public Long getTypeId() {

return typeId;

}

public void setTypeId(Long typeId) {

= typeId;

}

public OfficeGoodsType getOfficeGoodsType() {

return officeGoodsType;

}

public void setOfficeGoodsType(OfficeGoodsType officeGoodsType) {

GoodsType = officeGoodsType;

}

/**

* 显示列表

*/

public String list(){

QueryFilter filter=new QueryFilter(getRequest());

List list= (filter);

Type type=new TypeToken>(){}.getType();

StringBuffer buff = new StringBuffer("{success:true,'totalCounts':")

.append(ingBean().getTotalItems()).append(",result:");

Gson gson=new Gson();

((list, type));

("}");

jsonString=ng();

return SUCCESS;

}

/**

* 类别树

*

*/

public String tree(){

List list=();

StringBuffer sb=new StringBuffer("[{id:'"+0+"',text:'办公用品分类',expanded:true,children:[");

for(OfficeGoodsType officeGoodsType:list){

("{id:'"+eId()+"',text:'"+eName()+"',leaf:true},");

}

if(()>0){

CharAt(()-1);

}

("]}]");

setJsonString(ng());

return SUCCESS;

}

/**

* 批量删除

* @return

*/

public String multiDel(){

String[]ids=getRequest().getParameterValues("ids");

if(ids!=null){

for(String id:ids){

(new Long(id));

}

}

jsonString="{success:true}";

return SUCCESS;

}

/**

* 显示详细信息

* @return

*/

public String get(){

OfficeGoodsType officeGoodsType=(typeId);

Gson gson=new Gson();

//将数据转成JSON格式

StringBuffer sb = new StringBuffer("{success:true,data:");

((officeGoodsType));

("}");

setJsonString(ng());

return SUCCESS;

}

/**

* 添加及保存操作

*/

public String save(){

(officeGoodsType);

setJsonString("{success:true}");

return SUCCESS;

}

}

package icate;

import ;

import t;

import ;

import ;

import ce;

import Utils;

import ilter;

import il;

import tUtil;

import tion;

import ;

import x;

import lder;

import age;

import essage;

import r;

import tach;

import xService;

import lderService;

import rvice;

import ageService;

import essageService;

import rService;

import tachService;

import ansformer;

import rializer;

/**

*

* @author csx

*

*/

public class MailAction extends BaseAction {

@Resource

private MailService mailService;

@Resource

private FileAttachService fileAttachService;

@Resource

private AppUserService appUserService;

@Resource

private MailFolderService mailFolderService;

@Resource

private MailBoxService mailBoxService;

@Resource

private ShortMessageService shortMessageService;

@Resource

private InMessageService inMessageService;

private Mail mail;

private Long mailId;

private AppUser appUser;

private Long folderId;

private Long boxId;

private String sendMessage;

private Long replyBoxId;

private String boxIds;//移动邮件的集合

private Long fileId;//附件Id

public Long getMailId() {

return mailId;

}

public void setMailId(Long mailId) {

= mailId;

}

public Mail getMail() {

}

return mail;

public void setMail(Mail mail) {

= mail;

}

public AppUser getAppUser() {

return appUser;

}

public void setAppUser(AppUser appUser) {

r = appUser;

}

public Long getFolderId() {

if(folderId==null){

return 1l;

}else{

return folderId;

}

}

public void setFolderId(Long folderId) {

Id = folderId;

}

public Long getBoxId() {

return boxId;

}

public void setBoxId(Long boxId) {

= boxId;

}

public String getBoxIds() {

return boxIds;

}

public void setBoxIds(String boxIds) {

= boxIds;

}

public String getSendMessage() {

return sendMessage;

}

public void setSendMessage(String sendMessage) {

ssage = sendMessage;

}

public Long getReplyBoxId() {

return replyBoxId;

}

public void setReplyBoxId(Long replyBoxId) {

oxId = replyBoxId;

}

public Long getFileId() {

return fileId;

}

public void setFileId(Long fileId) {

= fileId;

}

/**

* 显示列表

*/

public String list() {

QueryFilter filter = new QueryFilter(getRequest());

if(folderId==null||folderId==1){//folderId = 1 表示收件箱

setFolderId(new Long(1));

}

ter("Q__L_EQ", rentUserId().toString());

ter("Q_Id_L_EQ", ng());

// }else{

// ter("Q_Account_S_EQ",

rentUser().getUsername());

// ter("Q_Id_L_EQ", ng());

// }

ted("sendTime", "desc");

List list = (filter);

StringBuffer buff = new StringBuffer("{success:true,'totalCounts':")

}

.append(ingBean().getTotalItems()).append(

",result:");

JSONSerializer serializer = new JSONSerializer();

orm(new DateTransformer("yyyy-MM-dd HH:mm:ss"),

"sendTime");

(e(

new String[] { "class", "r", "ment",

"mailFolder" }).prettyPrint(list));

("}");

jsonString = ng();

return SUCCESS;

/**

* 批量删除

*

* @return

*/

public String multiDel() {

MailFolder deleteFolder = (4l);

String[] ids = getRequest().getParameterValues("ids");

if (ids != null) {

if(getFolderId()==4){

for (String id : ids) {

(new Long(id));

}

}else{

for (String id : ids) {

MailBox mailBoxDelete = (new Long(id));

Flag((short)1);

lFolder(deleteFolder);

(mailBoxDelete);

}

}

}

jsonString = "{success:true}";

return SUCCESS;

}

/**

* 显示详细信息

*

* @return

*/

public String get() {

setMail((mailId));

MailBox readed = (boxId);

dFlag((short)1);

(readed);

//if(folderId!=null && folderId==3){

if(lStatus()!=1){//假如为草稿

JSONSerializer serializer = new JSONSerializer();

//将数据转成JSON格式

StringBuffer sb = new StringBuffer("{success:true,totalCounts:1,data:[");

(e(new String[] {"class","r",

"ment",

"r"}).prettyPrint(mail));

("]}");

setJsonString(ng());

return SUCCESS;

}else{

getRequest().setAttribute("mail", mail);

getRequest().setAttribute("mailAttachs", lAttachs());

return "detail";

}

}

/**

* 添加及保存操作

*/

public String save() {

if (lStatus() == 1) {

//假如发送邮件,发件人不能为空

if(y(ipientIDs())){

setJsonString("{failure:true,msg:'收件人不能为空!'}");

return SUCCESS;

}

//邮件主题不能为空

if(y(ject())){

setJsonString("{failure:true,msg:'邮件主题不能为空!'}");

return SUCCESS;

}

//邮件内容不能为空

if(y(tent())){

setJsonString("{failure:true,msg:'邮件内容不能为空!'}");

return SUCCESS;

}

//假如是回复邮件,则原邮件改回复标识

if(replyBoxId!=null&&!"".equals(replyBoxId)){

MailBox reply = (replyBoxId);

lyFlag((short)1);

(reply);

}

MailFolder receiveFolder = (1l);//收件箱

MailFolder sendFolder = (2l);//发件箱

String[] recipientIDs = ipientIDs().split(",");// 收件人IDs

String[] copyToIDs = yToIDs().split(",");// 抄送人IDs

if(lId()==null){//当该邮件是新建邮件时

SaveMail();

// 邮件保存到已发送

MailBox mailBox = new MailBox();

l(mail);

lFolder(sendFolder);

User(rentUser());

dTime(dTime());

Flag((short) 0);

dFlag((short) 0);

e("已发送的邮件");

lyFlag((short)0);

(mailBox);

}else{

Mail old = (lId());

try{

tNullProperties(old, mail);

Set mailAttachs = new HashSet();

dTime(new Date());

String[] fileIds = eIds().split(",");

for (String id : fileIds) {

if (!("")) {

((new Long(id)));

}

}

lAttachs(mailAttachs);

setMail(old);

(old);

}catch(Exception ex){

(sage());

}

MailBox drafted = (boxId);

lFolder(sendFolder);

e("已发送的邮件");

(drafted);

}

//发送系统提示信息

if(sendMessage!=null&&("on")){

ShortMessage shortMessage = new ShortMessage();

tent("您有新邮件!");

Type((short)4);//系统信息

der(rentUser().getFullname());

derId(rentUserId());

dTime(new Date());

(shortMessage);

for(String id : recipientIDs){

if(!"".equals(id)){

InMessage inMessage = new InMessage();

Flag((short)0);

dFlag((short)0);

rtMessage(shortMessage);

rFullname((new

Long(id)).getFullname());

rId(new Long(id));

(inMessage);

}

}

}

// 发送邮件

for (String id : recipientIDs) {

if (!"".equals(id)) {

MailBox mailBoxSend = new MailBox();

l(mail);

lFolder(receiveFolder);

User((new Long(id)));

dTime(dTime());

Flag((short) 0);

dFlag((short) 0);

e("发送出去的邮件");

lyFlag((short)0);

(mailBoxSend);


本文标签: 模板 信息 网站 选择 系统