2026-06-18 二维码扫码、会议室导航单点登录、组织架构接口封装代码初始化上传
This commit is contained in:
249
WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp
Normal file
249
WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp
Normal file
@@ -0,0 +1,249 @@
|
||||
<%@ page contentType="text/html; charset=UTF-8" isELIgnored="false" %>
|
||||
<%@ page language="java" import=" com.seeyon.apps.m3.skin.enums.M3StartPageCustomEnum" %>
|
||||
<!DOCTYPE html>
|
||||
<html class="h100b">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<%@ include file="/WEB-INF/jsp/common/common.jsp" %>
|
||||
<title>模板二维码生成</title>
|
||||
<style>
|
||||
body {
|
||||
background: #f1f1f1;
|
||||
}
|
||||
|
||||
#center {
|
||||
overflow: hidden;
|
||||
zoom: 1;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#sidebar-l {
|
||||
float: left;
|
||||
width: 250px;
|
||||
margin-top: 20px;
|
||||
height: calc(100% - 40px);
|
||||
overflow: hidden;
|
||||
border: 1px solid #DCDBD9;
|
||||
background: #fff;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
|
||||
#sidebar-c {
|
||||
float: left;
|
||||
width: 250px;
|
||||
margin-top: 20px;
|
||||
height: calc(100% - 40px);
|
||||
overflow: hidden;
|
||||
border: 1px solid #DCDBD9;
|
||||
background: #fff;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
#sidebar-r {
|
||||
margin-left: 538px;
|
||||
height: calc(100% - 40px);
|
||||
margin-top: 20px;
|
||||
overflow: auto;
|
||||
border: 1px solid #DCDBD9;
|
||||
background: #fff;
|
||||
}
|
||||
.bizDiv,.formTemDiv{
|
||||
padding-left: 15px;
|
||||
font-size: 16px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 0;
|
||||
margin-right: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.formlist_content{
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.formlist_content .current{
|
||||
background-color: #2490f8;
|
||||
}
|
||||
|
||||
|
||||
.formlist_title{
|
||||
font-size: 16px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
margin-bottom: 0;
|
||||
margin-right: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
background: #f1f1f1;
|
||||
padding-left:15px;
|
||||
}
|
||||
.qr_title{
|
||||
font-size: 16px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
background: #f1f1f1;
|
||||
padding-left: 15px;
|
||||
}
|
||||
.qr_content{
|
||||
margin-top: 50px;
|
||||
text-align:center;
|
||||
}
|
||||
.qr_address{
|
||||
width: 80%;
|
||||
padding: 15px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="h100b">
|
||||
|
||||
<div id="center">
|
||||
<div id="sidebar-l">
|
||||
<div class="formlist_title">
|
||||
应用包
|
||||
</div>
|
||||
<div class="formlist_content">
|
||||
<c:if test="${fn:length(bizList)>0}">
|
||||
<c:forEach items="${bizList}" var="biz">
|
||||
<div class="bizDiv" bizId="${biz.id}">${ctp:toHTML(biz.name)}</div>
|
||||
</c:forEach>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
<div id="sidebar-c">
|
||||
<div class="formlist_title">
|
||||
应用模板
|
||||
</div>
|
||||
<div class="formlist_content">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div id="sidebar-r">
|
||||
<div id="qrcode">
|
||||
<div class="qr_title">
|
||||
模板二维码
|
||||
</div>
|
||||
<div class="qr_content">
|
||||
|
||||
</div>
|
||||
<div style="text-align: center;">
|
||||
<textarea class="qr_address" readonly></textarea>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<script type="text/javascript"
|
||||
src="${staticPath}/main/common/js/jquery.qrcode.min.js${ctp:resSuffix()}"></script>
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function () {
|
||||
bindEvent();
|
||||
defaultInit();
|
||||
});
|
||||
|
||||
function bindEvent(){
|
||||
//应用包绑定点击事件
|
||||
$('#sidebar-l .bizDiv').bind('click',function(e) {
|
||||
var _dom = $(e.target);
|
||||
var _bizId = _dom[0].getAttribute("bizId");
|
||||
$(".formlist_content .bizDiv").removeClass("current");
|
||||
_dom.addClass("current");
|
||||
if(_bizId){
|
||||
var param = {
|
||||
type : "formApp",
|
||||
bizConfigId : _bizId
|
||||
};
|
||||
callBackendMethod("qrCodeFormManager","listFormApp", param,{
|
||||
success : function(ret){
|
||||
if(ret && ret.length > 0){
|
||||
renderFormAppDom(ret);
|
||||
}
|
||||
},
|
||||
error : function(request, settings, e){
|
||||
$.alert(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function defaultInit(){
|
||||
var defaultDom = $("#sidebar-l .bizDiv");
|
||||
if(defaultDom && defaultDom.size() > 0){
|
||||
$(defaultDom[0]).trigger("click");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function renderFormAppDom(ret){
|
||||
$("#sidebar-c .formlist_content").empty();
|
||||
ret.forEach(function(e){
|
||||
var formTemDom = $("<div class='formTemDiv' onclick='qrCodeFormInfo(this,"+JSON.stringify(e)+")'>"+ e.name +"</div>");
|
||||
$("#sidebar-c .formlist_content").append(formTemDom);
|
||||
});
|
||||
|
||||
$($("#sidebar-c .formTemDiv")[0]).trigger("click");
|
||||
}
|
||||
|
||||
function qrCodeFormInfo(dom , ret){
|
||||
$(".formlist_content .formTemDiv").removeClass("current");
|
||||
$(dom).addClass("current");
|
||||
var _map = {
|
||||
templateId : ret.id,
|
||||
sourceType : ret.sourceType
|
||||
}
|
||||
if(ret.sourceType == 2){
|
||||
_map = {
|
||||
sourceType : ret.sourceType,
|
||||
formType: 'main',
|
||||
type: 'new',
|
||||
title: ret.name,
|
||||
rightId: "-1",
|
||||
moduleId: ret.id,
|
||||
formTemplateId: ret.id,
|
||||
moduleType: '42',
|
||||
operateType: '0'
|
||||
}
|
||||
}
|
||||
callBackendMethod("qrCodeFormManager","qrCodeFormUrl", _map,{
|
||||
success : function(ret){
|
||||
if(ret && ret.fillUrl){
|
||||
renderQrCode(ret.fillUrl);
|
||||
}
|
||||
},
|
||||
error : function(request, settings, e){
|
||||
$.alert(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function renderQrCode(temFormUrl){
|
||||
$("#qrcode .qr_content").empty();
|
||||
$("#qrcode .qr_address").empty();
|
||||
$("#qrcode .qr_content").qrcode({
|
||||
render: "canvas",
|
||||
width:"300",
|
||||
height:"300",
|
||||
text: temFormUrl
|
||||
});
|
||||
$("#qrcode .qr_address").html(temFormUrl);
|
||||
$.each($(".qr_address"),function(i,n){
|
||||
$(n).css("height",n.scrollHeight + 2 + "px");
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
6
WEB-INF/qrCodeForm/pluginCfg.xml
Normal file
6
WEB-INF/qrCodeForm/pluginCfg.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin>
|
||||
<id>qrCodeForm</id>
|
||||
<name>二维码扫码填单</name>
|
||||
<category>20240201</category>
|
||||
</plugin>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
|
||||
<beans default-autowire="byName">
|
||||
<bean name="/qrCodeForm.do" class="com.seeyon.apps.qrCodeForm.controller.QrCodeFormController"/>
|
||||
</beans>
|
||||
13
WEB-INF/qrCodeForm/spring/spring-qrCodeForm-manager.xml
Normal file
13
WEB-INF/qrCodeForm/spring/spring-qrCodeForm-manager.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
<beans default-autowire="byName">
|
||||
<bean name="qrCodeFormManager" class="com.seeyon.apps.qrCodeForm.manager.QrCodeFormManagerImpl" />
|
||||
<bean id="wechatQR" class="com.seeyon.ctp.portal.sso.SSOLoginContext">
|
||||
<property name="name" value="wechatQR"></property>
|
||||
<property name="ticketName" value="code"></property>
|
||||
|
||||
<property name="handshake">
|
||||
<bean class="com.seeyon.apps.qrCodeForm.sso.WechatQRHandShake"></bean>
|
||||
</property>
|
||||
</bean>
|
||||
</beans>
|
||||
8
WEB-INF/qrCodeForm/spring/spring-qrCodeForm-plugin.xml
Normal file
8
WEB-INF/qrCodeForm/spring/spring-qrCodeForm-plugin.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
<beans default-autowire="byName">
|
||||
|
||||
<bean id="qrCodeFormPluginApi" class="com.seeyon.apps.qrCodeForm.QrCodeFormPluginApi" />
|
||||
|
||||
<bean name="qrCodeForm_SystemInitializer" class="com.seeyon.apps.qrCodeForm.QrCodeFormPluginInitializer"/>
|
||||
</beans>
|
||||
6
WEB-INF/src_meetingroom/pluginCfg.xml
Normal file
6
WEB-INF/src_meetingroom/pluginCfg.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin>
|
||||
<id>src_meetingroom</id>
|
||||
<name>会议室登录</name>
|
||||
<category>20251126</category>
|
||||
</plugin>
|
||||
17
WEB-INF/src_meetingroom/spring/spring-neusoft-sso.xml
Normal file
17
WEB-INF/src_meetingroom/spring/spring-neusoft-sso.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
|
||||
<beans default-autowire="byName">
|
||||
<bean id="ssodemo" class="com.seeyon.ctp.portal.sso.SSOLoginContext">
|
||||
<property name="name" value="meetingroomlogin"/>
|
||||
<property name="ticketName" value="loginName"/>
|
||||
<!-- 单点登录成功是否跳转到首页true-首页;false ssook -->
|
||||
<property name="forward" value="true"/>
|
||||
<property name="handshake">
|
||||
<!-- 使用自己的握手实现 -->
|
||||
<bean class="com.seeyon.apps.src_meetingroom.sso.MeetingRoomLoginSSO" />
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
<bean name="/meetingRoomInterfacesso.do" class="com.seeyon.apps.src_meetingroom.sso.MeetingRoomInterfaceSSO"></bean>
|
||||
</beans>
|
||||
6
WEB-INF/src_organizationHandle/pluginCfg.xml
Normal file
6
WEB-INF/src_organizationHandle/pluginCfg.xml
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin>
|
||||
<id>src_organizationHandle</id>
|
||||
<name>组织架构查询接口</name>
|
||||
<category>20260605</category>
|
||||
</plugin>
|
||||
8
WEB-INF/src_organizationHandle/spring/spring-service.xml
Normal file
8
WEB-INF/src_organizationHandle/spring/spring-service.xml
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
|
||||
|
||||
<beans default-autowire="byName">
|
||||
|
||||
<bean id="departmentHandleService" class="com.seeyon.apps.src_organizationHandle.service.DepartmentHandleService" />
|
||||
<bean id="memberHandleService" class="com.seeyon.apps.src_organizationHandle.service.MemberHandleService" />
|
||||
</beans>
|
||||
13
common/capextend/cap4/form/utils/qrcodeform/index.js
Normal file
13
common/capextend/cap4/form/utils/qrcodeform/index.js
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
csdk.event.on('formRendered', function(){
|
||||
|
||||
try {
|
||||
if(cmp.href.getParam().qc = "ext") {
|
||||
document.getElementById("relationBtns").style.display="none";
|
||||
document.getElementById("attachment_wrap").style.display="none";
|
||||
}
|
||||
} catch(e) {
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
11
m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js
Normal file
11
m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js
Normal file
@@ -0,0 +1,11 @@
|
||||
document.addEventListener('cap_form_afterFormRender', function(evt) {
|
||||
try {
|
||||
if(cmp.href.getParam().qc == "ext") {
|
||||
document.getElementById("relationBtns").style.display="none";
|
||||
document.getElementById("attachment_wrap").style.display="none";
|
||||
document.getElementsByClassName("cmp-button-left-iconContent btn-box2")[0].style.display="none";
|
||||
}
|
||||
} catch(e) {
|
||||
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.seeyon.apps.qrCodeForm;
|
||||
|
||||
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
|
||||
|
||||
/**
|
||||
* 功能描述:<br>
|
||||
* <pre>
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @Author: FanGaowei
|
||||
* @Date: 2022/8/11
|
||||
*/
|
||||
public class QrCodeFormPluginApi extends APluginInfoApi {
|
||||
|
||||
@Override
|
||||
public String getPluginId() {
|
||||
return QrCodeFormConstants.getPluginId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCreateUser() {
|
||||
return "橙阳科技";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "微信扫码制单";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigVo getDefaultConfig() {
|
||||
ConfigVo configVo = new ConfigVo();
|
||||
for (QrCodeFormConstants value : QrCodeFormConstants.values()) {
|
||||
if(value != QrCodeFormConstants.plugin) {
|
||||
configVo.getDevParams().put(value.name(), value.getDefaultValue());
|
||||
configVo.getProdParams().put(value.name(), value.getDefaultValue());
|
||||
configVo.getParamMap().put(value.name(), value.getDescription());
|
||||
}
|
||||
}
|
||||
return configVo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.seeyon.apps.qrCodeForm;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.seeyon.apps.qrCodeForm.util.InitQrCodeFormUitl;
|
||||
import com.seeyon.ctp.common.AbstractSystemInitializer;
|
||||
|
||||
public class QrCodeFormPluginInitializer extends AbstractSystemInitializer {
|
||||
private static Log log = Log.get(QrCodeFormPluginInitializer.class);
|
||||
|
||||
public QrCodeFormPluginInitializer() {
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
log.info("◆二维码扫码填单插件销毁成功!");
|
||||
}
|
||||
|
||||
public void initialize() {
|
||||
InitQrCodeFormUitl.initMenu();
|
||||
log.info("◆二维码扫码填单插件初始化成功!");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.seeyon.apps.qrCodeForm.constant;
|
||||
|
||||
public class Constants {
|
||||
|
||||
//模拟移动端登录认证方式
|
||||
public static final String _REDIRECTURI = "/qrCodeForm.do?method=newMain&html=";
|
||||
//流程表单跳转地址
|
||||
public static final String FLOW_URL = "/seeyon/m3/apps/v5/collaboration/html/newCollaboration.html?qc=ext&templateId=";
|
||||
//无流程表单跳转地址
|
||||
public static final String UNFLOW_URL = "/seeyon/m3/apps/v5/cap4/htmls/native/form/index.html?";
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.seeyon.apps.qrCodeForm.constant;
|
||||
|
||||
public enum QrCodeFormConstants {
|
||||
|
||||
plugin("qrCodeForm","插件ID"),
|
||||
oaAddress("http://36.133.248.69:1818/", "OA地址"),
|
||||
qwAppId("", "企微APPID"),
|
||||
restId("qrcode", "rest账号"),
|
||||
restPwd("f39f8102-1c7f-423c-8e6c-57e1d19b9a6f", "rest密码"),
|
||||
qrcode_loginname("ceshi001", "发起人账号"),
|
||||
pcssourl("http://127.0.0.1:8888/seeyon/login/sso?from=ssodemo&ticket=", "PC单点登录地址");
|
||||
|
||||
QrCodeFormConstants(String defaultValue, String description) {
|
||||
this.defaultValue = defaultValue;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
private String defaultValue;
|
||||
private String description;
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public static String getPluginId() {
|
||||
return plugin.defaultValue;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.seeyon.apps.qrCodeForm.constant;
|
||||
|
||||
import com.seeyon.ctp.common.code.EnumsCode;
|
||||
import com.seeyon.ctp.common.i18n.ResourceUtil;
|
||||
|
||||
public enum SupportTypeEnum implements EnumsCode {
|
||||
ALL(0, "全部"),
|
||||
FLOW(1, "仅支持流程表单"),
|
||||
UNFLOW(2, "仅支持无流程表单");
|
||||
|
||||
private int key;
|
||||
private String text;
|
||||
|
||||
private SupportTypeEnum(int key, String text) {
|
||||
this.key = key;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return String.valueOf(this.key);
|
||||
}
|
||||
|
||||
public int getKey() {
|
||||
return this.key;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return ResourceUtil.getString(this.text);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
package com.seeyon.apps.qrCodeForm.controller;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
|
||||
import com.seeyon.apps.qrCodeForm.manager.QrCodeFormManager;
|
||||
import com.seeyon.apps.qrCodeForm.util.LoginUtil;
|
||||
import com.seeyon.apps.weixin.util.SecurityCertUtil;
|
||||
import com.seeyon.apps.weixin.util.WeixinUtil;
|
||||
import com.seeyon.ctp.common.SystemEnvironment;
|
||||
import com.seeyon.ctp.common.constants.ProductEditionEnum;
|
||||
import com.seeyon.ctp.common.controller.BaseController;
|
||||
import com.seeyon.ctp.common.flag.SysFlag;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgMember;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.ctp.util.Strings;
|
||||
import com.seeyon.ctp.util.annotation.Inject;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class QrCodeFormController extends BaseController {
|
||||
private static Log log = Log.get(QrCodeFormController.class);
|
||||
@Inject
|
||||
private QrCodeFormManager qrCodeFormManager;
|
||||
@Inject
|
||||
private OrgManager orgManager;
|
||||
@Inject
|
||||
private ICstConfigApi cstConfigApi;
|
||||
|
||||
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
|
||||
log.info("访问二维码生成页面!");
|
||||
ModelAndView mav = new ModelAndView("plugin/qrCodeForm/qrCodeFormIndex");
|
||||
Map map = new HashMap<String, Object>();
|
||||
map.put("bizType", "1");
|
||||
map.put("type", "owner-authed-biz");
|
||||
map.put("businessType", 0);
|
||||
map.put("activeTab", "mineapp");
|
||||
List<Map<String, Object>> bizList = qrCodeFormManager.listBusiness(map);
|
||||
mav.addObject("bizList", bizList);
|
||||
return mav;
|
||||
}
|
||||
|
||||
// http://116.207.128.39:8253//seeyon/qrCodeForm.do?method=newMain&type=1
|
||||
public ModelAndView newMain(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
ModelAndView mav = new ModelAndView("/wechat/collaborationContent");
|
||||
String html = "";
|
||||
String type = request.getParameter("type");
|
||||
if(Strings.isNotBlank(type)) {
|
||||
//获取集成平台中url1的连接地址;/seeyon/m3/apps/v5/collaboration/html/newCollaboration.html?qc=ext&templateId=-2617827166221087111
|
||||
//可以通过配置完成地址的获取
|
||||
html = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), "url" + type);
|
||||
}
|
||||
if(Strings.isBlank(html)) {
|
||||
html = URLDecoder.decode(request.getParameter("html"), "UTF-8");
|
||||
}
|
||||
// String loginName = qrCodeFormManager.getLoginMember(code);
|
||||
/**
|
||||
* 客开改动,固定登录名
|
||||
*/
|
||||
// String loginName = (String) FormulaUtil.getVar("qrcode_loginname");
|
||||
String loginName = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.qrcode_loginname.name());
|
||||
log.info("登录认证获取loginName为:" + loginName);
|
||||
if(Strings.isEmpty(loginName)){
|
||||
// mav.addObject("msg", "未获取到人员信息!")b;
|
||||
// return mav;
|
||||
loginName = "熊阳";
|
||||
}
|
||||
|
||||
V3xOrgMember member = orgManager.getMemberByLoginName(loginName);
|
||||
if(member == null){
|
||||
mav.addObject("msg", "人员不存在!");
|
||||
return mav;
|
||||
}
|
||||
SecurityCertUtil.login(request, loginName);
|
||||
|
||||
Map map = LoginUtil.getToken(String.valueOf(member.getId()), member.getLoginName(), request, response);
|
||||
String success = String.valueOf(map.get("success"));
|
||||
if (success != null && "false".equals(success)) {
|
||||
// String message = map.get("message").toString();
|
||||
// if (message.contains("User not found")) {
|
||||
// mav.addObject("msg", ResourceUtil.getString("wxt.user.binding.miss")
|
||||
// + "," + ResourceUtil.getString("wxt.user.name") + wechatUser.getXtUserName() +
|
||||
// "," + ResourceUtil.getString("wxt.dingding.user.id") + wechatUser.getXtUserId());
|
||||
// } else {
|
||||
// }
|
||||
mav.addObject("msg", (String) map.get("message"));
|
||||
return mav;
|
||||
}
|
||||
String token = (String) map.get("id");
|
||||
String suffix = (String) SysFlag.mobileEditionSuffix.getFlag();
|
||||
String edition = ProductEditionEnum.getCurrentProductEditionEnum().getValue();
|
||||
String v5timestamp = WeixinUtil.getV5Timestamp();
|
||||
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());
|
||||
if (Strings.isNotBlank(html)) {
|
||||
String url = address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=" + URLEncoder.encode(html, "UTF-8") + "&isAccount=&accountid=" + member.getOrgAccountId() + "&appid=";
|
||||
|
||||
return new ModelAndView("redirect:" + url);
|
||||
} else {
|
||||
return new ModelAndView("redirect:" + address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=&isAccount=&accountid=" + member.getOrgAccountId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ModelAndView pcMain(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
ModelAndView mav = new ModelAndView("/wechat/collaborationContent");
|
||||
String html = "";
|
||||
String type = request.getParameter("type");
|
||||
if(Strings.isNotBlank(type)) {
|
||||
//获取集成平台中url1的连接地址;/seeyon/m3/apps/v5/collaboration/html/newCollaboration.html?qc=ext&templateId=-2617827166221087111
|
||||
//可以通过配置完成地址的获取
|
||||
html = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), "url" + type);
|
||||
}
|
||||
if(Strings.isBlank(html)) {
|
||||
html = URLDecoder.decode(request.getParameter("html"), "UTF-8");
|
||||
}
|
||||
// String loginName = qrCodeFormManager.getLoginMember(code);
|
||||
/**
|
||||
* 客开改动,固定登录名
|
||||
*/
|
||||
// String loginName = (String) FormulaUtil.getVar("qrcode_loginname");
|
||||
String loginName = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.qrcode_loginname.name());
|
||||
log.info("登录认证获取loginName为:" + loginName);
|
||||
if(Strings.isEmpty(loginName)){
|
||||
// mav.addObject("msg", "未获取到人员信息!")b;
|
||||
// return mav;
|
||||
loginName = "熊阳";
|
||||
}
|
||||
|
||||
V3xOrgMember member = orgManager.getMemberByLoginName(loginName);
|
||||
if(member == null){
|
||||
mav.addObject("msg", "人员不存在!");
|
||||
return mav;
|
||||
}
|
||||
SecurityCertUtil.login(request, loginName);
|
||||
|
||||
Map map = LoginUtil.getToken(String.valueOf(member.getId()), member.getLoginName(), request, response);
|
||||
String success = String.valueOf(map.get("success"));
|
||||
if (success != null && "false".equals(success)) {
|
||||
// String message = map.get("message").toString();
|
||||
// if (message.contains("User not found")) {
|
||||
// mav.addObject("msg", ResourceUtil.getString("wxt.user.binding.miss")
|
||||
// + "," + ResourceUtil.getString("wxt.user.name") + wechatUser.getXtUserName() +
|
||||
// "," + ResourceUtil.getString("wxt.dingding.user.id") + wechatUser.getXtUserId());
|
||||
// } else {
|
||||
// }
|
||||
mav.addObject("msg", (String) map.get("message"));
|
||||
return mav;
|
||||
}
|
||||
String token = (String) map.get("id");
|
||||
String suffix = (String) SysFlag.mobileEditionSuffix.getFlag();
|
||||
String edition = ProductEditionEnum.getCurrentProductEditionEnum().getValue();
|
||||
String v5timestamp = WeixinUtil.getV5Timestamp();
|
||||
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());
|
||||
if (Strings.isNotBlank(html)) {
|
||||
String url = address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=" + URLEncoder.encode(html, "UTF-8") + "&isAccount=&accountid=" + member.getOrgAccountId() + "&appid=";
|
||||
|
||||
return new ModelAndView("redirect:" + url);
|
||||
} else {
|
||||
return new ModelAndView("redirect:" + address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=&isAccount=&accountid=" + member.getOrgAccountId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
59
src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairDAO.java
Normal file
59
src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairDAO.java
Normal file
@@ -0,0 +1,59 @@
|
||||
package com.seeyon.apps.qrCodeForm.dao;
|
||||
|
||||
import com.seeyon.ctp.util.JDBCAgent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class AffairDAO {
|
||||
public List<Map<String, Object>> getAffairs(Long menberId) {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("select * from ctp_affair where STATE = 3 and member_id = ?");
|
||||
List<Object> p = new ArrayList<Object>();
|
||||
p.add(menberId);
|
||||
agent.execute(sql.toString(), p);
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getAffairsById(Long affairId) {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("select * from ctp_affair where id = ?");
|
||||
List<Object> p = new ArrayList<Object>();
|
||||
p.add(affairId);
|
||||
agent.execute(sql.toString(), p);
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
}
|
||||
130
src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairLogDAO.java
Normal file
130
src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairLogDAO.java
Normal file
@@ -0,0 +1,130 @@
|
||||
package com.seeyon.apps.qrCodeForm.dao;
|
||||
|
||||
import com.seeyon.ctp.util.JDBCAgent;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class AffairLogDAO {
|
||||
public List<Map<String, Object>> setAffairs(Map affair) {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("INSERT INTO affair_state (id,request_name,receiver,createdate_time,state,node_name,workflow_name,pcurl,appurl,app) VALUES (?,?,?,?,?,?,?,?,?,?)");
|
||||
List<Object> p = new ArrayList<Object>();
|
||||
p.add(affair.get("id"));
|
||||
p.add(affair.get("requestName"));
|
||||
p.add(affair.get("receiver"));
|
||||
p.add(convertTimestamp2Date(affair.get("createTime")));
|
||||
p.add(affair.get("state"));
|
||||
p.add(affair.get("nodeName"));
|
||||
p.add(affair.get("workflowName"));
|
||||
p.add(affair.get("pcurl"));
|
||||
p.add(affair.get("appurl"));
|
||||
p.add(affair.get("app"));
|
||||
agent.execute(sql.toString(), p);
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
|
||||
public Date convertTimestamp2Date(Object timestamp) throws ParseException {
|
||||
String time = timestamp.toString();
|
||||
long l = Long.parseLong(time);
|
||||
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
String format = simpleDateFormat.format(new Date(l));
|
||||
Date parse = simpleDateFormat.parse(format);
|
||||
return parse;
|
||||
}
|
||||
|
||||
|
||||
public List<Map<String, Object>> getAffairs() {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("select * from affair_state where state = 0");
|
||||
agent.execute(sql.toString());
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getAffairById(Long id) {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("select * from affair_state where id = ?");
|
||||
List<Object> p = new ArrayList<Object>();
|
||||
p.add(id);
|
||||
agent.execute(sql.toString(), p);
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> updateAffair(Long id, Integer state) {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("UPDATE affair_state set state = ? where id = ?");
|
||||
List<Object> p = new ArrayList<Object>();
|
||||
p.add(state);
|
||||
p.add(id);
|
||||
agent.execute(sql.toString(), p);
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.seeyon.apps.qrCodeForm.dao;
|
||||
|
||||
import com.seeyon.ctp.util.JDBCAgent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class DefinitionDAO {
|
||||
public List<Map<String, Object>> getDefinition(Long menberId) {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("select * from cap_form_definition where id = ?");
|
||||
List<Object> p = new ArrayList<Object>();
|
||||
p.add(menberId);
|
||||
agent.execute(sql.toString(), p);
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
}
|
||||
33
src/main/java/com/seeyon/apps/qrCodeForm/dao/MembersDAO.java
Normal file
33
src/main/java/com/seeyon/apps/qrCodeForm/dao/MembersDAO.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package com.seeyon.apps.qrCodeForm.dao;
|
||||
|
||||
import com.seeyon.ctp.util.JDBCAgent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class MembersDAO {
|
||||
public List<Map<String, Object>> getMembers() {
|
||||
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
|
||||
JDBCAgent agent = new JDBCAgent();
|
||||
//测formmain_3592 本formmain_0070 正formmain_3600
|
||||
try {
|
||||
StringBuilder sql = new StringBuilder("select * from formmain_3600");
|
||||
agent.execute(sql.toString());
|
||||
List<Map> list = agent.resultSetToList();
|
||||
if (list != null && list.size() > 0) {
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
Map map = list.get(i);
|
||||
lists.add(map);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println(e);
|
||||
} finally {
|
||||
if (agent != null) {
|
||||
agent.close();
|
||||
}
|
||||
}
|
||||
return lists;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.seeyon.apps.qrCodeForm.manager;
|
||||
|
||||
import com.seeyon.cap4.form.modules.business.FormAppBO;
|
||||
import com.seeyon.ctp.util.annotation.AjaxAccess;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface QrCodeFormManager {
|
||||
@AjaxAccess
|
||||
List<Map<String, Object>> listBusiness(Map<String, Object> params);
|
||||
|
||||
@AjaxAccess
|
||||
List<FormAppBO> listFormApp(Map<String, Object> params);
|
||||
|
||||
Map<String, Object> qrCodeFormUrl(Map<String, Object> params) throws UnsupportedEncodingException;
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
package com.seeyon.apps.qrCodeForm.manager;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.qrCodeForm.constant.Constants;
|
||||
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
|
||||
import com.seeyon.apps.weixin.manager.WechatUserManager;
|
||||
import com.seeyon.cap4.form.api.FormApi4Cap4;
|
||||
import com.seeyon.cap4.form.modules.business.BusinessSourceTypeManager;
|
||||
import com.seeyon.cap4.form.modules.business.FormAppBO;
|
||||
import com.seeyon.cap4.form.util.BizUtil;
|
||||
import com.seeyon.cap4.form.util.Enums;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.SystemEnvironment;
|
||||
import com.seeyon.ctp.common.exceptions.BusinessException;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.ctp.util.FlipInfo;
|
||||
import com.seeyon.ctp.util.ParamUtil;
|
||||
import com.seeyon.ctp.util.Strings;
|
||||
import com.seeyon.ctp.util.annotation.AjaxAccess;
|
||||
import com.seeyon.ctp.util.annotation.Inject;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class QrCodeFormManagerImpl implements QrCodeFormManager {
|
||||
|
||||
private static Log log = Log.get(QrCodeFormManagerImpl.class);
|
||||
|
||||
@Inject
|
||||
private FormApi4Cap4 formApi4Cap4;
|
||||
@Inject
|
||||
private OrgManager orgManager;
|
||||
@Inject
|
||||
private ICstConfigApi cstConfigApi;
|
||||
@Inject
|
||||
public WechatUserManager wechatUserManager;
|
||||
|
||||
|
||||
/**
|
||||
* 获取应用包数据
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@AjaxAccess
|
||||
public List<Map<String, Object>> listBusiness(Map<String, Object> params) {
|
||||
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
|
||||
try {
|
||||
FlipInfo fi = new FlipInfo(1, -1);
|
||||
Map<String, Object> resultMap = formApi4Cap4.listBusiness(fi, params);
|
||||
if (Strings.isNotEmpty(fi.getData())) {
|
||||
listMap = fi.getData();
|
||||
}
|
||||
} catch (BusinessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return listMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有的应用下的模板
|
||||
*
|
||||
* @param params
|
||||
* @return
|
||||
*/
|
||||
@AjaxAccess
|
||||
@Override
|
||||
public List<FormAppBO> listFormApp(Map<String, Object> params) {
|
||||
List<FormAppBO> returnList = new ArrayList<>();
|
||||
String type = ParamUtil.getString(params, "type");
|
||||
String bizConfigId = ParamUtil.getString(params, "bizConfigId");
|
||||
BusinessSourceTypeManager sourceType = BizUtil.getSourceTypeById(type);
|
||||
Long bizConfigL = 0L;
|
||||
if (Strings.isNotBlank(bizConfigId)) {
|
||||
bizConfigL = Long.parseLong(bizConfigId);
|
||||
}
|
||||
try {
|
||||
List<FormAppBO> allList = sourceType.getFormAppBOList(AppContext.getCurrentUser(), "", "", false, bizConfigL);
|
||||
if (Strings.isNotEmpty(allList)) {
|
||||
returnList = allList.stream().filter(a -> !"PARENT".equals(a.getSourctTypeName())).collect(Collectors.toList());
|
||||
}
|
||||
} catch (BusinessException e) {
|
||||
log.error("获取所有模板异常", e);
|
||||
}
|
||||
return returnList;
|
||||
}
|
||||
|
||||
@Override
|
||||
@AjaxAccess
|
||||
public Map<String, Object> qrCodeFormUrl(Map<String, Object> params) throws UnsupportedEncodingException {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
Integer sourceType = ParamUtil.getInt(params, "sourceType");
|
||||
//String fillUrl = Constants._URLTPL.replaceAll("\\{corpId}", Constants._CORPID);
|
||||
String fillUrl;
|
||||
String _redirecturi = Constants._REDIRECTURI;
|
||||
if (sourceType == Enums.SourceType.SOURCE_TYPE_FLOWTEMPLATE.getKey()) {
|
||||
String templateId = ParamUtil.getString(params, "templateId");
|
||||
String tourl = Constants.FLOW_URL + templateId;
|
||||
try {
|
||||
// fillUrl = fillUrl + URLEncoder.encode(
|
||||
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());;
|
||||
fillUrl = address + SystemEnvironment.getContextPath() + _redirecturi;
|
||||
fillUrl += URLEncoder.encode(tourl, "UTF-8");
|
||||
// "http://172.16.30.123:8081"+ SystemEnvironment.getContextPath() + _redirecturi + tourl, "UTF-8"
|
||||
// ) + Constants._FIXURL;
|
||||
result.put("fillUrl", fillUrl);
|
||||
return result;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
log.error("地址处理异常", e);
|
||||
}
|
||||
} else if (sourceType == Enums.SourceType.SOURCE_TYPE_INFOMANAGE.getKey()) {
|
||||
String formType = ParamUtil.getString(params, "formType");
|
||||
String type = ParamUtil.getString(params, "type");
|
||||
String title = ParamUtil.getString(params, "title");
|
||||
String moduleId = ParamUtil.getString(params, "moduleId");
|
||||
String formTemplateId = ParamUtil.getString(params, "formTemplateId");
|
||||
String moduleType = ParamUtil.getString(params, "moduleType");
|
||||
String operateType = ParamUtil.getString(params, "operateType");
|
||||
String rightId = ParamUtil.getString(params, "rightId");
|
||||
//http://127.0.0.1/seeyon/qrCodeForm.do?method=newMain&html=/seeyon/m3/apps/v5/cap4/htmls/native/form/index.html?cusType=true&formTemplateId=-4624141853295951831&moduleId=-4624141853295951831&moduleType=42&formType=main&type=new&operateType=0&rightId=-1
|
||||
String tourl = Constants.UNFLOW_URL + "cusType=true"
|
||||
+ "&formTemplateId=" + formTemplateId
|
||||
+ "&moduleId=" + moduleId
|
||||
+ "&moduleType=" + moduleType
|
||||
+ "&formType=" + formType
|
||||
+ "&type=" + type
|
||||
+ "&rightId=" + rightId
|
||||
+ "&operateType=" + operateType;
|
||||
try {
|
||||
// fillUrl = fillUrl + URLEncoder.encode(
|
||||
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());
|
||||
fillUrl = address + SystemEnvironment.getContextPath() + _redirecturi;
|
||||
|
||||
fillUrl += URLEncoder.encode(tourl, "UTF-8");
|
||||
// "http://172.16.30.123:80"+ SystemEnvironment.getContextPath() + _redirecturi + tourl, "UTF-8"
|
||||
// ) + Constants._FIXURL;
|
||||
log.info("生成地址为:" + fillUrl);
|
||||
result.put("fillUrl", fillUrl);
|
||||
return result;
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
log.error("地址处理异常", e);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
package com.seeyon.apps.qrCodeForm.sso;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.weixin.manager.WechatUserManager;
|
||||
import com.seeyon.apps.weixin.po.WechatUser;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgMember;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.ctp.portal.sso.SSOLoginContext;
|
||||
import com.seeyon.ctp.portal.sso.SSOLoginHandshakeAbstract;
|
||||
import com.seeyon.ctp.util.HttpClientUtil;
|
||||
import com.seeyon.ctp.util.annotation.Inject;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author
|
||||
* @title: WechatQRHandShake
|
||||
* @description: 企业微信扫码发起单据
|
||||
* @date 2021/11/30 9:47
|
||||
*/
|
||||
public class WechatQRHandShake extends SSOLoginHandshakeAbstract {
|
||||
|
||||
private static Log log = Log.get(WechatQRHandShake.class);
|
||||
//企业微信appid
|
||||
public static final String _CORPID = AppContext.getSystemProperty("qrCodeForm.corpid");
|
||||
//企业微信corpsecret
|
||||
public static final String _corpsecret = AppContext.getSystemProperty("qrCodeForm.corpsecret");
|
||||
//验证方式
|
||||
public static final String handshakeType = AppContext.getSystemProperty("qrCodeForm.handshakeType");
|
||||
|
||||
@Inject
|
||||
public WechatUserManager wechatUserManager;
|
||||
@Autowired
|
||||
private OrgManager orgManager;
|
||||
@Override
|
||||
public String handshake(String s) {
|
||||
log.info("--进入企业微信回调接口!");
|
||||
HttpServletRequest request = AppContext.getRawRequest();
|
||||
String code =request.getParameter("code");
|
||||
|
||||
String corpid =_CORPID;
|
||||
String corpsecret =_corpsecret;
|
||||
|
||||
log.info("获取access接口url:https://qyapi.weixin.qq.com/cgi-bin/gettoken?"+"corpid="+corpid+"&corpsecret="+corpsecret);
|
||||
String access = null;
|
||||
try {
|
||||
access = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+corpsecret);
|
||||
log.info("获取access接口返回:"+access);
|
||||
if(access==null || access.equals("")){
|
||||
log.error("--未获取到access!");
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject jsonObject = JSONObject.parseObject(access);
|
||||
if(jsonObject==null){
|
||||
log.error("--未获取到access的jsonObject!");
|
||||
return null;
|
||||
}
|
||||
|
||||
String accessToken = (String)jsonObject.get("access_token");
|
||||
if(accessToken==null || accessToken.equals("")){
|
||||
log.error("--未获取到accessToken!");
|
||||
return null;
|
||||
}
|
||||
|
||||
log.info("--获取访问用户身份接口url:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?"+"access_token=" + accessToken + "&code=" + code);
|
||||
String user = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" + accessToken + "&code=" + code);
|
||||
log.info("--获取访问用户身份接口返回值:" + user);
|
||||
if(user==null || user.equals("")){
|
||||
log.error("--未获取到user!");
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject userJson = JSONObject.parseObject(user);
|
||||
if(userJson==null){
|
||||
log.error("--未获取到user的jsonObject!");
|
||||
return null;
|
||||
}
|
||||
|
||||
String userid = userJson.getString("UserId");
|
||||
if(userid==null || userid.equals("")){
|
||||
log.error("--未获取到userid!");
|
||||
return null;
|
||||
}
|
||||
String Loginname = null;
|
||||
// if("1".equals(handshakeType)){//使用标准模块的微信绑定
|
||||
if(false){ //企业微信、微协同绑定等信息存储在微协同云服务中,废弃逻辑
|
||||
WechatUser wechatUser =wechatUserManager.getWechatUserByUserIdAndcorpId(userid,corpid);
|
||||
Loginname=wechatUser.getXtLoginName();
|
||||
}else {//自定义如何根据微信得用户id获取OA的用户
|
||||
log.info("--获取成员接口url:https://qyapi.weixin.qq.com/cgi-bin/user/get?"+"access_token=" + accessToken + "&userid=" + userid);
|
||||
String member = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&userid=" + userid);
|
||||
log.info("获取成员接口返回值:" + member);
|
||||
if(member==null || member.equals("")){
|
||||
log.error("--未获取到member!");
|
||||
return null;
|
||||
}
|
||||
|
||||
JSONObject memberJson = JSONObject.parseObject(member);
|
||||
if(userJson==null){
|
||||
log.error("--未获取到member的jsonObject!");
|
||||
return null;
|
||||
}
|
||||
|
||||
String mobile = memberJson.getString("mobile");
|
||||
if(mobile==null || mobile.equals("")){
|
||||
log.error("--未获取到mobile!");
|
||||
return null;
|
||||
}
|
||||
List<V3xOrgMember> memberList=orgManager.getMemberListByMobile(mobile,null);
|
||||
Loginname = memberList!=null?memberList.get(0).getLoginName():null;
|
||||
}
|
||||
if(Loginname ==null || Loginname.equals("")){
|
||||
log.error("--未获取到loginName!");
|
||||
return null;
|
||||
}
|
||||
return Loginname;
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("获取微信验证失败",e);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void logoutNotify(String s) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getToUrl(HttpServletRequest req, SSOLoginContext ssoLoginContext, String ticket) {
|
||||
return req.getParameter("tourl");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package com.seeyon.apps.qrCodeForm.util;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.exceptions.BusinessException;
|
||||
import com.seeyon.ctp.privilege.enums.PrivMenuTypeEnums;
|
||||
import com.seeyon.ctp.privilege.manager.PrivilegeMenuManager;
|
||||
import com.seeyon.ctp.privilege.po.PrivMenu;
|
||||
import com.seeyon.ctp.util.DBAgent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class InitQrCodeFormUitl {
|
||||
private static Log log = Log.get(InitQrCodeFormUitl.class);
|
||||
private static PrivilegeMenuManager privilegeMenuManager = (PrivilegeMenuManager) AppContext.getBean("privilegeMenuManager");
|
||||
|
||||
public static void initMenu() {
|
||||
try {
|
||||
List<PrivMenu> listmenu = new ArrayList<PrivMenu>();
|
||||
|
||||
StringBuffer queryString = new StringBuffer(" FROM ");
|
||||
queryString.append(PrivMenu.class.getSimpleName()).append(" where ")
|
||||
.append(" path = '711' ");
|
||||
|
||||
listmenu = DBAgent.find(queryString.toString());
|
||||
if (listmenu == null || listmenu.size() < 1) {
|
||||
creatFileImportMenu();//创建菜单资源
|
||||
}
|
||||
log.info("模板二维码菜单完成");
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("模板二维码菜单失败", e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置菜单
|
||||
*
|
||||
* @return
|
||||
* @throws BusinessException
|
||||
*/
|
||||
private static void creatFileImportMenu() {
|
||||
try {
|
||||
List<PrivMenu> menus = new ArrayList<PrivMenu>();
|
||||
PrivMenu configmenu = new PrivMenu();
|
||||
configmenu.setNewId();
|
||||
configmenu.setName("模板二维码");
|
||||
configmenu.setIcon("conferencearrangemen.png");
|
||||
configmenu.setSortid(1);
|
||||
configmenu.setPath("711");
|
||||
configmenu.setExt1("0");
|
||||
configmenu.setExt2("1");
|
||||
configmenu.setExt3("");
|
||||
configmenu.setExt4(1);
|
||||
configmenu.setExt7(configmenu.getName());
|
||||
configmenu.setExt8("");
|
||||
configmenu.setExt9("");
|
||||
configmenu.setExt10("");
|
||||
configmenu.setExt11("");
|
||||
configmenu.setExt12(0);
|
||||
configmenu.setExt13(0);
|
||||
configmenu.setExt14(0);
|
||||
configmenu.setExt15(0);
|
||||
configmenu.setExt16(0);
|
||||
Date nowDate = new Date();
|
||||
configmenu.setCreatedate(nowDate);
|
||||
configmenu.setUpdatedate(nowDate);
|
||||
configmenu.setType(PrivMenuTypeEnums.systemPresetMenu.getKey());
|
||||
configmenu.setParentId(0L);
|
||||
menus.add(configmenu);
|
||||
|
||||
PrivMenu syncConfig = new PrivMenu();//二维码生成
|
||||
syncConfig.setNewId();
|
||||
syncConfig.setName("二维码生成");
|
||||
syncConfig.setIcon("b_menu_thridpartyspace.png");
|
||||
syncConfig.setTarget("mainfrm");
|
||||
syncConfig.setSortid(1);
|
||||
syncConfig.setPath("711001");
|
||||
syncConfig.setExt1("0");
|
||||
syncConfig.setExt2("2");
|
||||
syncConfig.setExt3("");
|
||||
syncConfig.setExt4(1);
|
||||
syncConfig.setExt7(syncConfig.getName());
|
||||
syncConfig.setExt8("0");
|
||||
syncConfig.setExt9("0");
|
||||
syncConfig.setExt10("0");
|
||||
syncConfig.setExt11("1");
|
||||
syncConfig.setExt19(2L);
|
||||
syncConfig.setEnterResource(1);
|
||||
syncConfig.setResourceNavurl("/qrCodeForm.do?method=index");
|
||||
syncConfig.setResourceCode("qrCodeForm");
|
||||
syncConfig.setResourceModuleid("none");
|
||||
syncConfig.setCreatedate(nowDate);
|
||||
syncConfig.setUpdatedate(nowDate);
|
||||
syncConfig.setUpdateuserid(1L);
|
||||
syncConfig.setShow(true);
|
||||
syncConfig.setControl(true);
|
||||
syncConfig.setType(PrivMenuTypeEnums.systemPresetMenu.getKey());
|
||||
syncConfig.setParentId(configmenu.getId());
|
||||
menus.add(syncConfig);
|
||||
|
||||
DBAgent.saveAll(menus);
|
||||
} catch (Exception e) {
|
||||
log.error("组织机构同步菜单异常", e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
70
src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java
Normal file
70
src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java
Normal file
@@ -0,0 +1,70 @@
|
||||
package com.seeyon.apps.qrCodeForm.util;
|
||||
|
||||
import cn.hutool.cache.CacheUtil;
|
||||
import cn.hutool.cache.impl.TimedCache;
|
||||
import cn.hutool.log.Log;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.constants.Constants;
|
||||
import com.seeyon.ctp.rest.util.TokenUtil;
|
||||
import com.seeyon.ctp.services.UserToken;
|
||||
import com.seeyon.ctp.util.Strings;
|
||||
import com.seeyon.ctp.util.TextEncoder;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class LoginUtil {
|
||||
private static Log log = Log.get(LoginUtil.class);
|
||||
|
||||
private static ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
|
||||
|
||||
private static TimedCache<String, String> tokenCache = CacheUtil.newTimedCache(14 * 60 * 1000);
|
||||
|
||||
//rest信息
|
||||
// public static final String restName = AppContext.getSystemProperty("qrCodeForm.restName");
|
||||
// public static final String restPassword = AppContext.getSystemProperty("qrCodeForm.restPassword");
|
||||
|
||||
|
||||
/**
|
||||
* 获取token
|
||||
*
|
||||
* @param loginName 登录名
|
||||
* @return
|
||||
*/
|
||||
public static Map getToken(String memberId, String loginName, HttpServletRequest request, HttpServletResponse response) {
|
||||
Map<String, Object> map = new HashMap<String, Object>();
|
||||
String tokenId = tokenCache.get(memberId);
|
||||
if(null != tokenId) {
|
||||
map.put("id", tokenId);
|
||||
map.put("success", true);
|
||||
return map;
|
||||
}
|
||||
try {
|
||||
ConfigVo config = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId());
|
||||
String userName = config.getParamVal(QrCodeFormConstants.restId.name());
|
||||
String password = config.getParamVal(QrCodeFormConstants.restPwd.name());
|
||||
password = TextEncoder.decode(password);
|
||||
Long userId = null;
|
||||
if (Strings.isNotBlank(memberId)) {
|
||||
userId = Long.parseLong(memberId);
|
||||
}
|
||||
UserToken token = TokenUtil._getToken(userName, password, userId, loginName, null, Constants.login_useragent_from.wechat.name(), request, response);
|
||||
if (token != null) {
|
||||
map.put("success", true);
|
||||
map.put("id", token.getId());
|
||||
tokenCache.put(memberId, token.getId());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("", e);
|
||||
map.put("success", false);
|
||||
map.put("message", e.getMessage());
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.seeyon.apps.src_meetingroom;
|
||||
|
||||
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.src_meetingroom.constants.MeetingRoomConstants;
|
||||
|
||||
/**
|
||||
* 功能描述:<br>
|
||||
* <pre>
|
||||
*
|
||||
* </pre>
|
||||
*
|
||||
* @Author: FanGaowei
|
||||
* @Date: 2022/12/1
|
||||
*/
|
||||
public class MeetingRoomPluginApi extends APluginInfoApi {
|
||||
|
||||
@Override
|
||||
public String getPluginId() {
|
||||
return MeetingRoomConstants.getPluginId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getCreateUser() {
|
||||
return "橙阳科技";
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return "会议室指示屏管理";
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConfigVo getDefaultConfig() {
|
||||
ConfigVo configVo = new ConfigVo();
|
||||
for (MeetingRoomConstants value : MeetingRoomConstants.values()) {
|
||||
if(value != MeetingRoomConstants.plugin) {
|
||||
configVo.getDevParams().put(value.name(), value.getDefaultValue());
|
||||
configVo.getProdParams().put(value.name(), value.getDefaultValue());
|
||||
configVo.getParamMap().put(value.name(), value.getDescription());
|
||||
}
|
||||
}
|
||||
return configVo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.seeyon.apps.src_meetingroom.constants;
|
||||
|
||||
public enum MeetingRoomConstants {
|
||||
|
||||
plugin("src_meetingroom","插件ID"),
|
||||
meetingroomcontrast("{\"HY01\":\"/seeyon/g/b\"}","会议室账号对照"),
|
||||
aeskey("Y7T4B822Fi5eNDaQqtVj6Q==","AES密钥");
|
||||
|
||||
MeetingRoomConstants(String defaultValue, String description) {
|
||||
this.defaultValue = defaultValue;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
private String defaultValue;
|
||||
private String description;
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public static String getPluginId() {
|
||||
return plugin.defaultValue;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.seeyon.apps.src_meetingroom.sso;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.src_meetingroom.constants.MeetingRoomConstants;
|
||||
import com.seeyon.apps.src_meetingroom.util.AESUtil;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.controller.BaseController;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import www.seeyon.com.utils.StringUtil;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Date;
|
||||
|
||||
public class MeetingRoomInterfaceSSO extends BaseController {
|
||||
|
||||
private static Log log = Log.get(MeetingRoomInterfaceSSO.class);
|
||||
|
||||
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
|
||||
|
||||
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) throws Exception {
|
||||
ConfigVo config = cstConfigApi.getConfig(MeetingRoomConstants.getPluginId());
|
||||
String loginName = request.getParameter("loginName");
|
||||
log.info("获取当前登录名"+loginName);
|
||||
// 根据设置参数获取需要跳转的会议室连接地址
|
||||
String meetingroomcontrast = config.getParamVal(MeetingRoomConstants.meetingroomcontrast.name());
|
||||
JSONObject meetingroomJSON = JSONObject.parseObject(meetingroomcontrast);
|
||||
String meetingroomURL = meetingroomJSON.getString(loginName);
|
||||
// 路径进行编码转译
|
||||
String encoded = URLEncoder.encode(meetingroomURL, StandardCharsets.UTF_8.name());
|
||||
log.info("根据登录名获取解析后的会议室登录地址为"+meetingroomURL);
|
||||
if(StringUtil.isEmpty(meetingroomURL)){
|
||||
log.info("当前登录名未查询到对照的会议室地址访问失败!");
|
||||
ModelAndView mav = new ModelAndView("popup");
|
||||
// 2. 向前端传递弹窗参数(可自定义字段)
|
||||
mav.addObject("showPopup", true); // 是否显示弹窗
|
||||
mav.addObject("popupTitle", "操作提示"); // 弹窗标题
|
||||
mav.addObject("popupContent", "当前登录名为找到对应会议室请检查请求参数。"); // 弹窗内容
|
||||
mav.addObject("popupType", "success"); // 弹窗类型(成功/失败)
|
||||
return mav;
|
||||
}
|
||||
// 设置简单加密登录名
|
||||
String aeskey = config.getParamVal(MeetingRoomConstants.aeskey.name());
|
||||
// 登录名添加随机参数
|
||||
long timeLong = new Date().getTime();
|
||||
loginName = loginName + '-'+timeLong;
|
||||
String cipherLoginName = AESUtil.encrypt(loginName, aeskey);
|
||||
String encodedValue = URLEncoder.encode(cipherLoginName, "UTF-8");
|
||||
response.sendRedirect("/seeyon/login/sso?from=meetingroomlogin&loginName="+encodedValue+"&tourl="+encoded);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
package com.seeyon.apps.src_meetingroom.sso;
|
||||
|
||||
import cn.hutool.log.Log;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.src_meetingroom.constants.MeetingRoomConstants;
|
||||
import com.seeyon.apps.src_meetingroom.util.AESUtil;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.portal.sso.SSOLoginHandshakeAbstract;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.SecretKeyFactory;
|
||||
import javax.crypto.spec.DESKeySpec;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import java.net.URLDecoder;
|
||||
|
||||
public class MeetingRoomLoginSSO extends SSOLoginHandshakeAbstract {
|
||||
|
||||
private static Log log = Log.get(MeetingRoomLoginSSO.class);
|
||||
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
|
||||
|
||||
/**
|
||||
* 登录验证方式
|
||||
*/
|
||||
@Override
|
||||
public String handshake(String ticket) {
|
||||
try{
|
||||
ConfigVo config = cstConfigApi.getConfig(MeetingRoomConstants.getPluginId());
|
||||
|
||||
if(ticket==null||ticket.equals("")) {
|
||||
return null;
|
||||
}
|
||||
log.info("直接获取编码信息"+ticket);
|
||||
// 进行文件URL编译转译
|
||||
// String newTicket = URLDecoder.decode(ticket, "UTF-8");
|
||||
// log.info("解密后的内容"+newTicket);
|
||||
// 自定义解密规则
|
||||
String aeskey = config.getParamVal(MeetingRoomConstants.aeskey.name());
|
||||
String decryptText = AESUtil.decrypt(ticket, aeskey);
|
||||
String[] decryptTexts = decryptText.split("-");
|
||||
ticket = decryptTexts[0];
|
||||
log.info("单点登录账号=="+ticket);
|
||||
}catch (Exception e) {
|
||||
log.error("单点登录握手类处理异常!",e);
|
||||
}
|
||||
return ticket;
|
||||
}
|
||||
@Override
|
||||
public void logoutNotify(String s) { }
|
||||
|
||||
/**
|
||||
* 用户解密方式
|
||||
* @param src
|
||||
* @param password
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static byte[] decrypt(byte[] src, String password) throws Exception {
|
||||
IvParameterSpec iv = new IvParameterSpec(password.getBytes("UTF-8"));
|
||||
DESKeySpec desKey = new DESKeySpec(password.getBytes("UTF-8"));
|
||||
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
|
||||
SecretKey securekey = keyFactory.generateSecret(desKey);
|
||||
Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
|
||||
cipher.init(Cipher.DECRYPT_MODE, securekey, iv);
|
||||
return cipher.doFinal(src);
|
||||
}
|
||||
}
|
||||
135
src/main/java/com/seeyon/apps/src_meetingroom/util/AESUtil.java
Normal file
135
src/main/java/com/seeyon/apps/src_meetingroom/util/AESUtil.java
Normal file
@@ -0,0 +1,135 @@
|
||||
package com.seeyon.apps.src_meetingroom.util;
|
||||
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.KeyGenerator;
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.IvParameterSpec;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.net.URLDecoder;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
|
||||
public class AESUtil {
|
||||
// 加密算法/模式/填充方式
|
||||
private static final String AES_ALGORITHM = "AES/CBC/PKCS5Padding";
|
||||
// AES密钥长度(128位)
|
||||
private static final int AES_KEY_SIZE = 128;
|
||||
// IV向量长度(固定16字节,AES块大小)
|
||||
private static final int IV_LENGTH = 16;
|
||||
|
||||
/**
|
||||
* 生成AES密钥(128位),可保存为自定义密钥(建议持久化存储)
|
||||
* @return Base64编码的密钥字符串
|
||||
* @throws Exception 密钥生成异常
|
||||
*/
|
||||
public static String generateAesKey() throws Exception {
|
||||
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
|
||||
keyGen.init(AES_KEY_SIZE, new SecureRandom());
|
||||
SecretKey secretKey = keyGen.generateKey();
|
||||
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
|
||||
}
|
||||
|
||||
/**
|
||||
* 加密字符串
|
||||
* @param plainText 明文(待加密字符串)
|
||||
* @param keyBase64 Base64编码的AES密钥
|
||||
* @return 加密结果(格式:IV+密文,Base64编码)
|
||||
* @throws Exception 加密异常
|
||||
*/
|
||||
public static String encrypt(String plainText, String keyBase64) throws Exception {
|
||||
// 1. 解码密钥
|
||||
byte[] keyBytes = Base64.getDecoder().decode(keyBase64);
|
||||
SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
|
||||
|
||||
// 2. 生成随机IV向量
|
||||
byte[] iv = new byte[IV_LENGTH];
|
||||
new SecureRandom().nextBytes(iv);
|
||||
IvParameterSpec ivSpec = new IvParameterSpec(iv);
|
||||
|
||||
// 3. 初始化加密器
|
||||
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
|
||||
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
|
||||
|
||||
// 4. 加密明文
|
||||
byte[] encryptBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
|
||||
|
||||
// 5. 拼接IV和密文(IV用于解密,需随密文一起传输)
|
||||
byte[] result = new byte[IV_LENGTH + encryptBytes.length];
|
||||
System.arraycopy(iv, 0, result, 0, IV_LENGTH);
|
||||
System.arraycopy(encryptBytes, 0, result, IV_LENGTH, encryptBytes.length);
|
||||
|
||||
// 6. Base64编码返回
|
||||
return Base64.getEncoder().encodeToString(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解密字符串
|
||||
* @param cipherText 加密后的字符串(Base64编码,格式:IV+密文)
|
||||
* @param keyBase64 Base64编码的AES密钥
|
||||
* @return 解密后的明文
|
||||
* @throws Exception 解密异常
|
||||
*/
|
||||
public static String decrypt(String cipherText, String keyBase64) throws Exception {
|
||||
// 1. 解码密文字符串
|
||||
byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
|
||||
|
||||
// 2. 拆分IV和密文
|
||||
byte[] iv = new byte[IV_LENGTH];
|
||||
System.arraycopy(cipherBytes, 0, iv, 0, IV_LENGTH);
|
||||
byte[] encryptBytes = new byte[cipherBytes.length - IV_LENGTH];
|
||||
System.arraycopy(cipherBytes, IV_LENGTH, encryptBytes, 0, encryptBytes.length);
|
||||
|
||||
// 3. 解码密钥
|
||||
byte[] keyBytes = Base64.getDecoder().decode(keyBase64);
|
||||
SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
|
||||
|
||||
// 4. 初始化解密器
|
||||
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
|
||||
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
|
||||
|
||||
// 5. 解密密文
|
||||
byte[] plainBytes = cipher.doFinal(encryptBytes);
|
||||
|
||||
// 6. 转为字符串返回
|
||||
return new String(plainBytes, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
// 测试示例
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// 1. 生成密钥(只需生成一次,保存后复用)
|
||||
// String aesKey = generateAesKey();
|
||||
String aesKey = "Y7T4B822Fi5eNDaQqtVj6Q==";
|
||||
System.out.println("生成的AES密钥(Base64):" + aesKey);
|
||||
|
||||
// 2. 待加密的明文
|
||||
// String plainText = "Hello, Java加密解密!123456";
|
||||
|
||||
String plainText = "HY01";
|
||||
long timeLong = new Date().getTime();
|
||||
plainText = plainText + '-' +timeLong;
|
||||
System.out.println("原始明文:" + plainText);
|
||||
|
||||
// 3. 加密
|
||||
String cipherText = encrypt(plainText, aesKey);
|
||||
String encodedValue = URLEncoder.encode(cipherText, "UTF-8");
|
||||
System.out.println("加密后字符串:" + encodedValue);
|
||||
|
||||
// 4. 解密
|
||||
// String ttt = "VJFJmDoONeFtbcjz%2F%2BOtULaMwy2q4erOGvGD%2FAXYtyw%3D";
|
||||
String ttt = "9VVj3Q7lJAeGlE++d9jV6HFZJhehHJ7xjHPX2GikdYCQveluOZD/QjNoJyIK1G7U";
|
||||
// String decodedValue = URLDecoder.decode(ttt, "UTF-8");
|
||||
String decryptText = decrypt(ttt, aesKey);
|
||||
System.out.println("解密后字符串:" + decryptText);
|
||||
|
||||
// 验证解密结果
|
||||
System.out.println("解密结果是否一致:" + plainText.equals(decryptText));
|
||||
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.seeyon.apps.src_organizationHandle.constants;
|
||||
|
||||
public enum OrganizationHandleConstants {
|
||||
|
||||
plugin("src_organizationHandle","插件ID"),
|
||||
oaHost("http://127.0.0.1:8888","oaHost"),
|
||||
restName("","restName"),
|
||||
restPwd("","restPwd"),
|
||||
memberFormCode("","memberFormCode"),
|
||||
orgMembersUrl("/orgMembers/{accountId}","orgMembers接口路径"),
|
||||
orgDepartmentsUrl("/orgDepartments/{accountId}","orgDepartments接口路径"),
|
||||
departmentmanagerUrl("/orgDepartment/departmentmanagerinfo/{departmentid}/{accountid}","departmentmanager接口路径")
|
||||
;
|
||||
|
||||
OrganizationHandleConstants(String defaultValue, String description) {
|
||||
this.defaultValue = defaultValue;
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
private String defaultValue;
|
||||
private String description;
|
||||
|
||||
public String getDefaultValue() {
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public static String getPluginId() {
|
||||
return plugin.defaultValue;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.seeyon.apps.src_organizationHandle.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.src_organizationHandle.constants.OrganizationHandleConstants;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.utils.http.HttpClient;
|
||||
import www.seeyon.com.utils.StringUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class DepartmentHandleService {
|
||||
|
||||
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
|
||||
|
||||
public JSONArray findDepartmentByAccountId(long accountId, String token) {
|
||||
ConfigVo config = cstConfigApi.getConfig(OrganizationHandleConstants.getPluginId());
|
||||
String oaHost = config.getParamVal(OrganizationHandleConstants.oaHost.name());
|
||||
String orgDepartmentsUrl = config.getParamVal(OrganizationHandleConstants.orgDepartmentsUrl.name())
|
||||
.replace("{accountId}", String.valueOf(accountId));
|
||||
try {
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
headers.put("token", token);
|
||||
String getDepartmentsOaResp = HttpClient.httpGet(oaHost + "/seeyon/rest" + orgDepartmentsUrl, headers, null);
|
||||
|
||||
JSONObject getDepartmentsDataParam = StringUtil.isNotEmpty(getDepartmentsOaResp)
|
||||
? JSONObject.parseObject("{'param':" + getDepartmentsOaResp + "}")
|
||||
: new JSONObject();
|
||||
JSONArray getDepartmentsData = getDepartmentsDataParam.getJSONArray("param");
|
||||
if (getDepartmentsData == null) {
|
||||
return new JSONArray();
|
||||
}
|
||||
for (int i = 0; i < getDepartmentsData.size(); i++) {
|
||||
JSONObject getDepartment = getDepartmentsData.getJSONObject(i);
|
||||
if (getDepartment == null || getDepartment.get("id") == null) {
|
||||
continue;
|
||||
}
|
||||
String departmentmanagerUrl = config.getParamVal(OrganizationHandleConstants.departmentmanagerUrl.name());
|
||||
String departmentid = getDepartment.getString("id");
|
||||
departmentmanagerUrl = departmentmanagerUrl
|
||||
.replace("{accountid}", String.valueOf(accountId))
|
||||
.replace("{departmentid}", departmentid);
|
||||
String getDepartmentmanagerOaResp = HttpClient.httpGet(oaHost + "/seeyon/rest" + departmentmanagerUrl, headers, null);
|
||||
JSONObject getDepartmentmanagerData = StringUtil.isNotEmpty(getDepartmentmanagerOaResp)
|
||||
? JSONObject.parseObject(getDepartmentmanagerOaResp)
|
||||
: new JSONObject();
|
||||
|
||||
getDepartment.put("deptrole0", parseDeptroleValue(getDepartmentmanagerData, "deptrole0"));
|
||||
getDepartment.put("deptrole1", parseDeptroleValue(getDepartmentmanagerData, "deptrole1"));
|
||||
getDepartment.put("deptrole2", parseDeptroleValue(getDepartmentmanagerData, "deptrole2"));
|
||||
getDepartment.put("deptrole3", parseDeptroleValue(getDepartmentmanagerData, "deptrole3"));
|
||||
getDepartment.put("deptrole4", parseDeptroleValue(getDepartmentmanagerData, "deptrole4"));
|
||||
getDepartment.put("deptrole5", parseDeptroleValue(getDepartmentmanagerData, "deptrole5"));
|
||||
}
|
||||
return getDepartmentsData;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private String parseDeptroleValue(JSONObject data, String key) {
|
||||
if (data == null) {
|
||||
return "";
|
||||
}
|
||||
JSONObject deptroleObj = data.getJSONObject(key);
|
||||
if (deptroleObj == null) {
|
||||
return "";
|
||||
}
|
||||
return deptroleHandle(deptroleObj.getString("value"));
|
||||
}
|
||||
|
||||
private String deptroleHandle(String deptrole) {
|
||||
if (StringUtil.isEmpty(deptrole)) {
|
||||
return "";
|
||||
}
|
||||
String[] deptroles = deptrole.split(",");
|
||||
List<String> idList = new ArrayList<>();
|
||||
for (String deptroleData : deptroles) {
|
||||
String[] fields = deptroleData.split("\\|");
|
||||
if (fields.length >= 2) {
|
||||
idList.add(fields[1]);
|
||||
}
|
||||
}
|
||||
return String.join(",", idList);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package com.seeyon.apps.src_organizationHandle.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.common.config.ICstConfigApi;
|
||||
import com.seeyon.apps.common.plugin.vo.ConfigVo;
|
||||
import com.seeyon.apps.src_organizationHandle.constants.OrganizationHandleConstants;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.ctp.util.annotation.Inject;
|
||||
import com.seeyon.utils.form.FormColumn;
|
||||
import com.seeyon.utils.form.FormTableExecutor;
|
||||
import com.seeyon.utils.form.FormWhereCondition;
|
||||
import com.seeyon.utils.form.TableContext;
|
||||
import com.seeyon.utils.http.HttpClient;
|
||||
import www.seeyon.com.utils.StringUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class MemberHandleService {
|
||||
|
||||
@Inject
|
||||
private OrgManager orgManager;
|
||||
|
||||
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
|
||||
|
||||
public JSONArray findMemberByAccountId(long accountId, String token) {
|
||||
ConfigVo config = cstConfigApi.getConfig(OrganizationHandleConstants.getPluginId());
|
||||
String oaHost = config.getParamVal(OrganizationHandleConstants.oaHost.name());
|
||||
String memberFormCode = config.getParamVal(OrganizationHandleConstants.memberFormCode.name());
|
||||
String orgMembersUrl = config.getParamVal(OrganizationHandleConstants.orgMembersUrl.name())
|
||||
.replace("{accountId}", String.valueOf(accountId));
|
||||
try {
|
||||
TableContext tableContext = FormTableExecutor.master(memberFormCode);
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
headers.put("token", token);
|
||||
String getMembersOaResp = HttpClient.httpGet(oaHost + "/seeyon/rest" + orgMembersUrl, headers, null);
|
||||
|
||||
JSONObject getMembersDataParam = StringUtil.isNotEmpty(getMembersOaResp)
|
||||
? JSONObject.parseObject("{'param':" + getMembersOaResp + "}")
|
||||
: new JSONObject();
|
||||
JSONArray getMembersData = getMembersDataParam.getJSONArray("param");
|
||||
if (getMembersData == null) {
|
||||
return new JSONArray();
|
||||
}
|
||||
for (int i = 0; i < getMembersData.size(); i++) {
|
||||
JSONObject getMember = getMembersData.getJSONObject(i);
|
||||
if (getMember == null || getMember.get("id") == null) {
|
||||
continue;
|
||||
}
|
||||
long orgMemberId = getMember.getLong("id");
|
||||
FormWhereCondition affiliatedUnitWhere = FormWhereCondition.build().display("系统姓名").value(orgMemberId);
|
||||
FormColumn formColumn = FormTableExecutor.queryOne(tableContext, Collections.singletonList(affiliatedUnitWhere), true);
|
||||
if (formColumn != null && formColumn.getFieldsMap() != null) {
|
||||
String memberNo = (String) formColumn.getFieldsMap().get("身份证号码");
|
||||
getMember.put("memberNo", memberNo);
|
||||
}
|
||||
}
|
||||
return getMembersData;
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
package com.seeyon.ctp.rest.resources;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.seeyon.apps.addressbook.manager.AddressBookCustomerFieldInfoManager;
|
||||
import com.seeyon.apps.addressbook.po.AddressBook;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager;
|
||||
import com.seeyon.ctp.common.exceptions.BusinessException;
|
||||
import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgDepartment;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import www.seeyon.com.utils.StringUtil;
|
||||
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.text.SimpleDateFormat;
|
||||
|
||||
@Path("/addressBook/department")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
public class AddressBookDepartmentResource extends BaseResource{
|
||||
|
||||
private OrgManager orgManager;
|
||||
public OrgManager getOrgManager() {
|
||||
if (orgManager == null) {
|
||||
orgManager = (OrgManager) AppContext.getBean("orgManager");
|
||||
}
|
||||
return orgManager;
|
||||
}
|
||||
private AddressBookCustomerFieldInfoManager addressBookCustomerFieldInfoManager;
|
||||
private AddressBookCustomerFieldInfoManager getAddressBookCustomerFieldInfoManager() {
|
||||
if(null == addressBookCustomerFieldInfoManager) {
|
||||
addressBookCustomerFieldInfoManager = (AddressBookCustomerFieldInfoManager) AppContext.getBean("addressBookCustomerFieldInfoManager");
|
||||
}
|
||||
return addressBookCustomerFieldInfoManager;
|
||||
}
|
||||
private EnumManager enumManagerNew;
|
||||
public EnumManager getEnumManagerNew() {
|
||||
if (enumManagerNew == null) {
|
||||
enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");
|
||||
}
|
||||
return enumManagerNew;
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("{departmentId}")
|
||||
@Produces({"application/json"})
|
||||
@Consumes({"application/json"})
|
||||
public Response findDepartmentAddressBookById(@PathParam("departmentId") String departmentId){
|
||||
if (departmentId == null || departmentId.trim().isEmpty()) {
|
||||
return fail(departmentId+"传入参数不为ID类型字段");
|
||||
}
|
||||
try {
|
||||
Long.parseLong(departmentId.trim());
|
||||
} catch (NumberFormatException e) {
|
||||
return fail(departmentId+"传入参数不为ID类型字段");
|
||||
}
|
||||
try {
|
||||
// 查询当前部门是否非停用部门
|
||||
V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(Long.parseLong(departmentId));
|
||||
if(v3xOrgDepartment!=null){
|
||||
// 查询部门不为空,执行getAddressBookCustomerFieldInfoManager()查询主数据
|
||||
AddressBook addressBook =getAddressBookCustomerFieldInfoManager().getByMemberId(v3xOrgDepartment.getId());
|
||||
JSONObject jsonObject = appleAddressBook(addressBook);
|
||||
return success(jsonObject ,"成功");
|
||||
}
|
||||
} catch (BusinessException e) {
|
||||
e.printStackTrace();
|
||||
return fail("执行异常"+e);
|
||||
}
|
||||
return fail(departmentId+"未查询到主数据信息请检查参数是否正确。");
|
||||
}
|
||||
|
||||
private JSONObject appleAddressBook(AddressBook addressBook) throws BusinessException {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
if(StringUtil.isNotEmpty(addressBook.getExtAttr1())){
|
||||
jsonObject.put("extAttr1",addressBook.getExtAttr1());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr2())){
|
||||
jsonObject.put("extAttr2",addressBook.getExtAttr2());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr3())){
|
||||
jsonObject.put("extAttr3",addressBook.getExtAttr3());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr4())){
|
||||
jsonObject.put("extAttr4",addressBook.getExtAttr4());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr5())){
|
||||
jsonObject.put("extAttr5",addressBook.getExtAttr5());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr6())){
|
||||
jsonObject.put("extAttr6",addressBook.getExtAttr6());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr7())){
|
||||
jsonObject.put("extAttr7",addressBook.getExtAttr7());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr8())){
|
||||
jsonObject.put("extAttr8",addressBook.getExtAttr8());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr9())){
|
||||
jsonObject.put("extAttr9",addressBook.getExtAttr9());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr10())){
|
||||
jsonObject.put("extAttr10",addressBook.getExtAttr10());
|
||||
}if( addressBook.getExtAttr11()!=null){
|
||||
jsonObject.put("extAttr11",addressBook.getExtAttr11());
|
||||
}if( addressBook.getExtAttr12()!=null){
|
||||
jsonObject.put("extAttr12",addressBook.getExtAttr12());
|
||||
}if(addressBook.getExtAttr13()!=null){
|
||||
jsonObject.put("extAttr13",addressBook.getExtAttr13());
|
||||
}if(addressBook.getExtAttr14()!=null){
|
||||
jsonObject.put("extAttr14",addressBook.getExtAttr14());
|
||||
}if(addressBook.getExtAttr15()!=null){
|
||||
jsonObject.put("extAttr15",addressBook.getExtAttr15());
|
||||
}if(addressBook.getExtAttr16()!=null){
|
||||
jsonObject.put("extAttr16",addressBook.getExtAttr16());
|
||||
}if(addressBook.getExtAttr17()!=null){
|
||||
jsonObject.put("extAttr17",addressBook.getExtAttr17());
|
||||
}if(addressBook.getExtAttr18()!=null){
|
||||
jsonObject.put("extAttr18",addressBook.getExtAttr18());
|
||||
}if(addressBook.getExtAttr19()!=null){
|
||||
jsonObject.put("extAttr19",addressBook.getExtAttr19());
|
||||
}if(addressBook.getExtAttr20()!=null){
|
||||
jsonObject.put("extAttr20",addressBook.getExtAttr20());
|
||||
}if(addressBook.getExtAttr21()!=null){
|
||||
jsonObject.put("extAttr21",sdf.format(addressBook.getExtAttr21()));
|
||||
}if(addressBook.getExtAttr22()!=null){
|
||||
jsonObject.put("extAttr22",sdf.format(addressBook.getExtAttr22()));
|
||||
}if(addressBook.getExtAttr23()!=null){
|
||||
jsonObject.put("extAttr23",sdf.format(addressBook.getExtAttr23()));
|
||||
}if(addressBook.getExtAttr24()!=null){
|
||||
jsonObject.put("extAttr24",sdf.format(addressBook.getExtAttr24()));
|
||||
}if(addressBook.getExtAttr25()!=null){
|
||||
jsonObject.put("extAttr25",sdf.format(addressBook.getExtAttr25()));
|
||||
}if(addressBook.getExtAttr26()!=null){
|
||||
jsonObject.put("extAttr26",sdf.format(addressBook.getExtAttr26()));
|
||||
}if(addressBook.getExtAttr27()!=null){
|
||||
jsonObject.put("extAttr27",sdf.format(addressBook.getExtAttr27()));
|
||||
}if(addressBook.getExtAttr28()!=null){
|
||||
jsonObject.put("extAttr28",sdf.format(addressBook.getExtAttr28()));
|
||||
}if(addressBook.getExtAttr29()!=null){
|
||||
jsonObject.put("extAttr29",sdf.format(addressBook.getExtAttr29()));
|
||||
}if(addressBook.getExtAttr30()!=null){
|
||||
jsonObject.put("extAttr30",sdf.format(addressBook.getExtAttr30()));
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr31())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr31()));
|
||||
jsonObject.put("extAttr31",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr32())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr32()));
|
||||
jsonObject.put("extAttr32",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr33())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr33()));
|
||||
jsonObject.put("extAttr33",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr34())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr34()));
|
||||
jsonObject.put("extAttr34",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr35())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr35()));
|
||||
jsonObject.put("extAttr35",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr36())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr36()));
|
||||
jsonObject.put("extAttr36",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr37())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr37()));
|
||||
jsonObject.put("extAttr37",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr38())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr38()));
|
||||
jsonObject.put("extAttr38",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr39())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr39()));
|
||||
jsonObject.put("extAttr39",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr40())){
|
||||
CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr40()));
|
||||
jsonObject.put("extAttr40",ctpEnumItem.getShowvalue());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr41())){
|
||||
jsonObject.put("extAttr41",addressBook.getExtAttr41());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr42())){
|
||||
jsonObject.put("extAttr42",addressBook.getExtAttr42());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr43())){
|
||||
jsonObject.put("extAttr43",addressBook.getExtAttr43());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr44())){
|
||||
jsonObject.put("extAttr44",addressBook.getExtAttr44());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr45())){
|
||||
jsonObject.put("extAttr45",addressBook.getExtAttr45());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr46())){
|
||||
jsonObject.put("extAttr46",addressBook.getExtAttr46());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr47())){
|
||||
jsonObject.put("extAttr47",addressBook.getExtAttr47());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr48())){
|
||||
jsonObject.put("extAttr48",addressBook.getExtAttr48());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr49())){
|
||||
jsonObject.put("extAttr49",addressBook.getExtAttr49());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr50())){
|
||||
jsonObject.put("extAttr50",addressBook.getExtAttr50());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr51())){
|
||||
jsonObject.put("extAttr51",addressBook.getExtAttr51());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr52())){
|
||||
jsonObject.put("extAttr52",addressBook.getExtAttr52());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr53())){
|
||||
jsonObject.put("extAttr53",addressBook.getExtAttr53());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr54())){
|
||||
jsonObject.put("extAttr54",addressBook.getExtAttr54());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr55())){
|
||||
jsonObject.put("extAttr55",addressBook.getExtAttr55());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr56())){
|
||||
jsonObject.put("extAttr56",addressBook.getExtAttr56());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr57())){
|
||||
jsonObject.put("extAttr57",addressBook.getExtAttr57());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr58())){
|
||||
jsonObject.put("extAttr58",addressBook.getExtAttr58());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr59())){
|
||||
jsonObject.put("extAttr59",addressBook.getExtAttr59());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr60())){
|
||||
jsonObject.put("extAttr60",addressBook.getExtAttr60());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr61())){
|
||||
jsonObject.put("extAttr61",addressBook.getExtAttr61());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr62())){
|
||||
jsonObject.put("extAttr62",addressBook.getExtAttr62());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr63())){
|
||||
jsonObject.put("extAttr63",addressBook.getExtAttr63());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr64())){
|
||||
jsonObject.put("extAttr64",addressBook.getExtAttr64());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr65())){
|
||||
jsonObject.put("extAttr65",addressBook.getExtAttr65());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr66())){
|
||||
jsonObject.put("extAttr66",addressBook.getExtAttr66());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr67())){
|
||||
jsonObject.put("extAttr67",addressBook.getExtAttr67());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr68())){
|
||||
jsonObject.put("extAttr68",addressBook.getExtAttr68());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr69())){
|
||||
jsonObject.put("extAttr69",addressBook.getExtAttr69());
|
||||
}if(StringUtil.isNotEmpty(addressBook.getExtAttr70())){
|
||||
jsonObject.put("extAttr70",addressBook.getExtAttr70());
|
||||
}
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
package com.seeyon.ctp.rest.resources;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.seeyon.apps.src_organizationHandle.service.DepartmentHandleService;
|
||||
import com.seeyon.apps.src_organizationHandle.service.MemberHandleService;
|
||||
import com.seeyon.ctp.common.AppContext;
|
||||
import com.seeyon.ctp.common.exceptions.BusinessException;
|
||||
import com.seeyon.ctp.organization.bo.V3xOrgAccount;
|
||||
import com.seeyon.ctp.organization.manager.OrgManager;
|
||||
import com.seeyon.utils.http.OaRestClient;
|
||||
import www.seeyon.com.utils.StringUtil;
|
||||
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.HttpHeaders;
|
||||
import javax.ws.rs.core.Response;
|
||||
|
||||
@Path("/organization")
|
||||
@Produces({"application/json", "application/xml"})
|
||||
public class OrganizationHandleResource extends BaseResource{
|
||||
|
||||
private OrgManager orgManager;
|
||||
public OrgManager getOrgManager() {
|
||||
if (orgManager == null) {
|
||||
orgManager = (OrgManager) AppContext.getBean("orgManager");
|
||||
}
|
||||
return orgManager;
|
||||
}
|
||||
MemberHandleService memberHandleService;
|
||||
public MemberHandleService getMemberHandleService() {
|
||||
if (memberHandleService == null) {
|
||||
memberHandleService = (MemberHandleService) AppContext.getBean("memberHandleService");
|
||||
}
|
||||
return memberHandleService;
|
||||
}
|
||||
|
||||
DepartmentHandleService departmentHandleService;
|
||||
public DepartmentHandleService getDepartmentHandleService() {
|
||||
if (departmentHandleService == null) {
|
||||
departmentHandleService = (DepartmentHandleService) AppContext.getBean("departmentHandleService");
|
||||
}
|
||||
return departmentHandleService;
|
||||
}
|
||||
|
||||
|
||||
//根据单位ID查询单位下所有人员。
|
||||
@GET
|
||||
@Path("findMembers/{accountId}")
|
||||
@Produces({"application/json"})
|
||||
@Consumes({"application/json"})
|
||||
public Response findMembersByAccountId(@PathParam("accountId") String accountId, @QueryParam("token") String urlToken, @Context HttpHeaders headers) {
|
||||
if (accountId == null || accountId.trim().isEmpty()) {
|
||||
return fail("传入参数不为ID类型字段");
|
||||
}
|
||||
try {
|
||||
Long.parseLong(accountId.trim());
|
||||
} catch (NumberFormatException e) {
|
||||
return fail(accountId + "传入参数不为ID类型字段");
|
||||
}
|
||||
try {
|
||||
String token = StringUtil.isNotEmpty(urlToken) ? urlToken : headers.getHeaderString("token");
|
||||
V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(Long.parseLong(accountId.trim()));
|
||||
if (v3xOrgAccount != null) {
|
||||
JSONArray res = getMemberHandleService().findMemberByAccountId(v3xOrgAccount.getId(), token);
|
||||
return success(res, "查询成功");
|
||||
} else {
|
||||
return fail(accountId + "单位ID不存在,请检查参数");
|
||||
}
|
||||
} catch (BusinessException e) {
|
||||
e.printStackTrace();
|
||||
return fail("执行异常" + e);
|
||||
}
|
||||
}
|
||||
|
||||
//根据单位ID查询单位下所有部门。
|
||||
@GET
|
||||
@Path("findDepartments/{accountId}")
|
||||
@Produces({"application/json"})
|
||||
@Consumes({"application/json"})
|
||||
public Response findDepartmentsByAccountId(@PathParam("accountId") String accountId, @QueryParam("token") String urlToken, @Context HttpHeaders headers) {
|
||||
if (accountId == null || accountId.trim().isEmpty()) {
|
||||
return fail("传入参数不为ID类型字段");
|
||||
}
|
||||
try {
|
||||
Long.parseLong(accountId.trim());
|
||||
} catch (NumberFormatException e) {
|
||||
return fail(accountId + "传入参数不为ID类型字段");
|
||||
}
|
||||
try {
|
||||
String token = StringUtil.isNotEmpty(urlToken) ? urlToken : headers.getHeaderString("token");
|
||||
V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(Long.parseLong(accountId.trim()));
|
||||
if (v3xOrgAccount != null) {
|
||||
JSONArray res = getDepartmentHandleService().findDepartmentByAccountId(v3xOrgAccount.getId(), token);
|
||||
return success(res, "查询成功");
|
||||
} else {
|
||||
return fail(accountId + "单位ID不存在,请检查参数");
|
||||
}
|
||||
} catch (BusinessException e) {
|
||||
e.printStackTrace();
|
||||
return fail("执行异常" + e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user