From b797a8eaa6e6afdcb35bd021f35fad59007b1e95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E6=AD=A3=E5=9B=BD?= <438926402@qq.com>
Date: Thu, 18 Jun 2026 10:02:40 +0800
Subject: [PATCH] =?UTF-8?q?2026-06-18=20=E4=BA=8C=E7=BB=B4=E7=A0=81?=
=?UTF-8?q?=E6=89=AB=E7=A0=81=E3=80=81=E4=BC=9A=E8=AE=AE=E5=AE=A4=E5=AF=BC?=
=?UTF-8?q?=E8=88=AA=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95=E3=80=81=E7=BB=84?=
=?UTF-8?q?=E7=BB=87=E6=9E=B6=E6=9E=84=E6=8E=A5=E5=8F=A3=E5=B0=81=E8=A3=85?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=8A=E4=BC=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp | 249 ++++++++++++++++++
WEB-INF/qrCodeForm/pluginCfg.xml | 6 +
.../spring/spring-qrCodeForm-controller.xml | 6 +
.../spring/spring-qrCodeForm-manager.xml | 13 +
.../spring/spring-qrCodeForm-plugin.xml | 8 +
WEB-INF/src_meetingroom/pluginCfg.xml | 6 +
.../spring/spring-neusoft-sso.xml | 17 ++
WEB-INF/src_organizationHandle/pluginCfg.xml | 6 +
.../spring/spring-service.xml | 8 +
.../cap4/form/utils/qrcodeform/index.js | 13 +
.../cap4/form/utils/qrcodeform/index.js | 11 +
.../apps/qrCodeForm/QrCodeFormPluginApi.java | 45 ++++
.../QrCodeFormPluginInitializer.java | 21 ++
.../apps/qrCodeForm/constant/Constants.java | 13 +
.../constant/QrCodeFormConstants.java | 33 +++
.../qrCodeForm/constant/SupportTypeEnum.java | 31 +++
.../controller/QrCodeFormController.java | 172 ++++++++++++
.../seeyon/apps/qrCodeForm/dao/AffairDAO.java | 59 +++++
.../apps/qrCodeForm/dao/AffairLogDAO.java | 130 +++++++++
.../apps/qrCodeForm/dao/DefinitionDAO.java | 34 +++
.../apps/qrCodeForm/dao/MembersDAO.java | 33 +++
.../qrCodeForm/manager/QrCodeFormManager.java | 18 ++
.../manager/QrCodeFormManagerImpl.java | 154 +++++++++++
.../qrCodeForm/sso/WechatQRHandShake.java | 139 ++++++++++
.../qrCodeForm/util/InitQrCodeFormUitl.java | 111 ++++++++
.../apps/qrCodeForm/util/LoginUtil.java | 70 +++++
.../src_meetingroom/MeetingRoomPluginApi.java | 44 ++++
.../constants/MeetingRoomConstants.java | 29 ++
.../sso/MeetingRoomInterfaceSSO.java | 58 ++++
.../sso/MeetingRoomLoginSSO.java | 68 +++++
.../apps/src_meetingroom/util/AESUtil.java | 135 ++++++++++
.../OrganizationHandleConstants.java | 35 +++
.../service/DepartmentHandleService.java | 92 +++++++
.../service/MemberHandleService.java | 67 +++++
.../AddressBookDepartmentResource.java | 230 ++++++++++++++++
.../resources/OrganizationHandleResource.java | 105 ++++++++
36 files changed, 2269 insertions(+)
create mode 100644 WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp
create mode 100644 WEB-INF/qrCodeForm/pluginCfg.xml
create mode 100644 WEB-INF/qrCodeForm/spring/spring-qrCodeForm-controller.xml
create mode 100644 WEB-INF/qrCodeForm/spring/spring-qrCodeForm-manager.xml
create mode 100644 WEB-INF/qrCodeForm/spring/spring-qrCodeForm-plugin.xml
create mode 100644 WEB-INF/src_meetingroom/pluginCfg.xml
create mode 100644 WEB-INF/src_meetingroom/spring/spring-neusoft-sso.xml
create mode 100644 WEB-INF/src_organizationHandle/pluginCfg.xml
create mode 100644 WEB-INF/src_organizationHandle/spring/spring-service.xml
create mode 100644 common/capextend/cap4/form/utils/qrcodeform/index.js
create mode 100644 m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairDAO.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairLogDAO.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/dao/DefinitionDAO.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/dao/MembersDAO.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java
create mode 100644 src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java
create mode 100644 src/main/java/com/seeyon/apps/src_meetingroom/MeetingRoomPluginApi.java
create mode 100644 src/main/java/com/seeyon/apps/src_meetingroom/constants/MeetingRoomConstants.java
create mode 100644 src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomInterfaceSSO.java
create mode 100644 src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomLoginSSO.java
create mode 100644 src/main/java/com/seeyon/apps/src_meetingroom/util/AESUtil.java
create mode 100644 src/main/java/com/seeyon/apps/src_organizationHandle/constants/OrganizationHandleConstants.java
create mode 100644 src/main/java/com/seeyon/apps/src_organizationHandle/service/DepartmentHandleService.java
create mode 100644 src/main/java/com/seeyon/apps/src_organizationHandle/service/MemberHandleService.java
create mode 100644 src/main/java/com/seeyon/ctp/rest/resources/AddressBookDepartmentResource.java
create mode 100644 src/main/java/com/seeyon/ctp/rest/resources/OrganizationHandleResource.java
diff --git a/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp b/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp
new file mode 100644
index 0000000..0f620b0
--- /dev/null
+++ b/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp
@@ -0,0 +1,249 @@
+<%@ page contentType="text/html; charset=UTF-8" isELIgnored="false" %>
+<%@ page language="java" import=" com.seeyon.apps.m3.skin.enums.M3StartPageCustomEnum" %>
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/WEB-INF/qrCodeForm/pluginCfg.xml b/WEB-INF/qrCodeForm/pluginCfg.xml
new file mode 100644
index 0000000..d50ce8a
--- /dev/null
+++ b/WEB-INF/qrCodeForm/pluginCfg.xml
@@ -0,0 +1,6 @@
+
+
+ qrCodeForm
+ 二维码扫码填单
+ 20240201
+
diff --git a/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-controller.xml b/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-controller.xml
new file mode 100644
index 0000000..93d89e1
--- /dev/null
+++ b/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-controller.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-manager.xml b/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-manager.xml
new file mode 100644
index 0000000..7d6233b
--- /dev/null
+++ b/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-manager.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-plugin.xml b/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-plugin.xml
new file mode 100644
index 0000000..de1e69f
--- /dev/null
+++ b/WEB-INF/qrCodeForm/spring/spring-qrCodeForm-plugin.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/WEB-INF/src_meetingroom/pluginCfg.xml b/WEB-INF/src_meetingroom/pluginCfg.xml
new file mode 100644
index 0000000..509f20a
--- /dev/null
+++ b/WEB-INF/src_meetingroom/pluginCfg.xml
@@ -0,0 +1,6 @@
+
+
+ src_meetingroom
+ 会议室登录
+ 20251126
+
\ No newline at end of file
diff --git a/WEB-INF/src_meetingroom/spring/spring-neusoft-sso.xml b/WEB-INF/src_meetingroom/spring/spring-neusoft-sso.xml
new file mode 100644
index 0000000..3084ade
--- /dev/null
+++ b/WEB-INF/src_meetingroom/spring/spring-neusoft-sso.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/WEB-INF/src_organizationHandle/pluginCfg.xml b/WEB-INF/src_organizationHandle/pluginCfg.xml
new file mode 100644
index 0000000..e2f437d
--- /dev/null
+++ b/WEB-INF/src_organizationHandle/pluginCfg.xml
@@ -0,0 +1,6 @@
+
+
+ src_organizationHandle
+ 组织架构查询接口
+ 20260605
+
\ No newline at end of file
diff --git a/WEB-INF/src_organizationHandle/spring/spring-service.xml b/WEB-INF/src_organizationHandle/spring/spring-service.xml
new file mode 100644
index 0000000..8f6bc09
--- /dev/null
+++ b/WEB-INF/src_organizationHandle/spring/spring-service.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/common/capextend/cap4/form/utils/qrcodeform/index.js b/common/capextend/cap4/form/utils/qrcodeform/index.js
new file mode 100644
index 0000000..ec27f89
--- /dev/null
+++ b/common/capextend/cap4/form/utils/qrcodeform/index.js
@@ -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) {
+
+ }
+
+});
diff --git a/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js b/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js
new file mode 100644
index 0000000..bc09362
--- /dev/null
+++ b/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js
@@ -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) {
+
+ }
+});
\ No newline at end of file
diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java b/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java
new file mode 100644
index 0000000..4d9c903
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java
@@ -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;
+
+/**
+ * 功能描述:
+ *
+ *
+ *
+ *
+ * @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;
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java b/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java
new file mode 100644
index 0000000..6e85a18
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java
@@ -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("◆二维码扫码填单插件初始化成功!");
+ }
+}
diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java b/src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java
new file mode 100644
index 0000000..53852b8
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java
@@ -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?";
+
+
+}
diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java b/src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java
new file mode 100644
index 0000000..3069e13
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java
@@ -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;
+ }
+
+}
diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java b/src/main/java/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java
new file mode 100644
index 0000000..6051998
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java
@@ -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);
+ }
+
+}
diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java b/src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java
new file mode 100644
index 0000000..46299b2
--- /dev/null
+++ b/src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java
@@ -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
();
+ map.put("bizType", "1");
+ map.put("type", "owner-authed-biz");
+ map.put("businessType", 0);
+ map.put("activeTab", "mineapp");
+ List