1.1.7
* 升级logback版本，从1.1.7至1.2.11，因为1.1.7有安全漏洞。
* team.bangbang.common.config.NacosConfigReader.getApiUrl()       拼接接口地址时，添加extension变量
* team.bangbang.common.data.util.Transport
  辅助类文件上传，上传文件size大小设置，统一改为spring.servlet.multipart.max-file-size配置项，支持MB、KB单位；
  同时兼容以前的multipart.maxSize配置，优先使用spring.servlet.multipart.max-file-size配置项。

1.1.6
* team.bangbang.common.sql.IMybatisMapper 所有方法中，附加限定条件appendix的类型由String转变为Object类型。
+ team.bangbang.common.cipher.ICipher     加密、解密的接口，用于系统架构或者业务系统中的解密、解密
* team.bangbang.common.redis.RedisPool    配置参数名称项改为spring boot、spring cloud的名称项，使用spring.redis.*配置参数
                                          且添加密码密文处理机制

1.1.5
+ team.bangbang.common.sql.DbUtil.splitSQLs(String)               将SQL脚本语句（包含注释，多条SQL以半角分号“;”间隔）拆分为多条SQL
* team.bangbang.common.net.http.HttpClient                        修改连接池参数，最大连接数由64改为16，最大空闲连接数由32改为8
* team.bangbang.common.net.http.ResponseHandler                   读取ResponseBody后，关闭ResponseBody
* team.bangbang.common.config.Config                              支持bootstrap配置文件，增加从Nacos配置中心获取配置参数的能力
+ team.bangbang.common.config.NacosConfigReader                   从Nacos配置中心获取配置参数

1.1.4
- team.bangbang.common.config.Constants.SSO_TOKEN_EXPIRE_SECONDS  TOKEN票据过期秒数，默认1800，半小时，可以在配置文件中使用“sso.token.expire.seconds”修改数值
+ team.bangbang.sso.TokenBinder.setTimeOut(int)                   设置当前登录信息超期时间，单位：秒
+ team.bangbang.sso.TokenBinder.getSessionCount()                 当前有效会话的数量

1.1.3
* team.bangbang.common.utility.CookieUtility中使用的 document.domain 参数名称变更为 cookie.document.domain
* team.bangbang.common.servlet.ValidationCodeServlet                     修正保存验证码到Redis中的bug，使用TokenBinder进行保存
+ team.bangbang.common.sql.IMybatisMapper                                  所有Mybatis Mapp的父接口
+ team.bangbang.common.data.StatusCode.REQUEST_PERMISSION_DENIED
                                                                                                        40X段请求问题 - 无权限
+ team.bangbang.common.data.response.ResponseBase.REQUEST_PERMISSION_DENIED
                                                                                                        40X段请求问题 - 无权限
+ team.bangbang.common.log.ExceptionLog                                      异常日志，将异常堆栈信息打印到日志中

1.1.2
* team.bangbang.common.net.http.HttpClient                                        将客户端builder对象改为单例模式，保证不同实例使用同一个连接池
+ team.bangbang.common.net.http.HttpClient.put(String, String, String)      发起PUT方式请求
+ team.bangbang.common.net.http.HttpClient.delete(String, String, String)  发起DELETE方式请求
- team.bangbang.common.file.ExcelReader                                           废弃，推荐使用alibaba的easyexcel
- team.bangbang.common.file.ExcelWriter                                            废弃，推荐使用alibaba的easyexcel
+ team.bangbang.common.data.ThreadVariable.removeAll()                 删除所有原有的线程变量
* team.bangbang.common.filter.*                                                        所有filter默认enable为false，即默认不启用

1.1.1
+ team.bangbang.sso.data.Account.corpCode                                        所属集团编码
- team.bangbang.sso.data.Account.organizationId                                  所属组织编号
+ team.bangbang.sso.data.Account.organizationCode                             所属组织编码
* team.bangbang.sso.Account.roles 更改为 roleCodes
* team.bangbang.sso.Account.hasRole() 更改为 hasRoleCode()

+ team.bangbang.sso.TokenBinder.refreshToken()                                 延长Token有效期
* team.bangbang.sso.SSOContext.SSOContext()                                     构造方法内自动调用TokenBinder.refreshToken()，以延长Token有效期
* team.bangbang.common.config.Config                                               加载配置文件不成功的日志等级由 warn 修改为 info
* team.bangbang.common.filter.SSOFilter                                               修正免校验白名单内 *.html 允许 abchtml 的bug

1.1.0
+ team.bangbang.sso.data.Application.applicationId的getter/setter          系统编号
+ team.bangbang.sso.data.Account.mobile的getter/setter                        手机号码
+ team.bangbang.sso.data.Account.roles的getter/setter                           角色编码集合
+ team.bangbang.sso.data.Account.hasRole(String roleCode)                   是否具有指定的角色
* team.bangbang.common.filter.DDosFilter、SSOFilter                              过滤器添加enable参数，默认为 true 开启过滤检查。但是否加载该过滤器，还取决于容器的配置。
* team.bangbang.common.config.Config                                                 在4个不同的位置按优先级顺序读取配置文件
																											 * 1. 执行启动指令的目录下的config目录
																											 * 2. 执行启动指令的目录
																											 * 3. classpath(即resources目录)的config目录
																											 * 4.  classpath(即resources目录)目录

1.0.9
+ team.bangbang.sso.data.Account.functions的getter/setter                      在各个子系统上面的权限<子系统编号, 有权限的功能地址/编码集合>
+ team.bangbang.sso.data.Account.hasPermission(String applicationId, String codeOrUri) 
                                                                                                             在指定子系统下检查是否有指定权限编码、请求URI的权限
- team.bangbang.sso.IFunctionLimitSSO.canVisit()                                      当前请求是否有权限访问
+ team.bangbang.sso.IFunctionLimitSSO.canVisit(String applicationId, String code, String uri) 
                                                                                                             在指定子系统下检查是否有指定权限编码、请求URI的权限
+ team.bangbang.sso.SSOContext.getApplicationId()                                获取当前应用系统的编号
                                                                                                            首先从http请求中获取，如果http请求中没有传入的话，则从配置文件中读取

1.0.8
+ team.bangbang.common.exception.BizException.statusCode
                                                                                                             业务异常信息中添加statusCode属性，并添加属性的getter/setter方法。
+ team.bangbang.sso.IApplicationSSO.getApplicationList     获得应用信息列表
* team.bangbang.sso.data.Application                                       添加属性：icon图标、faceUrl首页地址，去除属性：loginUrl登录地址、logoutUrl退出地址
* team.bangbang.common.data.KeyValue                                 添加默认构造方法，同时添加key、value属性的setter方法
+ team.bangbang.common.file.FileUtil                                      文件工具类
+ team.bangbang.common.sql.DbUtil                                        数据库工具类

public static InputStream getResourceAsStream(String resource) 方法位置迁移
team.bangbang.common.utility.LogicUtility ==> team.bangbang.common.file.ResourceLoader

public static boolean moveFile(File src, File dest)  方法位置迁移
public static String getFileExtension(String fileName)  方法位置迁移
team.bangbang.common.utility.LogicUtility ==> team.bangbang.common.file.FileUtil

public static String getOrSQL(String fieldName, Object[] ids)   方法位置迁移
public static String getDataString(String strValue)                           方法位置迁移
public static String getDataString(String strValue, String dbName)  方法位置迁移
team.bangbang.common.utility.LogicUtility ==> team.bangbang.common.sql.DbUtil

public static String formatDateField(String dbName, String fieldName)  方法位置迁移
public static String formatDateField(String dbName, String fieldName, int style) 方法位置迁移
team.bangbang.common.sql.SQLHelper ==> team.bangbang.common.sql.DbUtil

* 整个包使用checkstyle检查（单个java类代码行 < 1000，单个方法体代码行 < 100）

1.0.7
* team.bangbang.common.filter.SSOFilter                                       对所有预请求，添加跨域头：Access-Control-Allow-Origin: *
* team.bangbang.sso.IAccountSSO                                                去除获取验证码、登录、退出方法，验证码、登录、退出由前端调用sso_server服务来实现
* team.bangbang.sso.SSOContext                                                  从仅仅支持Header传入token，扩大为支持header、cookie、parameter传入token
                                                                                                               获取token的优先顺序：header > cookie > parameter，以上3种方式前端未传入token时，使用后端生成的token
                                                                                                               SSOContext支持前端3种方式传入token，目的是为了兼容不同架构的业务系统对接。为安全起见，推荐使用header方式传入token

1.0.6
* team.bangbang.common.config.Config                                       兼容yaml格式的配置文件，同时支持properties格式的配置文件
* team.bangbang.common.filter.*                                                    配置参数由下划线改为减号，如 filter.DDosFilter.parameter.enter_uri 改为 filter.DDosFilter.parameter.enter-uri
+ team.bangbang.common.data.ThreadVariable.removeVariable(String)
                                                                                                                  删除线程变量

1.0.5
* team.bangbang.common.net.ResponseHandler.getHeaders()  获得响应头数据
- team.bangbang.common.sso.ISSO
+ team.bangbang.common.sso.SSOContext                                    单点登录上下文
- team.bangbang.common.filter.SSOServerFilter                            单点登录服务端过滤器，因为涉及的映射地址，所以转移到具体的工程中
* team.bangbang.common.filter.SSOClientFilter 更改为 SSOFilter
                                                                                                                    兼做单点登录服务端、客户端过滤器，使用SSOContext获得I*SSO实现对象
                                                                                                                    去除跨域处理，跨域放在业务单元去处理
* team.bangbang.common.net.http.HttpClient.post(String, Map<String, String>)
                                                                                                                    修正Map中参数为null时抛异常的bug

1.0.4
*  team.bangbang.common.filter.SSOServerFilter、SSOClientFilter 请求头Access-Control-Allow-Headers值由token改为content-type,token
* 使用OpenJDK 11编译辅助类，修改出错点

1.0.3
* team.bangbang.common.config.Constants.KEY_SSO_CLIENT_* 修改为 KEY_SSO_*
* 合并team.bangbang.common.sso.server.*接口和team.bangbang.common.sso.client.*接口，
   合并后接口为：
   team.bangbang.common.sso.ISSO                                 单点登录（服务端、客户端共用）- 接口超类
   team.bangbang.common.sso.IApplicationSSO            单点登录（服务端、客户端共用） - 应用系统信息
   team.bangbang.common.sso.IAccountSSO                  单点登录（服务端、客户端共用） - 账户信息
   team.bangbang.common.sso.IDataLimitSSO                单点登录（服务端、客户端共用） - 数据权限
   team.bangbang.common.sso.IFunctionLimitSSO         单点登录（服务端、客户端共用） - 功能权限

* team.bangbang.common.servlet.ValidationCode（验证码） 更改到 team.bangbang.common.data.ValidationCode 下
* team.bangbang.common.servlet.UploadServlet  上传成功的返回值改为ResponseBase类型
* team.bangbang.common.net.http.ResponseHandler.toBytes()、toString()
                                                                                           使用输入流读取数据，避免响应数据量大的情况下出现unexpect end stream的异常
* team.bangbang.common.config.Constants.VALIDATION_CODE 更改为 KEY_VALIDATION_CODE
                                                                                            Session/Request中验证码的Key值
* team.bangbang.common.config.Constants.SSO_TOKEN_EXPIRE_SECONDS
                                                                                             TOKEN票据过期秒数，默认1800，半小时，可以在配置文件中使用“sso.token.expire.seconds”修改数值
* team.bangbang.common.exp.FileDownloader       文件下载
+ team.bangbang.common.CommonMPI.getURI(HttpServletRequest)
                                                                                            uri，以"/"符号开头

1.0.2
* team.bangbang.common.filter.SSOClientFilter     将token从Header中保存到request.attribute中
- team.bangbang.sso.data.DataLimit.in                      删除in属性（Boolean类型），改为自动判断是否in
+ team.bangbang.common.file.ExcelColumn           Excel列信息
* excel操作从jxl替换为poi
+ team.bangbang.common.file.ExcelWriter.ExcelWriter(String templateFile, String excelFile) 
                                                                                            从Excel模板中读取预先设定的内容
+ team.bangbang.common.file.ExcelReader.readCell  返回Object
+ team.bangbang.common.file.ExcelDataChecker    Excel文件数据检查，测试类参见team.bangbang.tools.ExcelDataCheckTest
+ team.bangbang.common.sso.client.IAccountClient.getValidationCode()
                                                                                             获取登录验证码，验证码以BASE64字符串格式返回，需要在页面上加载为图片
+ team.bangbang.common.sso.client.IAccountClient.doLogin(String account, String password, String vCode)
                                                                                            验证登录
+ team.bangbang.common.sso.client.IAccountClient.logout()
                                                                                            退出登录

1.0.1
* 规范注释，统一作者为“帮帮组”，共通类名称为“帮帮WEB开发辅助类库”
* team.bangbang.sso.client.data 包更改为 team.bangbang.sso.data
* team.bangbang.sso.data.Account                              将id属性由Object类型修改为String类型，
                                                                                              添加typeFlag账户类型（自由定义，依赖于接口实现类具体逻辑）、accountNo登录帐号、password登录密码
* team.bangbang.sso.data.Application                         添加2个数据：登录地址loginUrl、退出地址logoutUrl
+ team.bangbang.sso.data.Menu                                  菜单项
+ team.bangbang.common.config.Constants.KEY_SSO_CLIENT_TOKEN
                                                                                              KEY for TOKEN信息
+ team.bangbang.common.filter.SSOServerFilter         单点登录的服务端Filter
* team.bangbang.common.data.response.DtoResponse更名为DataResponse，dto属性变更为data属性
+ team.bangbang.common.data.StatusCode.SERVICE_ERROR_JSON
                                                                                             （203）20X段服务调用 - 请求参数JSON格式有误
+ team.bangbang.common.data.StatusCode.ERROR_THIRD_SERVICE
                                                                                             （404）调用第三方接口异常
+ team.bangbang.common.sso.server                         单点登录服务端辅助类               
* team.bangbang.common.data.StatusCode              参照HTTP状态码更改200为“成功”、404为 “请求的服务不存在”，其它与HTTP状态码不同。
- team.bangbang.common.log.Logger                        日志记录器

1.0
修改groupId为 team.bangbang；版本从1.0开始；完全剥离业务代码；将权限系统的对接改为com.nariit.sso.client.*实现
+ com.nariit.sso.client.*                                                      权限系统client
- com.nariit.system.data.OrganizationScope                         合并到com.nariit.sso.client.data.DataLimit

7.1
+ cn.js.icode.sso.client.*                                                      单点登录client
- cn.js.icode.system.data.OrganizationScope                         合并到cn.js.icode.sso.client.data.DataLimit

7.0
使用JWT替换原有的身份认证，前后端分离，后端仅仅实现接口
- cn.js.icode.common.data.response.ListResponse                 使用DtoResponse即可，dto内放置list、pagination即可
- cn.js.icode.common.data.request.*                             使用规范，拆解为query参数和post body内的业务对象
* cn.js.icode.common.filter.PermissionFilter                    仅保留从Request中获取登录信息、验证是否具有URL访问权限
                                                                                                                    使用JWT从Request中获取登录信息
                                                                                                                    添加跨域处理

* cn.js.icode.common.filter.SessionFilter                       仅保留从Request中获取登录信息、验证是否登录
                                                                                                                    使用JWT从Request中获取登录信息
                                                                                                                    添加跨域处理

* cn.js.icode.common.servlet.ValidationCodeServlet              去除验证码图片灰色边框

6.7
* cn.js.icode.common.servlet.UploadServlet						修改overwrite参数不起作用的bug
* cn.js.icode.common.sql.generator.IDGenerator					将数值型关键字段从int型改为long型，与spring boot中的Sequence获取long型关键字统一规范
* cn.js.icode.common.servlet.UploadServlet						兼容ckeditor的文件上传（ckeditor v4.12.*）
- cn.js.icode.common.servlet.RESTfulServlet                     自定义RESTful服务入口servlet
- cn.js.icode.common.service.restful.*                          自定义RESTful服务
- cn.js.icode.common.payment.IPaymentReceiver					接收支付网关推送的信息
+ cn.js.icode.common.payment.IMessageHandler					处理支付通知信息
* 升级aliyun-sdk-oss从3.3.0到3.8.0版本

6.6.9
+ cn.js.icode.config.service.AuditTaskService.getBillAuditTaskString(String bizCode, Object bizNo)
																展现审批任务列表的字符串
* cn.js.icode.common.sql.SQLHelper.queryMultipleData(String, WebData, boolean)
																修正Oracle数据库的分页问题
* cn.js.icode.common.servlet.ParameterServlet					映射urlPatterns 改为 "*.param"

6.6.8
+ cn.js.icode.common.file.XMLParser								使用jdom解析XML
+ cn.js.icode.common.service.agent.*							Restful服务代理框架
+ cn.js.icode.system.service.UserService.getObject(Long)		得到指定的系统账户
+ cn.js.icode.system.service.UserService.getUserList(Long, Long)取得指定组织下（含下级组织）指定角色的用户列表

6.6.7
+ cn.js.icode.common.FileExportBean								JSP使用的JavaBean导出类
* cn.js.icode.common.file.ResourceLoader.getInputStream(Class<?>, String)
																加载资源文件，如果class传入为空，则忽略
* cn.js.icode.common.file.ExcelWriter.setFooter(Dimension, Dimension)
																设置页尾样式

6.6.6
- cn.js.icode.common.exp.IExporter								导出器接口
- cn.js.icode.common.exp.IDateTransform							导出时的数据转换接口
+ cn.js.icode.common.exp.Exporter								导出器超类
+ cn.js.icode.common.exp.RecordExporter							数据记录导出器
* cn.js.icode.common.exp.SqlExporter							SQL导出器，使用导出器超类重新实现

6.6.5
+ cn.js.icode.common.CommonMPI.getAccountTemporaryFile(Object accountId)
																获得指定账户的临时文件完整路径
+ cn.js.icode.common.exp.SqlExporter							SQL语句导出器
+ cn.js.tools.SourceCombine										将指定文件夹下所有源代码文件复制到一个目标文件中
* cn.js.icode.common.WebBean.process()							如果存在message，则转向消息页面

6.6.4
+ cn.js.icode.common.geo.*										判断给定的地理位置点，在不在给定的地理区域范围内
+ cn.js.icode.common.filter.SessionFilter						获取登录的账户信息Filter
+ cn.js.icode.common.UploadBean									文件上传JavaBean

6.6.3
+ cn.js.icode.config.service.AuditTaskService.hasPendingAuditTask(Long auditUserId, String bizCode, String bizNo)
																获得指定操作账户在指定申请单上的是否有“待审核”的审批任务

6.6.2
+ cn.js.icode.common.filter.PermissionFilter					在转向到deniedPage.html页面时，带上请求页面的URI

6.6.1
* cn.js.icode.common.filter.PermissionFilter					canVisit()、hasRole()里面的账户信息改为User类型
* cn.js.icode.common.net.http.HttpClient						修改拦截器，修改如果响应内容为空的情况下出现的拦截内容空指针异常
+ cn.js.icode.common.payment.*									支付框架接口
+ cn.js.icode.common.exp.*										导出框架接口
+ cn.js.icode.common.servlet.RESTfulServlet						RESTful服务入口servlet

6.6
+ cn.js.icode.common.sql.ICodeDataSource						用于Spring环境获得DataSource，spring环境可以直接使用此类构造一个DataSource的bean
* cn.js.icode.common.file.ResourceLoader						修正windows下环境无法读取jar包中资源的问题
+ cn.js.icode.common.utility.SetUtility							集合操作
+ cn.js.icode.system.data.OrganzationScope						根据权限范围内组织机构节点情况，构造数据查询的范围或者反范围
+ cn.js.icode.system.service.UserService						系统账户 - Service
+ cn.js.icode.common.utility.TreeUtil.getSelfAndSonIds(TreeNode, Collection<Object>)
																在一棵树下找出目标编号范围内的节点，获得这些节点及其子节点的编号集合
+ cn.js.icode.basis.service.OrganizationService.getAllIds(boolean)
																系统中所有节点集合
- cn.js.icode.common.config.Constants.KEY_PERMISSION_URLS		Session/Request中当前用户可以访问的路径串（以半角分号间隔）
+ cn.js.icode.common.config.Constants.KEY_ORGANIZATION_SCOPE	KEY for 数据查询的范围或者反范围
- cn.js.icode.common.CommonMPI.getJSONUser(HttpServletRequest)	从cookie中获取登录的账户信息json对象
* PermissionFilter从cookie中获取当前账户信息，之后转变为User对象放入request.attribute中，其它地方均从request.attribute中获取User对象
- cn.js.icode.system.data.Role									账户角色
- cn.js.icode.system.data.User.roles							账户包含的角色集合
+ cn.js.icode.system.data.User.roleIds							账户包含的角色编号集合

6.5.1
+ cn.js.icode.tag.ExcecuteBeanTag				JSP标签，在JSP页面执行WebBean
+ cn.js.icode.common.filter.EncodingFilter		字符编码Filter

6.5
+ 数据库操作相关的辅助类，使用druid连接池
+ cn.js.tools工具包
+ cn.js.icode.common.ThreadVariable				线程变量


6.4.4
* 权限部分涉及访问地址处，修正访问地址“url”概念为“uri”，意思时虚拟根路径后面的地址
* cn.js.icode.common.filter.PermissionFilter 	添加了filter.PermissionFilter.ignore配置，是否忽略当前Filter，默认为false
+ cn.js.icode.common.filter.PermissionFilter.canVisit(request, uri)
												当前请求是否可以访问指定的页面
												当前共通类放入其它业务系统时，其它业务系统（或其标签库逻辑）可以调用本方法判断权限
+ cn.js.icode.common.filter.PermissionFilter.hasRole(request, roleId)
												当前操作者是否具有指定的角色
												当前共通类放入其它业务系统时，其它业务系统（或其标签库逻辑）可以调用本方法判断权限										

6.4.3
修正文件下载的bug，以前是/download?file=../../../../../../../../../../etc/shadow这样都能下载

6.4.2
* cn.js.icode.common.servlet.ValidationCodeServlet添加onlyNumber参数，默认为true
* cn.js.icode.common.CommonMPI.getRandomString(int) 去除字符0和字母O，避免混淆
+ cn.js.icode.basis.service.OrganizationService		组织机构 - Service

6.4.1
* cn.js.icode.common.file.ResourceLoader.getInputStream(Class<?> cls, String resourceFile)
	修正windows服务器上无法加载jar包内资源文件的bug
	
+ cn.js.icode.config.service.AuditTaskService.deletePendingTasks(String bizCode, Object bizNo)
	删除指定业务对象的所有未执行（StatusFlag = 1,2）的审核任务，已经执行的不删除。

6.4
-  去除spring boot的依赖，将spring boot部分的功能放入应用工程中

6.3.11
恶心了，6.3.10的修改是错误的，topic应在业务层定义，在业务层添加添加ActiveProfile前缀，在不同spring profile环境下达到区分的目的
取消6.3.10的改动

6.3.10
* cn.js.icode.common.queue.kafka.KafkaManager					topic自动添加ActiveProfile前缀，在不同spring profile环境下达到区分的目的
* cn.js.icode.common.queue.rabbit.RabbitManager					topic自动添加ActiveProfile前缀，在不同spring profile环境下达到区分的目的

6.3.9
+ cn.js.icode.basis.service.PartnerService						商户信息 - Service

6.3.8
+ cn.js.icode.config.service.ItemService.getItem(String, String, String)
																通过选项编码或者选项名称获取选项

6.3.7
cn.js.icode.common.net.http.ResponseHandler.toString()			修改多次调用该方法会报出的异常信息

6.3.6
+ cn.js.icode.common.config.Config.getActiveProfile()			获得当前环境名称（可能是dev、test、prod）
* cn.js.icode.common.queue.kafka.KafkaManager					6.3.5版本每次创建新的groupId是错误的，修改了6.3.5的bug。
																将不同环境（dev、test、prod）的groupId做了区分，避免不同环境的消息混在一起。																
* cn.js.icode.common.queue.rabbit.RabbitManager					将不同环境（dev、test、prod）的groupId做了区分，避免不同环境的消息混在一起。
+ cn.js.icode.basis.data.Partner								商户信息POJO
+ cn.js.icode.common.net.http.ResponseHandler.getHttpStatus()	获得Http响应状态

* 所有使用cn.js.icode.common.net.HttpClient调用API，如果返回的http status不为200，则返回的数据进行错误处理。


6.3.5
* cn.js.icode.common.queue.kafka.KafkaManager					修改沿用groupId带来的消息丢失问题，目前消息丢失的原因尚未明确，只是采用每次创建新的groupId来避免

6.3.4
* cn.js.icode.spring.filter.PermissionFilter					canVisit方法添加异常处理添加日志
* cn.js.icode.tag.VisitTag										canVisit方法添加异常处理添加日志
* cn.js.icode.config.AuditService								添加异常处理添加日志
* cn.js.icode.config.AuditTaskService							添加异常处理添加日志
* cn.js.icode.config.ItemService								添加异常处理添加日志
* cn.js.icode.config.ParameterService							添加异常处理添加日志
* cn.js.icode.common.queue.kafka.KafkaManager					修改沿用groupId带来的消息丢失问题，目前消息丢失的原因尚未明确，只是采用每次创建新的groupId来避免

6.3.3
+ cn.js.icode.common.config.Config								修改确定配置文件的逻辑，先取系统环境变量，没有值再取idea环境变量，
																还没有值最后再取application.properties中的spring.profiles.active
- 去除application.properties中的阿里云OSS、七牛云OSS参数

6.3.2
+ cn.js.icode.spring.servlet.TableauServer						Tableau报表免登录信任处理
* cn.js.icode.spring.filter.PermissionFilter					添加对console root的校验，用以避免一个根域名下面的多个console应用权限公用引起的混乱

6.3.1
* cn.js.icode.config.service.ItemService.getItemlist() -> getItemList()
* pom文件添加okhttp 3.11.0的依赖

6.3
* cn.js.icode.config.service.ItemService、ParameterService		调用服务端的服务改为/api/目录
+ cn.js.icode.config.data.Audit、AudtiTask
+ cn.js.icode.config.service.AuditService、AudtiTaskService		添加审批服务

6.2.10
* cn.js.icode.common.queue.Subscriber							修改id属性为index属性，原id属性为自动创建的长整型，导致队列中队列名称泛滥

6.2.9
* cn.js.icode.spring.filter.PermissionFilter					request.getRequestURI()获得的值去除重复的/符号

6.2.8
* cn.js.icode.spring.filter.PermissionFilter					修改设置context-path时候的bug
* cn.js.icode.tag.VisitTag										修改设置context-path时候的bug

6.2.7
* cn.js.icode.common.file.ExcelReader							使用输入流构造一个Excel读取对象。
* cn.js.icode.common.file.ExcelReader.readCell(int, int)		读取指定单元格的文本内容
* cn.js.icode.common.file.ExcelWriter							使用输出流构造一个Excel写对象。
+ cn.js.icode.basis.data.Organization							组织结构实体类
+ cn.js.icode.system.data.User									操作账户实体类
+ cn.js.icode.system.data.Role									角色实体类

6.2.6
* cn.js.icode.common.file.ExcelReader							添加获取行数量、列数量的方法
* cn.js.icode.common.file.QiniuFileManager -> QiniuOssManager	七牛云文件上传类名更改
+ cn.js.icode.common.file.AliyunOssManager						阿里云文件上传类

6.2.5
* 日志改用slf4j + logback
* cn.cn.js.icode.spring.converter.HttpMessageConverterConfig	添加常见MediaType支持
+ cn.js.icode.spring.microservice.IFeign						微服务Feign调用操作父接口

6.2.4
* 更新了部分依赖包的版本，Spring boot更改为2.0.6.RELEASE
- 去除JCache
+ cn.js.icode.spring.servlet.UploadServlet						文件上传Servlet
* cn.js.icode.common.file.QiniuFileManager						修改配置项以file.attachment.为前缀

6.2.1
* 更新了部分依赖包的版本，Spring boot更改为2.0.5.RELEASE
* 修改了cn.js.icode.spring.converter.HttpMessageConverterConfig，针对long类型数据做针对性转换
+ cn.js.icode.config.service.ItemService						选项配置 - Service
+ cn.js.icode.config.service.ParameterService					系统参数 - Service
+ cn.js.icode.common.data.ICodeCache							使用JCache进行封装，依赖JCache和EhCache

6.2
+ com.icode.common.data.StatusCode                              状态码
* com.icode.common.data.response.ResponseBase                   重新梳理，使用com.icode.common.data.StatusCode
+ com.icode.common.CommonMPI.getRequestIP(HttpServletRequest)   获取请求发起者的IP地址

* 使用common-logging做日志组件封套，不使用具体的日志组件
+ com.icode.common.log.*                                        日志处理基础类
* com.icode.spring.WebLogAspect                                 去除controller层的请求、响应日志，添加controller层的OperationLog日志自动记录

6.1
* 重整代码package，所有涉及spring的类统一放在com.icode.spring包下。
- config.properties												该文件使用application.propertis文件代替
* com.icode.common.request.*									重新设计Request基类
* com.icode.common.response.*									重新设计Response基类

6.0
* 使用spring boot框架
* com.icode.common.data.ResultCode								删除不必要的结果码
+ com.icode.common.spring.CookieUser							从Cookie中获取当前登录信息，并转化为实体对象

5.7
* com.icode.common.service.filter.PermissionFilter				如果存在登录信息，则提取并放入到request中，而不管当前页面请求是否需要验证登录信息
+ com.icode.common.service.restful.IOperation					RESTful服务功能点操作接口
* com.icode.common.service.filter.PermissionFilter				修正了每个请求清空Session的bug
+ com.icode.common.redis.RedisUtil.expire						设置key的过期时间
+ com.icode.common.utility.TreeUtil.getSons_(Collection<TreeNode>, Object)
																将查询的子节点优化算法，减少不必要的递归
* com.icode.common.utility.TreeUtil                             优化算法，避免因树的上下级循环造成循环递归

5.6
* com.icode.common.redis.RedisUtil								增加隊列、集合的操作，同時每一步操作完成后關閉Redis連接
* com.icode.common.redis.RedisUtil.lrange(String, long, long)	获取队列中指定位置的元素列表
+ com.icode.common.redis.RedisUtil.keys(String)					从Redis中获取KEY集合
* com.icode.common.net.HttpClient.submit(URL, String, String)	修改了windows平台下的汉子字符集的BUG
+ com.icode.common.net.HttpClient.post(String, String, String)	以指定的contentType提交POST请求
* com.icode.common.net.CharacterHttpRequester					取消所有方法的synchronized修饰，便于多个线程并行发送Http请求
* com.icode.common.net.CharacterHttpRequester					添加3个post()方法，post()方法调用时，可以指定contentType
- com.icode.common.service.filter.PassportFilter
- com.icode.common.service.filter.SessionFilter
* com.icode.common.service.filter.PermissionFilter				没有获取到当前的用户信息时，清除当前所有的session

5.5
- com.icode.common.service.servlet.QRCodeServlet							二维码Servlet
+ com.icode.common.service.servlet.CodeServlet								条形码、二维码Servlet
+ com.icode.common.service.restful.IRESTful.NO_APPID、NO_SIGN、INVALID_SIGN	没有传入appId、没有传入sign、验签失败
+ com.icode.common.service.CheckValueUtil									CheckValue的签名和验签
+ com.icode.common.service.restful.ContextRESTful.getRemoteIP()				请求来源地址
* com.icode.common.service.filter.PermissionFilter							当前用户信息改由Session、cookie中获取
* com.icode.common.UploadBean												添加fileManager参数传入，可以通过该参数指定使用的上传下载处理器
* com.icode.common.DataSharper												添加Long/long类型数据的自动填充
* com.icode.common.data.dbcopy.IQuery.init(Map<String, Object> params)		初始化查询参数

5.4
* com.icode.common.service.filter.PermissionFilter				当前用户信息改由cookie中获取
  com.icode.common.WebBean										当前用户信息改由cookie中获取
  com.icode.common.Transport.hasScriptTag(String, String)		以Id、Flag结尾的参数值允许传入的最大长度调整为50
+ com.icode.common.file.IManager								文件上传、下载处理器接口
+ com.icode.common.file.LocalFileManager						文件上传、下载处理器(将文件上传到服务器本地)
* com.icode.common.UploadBean									使用文件上传、下载处理器
* com.icode.common.mongodb.*									修改MongoDB在config.properties文件中的配置参数为url、database、poolSize
																升级MongoDB的驱动到2.14，去除DBRef的读取
* com.icode.common.service.ICodeContextListener					所有Worker线程，设置为守护线程
* com.icode.common.redis.RedisPool								Redis连接池
* com.icode.common.service.ICodeContextListener.addShutdownHook(Runnable)	添加当前应用退出时的钩子

5.3
* com.icode.common.data.dbcopy									修复mongodb导入sql数据库的bug
* com.icode.common.sql.SQLHelper								查询分页使用数据库引擎自有的分页做法，mysql使用limit参数
* com.icode.common.sql.SQLHelper.getRecordCount					优化性能，35万条记录情况下，优化前耗时0.5秒，优化后耗时0.1秒
* com.icode.common.sql.DatabaseConfig
  com.icode.common.sql.SQLPool									添加simultaneous-build-throttle（一次可以创建的连接数）参数
  com.icode.common.config.Config								添加loaded标记，修正在加载瞬间getProperty取不到值的问题
  com.icode.common.WebBean										将当前操作用户保存到线程变量中
  去除ApplicationCode字段
  com.icode.common.service.restful.IRESTful						修改预订义的结果JSONObject中key为errcode、errmsg
  com.icode.common.service.servlet.RESTfulServlet				客户端请求的body数据增加QueryString格式，强化日志
  com.icode.common.utility.LogicUtility.getTimeAsString(Date)	修正0点时的日期字符串bug

5.2
* com.icode.common.utility.CookieUtility.putUserIntoCookie(Serializable, HttpServletResponse, int)	添加第3个参数，失效时间，单位是秒
* com.icode.common.service.servlet.RESTfulServlet.readBody(HttpServletRequest)			读出的内容使用UTF-8字符集组织成字符串
* com.icode.common.payment.UnionOnlineWapSender					配置参数payment.uniononline.MerId改为payment.uniononline.wap.MerId
* com.icode.common.payment.UnionOnlineWapReceiver				配置参数payment.uniononline.MerId改为payment.uniononline.wap.MerId
* com.icode.common.WebBean										MongoHelper以data属性引用SQLHelper
* com.icode.common.UploadBean									添加file属性：上传的文件信息(web uploader使用key值) 
* com.icode.common.service.servlet.ParameterServlet				修改ContextPath非ROOT时的页面转向BUG

5.1
* com.icode.common.payment.*									重新优化架构，支持支付宝WAP、微信、银联在线3种线上支付
+ com.icode.common.WebBean.WebBean(PageContext pageContext, boolean readRequest)
																request数据是否进行读取变换
+ com.icode.common.CommonMPI.getRandomNumber(int length)		获得随机数字字符串，只能包含数字

+ com.icode.common.service.ValidationCode.getCodeEntity(int length, boolean onlyNumber)
																生成验证码，可以限定验证码是否为纯数字
+ com.icode.common.service.servlet.QRCodeServlet				添加GET方式size参数
+ com.icode.common.cipher.CertUtil								数字证书管理工具类
+ com.icode.common.exp.IExporter.getColumnList()				所有备选的列[KEY：列名称 Value：列编号]
+ com.icode.common.exp.IExporter.selectColumn()					选择需要导出的列编号，多个编号以半角逗号间隔
+ com.icode.common.service.servlet.ParameterServlet				为请求地址追加参数
+ com.icode.common.FileExportBean								添加对导出数据项选择的支持
+ com.icode.common.net.HttpClient.getSession()					获得会话Session
+ com.icode.common.net.CharacterHttpRequester.sendRequest(String url, String method,
			String data, Cookie[] cookies, Map<String, String> session)
																添加Map<String, String> session参数，用户返回会话Session

5.0
* com.icode.common.WebBean.getCurrentUser()						获取当前操作人员，如果Session中不存在，则从request中获取
+ com.icode.common.utility.CookieUtility.putUserIntoCookie()	将当前登录的用户信息加密变换后写入Cookie中
+ com.icode.common.utility.CookieUtility.getUserFromCookie()	从Cookie中获取当前登录的用户信息，如果成果获取了当前登录的用户信息，则将当前登录的用户信息放入HTTP请求
																（KEY：Constants.KEY_CURRENT_USER）中，然后返回当前登录的用户信息。
* com.icode.common.service.filter.PermissionFilter				修正参数中no_validation_modules、no_validation_urls通配符的BUG(BUG示例：login*.jsp不能匹配login.jsp)
+ com.icode.common.service.filter.SessionFilter					检查是否有当前登录的用户信息。
																当前登录的用户信息来源包括Session中和Cookie两种，如果当前登录的用户信息来自于Cookie，则本过滤器将
																提取Cookie中的用户信息并保存在request.attribute（KEY：Constants.KEY_CURRENT_USER）中。
* com.icode.common.common.service.ITask ==> IWorker				更改类名
+ com.icode.common.net.CharacterHttpRequester					HTTP协议下字符串请求发送类
- com.icode.common.utility.IPSeeker								IP所在地查询，后期需要此功能，可以使用相关网络API：
	新浪的IP地址查询接口：http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
	新浪的IP地址查询接口：http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json
	新浪多地域测试方法：http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=12.130.132.30
	搜狐IP地址查询接口（默认GBK）：http://pv.sohu.com/cityjson
	搜狐IP地址查询接口（可设置编码）：http://pv.sohu.com/cityjson?ie=utf-8
	搜狐另外的IP地址查询接口：http://txt.go.sohu.com/ip/soip
	网易有道IP地址API接口：http://www.youdao.com/smartresult-xml/search.s?type=ip&q=115.156.238.114
+ com.icode.common.mongodb.MongoHelper.setWriteConcern(WriteConcern)	设置写策略
* com.icode.common.utility.LogicUtility.getQuotedString(String)	添加\字符的转义
* com.icode.common.CommonMPI.getUUID()							获取UUID，保证线程安全

4.4
+ com.icode.common.net.HttpClient.post(String address, String value)		以POST方式向一个地址提交字符串数据，典型的情况用于提交json或者xml格式的字符串数据
+ com.icode.common.service.restful.IRESTful				RESTful服务处理接口
+ com.icode.common.service.restful.RESTfulFactory		RESTful服务的工厂类，必须在HTTP请求地址参数中包含function参数，以指定需要处理的功能点名称
+ com.icode.common.service.servlet.RESTfulServlet		RESTful服务入口，使用HTML表单测试时，可以使用name="body"的控件发送json数据

4.3
* com.icode.common.UploadBean							添加overwrite、folder、rename参数
* com.icode.common.config.Constants.PAGE_SIZE			分页显示每页显示的记录数修改为10
+ com.icode.common.mongodb.MongoHelper.count()			查询符合条件的记录数量
+ com.icode.common.mongodb.MongoHelper.appendProperty()	追加属性，例如当前应用标识
+ com.icode.common.sql.DBOperation ====> com.icode.common.sql.SQLHelper
+ com.icode.common.mongodb.MongoHelper.distinct()		根据条件，对指定的一个字段（注意为1个字段）进行去重

4.2
+ com.icode.common.utility.TreeNode.getAttributes() 	得到所有属性数据
* com.icode.common.utility.TreeNode.cloneNode()			修正name属性没有clone的问题
+ com.icode.common.WebBean.process() 					将原有在构造方法中的业务逻辑独立为process()方法
* com.icode.common.DataShaper.toObject(Class<?> clsF, Object objValue)  修改部分特殊参数没有正确对应到服务端数值的Bug
* com.icode.el.Functions.executeBean() 					针对WebBean的process()方法进行修改
* com.icode.common.sql.DBOperation.readSingleData()/readMultipleData() 从ResultSet中读取数据，除日期 、Blob、Clob外，常规类型的数据全部使用ResultSet.getObject()读取，以获得最恰当的类型及数值
* com.icode.common.service.servlet.StreamServlet 		修改了file参数中目录分隔符（‘/’、‘\’）的兼容性，同时使用流数据读写替代原先的文件数据整读整写的方式
* com.icode.common.FileExportBean						添加导出key参数
+ com.icode.common.file.ExcelWriter.setAlignment()		设置对齐方式，对其方式可选：left、center、right、justify、top、middle、bottom		
+ com.icode.common.file.ExcelWriter.setColumnWidth()	设置列宽度
+ com.icode.common.file.ExcelWriter.setRowHeight()		设置行高
* com.icode.common.file.ExcelWriter.setHeader()			调整表头颜色样式
* com.icode.common.file.ExcelWriter.setBorder()			调整表体（数据体）颜色样式
* com.icode.common.sql.SQLPool							添加useDatabase属性，如果没有配置数据库，该类下所有方法都忽略
+ com.icode.common.net.HttpClient.setEncoding(String)	设置该站点使用的编码字符集
+ com.icode.common.service.servlet.HttpProxyServlet		添加transform参数（是否替换内容中src、href属性，为其添加proxy链接，默认为true）

4.1
+ com.icode.common.CommonMPI.getApplicationCode()    	当前应用的编码（可以是应用的域名），多个应用共享1个数据库时，使用此编码区分数据
- com.icode.common.file.ZipFile							使用ant.jar中的org.apache.tools.zip.ZipFile代替
+ com.icode.common.file.Serialization.serialize() / unserialize()  二进制字节数组的序列化和反序列化
+ com.icode.common.mongodb.MongoHelper.group()    		 添加聚合函数，用于实现类sql的count、sum、avg、max、min功能。
+ com.icode.common.sql.SQLCopy    						基于SQL语句实现的关系型数据库复制
+ com.icode.common.mongodb.DatabaseConfig				加载MongoDB的配置参数
+ com.icode.common.data.dbcopy.*						数据库数据复制，支持NoSQL和SQL数据库，支持字段增量和减量复制，为保证数据完整性，支持新旧关键字替换
* com.icode.common.mongodb.MongoPool					修改了MongoPool参数配置使用方式，参数配置方式与SQL数据库参数配置方式相同 
* com.icode.common.payment.PaymentSender.createBillNo(Object conn) 将参数更换为Object类型，以兼顾不同数据库的数据库封装

4.0
* com.icode.common.data.PageAttribute --> com.icode.common.data.Pagination
* com.icode.common.database --> com.icode.common.sql
+ com.icode.common.mongodb.*							MongoDB操作基础类
+ com.icode.common.CommonMPI							系统架构共通外接调用的方法集合
* com.icode.common.WebBean								添加MongoDB操作
* com.icode.tools.resource.ResourceLoader --> com.icode.common.file.ResourceLoader	资源文件加载类
+ com.google.zxin.client.j2se.*							二维码操作类
* com.icode.common.service.servlet.QRCodeServlet		生成二维码的Servlet
+ com.icode.common.utility.LogicUtility.toDigitString(int, int) 将整数格式化为指定长度的字符串，不足位数的前面补0
+ com.icode.common.utility.LogicUtility.toAsciiString(String) 将字符串转变为Ascii码，以便于HTTP传输。
+ com.icode.common.CommonMPI.getApplicationOwner() 		当前Application所属的客户标识，配置于Config[application.owner]
* com.icode.common.service.filter.PassportFilter		如果config.properties文件未配置[passport.root.url]，则忽略PassportFilter。
* com.icode.common.service.servlet.DownloadServlet		针对IE和Firefox修正下载文件的中文名称

3.43
+ com.icode.common.file.ZipFile.zip()/unzip()			添加系统默认编码字符集的支持
+ com.icode.common.file.ZipFile.unzip(String zipFileName, String entryName, OutputStream out) 将指定压缩包内的指定文件输出到流中。
+ com.icode.common.file.XMLParser.readDocument() 		读取XML文档，此方法必须执行，而后才可以执行文档解析。
+ com.icode.common.file.XMLParser.addNameSpace(String key, String value) 添加命名空间
+ com.icode.common.file.XMLParser.getSingleNode(String xpath) 返回一个节点
+ com.icode.common.file.XMLParser.getText(String xPath) 获得指定节点的Text值
* com.icode.common.file.XMLParser.select(String xpath) --> getNodeList(String xpath)
+ com.icode.common.service.filter.PassportFilter 		单点登录身份校验，检查当前请求是否已经通过身份认证。

verson 3.42 (JDK 1.5)
* com.icode.common.service.filter.PermissionFilter 		所有*Select.ext格式的请求放行。
* com.icode.common.database.DBOperation.getRecordCount(String) 改为public方法，目的是允许DAO中实现数据库产品个性化分页，以提高分页效率。
* com.icode.common.database.DBOperation.queryMultipleData() 查询多条记录时不再同时统计总记录数量
+ com.icode.common.data.SqlOrder 						传递排序的字段名称和排序顺序
+ com.icode.common.data.PageAttribute.getSqlOrder()/setSqlOrder() 在分页参数中添加字段排序信息
* com.icode.common.WebBean.forward() 					修正因消息转向自身页面的死循环

version 3.41 (JDK 1.5)
+ com.icode.common.utility.IPSeeker 					根据IP定位请求来自的地区
+ com.icode.common.utility.IPUtil 						IP地址工具类
+ com.icode.common.utility.CookieUtility.addCookie(HttpServletResponse response,
			String contextPath, String name, String value, int expireSeconds) 添加一个Cookie
+ com.icode.tools.resource.ResourceLoader.getPath(Class<?> cls, String resourceFile) 传入调用者的类型和资源文件，获得资源文件全路径
+ com.icode.common.mail.MailEntity.getReplyTo()/setReplyTo() 设定邮件答复地址
- com.icode.common.utility.LogicUtility.parseDateFromString()
+ com.icode.common.utility.LogicUtility.parseDate() 	根据一段日期时间字符串(可以是yyyy-MM-dd HH:mm:ss格式的全部或者部分字符串)，转换得到日期时间对象

version 3.40 (JDK 1.5)
* .getTarget() --> .getObject()
- com.icode.common.net.MessageService
- com.icode.common.data.DataChecker
* com.icode.common.database.DAO --> com.icode.common.database.IDAO 数据层操作对象
* com.icode.common.exp.Exporter --> com.icode.common.exp.IExporter 文件导出接口
* com.icode.common.servlet.*Servlet --> com.icode.common.service.servlet.*Servlet 系统servlet
* com.icode.common.filter.*Filter --> com.icode.common.service.filter.*Filter 系统过滤器
+ com.icode.common.service.ITask						WEB应用任务，此任务继承了Runnable接口。
* 使用commons-logging-x.x.x.jar记录ICode基础类日志
+ com.icode.common.service.RondomCode					产生随机字符码
* com.icode.common.mail.MailProxy.newMailSender(String, String, String, boolean) 使用邮件发送参数构造一个邮件发送器
- com.icode.common.mail.MailProxy.newMailEntity()
- com.icode.common.mail.MailProxy.sendMail()
- com.icode.common.mail.MailProxy.receiveMails()
* com.icode.common.mail.MailEntity.MailEntity()			构造方法改为公有
+ com.icode.common.file.Serialization					序列化、反向序列化
* com.icode.common.file.ExcelWriter						修正nextRow()、toRow()、toColumn()函数调用后offset定位错误的问题
* com.icode.common.Transport							GUID参数长度限制由32位调整至36位
+ com.icode.common.exp.IDataTransformation				文件导出、报表中使用的数据转换类

version 3.33 (JDK 1.5)
+ com.icode.common.utility.TreeNode.getName()/setName()	节点名称
* com.icode.common.file.ExcelReader						采用文件游标方式读取Excel
* com.icode.common.file.ExcelWriter						采用文件游标方式写Excel，添加png图片插入
- com.icode.common.exp.ExcelExporter					Excel导出类
- com.icode.common.exp.ExportStructure					Excel导出列、字段定义类
- com.icode.common.exp.PrintableReporter				Excel导出HTML类
- com.icode.common.exp.ReporterCallback					Excel导出中使用的数据转换类
+ com.icode.common.config.Constants.KEY_EXPORTER		Session中导出实例的Key值
+ com.icode.common.exp.Exporter							文件导出接口
+ com.icode.common.FileExportBean						将数据导出为临时文件，并在页面(/common/fileExport.jsp)提供下载
* com.icode.common.generator ==> com.icode.common.database.generator
- com.icode.common.data.UploadProgress					文件上传的进度信息

version 3.32 (JDK 1.5)
* com.icode.common.DataShaper							修正不能正确转换日期[时间]的bug
+ com.icode.common.WebBean.isGet()						判断当前请求是否为GET方式
* com.icode.common.filter.PermissionFilter				修正BUG:设置 / 为免校验URL时，所有的路径都免校验。
* com.icode.common.servlet.ValidationCodeServlet		length参数改由web.xml中配置定义，不再从URL传入，避免黑客攻击
* com.icode.common.UploadBean							服务器端文件临时文件转正式文件失败，返回空字符串作为服务器端文件名
* com.icode.common.utility.LogicUtility.moveFile(File, File) 文件移动，改File.renameTo()方式为文件复制后删除，避免在Windows、Linux不同环境下File.renameTo()功能差异。
+ com.icode.common.servlet.HttpProxyServlet				HTTP代理服务器
+ com.icode.common.database.DAO.delete(T form)			根据ID限定条件删除记录
+ com.icode.common.database.DAO.update(T form)			根据ID限定条件修改记录

version 3.31 (JDK 1.5)
+ com.icode.common.database.DBManager.getDataSource()	获得数据库数据源
+ com.icode.common.database.DBManager.getDataSource(String)	获得数据库数据源
- com.icode.common.database.DAO.delete(T form)			根据ID限定条件删除记录
- com.icode.common.database.DAO.update(T form)			根据ID限定条件修改记录

version 3.30 (JDK 1.6)
+ com.icode.common.UploadBean 文件上传的Bean
- 去除配置文件中的{directory.download}，统一为{directory.stream}
- com.icode.common.generator.GUID 改用java.util.UUID，因为GUID在毫秒级上会产生重复的字符串

version 3.21 (JDK 1.5)
* com.icode.common.generator.TableKeyMetaData.getTables(String)	修改返回值类型为java.util.Set


version 3.20 (JDK 1.5)
+ com.icode.common.database.DBOperation.getAlias()		获得当前数据库连接在config.properties中配置的数据库别名
* com.icode.common.IDGenerator.generateId(DBOperation, WebData)	第一个参数由Connection类型替换为DBOperation类型，目的是可以识别数据库连接来自哪个数据库。
* com.icode.common.generator.TableKeyMetaData			添加了数据库别名处理，涉及修改的方法有initialize()、getTableKey()、getTables()。可以识别config.properties中配置的所有数据库连接池表结构（以前的版本只能识别config.properties中配置的default数据库连接池表结构）。
+ com.icode.common.data.ThreadVariable					添加线程变量类
- com.icode.common.mail.SMSSender						手机短消息发送类（该类是一个空类，无扩展性）
+ com.icode.common.mail.SmsSender						手机短消息发送接口（接口类）
+ com.icode.common.data.DateChecker						业务数据检查器接口（接口类）
+ com.icode.common.utility.LogicUtility.parseColor(String, Color) 根据颜色字符串，产生对应的Color对象。
* com.icode.common.servlet.ValidationCodeServlet		改进验证码Servlet，可以传入length、fontSize、padding、chaos、chaosColor、background、winding参数。
+ com.icode.common.utility.TreeUtil.filterWithAncestor(TreeNode, Collection<? extends Object>, boolean) 从一棵树中剔除允许范围列表之外的所有节点，保留允许范围内节点（可以指定是否含子节点）及其父节点。
+ com.icode.common.file.ExcelWriter.setRowHeight(int, int)		设定行高
+ com.icode.common.file.ExcelWriter.setColumnWidth(int, int)	设定列宽
+ com.icode.common.file.ExcelWriter.merge(int, int, int, int)	合并单元格
+ com.icode.common.file.ExcelWriter.setCellFormat(WritableCellFormat)	设置表格样式，如果传入null，表示使用默认值。
+ com.icode.common.file.ExcelWriter.flush()				将缓冲中的内容写入文件。

version 3.11 (JDK 1.5)
+ com.icode.common.cipher.ICodeCipher					添加了RSA加密解密功能。
+ com.icode.common.mail.MailSender						添加了字符集设定
* com.icode.common.cipher.ICodeCipher.encrypt(byte[], byte[])	方法名称变为 encryptDES(byte[], byte[])
  com.icode.common.cipher.ICodeCipher.decrypt(byte[], byte[])	方法名称变为 decryptDES(byte[], byte[])
* com.icode.common.database.DBOperation.getRecordCount(String)	添加了Access数据库的兼容处理。

version 3.10 (JDK 1.5)
* com.icode.common.WebBean
  com.icode.common.Transport
  com.icode.el.Functions
  com.icode.common.DataShaper
 	编写网站应用的架构改为采用Bean调用DAO实现，使用JSTL+EL展现数据。
* com.icode.common.mail.MailSender						增加了端口设置。
  com.icode.common.mail.MailReceiver					增加了端口设置。接收邮件时如果既有text部分的内容，又有html部分的内容，略去text，读取html

version 3.09 (JDK 1.5)
* com.icode.common.mail.MailEntiry						添加了uid和mailSize两个属性
* com.icode.common.mail.MailReceiver					添加了uid和mailSize两个属性值的读取
* com.icode.common.config.Constants						调整了常量名称，作为KEY值的常量加上前缀：KEY_ ，此外取消了目录分隔符的常量，在程序中统一使用“/”符号。
* com.icode.common.filter.PermissionFilter				去除原有filter参数，新增
														参数：no_validation_modules
															免除路径访问校验的模块(以斜线开始)，可以使用通配符
														 参数：no_validation_urls
															免除路径访问校验的地址(以斜线开始)，可以使用通配符
														 修改了权限校验机制，以获得更好的兼容性。
- com.icode.common.database.DBOperation.getDBDateValue(String)	针对不同的数据库在SQL处理字符型的日期（年月日）
- com.icode.common.database.DBOperation.getDBTimeValue(String)	针对不同的数据库在SQL处理字符型的日期（年月日时分秒）
+ com.icode.common.database.DBOperation.formatDateField(String)	针对不同的数据库，获得指定字段的格式化函数表达式
* com.icode.common.database.DBOperation					将Double和Float类型的存取转换为BigDecimal的存取

version 3.08 (JDK 1.5)
+ com.icode.common.exp.ReporterCallback					Excel导出类、打印报表类所使用的回调接口，用于对报表结果数据进行二次变换
* com.icode.common.utility.TreeNode.findNode(TreeNode, Object) insertNode(TreeNode, TreeNode)  updateNode(TreeNode, TreeNode) ，修正了在一棵树上没有找到指定节点时的意外情况

version 3.07 (JDK 1.5)
* com.icode.common.utility.TreeNode						增加ActiveFlag属性
* com.icode.common.utility.TreeUtil						增加了树的形成、标记、过滤等方法。
+ com.icode.common.exp.PrintableReporter				报表打印，可以调整数据表格列宽度，隐藏/显示数据表格列。
* com.icode.common.database.DBOperation中的java.sql.Types.NUMERIC类型原先按照Integer类型读取，现按照Object类型读取，因为NUMERIC类型可以是整数，也可以是小数。

version 3.06 (JDK1.5)
+ com.icode.common.net.MessageService					使用JMS收发消息，尚没有经过测试，不成熟。
+ com.icode.common.database.DBOperation.getDBDateValue(String)	针对不同的数据库在SQL处理字符型的日期（年月日）
+ com.icode.common.database.DBOperation.getDBTimeValue(String)	针对不同的数据库在SQL处理字符型的日期（年月日时分秒）
* 完整EL表达式的函数库fn.tld，补上fn.tld原有的函数。之前的fn.tld仅仅包括自定义的函数，遗漏了fn.tld原有的函数。

version 3.05 (JDK1.5)
+ com.icode.common.cipher.Machine						使用JNI获取计算机的硬件信息

version 3.04 (JDK1.5)
* com.icode.common.utility.LogicUtility.getOrSql(String, List)	改为getOrSql(String, Object[])

version 3.03 (JDK1.5)
+ com.icode.common.ldap.LDAPOperation
- com.icode.common.ldap.LDAPManager
  com.icode.common.ldap.LDAPEntry
+ 系统试用期到期提示
* 修正了不符合规范的注释，修正标准是使用javadoc导出API文档时不产生错误和警告信息。
* com.icode.common.utility.LogicUtility.getElementValue(String)改为getQuotedString(String)
* com.icode.el.Functions：
														修改urlencode(String)为encodeUrl(String)；
														添加getHTMLString(String)和getQuotedString(String)方法。
* /META-INF/fn.tld EL表达式自定义功能修改，根据com.icode.el.Functions修改内容而修改：
  encodeUrl(String)        (EL example) fn:gencodeUrl
  getHTMLString(String)    (EL example) fn:htmlString
  getQuotedString(String)  (EL example) fn:quotedString

version 3.02 (JDK1.5)
* 细化一些类下面的方法抛出的异常，一般不再是Exception
  com.icode.common.ICodeCipher下方法encrypt()和decrypt()
  com.icode.common.database.DBOperation下方法update()
  com.icode.common.file.ExcelReader构造方法
  com.icode.common.file.ExcelWriter构造方法
  com.icode.common.file.FileReader下方法readBytes(), readString()
  com.icode.common.file.FileZip下方法zip(), unzip()
  com.icode.common.utility.ImageZoom下方法：createThumbnail()
  com.icode.common.utility.TemplateDraw构造方法
  com.icode.common.utility.Simple2Tradition构造方法、getInstance()
  com.icode.common.utility.LogicUtility.getResourceAsString()
  com.icode.common.utility.Unicode2Big5构造方法、getInstance()、unicode2Big5
+ com.icode.common.utility.LogicUtility.getFileExtension()

version 3.01 (JDK1.5)
* 修正com.icode.common.database.DBOperation自动获得SQL结果中列名的问题
  原有bug导致一些jdbc驱动程序只能读取字段名，而不支持字段别名。
+ com.icode.common.file.XMLParser 使用DOM4J+XPath解析XML
* com.icode.common.file.FileZip，添加异常捕获，将方法抛出的异常全部改为IOException类型

version 3.0 (JDK1.5)
+ com.icode.el.Functions EL表达式自定义功能
+ /META-INF/fn.tld EL表达式自定义功能自定义tld文档
* com.icode.common.WebBean getPageData() -> getResult()
* 如果应用中config.properties配置文件内没有配置数据库连接参数，则com.icode.common.WebBean类不进行数据库初始化。
+ com.icode.common.data.WebData.getMultipleRows() 数据容器中的Multiple结果数据转变为Iterator对象
+ com.icode.common.utility.LogicUtility.getCNString()
- com.icode.common.utility.LogicUtility.convertEncoding()
* 全面使用UTF-8字符集，包括文件上传后的中文文件名、DownloadServlet、StreamServlet、ImageServlet等中文参数的处理。


version 2.04(JDK1.5)
* com.icode.common.CookieUtility.addCookie(HttpServletResponse response, String name, String value, int expireSeconds)
  更改Cookie路径默认为"/"，以保证在一个站点中添加的Cookie可以被整个站点访问。
* com.icode.common.Transport添加文件上传的进度监听。
* com.icode.common.Transport文件上传时，将文件字符串名称和文件实例以Object[]数组形式以客户端控件名为key值保存。

version 2.03
* 终止vexoo_common包的开发，改为开发icode_common包。
- com.icode.common.utility.LogicUtility.getCNString()
+ com.icode.common.utility.LogicUtility.convertEncoding()
+ com.icode.common.data.WebData中添加formData，配合com.icode.common.Transport可以自动将表单传入的参数存入formData中。
* com.icode.common.Transport，在处理上传文件表单时同时保存QueryString的参数。
* com.icode.common.generator.IDGenerator
  如果关键字段是char(32)，自动使用GUID作为关键字段的值。

﻿version 2.02
* 使用UTF-8字符集，包括：
  源代码字符集
  cn.vexoo.common.filter.EncodingFilter默认字符集
  cn.vexoo.common.utility.LogicUtility.getCNString()返回值字符集。
* cn.vexoo.common.generator.TableKeyMetaData，符合module_entity_suffix格式规范的表名才进行处理
* cn.vexoo.common.file.ZipFile.zip(String, Map<String, String>)方法变为zip(String, Map<String, byte[]>)，
  可以把内存中的数据直接存储到zip文件中
* cn.vexoo.common.config.Constants添加常量FILE_SEPARATOR和LINE_SEPARATOR
+ cn.vexoo.common.file.FileWriter.writeString(String content, String charsetName)
+ cn.vexoo.common.file.FileWriter.writeString(String content, String charsetName, boolean blAppend)
* cn.vexoo.common.Transport添加Script脚本过滤，防止XSS攻击。

version 2.01
+cn.vexoo.common.file.ZipFile 添加zip(String, Map<String, String>)方法。

version 2.0
全面使用泛型，使用JDK1.5以上版本，不再支持JDK1.5以前版本。
* cn.vexoo.common.database.DBManager 添加JDBC事务隔离等级的config.properties配置功能。

version 1.29
+ cn.vexoo.common.servlet.BarcodeServlet 条形码生成
+ cn.vexoo.common.exp.RSSWriter       RSS文件生成
+ cn.vexoo.common.exp.RSSChannel
+ cn.vexoo.common.exp.RSSImage
+ cn.vexoo.common.exp.RSSItem
* cn.vexoo.common.database.DBOperation.getOracleValue(Object)、getMySQLValue(Object)、getSQLServerValue(Object)添加Boolean型数据转换。

version 1.28
+ cn.vexoo.common.net.Scratcher，用于页面抓取
* cn.vexoo.common.net.HttpClient，添加referer参数
* cn.vexoo.common.mail.MailProxy newMailSender()/newMailReceiver()/newMailEntity()三个方法的修饰符改为public

version 1.27
添加cn.vexoo.common.net.FtpClient和cn.vexoo.common.net.FtpInformation，用于FTP传送文件。

version 1.26
cn.vexoo.common.database.DAO使用泛型

version 1.25
修改cn.vexoo.common.database.DBOperation下读取Oracle NUMBER类型数据，读取类型改Integer型为Double型
添加WEB计划任务调度cn.vexoo.common.filter.VexooContextListener

version 1.24
cn.vexoo.common.generator.IDGenerator使用MAX(ID)+1的方法产生下一个关键字段的值

version 1.23
cn.vexoo.common.filter.PermissionFilter添加init-parameter参数excepts，用于添加不受系统权限控制的地址。

version 1.22
修正cn.vexoo.common.Transport上传文件后文件不可删除的问题。添加cn.vexoo.common.utility.LogicUtility.moveFile()方法

version 1.21
添加Excel导出共通类cn.vexoo.common.exp.*，修正Excel操作类的行列参数位置。

version 1.20
cn.vexoo.common.generator.TableKeyMetaData类修正获得字符型关键字的前缀。

version 1.19
com.icode.common.database.DBOperation类，添加了方法connection()方法，用于获得数据库连接。

version 1.18
删除com.icode.common.net.HttpFetch类，添加com.icode.common.net.HttpClient类，用于Java模拟登录

version 1.17
修正了1.16若干BUG。
调整了几个java类的包名。
添加了com.icode.common.net.HttpFetch类，用于Java模拟登录

version 1.16
优化大批量记录查询。
在com.icode.common.database.DBOperation中添加了getDatabaseName()方法。
添加不同数据库之间数据导入导出的类com.icode.tools.DatabaseCopy。

version 1.15
添加了模板套印类com.icode.common.utility.TemplateDraw。
该类使用的模版应放置在/classes/template/下。

version 1.14
添加了ZIP文件操作类com.icode.common.utility.ZipFile；
添加了邮件接收类com.icode.common.mail.MailReceiver；
修改了邮件代理类com.icode.common.mail.MailProxy，添加了邮件接收方发；

version 1.13
在主键自动生成部分去除了Sequence，将所有数据库系统的整型主键改为统一设定。
添加了主键生成的值超出字段长度时的异常信息。

version 1.12
添加了com.icode.tools.CommentRemove类，用于删除Java源文件的注释。