Appearance
任务驿站
任务驿站是自上而下开展任务交办数据采集类的统一化平台,平台提供统一的发布流程,统一的进度控制。接入时提供任务采集、编辑、查看等功能,并遵守相应的流程规范。
原理: 用户点击应用时平台服务目录时自动追加stoken/sroute/sobject
参数,对接应用通过接口解析用户信息,路由信息、对象信息,自行设置本应用登录状态并跳转相应的视图页面。
登录用户stoken
参数通过 “2.3.1用户信息接口” 进行解析并设置登录状态;
视图路由sroute
参数通过约定标识自行处理页面路由,如:fwez/rwez
等;
数据对象sobject
参数通过将必要的参数转码后传递,转码规则如下:
对象转密文方法:btoa(encodeURIComponent(JSON.stringify(sobject)))
密文转对象方法:JSON.parse(decodeURIComponent(atob(sobject)))
- 通过应用配置获取应用地址并追加相应参数;
- 前端接收参数设置登录状态并跳转对应页面;
- 后端接收参数并提供登录等相关服务的接口。
http
https://www.app.com?stoken=xxxx&sroute=rwez&sobject=xxxx
vue
<template>
<v-app>
<v-overlay opacity="0">加载中......</v-overlay>
</v-app>
</template>
<script>
import Request from "@/commons/request";
import Storage from "@/commons/storage";
export default {
name: "App",
data: () => ({ valid: null, note: "授权登录中..." }),
async mounted() {
// 1.授权用户登录
let stoken = this.GetQueryString("stoken");
await this.UserLoginByData(stoken);
// 2.解析服务对象
let sobject = this.GetQueryString("sobject");
let jobject = JSON.parse(decodeURIComponent(atob(sobject)));
Storage.set("sobject", jobject);
// 3.跳转对应页面
let sroute = this.GetQueryString("sroute");
switch (sroute) {
case "fwez": this.$router.push("/service/fwez"); break;
case "fwsh": this.$router.push("/service/fwsh"); break;
case "fwss": this.$router.push("/service/fwss"); break;
default: this.$router.push("/service/index");
}
},
methods: {
async UserLoginByData(stoken) {
if (!stoken) {
this.valid = false;
this.note = "授权登录错误,用户令牌不能为空,请关闭页面后重试!";
return;
}
Request.postJson('/admin/login', { stoken: stoken }).then((res) => {
if (res.meta.success && res.data) {
//1.获取用户信息成功
Storage.set("token", res.data.token);
this.valid = true;
this.note = "授权登录成功,正在跳转请稍后...";
} else {
//2.获取用户信息失败
this.valid = false;
this.note = "授权登录失败,请关闭页面后重试!";
}
});
},
GetQueryString(name) {
var reg = new RegExp("[?&]" + name + "=([^&^#^/]*)", "i");
var res = window.location.href.match(reg);
return res != null ? unescape(res[1]) : "";
},
},
};
</script>
<style>
body { background-size: cover; }
</style>
java
package cn.liangthink.xxx.service.impl;
import java.util.Date;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import cn.liangthink.xxx.service.AcisService;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
public class AcisServiceImpl implements AcisService {
private RestTemplate rest = new RestTemplate();
private String mp = "https://xxxxxx/";
private String ak = "xxxxxx";
private String sk = "xxxxxx";
@Override
public String token() {
String uri = mp + "/sure/oauth/access_token";
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
long ts = (new Date()).getTime();
String si = String.format("AK:%s/TS:%s/SK:%s", ak, ts, sk);
params.add("client_id", ak);
params.add("timestamp", ts);
params.add("signature", DigestUtils.md5DigestAsHex(si.getBytes()));
JSONObject json = rest.postForObject(uri, params, JSONObject.class);
return json.getJSONObject("data").getString("access_token");
}
@Override
public Object userinfo(String userinfo) {
JSONObject result = new JSONObject();
String uri = mp + "/open/api/acis/udsa/userbytoken";
MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
params.add("stoken", JSON.parseObject(userinfo).getString("stoken"));
params.add("access_token", this.token());
JSONObject json = rest.postForObject(uri, params, JSONObject.class);
log.debug(json.toJSONString());
JSONObject user = json.getJSONObject("data");
if (user == null) {
return result.fluentPut("meta", false).fluentPut("data", "获取失败!");
}
return result.fluentPut("meta", true).fluentPut("data", user);
}
}
1.采集接入
采集(调查)是任务驿站在治理端为基层提供的统一任务采集入口平台,支持电脑版和手机版,采集操作时平台将stoken/sroute/sobject
参数在地址栏带入应用中,应用处理后跳转采集页面,完成对象状况采集。视图代码:rwez
http
https://www.app.com?stoken=xxxx&sroute=rwez&sobject=xxxx
2.数据反馈
任务驿站场景接入是为基层提供统一的任务对象采集入口,简化任务操作过程;与此同时,任务中心提供统一的数据汇集接口,实现数据规范化的汇集。任务数据汇集主要包括:任务创建统一赋码、任务对象推送部署、任务状态开始关闭、任务采集结果反馈等四个接口,详见 “5.3 任务结果反馈”部分。