编辑 | blame | 历史 | 原始文档

1.菜单配置可以是以前的方式,也可以按新的方式配置
- 使用UI上下文的可以是UI://type#content?param=xxx这种方式,UI不区分大小写,但是上下文的content区分大小写
- 使用自定义的页面,可以使用USEJS://xxxx这种方式,usejs不区分大小写,但是:后面的内容区分大小写
- 打开别的页面,实际使用iframe打开,使用http://xxx或者https://xxx
- 使用弹出浏览器窗口,使用open:,其中open不区分大小写

2.项目说明
- 本项目是基于平台2020版本的基础上构建的,移除了以前的dojo,引入未来2021版本的layui
- 本项目最低采用java8,tomcat8运行

3.包名规范
- 全部在com.vci下
- com.vci.framerworkcore是平台2021版本中的部门角色用户等兼容的包,只能修复bug,不能再其中添加与平台无关业务
- com.vci.web是本项目的web端核心处理的内容,自己的业务需要新创建包,包的规范为产品名字+客户代号,比如mes112,mdm420等
- 自己的业务的包名规范为
controller 控制器,即接收前端传递的数据 model 业务类型映射的对象文件,里面只能是属性,getter和setter,禁止使用级联方式创建getter pagemodel 显示对象,即后台返回给前端显示的内容 dto 数据传输对象,前端传递给后台的对象,主要在controller中接收前端接收的数据使用 enumpck 枚举的对象,要继承BaseEnum lcstatuspck 或者lifeCycle 都是生命周期的对象,也是继承BaseEnum dao 数据操作,如果需要调用平台的接口,也是到这个下边 service 服务包,主要的业务逻辑写到这个包下 constant 常量汇总,请依照java开发规范 properties 配置项,业务里引用配置时都引用这个包下的 config 自动配置,即properties的默认值都是从config里的设置的 bo 业务处理的对象,只在service层中使用

4.SpringMvc开发指南
- 接口规范,采用restFul的规范,但不是强制要求
GET 获取资源,比如列表,树,表单的获取数据 POST 创建资源,比如新建的保存等 PUT 更新资源,比如修改数据,这个是幂等的 DELETE 删除资源,比如删除数据
- 注解的使用
```

@Controller 表示当前这个类是一个控制器,这个类下的方法要返回JSON的方式时,需要在方法上@ResponeBody注解,否则是查询返回值.html这个文件
@RestController 表示当前这个类是rest控制器,这个类下的方法不需要加@ResponeBody的注解. 
推荐使用RestController注解,而不使用@Controller

@RequestMapping 访问的路径,即前端访问后台的路径,可以使用其中的method属性来设置restFul的类型
@GetMapping get方式的访问路径,即等于@RequestMapping  + method=GET
@PostMapping post方式的访问路径,即等于@RequestMapping + method=POST
@PutMapping put方式的访问路径,即等于@RequestMapping + method=PUT
@DeleteMapping delete方式的访问路径,即等于@RequestMapping + method=DELETE

@RequestBody 表示前端使用json方式提交,这个注解加了后,这个方法里只能有这一个参数
@RequestParam 定义参数
...还有其他不常用的注解。
推荐使用明确的访问路径,不推荐使用RequestMapping
<!------------注意------------->
<!------------注意------------->
<!------------注意------------->
 禁止全部都使用get方式,特别是添加和修改等数据长度很大的场景

@VciBusinessLog 是操作日志的注解,是利用aop的实现的,可以用于到Class上,也可以用于方法上;方法上的优先级大于class。系统会自动记录操作日志.这个注解可以使用controller里的参数的值

@VciPermission 访问权限,即这个访问地址是否有权限被访问,这个主要绑定菜单的编号,即某个菜单被授权了给当前用户,就可以被访问。如果是开放的则设置controlMethodPermission为true
@VciReferPermission 表示这个访问路径是参照,它的权限取决于使用参照的地方,使用参照的地方对应使用@VciUseReferMethod
权限主要是自编写的代码的时候才这样写注解,使用平台UI定义的接口,依然是由UI权限控制的

```
- 请求的方式
* 表单提交方式,即key=value这种方式。application/x-www-form-urlencoded。 controller里面直接使用对象来接收,或者controller里使用参数接收
如果是提交列表,需要Controller里的参数是对象,对象的属性是列表。前端的数据提交方式是 "xxx[0].yyy":"value" xxx是对象里的属性名字,yyy是列表对象里的属性
如果是提交Map,需要Controller里的参数是对象,对象的属性是Map。前端的数据提交方式是 "xxx['yyy']":"value" xxx是对象里的书序名称,yyy是map里的key。 比如BaseQueryObject
* JSON提交方式,即json格式的字符串.application/json。 controller里面直接使用对象来接收,并且添加@RequestBody,而且只能一个参数,同时访问的类型是post或者put
* 文件上传,后台controller中使用MultipartFile来接收,这个参数的名字和前端提交的文件的name属性相同。默认为file
* 文件下载,controller返回值是void。文件先放到临时文件夹下,然后调用ControllerUtil里的方法返回前端
- 返回值
* 分页列表,DataGrid
* 树 List
* 其他 BaseResult.即使你方法是其他的返回值,最终也会统一为BaseResult
- 统一的异常
系统会统一处理异常,业务代码里可以不catch,因为事务是由平台控制的,所以业务里的异常不考虑事务的影响。但是需要考虑业务里面的因为事务的完整性

5.踩坑指南
- 不要在非Controller里使用request和Respone。因为采用了前后分离模式,放在session和request里的数据已经不能读取
- 处理业务的时候一定要注意数据的完整性,建议使用WebBoServiceImpl里封装的增删改查方法,然后在最后一次性提交
- 以前的平台的corba链接在conf.properties里,暂时无法去除,但是在打包的时候不要包含这个配置文件,统一使用rmip-system-common里的conf文件。这个在启动的bat文件上已经加入到classpath了
- model,pageModel和dto建议使用代码生成器生成。防止代码手敲出错
- 如果页面是UI上下文配置的,但是按钮的业务功能是单独编写的,不要把业务只写到controller里,而是统一到service里,否则又掉入无限加参数的怪圈中,后续维护时要人命
- 注释一定要全面,注释一定要全面,注释一定要全面
- 前置事件只能用于查询,不要在其中添加和修改数据
- 业务中尽量避免直接操作ClientBussinessObject或者ClientLinkObject,而是改用业务对象的方式,不然加一次属性,要全局找受影响的文件
- 运行环境里多语失效的问题,需要在bat文件设置多语的路径为BOOT-INF/classes/xxxx
6.maven仓库
- 请使用本项目里的settings.xml
- 平台jar使用的是ant编译的,可以在编译后,使用vci-platform-web工程里的BatchRedeployJar2Maven里执行一下,把新的Jar传递给maven私服。然后在本地仓库里删除com.vci.platform下的依赖,最后再重新下载依赖