Browse Source

小程序视频答题获取对应答案

master
yanyan 3 years ago
parent
commit
bfaeb50139
  1. 35
      lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/http/HttpUtils.java
  2. 7
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/static/drawflow/src/drawflow.js
  3. 11
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/question/addNew.html
  4. 52
      lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/question/index.html
  5. 12
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneManageController.java
  6. 3
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneManageMapper.java
  7. 13
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneManageService.java
  8. 87
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneManageServiceImpl.java
  9. 40
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneQuestionServiceImpl.java
  10. 2
      lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneQuestionMapper.xml

35
lib/EmergencyBaseLib/EmergencyCommon/src/main/java/com/zdxt/common/util/http/HttpUtils.java

@ -5,10 +5,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.net.*;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
@ -16,6 +13,9 @@ import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import cn.hutool.core.io.IoUtil;
import cn.hutool.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -245,4 +245,31 @@ public class HttpUtils
return true;
}
}
public static InputStream postInputStream(String urlStr , JSONObject paramJson) throws Exception {
//获取小程序码,通过该接口生成的小程序码,永久有效,有数量限制
URL url = new URL(urlStr);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");// 提交模式
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
String contentType = httpURLConnection.getContentType();
if (contentType.contains("json")) {
IoUtil.copy(httpURLConnection.getInputStream(), System.out);
throw new IllegalArgumentException("调用微信小程序生成接口出错");
} else {
//开始获取数据
return httpURLConnection.getInputStream();
}
}
}

7
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/static/drawflow/src/drawflow.js

@ -1167,7 +1167,8 @@ export default class Drawflow {
var moduleName = this.getModuleFromNodeId(id)
return JSON.parse(JSON.stringify(this.drawflow.drawflow[moduleName].data[id]));
}
getNodesFromName(name) {
getNodesFromName(name,val) {
var nodes = [];
const editor = this.drawflow.drawflow
Object.keys(editor).map(function(moduleName, index) {
@ -1177,6 +1178,9 @@ export default class Drawflow {
}
}
});
// let nodeId = nodes.at(0);
// var moduleName = this.getModuleFromNodeId(nodeId)
// this.drawflow.drawflow[moduleName].data[id].data = {option: val+'', value: '', channel: val+''};
return nodes;
}
@ -1492,6 +1496,7 @@ export default class Drawflow {
}
updateNodeDataFromId(id, data) {
debugger
var moduleName = this.getModuleFromNodeId(id)
this.drawflow.drawflow[moduleName].data[id].data = data;
if(this.module === moduleName) {

11
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/question/addNew.html

@ -4,6 +4,7 @@
<th:block th:include="zdxtInclude :: header('新增题目')"/>
<th:block th:include="zdxtInclude :: bootstrap-fileinput-css"/>
</head>
<script src="/drawflow/dist/drawflow.min.js"></script>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
<form class="form-horizontal m" enctype="multipart/form-data" id="form-question-add" type="text/template" th:object="${sceneQuestion}">
@ -69,6 +70,8 @@
<th:block th:include="zdxtInclude :: bootstrap-fileinput-js"/>
<script type="text/javascript" th:inline="javascript">
var prefix = ctx + "small/project/question"
var id = document.getElementById("drawflow");
const editor = new Drawflow(id);
$("#form-question-add").validate({
focusCleanup: true
@ -184,6 +187,9 @@
data.option = JSON.stringify(optionList);
data.parentId = [[${parentId}]];
data.guid = [[${guid}]];
parent.updateNodeFromParent(data.guid,{'option': optionList })
//let nodeId = editor.getNodesFromName(data.guid).at(0);
//saveOption(optionList);
return data;
},
// showBrowse: false,
@ -244,6 +250,11 @@
})
};
function saveOption(val){
var guid = [[${guid}]];
let nodeId = editor.getNodesFromName(guid).at(0);
editor.updateNodeDataFromId(nodeId, {option:'2'})
}
function fileUploadCallBack(result) {
var parent = window.parent;
if (result.success) {

52
lib/EmergencyService/zdxtEmergencyBootStart/src/main/resources/templates/project/question/index.html

@ -75,10 +75,7 @@
"inputs": {},
"outputs": {
"output_1": {
"connections": [{
"node": "2",
"output": "input_1"
}]
"connections": []
}
},
"pos_x": 25,
@ -259,11 +256,11 @@
break;
case 'aws':
var guid = getUuid();
var aws = "<div>\n " +
"<div class=\"title-box\">" +
"<img src='/img/details.png' onclick=\"editQuestion(\'" + guid + "\')\" style='width: 20px;height: 20px'>题目</div>\n " +
" <div class=\"box\">\n </div>\n " +
" </div>";
var aws = "<div>\n " +
"<div class=\"title-box\">" +
"<img src='/img/details.png' onclick=\"editQuestion(\'" + guid + "\')\" style='width: 20px;height: 20px'>题目</div>\n " +
" <div class=\"box\">\n </div>\n " +
" </div>";
// var aws = `
// <div>
// <div class="title-box"><i class="fas fa-file-signature" onclick="editQuestion(\'' + guid + '\')"></i>题目</div>
@ -272,7 +269,7 @@
// </div>
// </div>
// `;
editor.addNode(guid, 1, 1, pos_x, pos_y, 'aws', {"db": {"dbname": '', "key": ''}}, aws);
editor.addNode(guid, 1, 1, pos_x, pos_y, 'aws', {}, aws);
break;
case 'log':
var log = `
@ -301,16 +298,16 @@
case 'template':
var guid = getUuid();
var template =" <div> " +
var template = " <div> " +
"<div class=\"title-box\">答案</div>" +
"<div class=\"box\">" +
"<select df-channel onchange=\"selectAnswer(\'" + guid + "\',this)\">" +
"<option value=\"A\">A</option>" +
"<option value=\"B\">B</option>" +
"<option value=\"C\">C</option>" +
"<option value=\"D\">D</option>" +
"</select> " +
"</div> " +
"<div class=\"box\">" +
"<select df-channel onchange=\"selectAnswer(\'" + guid + "\',this)\">" +
"<option value=\"A\">A</option>" +
"<option value=\"B\">B</option>" +
"<option value=\"C\">C</option>" +
"<option value=\"D\">D</option>" +
"</select> " +
"</div> " +
"</div>";
editor.addNode(guid, 1, 1, pos_x, pos_y, 'template', {"option": 'A', "value": ''}, template);
break;
@ -407,16 +404,23 @@
}
function editQuestion(guid){
$.modal.open("新增题目", "/small/project/question/addNew?guid="+guid+"&parentId=" + sceneRole.guid, 600, 450);
function editQuestion(guid) {
$.modal.open("新增题目", "/small/project/question/addNew?guid=" + guid + "&parentId=" + sceneRole.guid, 600, 450);
}
function selectAnswer(guid,obj){
let val = $(obj).val();
editor.getNodesFromName(guid).at(0).data = JSON.stringify(val);
function selectAnswer(guid, obj) {
let val = $(obj).val();
let nodeId = editor.getNodesFromName(guid).at(0);
editor.updateNodeDataFromId(nodeId, {channel: val + ''})
}
function updateNodeFromParent(guid, obj) {
let nodeId = editor.getNodesFromName(guid).at(0);
editor.updateNodeDataFromId(nodeId, obj)
}
function getUuid() {
var s = [];
var hexDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"

12
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/controller/SceneManageController.java

@ -17,6 +17,7 @@ import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@ -62,10 +63,19 @@ public class SceneManageController extends BaseController {
@ResponseBody
public TableDataInfo listApp(@RequestBody SceneManage sceneManage) {
startPage();
List<SceneManage> list = sceneManageService.selectSceneManageList(sceneManage);
List<SceneManage> list = sceneManageService.selectSceneManageListAll(sceneManage);
return getDataTable(list);
}
/**
* 生成小程序二维码
*/
@PostMapping("/generateQRCode")
@ResponseBody
public void generateQRCode(SceneManage sceneManage,HttpServletResponse response) throws Exception{
sceneManageService.generateQRCode(sceneManage,response);
}
/**
* 查看详情
*/

3
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/mapper/SceneManageMapper.java

@ -20,6 +20,9 @@ public interface SceneManageMapper {
*/
public SceneManage selectSceneManageById(String guid);
public List<SceneManage> selectSceneManageListAll(SceneManage sceneManage);
/**
* 查询【请填写功能名称】列表
*

13
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/ISceneManageService.java

@ -7,6 +7,7 @@ import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@ -32,6 +33,18 @@ public interface ISceneManageService {
*/
public List<SceneManage> selectSceneManageList(SceneManage sceneManage);
/**
* 查询【请填写功能名称】列表
*
* @param sceneManage 【请填写功能名称】
* @return 【请填写功能名称】集合
*/
public List<SceneManage> selectSceneManageListAll(SceneManage sceneManage);
public void generateQRCode(SceneManage sceneManage,HttpServletResponse response) throws Exception;
/**
* 新增【请填写功能名称】
*

87
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneManageServiceImpl.java

@ -2,7 +2,11 @@ package com.zdxt.knowledge.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.zdxt.auth.dto.DictDataBean;
import com.zdxt.auth.dto.UserBean;
import com.zdxt.auth.dto.ZdxtFileBean;
@ -14,6 +18,7 @@ import com.zdxt.common.ZDResponse;
import com.zdxt.common.util.Convert;
import com.zdxt.common.util.DateUtils;
import com.zdxt.common.util.StringUtils;
import com.zdxt.common.util.http.HttpUtils;
import com.zdxt.common.zdxtFile.AttFileRespDTO;
import com.zdxt.common.zdxtFile.FilePreviewUtilBean;
import com.zdxt.common.zdxtFile.ZdxtFileCommon;
@ -23,13 +28,20 @@ import com.zdxt.knowledge.mapper.SceneManageMapper;
import com.zdxt.knowledge.service.ISceneManageService;
import com.zdxt.knowledge.utils.ExcelUtil;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -60,6 +72,10 @@ public class SceneManageServiceImpl implements ISceneManageService {
@Autowired
private ZdxtFileCommonApi zdxtFileCommonApi;
private static final String APPID = "wx93ec514a5c456507";
private static final String SECRET = "f5a3f295dbee3cc1c2f73b9a324c2eb2";
/**
* 查询【请填写功能名称】
*
@ -71,6 +87,18 @@ public class SceneManageServiceImpl implements ISceneManageService {
return sceneManageMapper.selectSceneManageById(guid);
}
/**
* 查询列表
*
* @param sceneManage 【请填写功能名称】
* @return 【请填写功能名称】
*/
@Override
public List<SceneManage> selectSceneManageListAll(SceneManage sceneManage) {
return sceneManageMapper.selectSceneManageListAll(sceneManage);
}
/**
* 查询【请填写功能名称】列表
*
@ -85,6 +113,65 @@ public class SceneManageServiceImpl implements ISceneManageService {
return sceneManageMapper.selectSceneManageList(sceneManage);
}
@Override
public void generateQRCode(SceneManage sceneManage, HttpServletResponse response) throws Exception {
response.setContentType("image/gif");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
String accessToken = getAccessToken();
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
// 发送请求参数
JSONObject paramJson = new JSONObject();
paramJson.set("page", "subpkg/role/role");
paramJson.set("check_path", false);
paramJson.set("width", 280);
//scene数据不能中文
paramJson.set("scene", "4f5d2f4dd813443e83f399e743adec50");
//设置小程序码版本
//paramJson.set("env_version","release"); 默认正式
//paramJson.set("env_version", "trial"); //体验版
paramJson.set("env_version", "develop"); //开发版
InputStream inputStream = HttpUtils.postInputStream(url, paramJson);
//将流写出到response
IoUtil.copy(inputStream, response.getOutputStream());
//存入本地数据库
File file = File.createTempFile("temp", ".png");
FileOutputStream outputStream = new FileOutputStream(file);
IoUtil.copy(inputStream, outputStream);
MultipartFile multipartFile = toMultipartFile(file.getName(),file);
zdxtFileCommonApi.insertZdxtFile(multipartFile, sceneManage.getGuid() + "", fileUploadApi.upload(multipartFile));
file.deleteOnExit();
}
public String getAccessToken() {
String appid = APPID;
String secret = SECRET;
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
String result = HttpUtil.get(url);
JSONObject jsonObject = JSONUtil.parseObj(result);
return jsonObject.get("access_token").toString();
}
public static MultipartFile toMultipartFile(String fieldName, File file) throws Exception {
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
String contentType = new MimetypesFileTypeMap().getContentType(file);
FileItem fileItem = diskFileItemFactory.createItem(fieldName, contentType, false, file.getName());
try (
InputStream inputStream = new ByteArrayInputStream(FileCopyUtils.copyToByteArray(file));
OutputStream outputStream = fileItem.getOutputStream()
) {
FileCopyUtils.copy(inputStream, outputStream);
} catch (Exception e) {
throw e;
}
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
return multipartFile;
}
/**
* 新增【请填写功能名称】
*

40
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/java/com/zdxt/knowledge/service/impl/SceneQuestionServiceImpl.java

@ -2,6 +2,7 @@ package com.zdxt.knowledge.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.druid.sql.visitor.functions.If;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -207,6 +208,7 @@ public class SceneQuestionServiceImpl implements ISceneQuestionService {
JSONObject json = JSON.parseObject(sceneRole.getContent());
JSONObject dataJson = json.getJSONObject("drawflow").getJSONObject("Home").getJSONObject("data");
Map<String, Object> root = new HashMap<>();
Map<String, Map<String,String>> answerList = new HashMap<>();
List<Map<String, Object>> paramsList = new ArrayList<>();
for (int i=1; i<=dataJson.size(); i++) {
JSONObject data = dataJson.getJSONObject(i+"");
@ -215,13 +217,31 @@ public class SceneQuestionServiceImpl implements ISceneQuestionService {
params.put("nodeId", data.get("id"));
JSONObject dataTmp = data.getJSONObject("data");
if (null != dataTmp) {
if (Objects.nonNull(dataTmp) && dataTmp.size()!=0) {
String channel = dataTmp.getString("channel");
if (StringUtils.isNotEmpty(channel)) {
params.put("channel", channel);
if(data.getJSONObject("inputs").size()!=0){
JSONArray ints = data.getJSONObject("inputs").getJSONObject("input_1").getJSONArray("connections");
if(Objects.nonNull(ints) && ints.size()!=0){
for (int j=0; j<ints.size(); j++) {
JSONObject it = ints.getJSONObject(j);
params.put("ints", it.getString("node"));
}
}
}
} else {
params.put("channel", null);
}
JSONArray option = dataTmp.getJSONArray("option");
if(Objects.nonNull(option) && option.size()!=0){
Map<String ,String> map = new HashMap<>();
for (int j=0; j<option.size(); j++) {
JSONObject ot = option.getJSONObject(j);
map.put(ot.getString("identify"),ot.getString("content"));
answerList.put(data.getString("id"),map);
}
}
} else {
params.put("channel", null);
}
@ -241,6 +261,9 @@ public class SceneQuestionServiceImpl implements ISceneQuestionService {
SceneQuestion sq = this.selectSceneQuestionById(params.get("questionId").toString());
if (null != sq) {
params.put("videoUrl", sq.getUploadPath());
} else if(Objects.nonNull(dataTmp) && !StringUtils.isEmpty(dataTmp.getString("channel"))){
paramsList.add(params);
continue;
} else {
continue;
}
@ -251,7 +274,20 @@ public class SceneQuestionServiceImpl implements ISceneQuestionService {
// recursionFn(paramsList, root);
if (CollectionUtils.isNotEmpty(paramsList) && !answerList.isEmpty()) {
paramsList.stream()
.filter(item->Objects.nonNull(item.get("ints")))
.filter(item->Objects.nonNull(item.get("channel")))
.peek(item->{
Map<String, String> stringStringMap = answerList.get((String) item.get("ints"));
if(Objects.nonNull(stringStringMap) && !stringStringMap.isEmpty()){
String channel = (String) item.get("channel");
String newChannel = stringStringMap.get(channel);
item.put("channel",StringUtils.isEmpty(newChannel) ? channel : channel+":"+newChannel);
}
})
.collect(Collectors.toList());
}
return paramsList;
}

2
lib/EmergencyService/zdxtEmergencyKnowledgeService/src/main/resources/mapper/SceneQuestionMapper.xml

@ -69,7 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="roleId != null and roleId != ''">#{roleId},</if>
<if test="status != null ">#{status},</if>
<if test="option != null and option != ''">#{option},</if>
<if test="answer != null and creator != ''">#{answer},</if>
<if test="answer != null and answer != ''">#{answer},</if>
<if test="uploadPath != null and uploadPath != ''">#{uploadPath},</if>
<if test="creator != null and creator != ''">#{creator},</if>
<if test="createTime != null ">#{createTime},</if>

Loading…
Cancel
Save