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" %> + + + + + <%@ include file="/WEB-INF/jsp/common/common.jsp" %> + 模板二维码生成 + + + + + +
+ + + + + + + + \ 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> 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()); + } + } + + + +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairDAO.java b/src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairDAO.java new file mode 100644 index 0000000..2337edd --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairDAO.java @@ -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> getAffairs(Long menberId) { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("select * from ctp_affair where STATE = 3 and member_id = ?"); + List p = new ArrayList(); + p.add(menberId); + agent.execute(sql.toString(), p); + List 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> getAffairsById(Long affairId) { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("select * from ctp_affair where id = ?"); + List p = new ArrayList(); + p.add(affairId); + agent.execute(sql.toString(), p); + List 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; + } +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairLogDAO.java b/src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairLogDAO.java new file mode 100644 index 0000000..16651f4 --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/dao/AffairLogDAO.java @@ -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> setAffairs(Map affair) { + List> lists = new ArrayList>(); + 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 p = new ArrayList(); + 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 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> getAffairs() { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("select * from affair_state where state = 0"); + agent.execute(sql.toString()); + List 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> getAffairById(Long id) { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("select * from affair_state where id = ?"); + List p = new ArrayList(); + p.add(id); + agent.execute(sql.toString(), p); + List 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> updateAffair(Long id, Integer state) { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("UPDATE affair_state set state = ? where id = ?"); + List p = new ArrayList(); + p.add(state); + p.add(id); + agent.execute(sql.toString(), p); + List 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; + } +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/dao/DefinitionDAO.java b/src/main/java/com/seeyon/apps/qrCodeForm/dao/DefinitionDAO.java new file mode 100644 index 0000000..5be85c0 --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/dao/DefinitionDAO.java @@ -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> getDefinition(Long menberId) { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("select * from cap_form_definition where id = ?"); + List p = new ArrayList(); + p.add(menberId); + agent.execute(sql.toString(), p); + List 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; + } +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/dao/MembersDAO.java b/src/main/java/com/seeyon/apps/qrCodeForm/dao/MembersDAO.java new file mode 100644 index 0000000..648ea02 --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/dao/MembersDAO.java @@ -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> getMembers() { + List> lists = new ArrayList>(); + JDBCAgent agent = new JDBCAgent(); + //测formmain_3592 本formmain_0070 正formmain_3600 + try { + StringBuilder sql = new StringBuilder("select * from formmain_3600"); + agent.execute(sql.toString()); + List 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; + } +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java b/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java new file mode 100644 index 0000000..06f5211 --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java @@ -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> listBusiness(Map params); + + @AjaxAccess + List listFormApp(Map params); + + Map qrCodeFormUrl(Map params) throws UnsupportedEncodingException; +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java b/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java new file mode 100644 index 0000000..943ea6a --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java @@ -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> listBusiness(Map params) { + List> listMap = new ArrayList>(); + try { + FlipInfo fi = new FlipInfo(1, -1); + Map 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 listFormApp(Map params) { + List 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 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 qrCodeFormUrl(Map params) throws UnsupportedEncodingException { + Map 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; + } + +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java b/src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java new file mode 100644 index 0000000..66880de --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java @@ -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 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"); + } +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java b/src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java new file mode 100644 index 0000000..342f561 --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java @@ -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 listmenu = new ArrayList(); + + 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 menus = new ArrayList(); + 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); + } + } + +} diff --git a/src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java b/src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java new file mode 100644 index 0000000..e2d1de1 --- /dev/null +++ b/src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java @@ -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 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 map = new HashMap(); + 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; + } + +} diff --git a/src/main/java/com/seeyon/apps/src_meetingroom/MeetingRoomPluginApi.java b/src/main/java/com/seeyon/apps/src_meetingroom/MeetingRoomPluginApi.java new file mode 100644 index 0000000..08a2932 --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_meetingroom/MeetingRoomPluginApi.java @@ -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; + +/** + * 功能描述:
+ *
+ *
+ * 
+ * + * @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; + } +} diff --git a/src/main/java/com/seeyon/apps/src_meetingroom/constants/MeetingRoomConstants.java b/src/main/java/com/seeyon/apps/src_meetingroom/constants/MeetingRoomConstants.java new file mode 100644 index 0000000..00c70d5 --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_meetingroom/constants/MeetingRoomConstants.java @@ -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; + } + +} diff --git a/src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomInterfaceSSO.java b/src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomInterfaceSSO.java new file mode 100644 index 0000000..5120f81 --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomInterfaceSSO.java @@ -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; + } + +} diff --git a/src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomLoginSSO.java b/src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomLoginSSO.java new file mode 100644 index 0000000..4a658a8 --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_meetingroom/sso/MeetingRoomLoginSSO.java @@ -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); + } +} diff --git a/src/main/java/com/seeyon/apps/src_meetingroom/util/AESUtil.java b/src/main/java/com/seeyon/apps/src_meetingroom/util/AESUtil.java new file mode 100644 index 0000000..195883b --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_meetingroom/util/AESUtil.java @@ -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(); + } + } +} diff --git a/src/main/java/com/seeyon/apps/src_organizationHandle/constants/OrganizationHandleConstants.java b/src/main/java/com/seeyon/apps/src_organizationHandle/constants/OrganizationHandleConstants.java new file mode 100644 index 0000000..b298ba4 --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_organizationHandle/constants/OrganizationHandleConstants.java @@ -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; + } + +} diff --git a/src/main/java/com/seeyon/apps/src_organizationHandle/service/DepartmentHandleService.java b/src/main/java/com/seeyon/apps/src_organizationHandle/service/DepartmentHandleService.java new file mode 100644 index 0000000..9af65ee --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_organizationHandle/service/DepartmentHandleService.java @@ -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 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 idList = new ArrayList<>(); + for (String deptroleData : deptroles) { + String[] fields = deptroleData.split("\\|"); + if (fields.length >= 2) { + idList.add(fields[1]); + } + } + return String.join(",", idList); + } + +} diff --git a/src/main/java/com/seeyon/apps/src_organizationHandle/service/MemberHandleService.java b/src/main/java/com/seeyon/apps/src_organizationHandle/service/MemberHandleService.java new file mode 100644 index 0000000..871a96d --- /dev/null +++ b/src/main/java/com/seeyon/apps/src_organizationHandle/service/MemberHandleService.java @@ -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 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); + } + } + +} diff --git a/src/main/java/com/seeyon/ctp/rest/resources/AddressBookDepartmentResource.java b/src/main/java/com/seeyon/ctp/rest/resources/AddressBookDepartmentResource.java new file mode 100644 index 0000000..d68526e --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/AddressBookDepartmentResource.java @@ -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; + } + +} diff --git a/src/main/java/com/seeyon/ctp/rest/resources/OrganizationHandleResource.java b/src/main/java/com/seeyon/ctp/rest/resources/OrganizationHandleResource.java new file mode 100644 index 0000000..6fdb33c --- /dev/null +++ b/src/main/java/com/seeyon/ctp/rest/resources/OrganizationHandleResource.java @@ -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); + } + } + +}