=======新手操作手册=======

物可视大屏系统：bcxin-wks-bi
名词解释：
	P:m-n 表示第m点的第n小点
	**** 表示要开发的业务大屏的自定义标识（为类名、常量时大写，其它可根据情况或小写或首字母小写）
一、数据源配置
说明：为某系统建立大屏就需要在当前系统配置目标数据源，用于读取目标系统数据。
	1.新增 application-xxxx.yml
		说明：
			1）resources目录下创建该文件用于配置对应环境的数据源信息；xxxx的规则为：某省拼音+内外网标识（out/in），例：北京内网（application-beijingin.yml）。
			2）配置规则：
				****: # 自定义大屏标识 （整个业务流程都会用到这个标识）例：v5_jg_sf
					datasource:
						url: jdbc:mysql://...
						username: ...
						password: ...
						driverClassName: #mysql外的数据库需要在这指定数据库驱动包（如：org.postgresql.Driver），否则这行要去掉
	2.新增 ****_DataSourceProperties.java
		说明：
			1）com.bcxin.bi.config.properties目录下创建读取目标数据源的配置信息；****为大写的 自定义大屏标识 （P:1-2），例：V5_JG_SF_DataSourceProperties.java。
			2）类内容细节：
				@ConfigurationProperties(prefix = "****.datasource") //****为 自定义大屏标识 （P:1-2）
	3.修改 MybatisPlusConfig.java
		说明：
			1）引入第2点新增的类
				@Autowired
				private ****_DataSourceProperties ****_DataSourceProperties;
			2）创建私有方法，将配置文件中的数据源信息设置到DruidDataSource
				private DruidDataSource ****_DataSource() {
					DruidDataSource dataSource = new DruidDataSource();
					****_DataSourceProperties.config(dataSource);
					return dataSource;
				}
			3）mutiDataSource()方法中引入（p:3-2）的方法，初始化DruidDataSource，将对应的DruidDataSource加入到DynamicDataSource
				DruidDataSource ****_DataSource = ****_DataSource();
				****_DataSource.init();
				hashMap.put(DSEnum.DATA_SOURCE_****, ****_DataSource);//DSEnum枚举中自行添加DATA_SOURCE_****常量
	4.数据源调用 ViewDataService.java类中新增启用数据源查询对应sql语句
		说明：不同数据源标识数据库中会配置不同的sql语句，这个方法就是读取对应标识配置的语句去对应的数据源进行查询，其中包含条件参数填充。
			@DataSource(name = DSEnum.DATA_SOURCE_****)
			public List<LinkedHashMap> data_****(Map<String, String> paramMap, ViewDataSource dataSource) {
				String execSql = dataSource.getExec();//读取数据库已配置对应的sql语句
				String disposeSql = disposeSql(execSql,paramMap);//参数填充到sql语句中
				return biDataMapper.exec(disposeSql);
			}
	5.添加数据源时数据库需要添加对应记录
		1）大屏表（bi_view）增加一条记录
			code 大屏编码，用来生成token，每次解析token拿到这个code就能查询到这行记录
			platform：**** 这个放的数据源标识，通过code拿到这行数据就能拿到这个标识，用标识启用对应的数据源
			path 大屏对应地址，一套大屏对应一个页面（每次新增数据源就新增一个页面），这里存的是相对路径
			nature 标识内外网（内网：in，外网：out）,外网：大屏页面可以直接调大屏平台读取对应大屏，内网：只能去大屏平台下对应离线包将样式写死在大屏页面
		2）大屏的数据源（bi_viewDataSource）添加多条对应数据源的查询语句，大屏页面需要多少种查询，这里就得配多少句相应的sql
			name sql查询业务名称
			platform：**** 数据源标识，大屏表（bi_view）中的platform字段跟这里一一对应
			exec sql查询语句，第4点中的dataSource.getExec()就是拿的这里
	6.大屏页面配置（离线模式）
		1）添加大屏平台的js包
			<script src="/static/V5_JG_bdiotvizplayer/static/bdiotvizplayer.min.js"></script>
		2）<script>中配置myDashboard，详细的搜索：var myDashboard = bdIotVizPlayer({关键字对照查看，离线时直接复制离线包的index.html中对应的bdIotVizPlayer内容信息
			var myDashboard = bdIotVizPlayer({
				fillMode: 'none', // none, responsive, fill, cover, contain
				containerElement: containerElement,
				dashboardSpec: ...
				......
		3）myDashboard.getDashboardConfig()中定义多个let biData（数据库配几条sql这里就定义几个）并创建对应的getBiData1()
			let biData;
			dataTables.forEach(data => {
				if (data.name === 'xxx') {//xxx 对应（p:5-2）中的name
					biData = data;
				}
			});
			getBiData().then(data => {
				biData.config.source = data;
				count++;
				// 更新数据
				return myDashboard.updateDataTableConfig(biData1.id, biData1.config);
			}).catch(err => {
				count++;
			});
		4）创建对应的getBiData()请求接口获取对应sql查询到的数据
			function getBiData() {
				return new Promise((resolve, reject) => {
					$.ajax({
						type: 'POST',
						url: webUrl + '/data',
						data: {"params": params, "dataSourceName": "xxx", "platform": "****"},//xxx 对应（p:5-2）中的name，**** 对应（p:5-2）中的platform
						async: true,
						success: function (json) {
							resolve(json.data); // response.data 物可视平台模拟的需要什么样的数据格式，这边sql查询到的data就得是对应的格式，否则无法被大屏加载到图表
						}
					});
				});
			}
			说明：/data接口 每增加一个数据源业务，该接口中需要增加一块判断，根据接口参数platform进入判断业务
				if (DSEnum.DATA_SOURCE_****.equalsIgnoreCase(paramMap.get("platform"))) {
					List<LinkedHashMap> mapList = null;
					try {
						ViewDataSource dataSource = viewDataService.findDataSource(paramMap.get("dataSourceName"),paramMap.get("platform").toUpperCase());
						mapList = viewDataService.data_****(paramMap, dataSource);
					} catch (Exception e) {
						e.printStackTrace();
					}
					result.setData(mapList);
					result.setSuccess(true);
				}
	7.调用大屏所需调用接口
		1）生成token
			接口：/pc/biview/get-v5-token?viewCode=&DOMAINID= //viewCode值与（p:5-1）中的code一致；DOMAINID为v5这个业务的参数；当不同业务需要多个参数时可以根据需要重新写个生成token的接口（当前接口只适用v5业务）
		2）拿到token后调用加载大屏页面
			接口：/view?token= //token值为（p:7-1）
			说明：接口中会根据（p:5-1）中的nature字段判断内外网走不同的（在线/离线）大屏页面
		3）通过（p:7-2）组装出真正跳转大屏的地址
			接口：/online?path=&params= //path 为（p:5-1）中的path，params为（p:7-1）得到的token，详细的查看（p:7-2）接口的业务