zhuguifei
2026-03-10 58402bd5e762361363a0f7d7907153c77dbb819f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
<!DOCTYPE html>
<html>
<head>
<title>滕州数采项目规范文档</title>
<meta name="author" content="leejean">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="../webapp/img/favicon.ico" type="image/x-icon">
<style type="text/css">
    .red{color:red;}
</style>
</head>
<body style="margin:0px;width:98%;">
<div style="width:98%;text-align:center">
<h1>※江西中烟工业有限责任公司广丰卷烟厂数据采集系统※</h1>
<h2>项目开发规范文档v1.3_2015.2.3 最后修改:leejean </h2>
最后修改内容请使用<span class="red">class='red'</span>高亮显示
</div>
<hr>
<BR>
<div style="width:98%;padding-left:40px">
<strong>☆项目架构</strong>
<ol>
<li>
    本项目<b>spring-webmvc4.0.6+spring4.0.6+Hibernate4.3.6.Final</b>
    <pre>
    生产管理软件采用(PMS) jQuery-1.11.0+easyui1.3.6(最新版) &nbsp;&nbsp;&nbsp;<a href="http://127.0.0.1:8080/tzsc/pms">访问http://127.0.0.1:8080/tzsc/pms</a>
    车间协同终端采用(WCT) html5+css3&nbsp;&nbsp;&nbsp;<a href="http://127.0.0.1:8080/tzsc/wct">访问http://127.0.0.1:8080/tzsc/wct</a>
    <span class="red">监控系统(ISP) matrix+html5+css3</span>&nbsp;&nbsp;&nbsp;<a href="http://127.0.0.1:8080/tzsc/isp">访问http://127.0.0.1:8080/tzsc/isp</a>
    前端引入其他开源框架,使软件界面增彩
    bootstrap-2.3.1   UI样式库
    Highcharts-3.0.1   报表插件
    kindeditor-4.1.7   文本编辑插件
    My97DatePicker4.8b3   日期组件
    myAlert2.1   WCT定制风格弹窗插件包
    myKeyboard2.1   WCT虚拟键盘插件
    edojs   js小框架,用于工厂日历
    <span class="red">WCT 左侧菜单图标class 参考http://v2.bootcss.com/base-css.html#icons</span>
    <span class="red">ManhuaDate WCT日期采用本插件</span>
    </pre>
</li>
<li>服务器采用tomcat7.0.54(暂定)</li>
<li>项目编码:UTF-8</li>
<li>整个项目主要包含jsp,controller,service,dao层;
    <pre>
    jsp:数据展现层,提供给用户的界面
    controller:只处理数据转换,或者页面跳转判断,不处理任何业务逻辑 继承controller基类
    servcie:面向画面的业务处理
    dao:数据库的存取,本项目对dao已做封装,无需个各个模块重写dao层
    </pre>
</li>
</ol>
<strong>☆项目结构说明</strong>
<ol>
<li>src中的package定义一般格式如下:com.公司名.项目名.一级模块名.二级模块名(依次往下).层名:
<li>jsp中的目录结构:项目名.一级模块名.二级模块名(依次往下)
<li>目录格式:
<pre>
|-src/main/java源码
  |-com
    |-sql  项目开发过程中测试sql代码,开发成员根据姓名简历子包 如com.sql.leejean,com.sql.tom 无需提交svn资源库
    |-test junit测试代码 ,开发成员根据姓名简历子包 如com.test.leejean,com.test.tom 无需提交svn资源库
    |-shlanbao.tzsc 项目名称
      |-base  项目基类包
        |-controller  controller基类
        |-dao     Dao基类
        |-filter  过滤器
        |-interceptor  拦截器
        |-listener  监听
        |-mapping Hibernate映射文件*.java,*.cfg.xml(内部文件通常情况下不做修改)
        |-model   自定义Model类
        |-service Service基类
      |-data   数据
        |-qm         质检仪数据
        |-runtime    生产实时数据
        |-webservice 与第三方系统接口数据
          |-server          接收消息
          |-client          发送消息
            |-proxyclass  存放由wsdl生成的文件
      |-init 存放系统启动实例化操作servlet
      |-plugin 公共插件包 如wct,pms常用的combobox数据源
      |-isp 实时监控模块(另起一个子系统)
      |-pms    生产管理软件
        |-sys      系统管理
          |-user
            |-beans 存放业务bean xxBean.java
            |-controller 存放controller类和配置文件  
            |-servie
              |-impl  存放业务实现类
      |-wct    车间协同终端
        |-doc      文档管理
        |-isp      监控
        |-prod     生产管理
        |-qm       质量
        |-sys      系统管理
      |-utils  工具包
        |-extents  拓展   自定义标签等
        |-params  系统参数
        |-tools    常用类工具包   StringUtil.java,WebContextUtil.java,MD5Util.java,BeanConvertor.java,DateUtil.java等
|-src/main/resource配置文件<span class="red">最新增加spring-task.xml</span>
|-src/test/java 测试
|-build 项目打包成war后的存放目录
|-项目文档 
|-outersys   存放第三方系统wsdl生成的代理类文件 (打jar包)
|-src/main
  |-webapp 项目前端文件 jsp,js,css...
    |-css   公共样式
    |-error   异常跳转静态页面
    |-img   公共图片
    |-jslib   外部库
    |-initlib  实例化库页面    
    |-pms     生产管理端
      |-sys   
        |-user  以用户模块为例
          |-css 用户模块涉及样式
          |-img 用户模块涉及图片
          |-js  用户模块涉及js
          user.jsp 功能界面
          ...        
        |-role
        |-...
        |-...
      |-qm
      |-doc
      |-...
    |-wct     车间协同端
      |-sys
      |-qm
      |-doc
      |-...
    |-isp     监控系统
  |-META-INF  证书,和校验数据
  |-xmlcfg  机台配置文件
  |-WEB-INF   WEB应用的安全目录
|-pom.xml 马文配置文件
</pre>
</li>
 
</ol>
 
 
 
<strong>☆编码规范</strong>
<br>
<br>
&nbsp;&nbsp;<b>java编码规范</b>
<ol>
<li>变量规范:本项目java编程采用驼峰命名法(Camel-Case)</li>
<li>变量规范:变量遵守定义最小域范围,即在括号内定义的就不要在括号外定义;</li>
<li>变量规范:变量命名应有意义,切忌aaa,bbb,ccc类似命名</li>
<li>变量规范:定义且未使用的变量(黄色警告线),应该移除</li>
<li>变量规范:变量定义如果不初始化,比如赋值null,如下
    <pre>
        protected HttpServletRequest servletRequest;  
        应该写成
        protected HttpServletRequest servletRequest=null;
    </pre>
</li>
<li>变量规范:变量定义:controller层和Service层使用spring注入时,无需书写getter方法,命名切忌service,dao
    <pre>
        private UserServiceI userService;  
        应该写成
        private UserServiceImpl userServiceImpl;
    </pre>
    <pre>
        private BaseDao&lt;SysUser&gt; dao;
        应该写成
        private BaseDao&lt;SysUser&gt; userDao;
    </pre>    
</li>
<li>静态变量:全部大写,用'_'分隔
    如:
    <pre>
        private final static Double MAX_DOUBLE_VALUE = 999999999999.99;
        private final static Double MIN_DOUBLE_VALUE = -999999999999.99;
    </pre>
</li>
<li>方法命名规范:
    <pre>
        save*    C   建议格式saveXxx
        query*   R   建议格式queryAll,queryXxxByXxx
        edit*    U   建议格式editXxx,editXxxByXxx
        delete*  D   建议格式deleteXxx,deleteXxxByXxx
    </pre>
</li>
<li>包package:一律小写,不能出现'_'等特殊字符</li>
<li>子模块包结构规范:以sys大模块下的user子模块为例
    <pre>
        |-sys
          |-user
            |-controller  控制层
            |-beans   Vo层
            |-service 业务层
              |-impl   实现类
    </pre>
    <pre>通常情况下不得违背这一结构</pre>
</li>
<li>接口和实现类:
    <pre>
        接口一律:  XxxYxxI.java
        实现类一律:XxxYxxImpl.java
    </pre>
</li>
<li>日志规范:日志打印全部使用logger.info,logger.error,尽可能不使用System.out.println 测试完成务必移除调试形象 </li>
<li>日志规范:通常情况下,采用A file one day,且日志保存30天后自动清除</li>
<li>日志规范:通常情况下,在if和else的入口需要打印日志,或者是代码比较长需要打印日志</li>
<li>日志规范:日志编写内容是以方便调试运维为目的,因此需要写清楚操作信息(主谓宾)和必要的业务信息(通常是带ID之类的信息),如下:
    <pre>
    logger.info("用户某某,执行了某某操作,ID:10001");
    </pre>
</li>
<li>日志规范:如重要日志,应定义单独实例记录(如某个类里面业务日志单独记录在某一个日志文件中)</li>
<li>mapping规范:由实体映射工具生成的model都必须是有abstract model的,该Model无需作修改</li>
<li>代码标签:template统一,记录代码作者,时间,描述等,以便生成格式规范的javadoc,&lt;li&gt;标签使文本列表显示
    <pre>
        类:
            /**
             * Bean转换器
             * &lt;li&gt;@author leejean
             * &lt;li&gt;@create 2014-6-24 下午11:48:40
             * &lt;li&gt;本转换器支持自定义日期转换 
             * &lt;li&gt;使用方法直接在成员变量加自定义注解即可
             * &lt;li&gt;例如:
             * &lt;li&gt;@DateFmtAnnotation(fmtPattern="yyyy-MM-dd HH:mm:ss")
             * &lt;li&gt;private String modifyDatetime;
             * &lt;li&gt;后期可拓展数字精度
             * &lt;li&gt;@NumberFmtAnnotation(scale=1)
             * &lt;li&gt;private Double num;
             */
             public class BeanConvertor {...}
        方法:
               /**
             * 将scr中的同名属性的值复制到desc的同名属性中
             * @author leejean
             * @create 2014-6-24 下午10:38:40
             * @param source 源
             * @param target 目标
             */
            public static void copyProperties(Object source, Object target) throws Exception{
                if(source == null) return;        
                handle(source, target);        
            }
    </pre>
</li>
</ol>
&nbsp;&nbsp;<b>Jsp编码规范</b>
<ol>
<li>js变量和方法命名采用驼峰命名法</li>
<li>class,id等采用'版块-子版块'命名方式 如 'easyui-linkbutton','easyui-menu' (非强制,目的只为命名有意义,增强可读性)</li>
<li>定义且未使用的变量或方法应删除或注释</li>
<li>确保jsp页面标签结构正确即在IDE中不出现黄色警告</li>
<li>变量声明后务必接';' 部分浏览器无法解析此类语法</li>
<li>jsp网页页面一律采用如下template
    <pre>
        &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt;
        &lt;!DOCTYPE html&gt;
        &lt;html&gt;
        &lt;head&gt;        
        &lt;title&gt;用户管理&lt;/title&gt;
        &lt;meta name="author" content="leejean"&gt;
        &lt;body&gt;
            ...
        &lt;/body&gt;
        &lt;/html&gt;
        title便签中务必要写明页面描述
    </pre>
</li>
<li>jsp命名:一律使用Camel-Case命名法,如userEditPwd.jsp</li>
<li>js命名:一律使用Camel-Case命名法,如果jsp和js是one to one,则js与jsp命名一致,且放置jsp页面于同级js目录中 如:
        <pre>
            |-user
              |-js
                -login.js
              |-css
              |-img
              login.jsp
        </pre>
</li>
<li>jsmin命名:js压缩后,在原名称后接min 如:
    <pre>
        压缩前
        login.js
        压缩后
        login.min.js
    </pre>
</li>
<li>jasper报表文件:如有模块有报表导出,jasper文件存放于与css,js,img同级目录的jasper文件夹中,Camel-Case命名</li>
<li>css命名:同js命名规则,放置jsp页面于同级css目录中</li>
<li>image命名:不得使用中文命名(某种情况下将无法访问)</li>
<li>符号使用:系统提示信息推荐使用英文符号(括号,逗号,分号等)  如推荐使用'(',')' 不使用'(',')'</li>    
<li>使用Easyui相关事宜:
    <pre>
        组件变量声明与赋值:
        var dataGrid=null;//声明全局变量接收组件对象,方便其他地方调用
        $(function() {
           dataGrid = $('#dataGrid').datagrid({
            properties...
           });
        });
    </pre>
    <pre>
        表单内容序列化:
        $.getFormData($('#searchForm'));
    </pre>
    <pre>
        日期组件初始化:
        $.initDateBox($('#dateBox'));
    </pre>
    <pre>
        字符串分割
        $.stringToList("1,2,4,5");
        return "[1,2,3,4]"
    </pre>
    <pre>
        combobox数据源封装
        原则:编写service时,添加一个空白格,index=0位置    id为0 text为' '
        $.initShiftCombobox($("#comboBox"));
    </pre>
    <pre>
        String格式化功能
        $.formatString($.formatString('字符串{0}字符串{1}字符串','第一个变量','第二个变量');
        return "字符串第一个变量字符串第二个变量字符串"
    </pre>
    <pre>
        去字符串空格
        str.trim();
        str.ltrim();
        str.rtrim();
    </pre>
    <pre>
        清除查询条件:
        $.clearParams($("#form"));
    </pre>
</li>    
</ol>
 
 
&nbsp;&nbsp;<b>代码封装部分</b>
<ol>
<li>采用通用com.tz.base.dao.BaseDao&lt;T&gt; service层注入baseDao,调用内部封装方法,即可实现所有业务的CRUD操作</li>        
<li>service类通过继承com.tz.base.service.BaseService; 获取logger等父类定义成员变量等</li>
<li>拓展com.tz.utils.extents.DayRollingFileAppender 实现日志自动清除功能</li>
<li>拓展自定义注解@DateFmtAnnotation
<pre>
        @Retention(RetentionPolicy.RUNTIME)
        /**
         * 日期格式化注解
         * &lt;li&gt;@author leejean
         * &lt;li&gt;@create 2014-6-24 下午11:38:40
         */
        public @interface DateFmtAnnotation {
            /**
             * 格式化模板
             * yyyy-MM-dd HH:mm:ss
             * &lt;br&gt;更多模板参考Data类相关API
             * @author leejean
             * @create 2014-7-3下午08:04:05
             * @return
             */
            public String fmtPattern();
        }
</pre>
</li>
<li>拓展自定义注解@NumberFmtAnnotation
<pre>
        @Retention(RetentionPolicy.RUNTIME)
        /**
         * 数字精度注解
         * &lt;li&gt;@author leejean
         * &lt;li&gt;@create 2014-6-24 下午11:48:40
         */
        public @interface NumberFmtAnnotation {
            /**
             * 小数位数
             * &lt;br&gt;"0","1","2"
             * @author leejean
             * @create 2014-7-3 下午09:05:25
             * @return
             */
            public int scale();
        }
</pre>
</li>
<li>
    将常用类分类封装
    <pre>
        BeanConvertor.java  vo-po转换器
            使用此转换器配合自定义注解
            @NumberFmtAnnotation(scale=2)
            @DateFmtAnnotation(fmtPattern="yyyy-MM-dd")
            可实现同名属性不同类型自由转换
            目前支持Date&lt;-&gt;String,以及高精度Double转自定义小数位Double类型        
        ConfigUtil.java 配置文件类
        DateUtil.java   日期处理类
        FileOptionsUtil.java 文件操作类
        MathUtil.java 数字处理类
        MD5Util.java  MD5加密类
        StringUtil.java 字符串处理类
        WebContextUtil.java web上下文类
    </pre>
</li>
<li>controller层分页重新封装
    <pre>
        传统
        super.outPrintBean(userService.querySysUser(userBean, this.getPage(), this.getRows(), this.getSort(), this.getOrder()));
        现在
        super.outPrintBean(userService.querySysUser(userBean, super.getPageParams()));
    </pre>
</li>
</ol>
<strong class="red">☆用户界面基本操作及命名规范</strong>
<br>
<br>
<b class="red">为确保整个项目风格统一,命名一致,请项目开发成员遵循以下约定</b>
<ol class="red">
<li>查询 iconCls:'icon-standard-zoom'</li>
<li>清空条件 iconCls:'icon-standard-table-refresh'</li>
<li>新增xx</li>
<li>删除xx</li>
<li>批量删除xx</li>
</ol>
<ol class="red">
<li>toolbar一律使用/css/toptoolbar.css 以便统一管理</li>
<li>form 一律使用 /css/formtab.css定义的样式以便统一管理</li>
</ol>
<h6 style="color:blue;">◇本文档涉及规范为项目开发过程提供指导作用,具体实施需要结合项目实际情况执行,如有特殊情形,应与项目经理协调,如公共模块须告知项目组其他人员,以确保项目开发过程中版本一致,风格统一</h6>
</div>
</body>
</html>