2026-06-18 二维码扫码、会议室导航单点登录、组织架构接口封装代码初始化上传

This commit is contained in:
2026-06-18 10:02:40 +08:00
parent 78975f00b6
commit b797a8eaa6
36 changed files with 2269 additions and 0 deletions

View File

@@ -0,0 +1,45 @@
package com.seeyon.apps.qrCodeForm;
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
/**
* 功能描述:<br>
* <pre>
*
* </pre>
*
* @Author: FanGaowei
* @Date: 2022/8/11
*/
public class QrCodeFormPluginApi extends APluginInfoApi {
@Override
public String getPluginId() {
return QrCodeFormConstants.getPluginId();
}
@Override
public String getCreateUser() {
return "橙阳科技";
}
@Override
public String getDescription() {
return "微信扫码制单";
}
@Override
public ConfigVo getDefaultConfig() {
ConfigVo configVo = new ConfigVo();
for (QrCodeFormConstants value : QrCodeFormConstants.values()) {
if(value != QrCodeFormConstants.plugin) {
configVo.getDevParams().put(value.name(), value.getDefaultValue());
configVo.getProdParams().put(value.name(), value.getDefaultValue());
configVo.getParamMap().put(value.name(), value.getDescription());
}
}
return configVo;
}
}

View File

@@ -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("◆二维码扫码填单插件初始化成功!");
}
}

View File

@@ -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?";
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,172 @@
package com.seeyon.apps.qrCodeForm.controller;
import cn.hutool.log.Log;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
import com.seeyon.apps.qrCodeForm.manager.QrCodeFormManager;
import com.seeyon.apps.qrCodeForm.util.LoginUtil;
import com.seeyon.apps.weixin.util.SecurityCertUtil;
import com.seeyon.apps.weixin.util.WeixinUtil;
import com.seeyon.ctp.common.SystemEnvironment;
import com.seeyon.ctp.common.constants.ProductEditionEnum;
import com.seeyon.ctp.common.controller.BaseController;
import com.seeyon.ctp.common.flag.SysFlag;
import com.seeyon.ctp.organization.bo.V3xOrgMember;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.util.Strings;
import com.seeyon.ctp.util.annotation.Inject;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class QrCodeFormController extends BaseController {
private static Log log = Log.get(QrCodeFormController.class);
@Inject
private QrCodeFormManager qrCodeFormManager;
@Inject
private OrgManager orgManager;
@Inject
private ICstConfigApi cstConfigApi;
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
log.info("访问二维码生成页面!");
ModelAndView mav = new ModelAndView("plugin/qrCodeForm/qrCodeFormIndex");
Map map = new HashMap<String, Object>();
map.put("bizType", "1");
map.put("type", "owner-authed-biz");
map.put("businessType", 0);
map.put("activeTab", "mineapp");
List<Map<String, Object>> bizList = qrCodeFormManager.listBusiness(map);
mav.addObject("bizList", bizList);
return mav;
}
// http://116.207.128.39:8253//seeyon/qrCodeForm.do?method=newMain&type=1
public ModelAndView newMain(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("/wechat/collaborationContent");
String html = "";
String type = request.getParameter("type");
if(Strings.isNotBlank(type)) {
//获取集成平台中url1的连接地址/seeyon/m3/apps/v5/collaboration/html/newCollaboration.html?qc=ext&templateId=-2617827166221087111
//可以通过配置完成地址的获取
html = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), "url" + type);
}
if(Strings.isBlank(html)) {
html = URLDecoder.decode(request.getParameter("html"), "UTF-8");
}
// String loginName = qrCodeFormManager.getLoginMember(code);
/**
* 客开改动,固定登录名
*/
// String loginName = (String) FormulaUtil.getVar("qrcode_loginname");
String loginName = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.qrcode_loginname.name());
log.info("登录认证获取loginName为" + loginName);
if(Strings.isEmpty(loginName)){
// mav.addObject("msg", "未获取到人员信息!")b;
// return mav;
loginName = "熊阳";
}
V3xOrgMember member = orgManager.getMemberByLoginName(loginName);
if(member == null){
mav.addObject("msg", "人员不存在!");
return mav;
}
SecurityCertUtil.login(request, loginName);
Map map = LoginUtil.getToken(String.valueOf(member.getId()), member.getLoginName(), request, response);
String success = String.valueOf(map.get("success"));
if (success != null && "false".equals(success)) {
// String message = map.get("message").toString();
// if (message.contains("User not found")) {
// mav.addObject("msg", ResourceUtil.getString("wxt.user.binding.miss")
// + "" + ResourceUtil.getString("wxt.user.name") + wechatUser.getXtUserName() +
// "" + ResourceUtil.getString("wxt.dingding.user.id") + wechatUser.getXtUserId());
// } else {
// }
mav.addObject("msg", (String) map.get("message"));
return mav;
}
String token = (String) map.get("id");
String suffix = (String) SysFlag.mobileEditionSuffix.getFlag();
String edition = ProductEditionEnum.getCurrentProductEditionEnum().getValue();
String v5timestamp = WeixinUtil.getV5Timestamp();
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());
if (Strings.isNotBlank(html)) {
String url = address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=" + URLEncoder.encode(html, "UTF-8") + "&isAccount=&accountid=" + member.getOrgAccountId() + "&appid=";
return new ModelAndView("redirect:" + url);
} else {
return new ModelAndView("redirect:" + address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=&isAccount=&accountid=" + member.getOrgAccountId());
}
}
public ModelAndView pcMain(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("/wechat/collaborationContent");
String html = "";
String type = request.getParameter("type");
if(Strings.isNotBlank(type)) {
//获取集成平台中url1的连接地址/seeyon/m3/apps/v5/collaboration/html/newCollaboration.html?qc=ext&templateId=-2617827166221087111
//可以通过配置完成地址的获取
html = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), "url" + type);
}
if(Strings.isBlank(html)) {
html = URLDecoder.decode(request.getParameter("html"), "UTF-8");
}
// String loginName = qrCodeFormManager.getLoginMember(code);
/**
* 客开改动,固定登录名
*/
// String loginName = (String) FormulaUtil.getVar("qrcode_loginname");
String loginName = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.qrcode_loginname.name());
log.info("登录认证获取loginName为" + loginName);
if(Strings.isEmpty(loginName)){
// mav.addObject("msg", "未获取到人员信息!")b;
// return mav;
loginName = "熊阳";
}
V3xOrgMember member = orgManager.getMemberByLoginName(loginName);
if(member == null){
mav.addObject("msg", "人员不存在!");
return mav;
}
SecurityCertUtil.login(request, loginName);
Map map = LoginUtil.getToken(String.valueOf(member.getId()), member.getLoginName(), request, response);
String success = String.valueOf(map.get("success"));
if (success != null && "false".equals(success)) {
// String message = map.get("message").toString();
// if (message.contains("User not found")) {
// mav.addObject("msg", ResourceUtil.getString("wxt.user.binding.miss")
// + "" + ResourceUtil.getString("wxt.user.name") + wechatUser.getXtUserName() +
// "" + ResourceUtil.getString("wxt.dingding.user.id") + wechatUser.getXtUserId());
// } else {
// }
mav.addObject("msg", (String) map.get("message"));
return mav;
}
String token = (String) map.get("id");
String suffix = (String) SysFlag.mobileEditionSuffix.getFlag();
String edition = ProductEditionEnum.getCurrentProductEditionEnum().getValue();
String v5timestamp = WeixinUtil.getV5Timestamp();
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());
if (Strings.isNotBlank(html)) {
String url = address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=" + URLEncoder.encode(html, "UTF-8") + "&isAccount=&accountid=" + member.getOrgAccountId() + "&appid=";
return new ModelAndView("redirect:" + url);
} else {
return new ModelAndView("redirect:" + address + "" + SystemEnvironment.getContextPath() + "/H5/collaboration/index.html?token=" + token + "&edition=" + edition + "&suffix=" + suffix + "&v5timestamp=" + v5timestamp + "&loginName=" + member.getLoginName() + "&html=&isAccount=&accountid=" + member.getOrgAccountId());
}
}
}

View File

@@ -0,0 +1,59 @@
package com.seeyon.apps.qrCodeForm.dao;
import com.seeyon.ctp.util.JDBCAgent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class AffairDAO {
public List<Map<String, Object>> getAffairs(Long menberId) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("select * from ctp_affair where STATE = 3 and member_id = ?");
List<Object> p = new ArrayList<Object>();
p.add(menberId);
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
public List<Map<String, Object>> getAffairsById(Long affairId) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("select * from ctp_affair where id = ?");
List<Object> p = new ArrayList<Object>();
p.add(affairId);
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
}

View File

@@ -0,0 +1,130 @@
package com.seeyon.apps.qrCodeForm.dao;
import com.seeyon.ctp.util.JDBCAgent;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class AffairLogDAO {
public List<Map<String, Object>> setAffairs(Map affair) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("INSERT INTO affair_state (id,request_name,receiver,createdate_time,state,node_name,workflow_name,pcurl,appurl,app) VALUES (?,?,?,?,?,?,?,?,?,?)");
List<Object> p = new ArrayList<Object>();
p.add(affair.get("id"));
p.add(affair.get("requestName"));
p.add(affair.get("receiver"));
p.add(convertTimestamp2Date(affair.get("createTime")));
p.add(affair.get("state"));
p.add(affair.get("nodeName"));
p.add(affair.get("workflowName"));
p.add(affair.get("pcurl"));
p.add(affair.get("appurl"));
p.add(affair.get("app"));
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
public Date convertTimestamp2Date(Object timestamp) throws ParseException {
String time = timestamp.toString();
long l = Long.parseLong(time);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(new Date(l));
Date parse = simpleDateFormat.parse(format);
return parse;
}
public List<Map<String, Object>> getAffairs() {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("select * from affair_state where state = 0");
agent.execute(sql.toString());
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
public List<Map<String, Object>> getAffairById(Long id) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("select * from affair_state where id = ?");
List<Object> p = new ArrayList<Object>();
p.add(id);
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
public List<Map<String, Object>> updateAffair(Long id, Integer state) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("UPDATE affair_state set state = ? where id = ?");
List<Object> p = new ArrayList<Object>();
p.add(state);
p.add(id);
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
}

View File

@@ -0,0 +1,34 @@
package com.seeyon.apps.qrCodeForm.dao;
import com.seeyon.ctp.util.JDBCAgent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class DefinitionDAO {
public List<Map<String, Object>> getDefinition(Long menberId) {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
try {
StringBuilder sql = new StringBuilder("select * from cap_form_definition where id = ?");
List<Object> p = new ArrayList<Object>();
p.add(menberId);
agent.execute(sql.toString(), p);
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
}

View File

@@ -0,0 +1,33 @@
package com.seeyon.apps.qrCodeForm.dao;
import com.seeyon.ctp.util.JDBCAgent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class MembersDAO {
public List<Map<String, Object>> getMembers() {
List<Map<String, Object>> lists = new ArrayList<Map<String, Object>>();
JDBCAgent agent = new JDBCAgent();
//测formmain_3592 本formmain_0070 正formmain_3600
try {
StringBuilder sql = new StringBuilder("select * from formmain_3600");
agent.execute(sql.toString());
List<Map> list = agent.resultSetToList();
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
Map map = list.get(i);
lists.add(map);
}
}
} catch (Exception e) {
System.out.println(e);
} finally {
if (agent != null) {
agent.close();
}
}
return lists;
}
}

View File

@@ -0,0 +1,18 @@
package com.seeyon.apps.qrCodeForm.manager;
import com.seeyon.cap4.form.modules.business.FormAppBO;
import com.seeyon.ctp.util.annotation.AjaxAccess;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;
public interface QrCodeFormManager {
@AjaxAccess
List<Map<String, Object>> listBusiness(Map<String, Object> params);
@AjaxAccess
List<FormAppBO> listFormApp(Map<String, Object> params);
Map<String, Object> qrCodeFormUrl(Map<String, Object> params) throws UnsupportedEncodingException;
}

View File

@@ -0,0 +1,154 @@
package com.seeyon.apps.qrCodeForm.manager;
import cn.hutool.log.Log;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.qrCodeForm.constant.Constants;
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
import com.seeyon.apps.weixin.manager.WechatUserManager;
import com.seeyon.cap4.form.api.FormApi4Cap4;
import com.seeyon.cap4.form.modules.business.BusinessSourceTypeManager;
import com.seeyon.cap4.form.modules.business.FormAppBO;
import com.seeyon.cap4.form.util.BizUtil;
import com.seeyon.cap4.form.util.Enums;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.SystemEnvironment;
import com.seeyon.ctp.common.exceptions.BusinessException;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.util.FlipInfo;
import com.seeyon.ctp.util.ParamUtil;
import com.seeyon.ctp.util.Strings;
import com.seeyon.ctp.util.annotation.AjaxAccess;
import com.seeyon.ctp.util.annotation.Inject;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class QrCodeFormManagerImpl implements QrCodeFormManager {
private static Log log = Log.get(QrCodeFormManagerImpl.class);
@Inject
private FormApi4Cap4 formApi4Cap4;
@Inject
private OrgManager orgManager;
@Inject
private ICstConfigApi cstConfigApi;
@Inject
public WechatUserManager wechatUserManager;
/**
* 获取应用包数据
*
* @param params
* @return
*/
@Override
@AjaxAccess
public List<Map<String, Object>> listBusiness(Map<String, Object> params) {
List<Map<String, Object>> listMap = new ArrayList<Map<String, Object>>();
try {
FlipInfo fi = new FlipInfo(1, -1);
Map<String, Object> resultMap = formApi4Cap4.listBusiness(fi, params);
if (Strings.isNotEmpty(fi.getData())) {
listMap = fi.getData();
}
} catch (BusinessException e) {
e.printStackTrace();
}
return listMap;
}
/**
* 获取所有的应用下的模板
*
* @param params
* @return
*/
@AjaxAccess
@Override
public List<FormAppBO> listFormApp(Map<String, Object> params) {
List<FormAppBO> returnList = new ArrayList<>();
String type = ParamUtil.getString(params, "type");
String bizConfigId = ParamUtil.getString(params, "bizConfigId");
BusinessSourceTypeManager sourceType = BizUtil.getSourceTypeById(type);
Long bizConfigL = 0L;
if (Strings.isNotBlank(bizConfigId)) {
bizConfigL = Long.parseLong(bizConfigId);
}
try {
List<FormAppBO> allList = sourceType.getFormAppBOList(AppContext.getCurrentUser(), "", "", false, bizConfigL);
if (Strings.isNotEmpty(allList)) {
returnList = allList.stream().filter(a -> !"PARENT".equals(a.getSourctTypeName())).collect(Collectors.toList());
}
} catch (BusinessException e) {
log.error("获取所有模板异常", e);
}
return returnList;
}
@Override
@AjaxAccess
public Map<String, Object> qrCodeFormUrl(Map<String, Object> params) throws UnsupportedEncodingException {
Map<String, Object> result = new HashMap<>();
Integer sourceType = ParamUtil.getInt(params, "sourceType");
//String fillUrl = Constants._URLTPL.replaceAll("\\{corpId}", Constants._CORPID);
String fillUrl;
String _redirecturi = Constants._REDIRECTURI;
if (sourceType == Enums.SourceType.SOURCE_TYPE_FLOWTEMPLATE.getKey()) {
String templateId = ParamUtil.getString(params, "templateId");
String tourl = Constants.FLOW_URL + templateId;
try {
// fillUrl = fillUrl + URLEncoder.encode(
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());;
fillUrl = address + SystemEnvironment.getContextPath() + _redirecturi;
fillUrl += URLEncoder.encode(tourl, "UTF-8");
// "http://172.16.30.123:8081"+ SystemEnvironment.getContextPath() + _redirecturi + tourl, "UTF-8"
// ) + Constants._FIXURL;
result.put("fillUrl", fillUrl);
return result;
} catch (UnsupportedEncodingException e) {
log.error("地址处理异常", e);
}
} else if (sourceType == Enums.SourceType.SOURCE_TYPE_INFOMANAGE.getKey()) {
String formType = ParamUtil.getString(params, "formType");
String type = ParamUtil.getString(params, "type");
String title = ParamUtil.getString(params, "title");
String moduleId = ParamUtil.getString(params, "moduleId");
String formTemplateId = ParamUtil.getString(params, "formTemplateId");
String moduleType = ParamUtil.getString(params, "moduleType");
String operateType = ParamUtil.getString(params, "operateType");
String rightId = ParamUtil.getString(params, "rightId");
//http://127.0.0.1/seeyon/qrCodeForm.do?method=newMain&html=/seeyon/m3/apps/v5/cap4/htmls/native/form/index.html?cusType=true&formTemplateId=-4624141853295951831&moduleId=-4624141853295951831&moduleType=42&formType=main&type=new&operateType=0&rightId=-1
String tourl = Constants.UNFLOW_URL + "cusType=true"
+ "&formTemplateId=" + formTemplateId
+ "&moduleId=" + moduleId
+ "&moduleType=" + moduleType
+ "&formType=" + formType
+ "&type=" + type
+ "&rightId=" + rightId
+ "&operateType=" + operateType;
try {
// fillUrl = fillUrl + URLEncoder.encode(
String address = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId(), QrCodeFormConstants.oaAddress.name());
fillUrl = address + SystemEnvironment.getContextPath() + _redirecturi;
fillUrl += URLEncoder.encode(tourl, "UTF-8");
// "http://172.16.30.123:80"+ SystemEnvironment.getContextPath() + _redirecturi + tourl, "UTF-8"
// ) + Constants._FIXURL;
log.info("生成地址为:" + fillUrl);
result.put("fillUrl", fillUrl);
return result;
} catch (UnsupportedEncodingException e) {
log.error("地址处理异常", e);
}
}
return result;
}
}

View File

@@ -0,0 +1,139 @@
package com.seeyon.apps.qrCodeForm.sso;
import cn.hutool.log.Log;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.weixin.manager.WechatUserManager;
import com.seeyon.apps.weixin.po.WechatUser;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.organization.bo.V3xOrgMember;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.portal.sso.SSOLoginContext;
import com.seeyon.ctp.portal.sso.SSOLoginHandshakeAbstract;
import com.seeyon.ctp.util.HttpClientUtil;
import com.seeyon.ctp.util.annotation.Inject;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @author
* @title: WechatQRHandShake
* @description: 企业微信扫码发起单据
* @date 2021/11/30 9:47
*/
public class WechatQRHandShake extends SSOLoginHandshakeAbstract {
private static Log log = Log.get(WechatQRHandShake.class);
//企业微信appid
public static final String _CORPID = AppContext.getSystemProperty("qrCodeForm.corpid");
//企业微信corpsecret
public static final String _corpsecret = AppContext.getSystemProperty("qrCodeForm.corpsecret");
//验证方式
public static final String handshakeType = AppContext.getSystemProperty("qrCodeForm.handshakeType");
@Inject
public WechatUserManager wechatUserManager;
@Autowired
private OrgManager orgManager;
@Override
public String handshake(String s) {
log.info("--进入企业微信回调接口!");
HttpServletRequest request = AppContext.getRawRequest();
String code =request.getParameter("code");
String corpid =_CORPID;
String corpsecret =_corpsecret;
log.info("获取access接口url:https://qyapi.weixin.qq.com/cgi-bin/gettoken?"+"corpid="+corpid+"&corpsecret="+corpsecret);
String access = null;
try {
access = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+corpid+"&corpsecret="+corpsecret);
log.info("获取access接口返回:"+access);
if(access==null || access.equals("")){
log.error("--未获取到access!");
return null;
}
JSONObject jsonObject = JSONObject.parseObject(access);
if(jsonObject==null){
log.error("--未获取到access的jsonObject!");
return null;
}
String accessToken = (String)jsonObject.get("access_token");
if(accessToken==null || accessToken.equals("")){
log.error("--未获取到accessToken!");
return null;
}
log.info("--获取访问用户身份接口url:https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?"+"access_token=" + accessToken + "&code=" + code);
String user = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" + accessToken + "&code=" + code);
log.info("--获取访问用户身份接口返回值:" + user);
if(user==null || user.equals("")){
log.error("--未获取到user!");
return null;
}
JSONObject userJson = JSONObject.parseObject(user);
if(userJson==null){
log.error("--未获取到user的jsonObject!");
return null;
}
String userid = userJson.getString("UserId");
if(userid==null || userid.equals("")){
log.error("--未获取到userid!");
return null;
}
String Loginname = null;
// if("1".equals(handshakeType)){//使用标准模块的微信绑定
if(false){ //企业微信、微协同绑定等信息存储在微协同云服务中,废弃逻辑
WechatUser wechatUser =wechatUserManager.getWechatUserByUserIdAndcorpId(userid,corpid);
Loginname=wechatUser.getXtLoginName();
}else {//自定义如何根据微信得用户id获取OA的用户
log.info("--获取成员接口url:https://qyapi.weixin.qq.com/cgi-bin/user/get?"+"access_token=" + accessToken + "&userid=" + userid);
String member = HttpClientUtil.getContent("https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" + accessToken + "&userid=" + userid);
log.info("获取成员接口返回值:" + member);
if(member==null || member.equals("")){
log.error("--未获取到member!");
return null;
}
JSONObject memberJson = JSONObject.parseObject(member);
if(userJson==null){
log.error("--未获取到member的jsonObject!");
return null;
}
String mobile = memberJson.getString("mobile");
if(mobile==null || mobile.equals("")){
log.error("--未获取到mobile!");
return null;
}
List<V3xOrgMember> memberList=orgManager.getMemberListByMobile(mobile,null);
Loginname = memberList!=null?memberList.get(0).getLoginName():null;
}
if(Loginname ==null || Loginname.equals("")){
log.error("--未获取到loginName!");
return null;
}
return Loginname;
} catch (Exception e) {
log.error("获取微信验证失败",e);
}
return null;
}
@Override
public void logoutNotify(String s) {
}
@Override
public String getToUrl(HttpServletRequest req, SSOLoginContext ssoLoginContext, String ticket) {
return req.getParameter("tourl");
}
}

View File

@@ -0,0 +1,111 @@
package com.seeyon.apps.qrCodeForm.util;
import cn.hutool.log.Log;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.exceptions.BusinessException;
import com.seeyon.ctp.privilege.enums.PrivMenuTypeEnums;
import com.seeyon.ctp.privilege.manager.PrivilegeMenuManager;
import com.seeyon.ctp.privilege.po.PrivMenu;
import com.seeyon.ctp.util.DBAgent;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class InitQrCodeFormUitl {
private static Log log = Log.get(InitQrCodeFormUitl.class);
private static PrivilegeMenuManager privilegeMenuManager = (PrivilegeMenuManager) AppContext.getBean("privilegeMenuManager");
public static void initMenu() {
try {
List<PrivMenu> listmenu = new ArrayList<PrivMenu>();
StringBuffer queryString = new StringBuffer(" FROM ");
queryString.append(PrivMenu.class.getSimpleName()).append(" where ")
.append(" path = '711' ");
listmenu = DBAgent.find(queryString.toString());
if (listmenu == null || listmenu.size() < 1) {
creatFileImportMenu();//创建菜单资源
}
log.info("模板二维码菜单完成");
} catch (Exception e) {
log.error("模板二维码菜单失败", e);
}
}
/**
* 配置菜单
*
* @return
* @throws BusinessException
*/
private static void creatFileImportMenu() {
try {
List<PrivMenu> menus = new ArrayList<PrivMenu>();
PrivMenu configmenu = new PrivMenu();
configmenu.setNewId();
configmenu.setName("模板二维码");
configmenu.setIcon("conferencearrangemen.png");
configmenu.setSortid(1);
configmenu.setPath("711");
configmenu.setExt1("0");
configmenu.setExt2("1");
configmenu.setExt3("");
configmenu.setExt4(1);
configmenu.setExt7(configmenu.getName());
configmenu.setExt8("");
configmenu.setExt9("");
configmenu.setExt10("");
configmenu.setExt11("");
configmenu.setExt12(0);
configmenu.setExt13(0);
configmenu.setExt14(0);
configmenu.setExt15(0);
configmenu.setExt16(0);
Date nowDate = new Date();
configmenu.setCreatedate(nowDate);
configmenu.setUpdatedate(nowDate);
configmenu.setType(PrivMenuTypeEnums.systemPresetMenu.getKey());
configmenu.setParentId(0L);
menus.add(configmenu);
PrivMenu syncConfig = new PrivMenu();//二维码生成
syncConfig.setNewId();
syncConfig.setName("二维码生成");
syncConfig.setIcon("b_menu_thridpartyspace.png");
syncConfig.setTarget("mainfrm");
syncConfig.setSortid(1);
syncConfig.setPath("711001");
syncConfig.setExt1("0");
syncConfig.setExt2("2");
syncConfig.setExt3("");
syncConfig.setExt4(1);
syncConfig.setExt7(syncConfig.getName());
syncConfig.setExt8("0");
syncConfig.setExt9("0");
syncConfig.setExt10("0");
syncConfig.setExt11("1");
syncConfig.setExt19(2L);
syncConfig.setEnterResource(1);
syncConfig.setResourceNavurl("/qrCodeForm.do?method=index");
syncConfig.setResourceCode("qrCodeForm");
syncConfig.setResourceModuleid("none");
syncConfig.setCreatedate(nowDate);
syncConfig.setUpdatedate(nowDate);
syncConfig.setUpdateuserid(1L);
syncConfig.setShow(true);
syncConfig.setControl(true);
syncConfig.setType(PrivMenuTypeEnums.systemPresetMenu.getKey());
syncConfig.setParentId(configmenu.getId());
menus.add(syncConfig);
DBAgent.saveAll(menus);
} catch (Exception e) {
log.error("组织机构同步菜单异常", e);
}
}
}

View File

@@ -0,0 +1,70 @@
package com.seeyon.apps.qrCodeForm.util;
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.log.Log;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.qrCodeForm.constant.QrCodeFormConstants;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.constants.Constants;
import com.seeyon.ctp.rest.util.TokenUtil;
import com.seeyon.ctp.services.UserToken;
import com.seeyon.ctp.util.Strings;
import com.seeyon.ctp.util.TextEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
public class LoginUtil {
private static Log log = Log.get(LoginUtil.class);
private static ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
private static TimedCache<String, String> tokenCache = CacheUtil.newTimedCache(14 * 60 * 1000);
//rest信息
// public static final String restName = AppContext.getSystemProperty("qrCodeForm.restName");
// public static final String restPassword = AppContext.getSystemProperty("qrCodeForm.restPassword");
/**
* 获取token
*
* @param loginName 登录名
* @return
*/
public static Map getToken(String memberId, String loginName, HttpServletRequest request, HttpServletResponse response) {
Map<String, Object> map = new HashMap<String, Object>();
String tokenId = tokenCache.get(memberId);
if(null != tokenId) {
map.put("id", tokenId);
map.put("success", true);
return map;
}
try {
ConfigVo config = cstConfigApi.getConfig(QrCodeFormConstants.getPluginId());
String userName = config.getParamVal(QrCodeFormConstants.restId.name());
String password = config.getParamVal(QrCodeFormConstants.restPwd.name());
password = TextEncoder.decode(password);
Long userId = null;
if (Strings.isNotBlank(memberId)) {
userId = Long.parseLong(memberId);
}
UserToken token = TokenUtil._getToken(userName, password, userId, loginName, null, Constants.login_useragent_from.wechat.name(), request, response);
if (token != null) {
map.put("success", true);
map.put("id", token.getId());
tokenCache.put(memberId, token.getId());
}
} catch (Exception e) {
log.error("", e);
map.put("success", false);
map.put("message", e.getMessage());
}
return map;
}
}

View File

@@ -0,0 +1,44 @@
package com.seeyon.apps.src_meetingroom;
import com.seeyon.apps.common.plugin.api.APluginInfoApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.src_meetingroom.constants.MeetingRoomConstants;
/**
* 功能描述:<br>
* <pre>
*
* </pre>
*
* @Author: FanGaowei
* @Date: 2022/12/1
*/
public class MeetingRoomPluginApi extends APluginInfoApi {
@Override
public String getPluginId() {
return MeetingRoomConstants.getPluginId();
}
@Override
public String getCreateUser() {
return "橙阳科技";
}
public String getDescription() {
return "会议室指示屏管理";
}
@Override
public ConfigVo getDefaultConfig() {
ConfigVo configVo = new ConfigVo();
for (MeetingRoomConstants value : MeetingRoomConstants.values()) {
if(value != MeetingRoomConstants.plugin) {
configVo.getDevParams().put(value.name(), value.getDefaultValue());
configVo.getProdParams().put(value.name(), value.getDefaultValue());
configVo.getParamMap().put(value.name(), value.getDescription());
}
}
return configVo;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -0,0 +1,135 @@
package com.seeyon.apps.src_meetingroom.util;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.SecureRandom;
import java.util.Base64;
import java.util.Date;
public class AESUtil {
// 加密算法/模式/填充方式
private static final String AES_ALGORITHM = "AES/CBC/PKCS5Padding";
// AES密钥长度128位
private static final int AES_KEY_SIZE = 128;
// IV向量长度固定16字节AES块大小
private static final int IV_LENGTH = 16;
/**
* 生成AES密钥128位可保存为自定义密钥建议持久化存储
* @return Base64编码的密钥字符串
* @throws Exception 密钥生成异常
*/
public static String generateAesKey() throws Exception {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(AES_KEY_SIZE, new SecureRandom());
SecretKey secretKey = keyGen.generateKey();
return Base64.getEncoder().encodeToString(secretKey.getEncoded());
}
/**
* 加密字符串
* @param plainText 明文(待加密字符串)
* @param keyBase64 Base64编码的AES密钥
* @return 加密结果格式IV+密文Base64编码
* @throws Exception 加密异常
*/
public static String encrypt(String plainText, String keyBase64) throws Exception {
// 1. 解码密钥
byte[] keyBytes = Base64.getDecoder().decode(keyBase64);
SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
// 2. 生成随机IV向量
byte[] iv = new byte[IV_LENGTH];
new SecureRandom().nextBytes(iv);
IvParameterSpec ivSpec = new IvParameterSpec(iv);
// 3. 初始化加密器
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
// 4. 加密明文
byte[] encryptBytes = cipher.doFinal(plainText.getBytes(StandardCharsets.UTF_8));
// 5. 拼接IV和密文IV用于解密需随密文一起传输
byte[] result = new byte[IV_LENGTH + encryptBytes.length];
System.arraycopy(iv, 0, result, 0, IV_LENGTH);
System.arraycopy(encryptBytes, 0, result, IV_LENGTH, encryptBytes.length);
// 6. Base64编码返回
return Base64.getEncoder().encodeToString(result);
}
/**
* 解密字符串
* @param cipherText 加密后的字符串Base64编码格式IV+密文)
* @param keyBase64 Base64编码的AES密钥
* @return 解密后的明文
* @throws Exception 解密异常
*/
public static String decrypt(String cipherText, String keyBase64) throws Exception {
// 1. 解码密文字符串
byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
// 2. 拆分IV和密文
byte[] iv = new byte[IV_LENGTH];
System.arraycopy(cipherBytes, 0, iv, 0, IV_LENGTH);
byte[] encryptBytes = new byte[cipherBytes.length - IV_LENGTH];
System.arraycopy(cipherBytes, IV_LENGTH, encryptBytes, 0, encryptBytes.length);
// 3. 解码密钥
byte[] keyBytes = Base64.getDecoder().decode(keyBase64);
SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES");
// 4. 初始化解密器
Cipher cipher = Cipher.getInstance(AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
// 5. 解密密文
byte[] plainBytes = cipher.doFinal(encryptBytes);
// 6. 转为字符串返回
return new String(plainBytes, StandardCharsets.UTF_8);
}
// 测试示例
public static void main(String[] args) {
try {
// 1. 生成密钥(只需生成一次,保存后复用)
// String aesKey = generateAesKey();
String aesKey = "Y7T4B822Fi5eNDaQqtVj6Q==";
System.out.println("生成的AES密钥Base64" + aesKey);
// 2. 待加密的明文
// String plainText = "Hello, Java加密解密123456";
String plainText = "HY01";
long timeLong = new Date().getTime();
plainText = plainText + '-' +timeLong;
System.out.println("原始明文:" + plainText);
// 3. 加密
String cipherText = encrypt(plainText, aesKey);
String encodedValue = URLEncoder.encode(cipherText, "UTF-8");
System.out.println("加密后字符串:" + encodedValue);
// 4. 解密
// String ttt = "VJFJmDoONeFtbcjz%2F%2BOtULaMwy2q4erOGvGD%2FAXYtyw%3D";
String ttt = "9VVj3Q7lJAeGlE++d9jV6HFZJhehHJ7xjHPX2GikdYCQveluOZD/QjNoJyIK1G7U";
// String decodedValue = URLDecoder.decode(ttt, "UTF-8");
String decryptText = decrypt(ttt, aesKey);
System.out.println("解密后字符串:" + decryptText);
// 验证解密结果
System.out.println("解密结果是否一致:" + plainText.equals(decryptText));
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,92 @@
package com.seeyon.apps.src_organizationHandle.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.src_organizationHandle.constants.OrganizationHandleConstants;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.utils.http.HttpClient;
import www.seeyon.com.utils.StringUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DepartmentHandleService {
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
public JSONArray findDepartmentByAccountId(long accountId, String token) {
ConfigVo config = cstConfigApi.getConfig(OrganizationHandleConstants.getPluginId());
String oaHost = config.getParamVal(OrganizationHandleConstants.oaHost.name());
String orgDepartmentsUrl = config.getParamVal(OrganizationHandleConstants.orgDepartmentsUrl.name())
.replace("{accountId}", String.valueOf(accountId));
try {
Map<String, String> headers = new HashMap<>();
headers.put("token", token);
String getDepartmentsOaResp = HttpClient.httpGet(oaHost + "/seeyon/rest" + orgDepartmentsUrl, headers, null);
JSONObject getDepartmentsDataParam = StringUtil.isNotEmpty(getDepartmentsOaResp)
? JSONObject.parseObject("{'param':" + getDepartmentsOaResp + "}")
: new JSONObject();
JSONArray getDepartmentsData = getDepartmentsDataParam.getJSONArray("param");
if (getDepartmentsData == null) {
return new JSONArray();
}
for (int i = 0; i < getDepartmentsData.size(); i++) {
JSONObject getDepartment = getDepartmentsData.getJSONObject(i);
if (getDepartment == null || getDepartment.get("id") == null) {
continue;
}
String departmentmanagerUrl = config.getParamVal(OrganizationHandleConstants.departmentmanagerUrl.name());
String departmentid = getDepartment.getString("id");
departmentmanagerUrl = departmentmanagerUrl
.replace("{accountid}", String.valueOf(accountId))
.replace("{departmentid}", departmentid);
String getDepartmentmanagerOaResp = HttpClient.httpGet(oaHost + "/seeyon/rest" + departmentmanagerUrl, headers, null);
JSONObject getDepartmentmanagerData = StringUtil.isNotEmpty(getDepartmentmanagerOaResp)
? JSONObject.parseObject(getDepartmentmanagerOaResp)
: new JSONObject();
getDepartment.put("deptrole0", parseDeptroleValue(getDepartmentmanagerData, "deptrole0"));
getDepartment.put("deptrole1", parseDeptroleValue(getDepartmentmanagerData, "deptrole1"));
getDepartment.put("deptrole2", parseDeptroleValue(getDepartmentmanagerData, "deptrole2"));
getDepartment.put("deptrole3", parseDeptroleValue(getDepartmentmanagerData, "deptrole3"));
getDepartment.put("deptrole4", parseDeptroleValue(getDepartmentmanagerData, "deptrole4"));
getDepartment.put("deptrole5", parseDeptroleValue(getDepartmentmanagerData, "deptrole5"));
}
return getDepartmentsData;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private String parseDeptroleValue(JSONObject data, String key) {
if (data == null) {
return "";
}
JSONObject deptroleObj = data.getJSONObject(key);
if (deptroleObj == null) {
return "";
}
return deptroleHandle(deptroleObj.getString("value"));
}
private String deptroleHandle(String deptrole) {
if (StringUtil.isEmpty(deptrole)) {
return "";
}
String[] deptroles = deptrole.split(",");
List<String> idList = new ArrayList<>();
for (String deptroleData : deptroles) {
String[] fields = deptroleData.split("\\|");
if (fields.length >= 2) {
idList.add(fields[1]);
}
}
return String.join(",", idList);
}
}

View File

@@ -0,0 +1,67 @@
package com.seeyon.apps.src_organizationHandle.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.common.config.ICstConfigApi;
import com.seeyon.apps.common.plugin.vo.ConfigVo;
import com.seeyon.apps.src_organizationHandle.constants.OrganizationHandleConstants;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.util.annotation.Inject;
import com.seeyon.utils.form.FormColumn;
import com.seeyon.utils.form.FormTableExecutor;
import com.seeyon.utils.form.FormWhereCondition;
import com.seeyon.utils.form.TableContext;
import com.seeyon.utils.http.HttpClient;
import www.seeyon.com.utils.StringUtil;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class MemberHandleService {
@Inject
private OrgManager orgManager;
protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi");
public JSONArray findMemberByAccountId(long accountId, String token) {
ConfigVo config = cstConfigApi.getConfig(OrganizationHandleConstants.getPluginId());
String oaHost = config.getParamVal(OrganizationHandleConstants.oaHost.name());
String memberFormCode = config.getParamVal(OrganizationHandleConstants.memberFormCode.name());
String orgMembersUrl = config.getParamVal(OrganizationHandleConstants.orgMembersUrl.name())
.replace("{accountId}", String.valueOf(accountId));
try {
TableContext tableContext = FormTableExecutor.master(memberFormCode);
Map<String, String> headers = new HashMap<>();
headers.put("token", token);
String getMembersOaResp = HttpClient.httpGet(oaHost + "/seeyon/rest" + orgMembersUrl, headers, null);
JSONObject getMembersDataParam = StringUtil.isNotEmpty(getMembersOaResp)
? JSONObject.parseObject("{'param':" + getMembersOaResp + "}")
: new JSONObject();
JSONArray getMembersData = getMembersDataParam.getJSONArray("param");
if (getMembersData == null) {
return new JSONArray();
}
for (int i = 0; i < getMembersData.size(); i++) {
JSONObject getMember = getMembersData.getJSONObject(i);
if (getMember == null || getMember.get("id") == null) {
continue;
}
long orgMemberId = getMember.getLong("id");
FormWhereCondition affiliatedUnitWhere = FormWhereCondition.build().display("系统姓名").value(orgMemberId);
FormColumn formColumn = FormTableExecutor.queryOne(tableContext, Collections.singletonList(affiliatedUnitWhere), true);
if (formColumn != null && formColumn.getFieldsMap() != null) {
String memberNo = (String) formColumn.getFieldsMap().get("身份证号码");
getMember.put("memberNo", memberNo);
}
}
return getMembersData;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}
}