commit cf1bb1d7f0b51954458a376732264b0112259555 Author: 黄正国 <438926402@qq.com> Date: Mon Nov 17 10:14:17 2025 +0800 2025-01-08稻花香主数据平台初始化 diff --git a/v5/apps-customize/pom.xml b/v5/apps-customize/pom.xml new file mode 100644 index 0000000..05e2716 --- /dev/null +++ b/v5/apps-customize/pom.xml @@ -0,0 +1,61 @@ + + + + + com.seeyon + apps-root + 5371630367615140082-standard-V8.1SP2-release_20220812-SNAPSHOT + + + 4.0.0 + + apps-customize + ${apps.version} + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + + + + + + + open.seeyon.3rd + hutool + 5.5.7 + system + ${basedir}/src/main/webapp/WEB-INF/lib/hutool-all-5.5.7.jar + + + open.seeyon.3rd + seeyon-extend + 3.0 + system + ${basedir}/src/main/webapp/WEB-INF/lib/seeyon-extend-v3.0.jar + + + + + + + + + + + + + + + + diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginApi.java new file mode 100644 index 0000000..14c7768 --- /dev/null +++ b/v5/apps-customize/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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java new file mode 100644 index 0000000..82d52b3 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/QrCodeFormPluginInitializer.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.qrCodeForm; + +import cn.hutool.log.Log; +import com.seeyon.apps.qrCodeForm.util.InitQrCodeFormUitl; +import com.seeyon.ctp.common.AbstractSystemInitializer; +import com.seeyon.ctp.common.exceptions.BusinessException; + +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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java new file mode 100644 index 0000000..d065422 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/Constants.java @@ -0,0 +1,15 @@ +package com.seeyon.apps.qrCodeForm.constant; + +import com.seeyon.ctp.common.AppContext; + +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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java new file mode 100644 index 0000000..7415d9c --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/QrCodeFormConstants.java @@ -0,0 +1,32 @@ +package com.seeyon.apps.qrCodeForm.constant; + +public enum QrCodeFormConstants { + + plugin("qrCodeForm","插件ID"), + oaAddress("https://oa.dhx.com.cn", "OA地址"), + qwAppId("", "企微APPID"), + restId("qrcode", "rest账号"), + restPwd("f39f8102-1c7f-423c-8e6c-57e1d19b9a6f", "rest密码"), + qrcode_loginname("hr", "发起人账号"); + + 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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/constant/SupportTypeEnum.java new file mode 100644 index 0000000..6051998 --- /dev/null +++ b/v5/apps-customize/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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java new file mode 100644 index 0000000..29a9b70 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/controller/QrCodeFormController.java @@ -0,0 +1,113 @@ +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.common.formula.FormulaUtil; +import com.seeyon.ctp.common.log.CtpLogFactory; +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; + } + +// https://oa.dhx.com.cn/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 = "seeyon"; + } + + 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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManager.java new file mode 100644 index 0000000..06f5211 --- /dev/null +++ b/v5/apps-customize/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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java new file mode 100644 index 0000000..945c9a6 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/manager/QrCodeFormManagerImpl.java @@ -0,0 +1,160 @@ +package com.seeyon.apps.qrCodeForm.manager; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +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.qrCodeForm.constant.SupportTypeEnum; +import com.seeyon.apps.weixin.manager.WechatUserManager; +import com.seeyon.apps.weixin.po.WechatUser; +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.common.log.CtpLogFactory; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.util.FlipInfo; +import com.seeyon.ctp.util.HttpClientUtil; +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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java new file mode 100644 index 0000000..6f793e7 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/sso/WechatQRHandShake.java @@ -0,0 +1,141 @@ +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.common.log.CtpLogFactory; +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.Strings; +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 final 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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java new file mode 100644 index 0000000..0ab83e9 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/util/InitQrCodeFormUitl.java @@ -0,0 +1,118 @@ +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.bo.PrivMenuBO; +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 com.seeyon.ctp.util.DateUtil; + + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +public class InitQrCodeFormUitl { +// private static Log log = LogFactory.getLog(InitQrCodeFormUitl.class); + 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/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java new file mode 100644 index 0000000..c7f1df3 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/qrCodeForm/util/LoginUtil.java @@ -0,0 +1,72 @@ +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/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/bo/DataFetchType.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/bo/DataFetchType.java new file mode 100644 index 0000000..7950620 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/bo/DataFetchType.java @@ -0,0 +1,6 @@ +package com.seeyon.apps.src_commondatamapping.bo; + +public enum DataFetchType { + DATABASE, + HTTP +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/bo/DataMappingStrategy.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/bo/DataMappingStrategy.java new file mode 100644 index 0000000..f50856f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/bo/DataMappingStrategy.java @@ -0,0 +1,161 @@ +package com.seeyon.apps.src_commondatamapping.bo; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class DataMappingStrategy { + private Long id; //策略ID + private String strategyName; //策略名称 + private String strategyGroup; //策略组名称 + private Long groupId; //策略组ID + private String oaFormNo; //oa表单编号 + private String sourceMainTable; //源数据主表名 + private List sourceSubTable; //源数据从表名 + private String httpReqUrl; //请求地址 + private Map reqHeads; //请求头 + private Map reqParams; //请求参数 + private Map mainFormMappingList; //主表映射 + private Map subFormMappingList; //从表字段映射关系 + private DataFetchType dataFetchType; //源数据获取类型 + private Date createTime; + private String dataBaseUrl; + private String dataBaseUserName; + private String dataBasePwd; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getStrategyName() { + return strategyName; + } + + public void setStrategyName(String strategyName) { + this.strategyName = strategyName; + } + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getOaFormNo() { + return oaFormNo; + } + + public void setOaFormNo(String oaFormNo) { + this.oaFormNo = oaFormNo; + } + + public String getSourceMainTable() { + return sourceMainTable; + } + + public void setSourceMainTable(String sourceMainTable) { + this.sourceMainTable = sourceMainTable; + } + + public List getSourceSubTable() { + return sourceSubTable; + } + + public void setSourceSubTable(List sourceSubTable) { + this.sourceSubTable = sourceSubTable; + } + + public String getHttpReqUrl() { + return httpReqUrl; + } + + public void setHttpReqUrl(String httpReqUrl) { + this.httpReqUrl = httpReqUrl; + } + + public Map getReqHeads() { + return reqHeads; + } + + public void setReqHeads(Map reqHeads) { + this.reqHeads = reqHeads; + } + + public Map getReqParams() { + return reqParams; + } + + public void setReqParams(Map reqParams) { + this.reqParams = reqParams; + } + + public Map getMainFormMappingList() { + return mainFormMappingList; + } + + public void setMainFormMappingList(Map mainFormMappingList) { + this.mainFormMappingList = mainFormMappingList; + } + + public Map getSubFormMappingList() { + return subFormMappingList; + } + + public void setSubFormMappingList(Map subFormMappingList) { + this.subFormMappingList = subFormMappingList; + } + + public DataFetchType getDataFetchType() { + return dataFetchType; + } + + public void setDataFetchType(DataFetchType dataFetchType) { + this.dataFetchType = dataFetchType; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getDataBaseUrl() { + return dataBaseUrl; + } + + public void setDataBaseUrl(String dataBaseUrl) { + this.dataBaseUrl = dataBaseUrl; + } + + public String getDataBaseUserName() { + return dataBaseUserName; + } + + public void setDataBaseUserName(String dataBaseUserName) { + this.dataBaseUserName = dataBaseUserName; + } + + public String getDataBasePwd() { + return dataBasePwd; + } + + public void setDataBasePwd(String dataBasePwd) { + this.dataBasePwd = dataBasePwd; + } + + public String getStrategyGroup() { + return strategyGroup; + } + + public void setStrategyGroup(String strategyGroup) { + this.strategyGroup = strategyGroup; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/controller/DataMappingStrategyController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/controller/DataMappingStrategyController.java new file mode 100644 index 0000000..4a40004 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/controller/DataMappingStrategyController.java @@ -0,0 +1,10 @@ +package com.seeyon.apps.src_commondatamapping.controller; + +import com.seeyon.apps.src_commondatamapping.bo.DataMappingStrategy; + +public class DataMappingStrategyController { + + public void createStrategy(DataMappingStrategy strategy) { + + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/service/DataMappingStrategyService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/service/DataMappingStrategyService.java new file mode 100644 index 0000000..fb945ec --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_commondatamapping/service/DataMappingStrategyService.java @@ -0,0 +1,12 @@ +package com.seeyon.apps.src_commondatamapping.service; + +import com.seeyon.apps.src_commondatamapping.bo.DataMappingStrategy; + +public class DataMappingStrategyService { + public void createStrategy(DataMappingStrategy strategy) { + if(strategy.getGroupId() == null && strategy.getStrategyGroup() != null) { + //如果不存在策略组则进行创建 + } + //保存策略 + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/OrganizationPluginApi.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/OrganizationPluginApi.java new file mode 100644 index 0000000..9f03173 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/OrganizationPluginApi.java @@ -0,0 +1,44 @@ +package com.seeyon.apps.src_mainorganization; + +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; + +public class OrganizationPluginApi extends APluginInfoApi { + public OrganizationPluginApi() { + } + + public String getPluginId() { + System.out.println(SyncConstants.getPluginId()); + return SyncConstants.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "主数据组织架构集成管理"; + } + + public boolean syncOrg() { + return true; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + SyncConstants[] var2 = SyncConstants.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + SyncConstants value = var2[var4]; + if (value != SyncConstants.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/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java new file mode 100644 index 0000000..e2a31e2 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ReceiveOrgMemberResponse.java @@ -0,0 +1,56 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.alibaba.fastjson.JSONObject; + +public class ReceiveOrgMemberResponse { + + private boolean success; + private int status; + private String msg; + private String data; + public ReceiveOrgMemberResponse() {} + public ReceiveOrgMemberResponse(JSONObject object) { + + this.status = object.getString("status").equals("1")?1:2; + this.success = (1 == status); + this.msg = object.getString("msg"); + this.data = object.getString("data"); + } + + public boolean isSuccess() { + return success; + } + + public ReceiveOrgMemberResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public ReceiveOrgMemberResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public ReceiveOrgMemberResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public ReceiveOrgMemberResponse setData(String data) { + this.data = data; + return this; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdCustomerBo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdCustomerBo.java new file mode 100644 index 0000000..567c235 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdCustomerBo.java @@ -0,0 +1,348 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.alibaba.fastjson.JSONObject; +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.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.manager.OrgManager; + +import java.util.Map; + +public class ThirdCustomerBo { + + private String id;//数据唯一值ID + private String customerCode;//客户编码 + private String customerName;//客户名称 + private String customerNature;//客户性质 + private String customerNatureValue;//客户性质值 + private String customerProvince;//所属省份 + private String customerProvinceValue;//所属省份值 + private String state;//状态 + private String stateValue;//状态值 + private String area;//所属区域 + private long areaId;//所属区域 + private String marketizationCompany;//市场化公司 + private String market;//销售市场 + private String creditCode;//统一社会信用代码 + private String registeredCapital;//注册资本 + private String legalPerson;//法人代表人 + private String legalPersonId;//法人身份证号 + private String legalPersonTelnumber;//法人电话 + private String contactSite;//联系地址 + private String consigneeSite;//收货地址 + private String postalCode;//邮政编码 + private String consigneeName1;//第一收货人 + private String consigneeTelnumber1;//第一收货人地址 + private String consigneeName2;//第二收货人 + private String consigneeTelnumber2;//第二收货人地址 + + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) { + this.enumManagerNew = enumManagerNew; + } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + + private OrgManager orgManager; + public void setOrgManager(OrgManager orgManager) { + this.orgManager = orgManager; + } + public OrgManager getOrgManager() { + if (orgManager == null) {orgManager = (OrgManager) AppContext.getBean("orgManager");}return orgManager; + } + + + public ThirdCustomerBo(Map customerMap) throws BusinessException { + this.id = customerMap.get("id")==null ? "":customerMap.get("id").toString(); + this.customerCode = customerMap.get("customer_code")==null ? "":customerMap.get("customer_code").toString(); + this.customerName = customerMap.get("customer_name")==null ? "":customerMap.get("customer_name").toString(); + if(customerMap.get("customer_nature")!=null ){ + String customerNatureId = customerMap.get("customer_nature").toString(); + CtpEnumItem customerNatureEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(customerNatureId)); + this.customerNature = customerNatureEnum.getShowvalue(); + this.customerNatureValue = customerNatureEnum.getEnumvalue(); + }else{ + this.customerNature = ""; + this.customerNatureValue = ""; + } + if(customerMap.get("customer_province")!=null ){ + String customerProvinceId = customerMap.get("customer_province").toString(); + CtpEnumItem customerProvinceEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(customerProvinceId)); + this.customerProvince = customerProvinceEnum.getShowvalue(); + this.customerProvinceValue = customerProvinceEnum.getEnumvalue(); + }else{ + this.customerProvince = ""; + this.customerProvinceValue = ""; + } + if(customerMap.get("state")!=null ){ + String stateId = customerMap.get("state").toString(); + CtpEnumItem stateEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(stateId)); + this.state = stateEnum.getShowvalue(); + this.stateValue = stateEnum.getEnumvalue(); + }else{ + this.state = ""; + this.stateValue = ""; + } + if(customerMap.get("area")!=null ){ + String areaId = customerMap.get("area").toString(); + V3xOrgDepartment department = getOrgManager().getDepartmentById(Long.parseLong(areaId)); + this.area = department.getName(); + this.areaId = department.getId(); + }else{ + this.area = ""; + this.areaId = 0l; + } + if(customerMap.get("marketization_company")!=null ){ + String marketizationCompanyId = customerMap.get("marketization_company").toString(); + V3xOrgAccount account = getOrgManager().getAccountById(Long.parseLong(marketizationCompanyId)); + this.marketizationCompany = account.getName(); + }else{ + this.marketizationCompany = ""; + } + this.market = customerMap.get("market")==null ? "":customerMap.get("market").toString(); + this.creditCode = customerMap.get("credit_code")==null ? "":customerMap.get("credit_code").toString(); + this.registeredCapital = customerMap.get("registered_capital")==null ? "":customerMap.get("registered_capital").toString(); + this.legalPerson = customerMap.get("legal_person")==null ? "":customerMap.get("legal_person").toString(); + this.legalPersonId = customerMap.get("legal_person_id")==null ? "":customerMap.get("legal_person_id").toString(); + this.legalPersonTelnumber = customerMap.get("legal_person_telnumber")==null ? "":customerMap.get("legal_person_telnumber").toString(); + this.contactSite = customerMap.get("contact_site")==null ? "":customerMap.get("contact_site").toString(); + this.consigneeSite = customerMap.get("consignee_site")==null ? "":customerMap.get("consignee_site").toString(); + this.postalCode = customerMap.get("postal_code")==null ? "":customerMap.get("postal_code").toString(); + this.consigneeName1 = customerMap.get("consignee_name1")==null ? "":customerMap.get("consignee_name1").toString(); + this.consigneeTelnumber1 = customerMap.get("consignee_telnumber1")==null ? "":customerMap.get("consignee_telnumber1").toString(); + this.consigneeName2 = customerMap.get("consignee_name2")==null ? "":customerMap.get("consignee_name2").toString(); + this.consigneeTelnumber2 = customerMap.get("consignee_telnumber2")==null ? "":customerMap.get("consignee_telnumber2").toString(); + } + + + public JSONObject toCustomerJSON(){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("id",this.id); + jsonObject.put("customerCode",this.customerCode); + jsonObject.put("customerName",this.customerName); + jsonObject.put("customerNatureValue",this.customerNatureValue); + jsonObject.put("customerProvince",this.customerProvince); + jsonObject.put("customerProvinceValue",this.customerProvinceValue); + jsonObject.put("state",this.state); + jsonObject.put("stateValue",this.stateValue); + jsonObject.put("area",this.area); + jsonObject.put("areaId",this.areaId); + jsonObject.put("marketizationCompany",this.marketizationCompany); + jsonObject.put("creditCode",this.creditCode); + jsonObject.put("registeredCapital",this.registeredCapital); + jsonObject.put("legalPerson",this.legalPerson); + jsonObject.put("legalPersonId",this.legalPersonId); + jsonObject.put("legalPersonTelnumber",this.legalPersonTelnumber); + jsonObject.put("contactSite",this.contactSite); + jsonObject.put("consigneeSite",this.consigneeSite); + jsonObject.put("postalCode",this.postalCode); + jsonObject.put("consigneeName1",this.consigneeName1); + jsonObject.put("consigneeTelnumber1",this.consigneeTelnumber1); + jsonObject.put("consigneeName2",this.consigneeName2); + jsonObject.put("consigneeTelnumber2",this.consigneeTelnumber2); + return jsonObject; + } + + + + public String getId(){return id;} + + public void setId(String id){this.id = id ;} + + public String getCustomerCode() { + return customerCode; + } + + public void setCustomerCode(String customerCode) { + this.customerCode = customerCode; + } + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public String getCustomerNature() { + return customerNature; + } + + public void setCustomerNature(String customerNature) { + this.customerNature = customerNature; + } + + public String getCustomerNatureValue() { + return customerNatureValue; + } + + public void setCustomerNatureValue(String customerNatureValue) { + this.customerNatureValue = customerNatureValue; + } + + public String getCustomerProvince() { + return customerProvince; + } + + public void setCustomerProvince(String customerProvince) { + this.customerProvince = customerProvince; + } + + public String getCustomerProvinceValue() { + return customerProvinceValue; + } + + public void setCustomerProvinceValue(String customerProvinceValue) { + this.customerProvinceValue = customerProvinceValue; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getStateValue() { + return stateValue; + } + + public void setStateValue(String stateValue) { + this.stateValue = stateValue; + } + + public String getArea() { + return area; + } + + public void setArea(String area) { + this.area = area; + } + + public long getAreaId() { + return areaId; + } + + public void setAreaId(long areaId) { + this.areaId = areaId; + } + + public String getMarketizationCompany() { + return marketizationCompany; + } + + public void setMarketizationCompany(String marketizationCompany) { + this.marketizationCompany = marketizationCompany; + } + + public String getMarket() { + return market; + } + + public void setMarket(String market) { + this.market = market; + } + + public String getCreditCode() { + return creditCode; + } + + public void setCreditCode(String creditCode) { + this.creditCode = creditCode; + } + + public String getRegisteredCapital() { + return registeredCapital; + } + + public void setRegisteredCapital(String registeredCapital) { + this.registeredCapital = registeredCapital; + } + + public String getLegalPerson() { + return legalPerson; + } + + public void setLegalPerson(String legalPerson) { + this.legalPerson = legalPerson; + } + + public String getLegalPersonId() { + return legalPersonId; + } + + public void setLegalPersonId(String legalPersonId) { + this.legalPersonId = legalPersonId; + } + + public String getLegalPersonTelnumber() { + return legalPersonTelnumber; + } + + public void setLegalPersonTelnumber(String legalPersonTelnumber) { + this.legalPersonTelnumber = legalPersonTelnumber; + } + + public String getContactSite() { + return contactSite; + } + + public void setContactSite(String contactSite) { + this.contactSite = contactSite; + } + + public String getConsigneeSite() { + return consigneeSite; + } + + public void setConsigneeSite(String consigneeSite) { + this.consigneeSite = consigneeSite; + } + + public String getPostalCode() { + return postalCode; + } + + public void setPostalCode(String postalCode) { + this.postalCode = postalCode; + } + + public String getConsigneeName1() { + return consigneeName1; + } + + public void setConsigneeName1(String consigneeName1) { + this.consigneeName1 = consigneeName1; + } + + public String getConsigneeTelnumber1() { + return consigneeTelnumber1; + } + + public void setConsigneeTelnumber1(String consigneeTelnumber1) { + this.consigneeTelnumber1 = consigneeTelnumber1; + } + + public String getConsigneeName2() { + return consigneeName2; + } + + public void setConsigneeName2(String consigneeName2) { + this.consigneeName2 = consigneeName2; + } + + public String getConsigneeTelnumber2() { + return consigneeTelnumber2; + } + + public void setConsigneeTelnumber2(String consigneeTelnumber2) { + this.consigneeTelnumber2 = consigneeTelnumber2; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdDeptBo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdDeptBo.java new file mode 100644 index 0000000..acf782a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdDeptBo.java @@ -0,0 +1,470 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.dao.ISrcAccountDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcDepartmentDao; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.OrgConstants; +import com.seeyon.ctp.organization.bo.*; + +import java.util.Map; + +public class ThirdDeptBo { + + private ISrcDepartmentDao srcDepartmentDao; + public void setSrcDepartmentDao(ISrcDepartmentDao ordinaryDao) { + this.srcDepartmentDao = srcDepartmentDao; + } + public ISrcDepartmentDao getSrcDepartmentDao() { + if (this.srcDepartmentDao == null) { + this.srcDepartmentDao = ((ISrcDepartmentDao)AppContext.getBean("srcDepartmentDao")); + } + return srcDepartmentDao; + } + + private ISrcAccountDao srcAccountDao; + public void setSrcAccountDao(ISrcAccountDao srcAccountDao) { + this.srcAccountDao = srcAccountDao; + } + public ISrcAccountDao getSrcAccountDao() { + if (this.srcAccountDao == null) { + this.srcAccountDao = ((ISrcAccountDao)AppContext.getBean("srcAccountDao")); + } + return srcAccountDao; + } + + private long orgAccountId; + private long id; + private String name; + private String code; + private String sortId; + private String shortName; + private boolean isDeleted; + private boolean enabled; + private String externalType; + private String status; + private String description; + private String path; + private String secondName; + private String isInternal; + private boolean isGroup; + private OrgConstants.UnitType type; + private long superior; + private String superiorName; + private String createrId; + private String entityType; + private int state; + + public ThirdDeptBo(V3xOrgAccount v3xOrgAccount) { + this.id = v3xOrgAccount.getId(); +// this.orgAccountId = Long.parseLong(companyId); + this.orgAccountId = v3xOrgAccount.getOrgAccountId(); + this.name = v3xOrgAccount.getName(); + this.code = v3xOrgAccount.getCode(); + this.sortId = v3xOrgAccount.getSortId() + ""; + this.shortName = v3xOrgAccount.getShortName(); + this.isDeleted = v3xOrgAccount.getIsDeleted(); + this.enabled = v3xOrgAccount.getEnabled(); + this.externalType = v3xOrgAccount.getEntityType(); + this.status = v3xOrgAccount.getStatus() + ""; + this.path = v3xOrgAccount.getPath(); + this.description = v3xOrgAccount.getDescription(); + this.secondName = v3xOrgAccount.getSecondName(); + this.isGroup = v3xOrgAccount.getIsGroup(); + this.type = v3xOrgAccount.getType(); + this.superior = v3xOrgAccount.getSuperior(); + this.superiorName = v3xOrgAccount.getSuperiorName(); + this.entityType = v3xOrgAccount.getEntityType(); + } + + public ThirdDeptBo(V3xOrgDepartment v3xOrgDepartment) { + this.id = v3xOrgDepartment.getId(); +// this.orgAccountId = Long.parseLong(companyId); + this.orgAccountId = v3xOrgDepartment.getOrgAccountId(); + this.name = v3xOrgDepartment.getName(); + this.code = v3xOrgDepartment.getCode(); + this.sortId = v3xOrgDepartment.getSortId() + ""; + this.shortName = v3xOrgDepartment.getShortName(); + this.isDeleted = v3xOrgDepartment.getIsDeleted(); + this.enabled = v3xOrgDepartment.getEnabled(); + this.externalType = v3xOrgDepartment.getEntityType(); + this.status = v3xOrgDepartment.getStatus() + ""; + this.description = v3xOrgDepartment.getDescription(); + this.secondName = v3xOrgDepartment.getSecondName(); + this.isGroup = v3xOrgDepartment.getIsGroup(); + this.type = v3xOrgDepartment.getType(); + this.superior = v3xOrgDepartment.getSuperior(); + this.superiorName = v3xOrgDepartment.getSuperiorName(); + this.entityType = v3xOrgDepartment.getEntityType(); + } + + public long getOrgAccountId() { + return this.orgAccountId; + } + + public void setOrgAccountId(long orgAccountId) { + this.orgAccountId = orgAccountId; + } + + public long getId() { + return this.id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return this.code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getSortId() { + return this.sortId; + } + + public void setSortId(String sortId) { + this.sortId = sortId; + } + + public String getShortName() { + return this.shortName; + } + + public void setShortName(String shortName) { + this.shortName = shortName; + } + + public boolean getIsDeleted() { + return this.isDeleted; + } + + public void setIsDeleted(boolean isDeleted) { + this.isDeleted = isDeleted; + } + + public boolean getEnabled() { + return this.enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public String getExternalType() { + return this.externalType; + } + + public void setExternalType(String externalType) { + this.externalType = externalType; + } + + public String getStatus() { + return this.status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDescription() { + return this.description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getPath() { + return this.path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getSecondName() { + return this.secondName; + } + + public void setSecondName(String secondName) { + this.secondName = secondName; + } + + public String getIsInternal() { + return this.isInternal; + } + + public void setIsInternal(String isInternal) { + this.isInternal = isInternal; + } + + public boolean getIsGroup() { + return this.isGroup; + } + + public void setIsGroup(boolean isGroup) { + this.isGroup = isGroup; + } + + public OrgConstants.UnitType getType() { + return this.type; + } + + public void setType(OrgConstants.UnitType type) { + this.type = type; + } + + public long getSuperior() { + return this.superior; + } + + public void setSuperior(long superior) { + this.superior = superior; + } + + public String getSuperiorName() { + return this.superiorName; + } + + public void setSuperiorName(String superiorName) { + this.superiorName = superiorName; + } + + public String getCreaterId() { + return this.createrId; + } + + public void setCreaterId(String createrId) { + this.createrId = createrId; + } + + public String getEntityType() { + return this.entityType; + } + + public void setEntityType(String entityType) { + this.entityType = entityType; + } + + public ThirdDeptBo() { + } + + @Override + public String toString() { + return "ThirdDeptBo{" + + "orgAccountId=" + orgAccountId + + ", id=" + id + + ", name='" + name + '\'' + + ", code='" + code + '\'' + + ", sortId='" + sortId + '\'' + + ", shortName='" + shortName + '\'' + + ", isDeleted=" + isDeleted + + ", enabled=" + enabled + + ", externalType='" + externalType + '\'' + + ", status='" + status + '\'' + + ", description='" + description + '\'' + + ", path='" + path + '\'' + + ", secondName='" + secondName + '\'' + + ", isInternal='" + isInternal + '\'' + + ", isGroup=" + isGroup + + ", type=" + type + + ", superior=" + superior + + ", superiorName='" + superiorName + '\'' + + ", createrId='" + createrId + '\'' + + ", entityType='" + entityType + '\'' + + ", state=" + state + + '}'; + } + + +// { +// "id":"单位ID", +// "name":"单位名称", +// "code":"单位编码", +// "type":"类型", +// "isEnabled":"是否启用", +// "path":"单位路径", +// "superior":"上级单位ID", +// "superiorName":"上级单位名称", +// "orgAccountId":"所属单位ID", +// "orgAccountName":"所属单位名称" +// } +// 创建法人架构单位信息 + public JSONObject financeAccount (V3xOrgAccount v3xOrgAccount ) throws BusinessException { + JSONObject orgAccount = new JSONObject(); + orgAccount.put("id",v3xOrgAccount.getId()); + orgAccount.put("name",v3xOrgAccount.getName()); + orgAccount.put("code",v3xOrgAccount.getCode()); + orgAccount.put("type","Account"); +// 查询人员所在单位对象 + orgAccount.put("orgAccountId",v3xOrgAccount.getId()); + orgAccount.put("orgAccountName",v3xOrgAccount.getName()); + + orgAccount.put("isEnabled",v3xOrgAccount.getEnabled()); + orgAccount.put("sortId",v3xOrgAccount.getSortId()); + + String accountPath = v3xOrgAccount.getPath(); + orgAccount.put("path",accountPath); + String superAccountPath = accountPath.substring(0,accountPath.length()-4); + if("0000".equals(superAccountPath)){ +// 当前是一级部门设置上级ID时设置为1 + orgAccount.put("superior","1"); + orgAccount.put("superiorName","集团"); + }else{ + Map superAccount = getSrcAccountDao().getAccountByPath(superAccountPath); + orgAccount.put("superior",superAccount.get("id")); + orgAccount.put("superiorName",superAccount.get("name")); + } + return orgAccount; + } + +// 创建法人架构单位信息 + public JSONObject defaultRootDirectory () { + JSONObject orgAccount = new JSONObject(); + orgAccount.put("id","1"); + orgAccount.put("name","稻花香"); + orgAccount.put("code",""); + orgAccount.put("type","Account"); +// 查询人员所在单位对象 + orgAccount.put("orgAccountId","1"); + orgAccount.put("orgAccountName","daohuaxiang"); + orgAccount.put("isEnabled",true); + orgAccount.put("sortId","1"); + orgAccount.put("path","0000"); + orgAccount.put("superior",""); + return orgAccount; + } + + /** + * 创建特殊单位json对象 + * @param v3xOrgAccount + * @param path + * @param superAccount + * @return + */ + public JSONObject specialAccount(V3xOrgAccount v3xOrgAccount,String path,V3xOrgAccount superAccount){ + JSONObject orgAccount = new JSONObject(); + orgAccount.put("id",v3xOrgAccount.getId()); + orgAccount.put("name",v3xOrgAccount.getName()); + orgAccount.put("code",v3xOrgAccount.getCode()); + orgAccount.put("type","Account"); +// 查询人员所在单位对象 + orgAccount.put("orgAccountId",v3xOrgAccount.getId()); + orgAccount.put("orgAccountName",v3xOrgAccount.getName()); + + orgAccount.put("isEnabled",v3xOrgAccount.getEnabled()); + orgAccount.put("sortId",v3xOrgAccount.getSortId()); + + orgAccount.put("path",path); + orgAccount.put("superior",superAccount.getId()); + orgAccount.put("superiorName",superAccount.getName()); + return orgAccount; + } + + + // { +// "id":"部门ID", +// "name":"部门名称", +// "code":"部门编码", +// "type":"类型", +// "isEnabled":"是否启用", +// "path":"部门路径", +// "superior":"上级单位或者部门ID", +// "superiorName":"上级单位或者部门名称", +// "orgAccountId":"所属单位ID", +// "orgAccountName":"所属单位名称" +// } +// 创建法人架构部门信息 + public JSONObject financeDepartment (V3xOrgDepartment v3xOrgDepartment) throws BusinessException { + JSONObject orgDepartment = new JSONObject(); +// 设置部门基本信息 + orgDepartment.put("id",v3xOrgDepartment.getId()); + orgDepartment.put("name",v3xOrgDepartment.getName()); + orgDepartment.put("code",v3xOrgDepartment.getCode()); + orgDepartment.put("type","Department"); +// 部门是否启用 + orgDepartment.put("isEnabled",v3xOrgDepartment.getEnabled()); + orgDepartment.put("sortId",v3xOrgDepartment.getSortId()); +// 部门所属单位 + long orgAccountId = v3xOrgDepartment.getOrgAccountId(); + Map account = getSrcAccountDao().getAccountById(orgAccountId+""); + orgDepartment.put("orgAccountId",account.get("id")); + orgDepartment.put("orgAccountName",account.get("name")); +// 设置部门路径 + String departmentPath = v3xOrgDepartment.getPath(); + orgDepartment.put("path",departmentPath); +// 判断上级部门是否为单位,如果为单位则直接使用单位信息,如果不为单位则查询上级部门信息 + String superDepartmentPath = departmentPath.substring(0,departmentPath.length()-4); + System.out.println("当前部门所属单位层级为"+account.get("path")+"上级层级为"+superDepartmentPath); + if(account.get("path").toString().equals(superDepartmentPath)){ + orgDepartment.put("superior",account.get("id")); + orgDepartment.put("superiorName",account.get("name")); + }else{ + Map superDepartment = getSrcDepartmentDao().getDepartmentByPath(superDepartmentPath); + System.out.println(superDepartment); + orgDepartment.put("superior",superDepartment.get("id")); + orgDepartment.put("superiorName",superDepartment.get("name")); + } + + return orgDepartment; + } + + + /** + * 创建特殊单位json对象 + * @param v3xOrgDepartment + * @param path + * @return + */ + public JSONObject specialDepartment (V3xOrgDepartment v3xOrgDepartment,String path) throws BusinessException { + JSONObject orgDepartment = new JSONObject(); +// 设置部门基本信息 + orgDepartment.put("id",v3xOrgDepartment.getId()); + orgDepartment.put("name",v3xOrgDepartment.getName()); + orgDepartment.put("code",v3xOrgDepartment.getCode()); + orgDepartment.put("type","Department"); +// 部门是否启用 + orgDepartment.put("isEnabled",v3xOrgDepartment.getEnabled()); + orgDepartment.put("sortId",v3xOrgDepartment.getSortId()); +// 部门所属单位 + long orgAccountId = v3xOrgDepartment.getOrgAccountId(); + Map account = getSrcAccountDao().getAccountById(orgAccountId+""); + orgDepartment.put("orgAccountId",account.get("id")); + orgDepartment.put("orgAccountName",account.get("name")); +// 设置部门路径 + String departmentPath = v3xOrgDepartment.getPath(); + int replaceLength = path.length(); + String result = path + departmentPath.substring(replaceLength); + orgDepartment.put("path",result); +// 判断上级部门是否为单位,如果为单位则直接使用单位信息,如果不为单位则查询上级部门信息 + String superDepartmentPath = departmentPath.substring(0,departmentPath.length()-4); + System.out.println("当前部门所属单位层级为"+account.get("path")+"上级层级为"+superDepartmentPath); + if(account.get("path").toString().equals(superDepartmentPath)){ + orgDepartment.put("superior",account.get("id")); + orgDepartment.put("superiorName",account.get("name")); + }else{ + Map superDepartment = getSrcDepartmentDao().getDepartmentByPath(superDepartmentPath); + System.out.println(superDepartment); + orgDepartment.put("superior",superDepartment.get("id")); + orgDepartment.put("superiorName",superDepartment.get("name")); + } + + return orgDepartment; + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdLevelBo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdLevelBo.java new file mode 100644 index 0000000..4e85787 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdLevelBo.java @@ -0,0 +1,120 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.seeyon.ctp.organization.bo.V3xOrgLevel; + +public class ThirdLevelBo { + + private long id; + private String name; + private String code; + private long orgAccountId; + private String description; + private long sortId; + private boolean isDeleted; + private boolean enabled; + private int status; + + public ThirdLevelBo(){ + + } + + public ThirdLevelBo(V3xOrgLevel v3xOrgLevel){ + this.id = v3xOrgLevel.getId(); + this.name = v3xOrgLevel.getName(); + this.code = v3xOrgLevel.getCode(); + this.orgAccountId = v3xOrgLevel.getOrgAccountId(); + this.description = v3xOrgLevel.getDescription(); + this.sortId = v3xOrgLevel.getSortId(); + this.isDeleted = v3xOrgLevel.getIsDeleted(); + this.enabled = v3xOrgLevel.getEnabled(); + this.status = v3xOrgLevel.getStatus(); + } + + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public long getOrgAccountId() { + return orgAccountId; + } + + public void setOrgAccountId(long orgAccountId) { + this.orgAccountId = orgAccountId; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public long getSortId() { + return sortId; + } + + public void setSortId(long sortId) { + this.sortId = sortId; + } + + public boolean getIsDeleted() { + return isDeleted; + } + + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } + + public boolean getEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + @Override + public String toString() { + return "ThirdLevelBo{" + + "id=" + id + + ", name='" + name + '\'' + + ", code='" + code + '\'' + + ", orgAccountId=" + orgAccountId + + ", description='" + description + '\'' + + ", sortId=" + sortId + + ", isDeleted=" + isDeleted + + ", enabled=" + enabled + + ", status=" + status + + '}'; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdMemberBo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdMemberBo.java new file mode 100644 index 0000000..7c21afc --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdMemberBo.java @@ -0,0 +1,958 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.dao.ISyncFvDao; +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.*; +import com.seeyon.ctp.organization.manager.OrgManager; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class ThirdMemberBo { + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + private OrgManager orgManager; + public void setOrgManager(OrgManager orgManager) { + this.orgManager = orgManager; + } + public OrgManager getOrgManager() { + if (orgManager == null) { + orgManager = (OrgManager) AppContext.getBean("orgManager"); + } + return orgManager; + } + + private ISyncFvDao syncFvDao; + public void setSyncFvDao(ISyncFvDao syncFvDao) { + this.syncFvDao = syncFvDao; + } + public ISyncFvDao getSyncFvDao() { + if (syncFvDao == null) { + syncFvDao = (ISyncFvDao) AppContext.getBean("syncFvDao"); + } + return syncFvDao; + } + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) { + this.enumManagerNew = enumManagerNew; + } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) { + enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); + } + return enumManagerNew; + } + + private long orgAccountId; + private long id; + private String name; + private String code; + private long deptId; + private long postId; + private long levelId; + private String loginName; + private int state; + private boolean isDeleted; + private boolean enabled; + private int type; + private JSONArray secondPosts; + private String securityLevel; + private int gender; + private String birthday; + private String sortId; + private String hiredate; + private String telNumber; + + public int getGender() { + return gender; + } + + public void setGender(int gender) {gender = gender;} + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) {birthday = birthday;} + + public String getSortId() { + return sortId; + } + + public void setSortId(String sortId) {sortId = sortId;} + + public String getHiredate() { + return hiredate; + } + + public void setHiredate(String hiredate) {hiredate = hiredate;} + + public String getTelNumber() { + return telNumber; + } + + public void setTelNumber(String telNumber) {telNumber = telNumber;} + + public boolean isDeleted() { + return isDeleted; + } + + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public JSONArray getSecondPosts() { + return secondPosts; + } + + public void setSecondPosts(JSONArray secondPosts) { + this.secondPosts = secondPosts; + } + + public long getOrgAccountId() { + return orgAccountId; + } + + public void setOrgAccountId(long orgAccountId) { + this.orgAccountId = orgAccountId; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public long getDeptId() { + return deptId; + } + + public void setDeptId(long deptId) { + this.deptId = deptId; + } + + public long getPostId() { + return postId; + } + + public void setPostId(long postId) { + this.postId = postId; + } + + public long getLevelId() { + return levelId; + } + + public void setLevelId(long levelId) { + this.levelId = levelId; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public String getSecurityLevel(){ return securityLevel;} + + public void setSecurityLevel(String securityLevel){this.securityLevel = securityLevel;} + + public ThirdMemberBo() { + } + + public void setLoginName(String loginName){ + this.loginName = loginName; + } + + public String getLoginName(){ + return loginName; + } + + public ThirdMemberBo(V3xOrgMember v3xOrgMember,List memberPosts) throws BusinessException { + this.id = v3xOrgMember.getId(); + this.orgAccountId = v3xOrgMember.getOrgAccountId(); + V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(orgAccountId); + String accountName = v3xOrgAccount.getName(); + this.name = v3xOrgMember.getName(); + this.code = v3xOrgMember.getCode(); + this.deptId = v3xOrgMember.getOrgDepartmentId(); + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(deptId); + String deptName = v3xOrgDepartment.getName(); + this.postId = v3xOrgMember.getOrgPostId(); + V3xOrgPost v3xOrgPost = getOrgManager().getPostById(postId); + String postName = v3xOrgPost.getName(); + if("知与行".equals(accountName)){ + if("财务部".equals(deptName)){ + this.securityLevel = "10"; + }else{ + this.securityLevel = "9"; + } + }else{ + if("市场部".equals(deptName)&& "销售人员".equals(postName)){ + this.securityLevel = "8"; + }else if ("销售部".equals(deptName) && "客户".equals(postName)){ + this.securityLevel = "0"; + }else if ("财务部".equals(deptName) && "商务专员".equals(postName)){ + this.securityLevel = "10"; + }else if ("综合办".equals(deptName) && "销售公司负责人".equals(postName)){ + this.securityLevel = "10"; + }else{ +// 其他情况提供1的安全级别 + this.securityLevel = "1"; + } + } +// long memberPostId = v3xOrgMember.getOrgPostId(); +// String banchmarkPostId = getSyncFvDao().queryBanchmarkPostIdByPostId(memberPostId + ""); + this.levelId = v3xOrgMember.getOrgLevelId(); + this.loginName = v3xOrgMember.getLoginName(); + this.state = v3xOrgMember.getState(); + this.isDeleted = v3xOrgMember.getIsDeleted(); + this.enabled = v3xOrgMember.getEnabled(); + this.type = v3xOrgMember.getType(); + this.sortId = v3xOrgMember.getSortId().toString(); + this.gender = v3xOrgMember.getGender(); + Date birthdayDate = v3xOrgMember.getBirthday(); + if(birthdayDate!=null){ + this.birthday = sdf.format(birthdayDate); + } + Date hiredateTime = v3xOrgMember.getHiredate(); + if(hiredateTime!=null){ + this.hiredate = sdf.format(hiredateTime); + } + this.telNumber = v3xOrgMember.getTelNumber(); + JSONArray newSecondPosts = new JSONArray(); + if (memberPosts.size() > 0) { + System.out.println("副岗个数"+memberPosts.size()); + for (int nu = 0; nu < memberPosts.size(); nu++) { + JSONObject newSecondPost = new JSONObject(); + MemberPost secondPost = memberPosts.get(nu); + System.out.println("第"+nu+"个副岗"+secondPost.getPostId()); + newSecondPost.put("postId", secondPost.getPostId()); + newSecondPost.put("orgAccountId", secondPost.getOrgAccountId()); + newSecondPost.put("deptId", secondPost.getDepId()); + newSecondPost.put("memberId", secondPost.getMemberId()); + newSecondPosts.add(newSecondPost); + } + } + this.secondPosts = newSecondPosts; + } + + public ThirdMemberBo(V3xOrgMember v3xOrgMember,String type) throws BusinessException { + this.id = v3xOrgMember.getId(); + this.orgAccountId = v3xOrgMember.getOrgAccountId(); + this.name = v3xOrgMember.getName(); + this.code = v3xOrgMember.getCode(); + this.deptId = v3xOrgMember.getOrgDepartmentId(); + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(deptId); + String deptName = v3xOrgDepartment.getName(); + if(deptName.contains("财务") || deptName.contains("综合办")){ + this.securityLevel = "10"; + }else if (deptName.contains("市场部")){ + this.securityLevel = "8"; + }else{ + this.securityLevel = "0"; + } + long memberPostId = v3xOrgMember.getOrgPostId(); + String banchmarkPostId = getSyncFvDao().queryBanchmarkPostIdByPostId(memberPostId + ""); + this.postId = Long.parseLong(banchmarkPostId); + this.levelId = v3xOrgMember.getOrgLevelId(); + this.loginName = v3xOrgMember.getLoginName(); + if(v3xOrgMember.getState()==2){ + this.state = 5; + }else{ + this.state = 1; + } +// 离职state定义为5 + this.isDeleted = v3xOrgMember.getIsDeleted(); + this.enabled = v3xOrgMember.getEnabled(); + this.type = v3xOrgMember.getType(); + this.gender = v3xOrgMember.getGender(); + Date birthdayDate = v3xOrgMember.getBirthday(); + if(birthdayDate!=null){ + this.birthday = sdf.format(birthdayDate); + } + Date hiredateTime = v3xOrgMember.getHiredate(); + if(hiredateTime!=null){ + this.hiredate = sdf.format(hiredateTime); + } + this.telNumber = v3xOrgMember.getTelNumber(); + JSONArray newSecondPosts = new JSONArray(); + List secondPosts = v3xOrgMember.getSecond_post(); + if (secondPosts.size() > 0) { + for (int nu = 0; nu < secondPosts.size(); nu++) { + JSONObject newSecondPost = new JSONObject(); + MemberPost secondPost = secondPosts.get(nu); + newSecondPost.put("postId", secondPost.getPostId()); + newSecondPost.put("orgAccountId", secondPost.getOrgAccountId()); + newSecondPost.put("deptId", secondPost.getDepId()); + newSecondPost.put("memberId", secondPost.getMemberId()); + newSecondPosts.add(newSecondPost); + } + } + this.secondPosts = newSecondPosts; + } + + @Override + public String toString() { + return "ThirdMemberBo{" + + ", orgAccountId=" + orgAccountId + + ", id=" + id + + ", name='" + name + '\'' + + ", code='" + code + '\'' + + ", deptId=" + deptId + + ", postId=" + postId + + ", levelId=" + levelId + + ", loginName='" + loginName + '\'' + + ", state=" + state + + ", isDeleted=" + isDeleted + + ", enabled=" + enabled + + ", type=" + type + + ", gender=" + gender + + ", birthday=" + birthday + + ", sortId=" + sortId + + ", hiredate=" + hiredate + + ", telNumber=" + telNumber + + ", secondPosts=" + secondPosts + + ", securityLevel='" + securityLevel + '\'' + + '}'; + } + + +// { +// * "id":"人员ID", +// * "name":"人员名称", +// * "code":""人员编码, +// * "orgAccountId":"单位ID", +// * "orgAccountName":"单位名称", +// * "orgDepartmentId":"部门ID", +// * "orgDepartmentName":"部门名称", +// * "isEnabled":"是否启用", +// * "telNumber":"手机号", +// * "loginName":"登录名", +// * "orgPostId":"岗位ID", +// * "orgPostName":"岗位名称", +// * "orgLevelId":"职务级别ID", +// * "orgLevelName":"职务级别名称", +// * "birthday":"出生日期", +// * "gender":"性别",-1未指定,1男,2女 +// * "hiredate":"入职时间" +// * } +// 法人架构人员封装 + public JSONObject financeMember (V3xOrgMember v3xOrgMember ) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",v3xOrgMember.getId()); + member.put("name",v3xOrgMember.getName()); + member.put("code",v3xOrgMember.getCode()); +// 查询人员所在单位对象 + V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(v3xOrgMember.getOrgAccountId()); + member.put("orgAccountId",""); + member.put("orgAccountName",""); + if(v3xOrgAccount!=null){ + member.put("orgAccountId",v3xOrgAccount.getId()); + member.put("orgAccountName",v3xOrgAccount.getName()); + } + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(v3xOrgMember.getOrgDepartmentId()); + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + if(v3xOrgDepartment!=null){ + member.put("orgDepartmentId",v3xOrgDepartment.getId()); + member.put("orgDepartmentName",v3xOrgDepartment.getName()); + } + V3xOrgPost v3xOrgPost = getOrgManager().getPostById(v3xOrgMember.getOrgPostId()); + member.put("orgPostId",""); + member.put("orgPostName",""); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + V3xOrgLevel v3xOrgLevel = getOrgManager().getLevelById(v3xOrgMember.getOrgLevelId()); + member.put("orgLevelId",""); + member.put("orgLevelName",""); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + member.put("isEnabled",v3xOrgMember.getEnabled()); + member.put("telNumber",v3xOrgMember.getTelNumber()); + member.put("loginName",v3xOrgMember.getLoginName()); + member.put("birthday",""); + if(v3xOrgMember.getBirthday() != null){ + member.put("birthday",sdf.format(v3xOrgMember.getBirthday())); + } + member.put("hiredate",""); + if(v3xOrgMember.getHiredate() != null){ + member.put("hiredate",sdf.format(v3xOrgMember.getHiredate())); + } + member.put("gender",v3xOrgMember.getGender()); + return member; + } + + +// { +// * "id":"人员ID", +// * "name":"人员名称", +// * "code":""人员编码, +// * "orgAccountId":"单位ID", +// * "orgAccountName":"单位名称", +// * "orgDepartmentId":"部门ID", +// * "companyId":"公司ID", +// * "companyName":"公司名称", +// * "orgDepartmentName":"部门名称", +// * "isEnabled":"是否启用", +// * "telNumber":"手机号", +// * "loginName":"登录名", +// * "orgPostId":"岗位ID", +// * "orgPostName":"岗位名称", +// * "orgLevelId":"职务级别ID", +// * "orgLevelName":"职务级别名称", +// * "birthday":"出生日期", +// * "gender":"性别",-1未指定,1男,2女 +// * "hiredate":"入职时间" +// * } +// 业务架构人员封装 + public JSONObject operationMember (V3xOrgMember v3xOrgMember) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",v3xOrgMember.getId()); + member.put("name",v3xOrgMember.getName()); + member.put("code",v3xOrgMember.getCode()); +// 查询人员所在单位对象 + V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(v3xOrgMember.getOrgAccountId()); + member.put("orgAccountId",""); + member.put("orgAccountName",""); + if(v3xOrgAccount!=null){ + member.put("orgAccountId",v3xOrgAccount.getId()); + member.put("orgAccountName",v3xOrgAccount.getName()); + } + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(v3xOrgMember.getOrgDepartmentId()); + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + if(v3xOrgDepartment!=null){ + member.put("orgDepartmentId",v3xOrgDepartment.getId()); + member.put("orgDepartmentName",v3xOrgDepartment.getName()); + } + V3xOrgPost v3xOrgPost = getOrgManager().getPostById(v3xOrgMember.getOrgPostId()); + member.put("orgPostId",""); + member.put("orgPostName",""); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + V3xOrgLevel v3xOrgLevel = getOrgManager().getLevelById(v3xOrgMember.getOrgLevelId()); + member.put("orgLevelId",""); + member.put("orgLevelName",""); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + member.put("isEnabled",v3xOrgMember.getEnabled()); + member.put("telNumber",v3xOrgMember.getTelNumber()); + member.put("loginName",v3xOrgMember.getLoginName()); + member.put("birthday",""); + if(v3xOrgMember.getBirthday() != null){ + member.put("birthday",sdf.format(v3xOrgMember.getBirthday())); + } + member.put("hiredate",""); + if(v3xOrgMember.getHiredate() != null){ + member.put("hiredate",sdf.format(v3xOrgMember.getHiredate())); + } + member.put("gender",v3xOrgMember.getGender()); + member.put("companyCode",""); + member.put("companyName",""); + member.put("companyCredit",""); + return member; + } + + + // { +// * "id":"人员ID", +// * "name":"人员名称", +// * "code":""人员编码, +// * "orgAccountId":"单位ID", +// * "orgAccountName":"单位名称", +// * "orgDepartmentId":"部门ID", +// * "companyId":"公司ID", +// * "companyName":"公司名称", +// * "orgDepartmentName":"部门名称", +// * "isEnabled":"是否启用", +// * "telNumber":"手机号", +// * "loginName":"登录名", +// * "orgPostId":"岗位ID", +// * "orgPostName":"岗位名称", +// * "orgLevelId":"职务级别ID", +// * "orgLevelName":"职务级别名称", +// * "birthday":"出生日期", +// * "gender":"性别",-1未指定,1男,2女 +// * "hiredate":"入职时间" +// * } +// 档案表人员封装 + public JSONObject operationMember (Map fileMember) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",fileMember.get("id")); + member.put("name",fileMember.get("name")); + member.put("code",fileMember.get("code")); +// 查询人员所在单位对 + member.put("orgAccountId",""); + member.put("orgAccountName",""); + if(fileMember.get("org_account_id")!=null){ + V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(Long.parseLong(fileMember.get("org_account_id").toString())); + if(v3xOrgAccount!=null){ + member.put("orgAccountId",v3xOrgAccount.getId()); + member.put("orgAccountName",v3xOrgAccount.getName()); + } + } + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + if(fileMember.get("org_department_id")!=null){ + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(Long.parseLong(fileMember.get("org_department_id").toString())); + if(v3xOrgDepartment!=null){ + member.put("orgDepartmentId",v3xOrgDepartment.getId()); + member.put("orgDepartmentName",v3xOrgDepartment.getName()); + } + } + member.put("orgPostId",""); + member.put("orgPostName",""); + if(fileMember.get("org_post_id")!=null){ + V3xOrgPost v3xOrgPost = getOrgManager().getPostById(Long.parseLong(fileMember.get("org_post_id").toString())); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + } + member.put("orgLevelId",""); + member.put("orgLevelName",""); + if(fileMember.get("org_level_id")!=null){ + V3xOrgLevel v3xOrgLevel = getOrgManager().getLevelById(Long.parseLong(fileMember.get("org_level_id").toString()) ); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + } + +// member.put("isEnabled",fileMember.get("is_enable")); + String memberState = fileMember.get("is_enable").toString(); + CtpEnumItem memberStateEnum = getEnumManagerNew().getEnumItem(Long.parseLong(memberState)); + if("在职,试用,待岗".contains(memberStateEnum.getShowvalue())){ + member.put("isEnabled",true); + }else{ + member.put("isEnabled",false); + } + member.put("telNumber",fileMember.get("telnumber")); + member.put("loginName",fileMember.get("login_name")); + member.put("birthday",""); + if(fileMember.get("birthday") != null){ + member.put("birthday",sdf.format(fileMember.get("birthday"))); + } + member.put("hiredate",""); + if(fileMember.get("hiredate") != null){ + member.put("hiredate",sdf.format(fileMember.get("hiredate"))); + } + if(fileMember.get("gender")==null){ + member.put("gender","-1"); + }else{ + String genderId = fileMember.get("gender").toString(); + CtpEnumItem genderEnum = getEnumManagerNew().getEnumItem(Long.parseLong(genderId)); + if("0".equals(genderEnum.getEnumvalue())){ + member.put("gender","1"); + }else if("1".equals(genderEnum.getEnumvalue())){ + member.put("gender","2"); + }else{ + member.put("gender","-1"); + } + } +// member.put("gender",fileMember.get("gender")); + member.put("companyCode",""); + member.put("companyName",""); + member.put("companyCredit",""); + return member; + } + +// { +// * "id":"人员ID", +// * "name":"人员名称", +// * "code":""人员编码, +// * "orgAccountId":"单位ID", +// * "orgAccountName":"单位名称", +// * "orgDepartmentId":"部门ID", +// * "companyId":"公司ID", +// * "companyName":"公司名称", +// * "orgDepartmentName":"部门名称", +// * "isEnabled":"是否启用", +// * "telNumber":"手机号", +// * "loginName":"登录名", +// * "orgPostId":"岗位ID", +// * "orgPostName":"岗位名称", +// * "orgLevelId":"职务级别ID", +// * "orgLevelName":"职务级别名称", +// * "birthday":"出生日期", +// * "gender":"性别",-1未指定,1男,2女 +// * "hiredate":"入职时间" +// * } +// 业务架构业代人员封装 + public JSONObject operationServiceAgentMember(Map serviceAgentMember) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",serviceAgentMember.get("member_id")); + member.put("name",serviceAgentMember.get("member_name")); + member.put("code",serviceAgentMember.get("member_code")); + member.put("companyCode",""); + member.put("companyName",""); + member.put("companyCredit",""); +// 查询人员所在单位对象 + member.put("orgAccountId",""); + member.put("orgAccountName",""); + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + if(serviceAgentMember.get("department_id")!=null){ + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(Long.parseLong(serviceAgentMember.get("department_id").toString())); + member.put("orgDepartmentId",v3xOrgDepartment.getId()); + member.put("orgDepartmentName",v3xOrgDepartment.getName()); + + V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(v3xOrgDepartment.getOrgAccountId()); + if(v3xOrgAccount!=null){ + member.put("orgAccountId",v3xOrgAccount.getId()); + member.put("orgAccountName",v3xOrgAccount.getName()); + } + } + member.put("orgPostId",""); + member.put("orgPostName",""); + if(serviceAgentMember.get("yd_post_id")!=null){ + String ydPostId = serviceAgentMember.get("yd_post_id").toString(); + V3xOrgPost ydPost = orgManager.getPostById(Long.parseLong(ydPostId)); + member.put("orgPostId",ydPost.getId().toString()); + member.put("orgPostName",ydPost.getName()); + } + member.put("orgLevelId",""); + member.put("orgLevelName","业代"); + String memberState = serviceAgentMember.get("is_enabled").toString(); + CtpEnumItem memberStateEnum = getEnumManagerNew().getEnumItem(Long.parseLong(memberState)); + if("在职,试用,待岗".contains(memberStateEnum.getShowvalue())){ + member.put("isEnabled",true); + }else{ + member.put("isEnabled",false); + } + member.put("telNumber",serviceAgentMember.get("telnember")); + member.put("loginName",serviceAgentMember.get("telnember")); + member.put("birthday",""); + if(serviceAgentMember.get("birthday") != null){ + if (serviceAgentMember.get("birthday") instanceof Date) { + Date birthday = (Date) serviceAgentMember.get("birthday"); + member.put("birthday",sdf.format(birthday)); + } + } + member.put("hiredate",""); + if(serviceAgentMember.get("gender")==null){ + member.put("gender","-1"); + }else{ + String genderId = serviceAgentMember.get("gender").toString(); + CtpEnumItem genderEnum = getEnumManagerNew().getEnumItem(Long.parseLong(genderId)); + if("0".equals(genderEnum.getEnumvalue())){ + member.put("gender","1"); + }else if("1".equals(genderEnum.getEnumvalue())){ + member.put("gender","2"); + }else{ + member.put("gender","-1"); + } + } + return member; + } + + + public JSONObject operationMarketingMember (V3xOrgMember v3xOrgMember,Map clientTable) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",v3xOrgMember.getId()); + member.put("name",v3xOrgMember.getName()); + member.put("code",v3xOrgMember.getCode()); + // 默认营销门户 + member.put("orgAccountId","-9194677677107822293"); + member.put("orgAccountName","营销门户"); +// 添加部门信息 + if(clientTable.get("area_dept")!=null){ + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(Long.parseLong(clientTable.get("area_dept").toString())); + member.put("orgDepartmentId",v3xOrgDepartment.getId()); + member.put("orgDepartmentName",v3xOrgDepartment.getName()); + } + long postId = v3xOrgMember.getOrgPostId(); + V3xOrgPost v3xOrgPost = orgManager.getPostById(postId); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + long levelId = v3xOrgMember.getOrgLevelId(); + V3xOrgLevel v3xOrgLevel = orgManager.getLevelById(levelId); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + + member.put("isEnabled",v3xOrgMember.getEnabled()); + member.put("telNumber",v3xOrgMember.getTelNumber()); + member.put("loginName",v3xOrgMember.getLoginName()); + member.put("birthday",""); + if(v3xOrgMember.getBirthday() != null){ + member.put("birthday",sdf.format(v3xOrgMember.getBirthday())); + } + member.put("hiredate",""); + if(v3xOrgMember.getHiredate() != null){ + member.put("hiredate",sdf.format(v3xOrgMember.getHiredate())); + } + member.put("gender",v3xOrgMember.getGender()); + return member; + } + + public JSONObject operationMarketingFHMember (V3xOrgMember v3xOrgMember,Map clientTable) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",clientTable.get("member_id")); +// member.put("id",v3xOrgMember.getId()); + member.put("name",v3xOrgMember.getName()); + member.put("code",v3xOrgMember.getCode()); + // 默认营销门户 + member.put("orgAccountId","-9194677677107822293"); + member.put("orgAccountName","营销门户"); +// 添加部门信息 + if(clientTable.get("area_dept")!=null){ + V3xOrgDepartment v3xOrgDepartment = getOrgManager().getDepartmentById(Long.parseLong(clientTable.get("area_dept").toString())); + member.put("orgDepartmentId",v3xOrgDepartment.getId()); + member.put("orgDepartmentName",v3xOrgDepartment.getName()); + } + long postId = v3xOrgMember.getOrgPostId(); + V3xOrgPost v3xOrgPost = orgManager.getPostById(postId); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + long levelId = v3xOrgMember.getOrgLevelId(); + V3xOrgLevel v3xOrgLevel = orgManager.getLevelById(levelId); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + + member.put("isEnabled",v3xOrgMember.getEnabled()); + member.put("telNumber",clientTable.get("telnumber")); + member.put("loginName",v3xOrgMember.getLoginName()); + member.put("birthday",""); + if(v3xOrgMember.getBirthday() != null){ + member.put("birthday",sdf.format(v3xOrgMember.getBirthday())); + } + member.put("hiredate",""); + if(v3xOrgMember.getHiredate() != null){ + member.put("hiredate",sdf.format(v3xOrgMember.getHiredate())); + } + member.put("gender",v3xOrgMember.getGender()); + return member; + } + + + // { +// * "id":"人员ID", +// * "name":"人员名称", +// * "code":""人员编码, +// * "orgAccountId":"单位ID", +// * "orgAccountName":"单位名称", +// * "orgDepartmentId":"部门ID", +// * "orgDepartmentName":"部门名称", +// * "isEnabled":"是否启用", +// * "telNumber":"手机号", +// * "loginName":"登录名", +// * "orgPostId":"岗位ID", +// * "orgPostName":"岗位名称", +// * "orgLevelId":"职务级别ID", +// * "orgLevelName":"职务级别名称", +// * "birthday":"出生日期", +// * "companyCode":"客户编码", +// * "companyName":"客户名称", +// * "companyCredit":"客户统一社会信用代码", +// * "gender":"性别",-1未指定,1男,2女, +// * "hiredate":"入职时间" +// * } +// 业务架构客户人员封装 + public JSONObject operationClientMember (V3xOrgMember v3xOrgMember,Map clientTable) throws BusinessException { + JSONObject member = new JSONObject(); +// member.put("id",clientTable.get("id")); + member.put("id",v3xOrgMember.getId()); + member.put("name",v3xOrgMember.getName()); + member.put("code",v3xOrgMember.getCode()); + // 查询人员所在单位对象 +// V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(v3xOrgMember.getOrgAccountId()); + member.put("orgAccountId","-9194677677107822293"); + member.put("orgAccountName","营销门户"); +// if(v3xOrgAccount!=null){ +// member.put("orgAccountId",v3xOrgAccount.getId()); +// member.put("orgAccountName",v3xOrgAccount.getName()); +// } + // 客户老板所在客户信息 + if(clientTable.size()>1){ +// 客户编码 + member.put("companyCode",""); + if(clientTable.get("client_code")!=null){member.put("companyCode",clientTable.get("client_code"));} +// 客户名称 + member.put("companyName",""); + if(clientTable.get("client_name")!=null){member.put("companyName",clientTable.get("client_name"));} +// 客户统一社会信用代码 + member.put("companyCredit",""); + if(clientTable.get("credit_identifier")!=null){member.put("companyCredit",clientTable.get("credit_identifier"));} + + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + if(clientTable!=null){ + if(clientTable.get("area")!=null){ + V3xOrgDepartment companyDepartment = getOrgManager().getDepartmentById(Long.parseLong(clientTable.get("area").toString())); + if(companyDepartment!=null){ + member.put("orgDepartmentId",companyDepartment.getId()); + member.put("orgDepartmentName",companyDepartment.getName()); + } + } + } + }else{ + member.put("companyCode",""); + member.put("companyName",""); + member.put("companyCredit",""); + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + } + long postId = v3xOrgMember.getOrgPostId(); + V3xOrgPost v3xOrgPost = orgManager.getPostById(postId); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + long levelId = v3xOrgMember.getOrgLevelId(); + V3xOrgLevel v3xOrgLevel = orgManager.getLevelById(levelId); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + + member.put("isEnabled",v3xOrgMember.getEnabled()); + member.put("telNumber",v3xOrgMember.getTelNumber()); + member.put("loginName",v3xOrgMember.getLoginName()); + member.put("birthday",""); + if(v3xOrgMember.getBirthday() != null){ + member.put("birthday",sdf.format(v3xOrgMember.getBirthday())); + } + member.put("hiredate",""); + if(v3xOrgMember.getHiredate() != null){ + member.put("hiredate",sdf.format(v3xOrgMember.getHiredate())); + } + member.put("gender",v3xOrgMember.getGender()); + return member; + } + + public JSONObject operationClientFHMember (V3xOrgMember v3xOrgMember,Map clientTable) throws BusinessException { + JSONObject member = new JSONObject(); + member.put("id",clientTable.get("id")); +// member.put("id",v3xOrgMember.getId()); + member.put("name",v3xOrgMember.getName()); + member.put("code",v3xOrgMember.getCode()); + // 查询人员所在单位对象 +// V3xOrgAccount v3xOrgAccount = getOrgManager().getAccountById(v3xOrgMember.getOrgAccountId()); + member.put("orgAccountId","-9194677677107822293"); + member.put("orgAccountName","营销门户"); +// if(v3xOrgAccount!=null){ +// member.put("orgAccountId",v3xOrgAccount.getId()); +// member.put("orgAccountName",v3xOrgAccount.getName()); +// } + // 客户老板所在客户信息 + if(clientTable.size()>1){ +// 客户编码 + member.put("companyCode",""); + if(clientTable.get("client_code")!=null){member.put("companyCode",clientTable.get("client_code"));} +// 客户名称 + member.put("companyName",""); + if(clientTable.get("client_name")!=null){member.put("companyName",clientTable.get("client_name"));} +// 客户统一社会信用代码 + member.put("companyCredit",""); + if(clientTable.get("credit_identifier")!=null){member.put("companyCredit",clientTable.get("credit_identifier"));} + + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + if(clientTable!=null){ + if(clientTable.get("area")!=null){ + V3xOrgDepartment companyDepartment = getOrgManager().getDepartmentById(Long.parseLong(clientTable.get("area").toString())); + if(companyDepartment!=null){ + member.put("orgDepartmentId",companyDepartment.getId()); + member.put("orgDepartmentName",companyDepartment.getName()); + } + } + } + }else{ + member.put("companyCode",""); + member.put("companyName",""); + member.put("companyCredit",""); + member.put("orgDepartmentId",""); + member.put("orgDepartmentName",""); + } + long postId = v3xOrgMember.getOrgPostId(); + V3xOrgPost v3xOrgPost = orgManager.getPostById(postId); + if(v3xOrgPost!=null){ + member.put("orgPostId",v3xOrgPost.getId()); + member.put("orgPostName",v3xOrgPost.getName()); + } + long levelId = v3xOrgMember.getOrgLevelId(); + V3xOrgLevel v3xOrgLevel = orgManager.getLevelById(levelId); + if(v3xOrgLevel!=null){ + member.put("orgLevelId",v3xOrgLevel.getId()); + member.put("orgLevelName",v3xOrgLevel.getName()); + } + + member.put("isEnabled",v3xOrgMember.getEnabled()); + member.put("telNumber",clientTable.get("telnumber")); + member.put("loginName",v3xOrgMember.getLoginName()); + member.put("birthday",""); + if(v3xOrgMember.getBirthday() != null){ + member.put("birthday",sdf.format(v3xOrgMember.getBirthday())); + } + member.put("hiredate",""); + if(v3xOrgMember.getHiredate() != null){ + member.put("hiredate",sdf.format(v3xOrgMember.getHiredate())); + } + member.put("gender",v3xOrgMember.getGender()); + return member; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdPostBo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdPostBo.java new file mode 100644 index 0000000..566779f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/ThirdPostBo.java @@ -0,0 +1,187 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import com.seeyon.ctp.organization.OrgConstants; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgPost; + +public class ThirdPostBo { + private long orgAccountId; + private long id; + private String name; + private String code; + private boolean isDeleted; + private boolean enabled; + private String shortName; + private long sortId; + private int status; + private String description; + private long typeId; + private boolean valid; + private String entityType; + + + public ThirdPostBo(String companyId, V3xOrgPost v3xOrgPost) { + this.id = v3xOrgPost.getId(); + this.orgAccountId = Long.parseLong(companyId); + this.name = v3xOrgPost.getName(); + this.code = v3xOrgPost.getCode(); + this.shortName = v3xOrgPost.getName(); + } + + public ThirdPostBo(V3xOrgPost v3xOrgPost) { + this.id = v3xOrgPost.getId(); + this.orgAccountId = v3xOrgPost.getOrgAccountId(); + this.name = v3xOrgPost.getName(); + this.code = v3xOrgPost.getCode(); + this.shortName = v3xOrgPost.getName(); + this.isDeleted = v3xOrgPost.getIsDeleted(); + this.enabled = v3xOrgPost.getEnabled(); + this.sortId = v3xOrgPost.getSortId(); + this.status = v3xOrgPost.getStatus(); + this.description = v3xOrgPost.getDescription(); + this.typeId = v3xOrgPost.getTypeId(); + this.entityType = v3xOrgPost.getEntityType(); + + } + + + + public long getOrgAccountId() { + return this.orgAccountId; + } + + public void setOrgAccountId(long orgAccountId) { + this.orgAccountId = orgAccountId; + } + + public long getId() { + return this.id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return this.code; + } + + public void setCode(String code) { + this.code = code; + } + + public boolean getIsDeleted() { + return this.isDeleted; + } + + public void setIsDeleted(boolean isDeleted) { + this.isDeleted = isDeleted; + } + + public boolean getEnabled() { + return this.enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + public boolean isDeleted() { + return isDeleted; + } + + public void setDeleted(boolean deleted) { + isDeleted = deleted; + } + + public boolean isEnabled() { + return enabled; + } + + public String getShortName() { + return shortName; + } + + public void setShortName(String shortName) { + this.shortName = shortName; + } + + public long getSortId() { + return sortId; + } + + public void setSortId(long sortId) { + this.sortId = sortId; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public long getTypeId() { + return typeId; + } + + public void setTypeId(long typeId) { + this.typeId = typeId; + } + + public boolean isValid() { + return valid; + } + + public void setValid(boolean valid) { + this.valid = valid; + } + + public String getEntityType() { + return entityType; + } + + public void setEntityType(String entityType) { + this.entityType = entityType; + } + + public ThirdPostBo() { + } + + @Override + public String toString() { + return "ThirdPostBo{" + + "orgAccountId=" + orgAccountId + + ", id=" + id + + ", name='" + name + '\'' + + ", code='" + code + '\'' + + ", isDeleted=" + isDeleted + + ", enabled=" + enabled + + ", shortName='" + shortName + '\'' + + ", sortId=" + sortId + + ", status=" + status + + ", description='" + description + '\'' + + ", typeId=" + typeId + + ", valid=" + valid + + ", entityType='" + entityType + '\'' + + '}'; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/TreeNodeBo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/TreeNodeBo.java new file mode 100644 index 0000000..44773d5 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/bo/TreeNodeBo.java @@ -0,0 +1,33 @@ +package com.seeyon.apps.src_mainorganization.bo; + +import java.util.ArrayList; +import java.util.List; + +public class TreeNodeBo { + + private String name; + private String id; + private boolean open = false; + private String iconSkin; + private List children = new ArrayList<>(); + + // 构造方法 + public TreeNodeBo(String name, String id, String iconSkin) { + this.name = name; + this.id = id; + this.iconSkin = iconSkin; + } + + // getter和setter方法 + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getId() { return id; } + public void setId(String id) { this.id = id; } + public boolean isOpen() { return open; } + public void setOpen(boolean open) { this.open = open; } + public String getIconSkin() { return iconSkin; } + public void setIconSkin(String iconSkin) { this.iconSkin = iconSkin; } + public List getChildren() { return children; } + public void setChildren(List children) { this.children = children; } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/constans/SyncConstants.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/constans/SyncConstants.java new file mode 100644 index 0000000..9ed028a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/constans/SyncConstants.java @@ -0,0 +1,75 @@ +package com.seeyon.apps.src_mainorganization.constans; + +public enum SyncConstants { + plugin("src_mainorganization", "插件ID"), + isServiceBroker("是", "是否同步业代人员"), + companyId("-1730833917365171641", "companyId"), + excludeAccount("湖北省知与行人力资源管理有限公司,8559604892185870467", "客户下排除单位信息"), + dingdingAppKey("ding2h5fhqmiszfs2jwr", "dingdingAppKey"), + dingdingAppSecret("P3rbbjtK-cM6s_bm94CrxxZl4Xiy6uFMK0qv4gCdiDdcO2Qklc3r75J3r_nEBnEm", "dingdingAppSecret"), + dingdingAgentId("3317276581", "dingdingAgentId"), + dingdingAppId("93a002bc-e1f2-4edd-af38-555f478c4491", "dingdingAppId"), + dingdingGetDept("https://oapi.dingtalk.com/topapi/v2/department/get", "查询钉钉部门URL"), + dingdingLog("DDTBJL","钉钉同步记录"), + dingdingLogloginName("demo","钉钉同步记录创建人"), + qxxLog("QXXTBJL","企学星同步记录"), + qxxUrl("http://10.0.1.92:7356","企学星URL"), + qxxGetToken("/hklearn/openapi/v1/oauth/getToken?","企学星获取tokenURL"), + qxxCorpid("1984970261379821568","企学星Corpid"), + qxxCorpsecret("dazktisoj29d3qyoeske1sxreo7gxlo8d7amfdg0gi85ku0tanjat3vb34i0243e","企学星Corpsecret"), + qxxSaveOrg("/hklearn/openapi/v1/data/org/save","企学星保存部门URL"), + qxxDeleteOrg("/hklearn/openapi/v1/data/org/delete","企学星删除部门URL"), + qxxSelectOrg("/hklearn/openapi/v1/data/org/select","企学星查询部门URL"), + qxxSaveUser("/hklearn/openapi/v1/data/user/save","企学星保存用户URL"), + flowLoginName("demo1", "流程平台登录用户"), + flowRestPassword("1cd9ffb0-39ee-4690-8773-e183f233b3b9", "流程平台rest密码"), + flowRestUserName("flowdata", "流程平台rest用户"), + flowurl("http://10.0.1.56", "流程平台地址"), + groupLoginName("BDGLY", "集团协同平台登录用户"), + groupRestPassword("f1c4e761-d60b-47ff-a5ff-5953f2b9c9e0", "集团协同平台rest密码"), + groupRestUserName("beian", "集团协同平台rest用户"), + groupurl("https://oa.dhx.com.cn", "集团协同地址"), + localLoginName("demo1", "本地环境登录用户"), + localRestPassword("751f86d5-2e4c-4fe0-9a90-50d568359a1f", "本地环境rest密码"), + localRestUserName("sys", "本地环境rest用户"), + localurl("http://127.0.0.1", "本地环境地址"), + syncUrl("http://ip:port", "同步地址"), + getTokenUrl("/seeyon/rest/token/","获取token路径"), + getAccountUrl("/seeyon/rest/orgAccount/","根据ID查询单位信息路径"), + addOrUpdateAccountUrl("/seeyon/rest/orgAccount","根据ID新增或修改单位信息路径"), + getDeptUrl("/seeyon/rest/orgDepartment/","根据ID查询部门信息路径"), + addOrUpdateDeptUrl("/seeyon/rest/orgDepartment","根据ID新增或修改部门信息路径"), + getPostUrl("/seeyon/rest/orgPost/","根据ID查询岗位信息路径"), + addOrUpdatePostUrl("/seeyon/rest/orgPost","根据ID新增或修改岗位信息路径"), + getLevelUrl("/seeyon/rest/orgLevel/","根据ID查询职务级别信息路径"), + addOrUpdateLevelUrl("/seeyon/rest/orgLevel","根据ID新增或修改职务级别信息路径"), + getMemberUrl("/seeyon/rest/orgMember/","根据ID查询人员信息路径"), + addOrUpdateMemberUrl("/seeyon/rest/orgMember","根据ID新增或修改人员信息路径"), + addMemberUrl("/seeyon/rest/orgMember/saveMemberMain","根据ID新增人员信息路径"), + updateMemberUrl("/seeyon/rest/orgMember/updateMemberMain","根据ID修改人员信息路径"), + getDepartmentmanagerinfoUrl("/seeyon/rest/orgDepartment/departmentmanagerinfo/","根据部门ID查看部门角色"), + updateDepartmentmanagerinfoUrl("/seeyon/rest/orgDepartment/departmentmanagerinfo","根据部门ID修改部门角色"), + url("http://ip:port", "同步地址"), + customerServiceBlacklist("流程平台", "客户服务平台同步黑名单"), + recordUrl("/seeyon/cap4/businessTemplateController.do?method=formContent&type=browse&rightId=5763781100389681074.1730454067325587255_-6583821842800687659.2925077446933826142_2648590641453223755.-1311747989662252464_2465382193758949243.-7764150748768613564&formTemplateId=-3215088232567389128&viewConditionId=&conditionIdDeal=&columnId=-3215088232567389128&moduleType=42&isUnFlowDrawer=true&needUpdate=1&tplId=850010&btnId=&_v=1757387714948&moduleId=","人员档案表跳转地址"); + + private String defaultValue; + private String description; + + private SyncConstants(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + public String getDefaultValue() { + return this.defaultValue; + } + + public String getDescription() { + return this.description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureMemberInfoController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureMemberInfoController.java new file mode 100644 index 0000000..5923785 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureMemberInfoController.java @@ -0,0 +1,119 @@ +package com.seeyon.apps.src_mainorganization.controller; + +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_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao; +import com.seeyon.ctp.common.controller.BaseController; +import org.springframework.web.servlet.ModelAndView; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class BusinessStructureMemberInfoController extends BaseController { + + private static Log log = Log.get(BusinessStructureMemberInfoController.class); + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private ISrcMemberDao srcMemberDao; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + + public ModelAndView index(HttpServletRequest request, HttpServletResponse response)throws Exception{ + log.info("进入业务架构模型人员数据展示"); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + // 设置请求字符编码(必须在获取参数前设置) + request.setCharacterEncoding("UTF-8"); + // 设置响应字符编码 + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json;charset=UTF-8"); + StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = request.getReader()) { + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + String jsonData = sb.toString(); + JSONObject json = JSONObject.parseObject(jsonData); +// 获取根据单位或者部门ID获取单位或者部门下人员信息 + String memberId = json.getString("memberId"); + String memberType = json.getString("memberType"); + Map memberMap = new HashMap<>(); +// id--人员ID +// NAME--人员名称 +// CODE--人员编号 +// ext_attr_1 AS phone--人员手机号 +// a.NAME AS account_name--所属单位名称 +// NAME AS department_name--部门名称 +// p.NAME AS post_name--岗位名称 +// NAME AS level_name--职务级别名称 +// 补充字段:登录账号,身份证号,合同主体,用工单位,市场化公司单位、市场化公司部门、人员档案跳转连接 + switch (memberType){ + case "account":{ +// 处理集团单位查询人员信息 + memberMap = srcMemberDao.getMemberDataByMemberId(memberId); + break; + } + case "yd":{ +// 处理业代人员信息 + memberMap = srcMemberDao.getYDMemberDataByMemberId(memberId); + break; + } + case "kh":{ +// 处理客户单位下人员信息 + memberMap = srcMemberDao.getKHMemberDataByMemberId(memberId); + break; + } + default: + log.info("数据异常,请在人员类型中导入account,yd,kh字段"); + } +// memberMap = srcMemberDao.getMemberDataByMemberId(memberId); + +// 设置档案表跳转连接 + if(memberMap.get("record_id") == null){ + memberMap.put("recordUrl",""); + }else{ + String recordId = memberMap.get("record_id").toString(); + String recordUrl = configVo.getParamVal(SyncConstants.recordUrl.name()); + memberMap.put("recordUrl",recordUrl+recordId); + log.info("跳转人员档案地址"+recordUrl+recordId); + } + JSONObject res = new JSONObject(); + res.put("code","200"); +// res.put("data",errorAccountValue+","+errorDepartmentValue+","+errorMemberValue+","+errorServiceBrokerValue+","+errorClientMemberValue); + memberMap.replaceAll((key, value) -> value == null ? "" : value); + res.put("member",memberMap); + render(response, res.toString()); + return null; + } + + /** + * 给前台渲染json数据 + * @param response + * @param text + */ + private void render(HttpServletResponse response, String text) { + response.setContentType("application/json;charset=UTF-8"); + try { + response.setContentLength(text.getBytes("UTF-8").length); + response.getWriter().write(text); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureMemberListController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureMemberListController.java new file mode 100644 index 0000000..14dae76 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureMemberListController.java @@ -0,0 +1,152 @@ +package com.seeyon.apps.src_mainorganization.controller; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao; +import com.seeyon.ctp.common.controller.BaseController; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.manager.OrgManager; +import org.springframework.web.servlet.ModelAndView; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.*; + +public class BusinessStructureMemberListController extends BaseController { + + private static Log log = Log.get(BusinessStructureMemberListController.class); + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private ISrcMemberDao srcMemberDao; + @Inject + private OrgManager orgManager; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + public ModelAndView index(HttpServletRequest request, HttpServletResponse response)throws Exception{ + log.info("进入业务架构模型人员列表数据获取展示"); + // 设置请求字符编码(必须在获取参数前设置) + request.setCharacterEncoding("UTF-8"); + // 设置响应字符编码 + response.setCharacterEncoding("UTF-8"); + response.setContentType("application/json;charset=UTF-8"); + StringBuilder sb = new StringBuilder(); + try (BufferedReader reader = request.getReader()) { + String line; + while ((line = reader.readLine()) != null) { + sb.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + String jsonData = sb.toString(); + JSONObject json = JSONObject.parseObject(jsonData); +// 获取根据单位或者部门ID获取单位或者部门下人员信息 + String paramType = json.getString("nodeType"); + List> members = new ArrayList<>(); + String nodeId = json.getString("nodeId"); + if("treeAccount".equals(paramType)){ + if("-9194677677107822293".equals(nodeId)){ +// 营销门户下的人员需要查询,人员档案,组织架构人员,客户人员等人员集合 +// 查询组织架构人员 + List> bmmembers = srcMemberDao.getMemberByAccountId(nodeId); + if(bmmembers.size()>0){ + members.addAll(bmmembers); + } + if(members!=null){ + log.info("人员人数"+members.size()); + } +// 查询业代人员 + List> ydmembers = srcMemberDao.getYDMemberAll(); + if(ydmembers.size()>0){ + members.addAll(ydmembers); + } + if(ydmembers!=null){ + log.info("业代人员人数"+ydmembers.size()); + } +// 查询客户单位下人员 + List> khmembers = srcMemberDao.getKHMemberAll(); + if(khmembers.size()>0){ + members.addAll(khmembers); + } + if(khmembers!=null){ + log.info("客户单位下人员人数"+khmembers.size()); + } + }else{ + members = srcMemberDao.getMemberByAccountId(nodeId); + if(members!=null){ + log.info("单位人员人数"+members.size()); + } + } + }else if ("department".equals(paramType)){ +// 是否为营销门户下部门 + V3xOrgDepartment orgDepartment = orgManager.getDepartmentById(Long.parseLong(nodeId)); + + if(orgDepartment!=null){ + if("-9194677677107822293".equals(orgDepartment.getOrgAccountId().toString())){ +// 是营销门户下部门 + List> bmmembers = srcMemberDao.getMemberByDepartmentId(nodeId); + if(bmmembers.size()>0){ + members.addAll(bmmembers); + } + if(members!=null){ + log.info("部门人员人数"+members.size()); + } +// 查询业代人员 + List> ydmembers = srcMemberDao.getYDMemberByDepartment(nodeId); + if(ydmembers.size()>0){ + members.addAll(ydmembers); + } + if(ydmembers!=null){ + log.info("部门业代人员人数"+ydmembers.size()); + } +// 查询客户单位下人员 + List> khmembers = srcMemberDao.getKHMemberByDepartment(nodeId); + if(khmembers.size()>0){ + members.addAll(khmembers); + } + if(khmembers!=null){ + log.info("部门客户人员人数"+khmembers.size()); + } + }else{ + members = srcMemberDao.getMemberByDepartmentId(nodeId); + if(members!=null){ + log.info("部门人员人数"+members.size()); + } + } + } + }else{ + log.info("数据类型异常,请检查参数"+json); + } + JSONObject res = new JSONObject(); + res.put("code","200"); +// res.put("data",errorAccountValue+","+errorDepartmentValue+","+errorMemberValue+","+errorServiceBrokerValue+","+errorClientMemberValue); + res.put("members",members); + render(response, res.toString()); + return null; + } + + /** + * 给前台渲染json数据 + * @param response + * @param text + */ + private void render(HttpServletResponse response, String text) { + response.setContentType("application/json;charset=UTF-8"); + try { + response.setContentLength(text.getBytes("UTF-8").length); + response.getWriter().write(text); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureTreeController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureTreeController.java new file mode 100644 index 0000000..320edb9 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureTreeController.java @@ -0,0 +1,35 @@ +package com.seeyon.apps.src_mainorganization.controller; + + +import cn.hutool.log.Log; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.ctp.common.controller.BaseController; + +import org.springframework.web.servlet.ModelAndView; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + + +public class BusinessStructureTreeController extends BaseController { + + private static Log log = Log.get(BusinessStructureTreeController.class); + + @Inject + private ICstConfigApi cstConfigApi; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + + @Override + public ModelAndView index(HttpServletRequest request, HttpServletResponse response)throws Exception{ + log.info("进入业务架构模型展示"); + ModelAndView mv = new ModelAndView("apps/src_mainorganization/businessStructureTree"); + return mv; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureUnitTreeController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureUnitTreeController.java new file mode 100644 index 0000000..ce9856d --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/BusinessStructureUnitTreeController.java @@ -0,0 +1,197 @@ +package com.seeyon.apps.src_mainorganization.controller; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.src_mainorganization.bo.TreeNodeBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISrcAccountDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcDepartmentDao; +import com.seeyon.ctp.common.controller.BaseController; +import org.springframework.web.servlet.ModelAndView; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +public class BusinessStructureUnitTreeController extends BaseController { + + private static Log log = Log.get(BusinessStructureUnitTreeController.class); + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private ISrcAccountDao srcAccountDao; + @Inject + private ISrcDepartmentDao srcDepartmentDao; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + + public ModelAndView index(HttpServletRequest request, HttpServletResponse response)throws Exception{ + log.info("进入业务架构模型展示"); + +// 获取组织机构中所有的单位和部门 + List> maps = new ArrayList<>(); + Map indexMap = new HashMap<>(); + indexMap.put("id","1"); + indexMap.put("name","集团"); + indexMap.put("code",""); + indexMap.put("path","0000"); + indexMap.put("is_enable","1"); + indexMap.put("type","Account"); + maps.add(indexMap); + List> accountMaps = srcAccountDao.getAllAccounts(); + maps.addAll(accountMaps); + + List> departmentMaps = srcDepartmentDao.getAllDepartments(); + maps.addAll(departmentMaps); + + List> result = convertAndFilter(maps); + + String zNodes1 = buildTreeJson(result); + System.out.println(zNodes1); + JSONObject res = new JSONObject(); + res.put("code","200"); +// res.put("data",errorAccountValue+","+errorDepartmentValue+","+errorMemberValue+","+errorServiceBrokerValue+","+errorClientMemberValue); + res.put("data",JSONObject.parseObject(zNodes1)); + render(response, res.toString()); + return null; + } + + /** + * 给前台渲染json数据 + * @param response + * @param text + */ + private void render(HttpServletResponse response, String text) { + response.setContentType("application/json;charset=UTF-8"); + try { + response.setContentLength(text.getBytes("UTF-8").length); + response.getWriter().write(text); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 构建数据树并转换为JSON + * @param dataList 原始数据列表,每个Map包含"id"、"name"、"type"、"path"键 + * @return 生成的JSON字符串 + */ + public static String buildTreeJson(List> dataList) { + // 按路径长度排序,确保父节点先处理 + dataList.sort(Comparator.comparingInt(m -> m.get("path").length())); + + // 存储路径到节点的映射,用于快速查找父节点 + Map pathNodeMap = new HashMap<>(); + + // 根节点 + TreeNodeBo root = null; + + for (Map data : dataList) { + String id = data.get("id"); + String name = data.get("name"); + String type = data.get("type"); + String path = data.get("path"); + + // 根据类型设置iconSkin + String iconSkin = "Account".equals(type) ? "treeAccount" : "department"; + + // 创建当前节点 + TreeNodeBo currentNode = new TreeNodeBo(name, id, iconSkin); + + // 如果是根节点(路径为"0000") + if ("0000".equals(path)) { + root = currentNode; + root.setOpen(true); // 根节点默认展开 + pathNodeMap.put(path, root); + continue; + } + + // 解析父路径(当前路径长度减4) + int parentPathLength = path.length() - 4; + if (parentPathLength < 4) { + continue; // 路径长度不合法,跳过 + } + + String parentPath = path.substring(0, parentPathLength); + TreeNodeBo parentNode = pathNodeMap.get(parentPath); + + if (parentNode != null) { + parentNode.getChildren().add(currentNode); + pathNodeMap.put(path, currentNode); + } + } + + // 转换为JSON并返回 + return JSON.toJSONString(root); + } + + public List> convertAndFilter(List> originalList) { + return originalList.stream() + // 过滤掉 is_enable 为 0 的记录 + .filter(this::isRecordEnabled) + // 处理 path 字段的特殊逻辑 + .filter(this::filterByPathPattern) + // 转换并过滤键 + .map(this::convertAndProcessMap) + .collect(Collectors.toList()); + } + + // 检查记录是否启用 (is_enable 不为 0) + private boolean isRecordEnabled(Map map) { + Object isEnable = map.get("is_enable"); + return isEnable == null || !"0".equals(isEnable.toString()); + } + + // 根据 path 字段进行过滤 + private boolean filterByPathPattern(Map map) { + Object pathObj = map.get("path"); + if (pathObj == null) { + return true; // 没有 path 字段则保留 + } + + String path = pathObj.toString(); + // 以 000000170012 开头 - 保留 + if (path.startsWith("000000170012")) { + return true; + } + // 以 00000017 开头 - 过滤掉 + return !path.startsWith("00000017"); + } + + // 转换 Map 并处理特定字段 + private Map convertAndProcessMap(Map originalMap) { + Map newMap = new HashMap<>(); + + originalMap.forEach((key, value) -> { + // 跳过 orgAccountId 键 + if ("orgAccountId".equals(key)) { + return; + } + + // 处理 path 字段的特殊情况 + if ("path".equals(key) && value != null) { + String pathValue = value.toString(); + if (pathValue.startsWith("000000170012")) { + newMap.put(key, "000000110999"+pathValue.substring(12)); // 调整值 + return; + } + } + + // 普通字段转换 + newMap.put(key, value == null ? null : value.toString()); + }); + + return newMap; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/OrganizationFieldCtrlController.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/OrganizationFieldCtrlController.java new file mode 100644 index 0000000..a84a360 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/controller/OrganizationFieldCtrlController.java @@ -0,0 +1,79 @@ +package com.seeyon.apps.src_mainorganization.controller; + + +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_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgDingdingSyncServer; +import com.seeyon.ctp.common.controller.BaseController; +import com.seeyon.ctp.util.annotation.NeedlessCheckLogin; +import org.springframework.web.servlet.ModelAndView; + +import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class OrganizationFieldCtrlController extends BaseController { + + private static Log log = Log.get(OrganizationFieldCtrlController.class); + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrganizationOrgDingdingSyncServer organizationOrgDingdingSyncServer; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + @NeedlessCheckLogin + public ModelAndView index(HttpServletRequest request, HttpServletResponse response)throws Exception{ + log.info("进入组织架构同步ajax方法"); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 设置返回值对象 + request.setCharacterEncoding("UTF-8"); + response.setCharacterEncoding("UTF-8"); + +// 进行钉钉单位同步操作 + String errorAccountValue = organizationOrgDingdingSyncServer.dingdingSyncAllAccounts(); +// 进行钉钉部门同步操作 + String errorDepartmentValue = organizationOrgDingdingSyncServer.dingdingSyncAllDepartments(); +// 进行钉钉人员同步操作 + String errorMemberValue = organizationOrgDingdingSyncServer.dingdingSyncAllMembers(); +// 进行钉钉业代人员同步操作isServiceBroker + String isServiceBroker = configVo.getParamVal(SyncConstants.isServiceBroker.name()); + String errorServiceBrokerValue = ""; + if("是".equals(isServiceBroker)||"Y".equals(isServiceBroker)||"y".equals(isServiceBroker)){ +// 进行业代人员同步 + errorServiceBrokerValue = organizationOrgDingdingSyncServer.dingdingSyncAllServiceBrokers(); + } +// 进行客户单位下人员同步 + String errorClientMemberValue = organizationOrgDingdingSyncServer.dingdingSyncAllClientMembers(); + JSONObject res = new JSONObject(); + res.put("code","200"); + res.put("data",errorAccountValue+","+errorDepartmentValue+","+errorMemberValue+","+errorServiceBrokerValue+","+errorClientMemberValue); +// res.put("data",","+","+","+errorServiceBrokerValue+","+errorClientMemberValue); + + render(response, res.toString()); + return null; + } + + + /** + * 给前台渲染json数据 + * @param response + * @param text + */ + private void render(HttpServletResponse response, String text) { + response.setContentType("application/json;charset=UTF-8"); + try { + response.setContentLength(text.getBytes("UTF-8").length); + response.getWriter().write(text); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/IArchiveDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/IArchiveDao.java new file mode 100644 index 0000000..b6eefa3 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/IArchiveDao.java @@ -0,0 +1,38 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import com.alibaba.fastjson.JSONArray; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +public interface IArchiveDao { + + public List updateArchiveByCode(JSONArray var1) throws SQLException; + + public List> getIncrementDataByModifyDate(String startDate); + + public Map getMemberArchiveById(long memberId); + + public Map getMemberArchiveByMemberId(long memberId); + + public Map getMemberArchiveByClientMemberId(long clientMemberId); + + public List getPostBlackList(); + + public List getMemberWhiteList(); + + public List> getServiceBrokers(String startDate); + + public List> getServiceBrokers(); + + public List> getClientMembersByModifyDate(String startDate); + + public List> getAllCustomer(); + + public Map findMemberByFormmainId (String formmainId); + + public List> findMemberOtherData(); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/IOrgRoleDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/IOrgRoleDao.java new file mode 100644 index 0000000..f18a445 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/IOrgRoleDao.java @@ -0,0 +1,8 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import java.sql.SQLException; +import java.util.List; + +public interface IOrgRoleDao { + List getRoleIdById(String var1) throws SQLException; +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcAccountDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcAccountDao.java new file mode 100644 index 0000000..d4934ae --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcAccountDao.java @@ -0,0 +1,23 @@ +package com.seeyon.apps.src_mainorganization.dao; + + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + +public interface ISrcAccountDao { + + public String getAccountId(String orgAccount) throws SQLException; + + public List getSubordinateAccountByPath(String accountPath); + + public Map getAccountById(String accountId); + + public Map getAccountByPath(String accountPath); + + public List> getIncrementAccountByUpdateTime(String startDate); + + public List> getAllAccounts(); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcDepartmentDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcDepartmentDao.java new file mode 100644 index 0000000..e502142 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcDepartmentDao.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.src_mainorganization.dao; + + +import java.util.List; +import java.util.Map; + +public interface ISrcDepartmentDao { + + public List getSubordinateDepartmentByPath(String accountPath); + + public Map getDepartmentByPath(String path); + + public List> getIncrementDepartmentByUpdateTime(String startDate); + + public List> getAllDepartments (); + + public List getDepartmentBySuperPath(String accountPath); + + public String getSuperUnitIdByPath(String path); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java new file mode 100644 index 0000000..c97a7b6 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcEnumDao.java @@ -0,0 +1,9 @@ +package com.seeyon.apps.src_mainorganization.dao; + +public interface ISrcEnumDao { + + public String getEnumByExtAttr(String extAttrName); + + public String getEnumItemByRefEnumIdValue(String refEnumId,String enumValue); + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcFormTableDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcFormTableDao.java new file mode 100644 index 0000000..b161abd --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcFormTableDao.java @@ -0,0 +1,9 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import java.util.List; + +public interface ISrcFormTableDao { + + public List getMemberDifferenceIds(); + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcLevelDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcLevelDao.java new file mode 100644 index 0000000..b0d8a4b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcLevelDao.java @@ -0,0 +1,8 @@ +package com.seeyon.apps.src_mainorganization.dao; + +public interface ISrcLevelDao { + + public String getLevelIdByAccountLevel(long oldLevelId, long orgAccountId); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java new file mode 100644 index 0000000..47f3578 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcMemberDao.java @@ -0,0 +1,46 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import java.util.List; +import java.util.Map; + +public interface ISrcMemberDao { + + public String getMemberMaxSortId(); + + public List> queryMembers(String orgAccount,String orgDepartment,String startDate,String endDate); + + public List> queryFormMembers(String orgAccount,String orgDepartment,String startDate,String endDate); + + public List> queryServiceAgentMembers (String startDate,String endDate); + + public List> queryCustomerMembers(); + + public Map queryClientByName(String clientName); + + public List> getAllMembers(); + + public List> getMembersByStartDate(String startDate); + + public List> getAllClientMembers(); + + public Map getMemberById(String memberId); + +// 根据部门ID获取部门下人员列表 + public List> getMemberByDepartmentId(String departmentId); +// 根据单位ID获取单位下所有人员列表 + public List> getMemberByAccountId(String accountId); +// 根据人员ID查询人员详细信息,业务架构树专用 + public Map getMemberDataByMemberId(String memberId); + // 根据人员ID查询人员详细信息,业务架构树专用 + public Map getYDMemberDataByMemberId(String memberId); + // 根据人员ID查询人员详细信息,业务架构树专用 + public Map getKHMemberDataByMemberId(String memberId); +// 查询所有业代人员 + public List> getYDMemberAll(); +// 查询所有客户单位下人员 + public List> getKHMemberAll(); +// 根据部门ID查询业代人员 + public List> getYDMemberByDepartment(String departmentId); +// 根据部门ID查询客户单位下人员 + public List> getKHMemberByDepartment(String departmentId); +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcPostDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcPostDao.java new file mode 100644 index 0000000..8de26f3 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISrcPostDao.java @@ -0,0 +1,8 @@ +package com.seeyon.apps.src_mainorganization.dao; + +public interface ISrcPostDao { + + public String getPostIdByAccountPost(long oldPostId,long orgAccountId); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncDdDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncDdDao.java new file mode 100644 index 0000000..8f432fe --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncDdDao.java @@ -0,0 +1,54 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import java.util.List; +import java.util.Map; + +public interface ISyncDdDao { + + //临时-查询钉钉单位绑定信息全量 + public List getAccountsBinding(); + public Map getAccountBindingByDdAccount(String ddAccountId); + public Map getDepartmentBindingByDdDepartment(String ddDepartmentId); + public List getDepartmentsBinding(); + public List getMemberByMobile(String mobile); + + + + + + // 查询钉钉单位绑定信息 + public Map getAccountBinding(String orgAccountId); + +// 新增钉钉单位绑定信息 + public int saveAccountBinding(String accountId,String accountName,String ddAccountId ,String ddAccountName); + +// 根据单位ID修改钉钉单位绑定信息 + public int updateAccountBinding(String accountId,String accountName,String ddAccountId ,String ddAccountName); + +// 查询钉钉部门绑定信息 + public Map getDepartmentBinding(String orgDepartmentId); + +// 新增钉钉部门绑定信息 + public int saveDepartmentBinding(String departmentId,String departmentName ,String ddDepartmentId ,String ddDepartmentName); + +// 根据部门ID修改钉钉部门绑定信息 + public int updateDepartmentBinding(String departmentId,String departmentName ,String ddDepartmentId ,String ddDepartmentName); + +// 根据部门ID删除钉钉部门绑定信息 + public int deleteDepartmentBinding(String departmentId); + +// 查询钉钉人员绑定信息 + public Map getMemberBinding(String orgMemberId); + + // 新增钉钉人员绑定信息 + public int saveMemberBinding(String memberId,String membertName ,String ddMemberId ,String ddMemberName,String telnumber); + + // 根据人员ID修改钉钉人员绑定信息 + public int updateMemberBinding(String membertId,String memberName ,String ddMemberId ,String ddMemberName ,String telnumber); + +// 根据人员ID删除钉钉人员绑定信息 + public int deleteMemberBinding(String memberId); + + public Map getMaxSynchronizationDate(); + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncFvDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncFvDao.java new file mode 100644 index 0000000..e71adc4 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncFvDao.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import com.seeyon.apps.src_mainorganization.bo.ThirdDeptBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdMemberBo; +import com.seeyon.ctp.organization.bo.V3xOrgPost; + +import java.sql.SQLException; +import java.util.Map; + +public interface ISyncFvDao { + + public boolean queryUnitById(String unitId); + + public int addUnit(ThirdDeptBo thirdDept) ; + + public int updateUnit(ThirdDeptBo thirdDept); + + public boolean queryDeptById(String deptId); + + public int addDept(ThirdDeptBo thirdDept) throws SQLException; + + public int updateDept(ThirdDeptBo thirdDept); + + public Map queryMemberArchiveByMemberId(String memberId); + + public Map queryMemberHelpByMemberId(String memberId); + + public int updateMember(ThirdMemberBo thirdMember,Map memeberMap); + + public int addMember(ThirdMemberBo thirdMember,Map memeberMap); + + public boolean queryPostById(String postId); + + public String queryBanchmarkPostIdByPostId(String postId); + + public int updatePost(V3xOrgPost v3xOrgPost); + + public int addPost(V3xOrgPost v3xOrgPost); + + public String isMemberTypeById(String memberId); + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncQixuexingDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncQixuexingDao.java new file mode 100644 index 0000000..316d3ae --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/ISyncQixuexingDao.java @@ -0,0 +1,9 @@ +package com.seeyon.apps.src_mainorganization.dao; + +import java.util.Map; + +public interface ISyncQixuexingDao { + + public Map getMaxSynchronizationDate(); + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/ArchiveDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/ArchiveDaoImpl.java new file mode 100644 index 0000000..fcee849 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/ArchiveDaoImpl.java @@ -0,0 +1,430 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.dao.IArchiveDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.Connection; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.*; + +public class ArchiveDaoImpl implements IArchiveDao { + + String updateArchiveByCode = "update formmain_0181 set "; + String getIncrementDataByModifyDate = "select field0007 as member_id,field0190 as area_id,field0016 as phone_number from formmain_0210 where modify_date >= ?"; + String getClientMembersByModifyDate = "select f.field0007 as id ,m.name ,f.field0190 as dept_id,f.field0016 as telnumber ,a.id account_id from formmain_0210 f left join org_member m on f.field0007 = m.id left join org_unit d on f.field0190 = d.id left join org_unit a on d.org_account_id = a.id where modify_date >= ? and field0007 in (select id from org_member where org_account_id in ( select id from org_unit where path like '00000017________'))"; + String getMemberArchiveById = "select id as member_id,field0016 as telnumber,field0190 as area_dept from formmain_0210 where field0007 = ?"; + String getMemberArchiveByMemberId = "SELECT id,field0068 AS account_id,field0069 AS department_id,field0030 AS post_id,field0097 AS level_id,field0007 as member_id,field0070 AS code,field0192 AS name,field0013 AS member_no,field0110 AS sex,field0016 AS telnumber,field0047 AS member_state,field0049 AS board_date,field0190 AS area_dept FROM formmain_0210 WHERE field0007=?"; + String getMemberArchiveByClientMemberId = "SELECT id,field0068 AS account_id,field0069 AS department_id,field0030 AS post_id,field0097 AS level_id,field0007 as member_id,field0070 AS code,field0192 AS name,field0013 AS member_no,field0110 AS sex,field0016 AS telnumber,field0047 AS member_state,field0049 AS board_date,field0190 AS area_dept FROM formmain_0210 WHERE field0007=?"; + String getServiceBrokersBystartDate = "select id,field0049 as hiredate,field0047 as state,field0190 as dept_id,field0195 as post_id, field0192 as name ,field0110 as sex,field0010 as birthdate, field0016 as telnumber,field0013 AS member_no from formmain_0210 where field0066 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '人员分类' ) and showvalue = 'C类') and field0111 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '营销人员类别' ) and showvalue = '业代') and modify_date >= ?"; + String getServiceBrokers = "select id,field0049 as hiredate,field0047 as state,field0190 as dept_id,field0195 as post_id, field0192 as name ,field0110 as sex,field0010 as birthdate, field0016 as telnumber,field0013 AS member_no from formmain_0210 where field0066 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '人员分类' ) and showvalue = 'C类') and field0111 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '营销人员类别' ) and showvalue = '业代')"; + String getAllCustomer = "SELECT id,field0001 AS customer_code,field0002 AS customer_name,field0003 AS customer_nature,field0005 AS customer_province,field0007 AS state,field0067 AS area,field0068 AS marketization_company,field0008 AS market,field0011 AS credit_code,field0013 AS registered_capital,field0014 AS legal_person,field0033 AS legal_person_id,field0032 AS legal_person_telnumber,field0016 AS contact_site,field0017 AS consignee_site,field0031 AS postal_code,field0018 AS consignee_name1,field0030 AS consignee_telnumber1,field0019 AS consignee_name2,field0029 AS consignee_telnumber2 FROM formmain_0208"; + String findMemberByFormmainId = "select f.id,f.field0192 name ,f.field0070 code,f.field0068 org_account_id,f.field0069 org_department_id,f.field0030 org_post_id,f.field0097 org_level_id,f.field0047 is_enable , f.field0016 as telnumber ,f.field0016 login_name, f.field0010 birthday ,field0049 hiredate ,f.field0110 gender from formmain_0210 f where f.id = ?"; + String findMemberOtherData = "select id,field0192 name,field0070 code,field0068 org_account_id,field0069 org_department_id,field0030 org_post_id,field0097 org_level_id,field0047 is_enable,field0016 telnumber,field0016 login_name,field0010 birthday,field0049 hiredate,field0110 gender from formmain_0210 f where f.field0007 is null and id not in (select id from formmain_0210 where field0066 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '人员分类' ) and showvalue = 'C类') and field0111 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '营销人员类别' ) and showvalue = '业代'))"; + + String getPostBlackList = "select field0005 from formmain_0758 f left join ctp_enum_item e on f.field0003 = e.id where e.enumvalue in ('1','3','5','6') "; + String getMemberWhiteList ="select field0005 from formmain_0759 f left join ctp_enum_item e on f.field0003 = e.id where e.enumvalue in ('1','3','5','6') "; + +// String getPostBlackList = "select field0005 from formmain_0746 f left join ctp_enum_item e on f.field0003 = e.id where e.enumvalue in ('1','3','5','6') "; +// String getMemberWhiteList ="select field0005 from formmain_0747 f left join ctp_enum_item e on f.field0003 = e.id where e.enumvalue in ('1','3','5','6') "; + + + public List updateArchiveByCode(JSONArray datas) throws SQLException { + int issum; + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList(); + Connection connection = JDBCAgent.getRawConnection(); + connection.setAutoCommit(false); + Statement statement = connection.createStatement(); + try { + int num = 0; + for(int i = 0; i < datas.size(); ++i) { + StringBuilder sql = new StringBuilder(this.updateArchiveByCode); + JSONObject data = datas.getJSONObject(i); + String code = data.getString("code"); + JSONObject faields = data.getJSONObject("data"); + Set keySet = faields.keySet(); + Iterator var14 = keySet.iterator(); + + while(var14.hasNext()) { + String key = (String)var14.next(); + sql.append(key + "= '" + faields.getString(key) + "' ,"); + } + sql = new StringBuilder(sql.substring(0, sql.length() - 1)); + sql.append(" where field0046 = '" + code + "'"); + issum = statement.executeUpdate(sql.toString()); + if (issum > 0) { + ++num; + } else { + res.add(code); + } + } + if (num != datas.size()) { + connection.rollback(); + } else { + connection.commit(); + } + } catch (Exception var21) { + var21.printStackTrace(); + + try { + if (connection != null) { + connection.rollback(); + } + } catch (SQLException var20) { + var20.printStackTrace(); + } + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// select * from formmain_0210 where modify_date >= ? + @Override + public List> getIncrementDataByModifyDate (String startDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getIncrementDataByModifyDate); + List p = new ArrayList(); + p.add(startDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public Map getMemberArchiveById(long memberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberArchiveById); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public Map getMemberArchiveByMemberId(long memberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberArchiveByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public MapgetMemberArchiveByClientMemberId(long clientMemberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberArchiveByClientMemberId); + List p = new ArrayList(); + p.add(clientMemberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public List getPostBlackList(){ + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getPostBlackList); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + String posts = map.get("field0005").toString(); + for(String postId:posts.split(",")){ + res.add(postId); + } + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public List getMemberWhiteList(){ + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberWhiteList); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + String members = map.get("field0005").toString(); + for (String memberId: members.split(",")) { + res.add(memberId); + } + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// select field0047 as state,field0069 as dept_id,field0030 as post_id, field0192 as name ,field0110 as sex,field0010 as birthdate, field0016 as telnumter from formmain_0210 where field0066 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '人员分类' ) and showvalue = 'C类') and field0080 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '营销人员类别' ) and showvalue = '业代') and modify_date >= ? + @Override + public List> getServiceBrokers (String startDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getServiceBrokersBystartDate); + List p = new ArrayList(); + p.add(startDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// select field0047 as state,field0069 as dept_id,field0030 as post_id, field0192 as name ,field0110 as sex,field0010 as birthdate, field0016 as telnumter from formmain_0210 where field0066 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '人员分类' ) and showvalue = 'C类') and field0080 = (select id from ctp_enum_item where ref_enumid = (select id from ctp_enum where enumname = '营销人员类别' ) and showvalue = '业代') and modify_date >= ? + @Override + public List> getServiceBrokers (){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getServiceBrokers); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public List> getClientMembersByModifyDate(String startDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getClientMembersByModifyDate); + List p = new ArrayList(); + p.add(startDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public List> getAllCustomer(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getAllCustomer); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public Map findMemberByFormmainId(String formmainId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.findMemberByFormmainId); + List p = new ArrayList(); + p.add(formmainId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public List> findMemberOtherData(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.findMemberOtherData); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/OrgRoleDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/OrgRoleDaoImpl.java new file mode 100644 index 0000000..a59ad1b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/OrgRoleDaoImpl.java @@ -0,0 +1,45 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.IOrgRoleDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class OrgRoleDaoImpl implements IOrgRoleDao { + String getRoleIdById = "select id from org_role where id = ?"; + + public OrgRoleDaoImpl() { + } + + public List getRoleIdById(String id) throws SQLException { + JDBCAgent agent = new JDBCAgent(); + ArrayList ids = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.getRoleIdById); + List p = new ArrayList(); + p.add(id); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + String resid = ((Map)list.get(i)).get("id").toString(); + ids.add(resid); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return ids; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcAccountDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcAccountDaoImpl.java new file mode 100644 index 0000000..f6a85b3 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcAccountDaoImpl.java @@ -0,0 +1,196 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.ISrcAccountDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +public class SrcAccountDaoImpl implements ISrcAccountDao { + + String getAccountId = "select id from org_unit where (id = ? or name = ?)"; + String getSubordinateAccountByPath = "select id from org_unit where type = 'Account' and path like '${path}____'"; + String getAccountById = "select id,name,code,path from org_unit where type = 'Account' and id = ?"; + String getAccountByPath = "select id,name,code,path from org_unit where type = 'Account' and path = ?"; + String getIncrementAccountByModifyDate = "select id,name,code,path,is_enable,sort_id from org_unit where type = 'Account' and id <> -1730833917365171641 and (path not like '00000017%' or name = '湖北省知与行人力资源管理有限公司' ) and is_enable = 1 and update_time >= ?"; + String getAllAccounts = "select id,name,code,path,is_enable,type,sort_id from org_unit where type = 'Account' and id <> -1730833917365171641 and (path not like '00000017%' or name = '湖北省知与行人力资源管理有限公司' ) and is_enable = 1 order by SORT_ID"; + +// select id from org_unit where (id = ? or name = ?) + @Override + public String getAccountId(String orgAccount) throws SQLException { + JDBCAgent agent = new JDBCAgent(); + String accountId = ""; + try { + StringBuilder sql = new StringBuilder(this.getAccountId); + List p = new ArrayList(); + p.add(orgAccount); + p.add(orgAccount); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + accountId = ((Map)list.get(i)).get("id").toString(); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return accountId; + } + +// select id from org_unit where type = 'Account' and path like '${path}____' + @Override + public List getSubordinateAccountByPath(String accountPath){ + JDBCAgent agent = new JDBCAgent(); + List accountIds = new ArrayList<>(); + try { + String str = this.getSubordinateAccountByPath.replaceAll(Pattern.quote("${path}"),accountPath); + StringBuilder sql = new StringBuilder(str); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + accountIds.add(list.get(i).get("id").toString()); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return accountIds; + } + + + // select id,name,code,path from org_unit where type = 'Account' and id = ? + @Override + public Map getAccountById(String accountId){ + JDBCAgent agent = new JDBCAgent(); + Map account = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getAccountById); + List p = new ArrayList(); + p.add(accountId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + account = list.get(0); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return account; + } + + + // select id from org_unit where (id = ? or name = ?) + @Override + public Map getAccountByPath(String accountPath){ + JDBCAgent agent = new JDBCAgent(); + Map account = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getAccountByPath); + List p = new ArrayList(); + p.add(accountPath); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + account = list.get(0); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return account; + } + +// select id from org_unit where type = 'Account' and update_time >= '2025-06-06' + @Override + public List> getIncrementAccountByUpdateTime (String startDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getIncrementAccountByModifyDate); + List p = new ArrayList(); + p.add(startDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + + @Override + public List> getAllAccounts(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getAllAccounts); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcDepartmentDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcDepartmentDaoImpl.java new file mode 100644 index 0000000..8d26aba --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcDepartmentDaoImpl.java @@ -0,0 +1,198 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.ISrcDepartmentDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +public class SrcDepartmentDaoImpl implements ISrcDepartmentDao { + + + String getSubordinateDepartmentByPath = "select id from org_unit where type = 'Department' and path like '${path}____'"; + String getDepartmentByPath = "select name,code,path,id from org_unit where type = 'Department' and path like ?"; + String getIncrementDepartmentByUpdateTime = "select id,code,name,path,is_enable,org_account_id,sort_id from org_unit where type = 'Department' and update_time >= ?"; + String getAllDepatrment = "select id,code,name,path,is_enable,org_account_id,sort_id from org_unit where type = 'Department' and path not like '00000017%' and is_enable = 1 and org_account_id <> -1730833917365171641 order by SORT_ID"; + String getDepartmentBySuperPath = "select id from org_unit where type = 'Department' and path like '${path}%'"; + String getSuperUnitIdByPath = "select id from org_unit where path = ? and IS_ENABLE = '1'"; + +// select id from org_unit where type = 'Department' and path like '${path}____' + @Override + public List getSubordinateDepartmentByPath(String accountPath){ + JDBCAgent agent = new JDBCAgent(); + List departmentIds = new ArrayList<>(); + try { + String str = this.getSubordinateDepartmentByPath.replaceAll(Pattern.quote("${path}"),accountPath); + StringBuilder sql = new StringBuilder(str); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + departmentIds.add(list.get(i).get("id").toString()); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return departmentIds; + } + +// select name,code,path,id from org_unit where type = 'Department' and path like ? + @Override + public Map getDepartmentByPath(String path){ + JDBCAgent agent = new JDBCAgent(); + Map department = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getDepartmentByPath); + List p = new ArrayList(); + p.add(path); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + department = list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return department; + } + + + +// select id from org_unit where type = 'Account' and update_time >= '2025-06-06' + @Override + public List> getIncrementDepartmentByUpdateTime (String startDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getIncrementDepartmentByUpdateTime); + List p = new ArrayList(); + p.add(startDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + + // select id,name,code,path,is_enable from org_unit where type = 'Account' + @Override + public List> getAllDepartments (){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getAllDepatrment); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + // select id from org_unit where type = 'Department' and path like '${path}%' + @Override + public List getDepartmentBySuperPath(String accountPath){ + JDBCAgent agent = new JDBCAgent(); + List departmentIds = new ArrayList<>(); + try { + String str = this.getSubordinateDepartmentByPath.replaceAll(Pattern.quote("${path}"),accountPath); + StringBuilder sql = new StringBuilder(str); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + departmentIds.add(list.get(i).get("id").toString()); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return departmentIds; + } + +// select id from org_unit where path = ? and IS_ENABLE = '1' + public String getSuperUnitIdByPath(String path){ + JDBCAgent agent = new JDBCAgent(); + String departmentId = ""; + try { + StringBuilder sql = new StringBuilder(getSuperUnitIdByPath); + List p = new ArrayList(); + p.add(path); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + departmentId = list.get(i).get("id").toString(); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return departmentId; + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java new file mode 100644 index 0000000..6c8f9a5 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcEnumDaoImpl.java @@ -0,0 +1,74 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.dao.ISrcEnumDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcEnumDaoImpl implements ISrcEnumDao { + + private String getEnumByExtAttr = "select label,name,alias,column_rule from ctp_metadata_column where name = ?"; + private String getEnumItemByRefEnumIdValue = "select id,ref_enumid,showvalue,enumvalue from ctp_enum_item where ref_enumid = ? and enumvalue = ?"; + + @Override + public String getEnumByExtAttr(String extAttrName) { + JDBCAgent agent = new JDBCAgent(); + String enumId = ""; + try { + StringBuilder sql = new StringBuilder(this.getEnumByExtAttr); + List p = new ArrayList(); + p.add(extAttrName); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + Map map = (Map) list.get(0); + String columnRule = map.get("column_rule").toString(); + JSONObject column = JSONObject.parseObject(columnRule); + enumId = column.getString("codeId"); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return enumId; + } + + @Override + public String getEnumItemByRefEnumIdValue(String refEnumId,String enumValue) { + JDBCAgent agent = new JDBCAgent(); + String enumItemId = ""; + try { + StringBuilder sql = new StringBuilder(this.getEnumItemByRefEnumIdValue); + List p = new ArrayList(); + p.add(refEnumId); + p.add(enumValue); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + enumItemId = list.get(0).get("id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return enumItemId; + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcFormTableDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcFormTableDaoImpl.java new file mode 100644 index 0000000..d113196 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcFormTableDaoImpl.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.ISrcFormTableDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcFormTableDaoImpl implements ISrcFormTableDao { + + private String getMemberDifferenceIds = " SELECT m.* FROM org_member m LEFT JOIN formmain_0210 f ON m.id=f.field0007 WHERE f.id IS NULL AND m.IS_ENABLE=1 AND m.IS_DELETEd=0 and m.org_account_id not in( -1730833917365171641,3695237350552978435) and m.id not in (-7983617918136007951,527060303679013620)"; + + @Override + public List getMemberDifferenceIds (){ + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberDifferenceIds); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0; i < list.size(); ++i) { + if (list.size() != 0) { + String id = list.get(i).get("id").toString(); + res.add(id); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcLevelDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcLevelDaoImpl.java new file mode 100644 index 0000000..b729104 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcLevelDaoImpl.java @@ -0,0 +1,43 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + + +import com.seeyon.apps.src_mainorganization.dao.ISrcLevelDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcLevelDaoImpl implements ISrcLevelDao { + + private String getLevelIdByAccountLevel = "select id from org_level where name = (select name from org_level where id = ?) and org_account_id = ?"; + + @Override + public String getLevelIdByAccountLevel(long oldLevelId, long orgAccountId) { + JDBCAgent agent = new JDBCAgent(); + String levelId = ""; + try { + StringBuilder sql = new StringBuilder(getLevelIdByAccountLevel); + List p = new ArrayList(); + p.add(oldLevelId); + p.add(orgAccountId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + Map map = list.get(0); + levelId = map.get("id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return levelId; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java new file mode 100644 index 0000000..c0c1db0 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcMemberDaoImpl.java @@ -0,0 +1,652 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; +import www.seeyon.com.utils.StringUtil; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SrcMemberDaoImpl implements ISrcMemberDao { + + private String getMemberMaxSortId = "select max(sort_id) as max_sort_id from org_member "; + private String queryMembers = " select m.id,m.name,m.code from org_member m left join org_unit a on m.org_account_id = a.id where (m.org_account_id = ? or a.name = ?) "; + private String queryFormMembers = " select m.id,m.field0192 name,m.field0070 code from formmain_0210 m left join org_unit a on m.field0068 = a.id where (m.field0068 = ? or a.name = ?) "; + private String queryServiceAgentMembers = "SELECT id AS member_id,field0068 AS account_id,field0190 AS department_id,field0030 AS post_id,field0097 AS level_id,field0070 AS member_code,field0192 AS member_name,field0110 AS gender,field0010 AS birthday,field0047 AS is_enabled,field0016 AS telnember,field0195 AS yd_post_id,\"\" AS hiredate FROM formmain_0210 WHERE field0066=( SELECT id FROM ctp_enum_item WHERE showvalue='C类') AND field0111=( SELECT id FROM ctp_enum_item WHERE showvalue='业代')"; + private String queryCustomerMembers = "select * from formmain_0208 "; + private String queryClientByName = "select field0001 as client_code,field0002 as client_name,field0067 as area,field0007 as state,field0011 as credit_identifier,field0062 as deputy_manager from formmain_0208 where field0002 = ?"; + private String getAllMembers = "select id,name,code,is_enable,org_account_id,org_post_id,org_department_id from org_member "; + private String getMembersByStartDate = "select id,name,code,is_enable,org_account_id,org_post_id,org_department_id from org_member where update_time>=?"; + private String getAllClientMembers = "select id,name,code,is_enable,org_account_id,org_post_id,org_department_id from org_member where org_account_id in ( select id from org_unit where path like '00000017%' and type = 'Account')"; + private String getMemberById = "select id,name,code,is_enable,org_account_id,org_post_id,org_department_id from org_member where id = ?"; + private String getMemberByDepartmentId = "select id,name,code,is_enable,org_account_id,org_post_id,org_department_id,'account' type from org_member where org_department_id = ? and is_enable = 1 order by SORT_ID"; + private String getMemberByAccountId = "select id,name,code,is_enable,org_account_id,org_post_id,org_department_id,'account' type from org_member where org_account_id = ? and is_enable = 1 order by SORT_ID"; + +// select max(sort_id) as max_sort_id from org_member + @Override + public String getMemberMaxSortId() { + JDBCAgent agent = new JDBCAgent(); + String sortId = ""; + try { + StringBuilder sql = new StringBuilder(this.getMemberMaxSortId); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + Map map = (Map) list.get(0); + sortId = map.get("max_sort_id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return sortId; + } + +// select id,name,code from org_member where (org_account_id = ? or arg_account_id = ?) + @Override + public List> queryMembers(String orgAccount,String orgDepartment,String startDate,String endDate) { + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.queryMembers); + List p = new ArrayList(); + p.add(orgAccount); + p.add(orgAccount); + if(StringUtil.isNotEmpty(orgDepartment)){ + sql.append(" and (m.org_department_id = '"+orgDepartment+"' or m.org_department_id in (select id from org_unit where name = '"+orgDepartment+"'))"); + } + if(StringUtil.isNotEmpty(startDate)){ + sql.append(" and m.update_time >= '" + startDate +"'"); + } + if(StringUtil.isNotEmpty(endDate)){ + sql.append(" and m.update_time <= '"+ endDate +"'"); + } + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + // select id,name,code from formmain_0210 where (org_account_id = ? or arg_account_id = ?) + @Override + public List> queryFormMembers(String orgAccount,String orgDepartment,String startDate,String endDate) { + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.queryFormMembers); + List p = new ArrayList(); + p.add(orgAccount); + p.add(orgAccount); + if(StringUtil.isNotEmpty(orgDepartment)){ + sql.append(" and (m.field0069 = '"+orgDepartment+"' or m.field0069 in (select id from org_unit where name = '"+orgDepartment+"'))"); + } + if(StringUtil.isNotEmpty(startDate)){ + sql.append(" and m.modify_date >= '" + startDate +"'"); + } + if(StringUtil.isNotEmpty(endDate)){ + sql.append(" and m.modify_date <= '"+ endDate +"'"); + } + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// select * from formmain_0210 where field0066 = (select id from ctp_enum_item where showvalue = 'C类') and field0111 = (select id from ctp_enum_item where showvalue = '业代') + @Override + public List> queryServiceAgentMembers (String startDate,String endDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.queryServiceAgentMembers); + if(StringUtil.isNotEmpty(startDate)){ + sql.append(" and m.modify_date >= '" + startDate +"'"); + } + if(StringUtil.isNotEmpty(endDate)){ + sql.append(" and m.modify_date <= '"+ endDate +"'"); + } + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// select * from formmain_0208 + @Override + public List> queryCustomerMembers(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.queryCustomerMembers); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// select * from formmain_0208 where field0002 = ? + @Override + public Map queryClientByName (String clientName){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.queryClientByName); + List p = new ArrayList(); + p.add(clientName); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + // select * from org_member where field0002 = ? + @Override + public List> getMembersByStartDate (String startDate){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.getMembersByStartDate); + List p = new ArrayList(); + p.add(startDate); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + if(res.size()==0){ + return null; + } + return res; + } + + @Override + public List> getAllMembers (){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.getAllMembers); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); ++i) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + if(res.size()==0){ + return null; + } + return res; + } + + @Override + public List> getAllClientMembers(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.getAllClientMembers); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + if(res.size()==0){ + return null; + } + return res; + } + +// select id,name,code,is_enable,org_account_id,org_post_id,org_department_id from org_member where is_enable = 1 and id = ? + public Map getMemberById(String memberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberById); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + if(res.size()==0){ + return null; + } + return res; + } + + // 根据部门ID获取部门下人员列表 + public List> getMemberByDepartmentId(String departmentId){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.getMemberByDepartmentId); + List p = new ArrayList(); + p.add(departmentId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + + + // 根据单位ID获取单位下所有人员列表 + public List> getMemberByAccountId(String accountId){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList(); + try { + StringBuilder sql = new StringBuilder(this.getMemberByAccountId); + List p = new ArrayList(); + p.add(accountId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + private String getMemberDataByMemberId = "SELECT m.id,m.NAME,m.CODE,m.ext_attr_1 phone,a.NAME account_name,d.NAME department_name,p.NAME post_name,l.NAME level_name,pr.login_name,f.field0013 member_no,ht.NAME htzt_name,yg.NAME ygzt_name,f.id record_id,'' bazaar_account,'' bazaar_department " + + "FROM org_member m LEFT JOIN org_principal pr ON m.id=pr.member_id " + + "LEFT JOIN formmain_0210 f ON m.id=f.field0007 " + + "LEFT JOIN org_unit ht ON f.field0187=ht.id " + + "LEFT JOIN org_unit yg ON f.field0188=yg.id " + + "LEFT JOIN org_unit a ON m.org_account_id=a.id " + + "LEFT JOIN org_unit d ON m.org_department_id=d.id " + + "LEFT JOIN org_post p ON m.org_post_id=p.id " + + "LEFT JOIN org_level l ON m.org_level_id=l.id WHERE m.id=? order by m.SORT_ID"; + @Override + public Map getMemberDataByMemberId(String memberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getMemberDataByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + String getYDMemberDataByMemberId = "SELECT f.id,f.field0192 NAME,f.field0070 CODE,f.field0016 phone,'营销门户' account_name,d.NAME department_name,p.NAME post_name,l.NAME level_name,'' login_name,f.field0013 member_no,ht.NAME htzt_name,yg.NAME ygzt_name,'' bazaar_account,'' bazaar_department,f.id record_id " + + "FROM formmain_0210 f LEFT JOIN org_unit d ON f.field0190=d.id " + + "LEFT JOIN org_post p ON f.field0195=p.id " + + "LEFT JOIN org_level l ON f.field0097=l.id " + + "LEFT JOIN org_unit ht ON f.field0187=ht.id " + + "LEFT JOIN org_unit yg ON f.field0188=yg.id WHERE f.id=?"; + @Override + public Map getYDMemberDataByMemberId(String memberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getYDMemberDataByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + String getKHMemberDataByMemberId = "SELECT m.id,m.NAME,m.CODE,m.ext_attr_1 phone,a.NAME account_name,d.NAME department_name,ba.NAME bazaar_account,bd.NAME bazaar_department,p.NAME post_name,l.NAME level_name,pr.login_name,f.field0013 member_no,ht.NAME htzt_name,yg.NAME ygzt_name,f.id record_id " + + "FROM org_member m LEFT JOIN org_principal pr ON m.id=pr.member_id " + + "LEFT JOIN formmain_0210 f ON m.id=f.field0007 " + + "LEFT JOIN org_unit ht ON f.field0187=ht.id " + + "LEFT JOIN org_unit yg ON f.field0188=yg.id " + + "LEFT JOIN org_unit ba ON m.org_account_id=ba.id " + + "LEFT JOIN org_unit bd ON m.org_department_id=bd.id " + + "LEFT JOIN org_post p ON m.org_post_id=p.id " + + "LEFT JOIN org_level l ON m.org_level_id=l.id " + + "LEFT JOIN org_unit d ON f.field0190=d.id " + + "LEFT JOIN org_unit a ON d.org_account_id=a.id WHERE m.id=? order by m.SORT_ID"; + @Override + public Map getKHMemberDataByMemberId(String memberId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(this.getKHMemberDataByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + res = (Map)list.get(i); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + private String getYDMemberAll = "select f.id,f.field0192 name,f.field0016 code,'1' is_enable,d.org_account_id,f.field0195 org_post_id,f.field0190 org_department_id,'yd' as type from formmain_0210 f left join org_unit d on f.field0190 = d.id where field0066 = -7849337715231929638 and field0111 = -5762677149653253400 and field0047 in (-8568095563672566586,-3249508753302796027,-2492846603920586137)"; + @Override + public List> getYDMemberAll(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getYDMemberAll); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + private String getKHMemberAll = "select m.id,m.name,m.code,m.is_enable,fd.org_account_id,m.org_post_id,fd.id org_department_id ,'kh' as type from org_member m left join org_unit a on m.org_account_id = a.id left join formmain_0210 f on m.id = f.field0007 left join org_unit fd on fd.id = f.field0190 where a.path like '00000017%' and m.IS_ENABLE = 1 and f.field0190 is not null order by m.SORT_ID"; + @Override + public List> getKHMemberAll(){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getKHMemberAll); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + private String getYDMemberByDepartment = "select f.id,f.field0192 name,f.field0016 code,'1' is_enable,d.org_account_id,f.field0195 org_post_id,f.field0190 org_department_id ,'yd'as type from formmain_0210 f left join org_unit d on f.field0190 = d.id where field0066 = -7849337715231929638 and field0111 = -5762677149653253400 and field0047 in (-8568095563672566586,-3249508753302796027,-2492846603920586137) and f.field0190 = ?"; + @Override + public List> getYDMemberByDepartment(String departmentId){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getYDMemberByDepartment); + List p = new ArrayList(); + p.add(departmentId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + private String getKHMemberByDepartment = "select m.id,m.name,m.code,m.is_enable,fd.org_account_id,m.org_post_id,fd.id org_department_id,'kh' as type from org_member m left join org_unit a on m.org_account_id = a.id left join formmain_0210 f on m.id = f.field0007 left join org_unit fd on fd.id = f.field0190 where a.path like '00000017%' and m.IS_ENABLE = 1 and f.field0190 is not null and fd.id = ? order by m.SORT_ID"; + @Override + public List> getKHMemberByDepartment(String departmentId){ + JDBCAgent agent = new JDBCAgent(); + List> res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(this.getKHMemberByDepartment); + List p = new ArrayList(); + p.add(departmentId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + for(int i = 0; i < list.size(); i++) { + Map map = (Map)list.get(i); + res.add(map); + } + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } +// if(res.size()==0){ +// return null; +// } + return res; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcPostDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcPostDaoImpl.java new file mode 100644 index 0000000..96b3678 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SrcPostDaoImpl.java @@ -0,0 +1,43 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + + +import com.seeyon.apps.src_mainorganization.dao.ISrcPostDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class SrcPostDaoImpl implements ISrcPostDao { + + private String getPostIdByAccountPost = "select source_id from org_relationship where TYPE = 'Banchmark_Post' and objective0_id = (select objective0_id from org_relationship where TYPE = 'Banchmark_Post' and source_id = ?) and org_account_id = ?"; + + @Override + public String getPostIdByAccountPost(long oldPostId, long orgAccountId) { + JDBCAgent agent = new JDBCAgent(); + String postId = ""; + try { + StringBuilder sql = new StringBuilder(getPostIdByAccountPost); + List p = new ArrayList(); + p.add(oldPostId); + p.add(orgAccountId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + Map map = list.get(0); + postId = map.get("source_id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return postId; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncDdDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncDdDaoImpl.java new file mode 100644 index 0000000..00bcdff --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncDdDaoImpl.java @@ -0,0 +1,463 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.ISyncDdDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SyncDdDaoImpl implements ISyncDdDao { + + private String getAccountBinding = "select org_account_id,org_account_name,dd_account_id,dd_account_name from src_dingding_unit where org_account_id = ?"; + private String saveAccountBinding = "INSERT INTO src_dingding_unit (org_account_id, org_account_name, dd_account_id, dd_account_name) VALUES (?, ?, ?, ?)"; + private String updateAccountBinding = "update src_dingding_unit set dd_account_id = ? , dd_account_name = ? where org_account_id = ?"; + private String getDepartmentBinding = "select org_department_id,org_department_name,dd_department_id,dd_department_name from src_dingding_dept where org_department_id = ?"; + private String saveDepartmentBinding = "INSERT INTO src_dingding_dept (org_department_id, org_department_name, dd_department_id, dd_department_name) VALUES (?, ?, ?, ?)"; + private String updateDepartmentBinding = "update src_dingding_dept set dd_department_id = ? , dd_department_name = ? where org_department_id = ?"; + private String deleteDepartmentBinding = "delete from src_dingding_dept where org_department_id = ?"; + private String getMemberBinding = "select org_member_id,org_member_name,dd_member_id,dd_member_name,dd_member_telnumber from src_dingding_member where org_member_id = ? "; + private String saveMemberBinding = "INSERT INTO src_dingding_member (org_member_id, org_member_name, dd_member_id, dd_member_name,dd_member_telnumber) VALUES (?, ?, ?, ?, ?)"; + private String updateMemberBinding = "update src_dingding_member set dd_member_id = ? , dd_member_name = ? ,dd_member_telnumber = ? where org_member_id = ? and dd_member_telnumber = ?"; + private String deleteMemberBinding = "delete from src_dingding_member where org_member_id = ?"; + private String getMaxSynchronizationDate = "select max(create_date) as max_create_date from cst_quartz_log where PARENTID = (select id from CST_QUARTZ where bean_id = 'organizationQuartz') and message not like '%任务执行异常%' and message not like '%上次的任务还在运行中%'"; + +// select org_account_id,org_account_name,dd_account_id,dd_account_name from src_dingding_unit where org_account_id = ? + @Override + public Map getAccountBinding(String orgAccountId) { + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getAccountBinding); + List p = new ArrayList(); + p.add(orgAccountId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// INSERT INTO src_dingding_unit (org_account_id, org_account_name, dd_account_id, dd_account_name) VALUES (?, ?, ?, ?) + @Override + public int saveAccountBinding(String accountId, String accountName, String ddAccountId, String ddAccountName) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(saveAccountBinding); + List p = new ArrayList(); + p.add(accountId); + p.add(accountName); + p.add(ddAccountId); + p.add(ddAccountName); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// update src_dingding_unit set dd_account_id = ? , dd_account_name = ? where org_account_id = ? + @Override + public int updateAccountBinding(String accountId, String accountName, String ddAccountId, String ddAccountName) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(updateAccountBinding); + List p = new ArrayList(); + p.add(ddAccountId); + p.add(ddAccountName); + p.add(accountId); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// select org_department_id,org_department_name,dd_department_id,dd_department_name from src_dingding_dept where org_department_id = ? + @Override + public Map getDepartmentBinding(String orgDepartmentId) { + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getDepartmentBinding); + List p = new ArrayList(); + p.add(orgDepartmentId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// INSERT INTO src_dingding_dept (org_department_id, org_department_name, dd_department_id, dd_department_name) VALUES (?, ?, ?, ?) + @Override + public int saveDepartmentBinding(String departmentId, String departmentName, String ddDepartmentId, String ddDepartmentName) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(saveDepartmentBinding); + List p = new ArrayList(); + p.add(departmentId); + p.add(departmentName); + p.add(ddDepartmentId); + p.add(ddDepartmentName); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + // update src_dingding_dept set dd_department_id = ? , dd_department_name = ? where org_department_id = ? + @Override + public int updateDepartmentBinding(String departmentId, String departmentName, String ddDepartmentId, String ddDepartmentName) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(updateDepartmentBinding); + List p = new ArrayList(); + p.add(ddDepartmentId); + p.add(ddDepartmentName); + p.add(departmentId); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// delete from src_dingding_dept where org_department_id = ? + @Override + public int deleteDepartmentBinding(String departmentId){ + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(deleteDepartmentBinding); + List p = new ArrayList(); + p.add(departmentId); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// select org_member_id,org_member_name,dd_member_id,dd_member_name,dd_member_telnumber from src_dingding_member where org_member_id = ? + @Override + public Map getMemberBinding(String orgMemberId ) { + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getMemberBinding); + List p = new ArrayList(); + p.add(orgMemberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + +// INSERT INTO src_dingding_member (org_member_id, org_member_name, dd_member_id, dd_member_name, dd_member_telnumber) VALUES (?, ?, ?, ?,?) + @Override + public int saveMemberBinding(String memberId, String membertName, String ddMemberId, String ddMemberName,String telnumber) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(saveMemberBinding); + List p = new ArrayList(); + p.add(memberId); + p.add(membertName); + p.add(ddMemberId); + p.add(ddMemberName); + p.add(telnumber); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// update src_dingding_member set dd_member_id = ? , dd_member_name = ? ,dd_member_telnumber where org_member_id = ? + @Override + public int updateMemberBinding(String memberId, String memberName, String ddMemberId, String ddMemberName ,String telnumber) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(updateMemberBinding); + List p = new ArrayList(); + p.add(ddMemberId); + p.add(ddMemberName); + p.add(telnumber); + p.add(memberId); + p.add(telnumber); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// delete from src_dingding_member where org_member_id = ? + @Override + public int deleteMemberBinding(String memberId){ + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(deleteMemberBinding); + List p = new ArrayList(); + p.add(memberId); + i=agent.execute(sql.toString(), p); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + +// "select max(create_date) as max_create_date from cst_quartz_log where PARENTID = (select id from CST_QUARTZ where bean_id = 'organizationQuartz') and message not like '%任务执行异常%' and message not like '%上次的任务还在运行中%'" + public Map getMaxSynchronizationDate (){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getMaxSynchronizationDate); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + + + + + + + + private String getAccountsBinding = "select org_account_id,org_account_name,dd_account_id,dd_account_name from src_dingding_unit "; + @Override + public List getAccountsBinding(){ + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(getAccountsBinding); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0 ; i < list.size(); i++){ + res.add(Long.parseLong(list.get(i).get("dd_account_id").toString())); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + private String getDepartmentsBinding = "select org_department_id,org_department_name,dd_department_id,dd_department_name from src_dingding_dept "; + @Override + public List getDepartmentsBinding(){ + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(getDepartmentsBinding); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0 ; i < list.size(); i++){ + res.add(Long.parseLong(list.get(i).get("dd_department_id").toString())); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + private String getMemberByMobile = "select id from org_member where ext_attr_1 = ? and IS_ENABLE = 1"; + @Override + public List getMemberByMobile(String mobile){ + JDBCAgent agent = new JDBCAgent(); + List res = new ArrayList<>(); + try { + StringBuilder sql = new StringBuilder(getMemberByMobile); + List p = new ArrayList(); + p.add(mobile); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for(int i = 0 ; i < list.size(); i++){ + res.add(Long.parseLong(list.get(i).get("id").toString())); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + + + + private String getAccountBindingByDdAccount = "select org_account_id,org_account_name,dd_account_id,dd_account_name from src_dingding_unit where dd_account_id = ?"; + @Override + public Map getAccountBindingByDdAccount(String ddAccountId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getAccountBindingByDdAccount); + List p = new ArrayList(); + p.add(ddAccountId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + private String getDepartmentBindingByDdDepartment = "select org_department_id,org_department_name,dd_department_id,dd_department_name from src_dingding_dept where dd_department_id = ?"; + @Override + public Map getDepartmentBindingByDdDepartment(String ddDepartmentId){ + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getDepartmentBindingByDdDepartment); + List p = new ArrayList(); + p.add(ddDepartmentId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncFvDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncFvDaoImpl.java new file mode 100644 index 0000000..9adff8d --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncFvDaoImpl.java @@ -0,0 +1,672 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.bo.ThirdDeptBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdMemberBo; +import com.seeyon.apps.src_mainorganization.dao.ISyncFvDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgPost; +import com.seeyon.ctp.util.JDBCAgent; +import www.seeyon.com.utils.StringUtil; + +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.*; + +public class SyncFvDaoImpl implements ISyncFvDao { + + private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + private String queryUnitById = "select * from src_sync_fvunit where id = ?"; + private String queryDeptById = "select * from src_sync_fvdept where id = ?"; + private String queryMemberHelpByMemberId = "select * from src_sync_fvmember where id = ?"; + private String queryPostById = "select * from src_sync_fvpost where id = ?"; + private String queryBanchmarkPostIdByPostId = "select objective0_id from org_relationship where TYPE = 'Banchmark_Post' and source_id = ?"; + +// 测试环境 +// private String queryMemberArchiveByMemberId = "select field0016 as phone,field0068 as member_account_id,field0069 as member_dept_id,field0030 as member_post_id,field0070 as member_code,field0007 as member_name,field0110 as member_sex_id from formmain_0199 where field0007 = ?"; + +// 正式环境 + private String queryMemberArchiveByMemberId = "select field0016 as phone,field0068 as member_account_id,field0069 as member_dept_id,field0030 as member_post_id,field0070 as member_code,field0007 as member_name,field0110 as member_sex_id from formmain_0210 where field0007 = ?"; + private String isMemberTypeById = "select field0007 as member_id,field0066 as member_type from formmain_0210 where field0007 = ?"; + + + + @Override + public boolean queryUnitById(String unitId) { + JDBCAgent agent = new JDBCAgent(); + boolean bool = false; + try { + StringBuilder sql = new StringBuilder(queryUnitById); + List p = new ArrayList(); + p.add(unitId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + bool = true; + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return bool; + } + + + @Override + public int addUnit(ThirdDeptBo thirdDept) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("INSERT INTO src_sync_fvunit "); + StringBuilder valuesql = new StringBuilder("value "); + insertsql.append("("); + valuesql.append("("); + if(thirdDept.getId() != -1){ + insertsql.append("id,org_account_id,outkey,"); + valuesql.append("'"+thirdDept.getId()+"','"+thirdDept.getOrgAccountId()+"','"+thirdDept.getId()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getName())){ + insertsql.append("account_name,"); + valuesql.append("'"+thirdDept.getName()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getCode())){ + insertsql.append("account_code,"); + valuesql.append("'"+thirdDept.getCode()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getSortId())){ + insertsql.append("sortid,"); + valuesql.append("'"+thirdDept.getSortId()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getShortName())){ + insertsql.append("shortname,"); + valuesql.append("'"+thirdDept.getShortName()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getSuperior()+"")){ + insertsql.append("super_account_id,"); + valuesql.append("'"+thirdDept.getSuperior()+"',"); + } + if(!thirdDept.getEnabled()){ + insertsql.append("account_state,"); + valuesql.append("'0',"); + }else{ + if(thirdDept.getIsDeleted()){ + insertsql.append("account_state,"); + valuesql.append("'0',"); + }else{ + insertsql.append("account_state,"); + valuesql.append("'1',"); + } + } + insertsql.append("update_time,"); + valuesql.append("'"+sdf.format(new Date())+"',"); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)).append(")"); + valuesql = new StringBuilder(valuesql.substring(0,valuesql.length()-1)).append(")"); + + i=agent.execute(insertsql.toString()+valuesql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + @Override + public int updateUnit(ThirdDeptBo thirdDept) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("update src_sync_fvunit set "); + if(StringUtil.isNotEmpty(thirdDept.getName())){ + //单位名称 + insertsql.append("account_name = '").append(thirdDept.getName()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getCode())){ + //单位编码 + insertsql.append("account_code = '").append(thirdDept.getCode()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getSortId())){ + //序号 + insertsql.append("sortid = '").append(thirdDept.getSortId()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getShortName())){ + //单位简称 + insertsql.append("shortname = '").append(thirdDept.getShortName()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getSuperior()+"")){ + //上级单位ID + insertsql.append("super_account_id = '").append(thirdDept.getSuperior()).append("',"); + } + if(!thirdDept.getEnabled()){ + insertsql.append("account_state = '0',"); + }else{ + if(thirdDept.getIsDeleted()){ + insertsql.append("account_state = '0',"); + }else{ + insertsql.append("account_state = '1',"); + } + } + insertsql.append("update_time = ").append("'"+sdf.format(new Date())+"'").append(","); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)) + .append(" where id = ").append(thirdDept.getId()); + + i=agent.execute(insertsql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + + @Override + public boolean queryDeptById(String deptId) { + JDBCAgent agent = new JDBCAgent(); + boolean bool = false; + try { + StringBuilder sql = new StringBuilder(queryDeptById); + List p = new ArrayList(); + p.add(deptId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + bool = true; + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return bool; + } + + @Override + public int addDept(ThirdDeptBo thirdDept) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("INSERT INTO src_sync_fvdept "); + StringBuilder valuesql = new StringBuilder("value "); + insertsql.append("("); + valuesql.append("("); + if(thirdDept.getId() != -1){ +// 部门ID + insertsql.append("id,outkey,"); + valuesql.append("'"+thirdDept.getId()+"','"+thirdDept.getId()+"',"); + } + if(thirdDept.getOrgAccountId() != -1){ +// 所属单位ID + insertsql.append("org_account_id,"); + valuesql.append("'"+thirdDept.getOrgAccountId()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getName())){ +// 部门名称 + insertsql.append("dept_name,"); + valuesql.append("'"+thirdDept.getName()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getCode())){ +// 部门编码 + insertsql.append("dept_code,"); + valuesql.append("'"+thirdDept.getCode()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getSortId())){ +// 排序号 + insertsql.append("sortid,"); + valuesql.append("'"+thirdDept.getSortId()+"',"); + } + if(StringUtil.isNotEmpty(thirdDept.getShortName())){ +// 部门简称 + insertsql.append("shortname,"); + valuesql.append("'"+thirdDept.getShortName()+"',"); + } + if(thirdDept.getSuperior() != -1){ +// 上级部门ID + insertsql.append("super_dept_id,"); + valuesql.append("'"+thirdDept.getSuperior()+"',"); + } + if(!thirdDept.getEnabled()){ + insertsql.append("dept_state,"); + valuesql.append("'1',"); + }else{ + if(thirdDept.getIsDeleted()){ + insertsql.append("dept_state,"); + valuesql.append("'1',"); + }else{ + insertsql.append("dept_state,"); + valuesql.append("'0',"); + } + } + insertsql.append("update_time,"); + valuesql.append("'"+sdf.format(new Date())+"',"); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)).append(")"); + valuesql = new StringBuilder(valuesql.substring(0,valuesql.length()-1)).append(")"); + + i=agent.execute(insertsql.toString()+valuesql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + @Override + public int updateDept(ThirdDeptBo thirdDept) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("update src_sync_fvdept set "); + if(thirdDept.getOrgAccountId() != -1){ + insertsql.append("org_account_id = '").append(thirdDept.getOrgAccountId()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getName())){ + insertsql.append("dept_name = '").append(thirdDept.getName()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getCode())){ + insertsql.append("dept_code = '").append(thirdDept.getCode()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getSortId())){ + insertsql.append("sortid = '").append(thirdDept.getSortId()).append("',"); + } + if(StringUtil.isNotEmpty(thirdDept.getShortName())){ + insertsql.append("shortname = '").append(thirdDept.getShortName()).append("',"); + } + if(thirdDept.getSuperior() != -1){ + insertsql.append("super_dept_id = '").append(thirdDept.getSuperior()).append("',"); + } + if(!thirdDept.getEnabled()){ + insertsql.append("dept_state = '1',"); + }else{ + if(thirdDept.getIsDeleted()){ + insertsql.append("dept_state = '1',"); + }else{ + insertsql.append("dept_state = '0',"); + } + } + insertsql.append("update_time = ").append("'"+sdf.format(new Date())+"'").append(","); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)) + .append(" where id = '").append(thirdDept.getId()+"'"); + + i=agent.execute(insertsql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + @Override + public Map queryMemberArchiveByMemberId(String memberId) { + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(queryMemberArchiveByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + + @Override + public Map queryMemberHelpByMemberId(String memberId) { + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(queryMemberHelpByMemberId); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public int updateMember(ThirdMemberBo thirdMember,Map memeberMap) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("update src_sync_fvmember set "); + if(thirdMember.getOrgAccountId() != -1){ + insertsql.append("org_account_id = ").append(thirdMember.getOrgAccountId()).append(","); + } + if(StringUtil.isNotEmpty(thirdMember.getName())){ + insertsql.append("member_name = '").append(thirdMember.getName()).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getCode())){ + insertsql.append("member_code = '").append(thirdMember.getCode()).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getLoginName())){ + insertsql.append("login_name = '").append(thirdMember.getLoginName()).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getOrgAccountId()+"")){ + insertsql.append("org_account_id = '").append(thirdMember.getOrgAccountId()).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getDeptId()+"")){ + insertsql.append("org_dept_id = '").append(thirdMember.getDeptId()).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getPostId()+"")){ + insertsql.append("org_post_id = '").append(thirdMember.getPostId()).append("',"); + } + if(StringUtil.isNotEmpty(memeberMap.get("phone")+"")){ + insertsql.append("phone = '").append(memeberMap.get("phone")).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getSecurityLevel()+"")){ + insertsql.append("security_level = '").append(thirdMember.getSecurityLevel()).append("',"); + } + if(StringUtil.isNotEmpty(thirdMember.getState()+"")){ + insertsql.append("state = '").append(thirdMember.getState()).append("',"); + } + + insertsql.append("update_time = ").append("'"+sdf.format(new Date())+"'").append(","); + insertsql.append("office_location = ").append("'default'").append(","); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)) + .append(" where id = ").append(thirdMember.getId()); + + i=agent.execute(insertsql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + + @Override + public int addMember(ThirdMemberBo thirdMember ,Map memeberMap) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("INSERT INTO src_sync_fvmember "); + StringBuilder valuesql = new StringBuilder("value "); + insertsql.append("("); + valuesql.append("("); + if(thirdMember.getId() != -1){ +// 部门ID + insertsql.append("id,outkey,"); + valuesql.append("'"+thirdMember.getId()+"','"+thirdMember.getId()+"',"); + } + if(thirdMember.getOrgAccountId() != -1){ +// 所属单位ID + insertsql.append("org_account_id,"); + valuesql.append("'"+thirdMember.getOrgAccountId()+"',"); + } + if(StringUtil.isNotEmpty(thirdMember.getName())){ +// 人员名称 + insertsql.append("member_name,"); + valuesql.append("'"+thirdMember.getName()+"',"); + } + if(StringUtil.isNotEmpty(thirdMember.getCode())){ +// 人员编码 + insertsql.append("member_code,"); + valuesql.append("'"+thirdMember.getCode()+"',"); + } + if(StringUtil.isNotEmpty(thirdMember.getLoginName())){ +// 登录名 + insertsql.append("login_name,"); + valuesql.append("'"+thirdMember.getLoginName()+"',"); + } + + if(StringUtil.isNotEmpty(thirdMember.getDeptId()+"")){ +// 部门编码 + insertsql.append("org_dept_id,"); + valuesql.append("'"+thirdMember.getDeptId()+"',"); + } + if(StringUtil.isNotEmpty(thirdMember.getPostId()+"")){ +// 岗位编码 + insertsql.append("org_post_id,"); + valuesql.append("'"+thirdMember.getPostId()+"',"); + } + if(StringUtil.isNotEmpty(memeberMap.get("phone")+"")){ +// 手机号 + insertsql.append("phone,"); + valuesql.append("'"+memeberMap.get("phone")+"',"); + } + if(StringUtil.isNotEmpty(thirdMember.getSecurityLevel()+"")){ +// 手机号 + insertsql.append("security_level,"); + valuesql.append("'"+thirdMember.getSecurityLevel()+"',"); + } + if(StringUtil.isNotEmpty(thirdMember.getState()+"")){ +// 人员状态 + insertsql.append("state,"); + valuesql.append("'"+thirdMember.getState()+"',"); + } + insertsql.append("update_time,office_location,"); + valuesql.append("'"+sdf.format(new Date())+"','default',"); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)).append(")"); + valuesql = new StringBuilder(valuesql.substring(0,valuesql.length()-1)).append(")"); + + i=agent.execute(insertsql.toString()+valuesql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + @Override + public boolean queryPostById(String postId) { + JDBCAgent agent = new JDBCAgent(); + boolean bool = false; + try { + StringBuilder sql = new StringBuilder(queryPostById); + List p = new ArrayList(); + p.add(postId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + bool = true; + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return bool; + } + + @Override + public String queryBanchmarkPostIdByPostId(String postId) { + JDBCAgent agent = new JDBCAgent(); + String banchmarkPostId = ""; + try { + StringBuilder sql = new StringBuilder(queryBanchmarkPostIdByPostId); + List p = new ArrayList(); + p.add(postId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + Map map = list.get(0); + banchmarkPostId = map.get("objective0_id").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return banchmarkPostId; + } + + @Override + public int updatePost(V3xOrgPost v3xOrgPost) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("update src_sync_fvpost set "); + if(v3xOrgPost.getOrgAccountId() != -1){ + insertsql.append("org_account_id = '").append(v3xOrgPost.getOrgAccountId()).append("',"); + } + if(StringUtil.isNotEmpty(v3xOrgPost.getName())){ + insertsql.append("post_name = '").append(v3xOrgPost.getName()).append("',"); + } + if(StringUtil.isNotEmpty(v3xOrgPost.getCode())){ + insertsql.append("post_code = '").append(v3xOrgPost.getCode()).append("',"); + } + if(StringUtil.isNotEmpty(v3xOrgPost.getName())){ + insertsql.append("shortname = '").append(v3xOrgPost.getName()).append("',"); + } + insertsql.append("update_time = ").append("'"+sdf.format(new Date())+"'").append(","); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)) + .append(" where id = '").append(v3xOrgPost.getId()+"'"); + + i=agent.execute(insertsql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + + @Override + public int addPost(V3xOrgPost v3xOrgPost) { + int i = 0 ; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder insertsql = new StringBuilder("INSERT INTO src_sync_fvpost "); + StringBuilder valuesql = new StringBuilder("value "); + insertsql.append("("); + valuesql.append("("); + if(v3xOrgPost.getId() != -1){ +// 部门ID + insertsql.append("id,outkey,"); + valuesql.append("'"+v3xOrgPost.getId()+"','"+v3xOrgPost.getId()+"',"); + } + if(v3xOrgPost.getOrgAccountId() != -1){ +// 所属单位ID + insertsql.append("org_account_id,"); + valuesql.append("'"+v3xOrgPost.getOrgAccountId()+"',"); + } + if(StringUtil.isNotEmpty(v3xOrgPost.getName())){ +// 部门名称 + insertsql.append("post_name,shortname,"); + valuesql.append("'"+v3xOrgPost.getName()+"','"+v3xOrgPost.getName()+"',"); + } + if(StringUtil.isNotEmpty(v3xOrgPost.getCode())){ +// 部门编码 + insertsql.append("post_code,"); + valuesql.append("'"+v3xOrgPost.getCode()+"',"); + } + insertsql.append("update_time,"); + valuesql.append("'"+sdf.format(new Date())+"',"); + insertsql = new StringBuilder(insertsql.substring(0, insertsql.length() - 1)).append(")"); + valuesql = new StringBuilder(valuesql.substring(0,valuesql.length()-1)).append(")"); + + i=agent.execute(insertsql.toString()+valuesql.toString()); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return i; + } + + + public String isMemberTypeById(String memberId){ + JDBCAgent agent = new JDBCAgent(); + String memberType = ""; + try { + StringBuilder sql = new StringBuilder(isMemberTypeById); + List p = new ArrayList(); + p.add(memberId); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list.size() != 0) { + Map map = list.get(0); + memberType = map.get("member_type").toString(); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return memberType; + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncQixuexingDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncQixuexingDaoImpl.java new file mode 100644 index 0000000..626c23b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/dao/impl/SyncQixuexingDaoImpl.java @@ -0,0 +1,40 @@ +package com.seeyon.apps.src_mainorganization.dao.impl; + +import com.seeyon.apps.src_mainorganization.dao.ISyncQixuexingDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SyncQixuexingDaoImpl implements ISyncQixuexingDao { + + private String getMaxSynchronizationDate = "select max(create_date) as max_create_date from cst_quartz_log where PARENTID = (select id from CST_QUARTZ where bean_id = 'organizationQuartz') and message not like '%任务执行异常%' and message not like '%上次的任务还在运行中%'"; + + @Override + public Map getMaxSynchronizationDate() { + JDBCAgent agent = new JDBCAgent(); + Map res = new HashMap<>(); + try { + StringBuilder sql = new StringBuilder(getMaxSynchronizationDate); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if(list.size()>0){ + res = list.get(0); + } + } catch (BusinessException var13) { + var13.printStackTrace(); + } catch (SQLException var14) { + var14.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/fieldCtrl/SynchronizationRepushBtn.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/fieldCtrl/SynchronizationRepushBtn.java new file mode 100644 index 0000000..d8abccf --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/fieldCtrl/SynchronizationRepushBtn.java @@ -0,0 +1,98 @@ +package com.seeyon.apps.src_mainorganization.fieldCtrl; + +import java.util.Map; + +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormSaveAsBean; +import com.seeyon.cap4.form.bean.button.CommonBtn; +import com.seeyon.cap4.form.modules.importandexport.BusinessDataBean; +import com.seeyon.cap4.form.util.Enums; + +/** + * @author kkdo + *
重新推送
+ */ +public class SynchronizationRepushBtn extends CommonBtn { + + @Override + public void init() { + this.setPluginId("synchronizationBtn");//设置插件或者组件id,和pluginCfg.xml中的id一致 + this.setIcon("cap-icon-synchronization-button"); + } + + @Override + public boolean canUse(Enums.FormType formType) { + return true; + } + + @Override + public String getKey() { + return "8381906109546975519";//给按钮设置一个key,可以随便取 + } + + @Override + public String getNameSpace() { + return "customBtn_" + this.getKey(); + } + + @Override + public String getText() { + return "组织架构同步按钮";//设置按钮名称 + } + + /* + /** + * 获取PC端自定义控件运行态资源注入信息 + * jsUri:定义PC端表单运行态加载第三方JavaScript的路径 + * cssUri:定义PC端表单运行态加载第三方CSS的路径 + * initMethod:定义PC端表单运行态第三方js入口方法名称 + * + * @return + */ + @Override + public String getPCInjectionInfo() { + return "{\"path\":\"apps_res/cap/customCtrlResources/synchronizationBtnResources/\",\"jsUri\":\"js/synchronization.js\",\"initMethod\":\"init\",\"nameSpace\":\"" + + this.getNameSpace() + "\"}"; + } + + @Override + public String getMBInjectionInfo() { + return null; + } + + /** + * 导出的扩展接口,应用绑定自定义按钮用,有需要的重写该方法 + * + * @param formBean 当前表单 + * @param businessDataBean 导出中间对象,如果有附件,可以放到对象中的unifiedExportAttachment中 + * @param resultMap 按鈕json + */ + @Override + public void getJson4Export(FormBean formBean, String customParam, BusinessDataBean businessDataBean, + Map resultMap) { + + } + + /** + * 在业务导入完之后,应用绑定自定义按钮的处理接口 + * @param formBean + * @param customParam + * @param businessDataBean + * @param btnInfoMap + */ + @Override + public void importInfoAfterBizImport(FormBean formBean, String customParam, BusinessDataBean businessDataBean, + Map btnInfoMap) { + + } + + /** + * 表单另存为应用绑定自定义按钮另存为接口,各个应用绑定自定义按钮需要处理自己的逻辑 + * @param formSaveAsBean + * @param formBean + * @param btnInfoMap + */ + public void otherSave(FormSaveAsBean formSaveAsBean, FormBean formBean, Map btnInfoMap) { + + } +} \ No newline at end of file diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/node/TestNode.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/node/TestNode.java new file mode 100644 index 0000000..a56bf70 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/node/TestNode.java @@ -0,0 +1,134 @@ +package com.seeyon.apps.src_mainorganization.node; + + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.aspose.words.FieldData; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.common.workflow.constants.WorkFlowType; +import com.seeyon.apps.common.workflow.node.ACommonSuperNode; +import com.seeyon.apps.ext.workflow.vo.FieldDataVo; +import com.seeyon.apps.ext.workflow.vo.FormDataVo; +import com.seeyon.apps.ext.workflow.vo.SuperNodeContext; +import com.seeyon.cap4.form.bean.FormDataMasterBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.filemanager.manager.FileManager; +import com.seeyon.ctp.common.po.filemanager.V3XFile; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; + +import javax.inject.Inject; +import java.io.File; +import java.util.List; + + +public class TestNode extends ACommonSuperNode { + + private static Log log = Log.get(TestNode.class); + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + + @Inject + private OrgManager orgManager; + @Inject + private AttachmentManager attachmentManager; + @Inject + private FileManager fileManager; + + @Override + public String getFormParse() { + return "json"; + } + + @Override + public WorkFlowType[] getTypes() { + return new WorkFlowType[] {WorkFlowType.superNode}; + } + + + public ConfigVo getConfig() { + return cstConfigApi.getConfig(getPluginId()); + } + +// context.setRequest(request); +// context.setUrl(url); +// context.setResponse(response); +// context.success("推送BIP成功:" + bipResponse.getMsg(), false); + +// context.setErrMsg(bipResponse.getMsg()); +// context.setException(true); +// context.back("推送BIP失败:" + bipResponse.getMsg()); + + @Override + public String getPluginId() { + return null; + } + + @Override + public SuperNodeContext proceed(String request, FormDataVo formDataVo, FormDataMasterBean formDataMasterBean) throws Exception { + SuperNodeContext context = new SuperNodeContext(); + FieldDataVo fieldDataVo = formDataVo.getFieldData("上传附件1"); + List fileUrlList = attachmentManager.getBySubReference(Long.parseLong(fieldDataVo.getStringValue())); + String fileNames = ""; + for(Long fileUrl : fileUrlList){ + try { +// File file = fileManager.getFile(fileUrl); + V3XFile file = fileManager.getV3XFile(fileUrl); + fileNames = fileNames+file.getFilename()+";"; + } catch (BusinessException e) { + e.printStackTrace(); + } + } + System.out.println(fileNames); + System.out.println(fieldDataVo.getDbValue() != null); + String dbValue = fieldDataVo.getDbValue().toString(); + System.out.println("档案表调整人员信息获取参数为:"+dbValue+fieldDataVo.getStringValue()+fieldDataVo.getDisplay()); + long memberId = Long.parseLong(dbValue); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(memberId); +// 设置人员数据值 + System.out.println(v3xOrgMember.getId()); + System.out.println(); +// 获取流程表单中的对照名称 + JSONObject requestjson = JSONObject.parseObject(request); +// 根据对照名称查询对应的模板参数 +// List params = QysAffairDao.getFlowContrast(requestjson.getString("param")); + context.setNeedSave(true); +// if(params.size()!=1){ +// context.setResponse("参数设置异常,请检查请求参数是否存在且唯一"); +// context.setErrMsg("参数设置异常,请检查请求参数是否存在且唯一"); +// context.back("生成文件失败:参数设置异常,请检查请求参数是否存在且唯一"); +// return context; +// } +// 获取模板参数 +// String param = params.get(0); +// 根据模板参数生成表单参数 + FieldDataVo f = formDataVo.getFieldData(""); +// 调用模板生成文件接口 + +// 设置签署任务 + +// 设置签章位置 + +// 进行静默签署 + +// 签署完成后下载文件到表单中 + + + return context; + } + + @Override + public String getNodeId() { + return "QysTemplateSignNode"; + } + + @Override + public String getNodeName() { + return "模板文件签署超级节点"; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/quartz/OrganizationQuartz.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/quartz/OrganizationQuartz.java new file mode 100644 index 0000000..841822d --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/quartz/OrganizationQuartz.java @@ -0,0 +1,96 @@ +package com.seeyon.apps.src_mainorganization.quartz; + +import cn.hutool.log.Log; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISyncDdDao; +import com.seeyon.apps.src_mainorganization.server.InitializeDingdingSyncServer; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgDingdingSyncServer; +import com.seeyon.ctp.common.AppContext; + +import javax.inject.Inject; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +public class OrganizationQuartz extends AbstractQuartzTask { + + private static Log log = Log.get(OrganizationQuartz.class); + + @Override + public String getName() { + return "钉钉通讯录同步定时任务"; + } + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @Inject + private ISyncDdDao syncDdDao; + @Inject + private OrganizationOrgDingdingSyncServer organizationOrgDingdingSyncServer; + @Inject + private InitializeDingdingSyncServer initializeDingdingSyncServer; + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + public String getPluginId() {return SyncConstants.getPluginId();} + public ConfigVo getOrganizationOrgConfig() {return cstConfigApi.getConfig(getPluginId());} + + @Override + public String taskRun(String s) throws Exception { + if("initialize".equals(s)){ + log.info("进行钉钉初始化操作"); + Map errorMapAccount = initializeDingdingSyncServer.initializeDingdingAccount(); + log.info("单位添加完成,部门添加开始"); + Map errorMapDepartment = initializeDingdingSyncServer.initializeDingdingDepartment(); + log.info("部门添加完成,人员添加开始"); + Map errorMapMember = initializeDingdingSyncServer.initializeDingdingMember(); + log.info("人员添加完成"); + return "初始化完成"; + } + log.info("进入钉钉通讯录同步定时任务,参数为:"+s); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String res = ""; +// 查询上一次同步时间 + Map maxSynchronizationDate = syncDdDao.getMaxSynchronizationDate(); + Date startDate = (Date) maxSynchronizationDate.get("max_create_date"); +// 如果当前调用定时任务时未进行同步,则直接查询全量数据进行同步 + String isServiceBroker = configVo.getParamVal(SyncConstants.isServiceBroker.name()); + if(startDate==null){ +// 进行钉钉单位同步操作 + String errorAccountValue = organizationOrgDingdingSyncServer.dingdingSyncAllAccounts(); +// 进行钉钉部门同步操作 + String errorDepartmentValue = organizationOrgDingdingSyncServer.dingdingSyncAllDepartments(); +// 进行钉钉人员同步操作 + String errorMemberValue = organizationOrgDingdingSyncServer.dingdingSyncAllMembers(); +// 进行钉钉业代人员同步 + String errorServiceBroker = ""; + if("是".equals(isServiceBroker)||"Y".equals(isServiceBroker)||"y".equals(isServiceBroker)){ + errorServiceBroker = organizationOrgDingdingSyncServer.dingdingSyncAllServiceBrokers(); + } +// 进行客户单位下人员同步 + String errorClientMemberValue = organizationOrgDingdingSyncServer.dingdingSyncAllClientMembers(); + res = errorAccountValue+","+errorDepartmentValue+","+errorMemberValue+","+errorServiceBroker+","+errorClientMemberValue; + }else{ +// 通过时间查询最新的修改数据并且同步到钉钉。 + String accountRes = organizationOrgDingdingSyncServer.dingdingSyncBatchAccount(simpleDateFormat.format(startDate)); + String departmrntRes = organizationOrgDingdingSyncServer.dingdingSyncBatchDepartment(simpleDateFormat.format(startDate)); + String memberRes = organizationOrgDingdingSyncServer.dingdingSyncBatchMember(simpleDateFormat.format(startDate)); + String serviceBrokerRes = ""; + if("是".equals(isServiceBroker)||"Y".equals(isServiceBroker)||"y".equals(isServiceBroker)){ + serviceBrokerRes = organizationOrgDingdingSyncServer.dingdingSyncServiceBroker(simpleDateFormat.format(startDate)); + } + String clientMemberRes = organizationOrgDingdingSyncServer.dingdingSyncBatchClientMember(simpleDateFormat.format(startDate)); + res = accountRes+","+departmrntRes+","+memberRes+","+serviceBrokerRes+","+clientMemberRes; + } + int i = 0 ; + for(String str :res.split(",")){ + for(String str1s : str.split(";")){ + log.info(str1s); + i++; + } + } + return "同步完成,失败"+i; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/quartz/QixuexingOrganizationQuartz.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/quartz/QixuexingOrganizationQuartz.java new file mode 100644 index 0000000..3fd1f9f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/quartz/QixuexingOrganizationQuartz.java @@ -0,0 +1,89 @@ +package com.seeyon.apps.src_mainorganization.quartz; + +import cn.hutool.log.Log; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.ext.quartz.AbstractQuartzTask; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISyncQixuexingDao; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgQixuexingSyncServer; +import com.seeyon.ctp.common.AppContext; + +import javax.inject.Inject; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +public class QixuexingOrganizationQuartz extends AbstractQuartzTask { + + private static Log log = Log.get(QixuexingOrganizationQuartz.class); + + @Override + public String getName() { + return "企学星组织架构同步定时任务"; + } + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @Inject + private ISyncQixuexingDao syncQixuexingDao; + @Inject + private OrganizationOrgQixuexingSyncServer organizationOrgQixuexingSyncServer; + + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + public String getPluginId() {return SyncConstants.getPluginId();} + public ConfigVo getOrganizationOrgConfig() {return cstConfigApi.getConfig(getPluginId());} + + @Override + public String taskRun(String s) throws Exception { + log.info("进入企学星组织架构同步定时任务,参数为:"+s); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String res = ""; +// 查询上一次同步时间 + Map maxSynchronizationDate = syncQixuexingDao.getMaxSynchronizationDate(); + Date startDate = (Date) maxSynchronizationDate.get("max_create_date"); +// 如果当前调用定时任务时未进行同步,则直接查询全量数据进行同步 + String isServiceBroker = configVo.getParamVal(SyncConstants.isServiceBroker.name()); + if(startDate==null){ +// 进行企学星单位同步操作 + String errorAccountValue = organizationOrgQixuexingSyncServer.qixuexingSyncAllAccounts(); +// 进行企学星部门同步操作 + String errorDepartmentValue = organizationOrgQixuexingSyncServer.qixuexingSyncAllDepartments(); +// 进行企学星岗位同步操作 +// String errorPostValue = organizationOrgQixuexingSyncServer.qixuexingSyncAllPosts(); +// 进行企学星职务级别同步操作 +// String errorLevelValue = organizationOrgQixuexingSyncServer.qixuexingSyncAllLevels(); +// 进行企学星人员同步操作 + String errorMemberValue = organizationOrgQixuexingSyncServer.qixuexingSyncAllMembers(); +// 进行企学星业代人员同步 + String errorServiceBroker = ""; + if("是".equals(isServiceBroker)||"Y".equals(isServiceBroker)||"y".equals(isServiceBroker)){ + errorServiceBroker = organizationOrgQixuexingSyncServer.qixuexingSyncAllServiceBrokers(); + } +// 进行客户单位下人员同步 + String errorClientMemberValue = organizationOrgQixuexingSyncServer.qixuexingSyncAllClientMembers(); + res = errorAccountValue+","+errorDepartmentValue+","+errorMemberValue+","+errorServiceBroker+","+errorClientMemberValue; + }else{ +// 通过时间查询最新的修改数据并且同步到钉钉。 + String accountRes = organizationOrgQixuexingSyncServer.qixuexingSyncBatchAccount(simpleDateFormat.format(startDate)); + String departmrntRes = organizationOrgQixuexingSyncServer.qixuexingSyncBatchDepartment(simpleDateFormat.format(startDate)); +// String postRes = organizationOrgQixuexingSyncServer.qixuexingSyncBatchPost(simpleDateFormat.format(startDate)); +// String levelRes = organizationOrgQixuexingSyncServer.qixuexingSyncBatchLevel(simpleDateFormat.format(startDate)); + String memberRes = organizationOrgQixuexingSyncServer.qixuexingSyncBatchMember(simpleDateFormat.format(startDate)); + String serviceBrokerRes = ""; + if("是".equals(isServiceBroker)||"Y".equals(isServiceBroker)||"y".equals(isServiceBroker)){ + serviceBrokerRes = organizationOrgQixuexingSyncServer.qixuexingSyncServiceBroker(simpleDateFormat.format(startDate)); + } + String clientMemberRes = organizationOrgQixuexingSyncServer.qixuexingSyncClientMember(simpleDateFormat.format(startDate)); + res = accountRes+","+departmrntRes+","+memberRes+","+serviceBrokerRes+","+clientMemberRes; + } + int i = 0 ; + for(String str :res.split(",")){ + for(String str1s : str.split(";")){ + log.info(str1s); + i++; + } + } + return "同步完成,失败"+i; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/InitializeDingdingSyncServer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/InitializeDingdingSyncServer.java new file mode 100644 index 0000000..78e6973 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/InitializeDingdingSyncServer.java @@ -0,0 +1,224 @@ +package com.seeyon.apps.src_mainorganization.server; + +import cn.hutool.log.Log; + +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_mainorganization.constans.SyncConstants; + +import com.seeyon.apps.src_mainorganization.dao.ISyncDdDao; +import com.seeyon.apps.src_mainorganization.util.DingdingProtUtil; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.taobao.api.ApiException; + +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class InitializeDingdingSyncServer { + + private static Log log = Log.get(InitializeDingdingSyncServer.class); + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrgManager orgManager; + @Inject + private ISyncDdDao syncDdDao; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + +// 进行钉钉单位信息关系绑定初始化 + public Map initializeDingdingAccount() throws ApiException, BusinessException { + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); +// 根据钉钉中的层级信息与OA中的单位信息添加初始化绑定 +// 设置根目录信息 + List superDepartments = new ArrayList<>(); + superDepartments.add(1l); +// 设置根目录,查询钉钉等目录下面的所有部门 + while(superDepartments.size()!=0){ + List departmentIds = new ArrayList<>(); + departmentIds.addAll(superDepartments); + superDepartments.clear(); + for (long superDepartment: departmentIds) { +// 调用钉钉接口查询下级部门信息 + String subordinateDepartment = DingdingProtUtil.departmentListsubid(superDepartment,accessToken); + JSONObject subordinateDepartmentJson = JSONObject.parseObject(subordinateDepartment); + if("0".equals(subordinateDepartmentJson.getString("errcode"))){ + JSONObject subordinateDepartmentResult = subordinateDepartmentJson.getJSONObject("result"); + JSONArray subordinateDepartmentIdList = subordinateDepartmentResult.getJSONArray("dept_id_list"); +// 遍历查询到的部门ID信息 + for(int i = 0 ; i < subordinateDepartmentIdList.size() ; i++){ +// 根据ID查询钉钉中的部门信息 + long subordinateDepartmentId = subordinateDepartmentIdList.getLong(i); + String departmentGet = DingdingProtUtil.departmentGet(subordinateDepartmentId,accessToken); + JSONObject departmentGetJson = JSONObject.parseObject(departmentGet); + if("0".equals(departmentGetJson.getString("errcode"))){ + JSONObject departmentGetResult = departmentGetJson.getJSONObject("result"); + V3xOrgAccount v3xOrgAccount; + if(superDepartment==1L && "稻花香集团".equals(departmentGetResult.getString("name"))){ +// 一级部门存在特殊情况,当前是一级部门时名称为稻花香集团绑定主数据平台一级单位 + v3xOrgAccount = orgManager.getAccountByName("主数据平台"); + }else{ +// 判断当前获取的钉钉部门是否为单位 + v3xOrgAccount = orgManager.getAccountByName(departmentGetResult.getString("name")); + } + if(v3xOrgAccount!=null){ +// 添加到临时储存,为下一个循环的请求参数 + superDepartments.add(subordinateDepartmentId); +// 当前查询单位在钉钉中存在,添加绑定关系表 + int saveAccountBindingnum = syncDdDao.saveAccountBinding(v3xOrgAccount.getId()+"",v3xOrgAccount.getName(),departmentGetResult.getString("dept_id"),departmentGetResult.getString("name")); + if(saveAccountBindingnum>0){ +// log.info("添加成功"+v3xOrgAccount.getName()); + }else{ + log.info("添加单位失败"+v3xOrgAccount.getId()+v3xOrgAccount.getName()); + } + } + }else{ + log.info("钉钉单位参数查询失败"+subordinateDepartmentId+departmentGetJson); + } + } + } + } + } + return errorMap; + } + + // 进行钉钉部门信息关系绑定初始化 + public Map initializeDingdingDepartment() throws ApiException, BusinessException { + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); +// 根据钉钉中的层级信息与OA中的单位信息添加初始化绑定 +// 查询单位列表 + List superDepartments = syncDdDao.getAccountsBinding(); + while(superDepartments.size()!=0){ +// 创建临时储存列表 + List departmentIds = new ArrayList<>(); +// 临时储存复制 + departmentIds.addAll(superDepartments); +// 清空上级储存内容 + superDepartments.clear(); + for (long superDepartmentId: departmentIds) { +// 调用钉钉接口查询下级部门信息 + String subordinateDepartment = DingdingProtUtil.departmentListsubid(superDepartmentId,accessToken); + JSONObject subordinateDepartmentJson = JSONObject.parseObject(subordinateDepartment); + if("0".equals(subordinateDepartmentJson.getString("errcode"))){ + JSONObject subordinateDepartmentResult = subordinateDepartmentJson.getJSONObject("result"); + JSONArray subordinateDepartmentIdList = subordinateDepartmentResult.getJSONArray("dept_id_list"); +// 遍历查询到的部门ID信息 + for(int i = 0 ; i < subordinateDepartmentIdList.size() ; i++){ +// 根据ID查询钉钉中的部门信息 + long subordinateDepartmentId = subordinateDepartmentIdList.getLong(i); + String departmentGet = DingdingProtUtil.departmentGet(subordinateDepartmentId,accessToken); + JSONObject departmentGetJson = JSONObject.parseObject(departmentGet); + if("0".equals(departmentGetJson.getString("errcode"))){ + JSONObject departmentGetResult = departmentGetJson.getJSONObject("result"); + Map superAccountMap = syncDdDao.getAccountBindingByDdAccount(superDepartmentId+""); + Map superDepartmentMap = syncDdDao.getDepartmentBindingByDdDepartment(superDepartmentId+""); +// 判断当前获取的钉钉部门是否为指定部门 + List v3xOrgDepartments = new ArrayList<>(); + if(superAccountMap.size()>0){ + v3xOrgDepartments = orgManager.getChildDeptsByAccountId(Long.parseLong(superAccountMap.get("org_account_id").toString()),true); + }if(superDepartmentMap.size()>0){ + v3xOrgDepartments = orgManager.getChildDepartments(Long.parseLong(superDepartmentMap.get("org_department_id").toString()),true); + } +// 循环匹配子集部门信息 + for(int n = 0 ; n 0){ +// log.info("添加成功"+saveAccountBindingnum); + }else{ + log.info("添加部门失败"+department.getId()+department.getName()); + } + } + } + }else{ + log.info("钉钉部门参数查询失败"+subordinateDepartmentId+departmentGetJson); + } + } + } + } + + } + return errorMap; + } + + // 进行钉钉人员信息关系绑定初始化 + public Map initializeDingdingMember() throws ApiException, BusinessException { + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); +// 根据部门绑定信息查询部门下人员信息,并添加绑定信息 +// 查询绑定关系中的所有的部门 + List superDepartments = syncDdDao.getDepartmentsBinding(); +// 遍历当前部门,在钉钉中查询各部门下的人员 + for (Long superDepartmentId: superDepartments) { + String userListId = DingdingProtUtil.userListId(superDepartmentId,accessToken); + JSONObject userListIdJson = JSONObject.parseObject(userListId); + if("0".equals(userListIdJson.getString("errcode"))){ + JSONObject userListIdResult = userListIdJson.getJSONObject("result"); + JSONArray userListIdList = userListIdResult.getJSONArray("userid_list"); + for(int i = 0 ; i < userListIdList.size() ; i++){ + String dingdingUserId = userListIdList.getString(i); + String userGet = DingdingProtUtil.userGet(dingdingUserId,accessToken); + JSONObject userGetJson = JSONObject.parseObject(userGet); + if("0".equals(userGetJson.getString("errcode"))){ + JSONObject userGetResult = userGetJson.getJSONObject("result"); +// 根据钉钉人员信息查询OA中的人员信息,通过手机号匹配信息 + String userMobile = userGetResult.getString("mobile"); + String userName = userGetResult.getString("name"); +// 根据根据手机号查询OA系统中人员ID信息 + List memberIds = syncDdDao.getMemberByMobile(userMobile); + + if(memberIds.size()>1){ + log.info(userMobile+userName+"在系统中存在多个同手机号人员,跳过绑定,请手动添加:钉钉ID"+userGetResult.getString("userid")); + }else if (memberIds.size()==0){ + log.info(userMobile+userName+"在系统中未查询到使用此手机号人员,跳过处理。请检查:钉钉ID"+userGetResult.getString("userid")); + }else{ + V3xOrgMember v3xOrgMember = orgManager.getMemberById(memberIds.get(0)); + int saveMemberBindingNum = syncDdDao.saveMemberBinding(v3xOrgMember.getId().toString(),v3xOrgMember.getName(),userGetResult.getString("userid"),userName,userMobile); + if(saveMemberBindingNum>0){ +// log.info(userMobile+userName+"添加成功"+saveMemberBindingNum); + }else{ + log.info(userMobile+userName+"添加人员失败"+saveMemberBindingNum); + } + } + }else{ + log.info("钉钉人员参数查询失败"+dingdingUserId+userGetJson); + } + } + } + } + return errorMap; + } + + + + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgDingdingSyncServer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgDingdingSyncServer.java new file mode 100644 index 0000000..4bde8dd --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgDingdingSyncServer.java @@ -0,0 +1,1272 @@ +package com.seeyon.apps.src_mainorganization.server; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.dingtalk.api.request.OapiV2DepartmentCreateRequest; +import com.dingtalk.api.request.OapiV2DepartmentUpdateRequest; +import com.dingtalk.api.request.OapiV2UserCreateRequest; +import com.dingtalk.api.request.OapiV2UserUpdateRequest; +import com.seeyon.apps.addressbook.manager.AddressBookCustomerFieldInfoManager; +import com.seeyon.apps.addressbook.po.AddressBook; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.*; +import com.seeyon.apps.src_mainorganization.util.DingdingProtUtil; +import com.seeyon.apps.src_mainorganization.util.FormExportUtil; +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.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.FormFactory; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import com.taobao.api.ApiException; +import jodd.util.StringUtil; + +import javax.inject.Inject; +import java.text.SimpleDateFormat; +import java.util.*; + +public class OrganizationOrgDingdingSyncServer { + + private static Log log = Log.get(OrganizationOrgDingdingSyncServer.class); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + FormExportUtil formExportUtil = new FormExportUtil(); + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrgManager orgManager; + @Inject + private ISyncDdDao syncDdDao; + @Inject + private ISrcAccountDao srcAccountDao; + @Inject + private ISrcDepartmentDao srcDepartmentDao; + @Inject + private ISrcMemberDao srcMemberDao; + @Inject + private IArchiveDao archiveDao; + @Inject + private AddressBookCustomerFieldInfoManager addressBookCustomerFieldInfoManager; + @Inject + private FormFactory formFactory; + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew;} + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");} + return enumManagerNew; + } + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + public String dingdingSyncAllAccounts() throws BusinessException, ApiException, ServiceException { + String res = ""; +// 查询所有单位信息 + List> allAccounts = srcAccountDao.getAllAccounts(); + // 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchAccountMap(allAccounts); + log.info("单位异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res; + } + +// 通过最新修改时间查询变化单位数据,将变化的数据保存到钉钉中 + public String dingdingSyncBatchAccount (String startDate) throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementAccounts = srcAccountDao.getIncrementAccountByUpdateTime(startDate); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchAccountMap(incrementAccounts); + log.info("单位异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + +// 钉钉单位同步,单位列表 +// id,name,code,path,is_enable + public Map dingdingSyncBatchAccountMap(List> list) throws ApiException, BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + + Map errorMap = new HashMap<>(); + String excludeAccount = configVo.getParamVal(SyncConstants.excludeAccount.name()); + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); + log.info("钉钉token"+accessToken+"遍历单位信息个数"+list.size()); + for(Map accountMap : list){ + Map from = new HashMap(); + from.put("同步类型", "单位"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", accountMap.get("name").toString()); + if(!accountMap.get("path").toString().startsWith("00000017") || excludeAccount.contains(accountMap.get("id").toString())){ +// Map excelDataMap = new HashMap<>(); + log.info(accountMap.get("name")+ "" + accountMap.get("code") + accountMap.get("id")); +// 同步单位单位信息,同步流程平台,检查流程平台是否存在 + long accountId = Long.parseLong(accountMap.get("id").toString()); + String accountName = accountMap.get("name").toString(); +// 根据OA单位ID查询绑定关系表中是否存在 + Map map = syncDdDao.getAccountBinding(accountId+""); + accountMap.put("dd_account_id",map.get("dd_account_id")); +// 判断当前部门是否存在绑定关系 + if(map.size()>0){ + if("1".equals(accountMap.get("is_enable")!=null?accountMap.get("is_enable").toString():null)){ +// 封装当前环境单位数据,调用部门修改接口,修改钉钉部门信息 + OapiV2DepartmentUpdateRequest req = new OapiV2DepartmentUpdateRequest(); +// 部门ID + req.setDeptId(Long.parseLong(map.get("dd_account_id").toString())); +// 获取单位路径 + String accountPath = accountMap.get("path").toString(); + if(excludeAccount.contains(accountMap.get("id")+"")){ + V3xOrgAccount superiorAccount = orgManager.getAccountByPath("00000011"); +// 根据上级单位ID查询绑定关系表中的钉钉部门ID + Map superiorAccountMap = syncDdDao.getAccountBinding(superiorAccount.getId()+""); + if(superiorAccountMap.size()<0){ +// 未查询到上级单位绑定关系,同步钉钉失败, + errorMap.put(accountId+"","钉钉同步单位失败:"+accountName+"未查询到上级单位绑定关系,同步钉钉失败"); + continue; + } +// 上级部门 + req.setParentId(Long.parseLong(superiorAccountMap.get("dd_account_id").toString())); + }else{ + accountPath = accountPath.substring(0,accountPath.length()-4); + if("0000".equals(accountPath)){ +// 上级单位为根部门 + req.setParentId(1L); + }else{ + V3xOrgAccount superiorAccount = orgManager.getAccountByPath(accountPath); +// 根据上级单位ID查询绑定关系表中的钉钉部门ID + Map superiorAccountMap = syncDdDao.getAccountBinding(superiorAccount.getId()+""); + if(superiorAccountMap.size()<0){ +// 未查询到上级单位绑定关系,同步钉钉失败, + errorMap.put(accountId+"","钉钉同步单位失败:"+accountName+"未查询到上级单位绑定关系,同步钉钉失败"); + continue; + } +// 上级部门 + req.setParentId(Long.parseLong(superiorAccountMap.get("dd_account_id").toString())); + } + } +// 部门名称 + req.setName(accountName); +// 部门唯一标识 + req.setSourceIdentifier(accountId+""); +// 通讯录语言 + req.setLanguage("zh_CN"); +// 部门主管人员列表 +// req.setDeptManagerUseridList("manager200"); + String departmentUpdate = DingdingProtUtil.departmentUpdate(req,accessToken); + JSONObject departmentUpdateJson = JSONObject.parseObject(departmentUpdate); +// 更新绑定关系数据 + if("0".equals(departmentUpdateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果", "钉钉修改同步成功"); +// 修改部门成功,修改绑定关系数据 + int ii = syncDdDao.updateAccountBinding(accountId+"",accountName,map.get("dd_account_id").toString(),accountMap.get("name").toString()); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果", accountName+departmentUpdateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(accountId+"","钉钉修改同步单位失败:"+accountName+departmentUpdateJson.getString("errmsg")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "修改"); + from.put("主要信息", accountMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.dingdingLog.name()), + formExport, new String[] {}); + }else{ + log.info(accountMap.toString()+"当前单位状态为停用状态,执行钉钉部门删除操作"); + String departmentDelete = DingdingProtUtil.departmentDelete(Long.parseLong(map.get("dd_account_id").toString()),accessToken); + JSONObject departmentDeleteJson = JSONObject.parseObject(departmentDelete); +// 更新绑定关系数据 + if("0".equals(departmentDeleteJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果", "钉钉删除同步成功"); +// 删除部门成功,修改绑定关系数据 + int ii = syncDdDao.deleteDepartmentBinding(accountId+""); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果", accountName+departmentDeleteJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(accountId+"","钉钉删除同步部门失败:"+accountName+departmentDeleteJson.getString("errmsg")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "删除"); + from.put("主要信息", accountMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.dingdingLog.name()), + formExport, new String[] {}); + } + }else{ +// 封装当前单位数据,调用部门新增接口,新增钉钉部门信息 + OapiV2DepartmentCreateRequest req = new OapiV2DepartmentCreateRequest(); +// 获取单位路径 + String accountPath = accountMap.get("path").toString(); + if(excludeAccount.contains(accountId+"")){ + V3xOrgAccount superiorAccount = orgManager.getAccountByPath("00000011"); +// 根据上级单位ID查询绑定关系表中的钉钉部门ID + Map superiorAccountMap = syncDdDao.getAccountBinding(superiorAccount.getId()+""); + if(superiorAccountMap.size()<0){ +// 未查询到上级单位绑定关系,同步钉钉失败, + errorMap.put(accountId+"","钉钉同步单位失败:"+accountName+"未查询到上级单位绑定关系,同步钉钉失败"); + continue; + } +// 上级部门 + req.setParentId(Long.parseLong(superiorAccountMap.get("dd_account_id").toString())); + }else{ + accountPath = accountPath.substring(0,accountPath.length()-4); + if("0000".equals(accountPath)){ +// 上级单位为根部门 + req.setParentId(1L); + }else{ + V3xOrgAccount superiorAccount = orgManager.getAccountByPath(accountPath); +// 根据上级单位ID查询绑定关系表中的钉钉部门ID + Map superiorAccountMap = syncDdDao.getAccountBinding(superiorAccount.getId()+""); + if(superiorAccountMap.size()==0){ +// 未查询到上级单位绑定关系,同步钉钉失败, + errorMap.put(accountId+"","钉钉同步单位失败:"+accountName+"未查询到上级单位绑定关系,同步钉钉失败"); + continue; + } +// 上级部门 + req.setParentId(Long.parseLong(superiorAccountMap.get("dd_account_id").toString())); + } + } +// 部门名称,调用接口时去掉特殊字符 + accountName = accountName.replace("-", ""); + req.setName(accountName); +// 外部绑定ID + req.setSourceIdentifier(accountId+""); + String departmentCreate = DingdingProtUtil.departmentCreate(req,accessToken); + JSONObject departmentCreateJson = JSONObject.parseObject(departmentCreate); + if("0".equals(departmentCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果", "钉钉新增同步成功"); +// 新增部门成功,新增绑定关系数据 + String ddAccoungId = departmentCreateJson.getJSONObject("result").getString("dept_id"); + int ii = syncDdDao.saveAccountBinding(accountId+"",accountName,ddAccoungId,accountName); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果", accountName+departmentCreateJson.getString("errmsg")); + // 调用钉钉接口失败 + errorMap.put(accountId+"","钉钉同步单位失败:"+accountName+departmentCreateJson.getString("errmsg")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "新增"); + from.put("主要信息", accountMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.dingdingLog.name()), + formExport, new String[] {}); + } + } + } + return errorMap; + } + + public String dingdingSyncAllDepartments() throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementDepartments = srcDepartmentDao.getAllDepartments(); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchDeptMap(incrementDepartments); + log.info("部门异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + + } + + // 通过最新修改时间查询变化部门数据,将变化的数据保存到钉钉中 + public String dingdingSyncBatchDepartment (String startDate) throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementDepartments = srcDepartmentDao.getIncrementDepartmentByUpdateTime(startDate); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchDeptMap(incrementDepartments); + log.info("部门异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + // 钉钉单部门同步 +// id,code,name,path,is_enable + public Map dingdingSyncBatchDeptMap (List> list) throws ApiException, BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + + Map errorMap = new HashMap<>(); + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); + for(Map departmentMap : list){ + long departmentId = Long.parseLong(departmentMap.get("id").toString()); +// 根据当前部门信息查询部门自定义信息项 + AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(departmentId); + if("1".equals(departmentMap.get("is_enable")!=null?departmentMap.get("is_enable").toString():null)){ +// 判断自定义项是否为空 + if(addressBook!=null){ +// 获取自定义查询项信息 + String xt = addressBook.getExtAttr31(); + if(StringUtil.isNotEmpty(xt) && !"-1".equals(xt)){ +// 获取自定义查询项数据 + CtpEnumItem ctpEnumItem = getEnumManagerNew().getCtpEnumItem(Long.parseLong(xt)); + String xtValue = ctpEnumItem.getValue(); + if("1".equals(xtValue)||"3".equals(xtValue)||"5".equals(xtValue)||"6".equals(xtValue)){ +// 当前部门自定义数据项中存在钉钉 + errorMap.putAll(departmentSynchronization(departmentMap,true,accessToken)); + }else{ +// 当前部门重定义数据项中不存在钉钉 + errorMap.putAll(departmentSynchronization(departmentMap,false,accessToken)); + } + }else{ +// 当前部门同步系统自定义查询项数据为空 + errorMap.putAll(departmentSynchronization(departmentMap,false,accessToken)); + } + }else{ +// 当前部门自定义查询项数据为空 + errorMap.putAll(departmentSynchronization(departmentMap,false,accessToken)); + } + }else{ +// 当前部门状态为停用状态 + errorMap.putAll(departmentSynchronization(departmentMap,false,accessToken)); + } + } + return errorMap; + } + + public Map excelDepartmentSynchronization(Map excelDataMap,Map departmentMap,boolean state) throws ApiException, BusinessException { +// 当前人员所在单位在钉钉绑定表中存在。 + Map departmentBinding = syncDdDao.getDepartmentBinding(departmentMap.get("id")+""); +// 查询上级部门信息 + String path = departmentMap.get("path").toString(); + String superPath = path.substring(0,path.length()-4); + String superDepartmentId = srcDepartmentDao.getSuperUnitIdByPath(superPath); + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(Long.parseLong(departmentMap.get("id")+"")); + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(v3xOrgDepartment.getOrgAccountId()); + excelDataMap.put("accountId",v3xOrgAccount.getId().toString()); + excelDataMap.put("accountName",v3xOrgAccount.getName()); + + if(departmentBinding.size()>0){ +// 判断当前同步状态 + if(state){ +// 部门ID + excelDataMap.put("dddeptId",departmentBinding.get("dd_department_id")!=null?departmentBinding.get("dd_department_id").toString():""); + if(superDepartmentId.equals(departmentMap.get("org_account_id")!=null?departmentMap.get("org_account_id").toString():null)){ +// 获取上级部门ID,如果当前部门是一级部门那么上级部门ID则查询所在单位ID。 + Map accountBinding = syncDdDao.getAccountBinding(departmentMap.get("org_account_id")+""); + log.info("上级部门与所属单位相同,在OA中是一级部门,取单位绑定中的钉钉ID"+accountBinding.get("dd_account_id")); + excelDataMap.put("ddsuperdeptId",accountBinding.get("dd_account_id")!=null?accountBinding.get("dd_account_id").toString():""); + excelDataMap.put("ddsuperdeptName",accountBinding.get("dd_account_name")!=null?accountBinding.get("dd_account_name").toString():""); + } else{ +// 如果当前部门不是一级部门,则直接获取上级部门ID查询钉钉绑定 + Map superDepartmentBinding = syncDdDao.getDepartmentBinding(superDepartmentId); + if(superDepartmentBinding.size()<0){ + return excelDataMap; + } + log.info("根据上级部门ID查询钉钉部门绑定表中的信息获取钉钉ID"+superDepartmentBinding.get("dd_department_id").toString()); + excelDataMap.put("ddsuperdeptId",superDepartmentBinding.get("dd_department_id")!=null?superDepartmentBinding.get("dd_department_id").toString():""); + excelDataMap.put("ddsuperdeptName",superDepartmentBinding.get("dd_department_name")!=null?superDepartmentBinding.get("dd_department_name").toString():""); + } +// 排序号 +// req.setOrder(10L); +// 部门名称 + excelDataMap.put("deptName",departmentMap.get("name")!=null?departmentMap.get("name").toString():""); +// 部门唯一标识 + excelDataMap.put("sourcedeptId",departmentMap.get("id")!=null?departmentMap.get("id").toString():""); + } + }else{ + if(state){ + log.info(superDepartmentId+"=="+departmentMap.get("org_account_id")); + if(superDepartmentId.equals(departmentMap.get("org_account_id")!=null?departmentMap.get("org_account_id").toString():"")){ +// 获取上级部门ID,如果当前部门是一级部门那么上级部门ID则查询所在单位ID。 + Map accountBinding = syncDdDao.getAccountBinding(departmentMap.get("org_account_id").toString()); + log.info("上级部门与所属单位相同,在OA中是一级部门,取单位绑定中的钉钉ID"+accountBinding.get("dd_account_id")); + excelDataMap.put("ddsuperdeptId",accountBinding.get("dd_account_id")!=null?accountBinding.get("dd_account_id").toString():""); + excelDataMap.put("ddsuperdeptName",accountBinding.get("dd_account_name")!=null?accountBinding.get("dd_account_name").toString():""); + } else{ +// 如果当前部门不是一级部门,则直接获取上级部门ID查询钉钉绑定\ + Map superDepartmentBinding = syncDdDao.getDepartmentBinding(superDepartmentId); + log.info("当前部门信息为"+departmentMap.get("id")+departmentMap.get("name")+"上级部门id为"+superDepartmentId); + if(superDepartmentBinding.size()==0){ +// 未查询到上级单部门绑定关系,同步钉钉失败, + return excelDataMap; + } + log.info(superDepartmentBinding+"根据上级部门ID查询钉钉部门绑定表中的信息获取钉钉ID"+superDepartmentBinding.get("dd_department_id")); + excelDataMap.put("ddsuperdeptId",superDepartmentBinding.get("dd_department_id")!=null?superDepartmentBinding.get("dd_department_id").toString():""); + excelDataMap.put("ddsuperdeptName",superDepartmentBinding.get("dd_department_name")!=null?superDepartmentBinding.get("dd_department_name").toString():""); + } +// 部门名称 + excelDataMap.put("deptName",departmentMap.get("name").toString()); +// 外部绑定ID + excelDataMap.put("sourcedeptId",departmentMap.get("id").toString()); + } + } + return excelDataMap; + } + + + public Map departmentSynchronization(Map departmentMap,boolean state,String accessToken) throws ApiException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + FormExport formExport = new FormExport(); + Map from = new HashMap(); + from.put("同步类型", "部门"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", departmentMap.get("name").toString()); + + + Map errorMap = new HashMap<>(); + log.info("查询当前部门是否在钉钉绑定表中是否存在"); +// 当前人员所在单位在钉钉绑定表中存在。 + System.out.println(departmentMap); + Map departmentBinding = syncDdDao.getDepartmentBinding(departmentMap.get("id")+""); + departmentMap.put("dd_department_id",departmentBinding.get("dd_department_id")); + from.put("主要信息", departmentMap.toString()); +// 查询上级部门信息 + String path = departmentMap.get("path").toString(); + String superPath = path.substring(0,path.length()-4); + String superDepartmentId = srcDepartmentDao.getSuperUnitIdByPath(superPath); + if(departmentBinding.size()>0){ +// 判断当前同步状态 + if(state){ +// 部门信息在绑定表中存在调用钉钉修改接口 + OapiV2DepartmentUpdateRequest req = new OapiV2DepartmentUpdateRequest(); +// 部门ID + req.setDeptId(Long.parseLong(departmentBinding.get("dd_department_id").toString())); + + if(superDepartmentId.equals(departmentMap.get("org_account_id")!=null?departmentMap.get("org_account_id").toString():null)){ +// 获取上级部门ID,如果当前部门是一级部门那么上级部门ID则查询所在单位ID。 + Map accountBinding = syncDdDao.getAccountBinding(departmentMap.get("org_account_id")+""); + log.info("上级部门与所属单位相同,在OA中是一级部门,取单位绑定中的钉钉ID"+accountBinding.get("dd_account_id")); + req.setParentId(Long.parseLong(accountBinding.get("dd_account_id").toString())); + } else{ +// 如果当前部门不是一级部门,则直接获取上级部门ID查询钉钉绑定 + Map superDepartmentBinding = syncDdDao.getDepartmentBinding(superDepartmentId); + if(superDepartmentBinding.size()<0){ +// 未查询到上级单位绑定关系,同步钉钉失败, + errorMap.put(departmentMap.get("id").toString(),"钉钉同步单位失败:"+departmentMap.get("name")+"未查询到上级部门绑定关系,同步钉钉失败"); + return errorMap; + } + log.info("根据上级部门ID查询钉钉部门绑定表中的信息获取钉钉ID"+superDepartmentBinding.get("dd_department_id")); + req.setParentId(Long.parseLong(superDepartmentBinding.get("dd_department_id").toString())); + } +// 部门名称 + req.setName(departmentMap.get("name").toString()); +// 部门唯一标识 + req.setSourceIdentifier(departmentMap.get("id").toString()); +// 通讯录语言 + req.setLanguage("zh_CN"); + String departmentUpdate = DingdingProtUtil.departmentUpdate(req,accessToken); + JSONObject departmentUpdateJson = JSONObject.parseObject(departmentUpdate); +// 更新绑定关系数据(不可直接更新绑定关系) + if("0".equals(departmentUpdateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果", "钉钉修改同步成功"); + + }else{ + from.put("是否成功", "失败"); + from.put("同步结果", departmentMap.get("name").toString()+departmentUpdateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(departmentMap.get("id").toString(),"钉钉同步部门失败:"+departmentMap.get("name").toString()+departmentUpdateJson.getString("errmsg")); + } + from.put("同步动作", "修改"); + }else{ +// 部门信息在绑定表中不存在调用钉钉删除接口 + log.info(departmentMap.toString()+"部门信息在绑定表中不存在调用钉钉删除接口"); + String departmentDelete = DingdingProtUtil.departmentDelete(Long.parseLong(departmentBinding.get("dd_department_id").toString()),accessToken); + JSONObject departmentDeleteJson = JSONObject.parseObject(departmentDelete); +// 更新绑定关系数据 + if("0".equals(departmentDeleteJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果", "钉钉删除同步成功"); +// 删除部门成功,修改绑定关系数据 + int ii = syncDdDao.deleteDepartmentBinding(departmentMap.get("id").toString()); + log.info("删除绑定关系"+ii); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果", departmentMap.get("name").toString()+departmentDeleteJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(departmentMap.get("id").toString(),"钉钉同步部门失败:"+departmentMap.get("name").toString()+departmentDeleteJson.getString("errmsg")); + } + from.put("同步动作", "删除"); + } + }else{ + if(state){ +// 部门信息在绑定表中存在调用钉钉新增接口 + log.info("当前部门在绑定关系中不存在"); + OapiV2DepartmentCreateRequest req = new OapiV2DepartmentCreateRequest(); + log.info(superDepartmentId+"=="+departmentMap.get("org_account_id")); + if(superDepartmentId.equals(departmentMap.get("org_account_id")!=null?departmentMap.get("org_account_id").toString():null)){ +// 获取上级部门ID,如果当前部门是一级部门那么上级部门ID则查询所在单位ID。 + Map accountBinding = syncDdDao.getAccountBinding(departmentMap.get("org_account_id").toString()); + log.info("上级部门与所属单位相同,在OA中是一级部门,取单位绑定中的钉钉ID"+accountBinding.get("dd_account_id")); + req.setParentId(Long.parseLong(accountBinding.get("dd_account_id").toString())); + } else{ +// 如果当前部门不是一级部门,则直接获取上级部门ID查询钉钉绑定\ + Map superDepartmentBinding = syncDdDao.getDepartmentBinding(superDepartmentId); + log.info("当前部门信息为"+departmentMap.get("id")+departmentMap.get("name")+"上级部门id为"+superDepartmentId); + if(superDepartmentBinding.size()==0){ +// 未查询到上级单部门绑定关系,同步钉钉失败, + errorMap.put(departmentMap.get("id").toString(),"钉钉同步单位失败:"+departmentMap.get("name")+"未查询到上级部门绑定关系,同步钉钉失败"); + return errorMap; + } + log.info(superDepartmentBinding+"根据上级部门ID查询钉钉部门绑定表中的信息获取钉钉ID"+superDepartmentBinding.get("dd_department_id")); + req.setParentId(Long.parseLong(superDepartmentBinding.get("dd_department_id").toString())); + } +// 部门名称 + String departmentName = departmentMap.get("name").toString().replace("-", ""); + req.setName(departmentName); +// 外部绑定ID + req.setSourceIdentifier(departmentMap.get("id")+""); + String departmentCreate = DingdingProtUtil.departmentCreate(req,accessToken); + JSONObject departmentCreateJson = JSONObject.parseObject(departmentCreate); + if("0".equals(departmentCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果", "钉钉新建同步成功"); +// 新增部门成功,新增绑定关系数据 + String ddDepartmentId = departmentCreateJson.getJSONObject("result").getString("dept_id"); + int ii = syncDdDao.saveDepartmentBinding(departmentMap.get("id").toString(),departmentMap.get("name").toString(),ddDepartmentId,departmentMap.get("name").toString()); + log.info("新增绑定关系"+ii); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果", departmentMap.get("name").toString()+departmentCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(departmentMap.get("id").toString()+"","钉钉同步部门失败:"+departmentMap.get("name").toString()+departmentCreateJson.getString("errmsg")); + } + from.put("同步动作", "新增"); + } + } + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + if(StringUtil.isNotEmpty(from.get("同步动作"))){ + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.dingdingLog.name()), + formExport, new String[] {}); + } + return errorMap; + } + + public String dingdingSyncAllMembers() throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = srcMemberDao.getAllMembers(); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchMemberMap(incrementMembers); + log.info("人员异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + // 通过人员列表ID查询人员对象列表 + public List> memberMaptoV3xOrgMember(List> incrementMembers) { + List> orgMembers = new ArrayList<>(); + for(Map incrementMember :incrementMembers){ + if(incrementMember.get("member_id")!=null){ + String memberId = incrementMember.get("member_id").toString(); +// 此方法无法查询已经离职人员信息 + + Map v3xOrgMember = srcMemberDao.getMemberById(memberId); + orgMembers.add(v3xOrgMember); + } + } + return orgMembers; + } + + + // 通过最新修改时间查询变化人员数据,将变化的数据保存到钉钉中 + public String dingdingSyncBatchMember (String startDate) throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = archiveDao.getIncrementDataByModifyDate(startDate); +// 根据列表查询生成列表部门对象 + List> orgMembers = memberMaptoV3xOrgMember(incrementMembers); + Map errorMap = dingdingSyncBatchMemberMap(orgMembers); + log.info("人员异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public Map dingdingSyncBatchMemberMap (List> list) throws ApiException, BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); +// 获取钉钉基础数据 + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); +// 查询岗位黑名单 + List postBlackList = archiveDao.getPostBlackList(); + String postBlackString = ""; + for (String postBlack:postBlackList) { + postBlackString =postBlackString+ postBlack+ ","; + } + List postBlackStringList = Arrays.asList(postBlackString.split(",")); +// 查询人员白名单 + List memberWhiteList = archiveDao.getMemberWhiteList(); + String memberWhiteString = ""; + for (String memberWhite:memberWhiteList) { + memberWhiteString = memberWhiteString+ memberWhite+ ","; + } + List memberWhiteStringList = Arrays.asList(memberWhiteString.split(",")); +// int nnn = 0; + for(Map memberMap : list){ +// 遍历所有人员信息 + System.out.println( memberMap ); + if("1".equals(memberMap.get("is_enable")!=null?memberMap.get("is_enable").toString():null)){ + long departmentId = Long.parseLong(memberMap.get("org_department_id").toString()); +// 根据人员所在部门信息,查询部门对象 + V3xOrgDepartment orgDepartment = orgManager.getDepartmentById(departmentId); + if(orgDepartment==null){ + log.info(memberMap.get("name")+"查询部门为空,跳过处理"); + errorMap.put(memberMap.get("name").toString(),memberMap.get("name")+"查询部门为空,跳过处理"); + continue; + } +// 根据部门ID,查询部门主数据对象 + AddressBook departmentAddressBook = addressBookCustomerFieldInfoManager.getByMemberId(orgDepartment.getId()); +// 根据同步系统枚举字段 + if(departmentAddressBook!=null){ +// 获取部门同步系统自定义参数 + String xt = departmentAddressBook.getExtAttr31(); + if(StringUtil.isNotEmpty(xt) && !"-1".equals(xt)){ +// 获取部门同步系统数据值 + CtpEnumItem xtEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(xt)); + String xtValue = xtEnum.getEnumvalue(); + if("1".equals(xtValue)||"3".equals(xtValue)||"5".equals(xtValue)||"6".equals(xtValue)){ +// 如果同步则检索岗位信息是否出现在黑名单 + if(memberMap.get("org_post_id")!=null){ + if(postBlackStringList.contains(memberMap.get("org_post_id").toString())){ +// 如果岗位在黑名单中则检索人员白名单 + if(memberWhiteStringList.contains(memberMap.get("id").toString())){ +// 如果人员在白名单中则设置新增逻辑 + errorMap.putAll(memberSynchronization(memberMap,true,accessToken)); + }else{ +// 如果人员不在白名单中则设置删除逻辑 + errorMap.putAll(memberSynchronization(memberMap,false,accessToken)); + } + }else{ +// 如果岗位不在黑名单中,设置新增逻辑。 + errorMap.putAll(memberSynchronization(memberMap,true,accessToken)); + } + }else{ + errorMap.putAll(memberSynchronization(memberMap,false,accessToken)); + } + }else{ +// 如果人员不在白名单中则设置删除逻辑 + errorMap.putAll(memberSynchronization(memberMap,false,accessToken)); + } + }else{ + errorMap.putAll(memberSynchronization(memberMap,false,accessToken)); + } + }else{ + errorMap.putAll(memberSynchronization(memberMap,false,accessToken)); + } + }else{ + errorMap.putAll(memberSynchronization(memberMap,false,accessToken)); + } + + } + return errorMap; + } + + public Map memberSynchronization(Map v3xOrgMember,boolean state,String accessToken) throws ApiException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + FormExport formExport = new FormExport(); + Map from = new HashMap(); + from.put("同步类型", "人员"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", v3xOrgMember.get("name").toString()); + from.put("主要信息", v3xOrgMember.toString()); + + Map errorMap = new HashMap<>(); + Map memberMap = new HashMap<>(); + long accountId = Long.parseLong(v3xOrgMember.get("org_account_id").toString()); + Map accountBinding = syncDdDao.getAccountBinding(accountId+""); + if(accountBinding.size()==0){ + log.info("当前修改人员所在单位不在钉钉绑定表中跳过处理"); + errorMap.put(v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString()+"当前修改人员所在单位不在钉钉绑定表中跳过处理"); + }else{ + Map memberArchiveMap = archiveDao.getMemberArchiveById(Long.parseLong(v3xOrgMember.get("id").toString())); + if(memberArchiveMap.get("telnumber") == null){ + errorMap.put(v3xOrgMember.get("id").toString(),"当前人员未维护手机号,同步失败。"); + return errorMap; + } + String telnumber = memberArchiveMap.get("telnumber").toString(); + log.info("查询当前人员是否在钉钉绑定表中是否存在"+telnumber); +// 当前人员所在单位在钉钉绑定表中存在。 + Map memberBinding = syncDdDao.getMemberBinding(v3xOrgMember.get("id").toString()); + v3xOrgMember.put("dd_member_id",memberBinding.get("dd_member_id")); + System.out.println(v3xOrgMember); + if(memberBinding.size()>0){ + if(state){ + if(telnumber.equals(memberBinding.get("dd_member_telnumber")!=null?memberBinding.get("dd_member_telnumber").toString():null)){ +// 手机号相同,执行修改 + log.info("当前人员在钉钉人员绑定表中存在,执行人员修改方法,修改钉钉中的人员信息,修改钉钉绑定关系"); + Map deptMap = syncDdDao.getDepartmentBinding(v3xOrgMember.get("org_department_id").toString()); + if(deptMap!=null){ +// 根据当前人员获取当前部门,并且通过部门ID获取钉钉部门ID + memberMap.put("deptId",deptMap.get("dd_department_id").toString()); + memberMap.put("telNumber",telnumber); +// 查询当前人员是否已经存在 + String ddMember = DingdingProtUtil.userGet(v3xOrgMember.get("dd_member_id")+"" ,accessToken); + JSONObject ddMemberJson = JSONObject.parseObject(ddMember); + String errcode = ddMemberJson.getString("errcode"); +// String userid = ddMemberJson.getJSONObject("result").getString("userid"); + if("0".equals(errcode)){ +// 封装人员修改参数,执行人员修改方法 + OapiV2UserUpdateRequest req = DingdingProtUtil.getMemberUpdateParam(v3xOrgMember,memberMap); + String memberUpdate = DingdingProtUtil.memberUpdate(req,accessToken); + JSONObject memberUpdateJson = JSONObject.parseObject(memberUpdate); + if("0".equals(memberUpdateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉修改同步成功"); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",v3xOrgMember.get("name").toString()+memberUpdateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(v3xOrgMember.get("id").toString(),"钉钉同步人员失败:"+v3xOrgMember.get("name").toString()+memberUpdateJson.getString("errmsg")); + } + from.put("同步动作","修改"); + }else{ +// 调用工具类钉钉人员新建对象 + OapiV2UserCreateRequest req = DingdingProtUtil.getMemberCreateParam(v3xOrgMember,memberMap); + String memberCreate = DingdingProtUtil.memberCreate(req,accessToken); + JSONObject memberCreateJson = JSONObject.parseObject(memberCreate); +// 绑定关系已存在只用判断是否执行新增 + if("0".equals(memberCreateJson.getString("errcode")) ){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉新增同步成功"); + }else if ("40103".equals(memberCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果",memberCreateJson.getString("errmsg")); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",v3xOrgMember.get("name").toString()+memberCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(v3xOrgMember.get("id").toString(),"钉钉添加人员失败:"+v3xOrgMember.get("name").toString()+memberCreateJson.getString("errmsg")); + } + from.put("同步动作","新增"); + } + }else{ + from.put("是否成功", "失败"); + from.put("同步结果","钉钉部门未同步成功,请先进行部门同步"); + from.put("同步动作","修改"); + } + }else{ + log.info("当前人员在钉钉人员绑定表不存在,执行人员新增方法,新增钉钉中的人员信息,新增钉钉绑定关系"); + Map deptMap = syncDdDao.getDepartmentBinding(v3xOrgMember.get("org_department_id").toString()); + if(deptMap!=null){ +// 根据当前人员获取当前部门,并且通过部门ID获取钉钉部门ID + memberMap.put("deptId",deptMap.get("dd_department_id").toString()); + memberMap.put("telNumber",telnumber); +// 调用工具类钉钉人员新建对象 + OapiV2UserCreateRequest req = DingdingProtUtil.getMemberCreateParam(v3xOrgMember,memberMap); + String memberCreate = DingdingProtUtil.memberCreate(req,accessToken); + JSONObject memberCreateJson = JSONObject.parseObject(memberCreate); + if("0".equals(memberCreateJson.getString("errcode")) ){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉新增同步成功"); +// 新增人员成功,新增绑定关系数据 + String ddMemberId = memberCreateJson.getJSONObject("result").getString("userid"); + int ii = syncDdDao.saveMemberBinding(v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString(),ddMemberId,v3xOrgMember.get("name").toString(),telnumber); + }else if ("40103".equals(memberCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果",memberCreateJson.getString("errmsg")); + int ii = syncDdDao.saveMemberBinding(v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString(),v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString(),telnumber); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",v3xOrgMember.get("name").toString()+memberCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(v3xOrgMember.get("id").toString(),"钉钉添加人员失败:"+v3xOrgMember.get("name").toString()+memberCreateJson.getString("errmsg")); + } + from.put("同步动作","新增"); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果","钉钉部门未同步成功,请先进行部门同步"); + from.put("同步动作","新增"); + } + } + }else{ + log.info(v3xOrgMember.toString()+"当前人员在钉钉人员绑定表中存在,当前人员已经停用执行删除操作"); +// 当前人员已经停用执行人员删除方法 + String memberDelete =DingdingProtUtil.memberDelete(memberBinding.get("dd_member_id").toString(),accessToken); + JSONObject memberDeleteJson = JSONObject.parseObject(memberDelete); + if("0".equals(memberDeleteJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉删除同步成功"); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",v3xOrgMember.get("name").toString()+memberDeleteJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(v3xOrgMember.get("id").toString(),"钉钉人员同步失败"+v3xOrgMember.get("name").toString()+memberDeleteJson.getString("errmsg")); + } + int ii = syncDdDao.deleteMemberBinding(v3xOrgMember.get("id").toString()); + from.put("同步动作","删除"); + } + }else{ + if(state){ + log.info("当前人员在钉钉人员绑定表不存在,执行人员新增方法,新增钉钉中的人员信息,新增钉钉绑定关系"); + Map deptMap = syncDdDao.getDepartmentBinding(v3xOrgMember.get("org_department_id").toString()); + if(deptMap!=null){} +// 根据当前人员获取当前部门,并且通过部门ID获取钉钉部门ID + memberMap.put("deptId",deptMap.get("dd_department_id").toString()); + memberMap.put("telNumber",telnumber); + log.info("当前人员所在部门对应钉钉的部门ID"+deptMap); +// 调用工具类钉钉人员新建对象 + OapiV2UserCreateRequest req = DingdingProtUtil.getMemberCreateParam(v3xOrgMember,memberMap); + String memberCreate = DingdingProtUtil.memberCreate(req,accessToken); + JSONObject memberCreateJson = JSONObject.parseObject(memberCreate); + if("0".equals(memberCreateJson.getString("errcode")) ){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉新增同步成功"); +// 新增人员成功,新增绑定关系数据 + String ddMemberId = memberCreateJson.getJSONObject("result").getString("userid"); + System.out.println(v3xOrgMember); + int ii = syncDdDao.saveMemberBinding(v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString(),ddMemberId,v3xOrgMember.get("name").toString(),telnumber); + }else if ("40103".equals(memberCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果",memberCreateJson.getString("errmsg")); + int ii = syncDdDao.saveMemberBinding(v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString(),v3xOrgMember.get("id").toString(),v3xOrgMember.get("name").toString(),telnumber); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",v3xOrgMember.get("name").toString()+memberCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(v3xOrgMember.get("id").toString(),"钉钉同步人员失败:"+v3xOrgMember.get("name").toString()+memberCreateJson.getString("errmsg")); + } + from.put("同步动作","新增"); + }else{ + log.info(state+""+memberBinding+v3xOrgMember); + } + } + } + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + if(StringUtil.isNotEmpty(from.get("同步动作"))){ + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.dingdingLog.name()), + formExport, new String[] {}); + } + return errorMap; + } + + public String dingdingSyncAllServiceBrokers() throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> serviceBrokers = archiveDao.getServiceBrokers(); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncServiceBroker(serviceBrokers); + log.info("业代异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + // 钉钉业代人员同步 + public Map dingdingSyncServiceBroker (List> list) throws ApiException, BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + +// 获取钉钉基础数据 + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); + +// 查询岗位黑名单 + List postBlackList = archiveDao.getPostBlackList(); + String postBlackString = ""; + for (String postBlack:postBlackList) { + postBlackString =postBlackString+ postBlack+ ","; + } + List postBlackStringList = Arrays.asList(postBlackString.split(",")); +// 查询人员白名单 + List memberWhiteList = archiveDao.getMemberWhiteList(); + String memberWhiteString = ""; + for (String memberWhite:memberWhiteList) { + memberWhiteString = memberWhiteString+ memberWhite+ ","; + } + List memberWhiteStringList = Arrays.asList(memberWhiteString.split(",")); + for(int i = 0 ; i < list.size() ; i++){ +// 遍历所有人员信息 + Map serviceBroker = list.get(i); + long departmentId; + if(serviceBroker.get("dept_id")!=null){ + departmentId = Long.parseLong(serviceBroker.get("dept_id").toString()); + V3xOrgDepartment orgDepartment = orgManager.getDepartmentById(departmentId); + if(orgDepartment==null){ + log.info(serviceBroker.get("name")+"查询部门为空,跳过处理"); + errorMap.put(serviceBroker.get("id")+"",serviceBroker.get("name")+"查询部门为空,跳过处理"); + continue; + } + serviceBroker.put("account_id","-9194677677107822293");//设置固定值营销门户ID +// 根据部门ID,查询部门主数据对象 + AddressBook departmentAddressBook = addressBookCustomerFieldInfoManager.getByMemberId(orgDepartment.getId()); +// 根据同步系统枚举字段 + if(departmentAddressBook!=null){ +// 获取部门同步系统自定义参数 + String xt = departmentAddressBook.getExtAttr31(); + if(StringUtil.isNotEmpty(xt) && !"-1".equals(xt)){ +// 获取部门同步系统数据值 + CtpEnumItem xtEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(xt)); + String xtValue = xtEnum.getEnumvalue(); + if("1".equals(xtValue)||"3".equals(xtValue)||"5".equals(xtValue)||"6".equals(xtValue)){ + // 如果同步则检索岗位信息是否出现在黑名单 + if(postBlackStringList.contains(serviceBroker.get("post_id"))){ + errorMap.putAll(serviceBrokerSynchronization(serviceBroker,false,accessToken)); + }else{ +// 如果岗位不在黑名单中,设置新增逻辑。 + errorMap.putAll(serviceBrokerSynchronization(serviceBroker,true,accessToken)); + } + }else{ +// 如果人员不在白名单中则设置删除逻辑 + errorMap.putAll(serviceBrokerSynchronization(serviceBroker,false,accessToken)); + } + }else{ + errorMap.putAll(serviceBrokerSynchronization(serviceBroker,false,accessToken)); + } + }else{ + errorMap.putAll(serviceBrokerSynchronization(serviceBroker,false,accessToken)); + } + }else{ + log.info("当前人员档案中所属部门为空跳过处理"+serviceBroker.get("name")); + } + } + + return errorMap; + } + + public String dingdingSyncServiceBroker(String startDate) throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> serviceBrokers = archiveDao.getServiceBrokers(startDate); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncServiceBroker(serviceBrokers); + log.info("业代异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public Map serviceBrokerSynchronization (Map serviceBroker ,boolean state,String accessToken) throws ApiException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + FormExport formExport = new FormExport(); + Map from = new HashMap(); + from.put("同步类型", "业代/客户人员"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", serviceBroker.get("name").toString()); + from.put("主要信息", serviceBroker.toString()); + + Map errorMap = new HashMap<>(); + Map memberMap = new HashMap<>(); + if(serviceBroker.get("account_id")!=null){ + Map accountBinding = syncDdDao.getAccountBinding(serviceBroker.get("account_id").toString()); + if(accountBinding.size()==0){ + log.info("当前修改人员所在单位不在钉钉绑定表中跳过处理"); + errorMap.put(serviceBroker.get("id")+"",serviceBroker.get("name")+"当前修改人员所在单位不在钉钉绑定表中跳过处理"); + }else{ + if(serviceBroker.get("telnumber") == null){ + errorMap.put(serviceBroker.get("id")+"",serviceBroker.get("name")+"当前人员未维护手机号,同步失败。"); + return errorMap; + } + String telnumber = serviceBroker.get("telnumber").toString(); + log.info("查询当前人员是否在钉钉绑定表中是否存在"); +// 当前人员所在单位在钉钉绑定表中存在。 + Map memberBinding = syncDdDao.getMemberBinding(serviceBroker.get("id")+""); + serviceBroker.put("dd_member_id",memberBinding.get("dd_member_id")); + System.out.println("memberBinding.size()"+memberBinding.size()); + if(memberBinding.size()>0){ + if(state){ + if(telnumber.equals(memberBinding.get("dd_member_telnumber")!=null?memberBinding.get("dd_member_telnumber").toString():null)){ +// 手机号相同,执行修改 + log.info("当前人员在钉钉人员绑定表中存在,执行人员修改方法,修改钉钉中的人员信息,修改钉钉绑定关系"); + Map deptMap = syncDdDao.getDepartmentBinding(serviceBroker.get("dept_id").toString()); + if(deptMap!=null){ +// 首先查询一下当前人员在钉钉中存在如果存在则执行修改方法,如果不存在则执行新增方法 + String ddMember = DingdingProtUtil.userGet(serviceBroker.get("dd_member_id")+"",accessToken); + JSONObject ddMemberJson = JSONObject.parseObject(ddMember); +// String userid = ddMemberJson.getJSONObject("result").getString("userid"); + String errcode = ddMemberJson.getString("errcode"); +// 根据当前人员获取当前部门,并且通过部门ID获取钉钉部门ID + memberMap.put("deptId",deptMap.get("dd_department_id").toString()); + memberMap.put("telNumber",telnumber); + if("0".equals(errcode)){ +// 封装人员修改参数,执行人员修改方法 + OapiV2UserUpdateRequest req = DingdingProtUtil.getMemberUpdateParam(serviceBroker,memberMap); + String memberUpdate = DingdingProtUtil.memberUpdate(req,accessToken); + JSONObject memberUpdateJson = JSONObject.parseObject(memberUpdate); + if("0".equals(memberUpdateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉修改同步成功"); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",serviceBroker.get("name").toString()+memberUpdateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(serviceBroker.get("id")+"","钉钉同步人员失败:"+serviceBroker.get("name").toString()+memberUpdateJson.getString("errmsg")); + } + from.put("同步动作","修改"); + }else{ +// 调用工具类钉钉人员新建对象 + OapiV2UserCreateRequest req = DingdingProtUtil.getMemberCreateParam(serviceBroker,memberMap); + String memberCreate = DingdingProtUtil.memberCreate(req,accessToken); + JSONObject memberCreateJson = JSONObject.parseObject(memberCreate); + if("0".equals(memberCreateJson.getString("errcode")) ){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉新增同步成功"); + }else if ("40103".equals(memberCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果",memberCreateJson.getString("errmsg")); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",serviceBroker.get("name")+memberCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(serviceBroker.get("id")+"","钉钉同步人员失败:"+serviceBroker.get("name")+memberCreateJson.getString("errmsg")); + } + from.put("同步动作","新增"); + } + }else{ + from.put("是否成功", "失败"); + from.put("同步结果","钉钉部门未同步成功,请先进行部门同步"); + from.put("同步动作","修改"); + } + }else{ + log.info("当前人员在钉钉人员绑定表不存在,执行人员新增方法,新增钉钉中的人员信息,新增钉钉绑定关系"); + Map deptMap = syncDdDao.getDepartmentBinding(serviceBroker.get("dept_id")+""); + if(deptMap!=null){ +// 根据当前人员获取当前部门,并且通过部门ID获取钉钉部门ID + memberMap.put("deptId",deptMap.get("dd_department_id").toString()); + memberMap.put("telNumber",telnumber); +// 调用工具类钉钉人员新建对象 + OapiV2UserCreateRequest req = DingdingProtUtil.getMemberCreateParam(serviceBroker,memberMap); + String memberCreate = DingdingProtUtil.memberCreate(req,accessToken); + JSONObject memberCreateJson = JSONObject.parseObject(memberCreate); + if("0".equals(memberCreateJson.getString("errcode")) ){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉新增同步成功"); +// 新增人员成功,新增绑定关系数据 + String ddMemberId = memberCreateJson.getJSONObject("result").getString("userid"); + int ii = syncDdDao.saveMemberBinding(serviceBroker.get("id")+"",serviceBroker.get("name").toString(),ddMemberId,serviceBroker.get("name").toString(),telnumber); + }else if ("40103".equals(memberCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果",memberCreateJson.getString("errmsg")); + int ii = syncDdDao.saveMemberBinding(serviceBroker.get("id")+"",serviceBroker.get("name").toString(),serviceBroker.get("id")+"",serviceBroker.get("name").toString(),telnumber); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",serviceBroker.get("name")+memberCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(serviceBroker.get("id")+"","钉钉同步人员失败:"+serviceBroker.get("name")+memberCreateJson.getString("errmsg")); + } + from.put("同步动作","新增"); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果","钉钉部门未同步成功,请先进行部门同步"); + from.put("同步动作","新增"); + } + } + }else{ + log.info(serviceBroker.toString()+"当前人员在钉钉人员绑定表中存在,当前人员已经停用执行删除造作"); +// 当前人员已经停用执行人员删除方法 + String memberDelete =DingdingProtUtil.memberDelete(memberBinding.get("dd_member_id").toString(),accessToken); + JSONObject memberDeleteJson = JSONObject.parseObject(memberDelete); + if("0".equals(memberDeleteJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉删除同步成功"); + int ii = syncDdDao.deleteMemberBinding(serviceBroker.get("id")+""); + }else{ + from.put("是否成功", "失败"); + from.put("同步结果",serviceBroker.get("name")+memberDeleteJson.getString("errmsg")); + int ii = syncDdDao.deleteMemberBinding(serviceBroker.get("id")+""); +// 调用钉钉接口失败 + errorMap.put(serviceBroker.get("id")+"","钉钉人员同步失败"+serviceBroker.get("name")+memberDeleteJson.getString("errmsg")); + } + from.put("同步动作","删除"); + } + }else{ + if(state){ + log.info("当前人员在钉钉人员绑定表不存在,执行人员新增方法,新增钉钉中的人员信息,新增钉钉绑定关系"); + Map deptMap = syncDdDao.getDepartmentBinding(serviceBroker.get("dept_id")+""); + if(deptMap!=null){ +// 根据当前人员获取当前部门,并且通过部门ID获取钉钉部门ID + if(deptMap.size()==0){ + log.info(serviceBroker.get("name").toString()+"当前人员所在部门在绑定表不存在,跳过同步处理"); + from.put("是否成功", "失败"); + from.put("同步结果",serviceBroker.get("name").toString()+"当前人员所在部门在绑定表不存在,跳过同步处理"); + }else{ + memberMap.put("deptId",deptMap.get("dd_department_id").toString()); + memberMap.put("telNumber",telnumber); +// 调用工具类钉钉人员新建对象 + OapiV2UserCreateRequest req = DingdingProtUtil.getMemberCreateParam(serviceBroker,memberMap); + String memberCreate = DingdingProtUtil.memberCreate(req,accessToken); + JSONObject memberCreateJson = JSONObject.parseObject(memberCreate); + if("0".equals(memberCreateJson.getString("errcode")) ){ + from.put("是否成功", "成功"); + from.put("同步结果","钉钉新增同步成功"); +// 新增人员成功,新增绑定关系数据 + String ddMemberId = memberCreateJson.getJSONObject("result").getString("userid"); + int ii = syncDdDao.saveMemberBinding(serviceBroker.get("id")+"",serviceBroker.get("name").toString(),ddMemberId,serviceBroker.get("name").toString(),telnumber); + }else if ("40103".equals(memberCreateJson.getString("errcode"))){ + from.put("是否成功", "成功"); + from.put("同步结果",memberCreateJson.getString("errmsg")); + int ii = syncDdDao.saveMemberBinding(serviceBroker.get("id")+"",serviceBroker.get("name").toString(),serviceBroker.get("id")+"",serviceBroker.get("name").toString(),telnumber); + }else{ + from.put("是否成功", "成功"); + from.put("同步结果",serviceBroker.get("name")+memberCreateJson.getString("errmsg")); +// 调用钉钉接口失败 + errorMap.put(serviceBroker.get("id")+"","钉钉同步人员失败:"+serviceBroker.get("name")+memberCreateJson.getString("errmsg")); + } + from.put("同步动作","新增"); + } + }else{ + from.put("是否成功", "失败"); + from.put("同步结果","钉钉部门未同步成功,请先进行部门同步"); + from.put("同步动作","新增"); + } + }else{ + log.info(state+""+memberBinding+serviceBroker); + } + } + } + }else{ + log.info(serviceBroker.get("name")+"所在单位为空不进行同步"); + errorMap.put(serviceBroker.get("id").toString(),serviceBroker.get("name")+"所在单位为空不进行同步"); + } + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + if(StringUtil.isNotEmpty(from.get("同步动作"))){ + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.dingdingLog.name()), + formExport, new String[] {}); + } + return errorMap; + } + + public String dingdingSyncAllClientMembers() throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = srcMemberDao.getAllClientMembers(); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchClientMemberMap(incrementMembers); + log.info("客户异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public String dingdingSyncBatchClientMember(String startDate) throws BusinessException, ApiException, ServiceException { + String res = ""; +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = archiveDao.getClientMembersByModifyDate(startDate); +// 根据列表查询生成列表部门对象 + Map errorMap = dingdingSyncBatchClientMemberMap(incrementMembers); + log.info("客户异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public Map dingdingSyncBatchClientMemberMap (List> list) throws ApiException, BusinessException, ServiceException { + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 获取钉钉基础数据 + String dingdingAppKey = configVo.getParamVal(SyncConstants.dingdingAppKey.name()); + String dingdingAppSecret = configVo.getParamVal(SyncConstants.dingdingAppSecret.name()); + String accessToken = DingdingProtUtil.getToken(dingdingAppKey,dingdingAppSecret); +// 查询岗位黑名单 + List postBlackList = archiveDao.getPostBlackList(); + String postBlackString = ""; + for (String postBlack:postBlackList) { + postBlackString = postBlackString+ postBlack+ ","; + } + List postBlackStringList = Arrays.asList(postBlackString.split(",")); +// 查询人员白名单 + List memberWhiteList = archiveDao.getMemberWhiteList(); + String memberWhiteString = ""; + for (String memberWhite:memberWhiteList) { + memberWhiteString = memberWhiteString+ memberWhite+ ","; + } + List memberWhiteStringList = Arrays.asList(memberWhiteString.split(",")); + + for(Map memberMap: list){ + log.info( memberMap.toString() ); +// 根据当前人员获取人员档案表中的部门信息 + Map memberArchive = archiveDao.getMemberArchiveById(Long.parseLong(memberMap.get("id").toString())); + if(memberArchive.get("area_dept")==null) { + log.info(memberMap.get("name") + ":当前人员档案表中所属区域为空跳过同步"); + }else{ + V3xOrgDepartment orgDepartment = orgManager.getDepartmentById(Long.parseLong(memberArchive.get("area_dept").toString())); + if(orgDepartment==null){ + log.info(memberMap.get("name")+"查询部门为空,跳过处理"); + errorMap.put(memberMap.get("id").toString(),memberMap.get("name")+"查询部门为空,跳过处理"); + continue; + } +// 根据部门ID,查询部门主数据对象 + AddressBook departmentAddressBook = addressBookCustomerFieldInfoManager.getByMemberId(orgDepartment.getId()); +// 查询部门信息中的同步系统是否选择有钉钉 + if(departmentAddressBook!=null){ +// 获取部门同步系统自定义参数 + String xt = departmentAddressBook.getExtAttr31(); + if(StringUtil.isNotEmpty(xt) && !"-1".equals(xt)){ +// 获取部门同步系统数据值 + CtpEnumItem xtEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(xt)); + String xtValue = xtEnum.getEnumvalue(); + if("1".equals(xtValue)||"3".equals(xtValue)||"5".equals(xtValue)||"6".equals(xtValue)){ +// 如果同步则检索岗位信息是否出现在黑名单 + if(postBlackStringList.contains(memberMap.get("org_post_id"))){ +// 判断是否在人员白名单中存在 + if(memberWhiteStringList.contains(memberMap.get("id"))){ +// 存在人员白名单,执行人员新增方法 + errorMap.putAll(serviceBrokerSynchronization(memberMap,true,accessToken)); + }else{ + errorMap.putAll(serviceBrokerSynchronization(memberMap,false,accessToken)); + } + }else{ +// 如果岗位不在黑名单中,设置新增逻辑。 + errorMap.putAll(serviceBrokerSynchronization(memberMap,true,accessToken)); + } + }else{ +// 如果人员不在白名单中则设置删除逻辑 + errorMap.putAll(serviceBrokerSynchronization(memberMap,false,accessToken)); + } + }else{ + errorMap.putAll(serviceBrokerSynchronization(memberMap,false,accessToken)); + } + }else{ + errorMap.putAll(serviceBrokerSynchronization(memberMap,false,accessToken)); + } + } + } + return errorMap; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgFlowSyncServer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgFlowSyncServer.java new file mode 100644 index 0000000..0acde3f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgFlowSyncServer.java @@ -0,0 +1,505 @@ +package com.seeyon.apps.src_mainorganization.server; + +import cn.hutool.log.Log; +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_mainorganization.bo.ThirdDeptBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdLevelBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdMemberBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdPostBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISyncFvDao; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class OrganizationOrgFlowSyncServer{ + + private static Log log = Log.get(OrganizationOrgFlowSyncServer.class); + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrgManager orgManager; + @Inject + private ISyncFvDao syncFvDao; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + public String getToken(){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalTokenUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.getTokenUrl.name())+ + configVo.getParamVal(SyncConstants.flowRestUserName.name())+"/"+ + configVo.getParamVal(SyncConstants.flowRestPassword.name()); + String loginName = configVo.getParamVal(SyncConstants.flowLoginName.name()); +// 获取目标源TOKEN + String goalToken = ProtUtil.getToken(goalTokenUrl,loginName); + log.info("调用接口查询token"+goalTokenUrl+"当前token为"+goalToken); + return goalToken; + } + + // 获取本地环境token + public String getLocalToken(){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalTokenUrl = configVo.getParamVal(SyncConstants.localurl.name())+ + configVo.getParamVal(SyncConstants.getTokenUrl.name())+ + configVo.getParamVal(SyncConstants.localRestUserName.name())+"/"+ + configVo.getParamVal(SyncConstants.localRestPassword.name()); + String loginName = configVo.getParamVal(SyncConstants.localLoginName.name()); +// 获取目标源TOKEN + String goalToken = ProtUtil.getToken(goalTokenUrl,loginName); + log.info("调用接口查询token"+goalTokenUrl+"当前token为"+goalToken); + return goalToken; + } + + // 流程平台单位同步 + public Map flowSyncBatchAccount (List list){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + + List thirdDeparts = list.stream().map((account) -> { + return new ThirdDeptBo( account); + }).collect(Collectors.toList()); + log.info("遍历转换后的单位参数"); + for(int i = 0; i < thirdDeparts.size(); ++i) { + ThirdDeptBo thirdDepart = thirdDeparts.get(i); + log.info(thirdDepart.getName() + thirdDepart.getCode() + thirdDepart.getId()); +// 同步单位单位信息,同步流程平台,检查流程平台是否存在 + long accountId = thirdDepart.getId(); +// 根据单位ID查询单位是否存在 + String getAccountUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.getAccountUrl.name())+accountId+ + "?token="+ goalToken; + String account = ProtUtil.doGet(getAccountUrl); + log.info("调用接口查询当前单位是否存在当前查询url为:"+getAccountUrl); + log.info("查询结果为:"+account); +// 流程平台存在单位信息。进行单位修改 + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",accountId); + addOrUpdateParam.put("orgAccountId",accountId); + addOrUpdateParam.put("name",thirdDepart.getName()); + addOrUpdateParam.put("code",thirdDepart.getCode()); + addOrUpdateParam.put("superior",thirdDepart.getSuperior()); + addOrUpdateParam.put("status",thirdDepart.getStatus()); + addOrUpdateParam.put("isDeleted",thirdDepart.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdDepart.getEnabled()); + addOrUpdateParam.put("sortId",thirdDepart.getSortId()); + addOrUpdateParam.put("shortName",thirdDepart.getShortName()); + + String addOrUpdateAccountUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateAccountUrl.name())+ + "?token="+ goalToken; + log.info("当前单位请求url:"+addOrUpdateAccountUrl); + if(StringUtil.isNotEmpty(account) && !"null".equals(account)){ + log.info("当前单位已经存在,执行put请求,请求参数为:"+addOrUpdateParam); +// String isUpdate = ProtUtil.callPutApi(addOrUpdateAccountUrl,addOrUpdateParam.toString()); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateAccountUrl,addOrUpdateParam.toString(),new HashMap(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(accountId+"","流程平台修改单位失败:"+thirdDepart.getName()+msgInfo); + } + }else{ + JSONArray admins = new JSONArray(); + admins.add(new JSONObject()); + addOrUpdateParam.put("admin",admins); + // 流程平台不存在单位信息。进行单位新增 + log.info("当前单位不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateAccountUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(accountId+"","流程平台新增单位失败:"+thirdDepart.getName()+msgInfo); + } + } + } + return errorMap; + } + + + // 流程平台部门同步 + public Map flowSyncBatchDepartment (List list) throws BusinessException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + + List thirdDeparts = list.stream().map((account) -> { + return new ThirdDeptBo( account); + }).collect(Collectors.toList()); + log.info("遍历转换后的部门参数"); + for(int i = 0; i < thirdDeparts.size(); ++i) { + ThirdDeptBo thirdDepart = thirdDeparts.get(i); + log.info(thirdDepart.getName() + thirdDepart.getCode() + thirdDepart.getId()); +// 同步单位单位信息,同步流程平台,检查流程平台是否存在 + long deptId = thirdDepart.getId(); +// 根据单位ID查询单位是否存在 + String getDeptUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.getDeptUrl.name())+deptId+ + "?token="+ goalToken; + String dept = ProtUtil.doGet(getDeptUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getDeptUrl); + log.info("查询结果为:"+dept); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",deptId); + addOrUpdateParam.put("name",thirdDepart.getName()); + addOrUpdateParam.put("code",thirdDepart.getCode()); + addOrUpdateParam.put("superior",thirdDepart.getSuperior()); + addOrUpdateParam.put("status",thirdDepart.getStatus()); + addOrUpdateParam.put("isDeleted",thirdDepart.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdDepart.getEnabled()); + addOrUpdateParam.put("sortId",thirdDepart.getSortId()); + addOrUpdateParam.put("shortName",thirdDepart.getShortName()); + addOrUpdateParam.put("orgAccountId",thirdDepart.getOrgAccountId()); + if(thirdDepart.getOrgAccountId()==thirdDepart.getSuperior()){ + V3xOrgAccount superAccount = orgManager.getAccountById(thirdDepart.getSuperior()); + addOrUpdateParam.put("superiorName",superAccount.getName()); + }else{ + V3xOrgDepartment superDept = orgManager.getDepartmentById(thirdDepart.getSuperior()); + addOrUpdateParam.put("superiorName",superDept.getName()); + } + String addOrUpdateDeptUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateDeptUrl.name())+ + "?token="+ goalToken; + log.info("当前部门请求url:"+addOrUpdateDeptUrl); + if(StringUtil.isNotEmpty(dept) && !"null".equals(dept)){ +// 流程平台存在单位信息。进行单位修改 + log.info("当前部门已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateDeptUrl,addOrUpdateParam.toString(),new HashMap(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(deptId+"","流程平台修改部门失败:"+thirdDepart.getName()+msgInfo); + } + }else{ +// 流程平台不存在部门信息。进行部门新增 + log.info("当前部门不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateDeptUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(deptId+"","流程平台新增部门失败:"+thirdDepart.getName()+msgInfo); + } + } + Map errorMapRole = flowSyncBatchDepartmentRole(thirdDepart,goalToken); + errorMap.putAll(errorMapRole); + } + return errorMap; + } + +// 流程平台部门角色同步 + public Map flowSyncBatchDepartmentRole(ThirdDeptBo thirdDepart,String token) throws BusinessException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(thirdDepart.getId()); +// 获取当前部门的单位ID和部门ID + long deptId = v3xOrgDepartment.getId(); + long accountId = v3xOrgDepartment.getOrgAccountId(); +// 调用get获取当前部门的部门角色人员信息 + String getDepartmentmanagerinfoUrl = + configVo.getParamVal(SyncConstants.localurl.name())+configVo.getParamVal(SyncConstants.getDepartmentmanagerinfoUrl.name())+ + deptId+"/"+accountId+"?token="+getLocalToken(); + String result = ProtUtil.doGet(getDepartmentmanagerinfoUrl); + log.info("请求地址:"+getDepartmentmanagerinfoUrl); + if(StringUtil.isEmpty(result)){ + errorMap.put(deptId+"","流程平台新增部门角色变更失败:"+thirdDepart.getName()+"部门角色查询为空"); + return errorMap; + } + JSONObject resultJjson = JSONObject.parseObject(result); + JSONObject addParam = new JSONObject(); + addParam.put("orgAccountId",resultJjson.getString("orgAccountId")); + addParam.put("id",resultJjson.getString("id")); + for (String key : resultJjson.keySet()) { + if(key.startsWith("deptrole")){ + System.out.println(key+":"+resultJjson.getString(key)); + String value = resultJjson.getString(key); + if(!"{}".equals(value)){ + JSONObject deptrolejson = JSONObject.parseObject(value); + String deptrolevalue = deptrolejson.getString("value"); + addParam.put(key,deptrolevalue); + }else{ + addParam.put(key,""); + } + } + } + String updateDepartmentmanagerinfoUrl = + configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.updateDepartmentmanagerinfoUrl.name())+ + "?token="+getToken(); + log.info(updateDepartmentmanagerinfoUrl+"请求参数:"+addParam.toString()); + String updateDeptRoleres = ProtUtil.httpPutRaw(updateDepartmentmanagerinfoUrl , addParam.toString(),new HashMap<>(),null); + if(StringUtil.isEmpty(updateDeptRoleres)){ + errorMap.put(deptId+"","流程平台新增部门角色变更失败:"+thirdDepart.getName()+"部门角色变更返回结果为空"); + return errorMap; + } + JSONObject updateDeptRoleresJson = JSONObject.parseObject(updateDeptRoleres); + return errorMap; + } + + + // 流程平台岗位同步 + public Map flowSyncBatchPost (List list){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + List thirdPosts = list.stream().map((post) -> { + return new ThirdPostBo(post); + }).collect(Collectors.toList()); + log.info("遍历转换后的岗位参数"); + for(int i = 0; i < thirdPosts.size(); ++i) { + ThirdPostBo thirdPost = thirdPosts.get(i); + log.info(thirdPost.getName() + thirdPost.getCode() + thirdPost.getId()); +// 同步单位单位信息,同步流程平台,检查流程平台是否存在 + long postId = thirdPost.getId(); +// 根据单位ID查询单位是否存在 + String getPostUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.getPostUrl.name())+postId+ + "?token="+ goalToken; + String post = ProtUtil.doGet(getPostUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getPostUrl); + log.info("查询结果为:"+post); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",postId); + addOrUpdateParam.put("name",thirdPost.getName()); + addOrUpdateParam.put("code",thirdPost.getCode()); + addOrUpdateParam.put("isDeleted",thirdPost.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdPost.getEnabled()); + addOrUpdateParam.put("sortId",thirdPost.getSortId()); + addOrUpdateParam.put("orgAccountId",thirdPost.getOrgAccountId()); + addOrUpdateParam.put("status",thirdPost.getStatus()); + addOrUpdateParam.put("description",thirdPost.getDescription()); + addOrUpdateParam.put("typeId",thirdPost.getTypeId()); + addOrUpdateParam.put("valid",thirdPost.isValid()); + addOrUpdateParam.put("entityType",thirdPost.getEntityType()); + String addOrUpdatePostUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdatePostUrl.name())+ + "?token="+ goalToken; + log.info("当前岗位请求url:"+addOrUpdatePostUrl); + if(StringUtil.isNotEmpty(post) && !"null".equals(post)){ +// 流程平台存在单位信息。进行单位修改 + log.info("当前岗位已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdatePostUrl,addOrUpdateParam.toString(),new HashMap(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(postId+"","流程平台修改岗位失败:"+thirdPost.getName()+msgInfo); + } + }else{ + // 流程平台不存在部门信息。进行部门新增 + log.info("当前岗位不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdatePostUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(postId+"","流程平台新增岗位失败:"+thirdPost.getName()+msgInfo); + } + } + } + return errorMap; + } + + // 流程平台职务级别同步 + public Map flowSyncBatchLevel(List list){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + List thirdLevels = list.stream().map((level) -> { + return new ThirdLevelBo(level); + }).collect(Collectors.toList()); + log.info("遍历转换后的岗位参数"); + for(int i = 0; i < thirdLevels.size(); ++i) { + ThirdLevelBo thirdLevel = thirdLevels.get(i); + log.info(thirdLevel.getName() + thirdLevel.getCode() + thirdLevel.getId()); +// 同步单位单位信息,同步流程平台,检查流程平台是否存在 + long levelId = thirdLevel.getId(); +// 根据单位ID查询单位是否存在 + String getLevelUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.getLevelUrl.name())+levelId+ + "?token="+ goalToken; + String level = ProtUtil.doGet(getLevelUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getLevelUrl); + log.info("查询结果为:"+level); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",levelId); + addOrUpdateParam.put("name",thirdLevel.getName()); + addOrUpdateParam.put("code",thirdLevel.getCode()); + addOrUpdateParam.put("isDeleted",thirdLevel.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdLevel.getEnabled()); + addOrUpdateParam.put("sortId",thirdLevel.getSortId()); + addOrUpdateParam.put("orgAccountId",thirdLevel.getOrgAccountId()); + addOrUpdateParam.put("status",thirdLevel.getStatus()); + addOrUpdateParam.put("description",thirdLevel.getDescription()); + String addOrUpdateLevelUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateLevelUrl.name())+ + "?token="+ goalToken; + log.info("当前职务级别请求url:"+addOrUpdateLevelUrl); + if(StringUtil.isNotEmpty(level) && !"null".equals(level)){ +// 流程平台存在单位信息。进行单位修改 + log.info("当前职务级别已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateLevelUrl,addOrUpdateParam.toString(),new HashMap<>(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(levelId+"","流程平台修改职务级别失败:"+thirdLevel.getName()+msgInfo); + } + }else{ +// 流程平台不存在部门信息。进行部门新增 + log.info("当前岗位不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateLevelUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(levelId+"","流程平台新增职务级别失败:"+thirdLevel.getName()+msgInfo); + } + } + } + return errorMap; + } + + + + // 流程平台人员同步 + public Map flowSyncBatchMember (List list) throws InterruptedException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 获取本系统参数 + String localurl = configVo.getParamVal(SyncConstants.localurl.name()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + List thirdMembers = list.stream().map((member) -> { + ThirdMemberBo thirdMember = null; + try { +// 由于系统方法文件改用接口的方式获取人员副岗信息 +// 获取当前人员ID信息 + long memberId = member.getId(); +// 调用当前系统人员查询接口,获取人员信息对象 + String getMemberUrl = localurl+configVo.getParamVal(SyncConstants.getMemberUrl.name())+memberId+"?token="+getLocalToken(); + String res = ProtUtil.doGet(getMemberUrl); +// 解析数据 + JSONObject resJson = JSONObject.parseObject(res); +// 在当前人员信息对象中查询副岗信息列表 + JSONArray secondPosts = resJson.getJSONArray("second_post"); +// 将此信息列表封装成list对象 + List memberPostList = new ArrayList<>(); + for(int i = 0 ; i < secondPosts.size() ;i ++){ + MemberPost memberPost = new MemberPost(); + JSONObject secondPost = secondPosts.getJSONObject(i); + memberPost.setPostId(Long.parseLong(secondPost.getString("postId"))); + memberPost.setOrgAccountId(Long.parseLong(secondPost.getString("orgAccountId"))); + memberPost.setDepId(Long.parseLong(secondPost.getString("depId"))); + memberPost.setMemberId(Long.parseLong(secondPost.getString("memberId"))); + memberPostList.add(memberPost); + } +// 传递参数生成封装数据 + thirdMember = new ThirdMemberBo(member,memberPostList); + return thirdMember; + } catch (BusinessException e) { + e.printStackTrace(); + } + return thirdMember; + }).collect(Collectors.toList()); + log.info("遍历转换后的岗位参数"); + for(int i = 0; i < thirdMembers.size(); ++i) { + ThirdMemberBo thirdMember = thirdMembers.get(i); + log.info(thirdMember.getName() + thirdMember.getCode() + thirdMember.getId()); + for(int n = 0 ;n < 4 ; n++){ + Map memeberMap = syncFvDao.queryMemberArchiveByMemberId(thirdMember.getId()+""); + if(memeberMap==null) { + log.info("人员档案不存在等待5秒后再次执行" + "当前执行次数" + n + 1); + Thread.sleep(5000); + continue; + }else{ +// 同步单位单位信息,同步流程平台,检查流程平台是否存在 + long memberId = thirdMember.getId(); +// 根据单位ID查询单位是否存在 + String getMemberUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.getMemberUrl.name())+memberId+ + "?token="+ goalToken; + String member = ProtUtil.doGet(getMemberUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getMemberUrl); + log.info("查询结果为:"+member); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",memberId); + addOrUpdateParam.put("orgAccountId",thirdMember.getOrgAccountId()); + addOrUpdateParam.put("name",thirdMember.getName()); + addOrUpdateParam.put("code",thirdMember.getCode()); + addOrUpdateParam.put("orgDepartmentId",thirdMember.getDeptId()); + addOrUpdateParam.put("orgPostId",thirdMember.getPostId()); + addOrUpdateParam.put("orgLevelId",thirdMember.getLevelId()); + addOrUpdateParam.put("loginName",thirdMember.getLoginName()); + addOrUpdateParam.put("state",thirdMember.getState()); + addOrUpdateParam.put("isDeleted",thirdMember.isDeleted()); + addOrUpdateParam.put("enabled",thirdMember.isEnabled()); + addOrUpdateParam.put("type",thirdMember.getType()); + addOrUpdateParam.put("second_post",thirdMember.getSecondPosts()); + String addOrUpdateMemberUrl = configVo.getParamVal(SyncConstants.flowurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateMemberUrl.name())+ + "?token="+ goalToken; + log.info("当前人员请求url:"+addOrUpdateMemberUrl); + if(StringUtil.isNotEmpty(member) && !"null".equals(member)){ +// 流程平台存在单位信息。进行单位修改 + log.info("当前人员已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateMemberUrl,addOrUpdateParam.toString(),new HashMap<>(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(memberId+"","流程平台修改人员失败:"+thirdMember.getName()+msgInfo); + } + }else{ +// 流程平台不存在部门信息。进行部门新增 + log.info("当前人员不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateMemberUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(memberId+"","流程平台新增人员失败:"+thirdMember.getName()+msgInfo); + } + } + } + } + } + return errorMap; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgGroupSyncServer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgGroupSyncServer.java new file mode 100644 index 0000000..71a3a9e --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgGroupSyncServer.java @@ -0,0 +1,747 @@ +package com.seeyon.apps.src_mainorganization.server; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.addressbook.manager.AddressBookCustomerFieldInfoManager; +import com.seeyon.apps.addressbook.po.AddressBook; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_mainorganization.bo.ThirdDeptBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdLevelBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdMemberBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdPostBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISyncFvDao; +import com.seeyon.apps.src_mainorganization.util.ProtUtil; +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.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class OrganizationOrgGroupSyncServer { + + private static Log log = Log.get(OrganizationOrgGroupSyncServer.class); + private EnumManager enumManagerNew; + + public void setEnumManagerNew(EnumManager enumManagerNew) { + this.enumManagerNew = enumManagerNew; + } + + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) { + enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); + } + return enumManagerNew; + } + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrgManager orgManager; + @Inject + private ISyncFvDao syncFvDao; + @Inject + private AddressBookCustomerFieldInfoManager addressBookCustomerFieldInfoManager; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + +//获取目标环境token + public String getToken(){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalTokenUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.getTokenUrl.name())+ + configVo.getParamVal(SyncConstants.groupRestUserName.name())+"/"+ + configVo.getParamVal(SyncConstants.groupRestPassword.name()); + String loginName = configVo.getParamVal(SyncConstants.groupLoginName.name()); +// 获取目标源TOKEN + String goalToken = ProtUtil.getToken(goalTokenUrl,loginName); + log.info("调用接口查询token"+goalTokenUrl+"当前token为"+goalToken); + return goalToken; + } + +// 获取本地环境token + public String getLocalToken(){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalTokenUrl = configVo.getParamVal(SyncConstants.localurl.name())+ + configVo.getParamVal(SyncConstants.getTokenUrl.name())+ + configVo.getParamVal(SyncConstants.localRestUserName.name())+"/"+ + configVo.getParamVal(SyncConstants.localRestPassword.name()); + String loginName = configVo.getParamVal(SyncConstants.localLoginName.name()); +// 获取目标源TOKEN + String goalToken = ProtUtil.getToken(goalTokenUrl,loginName); + log.info("调用接口查询token"+goalTokenUrl+"当前token为"+goalToken); + return goalToken; + } + + // 集团协同平台单位同步 + public Map groupSyncBatchAccount (List list){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + log.info("执行数据筛选,只处理非客户单位下的所有单位信息"); + List thirdDeparts = list.stream().filter((account) -> { + String path = account.getPath(); + return !(path.startsWith("00000017")||path.equals("0000")||path.startsWith("00000002")); + }).map((account) -> { + return new ThirdDeptBo(account); + }).collect(Collectors.toList()); + + log.info("遍历转换后的单位参数"); + for(int i = 0; i < thirdDeparts.size(); ++i) { + ThirdDeptBo thirdDepart = thirdDeparts.get(i); + log.info(thirdDepart.getName() + thirdDepart.getCode() + thirdDepart.getId()); +// 同步单位单位信息,同步集团协同平台,检查集团协同平台是否存在 + long accountId = thirdDepart.getId(); +// 根据单位ID查询单位是否存在 + String getAccountUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.getAccountUrl.name())+accountId+ + "?token="+ goalToken; + String account = ProtUtil.doGet(getAccountUrl); + log.info("调用接口查询当前单位是否存在当前查询url为:"+getAccountUrl); + log.info("查询结果为:"+account); +// 集团协同平台存在单位信息。进行单位修改 + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",accountId); + addOrUpdateParam.put("orgAccountId",accountId); + addOrUpdateParam.put("name",thirdDepart.getName()); + addOrUpdateParam.put("code",thirdDepart.getCode()); + addOrUpdateParam.put("superior",thirdDepart.getSuperior()); + addOrUpdateParam.put("status",thirdDepart.getStatus()); + addOrUpdateParam.put("isDeleted",thirdDepart.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdDepart.getEnabled()); + addOrUpdateParam.put("sortId",thirdDepart.getSortId()); + addOrUpdateParam.put("shortName",thirdDepart.getShortName()); + + + String addOrUpdateAccountUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateAccountUrl.name())+ + "?token="+ goalToken; + log.info("当前单位请求url:"+addOrUpdateAccountUrl); + if(StringUtil.isNotEmpty(account) && !"null".equals(account)){ + log.info("当前单位已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateAccountUrl,addOrUpdateParam.toString(),new HashMap<>(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(StringUtil.isEmpty(isUpdateJson.getString("id"))){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(accountId+"","集团协同平台修改单位失败:"+thirdDepart.getName()+msgInfo); + } + }else{ + JSONArray admins = new JSONArray(); + admins.add(new JSONObject()); + addOrUpdateParam.put("admin",admins); +// 集团协同平台不存在单位信息。进行单位新增 + log.info("当前单位不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateAccountUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(accountId+"","集团协同平台新增单位失败:"+thirdDepart.getName()+msgInfo); + } + } + } + return errorMap; + } + + // 集团协同平台部门同步 + public Map groupSyncBatchDept (List list) throws BusinessException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + + log.info("执行数据筛选,只处理非客户单位下的所有单位信息"); + List thirdDeparts = list.stream().filter((dept) -> { + String path = dept.getPath(); + return !(path.startsWith("00000017")||path.startsWith("00000002")); + }).map((dept) -> { + return new ThirdDeptBo(dept); + }).collect(Collectors.toList()); + + log.info("遍历转换后的部门参数"); + for(int i = 0; i < thirdDeparts.size(); ++i) { + ThirdDeptBo thirdDepart = thirdDeparts.get(i); + log.info(thirdDepart.getName() + thirdDepart.getCode() + thirdDepart.getId()); +// 同步单位单位信息,同步集团协同平台,检查集团协同平台是否存在 + long deptId = thirdDepart.getId(); +// 根据单位ID查询单位是否存在 + String getDeptUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.getDeptUrl.name())+deptId+ + "?token="+ goalToken; + String dept = ProtUtil.doGet(getDeptUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getDeptUrl); + log.info("查询结果为:"+dept); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",deptId); + addOrUpdateParam.put("name",thirdDepart.getName()); + addOrUpdateParam.put("code",thirdDepart.getCode()); + addOrUpdateParam.put("superior",thirdDepart.getSuperior()); + addOrUpdateParam.put("status",thirdDepart.getStatus()); + addOrUpdateParam.put("isDeleted",thirdDepart.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdDepart.getEnabled()); + addOrUpdateParam.put("sortId",thirdDepart.getSortId()); + addOrUpdateParam.put("shortName",thirdDepart.getShortName()); + addOrUpdateParam.put("orgAccountId",thirdDepart.getOrgAccountId()); + if(thirdDepart.getOrgAccountId()==thirdDepart.getSuperior()){ + V3xOrgAccount superAccount = orgManager.getAccountById(thirdDepart.getSuperior()); + addOrUpdateParam.put("superiorName",superAccount.getName()); + }else{ + V3xOrgDepartment superDept = orgManager.getDepartmentById(thirdDepart.getSuperior()); + addOrUpdateParam.put("superiorName",superDept.getName()); + } + String addOrUpdateDeptUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateDeptUrl.name())+ + "?token="+ goalToken; + log.info("当前部门请求url:"+addOrUpdateDeptUrl); + if(StringUtil.isNotEmpty(dept) && !"null".equals(dept)){ +// 集团协同平台存在单位信息。进行单位修改 + log.info("当前部门已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateDeptUrl,addOrUpdateParam.toString(),new HashMap(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(deptId+"","集团协同平台修改部门失败:"+thirdDepart.getName()+msgInfo); + } + }else{ +// 集团协同平台不存在部门信息。进行部门新增 + log.info("当前部门不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateDeptUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(deptId+"","集团协同平台新增部门失败:"+thirdDepart.getName()+msgInfo); + } + } + Map errorMapRole = flowSyncBatchDepartmentRole(thirdDepart); + errorMap.putAll(errorMapRole); + } + return errorMap; + } + + + // 集团接通平台部门角色同步 + public Map flowSyncBatchDepartmentRole(ThirdDeptBo thirdDepart) throws BusinessException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(thirdDepart.getId()); +// 获取当前部门的单位ID和部门ID + long deptId = v3xOrgDepartment.getId(); + long accountId = v3xOrgDepartment.getOrgAccountId(); +// 调用get获取当前部门的部门角色人员信息 + String getDepartmentmanagerinfoUrl = + configVo.getParamVal(SyncConstants.localurl.name())+configVo.getParamVal(SyncConstants.getDepartmentmanagerinfoUrl.name())+ + deptId+"/"+accountId+"?token="+getLocalToken(); + String result = ProtUtil.doGet(getDepartmentmanagerinfoUrl); + log.info("数据查询接口返回:"+result); + if(StringUtil.isEmpty(result)){ + errorMap.put(deptId+"","流程平台新增部门角色变更失败:"+thirdDepart.getName()+"部门角色查询为空"); + return errorMap; + } + JSONObject resultJjson = JSONObject.parseObject(result); + JSONObject addParam = new JSONObject(); + addParam.put("orgAccountId",resultJjson.getString("orgAccountId")); + addParam.put("id",resultJjson.getString("id")); + for (String key : resultJjson.keySet()) { + if(key.startsWith("deptrole")){ + String value = resultJjson.getString(key); + if(!"{}".equals(value)){ + JSONObject deptrolejson = JSONObject.parseObject(value); + String deptrolevalue = deptrolejson.getString("value"); + addParam.put(key,deptrolevalue); + }else{ + addParam.put(key,""); + } + } + } + String updateDepartmentmanagerinfoUrl = + configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.updateDepartmentmanagerinfoUrl.name())+ + "?token="+getToken(); + String updateDeptRoleres = ProtUtil.httpPutRaw(updateDepartmentmanagerinfoUrl , addParam.toString(),new HashMap<>(),null); + log.info("请求参数"+addParam.toString()); + log.info(updateDepartmentmanagerinfoUrl+"调用修改部门角色接口返回数据:"+updateDeptRoleres); + if(StringUtil.isEmpty(updateDeptRoleres)){ + errorMap.put(deptId+"","流程平台新增部门角色变更失败:"+thirdDepart.getName()+"部门角色变更返回结果为空"); + return errorMap; + } + JSONObject updateDeptRoleresJson = JSONObject.parseObject(updateDeptRoleres); + return errorMap; + } + + + // 集团协同平台岗位同步 + public Map groupSyncBatchPost (List list){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + + log.info("执行数据筛选,只处理客户单位下的所有单位信息"); + List thirdPosts = list.stream().filter((post) -> { + long postAccountId = post.getOrgAccountId(); + String path = ""; + try { + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(postAccountId); + path = v3xOrgAccount.getPath(); + } catch (BusinessException e) { + e.printStackTrace(); + } + return !(path.startsWith("00000017")||path.equals("0000")||path.startsWith("00000002")); + }).map((post) -> { + return new ThirdPostBo(post); + }).collect(Collectors.toList()); + + log.info("遍历转换后的岗位参数"); + for(int i = 0; i < thirdPosts.size(); ++i) { + ThirdPostBo thirdPost = thirdPosts.get(i); + log.info(thirdPost.getName() + thirdPost.getCode() + thirdPost.getId()); +// 同步单位单位信息,同步集团协同平台,检查集团协同平台是否存在 + long postId = thirdPost.getId(); +// 根据单位ID查询单位是否存在 + String getPostUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.getPostUrl.name())+postId+ + "?token="+ goalToken; + String post = ProtUtil.doGet(getPostUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getPostUrl); + log.info("查询结果为:"+post); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",postId); + addOrUpdateParam.put("name",thirdPost.getName()); + addOrUpdateParam.put("code",thirdPost.getCode()); + addOrUpdateParam.put("isDeleted",thirdPost.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdPost.getEnabled()); + addOrUpdateParam.put("sortId",thirdPost.getSortId()); + addOrUpdateParam.put("orgAccountId",thirdPost.getOrgAccountId()); + addOrUpdateParam.put("status",thirdPost.getStatus()); + addOrUpdateParam.put("description",thirdPost.getDescription()); + addOrUpdateParam.put("typeId",thirdPost.getTypeId()); + addOrUpdateParam.put("valid",thirdPost.isValid()); + addOrUpdateParam.put("entityType",thirdPost.getEntityType()); + String addOrUpdatePostUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdatePostUrl.name())+ + "?token="+ goalToken; + log.info("当前岗位请求url:"+addOrUpdatePostUrl); + if(StringUtil.isNotEmpty(post) && !"null".equals(post)){ +// 集团协同平台存在单位信息。进行单位修改 + log.info("当前岗位已经存在,执行put请求,请求参数为:"+addOrUpdateParam); +// String isUpdate = ProtUtil.callPutApi(addOrUpdatePostUrl,addOrUpdateParam.toString()); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdatePostUrl,addOrUpdateParam.toString(),new HashMap(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(postId+"","集团协同平台修改岗位失败:"+thirdPost.getName()+msgInfo); + } + }else{ +// 集团协同平台不存在部门信息。进行部门新增 + log.info("当前岗位不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdatePostUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(postId+"","集团协同平台新增岗位失败:"+thirdPost.getName()+msgInfo); + } + } + } + return errorMap; + } + + // 集团协同平台职务级别同步 + public Map groupSyncBatchLevel (List list){ + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); + + log.info("执行数据筛选,只处理非客户单位下的所有单位信息"); + List thirdLevels = list.stream().filter((level) -> { + long levelAccountId = level.getOrgAccountId(); + String path = ""; + try { + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(levelAccountId); + path = v3xOrgAccount.getPath(); + } catch (BusinessException e) { + e.printStackTrace(); + } + return !(path.startsWith("00000017")||path.equals("0000")||path.startsWith("00000002")); + }).map((level) -> { + return new ThirdLevelBo(level); + }).collect(Collectors.toList()); + + log.info("遍历转换后的岗位参数"); + for(int i = 0; i < thirdLevels.size(); ++i) { + ThirdLevelBo thirdLevel = thirdLevels.get(i); + log.info(thirdLevel.getName() + thirdLevel.getCode() + thirdLevel.getId()); +// 同步单位单位信息,同步集团协同平台,检查集团协同平台是否存在 + long levelId = thirdLevel.getId(); +// 根据单位ID查询单位是否存在 + String getLevelUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.getLevelUrl.name())+levelId+ + "?token="+ goalToken; + String level = ProtUtil.doGet(getLevelUrl); + log.info("调用接口查询当前部门是否存在当前查询url为:"+getLevelUrl); + log.info("查询结果为:"+level); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",levelId); + addOrUpdateParam.put("name",thirdLevel.getName()); + addOrUpdateParam.put("code",thirdLevel.getCode()); + addOrUpdateParam.put("isDeleted",thirdLevel.getIsDeleted()); + addOrUpdateParam.put("enabled",thirdLevel.getEnabled()); + addOrUpdateParam.put("sortId",thirdLevel.getSortId()); + addOrUpdateParam.put("orgAccountId",thirdLevel.getOrgAccountId()); + addOrUpdateParam.put("status",thirdLevel.getStatus()); + addOrUpdateParam.put("description",thirdLevel.getDescription()); + String addOrUpdateLevelUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.addOrUpdateLevelUrl.name())+ + "?token="+ goalToken; + log.info("当前职务级别请求url:"+addOrUpdateLevelUrl); + if(StringUtil.isNotEmpty(level) && !"null".equals(level)){ +// 集团协同平台存在单位信息。进行单位修改 + log.info("当前职务级别已经存在,执行put请求,请求参数为:"+addOrUpdateParam); + String isUpdate = ProtUtil.httpPutRaw(addOrUpdateLevelUrl,addOrUpdateParam.toString(),new HashMap<>(),null); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(!isUpdateJson.getBoolean("success")){ + JSONArray errorMsgInfos = isUpdateJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(levelId+"","集团协同平台修改职务级别失败:"+thirdLevel.getName()+msgInfo); + } + }else{ + // 集团协同平台不存在部门信息。进行部门新增 + log.info("当前岗位不存在,执行post,请求参数为:"+addOrUpdateParam); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addOrUpdateLevelUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(!isAddJson.getBoolean("success")){ + JSONArray errorMsgInfos = isAddJson.getJSONArray("errorMsgInfos"); + JSONObject errorMsgInfo = errorMsgInfos.getJSONObject(0); + String msgInfo = errorMsgInfo.getString("msgInfo"); + errorMap.put(levelId+"","集团协同平台新增职务级别失败:"+thirdLevel.getName()+msgInfo); + } + } + } + return errorMap; + } + + // 集团协同平台人员同步 + public Map groupSyncBatchMember (List list) throws BusinessException, InterruptedException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String goalToken = getToken(); + Map errorMap = new HashMap<>(); +// 获取本系统参数 + String localurl = configVo.getParamVal(SyncConstants.localurl.name()); + + List thirdMembers = (List)list.stream().filter((member) ->{ + String path = ""; + try { + long memeberAccountId = member.getOrgAccountId(); + V3xOrgAccount memberAccount = orgManager.getAccountById(memeberAccountId); + path = memberAccount.getPath(); + } catch (BusinessException e) { + e.printStackTrace(); + } + return !(path.startsWith("00000017")||path.equals("0000")||path.startsWith("00000002")); + }).map((member) -> { + ThirdMemberBo thirdMember = null; + try { +// 由于系统方法文件改用接口的方式获取人员副岗信息 +// 获取当前人员ID信息 + long memberId = member.getId(); +// 调用当前系统人员查询接口,获取人员信息对象 + String getMemberUrl = localurl+configVo.getParamVal(SyncConstants.getMemberUrl.name())+memberId+"?token="+getLocalToken(); + String res = ProtUtil.doGet(getMemberUrl); +// 解析数据 + JSONObject resJson = JSONObject.parseObject(res); +// 在当前人员信息对象中查询副岗信息列表 + JSONArray secondPosts = resJson.getJSONArray("second_post"); +// 将此信息列表封装成list对象 + List memberPostList = new ArrayList<>(); + for(int i = 0 ; i < secondPosts.size() ;i ++){ + MemberPost memberPost = new MemberPost(); + JSONObject secondPost = secondPosts.getJSONObject(i); + memberPost.setPostId(Long.parseLong(secondPost.getString("postId"))); + memberPost.setOrgAccountId(Long.parseLong(secondPost.getString("orgAccountId"))); + memberPost.setDepId(Long.parseLong(secondPost.getString("depId"))); + memberPost.setMemberId(Long.parseLong(secondPost.getString("memberId"))); + memberPostList.add(memberPost); + } +// 传递参数生成封装数据 + thirdMember = new ThirdMemberBo(member,memberPostList); + return thirdMember; + } catch (BusinessException e) { + e.printStackTrace(); + } + return thirdMember; + }).collect(Collectors.toList()); + + for(int i = 0; i < thirdMembers.size(); ++i) { + ThirdMemberBo thirdMember = thirdMembers.get(i); + log.info(thirdMember.getName() + thirdMember.getCode() + thirdMember.getId()); +// 同步单位单位信息,同步集团协同平台,检查集团协同平台是否存在 + long memberId = thirdMember.getId(); + for(int n = 0 ;n < 5 ; n++){ + Map memeberMap = syncFvDao.queryMemberArchiveByMemberId(thirdMember.getId()+""); + if(memeberMap==null){ + log.info("人员档案不存在等待5秒后再次执行"+"当前执行次数"+n+1); + Thread.sleep(1000); + continue; + }else { + String getMemberUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.getMemberUrl.name())+memberId+ + "?token="+ goalToken; + String member = ProtUtil.doGet(getMemberUrl); + JSONObject memberJson = JSONObject.parseObject(member); + log.info("调用接口查询当前人员是否存在当前查询url为:"+getMemberUrl); + log.info("查询结果为:"+member); + JSONObject addOrUpdateParam = new JSONObject(); + addOrUpdateParam.put("id",memberId); + addOrUpdateParam.put("orgAccountId",thirdMember.getOrgAccountId()); + addOrUpdateParam.put("name",thirdMember.getName()); + addOrUpdateParam.put("code",thirdMember.getCode()); + addOrUpdateParam.put("orgDepartmentId",thirdMember.getDeptId()); + addOrUpdateParam.put("orgPostId",thirdMember.getPostId()); + addOrUpdateParam.put("orgLevelId",thirdMember.getLevelId()); + addOrUpdateParam.put("loginName",thirdMember.getLoginName()); + addOrUpdateParam.put("state",thirdMember.getState()); + addOrUpdateParam.put("isDeleted",thirdMember.isDeleted()); + addOrUpdateParam.put("enabled",thirdMember.isEnabled()); + addOrUpdateParam.put("type",thirdMember.getType()); + addOrUpdateParam.put("gender",thirdMember.getGender()); + addOrUpdateParam.put("birthday",thirdMember.getBirthday()); + addOrUpdateParam.put("hiredate",thirdMember.getHiredate()); + addOrUpdateParam.put("sortId",thirdMember.getSortId()); + addOrUpdateParam.put("telNumber",thirdMember.getTelNumber()); + addOrUpdateParam.put("second_post",thirdMember.getSecondPosts()); + System.out.println("开始获取副岗信息"+thirdMember.getSecondPosts()); + //集团协同平台存在单位信息。进行单位修改 + AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(memberId); + if(addressBook != null){ + addOrUpdateParam = setAddRessBooks(addOrUpdateParam,addressBook); + } + if(StringUtil.isNotEmpty(member) && !"null".equals(member)){ +// 判断当前人员登录名是否相同 + JSONObject memberJSON = JSONObject.parseObject(member); + + if(StringUtil.isNotEmpty(thirdMember.getLoginName())){ + if(thirdMember.getLoginName().equals(memberJSON.getString("loginName"))){ + addOrUpdateParam.remove("loginName"); + } + } + log.info("当前人员已经存在,执行请求,请求参数为:"+addOrUpdateParam); + String updateMemberUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.updateMemberUrl.name())+ + "?token="+ goalToken; + log.info("当前人员请求url:"+updateMemberUrl); + + String isUpdate = ProtUtil.doPost(addOrUpdateParam.toString(),updateMemberUrl); + log.info("返回结果为:"+isUpdate); + JSONObject isUpdateJson = JSONObject.parseObject(isUpdate); + if(isUpdateJson.getInteger("code") !=0){ + String message = isUpdateJson.getString("message"); + errorMap.put(memberId+"","集团协同平台修改人员失败:"+thirdMember.getName()+message); + } + }else{ +// 集团协同平台不存在部门信息。进行部门新增 + log.info("当前人员不存在,执行post,请求参数为:"+addOrUpdateParam); + String addMemberUrl = configVo.getParamVal(SyncConstants.groupurl.name())+ + configVo.getParamVal(SyncConstants.addMemberUrl.name())+ + "?token="+ goalToken; + log.info("当前人员请求url:"+addMemberUrl); + String isAdd = ProtUtil.doPost(addOrUpdateParam.toString(),addMemberUrl); + log.info("返回结果为:"+isAdd); + JSONObject isAddJson = JSONObject.parseObject(isAdd); + if(isAddJson.getInteger("code")!=0){ + String message = isAddJson.getString("message"); + errorMap.put(memberId+"","集团协同平台新增人员失败:"+thirdMember.getName()+message); + } + } + } + } + } + return errorMap; + } + + private JSONObject setAddRessBooks(JSONObject addOrUpdateParam,AddressBook addressBook) throws BusinessException { + if(StringUtil.isNotEmpty(addressBook.getExtAttr1())){ + addOrUpdateParam.put("EXT_ATTR_1",addressBook.getExtAttr1()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr2())){ + addOrUpdateParam.put("EXT_ATTR_2",addressBook.getExtAttr2()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr3())){ + addOrUpdateParam.put("EXT_ATTR_3",addressBook.getExtAttr3()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr4())){ + addOrUpdateParam.put("EXT_ATTR_4",addressBook.getExtAttr4()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr5())){ + addOrUpdateParam.put("EXT_ATTR_5",addressBook.getExtAttr5()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr6())){ + addOrUpdateParam.put("EXT_ATTR_6",addressBook.getExtAttr6()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr7())){ + addOrUpdateParam.put("EXT_ATTR_7",addressBook.getExtAttr7()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr8())){ + addOrUpdateParam.put("EXT_ATTR_8",addressBook.getExtAttr8()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr9())){ + addOrUpdateParam.put("EXT_ATTR_9",addressBook.getExtAttr9()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr10())){ + addOrUpdateParam.put("EXT_ATTR_10",addressBook.getExtAttr10()); + }if(addressBook.getExtAttr11()==null){ + addOrUpdateParam.put("EXT_ATTR_11",addressBook.getExtAttr11()); + }if(addressBook.getExtAttr12()==null){ + addOrUpdateParam.put("EXT_ATTR_12",addressBook.getExtAttr12()); + }if(addressBook.getExtAttr13()==null){ + addOrUpdateParam.put("EXT_ATTR_13",addressBook.getExtAttr13()); + }if(addressBook.getExtAttr14()==null){ + addOrUpdateParam.put("EXT_ATTR_14",addressBook.getExtAttr14()); + }if(addressBook.getExtAttr15()==null){ + addOrUpdateParam.put("EXT_ATTR_15",addressBook.getExtAttr15()); + }if(addressBook.getExtAttr16()==null){ + addOrUpdateParam.put("EXT_ATTR_16",addressBook.getExtAttr16()); + }if(addressBook.getExtAttr17()==null){ + addOrUpdateParam.put("EXT_ATTR_17",addressBook.getExtAttr17()); + }if(addressBook.getExtAttr18()==null){ + addOrUpdateParam.put("EXT_ATTR_18",addressBook.getExtAttr18()); + }if(addressBook.getExtAttr19()==null){ + addOrUpdateParam.put("EXT_ATTR_19",addressBook.getExtAttr19()); + }if(addressBook.getExtAttr20()==null){ + addOrUpdateParam.put("EXT_ATTR_20",addressBook.getExtAttr20()); + }if(addressBook.getExtAttr21()==null) { + addOrUpdateParam.put("EXT_ATTR_21", addressBook.getExtAttr21()); + }if(addressBook.getExtAttr22()==null){ + addOrUpdateParam.put("EXT_ATTR_22",addressBook.getExtAttr22()); + }if(addressBook.getExtAttr23()==null){ + addOrUpdateParam.put("EXT_ATTR_23",addressBook.getExtAttr23()); + }if(addressBook.getExtAttr24()==null){ + addOrUpdateParam.put("EXT_ATTR_24",addressBook.getExtAttr24()); + }if(addressBook.getExtAttr25()==null){ + addOrUpdateParam.put("EXT_ATTR_25",addressBook.getExtAttr25()); + }if(addressBook.getExtAttr26()==null){ + addOrUpdateParam.put("EXT_ATTR_26",addressBook.getExtAttr26()); + }if(addressBook.getExtAttr27()==null){ + addOrUpdateParam.put("EXT_ATTR_27",addressBook.getExtAttr27()); + }if(addressBook.getExtAttr28()==null){ + addOrUpdateParam.put("EXT_ATTR_28",addressBook.getExtAttr28()); + }if(addressBook.getExtAttr29()==null){ + addOrUpdateParam.put("EXT_ATTR_29",addressBook.getExtAttr29()); + }if(addressBook.getExtAttr30()==null){ + addOrUpdateParam.put("EXT_ATTR_30",addressBook.getExtAttr30()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr31())){ + CtpEnumItem extAttr31Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr31())); + if(extAttr31Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_31",extAttr31Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr32())){ + CtpEnumItem extAttr32Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr32())); + if(extAttr32Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_32",extAttr32Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr33())){ + CtpEnumItem extAttr33Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr33())); + if(extAttr33Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_33",extAttr33Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr34())){ + CtpEnumItem extAttr34Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr34())); + if(extAttr34Enum !=null){ + addOrUpdateParam.put("EXT_ATTR_34",extAttr34Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr35())){ + CtpEnumItem extAttr35Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr35())); + if(extAttr35Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_35",extAttr35Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr36())){ + CtpEnumItem extAttr36Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr36())); + if(extAttr36Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_36",extAttr36Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr37())){ + CtpEnumItem extAttr37Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr37())); + if(extAttr37Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_37",extAttr37Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr38())){ + CtpEnumItem extAttr38Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr38())); + if(extAttr38Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_38",extAttr38Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr39())){ + CtpEnumItem extAttr39Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr39())); + if(extAttr39Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_39",extAttr39Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr40())){ + CtpEnumItem extAttr40Enum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(addressBook.getExtAttr40())); + if(extAttr40Enum!=null){ + addOrUpdateParam.put("EXT_ATTR_40",extAttr40Enum.getValue()); + } + }if(StringUtil.isNotEmpty(addressBook.getExtAttr41())&&!"0".equals(addressBook.getExtAttr41())){ + addOrUpdateParam.put("EXT_ATTR_41",addressBook.getExtAttr41()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr42())&&!"0".equals(addressBook.getExtAttr42())){ + addOrUpdateParam.put("EXT_ATTR_42",addressBook.getExtAttr42()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr43())&&!"0".equals(addressBook.getExtAttr43())){ + addOrUpdateParam.put("EXT_ATTR_43",addressBook.getExtAttr43()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr44())&&!"0".equals(addressBook.getExtAttr44())){ + addOrUpdateParam.put("EXT_ATTR_44",addressBook.getExtAttr44()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr45())&&!"0".equals(addressBook.getExtAttr45())){ + addOrUpdateParam.put("EXT_ATTR_45",addressBook.getExtAttr45()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr46())&&!"0".equals(addressBook.getExtAttr46())){ + addOrUpdateParam.put("EXT_ATTR_46",addressBook.getExtAttr46()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr47())&&!"0".equals(addressBook.getExtAttr47())){ + addOrUpdateParam.put("EXT_ATTR_47",addressBook.getExtAttr47()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr48())&&!"0".equals(addressBook.getExtAttr48())){ + addOrUpdateParam.put("EXT_ATTR_48",addressBook.getExtAttr48()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr49())&&!"0".equals(addressBook.getExtAttr49())){ + addOrUpdateParam.put("EXT_ATTR_49",addressBook.getExtAttr49()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr50())&&!"0".equals(addressBook.getExtAttr50())){ + addOrUpdateParam.put("EXT_ATTR_50",addressBook.getExtAttr50()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr51())&&!"0".equals(addressBook.getExtAttr51())){ + addOrUpdateParam.put("EXT_ATTR_51",addressBook.getExtAttr51()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr52())&&!"0".equals(addressBook.getExtAttr52())){ + addOrUpdateParam.put("EXT_ATTR_52",addressBook.getExtAttr52()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr53())&&!"0".equals(addressBook.getExtAttr53())){ + addOrUpdateParam.put("EXT_ATTR_53",addressBook.getExtAttr53()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr54())&&!"0".equals(addressBook.getExtAttr54())){ + addOrUpdateParam.put("EXT_ATTR_54",addressBook.getExtAttr54()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr55())&&!"0".equals(addressBook.getExtAttr55())){ + addOrUpdateParam.put("EXT_ATTR_55",addressBook.getExtAttr55()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr56())&&!"0".equals(addressBook.getExtAttr56())){ + addOrUpdateParam.put("EXT_ATTR_56",addressBook.getExtAttr56()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr57())&&!"0".equals(addressBook.getExtAttr57())){ + addOrUpdateParam.put("EXT_ATTR_57",addressBook.getExtAttr57()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr58())&&!"0".equals(addressBook.getExtAttr58())){ + addOrUpdateParam.put("EXT_ATTR_58",addressBook.getExtAttr58()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr59())&&!"0".equals(addressBook.getExtAttr59())){ + addOrUpdateParam.put("EXT_ATTR_59",addressBook.getExtAttr59()); + }if(StringUtil.isNotEmpty(addressBook.getExtAttr60())&&!"0".equals(addressBook.getExtAttr60())){ + addOrUpdateParam.put("EXT_ATTR_60",addressBook.getExtAttr60()); + } + + return addOrUpdateParam; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgQixuexingSyncServer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgQixuexingSyncServer.java new file mode 100644 index 0000000..08bff22 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgQixuexingSyncServer.java @@ -0,0 +1,708 @@ +package com.seeyon.apps.src_mainorganization.server; + +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_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.*; +import com.seeyon.apps.src_mainorganization.util.FormExportUtil; +import com.seeyon.apps.src_mainorganization.util.QixuexingPortUtil; +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.services.ServiceException; +import com.seeyon.v3x.services.form.FormFactory; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.text.SimpleDateFormat; +import java.util.*; + +public class OrganizationOrgQixuexingSyncServer { + + private static Log log = Log.get(OrganizationOrgQixuexingSyncServer.class); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + FormExportUtil formExportUtil = new FormExportUtil(); + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private ISrcAccountDao srcAccountDao; + @Inject + private ISrcDepartmentDao srcDepartmentDao; + @Inject + private ISrcMemberDao srcMemberDao; + @Inject + private IArchiveDao archiveDao; + @Inject + private FormFactory formFactory; + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew;} + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");} + return enumManagerNew; + } + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + //企学星单位信息全量同步 + public String qixuexingSyncAllAccounts (){ + String res = ""; +// 查询所有单位信息 + Map errorMap = null; + try { + List> allAccounts = srcAccountDao.getAllAccounts(); + // 根据列表查询生成列表部门对象 + errorMap = qixuexingSyncBatchAccountMap(allAccounts); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("单位异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res; + } + + //企学星单位信息增量同步 + public String qixuexingSyncBatchAccount(String startDate){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementAccounts = srcAccountDao.getIncrementAccountByUpdateTime(startDate); + errorMap = qixuexingSyncBatchAccountMap(incrementAccounts); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("单位异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + //企学星单位同步,单位列表,单位同步为部门 + public Map qixuexingSyncBatchAccountMap(List> list) throws ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 设置返回值参数 + Map errorMap = new HashMap<>(); +// 获取需要特殊处理的单位信息 + String excludeAccount = configVo.getParamVal(SyncConstants.excludeAccount.name()); +// 遍历所有单位信息 + for(Map accountMap : list){ + String accountId = accountMap.get("id").toString(); + String accountName = accountMap.get("name").toString(); + Map from = new HashMap(); +// 设置日志保存数据 + from.put("同步类型", "单位"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", accountMap.get("name").toString()); +// 判断是否为业务架构存在的单位信息 + if(!accountMap.get("path").toString().startsWith("00000017") || excludeAccount.contains(accountId)) { + log.info(accountName + accountMap.get("code") + accountId); + if ("1".equals(accountMap.get("is_enable") != null ? accountMap.get("is_enable").toString() : null)) { +// 查询上级信息 + String path = accountMap.get("path").toString(); + String subPath = path.substring(0,path.length()-4); + Map sub = srcAccountDao.getAccountByPath(subPath); + String subId = sub.get("id").toString(); + if(!"-1730833917365171641".equals(subId)){ + JSONObject select = QixuexingPortUtil.qixuexingSelectOrg(configVo,subId); + String selectCode = select.getString("code"); +// 如果上级不存在则跳过当前单位信息 + if(!"0".equals(selectCode)){ + errorMap.put(accountId+"","企学星同步单位失败:未查询到有效上级信息"+accountName); + continue; + }else{ + String selectData = select.getString("data"); + if(selectData.length()==0){ + errorMap.put(accountId+"","企学星同步单位失败:未查询到有效上级信息"+accountName); + continue; + } + } + } +// 封装当前环境单位数据,调用部门保存接口,保存企学星部门信息 + JSONObject jsonObject = QixuexingPortUtil.qixuexingSaveOrg(configVo,accountMap,subId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 保存成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星单位保存同步成功"); + }else{ +// 保存失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星单位保存同步失败"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "保存"); + from.put("主要信息", accountMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + } else { + JSONObject jsonObject = QixuexingPortUtil.qixuexingDeleteOrg(configVo,accountId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 删除成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星单位删除同步成功"); + }else{ +// 删除失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星单位删除同步失败"+jsonObject.getString("message")); + errorMap.put(accountId+"","企学星同步单位失败:"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "删除"); + from.put("主要信息", accountMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + } + } + } + return errorMap; + } + + //企学星部门信息全量同步 + public String qixuexingSyncAllDepartments () { + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementDepartments = srcDepartmentDao.getAllDepartments(); + errorMap = qixuexingSyncBatchDeptMap(incrementDepartments); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("部门异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + //企学星部门信息增量同步 + public String qixuexingSyncBatchDepartment(String startDate){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementDepartments = srcDepartmentDao.getIncrementDepartmentByUpdateTime(startDate); + errorMap = qixuexingSyncBatchDeptMap(incrementDepartments); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("部门异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + //企学星部门信息同步,部门列表 id,code,name,path,is_enable,org_account_id,sort_id + public Map qixuexingSyncBatchDeptMap(List> list) throws ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + for(Map departmentMap : list){ + Map from = new HashMap(); + String departmentId = departmentMap.get("id").toString(); + String departmentName = departmentMap.get("name").toString(); +// 设置日志保存数据 + from.put("同步类型", "部门"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", departmentName); + + if("1".equals(departmentMap.get("is_enable")!=null?departmentMap.get("is_enable").toString():null)){ +// 查询上级信息 + String path = departmentMap.get("path").toString(); + String subPath = path.substring(0,path.length()-4); + Map sub = srcDepartmentDao.getDepartmentByPath(subPath); + String subId = sub.get("id").toString(); + JSONObject select = QixuexingPortUtil.qixuexingSelectOrg(configVo,subId); + String selectCode = select.getString("code"); +// 如果上级不存在则跳过当前单位信息 + if(!"0".equals(selectCode)){ + errorMap.put(departmentId+"","企学星同步部门失败:未查询到有效上级信息"+departmentName); + continue; + }else{ + String selectData = select.getString("data"); + if(selectData.length()==0){ + errorMap.put(departmentId+"","企学星同步部门失败:未查询到有效上级信息"+departmentName); + continue; + } + } +// 封装当前环境单位数据,调用部门保存接口,保存企学星部门信息 + JSONObject jsonObject = QixuexingPortUtil.qixuexingSaveOrg(configVo,departmentMap,subId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 保存成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星部门保存同步成功"); + }else{ +// 保存失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星部门保存同步失败"+jsonObject.getString("message")); + errorMap.put(departmentId+"","企学星部门保存同步失败"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "保存"); + from.put("主要信息", departmentMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + }else{ +// 部门停用删除企学星部门 + JSONObject jsonObject = QixuexingPortUtil.qixuexingDeleteOrg(configVo,departmentId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 删除成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星部门删除同步成功"); + }else{ +// 删除失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星部门删除同步失败"+jsonObject.getString("message")); + errorMap.put(departmentId+"","企学星同步部门失败:"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "删除"); + from.put("主要信息", departmentMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + } + } + return errorMap; + } + + public String qixuexingSyncAllMembers(){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = srcMemberDao.getAllMembers(); + List> orgMembers = v3xOrgMembertoMemberMap(incrementMembers); + errorMap = qinxuexingSyncBatchMemberMap(orgMembers); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("人员异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public String qixuexingSyncBatchMember(String startDate){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = srcMemberDao.getMembersByStartDate(startDate); + List> orgMembers = v3xOrgMembertoMemberMap(incrementMembers); + errorMap = qinxuexingSyncBatchMemberMap(orgMembers); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("人员异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + +// 通过人员列表ID查询人员对象列表 + public List> v3xOrgMembertoMemberMap(List> incrementMembers) { + List> orgMembers = new ArrayList<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + for(Map incrementMember :incrementMembers){ + if(incrementMember.get("id")!=null){ + String departmentId = incrementMember.get("org_department_id").toString(); + JSONObject select = QixuexingPortUtil.qixuexingSelectOrg(configVo,departmentId); + String selectCode = select.getString("code"); +// 如果上级不存在则跳过当前单位信息 + if(!"0".equals(selectCode)){ + continue; + }else{ + String selectData = select.getString("data"); + if(selectData.length()==0){ + continue; + } + } + String memberId = incrementMember.get("id").toString(); +// 此方法无法查询已经离职人员信息 + Map memberMap = archiveDao.getMemberArchiveByMemberId(Long.parseLong(memberId)); + orgMembers.add(memberMap); + } + } + return orgMembers; + } + + public Map qinxuexingSyncBatchMemberMap(List> list) throws BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + for(Map memberMap : list){ + Map from = new HashMap(); + String memberId = memberMap.get("id").toString(); + String memberName = memberMap.get("name").toString(); +// 设置日志保存数据 + from.put("同步类型", "人员"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", memberName); + String memberState = memberMap.get("member_state").toString(); + CtpEnumItem stateEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(memberState)); + if("1".equals(stateEnum.getValue()) || "0".equals(stateEnum.getValue())){ +// 封装当前环境单位数据,调用部门保存接口,保存企学星部门信息 + String memberSex = memberMap.get("sex") !=null ?memberMap.get("sex").toString():""; + CtpEnumItem sexEnum ; + if(StringUtil.isNotEmpty(memberSex)){ + sexEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(memberSex)); + memberMap.put("member_sex",sexEnum.getShowvalue()); + } + memberMap.put("member_status","1"); + JSONObject jsonObject = QixuexingPortUtil.qixuexingSaveUser(configVo,memberMap); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 保存成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星用户保存同步成功"); + }else{ +// 保存失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星用户保存同步失败"+jsonObject.getString("message")); + errorMap.put(memberId+"","企学星用户保存同步失败"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "保存"); + from.put("主要信息", memberMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + }else{ +// 部门停用删除企学星部门 + JSONObject jsonObject = QixuexingPortUtil.qixuexingDeleteUser(configVo,memberId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 删除成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星用户删除同步成功"); + }else{ +// 删除失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星用户删除同步失败"+jsonObject.getString("message")); + errorMap.put(memberId+"","企学星用户部门失败:"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "删除"); + from.put("主要信息", memberMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + } + } + return errorMap; + } + + public String qixuexingSyncAllServiceBrokers(){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> serviceBrokers = archiveDao.getServiceBrokers(); + errorMap = qinxuexingSyncBatchServiceBroker(serviceBrokers); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("业代异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public String qixuexingSyncServiceBroker(String startDate){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> serviceBrokers = archiveDao.getServiceBrokers(startDate); + errorMap = qinxuexingSyncBatchServiceBroker(serviceBrokers); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("业代异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public Map qinxuexingSyncBatchServiceBroker(List> list) throws BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + for(Map serviceBrokerMap : list){ + Map from = new HashMap(); + String serviceBrokerId = serviceBrokerMap.get("id").toString(); + String serviceBrokerName = serviceBrokerMap.get("name").toString(); +// 设置日志保存数据 + from.put("同步类型", "业代/客户"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", serviceBrokerName); + String serviceBrokerState = serviceBrokerMap.get("state").toString(); + CtpEnumItem stateEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(serviceBrokerState)); + if("1".equals(stateEnum.getValue()) || "0".equals(stateEnum.getValue())){ +// 封装当前环境单位数据,调用部门保存接口,保存企学星部门信息 + String memberSex = serviceBrokerMap.get("sex") !=null ?serviceBrokerMap.get("sex").toString():""; + CtpEnumItem sexEnum ; + if(StringUtil.isNotEmpty(memberSex)){ + sexEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(memberSex)); + serviceBrokerMap.put("member_sex",sexEnum.getShowvalue()); + } + serviceBrokerMap.put("member_status","1"); + JSONObject jsonObject = QixuexingPortUtil.qixuexingSaveUserServiceBroker(configVo,serviceBrokerMap); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 保存成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星业代用户保存同步成功"); + }else{ +// 保存失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星业代用户保存同步失败"+jsonObject.getString("message")); + errorMap.put(serviceBrokerId+"","企学星业代用户保存同步失败"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "保存"); + from.put("主要信息", serviceBrokerMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + }else{ +// 部门停用删除企学星部门 + JSONObject jsonObject = QixuexingPortUtil.qixuexingDeleteUserServiceBroker(configVo,serviceBrokerId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 删除成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星业代用户删除同步成功"); + }else{ +// 删除失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星业代用户删除同步失败"+jsonObject.getString("message")); + errorMap.put(serviceBrokerId+"","企学星业代用户部门失败:"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "删除"); + from.put("主要信息", serviceBrokerMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + } + } + return errorMap; + } + + public String qixuexingSyncAllClientMembers(){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = srcMemberDao.getAllClientMembers(); + List> orgMembers = clientMembertoMemberMap(incrementMembers); + errorMap = qixuexingSyncBatchClientMember(orgMembers); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("客户异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public String qixuexingSyncClientMember(String startDate){ + String res = ""; +// 根据列表查询生成列表部门对象 + Map errorMap = null; + try { +// 根据上一次同步时间获取最新修改的单位信息 + List> incrementMembers = archiveDao.getClientMembersByModifyDate(startDate); + List> orgMembers = clientMembertoMemberMap(incrementMembers); + errorMap = qixuexingSyncBatchClientMember(orgMembers); + } catch (BusinessException e) { + e.printStackTrace(); + } catch (ServiceException e) { + e.printStackTrace(); + } + log.info("客户异常数"+errorMap.size()); + for (Map.Entry entry : errorMap.entrySet()) { + String value = entry.getValue(); + res= res+value+";"; + } + return res ; + } + + public List> clientMembertoMemberMap(List> incrementMembers){ + List> orgMembers = new ArrayList<>(); +// ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + for(Map incrementMember :incrementMembers){ + if(incrementMember.get("id")!=null){ + String clientMemberId = incrementMember.get("id").toString(); +// 此方法无法查询已经离职人员信息 + Map memberMap = archiveDao.getMemberArchiveByClientMemberId(Long.parseLong(clientMemberId)); + orgMembers.add(memberMap); + } + } + return orgMembers; + } + + public Map qixuexingSyncBatchClientMember(List> list) throws BusinessException, ServiceException { + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + Map errorMap = new HashMap<>(); + for(Map clientMemberMap : list){ + Map from = new HashMap(); + String clientMemberId = clientMemberMap.get("id").toString(); + String clientMemberName = clientMemberMap.get("name").toString(); +// 设置日志保存数据 + from.put("同步类型", "业代/客户"); + from.put("同步时间", sdf.format(new Date())); + from.put("同步对象", clientMemberName); + String memberState = clientMemberMap.get("member_state").toString(); + CtpEnumItem stateEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(memberState)); + if("1".equals(stateEnum.getValue()) || "0".equals(stateEnum.getValue())){ +// 封装当前环境单位数据,调用部门保存接口,保存企学星部门信息 + String memberSex = clientMemberMap.get("sex") !=null ?clientMemberMap.get("sex").toString():""; + CtpEnumItem sexEnum ; + if(StringUtil.isNotEmpty(memberSex)){ + sexEnum = getEnumManagerNew().getCtpEnumItem(Long.parseLong(memberSex)); + clientMemberMap.put("member_sex",sexEnum.getShowvalue()); + } + clientMemberMap.put("member_status","1"); + JSONObject jsonObject = QixuexingPortUtil.qixuexingSaveUserClientMember(configVo,clientMemberMap); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 保存成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星客户用户保存同步成功"); + }else{ +// 保存失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星客户用户保存同步失败"+jsonObject.getString("message")); + errorMap.put(clientMemberId+"","企学星客户用户保存同步失败"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "保存"); + from.put("主要信息", clientMemberMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + }else{ +// 部门停用删除企学星部门 + JSONObject jsonObject = QixuexingPortUtil.qixuexingDeleteUserClientMember(configVo,clientMemberId); + String resCode = jsonObject.getString("code"); + if("0".equals(resCode)){ +// 删除成功 + from.put("是否成功", "成功"); + from.put("同步结果", "企学星客户用户删除同步成功"); + }else{ +// 删除失败 + from.put("是否成功", "失败"); + from.put("同步结果", "企学星客户用户删除同步失败"+jsonObject.getString("message")); + errorMap.put(clientMemberId+"","企学星客户用户部门失败:"+jsonObject.getString("message")); + } + FormExport formExport = new FormExport(); + from.put("同步动作", "删除"); + from.put("主要信息", clientMemberMap.toString()); + List valueExports = formExportUtil.setFormValue(from); + formExport.setValues(valueExports); + //同步记录创建人和钉钉日志创建人共用 + formFactory.importBusinessFormData(configVo.getParamVal(SyncConstants.dingdingLogloginName.name()), + configVo.getParamVal(SyncConstants.qxxLog.name()), + formExport, new String[]{}); + } + } + return errorMap; + } + +// public String qixuexingSyncAllPosts () { +// return null; +// } +// +// public String qixuexingSyncAllLevels () { +// +// return null; +// } + +// public String qixuexingSyncBatchPost(String startDate){ +// +// return null; +// } +// +// public String qixuexingSyncBatchLevel(String startDate){ +// +// return null; +// } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgSyncServer.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgSyncServer.java new file mode 100644 index 0000000..6dcffc7 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/server/OrganizationOrgSyncServer.java @@ -0,0 +1,273 @@ +package com.seeyon.apps.src_mainorganization.server; + + +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_mainorganization.bo.ThirdDeptBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdMemberBo; +import com.seeyon.apps.src_mainorganization.bo.ThirdPostBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISyncFvDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import org.apache.commons.lang.StringUtils; + +import javax.inject.Inject; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class OrganizationOrgSyncServer { + + private static Log log = Log.get(OrganizationOrgSyncServer.class); + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrgManager orgManager; + @Inject + private ISyncFvDao syncFvDao; + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + +// 客户服务平台单位同步 + public Map fvSyncBatchAccount(List list){ + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + log.info("执行数据筛选,只处理客户单位下的所有单位信息"); + List thirdDeparts = list.stream().filter((account) -> { + String path = account.getPath(); + return path.startsWith("00000017"); + }).map((account) -> { + return new ThirdDeptBo(account); + }).collect(Collectors.toList()); + log.info("遍历获取到的所有单位信息。"); + for(int i = 0; i < thirdDeparts.size(); ++i) { + ThirdDeptBo thirdDepart = thirdDeparts.get(i); + System.out.println(thirdDepart.getName() + thirdDepart.getCode() + thirdDepart.getId()); + log.info(thirdDepart.getName()+thirdDepart.getCode()+thirdDepart.getId()); +// 同步单位单位信息,通过中间库同步单位信息。客户服务平台同步操作 + boolean bool = syncFvDao.queryUnitById(thirdDepart.getId()+""); + log.info("调用接口查询是否存在中间库数据"+bool); + if(bool){ +// 当前修改单位存在,执行变更方法 + int updateUnitNum = syncFvDao.updateUnit(thirdDepart); + log.info("执行修改方法当前修改结果为"+updateUnitNum+"当前修改参数为"+thirdDepart); + if(updateUnitNum==0){ + System.out.println("修改失败"+thirdDepart.getName()+thirdDepart.getId()); + errorMap.put(thirdDepart.getId()+"","客户服务平台修改单位失败:"+thirdDepart.getName()); + } + }else{ +// 当前修改单位不存在,执行新增方法 + int addUnitNum = syncFvDao.addUnit(thirdDepart); + log.info("执行新增方法当前新增结果为"+addUnitNum+"当前新增数据为"+thirdDepart); + if(addUnitNum==0){ + System.out.println("添加失败"+thirdDepart.getName()+thirdDepart.getId()); + errorMap.put(thirdDepart.getId()+"","客户服务平台新增单位失败:"+thirdDepart.getName()); + } + } + } + return errorMap; + } + +// 客户服务平台部门同步 + public Map fvSyncBatchDepartment(List list) throws SQLException { + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +//通过路径筛选出需要同步人部门数据 + log.info("执行数据筛选,只处理客户单位下的所有部门信息同步"); + List thirdDeparts = list.stream().filter((department) ->{ + String path = department.getPath(); + return path.startsWith("00000017"); + }).map((department) -> { + return new ThirdDeptBo( department); + }).collect(Collectors.toList()); + log.info("遍历筛选后的所有部门信息"); + for(int i = 0 ; i < thirdDeparts.size() ; i++){ + ThirdDeptBo thirdDepart = thirdDeparts.get(i); + log.info(thirdDepart.getName() + thirdDepart.getCode() + thirdDepart.getId()); +// 同步单位单位信息,通过中间库同步单位信息。客户服务平台同步操作 + boolean bool = syncFvDao.queryDeptById(thirdDepart.getId()+""); + log.info("查询当前部门是否在中间库存在"+bool); + if(bool){ +// 当前修改单位存在,执行变更方法 + int updateDeptNum = syncFvDao.updateDept(thirdDepart); + log.info("执行修改方法当前修改结果为"+updateDeptNum+"当前修改参数为"+thirdDepart); + if(updateDeptNum==0){ + System.out.println("修改失败"+thirdDepart.getName()+thirdDepart.getId()); + errorMap.put(thirdDepart.getId()+"","客户服务平台修改部门失败:"+thirdDepart.getName()+"("+thirdDepart.getId()+")"); + } + }else{ +// 当前修改单位不存在,执行新增方法 + int addDeptNum = syncFvDao.addDept(thirdDepart); + log.info("执行新增方法当前新增结果为"+addDeptNum+"当前新增数据为"+thirdDepart); + if(addDeptNum==0){ + System.out.println("添加失败"+thirdDepart.getName()+thirdDepart.getId()); + errorMap.put(thirdDepart.getId()+"","客户服务平台新增部门失败:"+thirdDepart.getName()+"("+thirdDepart.getId()+")"); + } + } + } + return errorMap; + } + +// 客户服务平台岗位同步 + public Map fvSyncBatchPost(List list){ + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); + String companyId = configVo.getParamVal(SyncConstants.companyId.name()); +// 通过路径筛选出需要同步人部门数据 + log.info("执行数据筛选,只处理客户单位下的所有岗位信息同步"); + List thirdPosts = list.stream().filter((post) ->{ + String path = ""; + try { + long postAccountId = post.getOrgAccountId(); + V3xOrgAccount memberAccount = orgManager.getAccountById(postAccountId); + path = memberAccount.getPath(); + } catch (BusinessException e) { + e.printStackTrace(); + } + return path.startsWith("00000017"); + }).map((post) -> { + return new ThirdPostBo(companyId, post); + }).collect(Collectors.toList()); + log.info("遍历筛选后的所有岗位信息"); + for(int i = 0 ; i < thirdPosts.size() ; i++){ + try { + ThirdPostBo thirdPost = thirdPosts.get(i); + log.info(thirdPost.getName() + thirdPost.getCode() + thirdPost.getId()); +// 通过当前修改岗位信息查看是否存在基准岗位信息 + String banchmarkPostId = syncFvDao.queryBanchmarkPostIdByPostId(thirdPost.getId()+""); + log.info("根据当前岗位信息查询基准岗位ID"+banchmarkPostId+"判断当前当前岗位是否存在基准刚"); +// 存在基准岗位信息根据岗位信息查询基准岗位信息 + if(StringUtils.isNotEmpty(banchmarkPostId)){ +// 根据基准岗位ID查询中间表岗位信息是否存在 + boolean bool = syncFvDao.queryPostById(banchmarkPostId); + log.info("查询当前岗位是否在中间库存在"+bool); +// 根据基准岗位ID查询基准岗位信息 + V3xOrgPost v3xOrgPost = orgManager.getPostById(Long.parseLong(banchmarkPostId)); + if(bool){ +// 中间表岗位信息存在则执行修改方法,修改中间表岗位信息 + int updatePostNum = syncFvDao.updatePost(v3xOrgPost); + log.info("执行修改方法当前修改结果为"+updatePostNum+"当前修改参数为"+v3xOrgPost); + if(updatePostNum==0){ + System.out.println("修改失败"+v3xOrgPost.getName()+v3xOrgPost.getId()); + errorMap.put(v3xOrgPost.getId()+"","客户服务平台修改岗位失败:"+v3xOrgPost.getName()+"("+v3xOrgPost.getId()+")"); + } + }else{ +// 中间表岗位信息不存在则执行新增方法,增加中间表岗位信息 + int addPostNum = syncFvDao.addPost(v3xOrgPost); + log.info("执行新增方法当前新增结果为"+addPostNum+"当前新增数据为"+v3xOrgPost); + if(addPostNum==0){ + System.out.println("添加失败"+v3xOrgPost.getName()+v3xOrgPost.getId()); + errorMap.put(v3xOrgPost.getId()+"","客户服务平台新增岗位失败:"+v3xOrgPost.getName()+"("+v3xOrgPost.getId()+")"); + } + } + } + } catch (BusinessException e) { + e.printStackTrace(); + } + } + return errorMap; + } + +// 客户服务平台人员同步 + public Map fvSyncBatchMember(List list) throws InterruptedException, BusinessException { + Map errorMap = new HashMap<>(); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 循环遍历人员列表 + log.info("执行数据筛选,只处理客户单位下有的所人员信息同步"); + List thirdMembers = (List)list.stream().filter((member) ->{ + String path = ""; + try { + long memeberAccountId = member.getOrgAccountId(); + V3xOrgAccount memberAccount = orgManager.getAccountById(memeberAccountId); + path = memberAccount.getPath(); + } catch (BusinessException e) { + e.printStackTrace(); + } + return path.startsWith("00000017"); + }).map((member) -> { + ThirdMemberBo thirdMember = null; + try { + thirdMember = new ThirdMemberBo(member,"fv"); + return thirdMember; + } catch (BusinessException e) { + e.printStackTrace(); + } + return thirdMember; + }).collect(Collectors.toList()); + log.info("遍历筛选后所有的人员信息"); +// 判断筛选后的人员是都存在于不同步目录中(不同步目录显示为组织架构名称) + String customerServiceBlacklist = configVo.getParamVal(SyncConstants.customerServiceBlacklist.name()); + List customerServiceBlacklistList = Arrays.stream(customerServiceBlacklist.split("[,,]")) + .map(String::trim) // 去除每个元素的前后空格 + .collect(Collectors.toList()); + for(int i = 0 ; i < thirdMembers.size(); i++){ + ThirdMemberBo thirdMember = thirdMembers.get(i); +// 判断当前人员名称是否在黑名单列表中存在 + if(customerServiceBlacklistList.contains(thirdMember.getName())){ +// 如果包含此元素,则跳过当前人员同步 + log.info("当前人员信息在客户服务平台同步黑名单中存在,跳过处理"+thirdMember.getName()); + continue; + } +// 循环三次查询三次是否存在当前人员档案 + log.info("根据当前人员信息查询人员档案是否存在"); + for(int n = 0 ;n < 4 ; n++){ + Map memeberMap = syncFvDao.queryMemberArchiveByMemberId(thirdMember.getId()+""); + if(memeberMap==null){ + log.info("人员档案不存在等待5秒后再次执行"+"当前执行次数"+n+1); + Thread.sleep(5000); + continue; + }else{ +// 查询当前岗位是否为商务专员 + long accountPostId = thirdMember.getPostId(); + V3xOrgPost accountPost = orgManager.getPostById(accountPostId); + if("商务专员".equals(accountPost.getName())||"商家人员".equals(accountPost.getName())){ + errorMap.put(thirdMember.getId()+"","客户服务平台新增人员跳过:"+thirdMember.getName()+"("+thirdMember.getId()+")岗位为商务专员和商家人员跳过当前人员同步"); + continue; + } + long postId = thirdMember.getPostId(); + V3xOrgPost v3xOrgPost = orgManager.getPostById(postId); + if("客户老板".equals(v3xOrgPost.getName())){ + memeberMap.put("phone",thirdMember.getLoginName()); + } +// 查询中间库是否存在当前修改人员数据 + Map memeberHelpMap = syncFvDao.queryMemberHelpByMemberId(thirdMember.getId()+""); + log.info("查询当前岗位是否在中间库存在"+memeberHelpMap.size()); +// 同步人员信息,通过中间库同步人员信息。客户服务平台同步操作 +// 处理查询到的人员数据 + if(memeberHelpMap.size()>0){ +// 当前修改人员存在,执行变更方法 + int updateMemberNum = syncFvDao.updateMember(thirdMember,memeberMap); + log.info("执行修改方法当前修改结果为"+updateMemberNum+"当前修改参数为"+thirdMember); + if(updateMemberNum==0){ + System.out.println("修改失败"+thirdMember.getName()+thirdMember.getId()); + errorMap.put(thirdMember.getId()+"","客户服务平台修改人员失败:"+thirdMember.getName()+"("+thirdMember.getId()+")"); + } + }else{ +// 当前修改人员不存在,执行新增方法 + int addMemberNum = syncFvDao.addMember(thirdMember,memeberMap); + log.info("执行修改方法当前修改结果为"+addMemberNum+"当前修改参数为"+thirdMember); + if(addMemberNum==0){ + System.out.println("添加失败"+thirdMember.getName()+thirdMember.getId()); + errorMap.put(thirdMember.getId()+"","客户服务平台新增人员失败:"+thirdMember.getName()+"("+thirdMember.getId()+")"); + } + } + } + } + } + return errorMap; + } + + + + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveOrgDepartmentService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveOrgDepartmentService.java new file mode 100644 index 0000000..db075e1 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveOrgDepartmentService.java @@ -0,0 +1,36 @@ +package com.seeyon.apps.src_mainorganization.service; + +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.ctp.common.exceptions.BusinessException; + +import java.sql.SQLException; +import java.text.ParseException; + +public interface IReceiveOrgDepartmentService { + + /** + * 调用接口修改部门信息 + * @param memberParam + * @return + */ + public ReceiveOrgMemberResponse updateDepartmentMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException; + + + /** + * 调用接口修改部门跨单位调动 + * @param memberParam + * @return + */ + public ReceiveOrgMemberResponse updateDepartmentSpanAccount(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException; + + + /** + * 调用接口获取单位部门列表 + * @param deptParam + * @return + */ + public ReceiveOrgMemberResponse queryDepartmentMain (JSONObject deptParam) throws BusinessException, SQLException; + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java new file mode 100644 index 0000000..48e343f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveOrgMemberService.java @@ -0,0 +1,42 @@ +package com.seeyon.apps.src_mainorganization.service; + +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.ctp.common.exceptions.BusinessException; + +import java.sql.SQLException; +import java.text.ParseException; + +public interface IReceiveOrgMemberService { + + /** + * 调用接口保存人员到组织架构平台 + * @param memberParam + * @return + */ + public ReceiveOrgMemberResponse saveMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException; + + /** + * 调用接口更新人员到组织架构平台 + * @param memberParam + * @return + */ + public ReceiveOrgMemberResponse updateMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException; + + /** + * 调用接口查询人员数据 + * @param param + * @return + */ + public ReceiveOrgMemberResponse queryMemberMain(JSONObject param) throws BusinessException, SQLException; + + + /** + * 调用接口查询人员数据 + * @param param + * @return + */ + public ReceiveOrgMemberResponse queryFHMemberMain(JSONObject param) throws BusinessException, SQLException; + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveSrcCustomerService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveSrcCustomerService.java new file mode 100644 index 0000000..defc521 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/IReceiveSrcCustomerService.java @@ -0,0 +1,20 @@ +package com.seeyon.apps.src_mainorganization.service; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.ctp.common.exceptions.BusinessException; + +public interface IReceiveSrcCustomerService { + + /** + * 调用接口查询客户数据 + * @param param + * @return + */ + public ReceiveOrgMemberResponse queryCustomerMain(JSONObject param) throws BusinessException; + + + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/ISrcMemberFormTableService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/ISrcMemberFormTableService.java new file mode 100644 index 0000000..cd3bfbc --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/ISrcMemberFormTableService.java @@ -0,0 +1,18 @@ +package com.seeyon.apps.src_mainorganization.service; + +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.ctp.common.exceptions.BusinessException; + +public interface ISrcMemberFormTableService { + + /** + * 调用接口查询客户数据 + * @return + */ + public ReceiveOrgMemberResponse saveMemberFormTableMain() throws BusinessException; + + + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgDepartmentServiceImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgDepartmentServiceImpl.java new file mode 100644 index 0000000..9414dce --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgDepartmentServiceImpl.java @@ -0,0 +1,483 @@ +package com.seeyon.apps.src_mainorganization.service.impl; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.bo.ThirdDeptBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.ISrcAccountDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcDepartmentDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcLevelDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcPostDao; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgDepartmentService; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.apps.src_mainorganization.util.ParamUtil; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +public class ReceiveOrgDepartmentServiceImpl implements IReceiveOrgDepartmentService { + + private static Log log = Log.get(ReceiveOrgDepartmentServiceImpl.class); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private OrgManager orgManager; + @Inject + private OrgManagerDirect orgManagerDirect; + @Inject + private ISrcAccountDao srcAccountDao; + @Inject + private ISrcDepartmentDao srcDepartmentDao; + @Inject + private ISrcPostDao srcPostDao; + @Inject + private ISrcLevelDao srcLevelDao; + @Inject + private IReceiveOrgMemberService receiveOrgMemberService; + + @Override + public ReceiveOrgMemberResponse updateDepartmentMain(JSONObject departmentParam) throws BusinessException, ParseException, JsonProcessingException { + log.info ("进入部门修改接口修改请求参数:"+departmentParam.toString()); + String departmentId = departmentParam.getString("id"); + log.info("当前修改部门ID:"+departmentId); + JSONObject jsonObject = new JSONObject(); +// List mess = new ArrayList<>(); +// 根据ID查询部门信息 + V3xOrgDepartment department = orgManager.getDepartmentById(Long.parseLong(departmentId)); + if(department == null ){ + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:未查询到对应部门信息"); + jsonObject.put("data",""); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } +// 判断是否修改名称 + if(StringUtil.isNotEmpty(departmentParam.getString("name"))){ + department.setName(departmentParam.getString("name")); + } +// 判断是否修改编号 + if(StringUtil.isNotEmpty(departmentParam.getString("code"))){ + department.setCode(departmentParam.getString("code")); + } +// 判断组织架构信息是否修改 + if(departmentParam.getLongValue("superior")!=0){ + department.setSuperior(departmentParam.getLongValue("superior")); + } +// 判断是否修改人员状态1正常2停用 + if(StringUtil.isNotEmpty(departmentParam.getString("state"))){ + department.setStatus(departmentParam.getInteger("state")); + } +// 判断是否修改启用状态 + if(StringUtil.isNotEmpty(departmentParam.getString("enabled"))){ + department.setEnabled(departmentParam.getBooleanValue("enabled")); + } +// 判断是否修改删除状态 + if(StringUtil.isNotEmpty(departmentParam.getString("isDeleted"))){ + department.setIsDeleted(departmentParam.getBooleanValue("isDeleted")); + } + OrganizationMessage mes = orgManagerDirect.updateDepartment(department); + log.info("当前是否修改成功"+mes.isSuccess()); + if(mes.isSuccess()) { + List successMsgs = mes.getSuccessMsgs(); + OrganizationMessage.OrgMessage successMsg =successMsgs.get(0); + V3xOrgEntity v3xOrgEntity = successMsg.getEnt(); + log.info("部门修改成功"+v3xOrgEntity.getName()+":"+v3xOrgEntity.getId()); + jsonObject.put("status","1"); + jsonObject.put("msg","修改成功:"+departmentId); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 将对象转换为JSON字符串 + String json = objectMapper.writeValueAsString(v3xOrgEntity); + jsonObject.put("data",json); + }else { + log.info("部门修改失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("data",""); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + + @Override + public ReceiveOrgMemberResponse updateDepartmentSpanAccount(JSONObject departmentParam) throws BusinessException, ParseException, JsonProcessingException { + log.info("进入部门跨单位调动接口,请求参数:"+departmentParam.toString()); + JSONObject jsonObject = new JSONObject(); + List mess = new ArrayList<>(); +// 判断当前修改的部门是否为客户服务平台中的单位 + long orgAccountId = departmentParam.getLongValue("orgAccountId"); + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(orgAccountId); + log.info("当前修改部门所在单位为:"+v3xOrgAccount.getId()+v3xOrgAccount.getName()); + String accountPath = v3xOrgAccount.getPath(); + if(!accountPath.startsWith("00000017")){ + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:修改目标单位信息不为客户服务平台的单位,请检查请求参数"); + jsonObject.put("data",""); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + long departmentId = departmentParam.getLongValue("id"); + log.info("当前修改部门ID:"+departmentId); +// List mess = new ArrayList<>(); +// 根据ID查询部门信息 + V3xOrgDepartment department = orgManager.getDepartmentById(departmentId); + log.info("查询到当前ID的部门信息:"+department.getName()); + if(department == null ){ + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:未查询到对应部门信息"); + jsonObject.put("data",""); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + V3xOrgAccount oldOrgAccount = orgManager.getAccountById(department.getOrgAccountId()); + String oldAccountPath = oldOrgAccount.getPath(); + if(!oldAccountPath.startsWith("00000017")){ + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:修改部门的单位信息不为客户服务平台的单位,请检查请求参数"); + jsonObject.put("data",""); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } +// 判断是否修改名称 + if(StringUtil.isNotEmpty(departmentParam.getString("name"))){ + department.setName(departmentParam.getString("name")); + } +// 判断是否修改编号 + if(StringUtil.isNotEmpty(departmentParam.getString("code"))){ + department.setCode(departmentParam.getString("code")); + } +// 判断组织架构信息是否修改 + if(departmentParam.getLongValue("superior")!=0){ + department.setSuperior(departmentParam.getLongValue("superior")); + } + if(departmentParam.getLongValue("orgAccountId")!=0){ + department.setOrgAccountId(departmentParam.getLongValue("orgAccountId")); + } +// 判断是否修改人员状态1正常2停用 + if(StringUtil.isNotEmpty(departmentParam.getString("state"))){ + department.setStatus(departmentParam.getInteger("state")); + } +// 判断是否修改启用状态 + if(StringUtil.isNotEmpty(departmentParam.getString("enabled"))){ + department.setEnabled(departmentParam.getBooleanValue("enabled")); + } +// 判断是否修改删除状态 + if(StringUtil.isNotEmpty(departmentParam.getString("isDeleted"))){ + department.setIsDeleted(departmentParam.getBooleanValue("isDeleted")); + } + OrganizationMessage mes = orgManagerDirect.updateDepartment(department); + if(mes.isSuccess()) { +// 上级部门修改成功,遍历进行下级所有部门人员信息 + mess.add(mes); + List successMsgs = mes.getSuccessMsgs(); + OrganizationMessage.OrgMessage successMsg =successMsgs.get(0); + V3xOrgEntity v3xOrgEntity = successMsg.getEnt(); + List subOrgDepartments = orgManager.getChildDepartments(department.getId(),false); + log.info("当前部门修改下存在"+subOrgDepartments.size()+"个部门"); +// 遍历查询到的所有下级部门,将单位替换成目标单位后进行保存 + for (V3xOrgDepartment subOrgDepartment : subOrgDepartments) { + subOrgDepartment.setOrgAccountId(departmentParam.getLongValue("orgAccountId")); + OrganizationMessage submes = orgManagerDirect.updateDepartment(subOrgDepartment); + log.info("子部门是否变动成功"+submes.isSuccess()+subOrgDepartment.getName()); + mess.add(submes); + } +// 查询当前部门下人员(递归查询当前部门及下级部门中的人员) + List members = orgManager.getMembersByDepartment(department.getId(),false); + log.info("查询到当前部门下存在的人员信息"+members.size()); +// 判断当前单位是否需要修改 + for (V3xOrgMember member: members) { + JSONObject subMemberJson = new JSONObject(); + subMemberJson.put("id",member.getId()); + subMemberJson.put("orgAccountId",department.getOrgAccountId()); + + long subOrgPostId = member.getOrgPostId(); + log.info("岗位ID"+subOrgPostId+"新单位id"+department.getOrgAccountId()); + String postId = srcPostDao.getPostIdByAccountPost(subOrgPostId,department.getOrgAccountId()); + subMemberJson.put("orgPostId",postId); +// 查询并设置人员职务级别信息 + long subOrgLevelId = member.getOrgLevelId(); + log.info("职务级别ID"+subOrgLevelId+"新单位id"+department.getOrgAccountId()); + String levelId = srcLevelDao.getLevelIdByAccountLevel(subOrgLevelId,department.getOrgAccountId()); + subMemberJson.put("orgLevelId",levelId); + subMemberJson.put("name",member.getName()); + ReceiveOrgMemberResponse rmr = receiveOrgMemberService.updateMemberMain(subMemberJson); + if(rmr.getStatus()!=1){ + log.info("修改失败"+rmr.getStatus()+rmr.getData()+rmr.getMsg()); + return rmr; + } + } + boolean isSuccess = true ; + String msg = ""; + for(OrganizationMessage organizationMessage : mess){ + if(!organizationMessage.isSuccess()){ + isSuccess = false; + log.info("修改失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + msg = msg + "修改失败:"+organizationMessage.getErrorMsgInfos().get(0).getMsgInfo(); + } + } + if(!isSuccess){ + jsonObject.put("status","2"); + jsonObject.put("msg",msg); + jsonObject.put("data",""); + } + log.info("部门修改成功"+v3xOrgEntity.getName()+":"+v3xOrgEntity.getId()); + jsonObject.put("status","1"); + jsonObject.put("msg","修改成功:"+departmentId); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 将对象转换为JSON字符串 + String json = objectMapper.writeValueAsString(v3xOrgEntity); + jsonObject.put("data",json); + }else { + log.info("部门修改失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("data",""); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + + @Override + public ReceiveOrgMemberResponse queryDepartmentMain(JSONObject deptParam) throws BusinessException, SQLException { + log.info("进入单位部门查询接口,请求参数:"+deptParam.toString()); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 按照层级获取单位部门信息 + String type = deptParam.getString("type"); + + JSONArray accounts = new JSONArray(); +// 创建根目录(默认为稻花香) + ThirdDeptBo thirdDeptBo = new ThirdDeptBo(); + accounts.add(thirdDeptBo.defaultRootDirectory()); + if("finance".equals(type)){//法人架构 +// 判断是否还存在下级 + boolean isExistSubordinate = true; + String superAccountPath = "0000"; + List superPaths = new ArrayList<>(); + List accountPaths = new ArrayList<>(); + List deptPaths = new ArrayList<>(); + superPaths.add(superAccountPath); + accountPaths.add(superAccountPath); + while (isExistSubordinate) { + List temporaryAccountPaths = new ArrayList<>(); + List temporaryDepartmentPaths = new ArrayList<>(); + if(superPaths.size()==0){ + isExistSubordinate = false; + continue; + } +// 清理总列表 + superPaths.clear(); +// 遍历单位路径,查询单位路径下一级的所有单位和部门 + for(String accountPath:accountPaths){ +// 查询到当前路径下的所有单位,遍历后封装成为参数 + List subordinateAccounts = srcAccountDao.getSubordinateAccountByPath(accountPath); + for(String subordinateAccount :subordinateAccounts){ + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(Long.parseLong(subordinateAccount)); + JSONObject orgAccountJson = thirdDeptBo.financeAccount(v3xOrgAccount); + temporaryAccountPaths.add(v3xOrgAccount.getPath()); + superPaths.add(v3xOrgAccount.getPath()); + accounts.add(orgAccountJson); + } + // 查询当前路径下的所有部门,遍历后封装成参数 + List subordinateDeparemnets = srcDepartmentDao.getSubordinateDepartmentByPath(accountPath); + for(String subordinateDeparemnet :subordinateDeparemnets){ + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(Long.parseLong(subordinateDeparemnet)); + JSONObject orgDepartmnetJson = thirdDeptBo.financeDepartment(v3xOrgDepartment); + temporaryDepartmentPaths.add(v3xOrgDepartment.getPath()); + superPaths.add(v3xOrgDepartment.getPath()); + accounts.add(orgDepartmnetJson); + } + } +// 遍历部门路径,查询部门路径下一级的所有部门 + for (String deptPath:deptPaths){ +// 查询当前路径下的所有部门,遍历后封装成参数 + List subordinateDeparemnets = srcDepartmentDao.getSubordinateDepartmentByPath(deptPath); + for(String subordinateDeparemnet :subordinateDeparemnets){ + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(Long.parseLong(subordinateDeparemnet)); + JSONObject orgDepartmnetJson = thirdDeptBo.financeDepartment(v3xOrgDepartment); + temporaryDepartmentPaths.add(v3xOrgDepartment.getPath()); + superPaths.add(v3xOrgDepartment.getPath()); + accounts.add(orgDepartmnetJson); + } + } + accountPaths.clear(); + deptPaths.clear(); + accountPaths.addAll(temporaryAccountPaths); + accountPaths.addAll(temporaryDepartmentPaths); + } + }else if("operation".equals(type)){//业务架构 +// 判断是否还存在下级 + boolean isExistSubordinate = true; + String superAccountPath = "0000"; + List superPaths = new ArrayList<>(); + List accountPaths = new ArrayList<>(); + List deptPaths = new ArrayList<>(); + superPaths.add(superAccountPath); + accountPaths.add(superAccountPath); + while (isExistSubordinate) { + List temporaryAccountPaths = new ArrayList<>(); + List temporaryDepartmentPaths = new ArrayList<>(); + if(superPaths.size()==0){ + isExistSubordinate = false; + continue; + } +// 清理总列表 + superPaths.clear(); +// 遍历单位路径,查询单位路径下一级的所有单位和部门 + for(String accountPath:accountPaths){ +// 查询到当前路径下的所有单位,遍历后封装成为参数 + List subordinateAccounts = srcAccountDao.getSubordinateAccountByPath(accountPath); + for(String subordinateAccount :subordinateAccounts){ + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(Long.parseLong(subordinateAccount)); + if(!v3xOrgAccount.getPath().startsWith("00000017")){ + JSONObject orgAccountJson = thirdDeptBo.financeAccount(v3xOrgAccount); + temporaryAccountPaths.add(v3xOrgAccount.getPath()); + superPaths.add(v3xOrgAccount.getPath()); + accounts.add(orgAccountJson); + } + } +// 查询当前路径下的所有部门,遍历后封装成参数 + List subordinateDeparemnets = srcDepartmentDao.getSubordinateDepartmentByPath(accountPath); + for(String subordinateDeparemnet :subordinateDeparemnets){ + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(Long.parseLong(subordinateDeparemnet)); + JSONObject orgDepartmnetJson = thirdDeptBo.financeDepartment(v3xOrgDepartment); + temporaryDepartmentPaths.add(v3xOrgDepartment.getPath()); + superPaths.add(v3xOrgDepartment.getPath()); + accounts.add(orgDepartmnetJson); + } + } +// 遍历部门路径,查询部门路径下一级的所有部门 + for (String deptPath:deptPaths){ +// 查询当前路径下的所有部门,遍历后封装成参数 + List subordinateDeparemnets = srcDepartmentDao.getSubordinateDepartmentByPath(deptPath); + for(String subordinateDeparemnet :subordinateDeparemnets){ + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(Long.parseLong(subordinateDeparemnet)); + JSONObject orgDepartmnetJson = thirdDeptBo.financeDepartment(v3xOrgDepartment); + temporaryDepartmentPaths.add(v3xOrgDepartment.getPath()); + superPaths.add(v3xOrgDepartment.getPath()); + accounts.add(orgDepartmnetJson); + } + } + accountPaths.clear(); + deptPaths.clear(); + accountPaths.addAll(temporaryAccountPaths); + accountPaths.addAll(temporaryDepartmentPaths); + } +// 特殊单位处理(当前只存在知与行公司需要补充到供应商单位下) +// 查询特殊公司列表 + String excludeAccount = configVo.getParamVal(SyncConstants.excludeAccount.name()); + String[] excludeAccounts = excludeAccount.split(","); + List accountIds = new ArrayList<>(); + for (String account:excludeAccounts) { + String accountId = srcAccountDao.getAccountId(account); + accountIds.add(accountId); + } + // 使用 HashSet 去重 + Set uniqueSet = new HashSet<>(accountIds); + List uniqueAccountIds = new ArrayList<>(uniqueSet); + int i = 1 ; +// 遍历特殊公司 + for (String accountId: uniqueAccountIds) { + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(Long.parseLong(accountId)); +// 获取供应商单位信息 + V3xOrgAccount superAccount = orgManager.getAccountById(-4020778099040434485l); +// 查询供应商单位下最大路径 + String maxAccountPath = subordinateAaxAccountPath(superAccount); + String accountPath = ParamUtil.pathIncrease(maxAccountPath,i); +// 将当前部门信息添加到返回值对象中 + JSONObject accountJson = thirdDeptBo.specialAccount(v3xOrgAccount,accountPath,superAccount); + accounts.add(accountJson); +// 获取当前单位下所有部门信息 + List departmentIds = srcDepartmentDao.getDepartmentBySuperPath(v3xOrgAccount.getPath()); + for (String departmentId : departmentIds) { + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(Long.parseLong(departmentId)); + JSONObject departmentJson = thirdDeptBo.specialDepartment(v3xOrgDepartment,accountPath); + accounts.add(departmentJson); + } + i++; + } + } + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("status","1"); + jsonObject.put("msg","成功"); + jsonObject.put("data",accounts); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + + + private String subordinateAaxAccountPath (V3xOrgAccount v3xOrgAccount) throws BusinessException { + List subordinateAccountIds = srcAccountDao.getSubordinateAccountByPath(v3xOrgAccount.getPath()); +// 获取下级部门path最大值 + String maxPath = null; + V3xOrgAccount maxPathAccount = null; + int maxLast4Digits = Integer.MIN_VALUE; + for(String subordinateAccountId : subordinateAccountIds){ + try { + // 1. 根据ID查询账户对象 + V3xOrgAccount subordinateAccount = orgManager.getAccountById(Long.parseLong(subordinateAccountId)); + if (subordinateAccount == null || subordinateAccount.getPath() == null) { + continue; // 跳过无效账户 + } + // 2. 提取path的最后4位 + String path = subordinateAccount.getPath(); + if (path.length() < 4) { + continue; // 跳过长度不足的path + } + String last4Str = path.substring(path.length() - 4); + // 3. 转换为数字并比较 + int last4Digits = Integer.parseInt(last4Str); + if (last4Digits > maxLast4Digits) { + maxLast4Digits = last4Digits; + maxPath = path; + maxPathAccount = subordinateAccount; + } + } catch (NumberFormatException e) { + // 处理ID转换异常 + System.err.println("Invalid account ID: " + subordinateAccountId); + } catch (Exception e) { + // 其他异常处理 + System.err.println("Error processing account: " + subordinateAccountId); + e.printStackTrace(); + } + } + // 输出结果 + if (maxPathAccount != null) { + System.out.println("最大path值: " + maxPath); + System.out.println("最后四位数字: " + maxLast4Digits); + } else { + System.out.println("未找到有效的下级部门"); + } + return maxPath; + } + + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java new file mode 100644 index 0000000..c805954 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveOrgMemberServiceImpl.java @@ -0,0 +1,995 @@ +package com.seeyon.apps.src_mainorganization.service.impl; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.seeyon.apps.addressbook.manager.AddressBookCustomerFieldInfoManager; +import com.seeyon.apps.addressbook.po.AddressBook; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.bo.ThirdMemberBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.IArchiveDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcAccountDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcEnumDao; +import com.seeyon.apps.src_mainorganization.dao.ISrcMemberDao; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.apps.src_mainorganization.util.ParamUtil; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.OrgConstants; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.*; + +public class ReceiveOrgMemberServiceImpl implements IReceiveOrgMemberService { + + private static Log log = Log.get(ReceiveOrgMemberServiceImpl.class); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private AddressBookCustomerFieldInfoManager addressBookCustomerFieldInfoManager; + @Inject + private ISrcEnumDao srcEnumDao; + @Inject + private ISrcMemberDao srcMemberDao; + @Inject + private ISrcAccountDao srcAccountDao; + @Inject + private OrgManagerDirect orgManagerDirect; + @Inject + private OrgManager orgManager; + @Inject + private IArchiveDao archiveDao; + + @Override + public ReceiveOrgMemberResponse saveMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException { + V3xOrgMember member = new V3xOrgMember(); +// 创建人员ID + if(StringUtil.isNotEmpty(memberParam.getString("id"))){ + member.setId(memberParam.getLong("id")); + }else{ + member.setIdIfNew(); + } + member.setName(memberParam.getString("name")); + member.setCode(memberParam.getString("code")); + member.setTelNumber(memberParam.getString("telNumber")); + String birthday = memberParam.getString("birthday"); + if(StringUtil.isNotEmpty(birthday)){ + member.setProperty("birthday",sdf.parse(birthday)); + } + String hiredate = memberParam.getString("hiredate"); + if(StringUtil.isNotEmpty(hiredate)){ + member.setProperty("hiredate",sdf.parse(hiredate)); + } + String gender = memberParam.getString("gender"); + member.setProperty("gender",gender); + + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(memberParam.getString("loginName")); + v3xOrgPrincipal.setMemberId(member.getId()); + v3xOrgPrincipal.setPassword("123456"); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + + member.setOrgLevelId(memberParam.getLongValue("orgLevelId")); + member.setOrgDepartmentId(memberParam.getLongValue("orgDepartmentId")); + member.setOrgPostId(memberParam.getLongValue("orgPostId")); + member.setOrgAccountId(memberParam.getLongValue("orgAccountId")); + // 排序号 +// member.setSortId(1L); + String sortId = memberParam.getString("sortId"); + if(StringUtil.isNotEmpty(sortId)){ + member.setSortId(Long.parseLong(sortId)); + }else{ + // 查询当前环境最大排序号 + String maxSortId = srcMemberDao.getMemberMaxSortId(); + if(StringUtil.isNotEmpty(maxSortId)){ + member.setSortId(Long.parseLong(maxSortId)+1); + }else{ + member.setSortId(-1l); + } + } + AddressBook addressBook = new AddressBook(); + addressBook = setAddressBooks(addressBook,memberParam); + addressBook.setMemberId(member.getId()); + addressBook.setIdIfNew(); + addressBookCustomerFieldInfoManager.addAddressBook(addressBook); + OrganizationMessage mes = orgManagerDirect.addMember(member); + + JSONObject jsonObject = new JSONObject(); + if(mes.isSuccess()) { + List successMsgs = mes.getSuccessMsgs(); + OrganizationMessage.OrgMessage successMsg =successMsgs.get(0); + V3xOrgEntity v3xOrgEntity = successMsg.getEnt(); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 将对象转换为JSON字符串 + String json = objectMapper.writeValueAsString(v3xOrgEntity); + long memberId = v3xOrgEntity.getId(); + log.info("人员添加成功"+v3xOrgEntity.getName()+":"+v3xOrgEntity.getId()); + jsonObject.put("status","1"); + jsonObject.put("msg","创建成功:"+memberId); + jsonObject.put("data",json); + }else { + log.info("人员添加失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("status","2"); + jsonObject.put("msg","添加失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("data",""); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + + @Override + public ReceiveOrgMemberResponse updateMemberMain(JSONObject memberParam) throws BusinessException, ParseException, JsonProcessingException { + String memberId = memberParam.getString("id"); +// 根据ID查询人员信息 + V3xOrgMember member = orgManager.getMemberById(Long.parseLong(memberId)); + log.info("调用修改方法查询人员信息"+member); +// 判断是否修改名称 + if(StringUtil.isNotEmpty(memberParam.getString("name"))){ + member.setName(memberParam.getString("name")); + } +// 判断是否修改编号 + if(StringUtil.isNotEmpty(memberParam.getString("code"))){ + member.setCode(memberParam.getString("code")); + } +// 判断是否修改手机号 + if(StringUtil.isNotEmpty(memberParam.getString("telNumber"))){ + member.setTelNumber(memberParam.getString("telNumber")); + } +// 判断是否修改生日 + String birthday = memberParam.getString("birthday"); + if(StringUtil.isNotEmpty(birthday)){ + member.setProperty("birthday",sdf.parse(birthday)); + } +// 判断是否修改性别 + if(StringUtil.isNotEmpty(memberParam.getString("gender"))){ + member.setProperty("gender",memberParam.getString("gender")); + } +// 判断是否修改账号 + if(StringUtil.isNotEmpty(memberParam.getString("loginName"))){ + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(memberParam.getString("loginName")); + v3xOrgPrincipal.setMemberId(member.getId()); + v3xOrgPrincipal.setPassword("123456"); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + } +// 判断组织架构信息是否修改 + if(memberParam.getLongValue("orgLevelId")!=0){ + member.setOrgLevelId(memberParam.getLongValue("orgLevelId")); + } + if(memberParam.getLongValue("orgDepartmentId")!=0){ + member.setOrgDepartmentId(memberParam.getLongValue("orgDepartmentId")); + } + if(memberParam.getLongValue("orgPostId")!=0){ + member.setOrgPostId(memberParam.getLongValue("orgPostId")); + } + if(memberParam.getLongValue("orgAccountId")!=0){ + member.setOrgAccountId(memberParam.getLongValue("orgAccountId")); + } +// 判断是否修改人员状态 + if(StringUtil.isNotEmpty(memberParam.getString("state"))){ + member.setState(memberParam.getInteger("state")); + } +// 判断是否修改启用状态 + if(StringUtil.isNotEmpty(memberParam.getString("enabled"))){ + member.setEnabled(memberParam.getBooleanValue("enabled")); + } +// 判断是否修改删除状态 + if(StringUtil.isNotEmpty(memberParam.getString("isDeleted"))){ + log.info("对删除状态进行修改,修改值为"+memberParam.getBooleanValue("isDeleted")); + member.setIsDeleted(memberParam.getBooleanValue("isDeleted")); + } + // 排序号 +// member.setSortId(1L); + Set keys = memberParam.keySet(); + boolean hasUserKey = false; + for(String key : keys){ + if(key.contains("EXT_ATTR")){ + hasUserKey = true; + break; + } + } + + JSONArray secondPosts = memberParam.getJSONArray("second_post"); + if(secondPosts!=null){ + if(secondPosts.size()>0){ + List memberPosts = new ArrayList(); + for(int i = 0 ; i < secondPosts.size(); i++){ + JSONObject secondPost = secondPosts.getJSONObject(i); + MemberPost memberPost = new MemberPost(); + memberPost.setPostId(secondPost.getLongValue("postId")); + memberPost.setOrgAccountId(secondPost.getLongValue("orgAccountId")); + memberPost.setDepId(secondPost.getLongValue("deptId")); + memberPost.setMemberId(secondPost.getLongValue("memberId")); + memberPost.setType(OrgConstants.MemberPostType.Second); + memberPosts.add(memberPost); + } + member.setSecond_post(memberPosts); + } + } + + if(hasUserKey){ + log.info("修改值存在自定义字段,修改自定义字段值"); + AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(Long.parseLong(memberId)); + addressBook = setAddressBooks(addressBook,memberParam); + addressBookCustomerFieldInfoManager.updateAddressBook(addressBook); + } + log.info("修改前检查数据"+member.getEnabled()+"/"+member.getIsDeleted()+"/"+member.getCode()+"/"+member.getLoginName()); + OrganizationMessage mes = orgManagerDirect.updateMember(member); + log.info("修改后数据"+mes.getSuccessMsgs()); + JSONObject jsonObject = new JSONObject(); + log.info(String.valueOf(mes.isSuccess())); + if(mes.isSuccess()) { + List successMsgs = mes.getSuccessMsgs(); + OrganizationMessage.OrgMessage successMsg =successMsgs.get(0); + V3xOrgEntity v3xOrgEntity = successMsg.getEnt(); + log.info("人员修改成功"+v3xOrgEntity.getName()+":"+v3xOrgEntity.getId()); + jsonObject.put("status","1"); + jsonObject.put("msg","修改成功:"+memberId); + // 创建ObjectMapper实例 + ObjectMapper objectMapper = new ObjectMapper(); + // 将对象转换为JSON字符串 + String json = objectMapper.writeValueAsString(v3xOrgEntity); + jsonObject.put("data",json); + }else { + log.info("人员修改失败"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("status","2"); + jsonObject.put("msg","修改失败:"+mes.getErrorMsgInfos().get(0).getMsgInfo()); + jsonObject.put("data",""); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + + /** + * 查询人间接口 + * @param param + * { + * "type":"finance",finance法人,operation业务(必填) + * "orgAccount":"单位ID/单位名称",(必填) + * "orgDepartment":"部门ID/部门名称",(非必填,不填则默认查询单位下所有人员) + * "startDate":"2025-01-01 00:00:00",增量查询开始时间(非必填,不填则默认查询所有人员) + * "endDate":"2025-01-01 23:59"59"增量查询结束时间(非必填,不填则默认查询所有人员) + * "selfDefined":{自定义参数查询筛选。 + * "EXT_ATTR_33":"", + * "":"" + * } + * } + * @return + * { + * "id":"人员ID", + * "name":"人员名称", + * "code":""人员编码, + * "orgAccountId":"单位ID", + * "orgAccountName":"单位名称", + * "orgDepartmentId":"部门ID", + * "orgDepartmentName":"部门名称", + * "isEnabled":"是否启用", + * "telNumber":"手机号", + * "loginName":"登录名", + * "orgPostId":"岗位ID", + * "orgPostName":"岗位名称", + * "orgLevelId":"职务级别ID", + * "orgLevelName":"职务级别名称", + * "birthday":"出生日期", + * "gender":"性别",-1未指定,1男,2女 + * "hiredate":"入职时间" + * } + */ + public ReceiveOrgMemberResponse queryFHMemberMain (JSONObject param) throws SQLException, BusinessException { + log.info("查询人员参数"+param); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 客户单位下公司排除参数 + String excludeAccount = configVo.getParamVal(SyncConstants.excludeAccount.name()); + ThirdMemberBo thirdMemberBo = new ThirdMemberBo(); + String type = param.getString("type"); + String orgAccount = param.getString("orgAccount"); + String orgDepartment = param.getString("orgDepartment"); + String startDate = param.getString("startDate"); + String endDate = param.getString("endDate"); + JSONObject selfDefined = param.getJSONObject("getInvoiceTypeParam"); + JSONArray members = new JSONArray(); +// 判断单位是否允许被查询 + if("otherdata".equals(orgAccount)){ +// 进行其他异常数据的处理 + List> otherMembers = archiveDao.findMemberOtherData(); + for(Map otherMember :otherMembers){ + JSONObject jsonObject = thirdMemberBo.operationMember(otherMember); + members.add(jsonObject); + } + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",members); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + }else{ + String orgAccountId = srcAccountDao.getAccountId(orgAccount); + log.info("检查根据参数获取单位ID"+orgAccountId); + V3xOrgAccount paramAccount = orgManager.getAccountById(Long.parseLong(orgAccountId)); + if(paramAccount==null){ + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",new JSONObject()); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + }else{ + String paramAccountPath = paramAccount.getPath(); + log.info("当前单位路径为"+paramAccountPath); + if("finance".equals(type)){ +// 封装法人架构 + log.info("当前查询为法人架构"); + if(ParamUtil.isClientAccount(paramAccountPath)){ + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",new JSONObject()); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } + List> memberList = srcMemberDao.queryMembers(orgAccount,orgDepartment,startDate,endDate); + log.info("根据参数查询符合要求人员"+memberList.size()); +// 根据参数查询人员ID信息 + for (Map memberMap : memberList) { +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = memberMap.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); + log.info("遍历所有人员执行人员ID为"+v3xOrgMember.getId()+v3xOrgMember.getName()+v3xOrgMember.getEnabled()); + JSONObject member = thirdMemberBo.financeMember(v3xOrgMember); + members.add(member); + } + }else if ("operation".equals(type)){ + log.info("当前查询为业务架构"); +// 封装业务架构 + if(ParamUtil.isClientAccount(paramAccountPath) || (!excludeAccount.contains(orgAccount) && paramAccountPath.startsWith("00000017"))){ + log.info("查询单位为客户单位下,返回空"); + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",new JSONObject()); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } +// 查询集团组织架构信息,封装JSON + List> memberList = srcMemberDao.queryFormMembers(orgAccount,orgDepartment,startDate,endDate); + log.info("根据参数查询符合要求人员"+memberList.size()); +// 根据参数查询人员ID信息 + for (Map memberMap : memberList) { +// 遍历人员ID信息,根据ID查询人员信息 +// String memberId = memberMap.get("id").toString(); +// V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); +// + Map member = archiveDao.findMemberByFormmainId(memberMap.get("id").toString()); +// 根据人员ID获取档案表人员信息 + log.info("遍历所有人员执行人员ID为"+member.get("id")+member.get("name")+member.get("is_enable")); + JSONObject v3xmember = thirdMemberBo.operationMember(member); +// JSONObject v3xmember = thirdMemberBo.operationMember(v3xOrgMember); + if(v3xmember.containsKey("id")){ + if(StringUtil.isNotEmpty(v3xmember.getString("id"))){ +// if(StringUtil.isNotEmpty(v3xmember.getString("orgDepartmentId"))){ + members.add(v3xmember); +// } + } + } + } +// 查询业代信息,封装成JSON + if("营销门户".equals(paramAccount.getName())){ +// 查询业代人员 + List> serviceAgentMemberList = srcMemberDao.queryServiceAgentMembers(startDate,endDate); + for(Map serviceAgentMember : serviceAgentMemberList){ +// 封装业代人员 + JSONObject member = thirdMemberBo.operationServiceAgentMember(serviceAgentMember); + if(member.containsKey("id")){ + if(StringUtil.isNotEmpty(member.getString("id"))){ +// if(StringUtil.isNotEmpty(member.getString("orgDepartmentId"))){ + members.add(member); +// } + } + } + } +// 查询客户信息,封装JSON +//// 获取当前客户名称所在部门 + V3xOrgAccount clientFirstOrderAccount = orgManager.getAccountById(-1920238237989386049l);//客户 +//// 查询客户下一层单位ID列表 + List accountIds = srcAccountDao.getSubordinateAccountByPath(clientFirstOrderAccount.getPath());//经销商列表 + for(String accountId : accountIds){ +// 获取经销商单位信息级别单位信息 + V3xOrgAccount clientAccount = orgManager.getAccountById(Long.parseLong(accountId));//经销商 +// 获取经销商单位下的经销商单位列表信息 + List clientAccountIds = srcAccountDao.getSubordinateAccountByPath(clientAccount.getPath()); + for(String clientAccountId :clientAccountIds){ +// 查询对应经销商单位下所有人员信息 + List> orgMembers = srcMemberDao.queryMembers(clientAccountId,orgDepartment,startDate,endDate); + for(Map orgMember : orgMembers){ +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = orgMember.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); +// 获取人员组织机构信息后需要根据人员ID获取人员档案信息。 + Map memberArchive = archiveDao.getMemberArchiveById(v3xOrgMember.getId()); + JSONObject member = thirdMemberBo.operationMarketingFHMember(v3xOrgMember,memberArchive); + if(member.containsKey("id")){ + if(StringUtil.isNotEmpty(member.getString("id"))){ +// if(StringUtil.isNotEmpty(member.getString("orgDepartmentId"))){ + members.add(member); +// } + } + } + } +// 获取经销商单位下销售部信息 + V3xOrgAccount salesAccount = orgManager.getAccountById(Long.parseLong(clientAccountId));//26家销售公司 + List salesAccountIds = srcAccountDao.getSubordinateAccountByPath(salesAccount.getPath());//26家销售公司销售部列表 + for(String salesAccountId : salesAccountIds){ + List> salesOrgMembers = srcMemberDao.queryMembers(salesAccountId,orgDepartment,startDate,endDate);//26家销售公司销售部 + for(Map salesOrgMember : salesOrgMembers){ +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = salesOrgMember.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); + Map memberArchive = archiveDao.getMemberArchiveById(v3xOrgMember.getId()); +// V3xOrgPost v3xOrgPost = orgManager.getPostById(v3xOrgMember.getOrgPostId()); +// 获取人员组织机构信息后需要根据人员ID获取人员档案信息。 + Map clientTable = new HashMap<>(); + V3xOrgDepartment dept = orgManager.getDepartmentById(v3xOrgMember.getOrgDepartmentId()); + if(dept!=null){ + clientTable = srcMemberDao.queryClientByName(dept.getName()); + } + System.out.println(clientTable+"----"+memberArchive); + clientTable.put("id",memberArchive.get("member_id")); + clientTable.put("telnumber",memberArchive.get("telnumber")); + JSONObject member = thirdMemberBo.operationClientFHMember(v3xOrgMember,clientTable); + if(member.containsKey("id")){ + if(StringUtil.isNotEmpty(member.getString("id"))){ +// if(StringUtil.isNotEmpty(member.getString("orgDepartmentId"))){ + members.add(member); +// } + } + } + } + } + } + } + } + } + log.info("总人数"+members.size()); + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",members); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } + } + } + + @Override + public ReceiveOrgMemberResponse queryMemberMain(JSONObject param) throws BusinessException, SQLException { + log.info("查询人员参数"+param); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 客户单位下公司排除参数 + String excludeAccount = configVo.getParamVal(SyncConstants.excludeAccount.name()); + ThirdMemberBo thirdMemberBo = new ThirdMemberBo(); + String type = param.getString("type"); + String orgAccount = param.getString("orgAccount"); + String orgDepartment = param.getString("orgDepartment"); + String startDate = param.getString("startDate"); + String endDate = param.getString("endDate"); + JSONObject selfDefined = param.getJSONObject("getInvoiceTypeParam"); + JSONArray members = new JSONArray(); +// 判断单位是否允许被查询 + String orgAccountId = srcAccountDao.getAccountId(orgAccount); + log.info("检查根据参数获取单位ID"+orgAccountId); + V3xOrgAccount paramAccount = orgManager.getAccountById(Long.parseLong(orgAccountId)); + if(paramAccount==null){ + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",new JSONObject()); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + }else{ + String paramAccountPath = paramAccount.getPath(); + log.info("当前单位路径为"+paramAccountPath); + if("finance".equals(type)){ +// 封装法人架构 + log.info("当前查询为法人架构"); + if(ParamUtil.isClientAccount(paramAccountPath)){ + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",new JSONObject()); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } + List> memberList = srcMemberDao.queryMembers(orgAccount,orgDepartment,startDate,endDate); + log.info("根据参数查询符合要求人员"+memberList.size()); +// 根据参数查询人员ID信息 + for (Map memberMap : memberList) { +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = memberMap.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); + log.info("遍历所有人员执行人员ID为"+v3xOrgMember.getId()+v3xOrgMember.getName()+v3xOrgMember.getEnabled()); + JSONObject member = thirdMemberBo.financeMember(v3xOrgMember); + members.add(member); + } + }else if ("operation".equals(type)){ + log.info("当前查询为业务架构"); +// 封装业务架构 + if(ParamUtil.isClientAccount(paramAccountPath) || (!excludeAccount.contains(orgAccount) && paramAccountPath.startsWith("00000017"))){ + log.info("查询单位为客户单位下,返回空"); + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",new JSONObject()); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } +// 查询集团组织架构信息,封装JSON + List> memberList = srcMemberDao.queryMembers(orgAccount,orgDepartment,startDate,endDate); + log.info("根据参数查询符合要求人员"+memberList.size()); +// 根据参数查询人员ID信息 + for (Map memberMap : memberList) { +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = memberMap.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); + log.info("遍历所有人员执行人员ID为"+v3xOrgMember.getId()+v3xOrgMember.getName()+v3xOrgMember.getEnabled()); + JSONObject member = thirdMemberBo.operationMember(v3xOrgMember); + members.add(member); + } +// 查询业代信息,封装成JSON + if("营销门户".equals(paramAccount.getName())){ + List> serviceAgentMemberList = srcMemberDao.queryServiceAgentMembers(startDate,endDate); + log.info("查询业代人员,执行业代人员数据查询,业代数据查询数量"+serviceAgentMemberList.size()); + for(Map serviceAgentMember : serviceAgentMemberList){ + JSONObject member = thirdMemberBo.operationServiceAgentMember(serviceAgentMember); + members.add(member); + } +// 查询客户信息,封装JSON +// 获取当前客户名称所在部门 + V3xOrgAccount clientFirstOrderAccount = orgManager.getAccountById(-1920238237989386049l);//客户 +// 查询客户下一层单位ID列表 + List accountIds = srcAccountDao.getSubordinateAccountByPath(clientFirstOrderAccount.getPath());//经销商列表 + for(String accountId : accountIds){ +// 获取经销商单位信息级别单位信息 + V3xOrgAccount clientAccount = orgManager.getAccountById(Long.parseLong(accountId));//经销商 +// 获取经销商单位下的经销商单位列表信息 + List clientAccountIds = srcAccountDao.getSubordinateAccountByPath(clientAccount.getPath());//26家销售公司列表 + for(String clientAccountId :clientAccountIds){ +// 查询对应经销商单位下所有人员信息 + List> orgMembers = srcMemberDao.queryMembers(clientAccountId,orgDepartment,startDate,endDate); + for(Map orgMember : orgMembers){ +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = orgMember.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); +// 获取人员组织机构信息后需要根据人员ID获取人员档案信息。 + Map memberArchive = archiveDao.getMemberArchiveById(v3xOrgMember.getId()); + JSONObject member = thirdMemberBo.operationMarketingMember(v3xOrgMember,memberArchive); + members.add(member); + } +// 获取经销商单位下销售部信息 + V3xOrgAccount salesAccount = orgManager.getAccountById(Long.parseLong(clientAccountId));//26家销售公司 + List salesAccountIds = srcAccountDao.getSubordinateAccountByPath(salesAccount.getPath());//26家销售公司销售部列表 + for(String salesAccountId : salesAccountIds){ + List> salesOrgMembers = srcMemberDao.queryMembers(salesAccountId,orgDepartment,startDate,endDate);//26家销售公司销售部 + for(Map salesOrgMember : salesOrgMembers){ +// 遍历人员ID信息,根据ID查询人员信息 + String memberId = salesOrgMember.get("id").toString(); + V3xOrgMember v3xOrgMember = orgManager.getMemberById(Long.parseLong(memberId)); +// V3xOrgPost v3xOrgPost = orgManager.getPostById(v3xOrgMember.getOrgPostId()); +// 获取人员组织机构信息后需要根据人员ID获取人员档案信息。 + Map clientTable = new HashMap<>(); + V3xOrgDepartment dept = orgManager.getDepartmentById(v3xOrgMember.getOrgDepartmentId()); + if(dept!=null){ + clientTable = srcMemberDao.queryClientByName(dept.getName()); + } + JSONObject member = thirdMemberBo.operationClientMember(v3xOrgMember,clientTable); + members.add(member); + } + } + } + } + } + } + log.info("总人数"+members.size()); + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data",members); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } + + } + + private AddressBook setAddressBooks(AddressBook addressBook, JSONObject memberParam) throws ParseException { + for (Map.Entry entry : memberParam.entrySet()) { + switch (entry.getKey()){ + case "EXT_ATTR_1":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr1(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_2":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr2(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_3":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr3(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_4":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr4(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_5":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr5(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_6":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr6(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_7":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr7(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_8":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr8(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_9":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr9(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_10":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr10(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_11":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr11(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_12":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr12(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_13":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr13(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_14":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr14(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_15":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr15(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_16":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr16(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_17":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr17(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_18":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr18(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_19":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr19(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_20":{ + if( entry.getValue() instanceof Double){ + addressBook.setExtAttr20(Double.parseDouble(entry.getValue().toString())); + } + break; + }case "EXT_ATTR_21":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr21(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_22":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr22(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_23":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr23(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_24":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr24(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_25":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr25(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_26":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr26(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_27":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr27(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_28":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr28(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_29":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr29(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_30":{ + if(entry.getValue()!=null){ + if(isValidDate(entry.getValue().toString())){ + addressBook.setExtAttr30(sdf.parse(entry.getValue().toString())); + } + } + break; + }case "EXT_ATTR_31":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_31"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr31(enumItemId); + } + break; + }case "EXT_ATTR_32":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_32"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr32(enumItemId); + } + break; + }case "EXT_ATTR_33":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_33"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr33(enumItemId); + } + break; + }case "EXT_ATTR_34":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_34"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr34(enumItemId); + } + break; + }case "EXT_ATTR_35":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_35"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr35(enumItemId); + } + break; + }case "EXT_ATTR_36":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_36"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr36(enumItemId); + } + break; + }case "EXT_ATTR_37":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_37"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr37(enumItemId); + } + break; + }case "EXT_ATTR_38":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_38"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr38(enumItemId); + } + break; + }case "EXT_ATTR_39":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_39"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr39(enumItemId); + } + break; + }case "EXT_ATTR_40":{ + if(entry.getValue()!=null){ + String enumId = srcEnumDao.getEnumByExtAttr("EXT_ATTR_40"); + String enumItemId = srcEnumDao.getEnumItemByRefEnumIdValue(enumId,entry.getValue().toString()); + addressBook.setExtAttr40(enumItemId); + } + break; + }case "EXT_ATTR_41":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr41(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_42":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr42(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_43":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr43(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_44":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr44(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_45":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr45(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_46":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr46(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_47":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr47(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_48":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr48(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_49":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr49(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_50":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr50(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_51":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr51(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_52":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr52(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_53":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr53(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_54":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr54(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_55":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr55(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_56":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr56(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_57":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr57(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_58":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr58(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_59":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr59(entry.getValue().toString()); + } + break; + }case "EXT_ATTR_60":{ + if(entry.getValue()!=null){ + addressBook.setExtAttr60(entry.getValue().toString()); + } + break; + } + + } + } + return addressBook; + } + + + + public static boolean isValidDate(String dateStr) { + List formats = Arrays.asList( + "yyyy-MM-dd", "dd/MM/yyyy", "MM/dd/yyyy", + "yyyyMMdd", "yyyy年MM月dd日", "dd-MMM-yyyy" + ); + + for (String format : formats) { + try { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); + LocalDate.parse(dateStr, formatter); + return true; + } catch (DateTimeParseException e) { + // 继续尝试下一个格式 + } + } + return false; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveSrcCustomerServiceImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveSrcCustomerServiceImpl.java new file mode 100644 index 0000000..3bcf833 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/ReceiveSrcCustomerServiceImpl.java @@ -0,0 +1,61 @@ +package com.seeyon.apps.src_mainorganization.service.impl; + +import cn.hutool.log.Log; +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_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.bo.ThirdCustomerBo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_mainorganization.dao.IArchiveDao; +import com.seeyon.apps.src_mainorganization.service.IReceiveSrcCustomerService; +import com.seeyon.ctp.common.exceptions.BusinessException; + +import javax.inject.Inject; +import java.util.List; +import java.util.Map; + +public class ReceiveSrcCustomerServiceImpl implements IReceiveSrcCustomerService { + + private static Log log = Log.get(ReceiveOrgMemberServiceImpl.class); + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + + @Inject + private ICstConfigApi cstConfigApi; + @Inject + private IArchiveDao archiveDao; + + + @Override + public ReceiveOrgMemberResponse queryCustomerMain(JSONObject param) { + log.info("查询客户参数"+param); + ConfigVo configVo = this.cstConfigApi.getConfig(this.getPluginId()); +// 查询客户信息列表 + JSONArray customers = new JSONArray(); + try{ + List> allCustomers = archiveDao.getAllCustomer(); + for (Map customer: allCustomers ) { + ThirdCustomerBo thirdCustomerBo = new ThirdCustomerBo(customer); + customers.add(thirdCustomerBo.toCustomerJSON()); + } + } catch (BusinessException e) { + e.printStackTrace(); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("status","2"); + jsonObject.put("msg","接口调用异常"); + jsonObject.put("data",e); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } + JSONObject jsonObject = new JSONObject(); + jsonObject.put("status","1"); + jsonObject.put("msg","成功"); + jsonObject.put("data",customers); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(jsonObject); + return receiveOrgMemberResponse; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/SrcMemberFormTableServiceImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/SrcMemberFormTableServiceImpl.java new file mode 100644 index 0000000..379eb3b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/service/impl/SrcMemberFormTableServiceImpl.java @@ -0,0 +1,139 @@ +package com.seeyon.apps.src_mainorganization.service.impl; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.addressbook.manager.AddressBookCustomerFieldInfoManager; +import com.seeyon.apps.addressbook.po.AddressBook; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.dao.ISrcFormTableDao; +import com.seeyon.apps.src_mainorganization.service.ISrcMemberFormTableService; +import com.seeyon.apps.src_mainorganization.util.ExcelUtils; +import com.seeyon.apps.src_mainorganization.util.FormExportUtil; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.*; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.FormFactory; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import www.seeyon.com.utils.StringUtil; + +import javax.inject.Inject; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class SrcMemberFormTableServiceImpl implements ISrcMemberFormTableService { + + private static final Log log = Log.get(SrcMemberFormTableServiceImpl.class); + + @Inject + private ISrcFormTableDao srcFormTableDao; + @Inject + private OrgManager orgManager; + @Inject + private AddressBookCustomerFieldInfoManager addressBookCustomerFieldInfoManager; + @Inject + private FormFactory formFactory; + + @Override + public ReceiveOrgMemberResponse saveMemberFormTableMain() { + FormExportUtil formExportUtil = new FormExportUtil(); +// 通过dao查询当前系统中所有存在人员组织架构信息,但是没有人员档案表信息的数据。 + List memberDifferenceIds = srcFormTableDao.getMemberDifferenceIds(); + log.info("查询需要生成的人员条数"+memberDifferenceIds.size()); + List> excelDatas = new ArrayList<>(); + for(String memberDifferenceId:memberDifferenceIds){ + FormExport formExport = new FormExport(); +// 获取查询到的人员ID信息,根据人员ID查询人员对象。 + long memberId = Long.parseLong(memberDifferenceId); + Map mainTableData = new HashMap<>(); + Map excelData = new HashMap<>(); + try { +// 根据人员对象封装档案表数据对象。 + V3xOrgMember v3xOrgMember = orgManager.getMemberById(memberId); + log.info("根据ID查询人员信息"+v3xOrgMember.getId()+"-"+v3xOrgMember.getLoginName()+"-"+v3xOrgMember.getTelNumber()); +// 查询对应单位信息 + V3xOrgAccount v3xOrgAccount = orgManager.getAccountById(v3xOrgMember.getOrgAccountId()); + log.info(v3xOrgAccount.getName()); +// 查询对应部门信息 + V3xOrgDepartment v3xOrgDepartment = orgManager.getDepartmentById(v3xOrgMember.getOrgDepartmentId()); + log.info(v3xOrgDepartment.getName()); +// 查询对应岗位信息 + V3xOrgPost v3xOrgPost = orgManager.getPostById(v3xOrgMember.getOrgPostId()); + log.info(v3xOrgPost.getName()); +// 查询对应职务级别信息 + V3xOrgLevel v3xOrgLevel = orgManager.getLevelById(v3xOrgMember.getOrgLevelId()); + log.info(v3xOrgLevel.getName()); +// 获取人员主数据信息 + AddressBook addressBook = addressBookCustomerFieldInfoManager.getByMemberId(memberId); + log.info("自定义主数据"+addressBook); + mainTableData.put("姓名",v3xOrgMember.getId().toString()); + mainTableData.put("单位",v3xOrgAccount.getId().toString()); + mainTableData.put("部门",v3xOrgDepartment.getId().toString()); + mainTableData.put("岗位",v3xOrgPost.getId().toString()); + mainTableData.put("职务级别",v3xOrgLevel.getId().toString()); + mainTableData.put("手机号",v3xOrgMember.getTelNumber()); + if(addressBook!=null){ + String extAttr1 = addressBook.getExtAttr1(); + log.info("是否存在身份证号信息"+extAttr1); + if(StringUtil.isNotEmpty(extAttr1)){ + mainTableData.put("身份证号码",extAttr1); + excelData.put("身份证号码",extAttr1); + }else{ + mainTableData.put("身份证号码",""); + excelData.put("身份证号码",""); + } + }else{ + mainTableData.put("身份证号码",""); + excelData.put("身份证号码",""); + } + mainTableData.put("员工状态","-8568095563672566586"); + log.info("封装excel数据"); + excelData.put("ID",v3xOrgMember.getId().toString()); + excelData.put("姓名",v3xOrgMember.getName()); + excelData.put("单位",v3xOrgAccount.getName()); + excelData.put("部门",v3xOrgDepartment.getName()); + excelData.put("岗位",v3xOrgPost.getName()); + excelData.put("职务级别",v3xOrgLevel.getName()); + excelData.put("手机号",v3xOrgMember.getTelNumber()); +// 通过人员档案表数据对象调用档案表创建方法生成人员档案表信息 + List valueExports = formExportUtil.setFormValue(mainTableData); + formExport.setValues(valueExports); + formFactory.importBusinessFormData("demo2", "ygda", + formExport, new String[] {}); + } catch (BusinessException e) { + e.printStackTrace(); + log.info("人员数据查询失败。"); + } + catch (ServiceException e) { + e.printStackTrace(); + log.info("档案表创建失败。"); + } +// 将生成档案表的信息生成保存到输出对象中 + excelDatas.add(excelData); + } +// 创建数组表头数据集 + String[] headerData = {"ID","姓名","单位","部门","岗位","职务级别","手机号","身份证号码"}; + String str = SystemEnvironment.getApplicationFolder(); + String path = str + "/memberExcel/member_table.xlsx"; + String sheetName = "人员信息"; + try { + ExcelUtils.generateExcel(headerData,excelDatas,path,sheetName); + log.info("Excel文件生成成功!"); + } catch (IOException e) { + log.info("生成excel文件失败,请检查。。。"); + e.printStackTrace(); + } +// 将输出对象中的信息创建excel保存到服务器 + JSONObject res = new JSONObject(); + res.put("status","1"); + res.put("msg","成功"); + res.put("data","创建成功"); + ReceiveOrgMemberResponse receiveOrgMemberResponse = new ReceiveOrgMemberResponse(res); + return receiveOrgMemberResponse; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/sync/OrganizationOrgSyncApi.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/sync/OrganizationOrgSyncApi.java new file mode 100644 index 0000000..20e16d8 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/sync/OrganizationOrgSyncApi.java @@ -0,0 +1,268 @@ +package com.seeyon.apps.src_mainorganization.sync; + +import cn.hutool.log.Log; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.ext.thirdorg.api.AThirdOrgSyncApi; +import com.seeyon.apps.ext.thirdorg.vo.SyncResult; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgDingdingSyncServer; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgFlowSyncServer; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgGroupSyncServer; +import com.seeyon.apps.src_mainorganization.server.OrganizationOrgSyncServer; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.*; + +import javax.inject.Inject; +import java.sql.SQLException; +import java.util.*; +import java.util.stream.Collectors; + +public class OrganizationOrgSyncApi extends AThirdOrgSyncApi { + + private static Log log = Log.get(OrganizationOrgSyncApi.class); + public OrganizationOrgSyncApi() { + } + @Inject + private OrganizationOrgSyncServer organizationOrgSyncServer; + + @Inject + private OrganizationOrgFlowSyncServer organizationOrgFlowSyncServer; + + @Inject + private OrganizationOrgGroupSyncServer organizationOrgGroupSyncServer; + +// @Inject +// private OrganizationOrgDingdingSyncServer organizationOrgDingdingSyncServer; + + /** + * 单位修改实时同步 + * @param list + * @return + */ + public List syncBatchAccount(List list) { + log.info("进入单位同步方法"); + Map errorMap = new HashMap<>(); + try{ + log.info("进行客户服务平台单位同步数据处理"); + Map errorFvMap = organizationOrgSyncServer.fvSyncBatchAccount(list); + errorMap.putAll(errorFvMap); + }catch (Exception e){ + e.printStackTrace(); + } + try{ + log.info("进行流程平台单位同步数据处理"); + Map errorFlowMap = organizationOrgFlowSyncServer.flowSyncBatchAccount(list); + errorMap.putAll(errorFlowMap); + }catch (Exception e){ + e.printStackTrace(); + } + try{ + log.info("进行集团协同平台单位同步数据处理"); + Map errorGroupMap = organizationOrgGroupSyncServer.groupSyncBatchAccount(list); + errorMap.putAll(errorGroupMap); + }catch (Exception e){ + e.printStackTrace(); + } +// log.info("进行钉钉系统单位同步数据处理"); +// Map errorDingdingMap = organizationOrgDingdingSyncServer.dingdingSyncBatchAccount(list); +// errorMap.putAll(errorDingdingMap); + + List syncResults = list.stream().map(account -> { + SyncResult syncResult = new SyncResult(account); + if(errorMap.containsKey(account.getId() + "")) { + syncResult.setSuccess(false); + syncResult.setMessage(errorMap.get(account.getId() + "")); + } else { + syncResult.setSuccess(true); + syncResult.setMessage("同步成功"); + } + return syncResult; + }).collect(Collectors.toList()); + return syncResults; + } + + /** + * 部门修改实时同步 + * @param list + * @return + */ + public List syncBatchDepartment(List list) { + log.info("进入部门同步方法"); + Map errorMap = new HashMap<>(); + try{ + log.info("进行客户服务平台部门同步数据处理"); + Map errorFvMap = organizationOrgSyncServer.fvSyncBatchDepartment(list); + errorMap.putAll(errorFvMap); + }catch (SQLException e) { + e.printStackTrace(); + } + try{ + log.info("进行流程平台部门同步数据处理"); + Map errorFlowMap = organizationOrgFlowSyncServer.flowSyncBatchDepartment(list); + errorMap.putAll(errorFlowMap); + } catch (BusinessException e) { + e.printStackTrace(); + } + try{ + log.info("进行集团协同平台部门同步数据处理"); + Map errorGroupMap = organizationOrgGroupSyncServer.groupSyncBatchDept(list); + errorMap.putAll(errorGroupMap); + } catch (BusinessException e) { + e.printStackTrace(); + } +// log.info("进行钉钉系统部门同步数据处理"); +// Map errorDingdingMap = organizationOrgDingdingSyncServer.dingdingSyncBatchDept(list); +// errorMap.putAll(errorDingdingMap); + + List syncResults = list.stream().map(department -> { + SyncResult syncResult = new SyncResult(department); + if(errorMap.containsKey(department.getId() + "")) { + syncResult.setSuccess(false); + syncResult.setMessage(errorMap.get(department.getId() + "")); + } else { + syncResult.setSuccess(true); + syncResult.setMessage("同步成功"); + } + return syncResult; + }).collect(Collectors.toList()); + return syncResults; + } + + /** + * 岗位修改实时同步 + * @param list + * @return + */ + public List syncBatchPost(List list) { + log.info("进入岗位同步方法"); + Map errorMap = new HashMap<>(); + try{ + log.info("进行客户服务平台岗位同步数据处理"); + Map errorFvMap = organizationOrgSyncServer.fvSyncBatchPost(list); + errorMap.putAll(errorFvMap); + }catch (Exception e){ + e.printStackTrace(); + } + try{ + log.info("进行流程平台岗位同步数据处理"); + Map errorFlowMap = organizationOrgFlowSyncServer.flowSyncBatchPost(list); + errorMap.putAll(errorFlowMap); + }catch (Exception e){ + + } + try{ + log.info("进行集团协同平台岗位同步数据处理"); + Map errorGroupMap = organizationOrgGroupSyncServer.groupSyncBatchPost(list); + errorMap.putAll(errorGroupMap); + }catch (Exception e){ + e.printStackTrace(); + } + List syncResults = list.stream().map(post -> { + SyncResult syncResult = new SyncResult(post); + if(errorMap.containsKey(post.getId() + "")) { + syncResult.setSuccess(false); + syncResult.setMessage(errorMap.get(post.getId() + "")); + } else { + syncResult.setSuccess(true); + syncResult.setMessage("同步成功"); + } + return syncResult; + }).collect(Collectors.toList()); + return syncResults; + + } + + /** + *职务级别修改实时同步 + * @param list + * @return + */ + public List syncBatchLevel(List list) { + log.info("进入职务级别同步方法"); + Map errorMap = new HashMap<>(); + try{ + log.info("进行流程平台职务级别同步数据处理"); + Map errorFlowMap = organizationOrgFlowSyncServer.flowSyncBatchLevel(list); + errorMap.putAll(errorFlowMap); + }catch (Exception e){ + e.printStackTrace(); + } + try{ + log.info("进行集团协同平台职务级别同步数据处理"); + Map errorGroupMap = organizationOrgGroupSyncServer.groupSyncBatchLevel(list); + errorMap.putAll(errorGroupMap); + }catch (Exception e){ + e.printStackTrace(); + } + errorMap.putAll(errorMap); + List syncResults = list.stream().map(level -> { + SyncResult syncResult = new SyncResult(level); + if(errorMap.containsKey(level.getId() + "")) { + syncResult.setSuccess(false); + syncResult.setMessage(errorMap.get(level.getId() + "")); + } else { + syncResult.setSuccess(true); + syncResult.setMessage("同步成功"); + } + return syncResult; + }).collect(Collectors.toList()); + return syncResults; + } + + /** + * 人员修改实时同步 + * @param list + * @return + */ + public List syncBatchMember(List list) { + log.info("进入人员同步方法"); + Map errorMap = new HashMap<>(); + try{ + log.info("进行客户服务平台人员同步数据处理"); + Map errorFvMap = organizationOrgSyncServer.fvSyncBatchMember(list); + errorMap.putAll(errorFvMap); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (BusinessException e) { + e.printStackTrace(); + } + try{ + log.info("进行流程平台人员同步数据处理"); + Map errorFlowMap = organizationOrgFlowSyncServer.flowSyncBatchMember(list); + errorMap.putAll(errorFlowMap); + } catch (InterruptedException e) { + e.printStackTrace(); + } + try{ + log.info("进行集团协同平台人员同步数据处理"); + Map errorGroupMap = organizationOrgGroupSyncServer.groupSyncBatchMember(list); + errorMap.putAll(errorGroupMap); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (BusinessException e) { + e.printStackTrace(); + } + +// log.info("进行协同平台人员同步数据处理"); +// Map errorDingdingMap = organizationOrgDingdingSyncServer.dingdingSyncBatchMember(list); +// errorMap.putAll(errorDingdingMap); + + List syncResults = (List)list.stream().map((member) -> { + SyncResult syncResult = new SyncResult(member); + if (errorMap.containsKey(member.getId() + "")) { + syncResult.setSuccess(false); + syncResult.setMessage((String)errorMap.get(member.getId() + "")); + } else { + syncResult.setSuccess(true); + syncResult.setMessage("同步成功"); + } + + return syncResult; + }).collect(Collectors.toList()); + return syncResults; + } + + public String getPluginId() { + return SyncConstants.getPluginId(); + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/DingdingProtUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/DingdingProtUtil.java new file mode 100644 index 0000000..e723fef --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/DingdingProtUtil.java @@ -0,0 +1,317 @@ +package com.seeyon.apps.src_mainorganization.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.dingtalk.api.DefaultDingTalkClient; +import com.dingtalk.api.DingTalkClient; +import com.dingtalk.api.request.*; +import com.dingtalk.api.response.*; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.taobao.api.ApiException; +//import com.taobao.api.ApiException; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Date; +import java.util.Map; + +public class DingdingProtUtil { + +// 获取钉钉token验证信息 + public static String getToken(String appkey,String appsecret) throws RuntimeException, ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken"); + OapiGettokenRequest request = new OapiGettokenRequest(); + request.setAppkey(appkey); + request.setAppsecret(appsecret); + request.setHttpMethod("GET"); + OapiGettokenResponse response = client.execute(request); + JSONObject jsonObject = JSON.parseObject(response.getBody()); + String token = jsonObject.getString("access_token"); + return token; + } + +// 调用钉钉部门新增接口 + public static String departmentCreate(OapiV2DepartmentCreateRequest req,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/create"); + OapiV2DepartmentCreateResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + +// 调用钉钉部门修改接口 + public static String departmentUpdate(OapiV2DepartmentUpdateRequest req, String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/update"); + OapiV2DepartmentUpdateResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + +// 调用钉钉部门删除接口 + public static String departmentDelete(long deptId,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/delete"); + OapiV2DepartmentDeleteRequest req = new OapiV2DepartmentDeleteRequest(); + req.setDeptId(deptId); + OapiV2DepartmentDeleteResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + +// 调用钉钉人员新增接口 + public static String memberCreate(OapiV2UserCreateRequest req,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/create"); + OapiV2UserCreateResponse rsp = client.execute(req, accessToken); + System.out.println("新增"+rsp.getBody()); + return rsp.getBody(); + } + +// 封装参数,根据人员对象生成钉钉人员新增接口参数 +// public static OapiV2UserCreateRequest getMemberCreateParam(V3xOrgMember v3xOrgMember, Map memberMap){ +// OapiV2UserCreateRequest req = new OapiV2UserCreateRequest(); +//// 钉钉人员ID +// req.setUserid(v3xOrgMember.getId()+""); +//// 人员名称 +// req.setName(v3xOrgMember.getName()); +//// 人员手机号,钉钉内唯一值 +//// req.setMobile(v3xOrgMember.getTelNumber()); +// req.setMobile(memberMap.get("telNumber")); +//// 职位 +//// req.setTitle(""); +//// 邮箱 +//// req.setEmail(""); +//// 所属部门ID +// req.setDeptIdList(memberMap.get("deptId")); +//// 工号 +// req.setJobNumber(""); +//// 入职时间,时间戳 +// Date hiredate = v3xOrgMember.getHiredate(); +// if(hiredate!=null){ +// req.setHiredDate(hiredate.getTime()); +// } +// return req; +// } + + // 封装参数,根据人员对象生成钉钉人员新增接口参数 + public static OapiV2UserCreateRequest getMemberCreateParam(Map serviceBroker, Map memberMap){ + OapiV2UserCreateRequest req = new OapiV2UserCreateRequest(); +// 钉钉人员ID + req.setUserid(serviceBroker.get("id")+""); +// 人员名称 + req.setName(serviceBroker.get("name").toString()); +// 人员手机号,钉钉内唯一值 +// req.setMobile(v3xOrgMember.getTelNumber()); + req.setMobile(memberMap.get("telNumber")); +// 职位 +// req.setTitle(""); +// 邮箱 +// req.setEmail(""); +// 所属部门ID + req.setDeptIdList(memberMap.get("deptId")); +// 工号 + req.setJobNumber(""); +// 入职时间,时间戳 + if(serviceBroker.get("hiredate")!=null){ + req.setHiredDate(((Date)serviceBroker.get("hiredate")).getTime()); + } + return req; + } + + +// 调用钉钉人员修改接口 + public static String memberUpdate(OapiV2UserUpdateRequest req, String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/update"); + OapiV2UserUpdateResponse rsp = client.execute(req, accessToken); + System.out.println("修改"+rsp.getBody()); + return rsp.getBody(); + } + +// 封装参数,根据人员对象生成钉钉人员修改接口参数 +// public static OapiV2UserUpdateRequest getMemberUpdateParam(V3xOrgMember v3xOrgMember, Map memberMap){ +// OapiV2UserUpdateRequest req = new OapiV2UserUpdateRequest(); +//// 钉钉用户ID +// req.setUserid(v3xOrgMember.getId()+""); +//// 人员名称 +// req.setName(v3xOrgMember.getName()); +//// 工号 +// req.setJobNumber(v3xOrgMember.getCode()); +//// 职位 +// req.setTitle(""); +//// 邮箱 +// req.setEmail(""); +// req.setDeptIdList(memberMap.get("deptId")); +// req.setLanguage("zh_CN"); +//// 强制更新的字段 +//// req.setForceUpdateFields("manager_userid"); +// return req; +// } + + // 封装参数,根据人员对象生成钉钉人员修改接口参数 + public static OapiV2UserUpdateRequest getMemberUpdateParam(Map serviceBroker, Map memberMap){ + OapiV2UserUpdateRequest req = new OapiV2UserUpdateRequest(); +// 钉钉用户ID + req.setUserid(serviceBroker.get("dd_member_id")+""); +// 人员名称 + req.setName(serviceBroker.get("name")+""); +// 工号 + req.setJobNumber(""); +// 职位 + req.setTitle(""); +// 邮箱 + req.setEmail(""); + req.setDeptIdList(memberMap.get("deptId")); + req.setLanguage("zh_CN"); +// 强制更新的字段 +// req.setForceUpdateFields("manager_userid"); + return req; + } + + + // 调用钉钉人员删除接口,根据钉钉人员ID删除人员 + public static String memberDelete(String userId ,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/delete"); + OapiV2UserDeleteRequest req = new OapiV2UserDeleteRequest(); + req.setUserid(userId); + OapiV2UserDeleteResponse rsp = client.execute(req, accessToken); + System.out.println("删除"+rsp.getBody()); + return rsp.getBody(); + } + + + // 调用钉钉接口获取部门下级部门ID + public static String departmentListsubid(long parentId ,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/listsubid"); + OapiV2DepartmentListsubidRequest req = new OapiV2DepartmentListsubidRequest(); + req.setDeptId(parentId); + OapiV2DepartmentListsubidResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + + + //调用钉钉接口,根据钉钉部门ID获取部门信息 + public static String departmentGet(long parentId ,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/department/get"); + OapiV2DepartmentGetRequest req = new OapiV2DepartmentGetRequest(); + req.setDeptId(parentId); + req.setLanguage("zh_CN"); + OapiV2DepartmentGetResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + +// 调用钉钉接口,根据钉钉部门ID获取部门下所有人员 + public static String userListId(long departmentId,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/user/listid"); + OapiUserListidRequest req = new OapiUserListidRequest(); + req.setDeptId(departmentId); + OapiUserListidResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + +// 调用钉钉接口,调用钉钉人员ID信息获取钉钉中人员详细信息 + public static String userGet(String userId,String accessToken) throws ApiException { + DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/get"); + OapiV2UserGetRequest req = new OapiV2UserGetRequest(); + req.setUserid(userId); + req.setLanguage("zh_CN"); + OapiV2UserGetResponse rsp = client.execute(req, accessToken); + System.out.println(rsp.getBody()); + return rsp.getBody(); + } + + + + + /** + * 调用post接口 + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + * @throws + * @throws RuntimeException + */ + public static JSONObject doPost(String str, String urlStr,String token ) throws RuntimeException { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { + URL url = new URL(urlStr+"?access_token="+token); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 + connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 + connection.setReadTimeout(60000); + + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true + connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 + connection.setDoInput(true); + // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。 +// connection.setRequestProperty("access_token", token); + connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + // 通过连接对象获取一个输出流 + os = connection.getOutputStream(); + // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的 + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + // 连接对象获取一个输入流,向远程读取 + System.out.println(connection.getResponseCode()); + if (connection.getResponseCode() == 200) { + is = connection.getInputStream(); + // 对输入流对象进行包装:charset根据工作项目组的要求来设置 + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + + StringBuffer sbf = new StringBuffer(); + String temp = null; + // 循环遍历一行一行读取数据 + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + // 关闭资源 + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + // 断开与远程地址url的连接 + connection.disconnect(); + } + JSONObject json = JSONObject.parseObject(result); + return json; + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ExcelUtils.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ExcelUtils.java new file mode 100644 index 0000000..5ad746f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ExcelUtils.java @@ -0,0 +1,64 @@ +package com.seeyon.apps.src_mainorganization.util; + +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.usermodel.XSSFRow; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class ExcelUtils { + + /** + * 生成Excel文件 + * @param headerData 数据表头信息 + * @param dataList 数据列表 + * @param filePath 文件保存路径 + * @param sheetName 工作表名称 + * @throws IOException IO异常 + */ + public static void generateExcel(String[] headerData , List> dataList, String filePath, String sheetName) throws IOException { + // 创建工作簿 + try (XSSFWorkbook workbook = new XSSFWorkbook()) { + // 创建工作表 + XSSFSheet sheet = workbook.createSheet(sheetName); + + // 创建表头行 + XSSFRow headerRow = sheet.createRow(0); + for(int i = 0 ; i user : dataList) { + XSSFRow row = sheet.createRow(rowNum++); + for(int i = 0 ; i < headerData.length ; i ++){ + row.createCell(i).setCellValue(user.get(headerData[i])); + } +// row.createCell(0).setCellValue(user.get("ID")); +// row.createCell(1).setCellValue(user.get("姓名")); +// row.createCell(2).setCellValue(user.get("年龄")); + } + // 自动调整列宽 + for (int i = 0; i < headerData.length; i++) { + sheet.autoSizeColumn(i); + } + File file = new File(filePath); + File parentDir = file.getParentFile(); + if (parentDir != null && !parentDir.exists()) { + parentDir.mkdirs(); // 创建所有必要的父目录 + } + // 保存文件 + try (FileOutputStream outputStream = new FileOutputStream(filePath)) { + workbook.write(outputStream); + } + } + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/FormExportUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/FormExportUtil.java new file mode 100644 index 0000000..2087ab2 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/FormExportUtil.java @@ -0,0 +1,107 @@ +package com.seeyon.apps.src_mainorganization.util; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.v3x.services.form.bean.RecordExport; +import com.seeyon.v3x.services.form.bean.SubordinateFormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; + +import java.util.*; + +//创建无流程表单数据处理工具类 +public class FormExportUtil { + + /** + * 设置主表信息 + * @param map 设置主表字段。Map<主表显示名称,主表数据> + * @return + */ + public List setFormValue(Map map){ +// 创建返回值对象 + List valueExports = new ArrayList(); + ValueExport valueExport ; +// 获取参数信息(显示名称) + Set keys = map.keySet(); + if(keys.size()>0) { +// 对控件赋值 + for (String key : keys) { + valueExport = new ValueExport(); + valueExport.setDisplayName(key); + valueExport.setValue(map.get(key)); + valueExports.add(valueExport); + } + } + return valueExports; + } + + /** + * 设置从表信息 + * @param lists 设置主表字段。List> + */ + public List setSubordinateFormValue(List> lists){ + List subordinateFormExports = new ArrayList(); + SubordinateFormExport subordinateFormExport = new SubordinateFormExport(); + List recordExports = new ArrayList(); + List valueExports; + RecordExport recordExport; + for(int i = 0 ; i < lists.size() ; i++) { + recordExport = new RecordExport(); + valueExports = setFormValue(lists.get(i)); + recordExport.setRecord(valueExports); + recordExports.add(recordExport); + } + subordinateFormExport.setValues(recordExports); + subordinateFormExports.add(subordinateFormExport); + + return subordinateFormExports; + } + + + /** + * 格式转换将{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"},{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"}] + 有什么办法转换成 + [{"id":1,"data":[{"id":1,"str1":"123","str2":"asd","str3":"qwe"},{"id":1,"str1":"123","str2":"asd","str3":"qwe"}]}{"id":2,"data":[{"id":2,"str1":"123","str2":"asd","str3":"qwe"},{"id":2,"str1":"123","str2":"asd","str3":"qwe"}]}{"id":3,"data":[{"id":3,"str1":"123","str2":"asd","str3":"qwe"},{"id":3,"str1":"123","str2":"asd","str3":"qwe"}]}] + * @param inputList + * @return + */ + public List> transformData(JSONArray inputList) { + Map>> groupedData = new HashMap<>(); + for(int i = 0 ; i < inputList.size();i++) { + String userId = inputList.getJSONObject(i).getString("userId"); + + groupedData.computeIfAbsent(userId, k -> new ArrayList<>()).add(inputList.getJSONObject(i)); + } + + List> result = new ArrayList<>(); + + for (Map.Entry>> entry : groupedData.entrySet()) { + Map resultMap = new HashMap<>(); + resultMap.put("userId", entry.getKey()); + resultMap.put("data", entry.getValue()); + result.add(resultMap); + } + + return result; + } + + + + public JSONArray dingdingTimeSequence (JSONArray datas){ + + for (int i = 0; i < datas.size() - 1; i++) { + for (int j = 0; j < datas.size() - i - 1; j++) { + String value1 = datas.getJSONObject(j).getString("baseCheckTime"); + String value2 = datas.getJSONObject(j + 1).getString("baseCheckTime"); + long long1 = Long.parseLong(value1); + long long2 = Long.parseLong(value2); + if (long1 > long2) { + JSONObject temp = datas.getJSONObject(j); + datas.set(j, datas.getJSONObject(j + 1)); + datas.set(j + 1, temp); + } + } + } + return datas; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/LearnTokenUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/LearnTokenUtil.java new file mode 100644 index 0000000..0937b60 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/LearnTokenUtil.java @@ -0,0 +1,107 @@ +package com.seeyon.apps.src_mainorganization.util; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.util.EntityUtils; +import www.seeyon.com.utils.StringUtil; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; + +public class LearnTokenUtil { + + public static String getToken(ConfigVo configVo, String systemType) throws IOException { + String address = ""; + String token = ""; + String loginName = ""; + String restUserName = ""; + String restPassword = ""; + String url = ""; + byte var9 = -1; + switch(systemType.hashCode()) { + case 3146030: + if (systemType.equals("flow")) { + var9 = 0; + } + } + + switch(var9) { + case 0: + loginName = configVo.getParamVal(SyncConstants.flowLoginName.name()); + restUserName = configVo.getParamVal(SyncConstants.flowRestUserName.name()); + restPassword = configVo.getParamVal(SyncConstants.flowRestPassword.name()); + url = configVo.getParamVal(SyncConstants.flowurl.name()); + default: + if ("".equals(loginName)) { + address = url + "/seeyon/rest/token/" + restUserName + "/" + restPassword; + } else { + address = url + "/seeyon/rest/token" + restUserName + "/" + restPassword + "?loginName=" + loginName; + } + + HttpURLConnection connection = (HttpURLConnection)(new URL(address)).openConnection(); + connection.setRequestProperty("Accept", "application/json"); + connection.setRequestMethod("GET"); + int responseCode = connection.getResponseCode(); + if (responseCode == 200) { + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + StringBuffer response = new StringBuffer(); + + String inputLine; + while((inputLine = in.readLine()) != null) { + response.append(inputLine); + } + + in.close(); + String result = response.toString(); + if (result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + System.out.println(jsObj); + token = jsObj.get("id").toString(); + } else { + token = result; + } + + System.out.println(token); + } else { + System.out.println("GET request not worked"); + } + + return token; + } + } + + public static String doGet(String par, String strUrl) { + String address = ""; + if (StringUtil.isNotEmpty(par)) { + if (strUrl.indexOf("?") != -1) { + address = strUrl + "?" + par; + } else { + address = strUrl + "&" + par; + } + } else { + address = strUrl; + } + + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + + try { + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == 200) { + result = EntityUtils.toString(res.getEntity()); + } + + return result; + } catch (Exception var7) { + throw new RuntimeException(var7); + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ParamUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ParamUtil.java new file mode 100644 index 0000000..7809e12 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ParamUtil.java @@ -0,0 +1,37 @@ +package com.seeyon.apps.src_mainorganization.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class ParamUtil { + + public static boolean isClientAccount(String accountPath){ + String pattern = "00000017.{8}"; + boolean boo = false; + // 创建Pattern对象 + Pattern p = Pattern.compile(pattern); + // 创建Matcher对象 + Matcher m = p.matcher(accountPath); + // 检查是否匹配 + if (m.matches()) { + boo = true; + } + return boo; + } + + + public static String pathIncrease(String originalText,int num){ + // 1. 将字符串转为数字 + long number = Long.parseLong(originalText); + // 2. 数字+1 + number += num; + // 3. 格式化为原长度,前面补零 + String incrementedText = String.format("%0" + originalText.length() + "d", number); + System.out.println("原值: " + originalText); // 输出: 000000170011 + System.out.println("+1后: " + incrementedText); // 输出: 000000170012 + return incrementedText; + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ProtUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ProtUtil.java new file mode 100644 index 0000000..e30c5fe --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/ProtUtil.java @@ -0,0 +1,296 @@ +package com.seeyon.apps.src_mainorganization.util; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.HttpStatus; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import www.seeyon.com.utils.StringUtil; + +import java.io.*; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +public class ProtUtil { + private static Log log = Log.get(ProtUtil.class); + + /** + * 获取一个token + * @return + */ + public static String getToken(String url,String loginName) { + if(StringUtil.isNotEmpty(loginName)){ + url+="?loginName="+loginName; + } + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(url); + try { + get.addHeader("Accept","application/json"); + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + String token = ""; + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + token = jsObj.get("id").toString(); + }else { + token = result; + } + return token; + } + + /** + * 获取一个token + * @return + */ + public static String getQxxToken(String url,String corpId,String corpsecret) { +// if(StringUtil.isNotEmpty(loginName)){ +// url+="?loginName="+loginName; +// } + String getTokenUrl = url+"corpid="+corpId+"&corpsecret="+corpsecret; + log.info(getTokenUrl); + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(getTokenUrl); + try { + get.addHeader("Content-Type","application/json"); + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + String token = ""; + if(result.contains("{")) { + JSONObject jsObj = JSONObject.parseObject(result); + JSONObject data = jsObj.getJSONObject("data"); + token = data.getString("token"); + }else { + token = result; + } + return token; + } + + /** + * 调用get接口 + * @param strUrl 需要调用的url对应的配置文件的key + * @return + */ + public static String doGet( String strUrl) { + return doGet(strUrl , new HashMap<>()); + } + + /** + * 调用get接口 + * @param strUrl 需要调用的url对应的配置文件的key + * @return + */ + public static String doGet( String strUrl,Map headerMap) { + String address = strUrl; + DefaultHttpClient client = new DefaultHttpClient(); + String result = ""; + HttpGet get = new HttpGet(address); + try { + if(headerMap.size()>0){ + for (Map.Entry entry : headerMap.entrySet()) { + String key = entry.getKey(); // 获取键 + String value = entry.getValue(); // 获取值 + get.addHeader(key,value); + } + } + HttpResponse res = client.execute(get); + if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + result = EntityUtils.toString(res.getEntity()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + return result; + } + + + public static String callPutApi(String apiUrl, String requestBody) { + StringBuilder response = new StringBuilder(); + try { + URL url = new URL(apiUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("PUT"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setDoOutput(true); + try (DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream())) { + outputStream.writeBytes(requestBody); + outputStream.flush(); + } + int responseCode = connection.getResponseCode(); + System.out.println("Response Code : " + responseCode); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) { + String line; + while ((line = reader.readLine())!= null) { + response.append(line); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + return response.toString(); + } + + /** + * 调用post接口 + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @return + */ + public static String doPost(String str, String urlStr) { + return doPost(str,urlStr ,new HashMap<>()); + } + + /** + * 调用post接口 + * @param str 调用接口传递的参数json + * @param urlStr 需要调用的url对应的参数文件中的编码 + * @param headerMap 请求头参数列表 + * @return + */ + public static String doPost(String str, String urlStr , Map headerMap) { + HttpURLConnection connection = null; + InputStream is = null; + OutputStream os = null; + BufferedReader br = null; + String result = null; + try { + URL url = new URL(urlStr); + // 通过远程url连接对象打开连接 + connection = (HttpURLConnection) url.openConnection(); + // 设置连接请求方式 + connection.setRequestMethod("POST"); + // 设置连接主机服务器超时时间:15000毫秒 +// connection.setConnectTimeout(15000); + // 设置读取主机服务器返回数据超时时间:60000毫秒 +// connection.setReadTimeout(60000); + // 默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true +// connection.setDoOutput(true); + // 默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无 +// connection.setDoInput(true); + if(headerMap.size()>0){ + for (Map.Entry entry : headerMap.entrySet()) { + String key = entry.getKey(); // 获取键 + String value = entry.getValue(); // 获取值 + connection.setRequestProperty(key, value); + } + }else{ + connection.setRequestProperty("Content-Type", "application/json"); + } + os = connection.getOutputStream(); + if (!("".equals(str) || str == null)) { + os.write(str.getBytes("UTF-8")); + } + if (connection.getResponseCode() == 200) { + is = connection.getInputStream(); + br = new BufferedReader(new InputStreamReader(is, "UTF-8")); + StringBuffer sbf = new StringBuffer(); + String temp = null; + while ((temp = br.readLine()) != null) { + sbf.append(temp); + sbf.append("\r\n"); + } + result = sbf.toString(); + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (null != br) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != os) { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (null != is) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + }if (null != connection) { + connection.disconnect(); + } + } + return result; + + } + + + public static String httpPutRaw(String url, String stringJson, Map headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPut httpput = new HttpPut(url); + + //设置header + httpput.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpput.setHeader(entry.getKey(),entry.getValue().toString()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpput.setEntity(stringEntity); + //响应信息 + httpResponse = closeableHttpClient.execute(httpput); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + closeableHttpClient.close(); //关闭连接、释放资源 + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/QixuexingPortUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/QixuexingPortUtil.java new file mode 100644 index 0000000..1aa60e1 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_mainorganization/util/QixuexingPortUtil.java @@ -0,0 +1,302 @@ +package com.seeyon.apps.src_mainorganization.util; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.ctp.util.UUIDLong; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +public class QixuexingPortUtil { + + /** + * 获取企学星token信息 + * @param configVo + * @return + */ + public static String qixuexingToken(ConfigVo configVo){ + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxGetToken = configVo.getParamVal(SyncConstants.qxxGetToken.name()); + String qxxCorpid = configVo.getParamVal(SyncConstants.qxxCorpid.name()); + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = ProtUtil.getQxxToken(qxxUrl+qxxGetToken,qxxCorpid,qxxCorpsecret); + return qxxToken; + } + + /** + * 根据企学星唯一值信息查询企学星部门信息 + * @param configVo 枚举参数信息 + * @param orgUuid 部门唯一值 + * @return + */ + public static JSONObject qixuexingSelectOrg(ConfigVo configVo,String orgUuid){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSelectOrg = configVo.getParamVal(SyncConstants.qxxSelectOrg.name()); + JSONObject param = new JSONObject(); + param.put("orgUuid",orgUuid); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSelectOrg, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 调用接口保存企学星部门信息 + * @param configVo 枚举参数 + * @param map 协同单位信息 + * @param subAccountId 上级单位信息 + * @return + */ + public static JSONObject qixuexingSaveOrg(ConfigVo configVo,Map map ,String subAccountId){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveOrg = configVo.getParamVal(SyncConstants.qxxSaveOrg.name()); + JSONObject param = new JSONObject(); + param.put("orgUuid",map.get("id").toString()); + param.put("name",map.get("name").toString()); + param.put("orgCode",map.get("code")); +// 上级设置,如果上级为集团则设置为空。 + if(!"-1730833917365171641".equals(subAccountId)){ + param.put("parentOrgUuid",subAccountId); + } + param.put("orderNum",map.get("sort_id").toString()); + param.put("status","1".equals(map.get("is_enable").toString())?"1":"2"); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveOrg, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 根据企学星唯一值信息删除企学星部门信息 + * @param configVo 枚举参数信息 + * @param orgUuid 部门唯一值 + * @return + */ + public static JSONObject qixuexingDeleteOrg(ConfigVo configVo,String orgUuid){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxDeleteOrg = configVo.getParamVal(SyncConstants.qxxDeleteOrg.name()); + JSONObject param = new JSONObject(); + param.put("orgUuid",orgUuid); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxDeleteOrg, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 调用接口保存企学星用户信息 + * @param configVo 枚举参数信息 + * @param map 用户Map信息 + * @return + */ + public static JSONObject qixuexingSaveUser(ConfigVo configVo,Map map){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveUser = configVo.getParamVal(SyncConstants.qxxSaveUser.name()); + JSONObject param = new JSONObject(); + param.put("userUuid",map.get("id").toString()); + param.put("username",map.get("telnumber").toString()); + param.put("realName",map.get("name").toString()); + param.put("orgUuid",map.get("department_id").toString()); + param.put("phone",map.get("telnumber").toString()); + param.put("credentialsType","1"); + param.put("credentialsCode",map.get("member_no").toString()); + param.put("sex",map.get("member_sex").toString()); + param.put("status",map.get("member_status").toString()); + param.put("entryDate",map.get("board_date").toString()); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveUser, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 根据企学星唯一值信息删除企学星用户信息 + * @param configVo 枚举参数信息 + * @param userUuid 业代用户唯一值 + * @return + */ + public static JSONObject qixuexingDeleteUser(ConfigVo configVo,String userUuid){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveUser = configVo.getParamVal(SyncConstants.qxxSaveUser.name()); + JSONObject param = new JSONObject(); + param.put("userUuid",userUuid); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveUser, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 调用接口保存企学星业代用户信息 + * @param configVo 枚举参数信息 + * @param map 业代用户Map信息 + * @return + */ + public static JSONObject qixuexingSaveUserServiceBroker(ConfigVo configVo,Map map){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveUser = configVo.getParamVal(SyncConstants.qxxSaveUser.name()); + JSONObject param = new JSONObject(); + param.put("userUuid",map.get("id").toString()); + param.put("username",map.get("telnumber").toString()); + param.put("realName",map.get("name").toString()); + param.put("orgUuid",map.get("dept_id").toString()); + param.put("phone",map.get("telnumber").toString()); + param.put("credentialsType","1"); + param.put("credentialsCode",map.get("member_no").toString()); + param.put("sex",map.get("member_sex").toString()); + param.put("status",map.get("member_status").toString()); + param.put("entryDate",map.get("hiredate").toString()); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveUser, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 根据企学星唯一值信息删除企学星业代用户信息 + * @param configVo 枚举参数信息 + * @param userUuid 用户唯一值 + * @return + */ + public static JSONObject qixuexingDeleteUserServiceBroker(ConfigVo configVo,String userUuid){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveUser = configVo.getParamVal(SyncConstants.qxxSaveUser.name()); + JSONObject param = new JSONObject(); + param.put("userUuid",userUuid); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveUser, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 调用接口保存企学星业代用户信息 + * @param configVo 枚举参数信息 + * @param map 业代用户Map信息 + * @return + */ + public static JSONObject qixuexingSaveUserClientMember(ConfigVo configVo,Map map){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveUser = configVo.getParamVal(SyncConstants.qxxSaveUser.name()); + JSONObject param = new JSONObject(); + param.put("userUuid",map.get("id").toString()); + param.put("username",map.get("telnumber").toString()); + param.put("realName",map.get("name").toString()); + param.put("orgUuid",map.get("area_dept").toString()); + param.put("phone",map.get("telnumber").toString()); + param.put("credentialsType","1"); + param.put("credentialsCode",map.get("member_no").toString()); + param.put("sex",map.get("member_sex").toString()); + param.put("status",map.get("member_status").toString()); + param.put("entryDate",map.get("board_date").toString()); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveUser, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 根据企学星唯一值信息删除企学星业代用户信息 + * @param configVo 枚举参数信息 + * @param userUuid 用户唯一值 + * @return + */ + public static JSONObject qixuexingDeleteUserClientMember(ConfigVo configVo,String userUuid){ + String qxxCorpsecret = configVo.getParamVal(SyncConstants.qxxCorpsecret.name()); + String qxxToken = qixuexingToken(configVo); + String qxxUrl = configVo.getParamVal(SyncConstants.qxxUrl.name()); + String qxxSaveUser = configVo.getParamVal(SyncConstants.qxxSaveUser.name()); + JSONObject param = new JSONObject(); + param.put("userUuid",userUuid); + Map headerMap = setHeaderMap(qxxToken,qxxCorpsecret,param); + String str = ProtUtil.doPost(param.toString(), qxxUrl+qxxSaveUser, headerMap); + JSONObject jsonObject = JSONObject.parseObject(str); + return jsonObject; + } + + /** + * 设置企学星请求头信息 + * @param qxxToken + * @param qxxCorpsecret + * @param param + * @return + */ + private static Map setHeaderMap(String qxxToken,String qxxCorpsecret,JSONObject param){ + Map headerMap = new HashMap<>(); + long uuid = UUIDLong.longUUID(); + headerMap.put("Content-Type","application/json"); + headerMap.put("token",qxxToken); + long timestamp = new Date().getTime(); + headerMap.put("timestamp",timestamp+""); + headerMap.put("nonce",uuid+""); + String signature = QixuexingPortUtil.getSignature + (qxxToken,timestamp+"",uuid+"",param.toString(),qxxCorpsecret); + headerMap.put("signature",signature); + return headerMap; + } + + /** + * 获取接口签名 + * + * @param token 票据 + * @param timestamp 时间戳 + * @param nonce 随机字符串 + * @param body body 信息 + * @param corpsecret 企业的凭证密钥 + * @return 安全签名 + */ + public static String getSignature(String token, String timestamp, String nonce, String body,String corpsecret) { + try { + String[] array = new String[]{token, timestamp, nonce, body}; + StringBuffer stringBuffer = new StringBuffer(); + // 字符串排序 + Arrays.sort(array); + for (int i = 0; i < array.length; i++) { + stringBuffer.append(array[i]); + } + String str = stringBuffer.toString(); + + Mac mac = Mac.getInstance("HmacSHA256"); + mac.init(new SecretKeySpec(corpsecret.getBytes("UTF-8"), "HmacSHA256")); + byte[] signData = mac.doFinal(str.getBytes("UTF-8")); + + StringBuffer sb = new StringBuffer(signData.length); + String sTmp; + + for (int i = 0; i < signData.length; i++) { + sTmp = Integer.toHexString(0xFF & signData[i]); + if (sTmp.length() < 2) { + sb.append(0); + } + sb.append(sTmp.toUpperCase()); + } + return sb.toString(); + } catch (Exception e) { + throw new RuntimeException("获取签名异常"); + } + } + + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_quartformtable/dao/IQuartFormTableDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_quartformtable/dao/IQuartFormTableDao.java new file mode 100644 index 0000000..021d2fc --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_quartformtable/dao/IQuartFormTableDao.java @@ -0,0 +1,13 @@ +package com.seeyon.apps.src_quartformtable.dao; + +import java.util.List; +import java.util.Map; + +public interface IQuartFormTableDao { + + public String getFormNameByFormCode(String formCode); + + public List getFormmainDataByUniqueness(String formmainName, Map uniquenessMap); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_quartformtable/dao/impl/QuartFormTableDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_quartformtable/dao/impl/QuartFormTableDao.java new file mode 100644 index 0000000..3eb2df9 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_quartformtable/dao/impl/QuartFormTableDao.java @@ -0,0 +1,74 @@ +package com.seeyon.apps.src_quartformtable.dao.impl; + +import com.seeyon.apps.src_quartformtable.dao.IQuartFormTableDao; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class QuartFormTableDao implements IQuartFormTableDao { + + String getFormNameByFormCode = "select form_id,table_name,table_display from cap_form_table_info where form_id = (select id from CAP_FORM_DEFINITION where appbind_info like ?) and table_type = 'master' "; + + @Override + public String getFormNameByFormCode(String formCode) { + String formName = ""; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getFormNameByFormCode); + List p = new ArrayList(); + String formCodeparam = "%\"formCode\":\""+formCode+"\"%"; + p.add(formCodeparam); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list != null && list.size() > 0) { + Map map = list.get(0); + formName = map.get("table_name").toString(); + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return formName; + } + + + @Override + public List getFormmainDataByUniqueness(String formmainName,Map uniquenessMap) { + List ids = new ArrayList<>(); + JDBCAgent agent = new JDBCAgent(); + String param = ""; + try { + for (Map.Entry entry : uniquenessMap.entrySet()) { + param = param + " and "+entry.getKey()+" = '"+entry.getValue()+"' "; + } + StringBuilder sql = new StringBuilder("select id from "); + sql = sql.append(formmainName).append(" where 1=1 ").append(param); + List p = new ArrayList(); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + for (Map map :list){ + ids.add(map.get("id").toString()); + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return ids; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/ReceiveFVFlowPluginApi.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/ReceiveFVFlowPluginApi.java new file mode 100644 index 0000000..bb4dd06 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/ReceiveFVFlowPluginApi.java @@ -0,0 +1,45 @@ +package com.seeyon.apps.src_receiveFVFlow; + +import com.seeyon.apps.common.plugin.api.APluginInfoApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; +import com.seeyon.apps.src_mainorganization.constans.SyncConstants; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; + +public class ReceiveFVFlowPluginApi extends APluginInfoApi { + public ReceiveFVFlowPluginApi() { + } + + public String getPluginId() { + System.out.println(ReceiveFVFlowConstans.getPluginId()); + return ReceiveFVFlowConstans.getPluginId(); + } + + public String getCreateUser() { + return "橙阳科技"; + } + + public String getDescription() { + return "客户服务平台数据传递管理"; + } + + public boolean syncOrg() { + return true; + } + + public ConfigVo getDefaultConfig() { + ConfigVo configVo = new ConfigVo(); + ReceiveFVFlowConstans[] var2 = ReceiveFVFlowConstans.values(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + ReceiveFVFlowConstans value = var2[var4]; + if (value != ReceiveFVFlowConstans.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/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/config/RfvfPluginConfigProvider.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/config/RfvfPluginConfigProvider.java new file mode 100644 index 0000000..3cbcb3e --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/config/RfvfPluginConfigProvider.java @@ -0,0 +1,17 @@ +package com.seeyon.apps.src_receiveFVFlow.config; + +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.common.plugin.vo.ConfigVo; + +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.ctp.common.AppContext; +import org.springframework.stereotype.Component; + +@Component +public class RfvfPluginConfigProvider { + protected ICstConfigApi cstConfigApi = (ICstConfigApi) AppContext.getBean("cstConfigApi"); + public String getBizConfigByKey(ReceiveFVFlowConstans key) { + ConfigVo config = cstConfigApi.getConfig(ReceiveFVFlowConstans.getPluginId()); + return config.getParamVal(key.name()); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/constans/ReceiveFVFlowConstans.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/constans/ReceiveFVFlowConstans.java new file mode 100644 index 0000000..692b727 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/constans/ReceiveFVFlowConstans.java @@ -0,0 +1,32 @@ +package com.seeyon.apps.src_receiveFVFlow.constans; + +public enum ReceiveFVFlowConstans { + + + plugin("src_receiveFVFlow", "插件ID"), + formDataLoginName("shenxian","档案表创建人"), + updateAccountName("57657676","更新账号"), + updateLoginName("dev","更新登录名"), + mappingHelpTableName("maptable","映射配置辅助表"), + ; + + private String defaultValue; + private String description; + + private ReceiveFVFlowConstans(String defaultValue, String description) { + this.defaultValue = defaultValue; + this.description = description; + } + + public String getDefaultValue() { + return this.defaultValue; + } + + public String getDescription() { + return this.description; + } + + public static String getPluginId() { + return plugin.defaultValue; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/dao/IReceiveFVFlowDao.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/dao/IReceiveFVFlowDao.java new file mode 100644 index 0000000..f385fd1 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/dao/IReceiveFVFlowDao.java @@ -0,0 +1,19 @@ +package com.seeyon.apps.src_receiveFVFlow.dao; + +import java.util.Map; + +public interface IReceiveFVFlowDao { + + /** + * 根据关键字信息查询表单数据ID + * @param fromName + * @return + */ + public long getFormIdBykeyword (String fromName, Map keyWord); + + public Map getTemplateJsonByFormCode(String formCode); + + public Map getKeyWordByformmainId(String formmainid); + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/dao/impl/ReceiveFVFlowDaoImpl.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/dao/impl/ReceiveFVFlowDaoImpl.java new file mode 100644 index 0000000..e15c355 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/dao/impl/ReceiveFVFlowDaoImpl.java @@ -0,0 +1,112 @@ +package com.seeyon.apps.src_receiveFVFlow.dao.impl; + +; +import com.seeyon.apps.src_receiveFVFlow.config.RfvfPluginConfigProvider; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.dao.IReceiveFVFlowDao; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.*; + +public class ReceiveFVFlowDaoImpl implements IReceiveFVFlowDao { + + @Override + public long getFormIdBykeyword(String fromName, Map keyWord) { + long res = 0; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder("select id from "+fromName+" where 1=1 "); + Set keys = keyWord.keySet(); + List p = new ArrayList(); + for (String key: keys) { + sql.append(" and "+key +" = ?"); + p.add(keyWord.get(key)); + } + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list != null && list.size() > 0) { + Map map = list.get(0); + String id = map.get("id").toString(); + res = Long.parseLong(id); + }else{ + res = -1; + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public Map getTemplateJsonByFormCode(String formCode) { + Map res = new HashMap<>(); + RfvfPluginConfigProvider configProvider = (RfvfPluginConfigProvider) AppContext.getBean("rfvfPluginConfigProvider"); + String tableName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.mappingHelpTableName); + String getTemplateJsonByFormCode = "select id,field0002,field0003,field0004,field0008 from "+ tableName + " where field0001 = ? "; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getTemplateJsonByFormCode); + List p = new ArrayList(); + p.add(formCode); + agent.execute(sql.toString(), p); + List list = agent.resultSetToList(); + if (list != null && list.size() > 0) { + Map map = list.get(0); + res.put("id",map.get("id").toString()); + res.put("templateJson",map.get("field0002").toString()); + res.put("formCode",map.get("field0003").toString()); + res.put("isAddOrUpdate",map.get("field0004").toString()); + res.put("formTableNameSql",map.get("field0008").toString()); + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } + + @Override + public Map getKeyWordByformmainId(String formmainId) { + Map res = new HashMap<>(); + RfvfPluginConfigProvider configProvider = (RfvfPluginConfigProvider) AppContext.getBean("rfvfPluginConfigProvider"); + String tableName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.mappingHelpTableName); + String getKeyWordByformmainId = "select field0006,field0007 from " + tableName + " where formmain_id = ? "; + JDBCAgent agent = new JDBCAgent(); + try { + StringBuilder sql = new StringBuilder(getKeyWordByformmainId); + List p = new ArrayList(); + p.add(formmainId); + 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); + res.put(map.get("field0006").toString(),map.get("field0007").toString()); + } + } + } catch (BusinessException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (agent != null) { + agent.close(); + } + } + return res; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AbnormalResignationHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AbnormalResignationHandler.java new file mode 100644 index 0000000..41b2378 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AbnormalResignationHandler.java @@ -0,0 +1,194 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.aspose.imaging.internal.Z.E; +import com.seeyon.apps.src_receiveFVFlow.indexinterface.StepTask; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +//非正常离职 +@Component +public class AbnormalResignationHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler,OrgMemberUpdateHandler,TalentDocUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + + log.info("开始同步非正常离职流程数据"); + + Map paramsMap = buildParamsMap(source); + + // 执行各步骤任务 + Map results = new LinkedHashMap<>(); + results.put("履历记录构建", runStep(() -> addLlRecord(paramsMap), "履历记录构建")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(paramsMap), "人员档案更新")); + results.put("组织架构人员信息更新", runStep(() -> updateOrgMember(paramsMap), "组织架构人员信息更新")); + results.put("人才档案更新", runStep(() -> updateTalentDoc(paramsMap), "人才档案更新")); + + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("非正常离职流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + + log.info("非正常离职流程数据同步完成 ✅"); + } + + @Override + protected Map buildParamsMap(Map source) { + try { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + String formNo = resMap.get("formCode"); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map displayMap = WeaverJsonUtils.getDisplayMap(source, templateMap); + displayMap.put("formNo",formNo); + return displayMap; + }catch (Exception e) { + log.error(e.getMessage(),e); + throw new RuntimeException("参数构造失败"); + } + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = new ArrayList<>(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String formNo = (String) source.get("formNo"); + Long dept = getLong(mainFormData.get("部门")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", mainFormData.get("离职日期")); + rowData.put("个人履历备注", "离职"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + source.put("从表数据", subFormDatas); + } + + @Override + protected String getFormCode() { + return "formtable_main_110"; + } + + @Override + public void addOrgMember(Map source) { + + } + + @Override + public void updateOrgMember(Map source) throws Exception { + //先查询组织架构人员信息是否存在,若不存在则报错,存在则更新 + Map mainFormData = (Map) source.get("主表数据"); + String uid = mainFormData.get("姓名") + ""; //人员ID + V3xOrgMember member = orgManager.getMemberById(Long.parseLong(uid)); + if(member == null) { + throw new RuntimeException("组织架构人员信息不存在"); + } + member.setState(2); + member.setEnabled(false); + V3xOrgPrincipal v3xOrgPrincipal = member.getV3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(null); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + member.setCode(null); + orgManagerDirect.updateMember(member); + } + + @Override + public void addPersonnelDoc(Map source) { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + String formNo = (String) source.get("formNo"); + Map mainFormData = (Map) source.get("主表数据"); + mainFormData.put("员工状态","离职"); + FormDataOperator operator = new FormDataOperator(); + operator.handleEnumDeptEtc(mainFormData,formNo); + List updateFields = new ArrayList<>(); + List> subFormDatas = (List>) source.get("从表数据"); + String leaveDate = mainFormData.get("离职日期") + ""; //预计离职时间 + String employeeState = mainFormData.get("员工状态") + ""; //人员状态 + updateFields.add(FormUpdateField.build().display("员工状态").value(employeeState)); + updateFields.add(FormUpdateField.build().display("离职日期").value(leaveDate)); + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("姓名").value(mainFormData.get("姓名"))); + operator.updateMasterForm(formNo,updateFields,whereClause); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + List formColumns = operator.queryFormDataCondition(formNo, null, whereClause); + if(formColumns != null && formColumns.size() > 0 && subDataMap.get(subTableName) != null) { + operator.addSubTableRecord(subTableName,(List)subDataMap.get(subTableName),formNo,formColumns.get(0).getId()); + } + } + + @Override + public void addTalentDoc(Map source) throws Exception { + + } + + @Override + public void updateTalentDoc(Map source) throws Exception { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_132"); + String formNo = resMap.get("formCode"); + FormDataOperator formDataOperator = new FormDataOperator(); + Map mainFormData = (Map) source.get("主表数据"); + String telPhone = (String) mainFormData.get("手机号"); + Map temp = new HashMap<>(); + temp.put("人才状态","已离职"); + formDataOperator.handleEnumDeptEtc(temp,formNo); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("人才状态").value(temp.get("人才状态"))); + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("手机").value(telPhone)); + formDataOperator.updateMasterForm(formNo, updateFields, whereClause); + } +} \ No newline at end of file diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccessionApprovalHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccessionApprovalHandler.java new file mode 100644 index 0000000..df66b0a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccessionApprovalHandler.java @@ -0,0 +1,336 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.aicloud.common.JsonUtils; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.FileUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormExportUtil; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.OrganizationMessage; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.ctp.util.JDBCAgent; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +//入职 注:离职再入职是修改档案表并将状态职位试用 +@Component +public class AccessionApprovalHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler,OrgMemberUpdateHandler,TalentDocUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + private String updateLoginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateLoginName); + private String updateAccountName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateAccountName); + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("开始同步入职流程数据"); + Map map = buildParamsMap(source); + // 执行各步骤任务 + Map results = new LinkedHashMap<>(); + results.put("履历记录构建", runStep(() -> addLlRecord(map), "履历记录构建")); + results.put("合同明细构建", runStep(() -> addContractRecord(map), "合同明细构建")); + results.put("组织架构人员信息新增", runStep(() -> addOrgMember(map), "组织架构人员信息新增")); + results.put("人员档案新增", runStep(() -> addPersonnelDoc(map), "人员档案新增")); + results.put("人才档案更新", runStep(() -> updateTalentDoc(map), "人才档案更新")); + + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("同步入职流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + + log.info("入职流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_115"; + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String formNo = (String) source.get("formNo"); + Long dept = getLong(mainFormData.get("部门")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", mainFormData.get("入职日期")); + rowData.put("个人履历备注", "入职"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + + } + + private void addContractRecord(Map source) throws BusinessException { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + String formNo = (String) source.get("formNo"); + String contractType = (String) mainFormData.get("合同类型"); + Object contractStartTime = mainFormData.get("合同开始日期"); + Object contractEndTime = mainFormData.get("合同到期日期"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean contractMxBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("合同签订明细")) { + contractMxBean = tableBean; + break; + } + } + String dbTableName = contractMxBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("合同类型明细", contractType); + rowData.put("合同开始日期明细", contractStartTime); + rowData.put("合同截止日期明细", contractEndTime); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + } + + @Override + public void addOrgMember(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String uName = (String) mainFormData.get("姓名") ; + Long dept = getLong(mainFormData.get("部门")) ; + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + String telNumber = (String)mainFormData.get("手机号"); + String loginAccount = (String)mainFormData.get("登录账号"); + String emNo = (String)mainFormData.get("员工编号"); + //新建OA人员对象 + V3xOrgMember member = orgManager.getMemberByLoginName(loginAccount); + if(member != null){ + mainFormData.put("姓名",member.getId()); + log.warn("该人员账号已存在 :" + uName + "_" + telNumber); + return; + } + V3xOrgMember orgMember = new V3xOrgMember(); + orgMember.setState(1); + orgMember.setOrgLevelId(orgLevel); //职务级别 + orgMember.setOrgDepartmentId(dept); + orgMember.setName(uName); + orgMember.setOrgPostId(post); + orgMember.setIdIfNew(); + orgMember.setEnabled(true); + orgMember.setTelNumber(telNumber); + orgMember.setSortId(1L); + orgMember.setCode(emNo); + orgMember.setIsValid(true); + orgMember.setOrgAccountId(unit); + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(loginAccount); + v3xOrgPrincipal.setMemberId(orgMember.getId()); + v3xOrgPrincipal.setPassword("dhx123456"); + orgMember.setV3xOrgPrincipal(v3xOrgPrincipal); + orgManagerDirect.addMember(orgMember); + mainFormData.put("姓名",orgMember.getId()); + } + + private V3xOrgMember getMemberByCode(String code) { + String sql = "SELECT * FROM org_member WHERE code = ?"; + try (JDBCAgent agent = new JDBCAgent()){ + agent.execute(sql,code); + List list = agent.resultSetToList(); + return list == null ? null : (V3xOrgMember) list.get(0); + }catch (Exception e) { + System.out.println(e.getMessage()); + } + return null; + } + + @Override + public void updateOrgMember(Map source) { + + } + + @Override + public void addPersonnelDoc(Map source) throws Exception { + String formCode = (String) source.get("formNo"); + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + //先根据身份证号查询是否已有 + List condiitonVo = new ArrayList<>(); + condiitonVo.add(FormWhereCondition.build().display("身份证号码").value(mainFormData.get("身份证号码"))); + FormDataOperator formDataOperator = new FormDataOperator(); + Long unit = getLong(mainFormData.get("单位")); + Long dept = getLong(mainFormData.get("部门")) ; + mainFormData.put("员工状态","试用"); + mainFormData.put("服务客户",dept); + mainFormData.put("用工主体",unit); + //转换主表和从表的枚举 + formDataOperator.handleEnumDeptEtc(mainFormData,formCode); + for (Map subFormData : subFormDatas) { + formDataOperator.handleSubTableEnumDeptEtc(subFormData,formCode); + } + List formColumns = formDataOperator.queryFormDataCondition(formCode, null,condiitonVo); + if(formColumns != null && formColumns.size() > 0) { + List updateFields = new ArrayList<>(); + FormColumn formColumn = formColumns.get(0); + String formId = formColumn.getId(); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formCode); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + for (String key : mainFormData.keySet()) { + FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(key); + if(beanByDisplay == null) { + continue; + } + if(beanByDisplay.getInputType().equals("image") || beanByDisplay.getInputType().equals("attachment")) { + try { + List attachments = (List) mainFormData.get(key); + String refId = FileUtils.uploadFilesToOA(attachments, formId, updateLoginName, updateAccountName); + if(refId == null) { + continue; + } + updateFields.add(FormUpdateField.build().value(refId).display(key)); + } catch (Exception e) { + e.printStackTrace(); + log.error("写入附件信息失败,"+e.getMessage()); + } + }else { + updateFields.add(FormUpdateField.build().value(mainFormData.get(key)).display(key)); + } + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId))); + formDataOperator.updateMasterForm(formCode,updateFields,whereClause); + //追加从表数据 + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + if(formColumns != null) { + formDataOperator.addSubTableRecord(subTableName,(List)subDataMap.get(subTableName),formCode,formId); + } + return; + } + Map> mainFormTableAttachments = formDataOperator.getMainFormTableAttachments(formCode,mainFormData); + mainFormData.put("泛微请求ID",source.get("泛微请求ID")); + FormExport formExport = new FormExport(); + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(mainFormData); + formExport.setValues(valueExport); + formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas)); + getFormFactory().importBusinessFormData(loginName, formCode, + formExport, new String[] {}); + bindAttachmentInfo(mainFormTableAttachments,formCode,(String)source.get("泛微请求ID")); + } + + private void bindAttachmentInfo(Map> mainFormTableAttachments,String formNo,String requestId) { + FormDataOperator formDataOperator = new FormDataOperator(); + List condiitonVo = new ArrayList<>(); + List updateFields = new ArrayList<>(); + condiitonVo.add(FormWhereCondition.build().display("泛微请求ID").value(requestId)); + try { + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, condiitonVo); + if(formColumns == null || formColumns.size() == 0 ){ + throw new RuntimeException("未查询到员工档案记录"); + } + String formId = formColumns.get(0).getId(); + for (String fieldDisplay : mainFormTableAttachments.keySet()) { + List attachments = mainFormTableAttachments.get(fieldDisplay); + if(attachments == null || attachments.size() == 0) { + continue; + } + String refId = FileUtils.uploadFilesToOA(attachments,formId,updateLoginName,updateAccountName); + if(refId == null) { + continue; + } + updateFields.add(FormUpdateField.build().value(refId).display(fieldDisplay)); + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId))); + formDataOperator.updateMasterForm(formNo,updateFields,whereClause); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + } + + @Override + public void updatePersonnelDoc(Map source) { + + } + + @Override + public void addTalentDoc(Map source) throws Exception { + } + + @Override + public void updateTalentDoc(Map source) throws Exception { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_132"); + String formNo = resMap.get("formCode"); + Map mainFormData = (Map) source.get("主表数据"); + FormDataOperator formDataOperator = new FormDataOperator(); + Map temp = new HashMap<>(); + temp.put("人才状态","已入职"); + formDataOperator.handleEnumDeptEtc(temp,formNo); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("人才状态").value(temp.get("人才状态"))); + updateFields.add(FormUpdateField.build().value(mainFormData.get("入职日期")).display("入职日期")); + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("应聘编号").value(mainFormData.get("人才库编号"))); + formDataOperator.updateMasterForm(formNo, updateFields, whereClause); + } +} \ No newline at end of file diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccountCloseHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccountCloseHandler.java new file mode 100644 index 0000000..7bc3e25 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccountCloseHandler.java @@ -0,0 +1,112 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class AccountCloseHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler{ + + @Override + public void addPersonnelDoc(Map source) throws Exception { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + String formCode = (String) source.get("formNo"); + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + mainFormData.put("员工状态","离职"); + addLlRecord(source); + FormDataOperator formDataOperator = new FormDataOperator(); + formDataOperator.handleEnumDeptEtc(mainFormData,formCode); + List updateFields = new ArrayList<>(); + List conditions = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("员工状态").value(mainFormData.get("员工状态"))); + conditions.add(FormWhereCondition.build().display("身份证号码").value(mainFormData.get("身份证号码"))); + formDataOperator.updateMasterForm(formCode,updateFields,conditions); + List formColumns = formDataOperator.queryFormDataCondition(formCode, null, conditions); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + if(formColumns != null && formColumns.size() > 0) { + String formId = formColumns.get(0).getId(); + formDataOperator.addSubTableRecord(subTableName, (List) subDataMap.get(subTableName),formCode,formId); + } + } + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("账号关闭流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("履历记录构建", runStep(() -> addLlRecord(map), "履历记录构建")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("账号关闭流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("账号关闭流程数据同步结束"); + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String formNo = (String) source.get("formNo"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历日期", mainFormData.get("离职日期")); + rowData.put("个人履历备注", "业代账号关闭"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + } + + @Override + protected Map buildParamsMap(Map source){ + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_154"; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccountOpenHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccountOpenHandler.java new file mode 100644 index 0000000..cfe38fb --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/AccountOpenHandler.java @@ -0,0 +1,159 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.util.*; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +@Component +public class AccountOpenHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler{ + + private String updateLoginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateLoginName); + private String updateAccountName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateAccountName); + + @Override + public void addPersonnelDoc(Map source) throws Exception { + String formCode = (String) source.get("formNo"); + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + FormDataOperator formDataOperator = new FormDataOperator(); + String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + mainFormData.put("员工状态","在职"); + formDataOperator.handleEnumDeptEtc(mainFormData,formCode); + List condiitonVo = new ArrayList<>(); + condiitonVo.add(FormWhereCondition.build().display("身份证号码").value(mainFormData.get("法人身份证号"))); + List formColumns = formDataOperator.queryFormDataCondition(formCode, null,condiitonVo); + if(formColumns != null && formColumns.size() > 0) { + List updateFields = new ArrayList<>(); + FormColumn formColumn = formColumns.get(0); + String formId = formColumn.getId(); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formCode); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + for (String key : mainFormData.keySet()) { + FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(key); + if(beanByDisplay == null) { + continue; + } + if(beanByDisplay.getInputType().equals("image") || beanByDisplay.getInputType().equals("attachment")) { + try { + List attachments = (List) mainFormData.get(key); + if(attachments == null || attachments.size() == 0) { + continue; + } + String refId = FileUtils.uploadFilesToOA(attachments, formId, updateLoginName, updateAccountName); + if(refId == null) { + continue; + } + updateFields.add(FormUpdateField.build().value(refId).display(key)); + } catch (Exception e) { + e.printStackTrace(); + log.error("写入附件信息失败,"+e.getMessage()); + } + }else { + updateFields.add(FormUpdateField.build().value(mainFormData.get(key)).display(key)); + } + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId))); + formDataOperator.updateMasterForm(formCode,updateFields,whereClause); + //追加从表数据 + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + if(formColumns != null) { + formDataOperator.addSubTableRecord(subTableName,(List)subDataMap.get(subTableName),formCode,formId); + } + }else { + FormExport formExport = new FormExport(); + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(mainFormData); + formExport.setValues(valueExport); + formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas)); + getFormFactory().importBusinessFormData(loginName, formCode, + formExport, new String[] {}); + } + } + + + //增加履历记录 + private void addLlRecord(Map source) throws BusinessException { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String formNo = (String) source.get("formNo"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历日期", mainFormData.get("入职日期")); + rowData.put("个人履历备注", "业代账号开通"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + + + } + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("账号开通流程数据同步结束"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("履历记录构建", runStep(() -> addLlRecord(map), "履历记录构建")); + results.put("人员档案新增", runStep(() -> addPersonnelDoc(map), "人员档案新增")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("账号开通流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("账号开通流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source){ + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_129"; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/ApplicationRegistrationHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/ApplicationRegistrationHandler.java new file mode 100644 index 0000000..15475f1 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/ApplicationRegistrationHandler.java @@ -0,0 +1,122 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.util.FileUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormExportUtil; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +//应聘登记审批结束新增人才库档案 +@Component +public class ApplicationRegistrationHandler extends FlowDataSyncHandler implements TalentDocUpdateHandler{ + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("应聘登记审批流程数据同步结束"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("人才档案新增", runStep(() -> addTalentDoc(map), "人才档案新增")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("应聘登记审批流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("应聘登记审批流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + String formNo = resMap.get("formCode"); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map displayMap = WeaverJsonUtils.getDisplayMap(source, templateMap); + displayMap.put("formNo",formNo); + return displayMap; + } + + private void bindAttachmentInfo(Map> mainFormTableAttachments,String formNo,String requestId) { + FormDataOperator formDataOperator = new FormDataOperator(); + List condiitonVo = new ArrayList<>(); + List updateFields = new ArrayList<>(); + String updateLoginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateLoginName); + String updateAccountName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateAccountName); + condiitonVo.add(FormWhereCondition.build().display("泛微请求ID").value(requestId)); + try { + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, condiitonVo); + if(formColumns == null || formColumns.size() == 0 ){ + throw new RuntimeException("未查询到人才档案记录"); + } + String formId = formColumns.get(0).getId(); + for (String fieldDisplay : mainFormTableAttachments.keySet()) { + List attachments = mainFormTableAttachments.get(fieldDisplay); + if(attachments == null || attachments.size() == 0) { + continue; + } + String refId = FileUtils.uploadFilesToOA(attachments,formId,updateLoginName,updateAccountName); + if(refId == null) { + continue; + } + updateFields.add(FormUpdateField.build().value(refId).display(fieldDisplay)); + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId))); + formDataOperator.updateMasterForm(formNo,updateFields,whereClause); + } catch (Exception e) { + log.error("写入附件信息失败,"+e.getMessage(),e); + } + } + + @Override + public void addTalentDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + String formNo = (String) source.get("formNo"); + String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + FormDataOperator formDataOperator = new FormDataOperator(); + Map> mainFormTableAttachments = formDataOperator.getMainFormTableAttachments(formNo,mainFormData); + mainFormData.put("人才状态","未面试"); + mainFormData.put("泛微请求ID",source.get("泛微请求ID")); + formDataOperator.handleEnumDeptEtc(mainFormData,formNo); + for (Map subFormData : subFormDatas) { + formDataOperator.handleSubTableEnumDeptEtc(subFormData,formNo); + } + FormExport formExport = new FormExport(); + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(mainFormData); + formExport.setValues(valueExport); + formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas)); + getFormFactory().importBusinessFormData(loginName,formNo , + formExport, new String[] {}); + bindAttachmentInfo(mainFormTableAttachments,formNo,(String)source.get("泛微请求ID")); + } + + @Override + public void updateTalentDoc(Map source) { + + } + + protected String getFormCode() { + return "formtable_main_132"; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchCloseDeptHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchCloseDeptHandler.java new file mode 100644 index 0000000..5ae2d2e --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchCloseDeptHandler.java @@ -0,0 +1,66 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.OrganizationMessage; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +@Component +public class BatchCloseDeptHandler extends FlowDataSyncHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirect orgManagerDirect; + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //批量将部门置为不可用,存在下级部门或部门中还有人员则不可关闭 + Map map = buildParamsMap(source); + List> subFormDatas = (List>) map.get("从表数据"); + List> deptInfoList = (List>) subFormDatas.get(0).get("subTable1"); + for (Map rowMap : deptInfoList) { + String dept = (String) rowMap.get("部门"); + List members = orgManager.getMembersByDepartment(Long.valueOf(dept), true); + if((members != null && members.size() > 0) || (orgManager.hasChildren(Long.valueOf(dept),true))){ + throw new BusinessException("部门中还有人员或存在下级部门,无法关闭"); + } + V3xOrgDepartment department = orgManager.getDepartmentById(Long.valueOf(dept)); + department.setEnabled(false); + OrganizationMessage organizationMessage = orgManagerDirect.updateDepartment(department); + if(!organizationMessage.isSuccess()) { + throw new BusinessException("部门关闭失败"); + } + } + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_167"; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchCreateDeptHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchCreateDeptHandler.java new file mode 100644 index 0000000..c69dadc --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchCreateDeptHandler.java @@ -0,0 +1,65 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.manager.OrgManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public class BatchCreateDeptHandler extends FlowDataSyncHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //批量增加就是新增部门如果选了上级部门就新建在该部门下,如果没选就建在分部下 + Map map = buildParamsMap(source); + List> subFormDatas = (List>) map.get("从表数据"); + List> deptInfoList = (List>) subFormDatas.get(0).get("subTable1"); + for (Map rowMap : deptInfoList) { + String deptName = (String) rowMap.get("部门"); + String unit = (String) rowMap.get("所属单位"); + String parentDept = (String) rowMap.get("上级部门"); + String isLevelOne = (String) rowMap.get("是否一级部门"); + V3xOrgDepartment department = new V3xOrgDepartment(); + department.setName(deptName); + department.setEnabled(true); + department.setOrgAccountId(Long.valueOf(unit)); + if(!"是".equals(isLevelOne)) { + department.setSuperior(Long.valueOf(parentDept)); + }else { + department.setSuperior(Long.valueOf(unit)); + } + orgManagerDirect.addDepartment(department); + } + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_166"; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchDeptTransferHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchDeptTransferHandler.java new file mode 100644 index 0000000..6cea1d7 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/BatchDeptTransferHandler.java @@ -0,0 +1,66 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgDepartmentService; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.manager.OrgManager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +@Component +public class BatchDeptTransferHandler extends FlowDataSyncHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private IReceiveOrgDepartmentService iReceiveOrgDepartmentService; + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + Map map = buildParamsMap(source); + Map mainFormData = (Map) map.get("主表数据"); + List> subFormDatas = (List>) map.get("从表数据"); + List> deptInfoList = (List>) subFormDatas.get(0).get("subTable1"); + for (Map rowMap : deptInfoList) { + JSONObject params = new JSONObject(); + String isLevelOneDept = (String) rowMap.get("是否一级部门"); + if("是".equals(isLevelOneDept)){ + params.put("id", rowMap.get("调动部门")); + params.put("orgAccountId",mainFormData.get("单位")); + params.put("superior",mainFormData.get("单位")); + }else { + params.put("id", rowMap.get("调动部门")); + params.put("orgAccountId",mainFormData.get("单位")); + params.put("superior",rowMap.get("调动后上级部门")); + } + ReceiveOrgMemberResponse receiveOrgMemberResponse = iReceiveOrgDepartmentService.updateDepartmentSpanAccount(params); + if(!receiveOrgMemberResponse.isSuccess()) { + throw new BusinessException("部门:" + rowMap.get("调动部门") + "调动失败," + receiveOrgMemberResponse.getMsg()); + } + } + } + + @Override + protected Map buildParamsMap(Map source){ + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_169"; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/ChangePersonInfoHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/ChangePersonInfoHandler.java new file mode 100644 index 0000000..c8bcb2a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/ChangePersonInfoHandler.java @@ -0,0 +1,159 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.FileUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormFieldType; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +@Component +public class ChangePersonInfoHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler,OrgMemberUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("个人信息变更流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("组织人员信息更新", runStep(() -> updateOrgMember(map), "组织人员信息更新")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("个人信息变更流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("个人信息变更流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_131"; + } + + @Override + public void addPersonnelDoc(Map source) throws ServiceException, BusinessException { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + String formCode = (String) source.get("formNo"); + Map mainFormData = (Map) source.get("主表数据"); + FormDataOperator formDataOperator = new FormDataOperator(); + formDataOperator.handleEnumDeptEtc(mainFormData,formCode); + List whereClause = new ArrayList<>(); + Long memberId = getLong(mainFormData.get("姓名")); + if(memberId == null) { + throw new RuntimeException("人员ID为空"); + } + String updateLoginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateLoginName); + String updateAccountName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateAccountName); + List conditionVo = new ArrayList<>(); + conditionVo.add(FormWhereCondition.build().display("姓名").value(memberId)); + List formColumns = formDataOperator.queryFormDataCondition(formCode, null, conditionVo); + if(formColumns == null || formColumns.size() == 0) { + throw new RuntimeException("人员档案信息不存在"); + } + String formId = formColumns.get(0).getId(); + whereClause.add(FormWhereCondition.build().display("ID").value(formId)); + mainFormData.remove("姓名"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formCode); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + List updateFields = new ArrayList<>(); + for (String key : mainFormData.keySet()) { + FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(key); + if(beanByDisplay == null) {continue;} + if(beanByDisplay.getInputType().equals("image") || beanByDisplay.getInputType().equals("attachment")) { + List attachments = (List) mainFormData.get(key); + try { + String refId = FileUtils.uploadFilesToOA(attachments, formId, updateLoginName, updateAccountName); + if(refId == null) { + continue; + } + updateFields.add(FormUpdateField.build().value(refId).display(key)); + } catch (Exception e) { + log.error("写入附件信息失败,"+e.getMessage(),e); + } + }else { + updateFields.add(FormUpdateField.build().value(mainFormData.get(key)).display(key)); + } + } + formDataOperator.updateMasterForm(formCode,updateFields,whereClause); + } + + @Override + public void addOrgMember(Map source) throws BusinessException { + + } + + @Override + public void updateOrgMember(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String mobile = (String)mainFormData.get("手机号"); + Long memberId = getLong(mainFormData.get("姓名")); + String xmText = (String)mainFormData.get("姓名文本"); + if(memberId == null) { + throw new BusinessException("姓名为空"); + } + //先判断登录名是否已存在,若存在则启用 + V3xOrgMember existMember = orgManager.getMemberById(memberId); + if(existMember == null) { + throw new RuntimeException("组织人员信息不存在"); + } + if(mobile != null && !mobile.equals(existMember.getTelNumber())) { + V3xOrgMember member = orgManager.getMemberByLoginName(mobile); + if(member != null) { + throw new BusinessException("该手机号已绑定账号"); + } + V3xOrgPrincipal v3xOrgPrincipal = existMember.getV3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(mobile); + existMember.setV3xOrgPrincipal(v3xOrgPrincipal); + existMember.setTelNumber(mobile); + } + existMember.setName(xmText); + orgManagerDirect.updateMember(existMember); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusAccountAssignHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusAccountAssignHandler.java new file mode 100644 index 0000000..15bb09a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusAccountAssignHandler.java @@ -0,0 +1,232 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.*; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +//客户账号分配 +@Component +public class CusAccountAssignHandler extends FlowDataSyncHandler implements OrgMemberUpdateHandler,PersonnelDocUpdateHandler{ + + private String updateLoginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateLoginName); + private String updateAccountName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.updateAccountName); + + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + @Autowired + private OrgManager orgManager; + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("客户账号分配流程数据同步开始"); + //组织架构下部门增加账号 + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("组织人员信息新增", runStep(() -> addOrgMember(map), "组织人员信息新增")); + results.put("人员档案新增", runStep(() -> addPersonnelDoc(map), "人员档案新增")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("客户账号分配流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("客户账号分配流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_152"; + } + + @Override + public void addOrgMember(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String loginName = (String) mainFormData.get("登录名"); + String pwd = (String) mainFormData.get("初始密码"); + String name = (String) mainFormData.get("姓名"); + String phone = (String) mainFormData.get("移动电话"); + Long dept = getLong(mainFormData.get("经销商")); + Long unit = getLong(mainFormData.get("所属单位")); + Long jobLevel = getLong(mainFormData.get("职务级别")); + Long post = getLong(mainFormData.get("岗位")); + String cusNo = (String)mainFormData.get("客户编码"); + V3xOrgMember member = orgManager.getMemberByLoginName(loginName); + if(member != null){ + mainFormData.put("人员ID",member.getId()); + log.warn("该人员账号已存在"); + return; + } + V3xOrgMember orgMember = new V3xOrgMember(); + orgMember.setName(name); + orgMember.setOrgDepartmentId(dept); + orgMember.setOrgPostId(post); + orgMember.setOrgAccountId(unit); + orgMember.setOrgLevelId(jobLevel); + orgMember.setIdIfNew(); + orgMember.setCode(cusNo); + orgMember.setTelNumber(phone); + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(loginName); + v3xOrgPrincipal.setMemberId(orgMember.getId()); + v3xOrgPrincipal.setPassword(pwd); + orgMember.setV3xOrgPrincipal(v3xOrgPrincipal); + orgManagerDirect.addMember(orgMember); + mainFormData.put("人员ID",orgMember.getId()); + } + + @Override + public void updateOrgMember(Map source) throws BusinessException { + } + + @Override + public void addPersonnelDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + Long dept = getLong(mainFormData.get("经销商")); + Long unit = getLong(mainFormData.get("所属单位")); + Long jobLevel = getLong(mainFormData.get("职务级别")); + String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + Long post = getLong(mainFormData.get("岗位")); + Map personData = new HashMap<>(); + String formNo = (String) source.get("formNo"); + personData.put("姓名文本",mainFormData.get("姓名")); + personData.put("手机号",mainFormData.get("移动电话")); + personData.put("身份证号码",mainFormData.get("身份证号码")); + personData.put("单位",unit); + personData.put("部门",dept); + personData.put("姓名",mainFormData.get("人员ID")); + personData.put("员工编号",mainFormData.get("员工编码")); + personData.put("岗位",post); + personData.put("职务级别",jobLevel); + personData.put("入职日期",mainFormData.get("经办日期")); + personData.put("性别",EnumMapUtils.getMasterTableEnumItemValue(formNo,"性别", (String) mainFormData.get("性别"))); + personData.put("人员分类",EnumMapUtils.getMasterTableEnumItemValue(formNo,"人员分类", (String) mainFormData.get("人员分类"))); + personData.put("员工状态", EnumMapUtils.getMasterTableEnumItemValue(formNo,"员工状态","在职")); + personData.put("所属区域",mainFormData.get("所属区域")); + personData.put("系统",EnumMapUtils.getMasterTableEnumItemValue(formNo,"系统", (String) mainFormData.get("营销"))); + addLlRecord(source); + List> subFormDatas = (List>) source.get("从表数据"); + FormExport formExport = new FormExport(); + List condiitonVo = new ArrayList<>(); + condiitonVo.add(FormWhereCondition.build().display("身份证号码").value(mainFormData.get("身份证号码"))); + FormDataOperator formDataOperator = new FormDataOperator(); + List formColumns = formDataOperator.queryFormDataCondition(formNo, null,condiitonVo); + if(formColumns != null && formColumns.size() > 0) { + List updateFields = new ArrayList<>(); + FormColumn formColumn = formColumns.get(0); + String formId = formColumn.getId(); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + for (String key : mainFormData.keySet()) { + FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(key); + if(beanByDisplay == null) { + continue; + } + if(beanByDisplay.getInputType().equals("image") || beanByDisplay.getInputType().equals("attachment")) { + try { + List attachments = (List) mainFormData.get(key); + if(attachments == null || attachments.size() == 0) { + continue; + } + String refId = FileUtils.uploadFilesToOA(attachments, formId, updateLoginName, updateAccountName); + if(refId == null) { + continue; + } + updateFields.add(FormUpdateField.build().value(refId).display(key)); + } catch (Exception e) { + e.printStackTrace(); + log.error("写入附件信息失败,"+e.getMessage()); + } + }else { + updateFields.add(FormUpdateField.build().value(mainFormData.get(key)).display(key)); + } + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("ID").value(Long.parseLong(formId))); + formDataOperator.updateMasterForm(formNo,updateFields,whereClause); + //追加从表数据 + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + if(formColumns != null) { + formDataOperator.addSubTableRecord(subTableName,(List)subDataMap.get(subTableName),formNo,formId); + } + }else { + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(personData); + formExport.setValues(valueExport); + formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas)); + getFormFactory().importBusinessFormData(loginName, formNo, + formExport, new String[] {}); + } + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = new ArrayList<>(); + String formNo = (String) source.get("formNo"); + Long dept = getLong(mainFormData.get("经销商")); + Long unit = getLong(mainFormData.get("所属单位")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long post = getLong(mainFormData.get("岗位")); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", mainFormData.get("经办日期")); + rowData.put("个人履历备注", "入职"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + source.put("从表数据", subFormDatas); + } + + @Override + public void updatePersonnelDoc(Map source) throws BusinessException { + + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusCreateAccountHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusCreateAccountHandler.java new file mode 100644 index 0000000..809beef --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusCreateAccountHandler.java @@ -0,0 +1,253 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.aicloud.common.JsonUtils; +import com.seeyon.apps.businessorganization.manager.BusinessDepartmentManager; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.EnumMapUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormExportUtil; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.OrganizationMessage; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +//客户开户 +@Component +public class CusCreateAccountHandler extends FlowDataSyncHandler implements OrgMemberUpdateHandler, CustomerDocUpdateHandler, PersonnelDocUpdateHandler { + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirect orgManagerDirect; + @Autowired + private OrgManagerDirectFacade orgManagerDirectFacade; + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //组织架构新增部门信息,部门下新增一个或多个人员信息,并设置登录名和密码,人员档案增加履历(写明是哪个公司),根据身份证号查询人员档案信息,若不存在则新增 + log.info("客户开户流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("组织人员信息新增", runStep(() -> addOrgMember(map), "组织人员信息新增")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + results.put("客户档案新增", runStep(() -> addCusDoc(map), "客户档案新增")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("客户账号分配流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_83"; + } + + @Override + public void addCusDoc(Map map) throws Exception { + Map mainFormData = (Map) map.get("主表数据"); + String formNo = (String) map.get("formNo"); + FormDataOperator formDataOperator = new FormDataOperator(); + String loginName = configProvider.getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + Long dept = (Long) mainFormData.get("部门"); + mainFormData.put("状态","正常"); + mainFormData.put("客户部门",dept); + formDataOperator.handleEnumDeptEtc(mainFormData,formNo); + FormExport formExport = new FormExport(); + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(mainFormData); + formExport.setValues(valueExport); +// formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas)); + getFormFactory().importBusinessFormData(loginName, formNo, + formExport, new String[] {}); +// bindAttachmentInfo(mainFormTableAttachments,formCode,(String)source.get("泛微请求ID")); + } + + @Override + public void updateCusDoc(Map map) { + + } + + @Override + public void addOrgMember(Map source) throws Exception { + //新建部门 + Map mainFormData = (Map) source.get("主表数据"); + String deptName = (String) mainFormData.get("客户名称"); + Long unit = getLong(mainFormData.get("单位")); + V3xOrgDepartment department = new V3xOrgDepartment(); + Integer sortId = orgManagerDirect.getMaxSortNum(V3xOrgDepartment.class.getSimpleName(), Long.valueOf(unit)); + department.setName(deptName); + Long pid = StringUtils.isBlank((String) mainFormData.get("上级部门")) ? getLong(mainFormData.get("单位")) : getLong(mainFormData.get("上级部门")); + department.setOrgAccountId(unit); + department.setSuperior(pid); + department.setSortId(Long.parseLong(sortId + "")); + String name = (String) mainFormData.get("法定代表人"); + String phone = (String) mainFormData.get("法人电话"); + String cusNo = (String) mainFormData.get("客户编码"); + Long gw = getLong(mainFormData.get("岗位")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + V3xOrgMember member = orgManager.getMemberByLoginName(phone); + String existDepartmentId = orgManagerDirectFacade.getExistDepartmentIdByName(department); + if(existDepartmentId == null) { + orgManagerDirectFacade.addDepartment(department); + }else { + department.setId(Long.valueOf(existDepartmentId)); + } + if(member != null) { + mainFormData.put("部门",department.getId()); + log.warn("该人员账号已存在"); + return; + } + //创建账号 + //新建OA人员对象 + V3xOrgMember orgMember = new V3xOrgMember(); + orgMember.setIdIfNew(); + orgMember.setState(1); + orgMember.setSortId(1L); + orgMember.setOrgDepartmentId(department.getId()); + orgMember.setOrgAccountId(unit); + orgMember.setOrgLevelId(orgLevel); + orgMember.setOrgPostId(gw); + V3xOrgPrincipal v3xOrgPrincipal = new V3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(phone); + v3xOrgPrincipal.setMemberId(orgMember.getId()); + v3xOrgPrincipal.setPassword("dhx123456"); + orgMember.setV3xOrgPrincipal(v3xOrgPrincipal); + orgMember.setName(name); + orgMember.setTelNumber(phone); + orgMember.setEnabled(true); + orgMember.setCode(cusNo); + orgManagerDirectFacade.addMember(orgMember); + mainFormData.put("部门",department.getId()); + } + + @Override + public void updateOrgMember(Map source) throws BusinessException { + + } + + @Override + public void addPersonnelDoc(Map source) throws ServiceException, BusinessException { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String legalPersonCardNo = (String) mainFormData.get("法人身份证号"); + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_115"); + String formNo = resMap.get("formCode"); + Map personDocMap = new HashMap<>(); + FormDataOperator formDataOperator = new FormDataOperator(); + personDocMap.put("身份证号码",legalPersonCardNo); + String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + String cusNo = (String) mainFormData.get("客户编码"); + addLlRecord(source); + List> subDatas = (List>) source.get("从表数据"); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("身份证号码").value(legalPersonCardNo)); + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, conditions); + if(formColumns != null && formColumns.size() > 0) { + if(subDatas != null && subDatas.size() > 0) { + Map subDataMap = subDatas.get(0); + for (String key : subDataMap.keySet()) { + formDataOperator.addSubTableRecord(key, (List) subDataMap.get(key),formNo,formColumns.get(0).getId()); + } + } + }else { +// personDocMap.put("职务级别",mainFormData.get("职务级别")); +// personDocMap.put("岗位",mainFormData.get("岗位")); +// personDocMap.put("所属区域",mainFormData.get("所属区域")); +// personDocMap.put("银行网点",mainFormData.get("开户银行")); +// personDocMap.put("银行账号",mainFormData.get("银行账户")); + personDocMap.put("员工编号",cusNo); + personDocMap.put("手机号",mainFormData.get("法人电话")); + personDocMap.put("人员分类",EnumMapUtils.getMasterTableEnumItemValue(formNo,"人员分类", (String) mainFormData.get("人员分类"))); + personDocMap.put("姓名文本",mainFormData.get("法定代表人")); + personDocMap.put("员工状态", EnumMapUtils.getMasterTableEnumItemValue(formNo,"员工状态","在职")); + personDocMap.put("系统",EnumMapUtils.getMasterTableEnumItemValue(formNo,"系统","营销")); + FormExport formExport = new FormExport(); + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(personDocMap); + formExport.setValues(valueExport); + formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subDatas)); + getFormFactory().importBusinessFormData(loginName, formNo, + formExport, new String[] {}); + } + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + List> subFormDatas = new ArrayList<>(); + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_115"); + String formNo = resMap.get("formCode"); + Long dept = (Long) mainFormData.get("部门"); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + String cusName = (String) mainFormData.get("客户名称"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", df.format(new Date())); + rowData.put("个人履历备注", cusName + "开户"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + source.put("从表数据", subFormDatas); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusFreezeHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusFreezeHandler.java new file mode 100644 index 0000000..e94007b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusFreezeHandler.java @@ -0,0 +1,75 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.util.EnumMapUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +//客户冻结 +@Component +public class CusFreezeHandler extends FlowDataSyncHandler implements CustomerDocUpdateHandler{ + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //客户档案状态改为冻结 + log.info("客户冻结流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("客户档案更新", runStep(() -> updateCusDoc(map), "客户档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("客户冻结流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("客户冻结流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_121"; + } + + @Override + public void addCusDoc(Map map) { + + } + + @Override + public void updateCusDoc(Map map) throws Exception { + Map mainFormData = (Map) map.get("主表数据"); + FormDataOperator formDataOperator = new FormDataOperator(); + String formNo = (String) map.get("formNo"); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("状态").value(EnumMapUtils.getMasterTableEnumItemValue(formNo,"状态","冻结"))); + updateFields.add(FormUpdateField.build().display("冻结日期").value(mainFormData.get("冻结日期"))); + updateFields.add(FormUpdateField.build().display("冻结原因").value(mainFormData.get("冻结原因"))); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("客户编码").value(mainFormData.get("客户编号"))); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusInfoChangeHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusInfoChangeHandler.java new file mode 100644 index 0000000..f8a46a6 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusInfoChangeHandler.java @@ -0,0 +1,245 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.EnumMapUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormExportUtil; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.OrganizationMessage; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.DepartmentManager; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.v3x.services.form.bean.FormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +//客户信息变更 +@Component +public class CusInfoChangeHandler extends FlowDataSyncHandler implements CustomerDocUpdateHandler,OrgMemberUpdateHandler,PersonnelDocUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + @Autowired + private DepartmentManager departmentManager; + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //修改客户档案信息 + log.info("客户信息变更流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("客户档案更新", runStep(() -> updateCusDoc(map), "客户档案更新")); + results.put("组织人员信息更新", runStep(() -> updateOrgMember(map), "组织人员信息更新")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("客户信息变更流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("客户信息变更流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_85"; + } + + @Override + public void addCusDoc(Map map) { + + } + + @Override + public void updateCusDoc(Map map) throws Exception { + Map mainFormData = (Map) map.get("主表数据"); + List updateFields = new ArrayList<>(); + String formNo = (String) map.get("formNo"); + FormDataOperator formDataOperator = new FormDataOperator(); + Set sets = mainFormData.keySet(); + for (String key : sets) { + if(key.equals("发起者部门") || key.equals("客户编号")) { + continue; + } + updateFields.add(FormUpdateField.build().display(key).value(mainFormData.get(key))); + } + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("客户编码").value(mainFormData.get("客户编号"))); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + } + + @Override + public void addOrgMember(Map source) throws BusinessException { + + } + + @Override + public void updateOrgMember(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String preEditedLegalPerson = (String) mainFormData.get("变更前法人"); + String postEditedLegalPerson = (String) mainFormData.get("法定代表人"); + Long fqzDept = getLong(mainFormData.get("发起者部门")); + String khlb = (String) mainFormData.get("客户老板"); +// String preEditedLegalPersonCardNo = (String) mainFormData.get("变更前身份证号"); +// String postEditedLegalPersonCardNo = (String) mainFormData.get("变更后身份证号"); + String preEditedDeptName = (String) mainFormData.get("变更前客户名称"); + String postEditedDeptName = (String) mainFormData.get("客户名称"); + String postEditedPhone = (String) mainFormData.get("法人电话"); + String preEditedPhone = (String) mainFormData.get("变更前法人手机号"); + V3xOrgMember member = orgManager.getMemberById(Long.parseLong(khlb)); + if(!preEditedPhone.equals(postEditedPhone) && postEditedPhone != null) { + member.setTelNumber(postEditedPhone); + member.setCode(postEditedPhone); + V3xOrgMember byLoginName = orgManager.getMemberByLoginName(postEditedPhone); + if(byLoginName != null) { + throw new RuntimeException("该手机号已绑定账号"); + } + V3xOrgPrincipal v3xOrgPrincipal = member.getV3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(postEditedPhone); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + } + if(!preEditedDeptName.equals(postEditedDeptName) && postEditedDeptName != null) { + V3xOrgDepartment department = departmentManager.getById(fqzDept); + department.setName(postEditedDeptName); + mainFormData.put("部门名称",postEditedDeptName); + orgManagerDirect.updateDepartment(department); + }else { + mainFormData.put("部门名称",preEditedDeptName); + } + if(postEditedLegalPerson != null && !preEditedLegalPerson.equals(postEditedLegalPerson)) { + member.setName(postEditedLegalPerson); + } + mainFormData.put("岗位",member.getOrgPostId()); + mainFormData.put("部门",member.getOrgDepartmentId()); + mainFormData.put("单位",member.getOrgAccountId()); + orgManagerDirect.updateMember(member); + } + + @Override + public void addPersonnelDoc(Map source) throws ServiceException, BusinessException { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String loginName = getConfigProvider().getBizConfigByKey(ReceiveFVFlowConstans.formDataLoginName); + FormDataOperator formDataOperator = new FormDataOperator(); + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_115"); + String formNo = resMap.get("formCode"); + String preEditedLegalPerson = (String) mainFormData.get("变更前法人"); + String postEditedLegalPerson = (String) mainFormData.get("法定代表人"); + String preEditedLegalPersonCardNo = (String) mainFormData.get("变更前身份证号"); + String postEditedLegalPersonCardNo = (String) mainFormData.get("法人身份证号"); + String postEditedPhone = (String) mainFormData.get("法人电话"); + String preEditedPhone = (String) mainFormData.get("变更前法人手机号"); + + if(postEditedLegalPersonCardNo != null && (preEditedLegalPersonCardNo == null || !preEditedLegalPersonCardNo.equals(postEditedLegalPersonCardNo))) { + Map personMap = new HashMap<>(); + personMap.put("岗位",mainFormData.get("岗位")); + personMap.put("单位",mainFormData.get("单位")); + personMap.put("部门",mainFormData.get("部门")); + personMap.put("部门名称",mainFormData.get("部门名称")); + personMap.put("姓名文本",postEditedLegalPerson); + personMap.put("身份证号码",postEditedLegalPersonCardNo); + personMap.put("员工状态", EnumMapUtils.getMasterTableEnumItemValue(formNo,"员工状态","入职")); + personMap.put("手机号",postEditedPhone != null && (preEditedPhone == null || !preEditedPhone.equals(postEditedPhone)) ? postEditedPhone : preEditedPhone); + addLlRecord(personMap); + List> subFormDatas = (List>) personMap.get("从表数据"); + FormExport formExport = new FormExport(); + FormExportUtil formExportUtil = new FormExportUtil(); + List valueExport = formExportUtil.setFormValue(mainFormData); + formExport.setValues(valueExport); + formExport.setSubordinateForms(formExportUtil.setAllSubordinateFormValue(subFormDatas)); + getFormFactory().importBusinessFormData(loginName, formNo, + formExport, new String[] {}); + }else { + List conditions = new ArrayList<>(); + List updateFields = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("身份证号码").value(preEditedLegalPersonCardNo)); + updateFields.add(FormUpdateField.build().display("手机号").value(postEditedPhone)); + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, conditions); + addLlRecord(mainFormData); + List> subFormDatas = (List>) mainFormData.get("从表数据"); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + if(formColumns != null && formColumns.size() > 0) { + String formId = formColumns.get(0).getId(); + formDataOperator.addSubTableRecord(subTableName, (List) subDataMap.get(subTableName),formNo,formId); + } + } + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + List> subFormDatas = new ArrayList<>(); + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_154"); + String formNo = resMap.get("formCode"); + Long dept = (Long) source.get("部门"); + Long orgLevel = (Long) source.get("职务级别"); + Long unit = (Long) source.get("单位"); + Long post = (Long) source.get("岗位"); + String cusName = (String) source.get("部门名称"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", df.format(new Date())); + rowData.put("个人履历备注", cusName + "信息变更"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + source.put("从表数据", subFormDatas); + + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusRelationMaintainHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusRelationMaintainHandler.java new file mode 100644 index 0000000..4379b82 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusRelationMaintainHandler.java @@ -0,0 +1,32 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.stereotype.Component; + +import java.util.Collections; +import java.util.Map; + +//客户关系维护 +@Component +public class CusRelationMaintainHandler extends FlowDataSyncHandler{ + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws ServiceException, BusinessException { + + } + + @Override + protected Map buildParamsMap(Map source) throws BusinessException { + return Collections.emptyMap(); + } + + @Override + protected String getFormCode() { + return ""; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusRevokedHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusRevokedHandler.java new file mode 100644 index 0000000..111d98b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusRevokedHandler.java @@ -0,0 +1,279 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.EnumMapUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormFieldVo; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +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.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.*; + +//客户销户 +@Component +public class CusRevokedHandler extends FlowDataSyncHandler implements CustomerDocUpdateHandler,OrgMemberUpdateHandler,PersonnelDocUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //客户档案状态改为销户,组织架构部门停用,部门下人员改为离职,人员档案增加履历 + log.info("客户销户流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("客户档案更新", runStep(() -> updateCusDoc(map), "客户档案更新")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + results.put("组织人员信息更新", runStep(() -> updateOrgMember(map), "组织人员信息更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("客户销户流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("客户销户流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_118"; + } + + @Override + public void addCusDoc(Map map) { + + } + + @Override + public void updateCusDoc(Map map) throws Exception { + Map mainFormData = (Map) map.get("主表数据"); + String cusNo = (String) mainFormData.get("客户编号"); + String formNo = (String) map.get("formNo"); + List updateFields = new ArrayList<>(); + List conditions = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("状态").value(EnumMapUtils.getMasterTableEnumItemValue(formNo,"状态","销户"))); + conditions.add(FormWhereCondition.build().display("客户编码").value(cusNo)); + FormDataOperator formDataOperator = new FormDataOperator(); + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, conditions); + if(formColumns != null && formColumns.size() > 0) { + for (FormFieldVo vo : formColumns.get(0).getVos()) { + if(vo.getDisplayName().equals("法人身份证号")) { + mainFormData.put("身份证号",vo.getValue()); + } + } + } + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + } + + @Override + public void addOrgMember(Map source) throws BusinessException { + + } + + @Override + public void updateOrgMember(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + Long dept = getLong(mainFormData.get("客户名称")); + V3xOrgDepartment department = orgManager.getDepartmentById(dept); + List members = orgManager.getMembersByDepartment(dept, true); + for (V3xOrgMember member : members) { + V3xOrgMember temp = orgManager.getMemberById(member.getId()); + temp.setState(2); + temp.setEnabled(false); + V3xOrgPrincipal v3xOrgPrincipal = temp.getV3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(null); + temp.setV3xOrgPrincipal(v3xOrgPrincipal); + temp.setCode(null); + orgManagerDirect.updateMember(temp); + } + department.setEnabled(false); + orgManagerDirect.updateDepartment(department); + } + + @Override + public void addPersonnelDoc(Map source) throws ServiceException, BusinessException { + + } + + private void updateLpDoc(String cardNo,Long deptId,String formNo) throws Exception { + FormDataOperator formDataOperator = new FormDataOperator(); + List updateFields = new ArrayList<>(); + FormUpdateField updateField = FormUpdateField.build().display("员工状态").value(EnumMapUtils.getMasterTableEnumItemValue(formNo, "员工状态", "离职")); + updateFields.add(updateField); + List conditions = new ArrayList<>(); + conditions.add(FormWhereCondition.build().display("身份证号码").value(cardNo)); + V3xOrgDepartment department = orgManager.getDepartmentById(deptId); + Map source = new HashMap<>(); + Map mainData = new HashMap<>(); + source.put("主表数据",mainData); + mainData.put("单位",department.getOrgAccountId() + ""); + mainData.put("部门",deptId + ""); + mainData.put("客户名称",department.getName()); + addLlRecord(source); + List> subFormDatas = (List>) source.get("从表数据"); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, conditions); + if(formColumns != null && formColumns.size() > 0) { + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + formDataOperator.addSubTableRecord(subTableName, (List) subDataMap.get(subTableName),formNo,formColumns.get(0).getId()); + } + } + + private void updateOtherDoc(Long deptId,String formNo) throws Exception{ + FormDataOperator formDataOperator = new FormDataOperator(); + List updateFields = new ArrayList<>(); + FormUpdateField updateField = FormUpdateField.build().display("员工状态").value(EnumMapUtils.getMasterTableEnumItemValue(formNo, "员工状态", "离职")); + updateFields.add(updateField); + List conditions = new ArrayList<>(); + Map source = new HashMap<>(); + Map mainData = new HashMap<>(); + List members = orgManager.getMembersByDepartment(deptId, true); + for (V3xOrgMember member : members) { + String post = member.getOrgPostId() + ""; + String orgLevel = member.getOrgLevelId() + ""; + source.clear(); + mainData.clear(); + conditions.clear(); + source.put("主表数据",mainData); + mainData.put("单位",member.getOrgAccountId() + ""); + mainData.put("部门",deptId + ""); + mainData.put("岗位",post); + mainData.put("职务级别",orgLevel); + addLlRecord(source); + List> subFormDatas = (List>) source.get("从表数据"); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + conditions.add(FormWhereCondition.build().display("姓名").value(member.getId())); + updateFields.add(updateField); + List formColumnList = formDataOperator.queryFormDataCondition(formNo, null, conditions); + if(formColumnList != null && formColumnList.size() > 0) { + String id = formColumnList.get(0).getId(); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + formDataOperator.addSubTableRecord(subTableName, (List) subDataMap.get(subTableName),formNo,id); + } + } + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + Long dept = getLong(mainFormData.get("客户名称")); + String cardNo = (String) mainFormData.get("身份证号"); + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_115"); + String formNo = resMap.get("formCode"); +// updateLpDoc(cardNo,dept,formNo); +// updateOtherDoc(dept,formNo); + FormDataOperator formDataOperator = new FormDataOperator(); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("员工状态").value(EnumMapUtils.getMasterTableEnumItemValue(formNo, "员工状态", "离职"))); + updateFields.add(FormUpdateField.build().display("离职日期").value(mainFormData.get("离职日期"))); + List conditions = new ArrayList<>(); + Map sourceT = new HashMap<>(); + Map mainData = new HashMap<>(); + List members = orgManager.getMembersByDepartment(dept, true); + for (V3xOrgMember member : members) { + String post = member.getOrgPostId() + ""; + String orgLevel = member.getOrgLevelId() + ""; + sourceT.clear(); + mainData.clear(); + conditions.clear(); + sourceT.put("主表数据",mainData); + mainData.put("单位",member.getOrgAccountId() + ""); + mainData.put("部门",dept + ""); + mainData.put("岗位",post); + mainData.put("职务级别",orgLevel); + mainData.put("销户日期",mainData.get("销户日期")); + addLlRecord(sourceT); + List> subFormDatas = (List>) sourceT.get("从表数据"); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + conditions.add(FormWhereCondition.build().display("姓名").value(member.getId())); + List formColumnList = formDataOperator.queryFormDataCondition(formNo, null, conditions); + if(formColumnList != null && formColumnList.size() > 0) { + String id = formColumnList.get(0).getId(); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + formDataOperator.addSubTableRecord(subTableName, (List) subDataMap.get(subTableName),formNo,id); + }else { + conditions.clear(); + conditions.add(FormWhereCondition.build().display("身份证号码").value(cardNo)); + formColumnList = formDataOperator.queryFormDataCondition(formNo, null, conditions); + if(formColumnList != null && formColumnList.size() > 0) { + String id = formColumnList.get(0).getId(); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + formDataOperator.addSubTableRecord(subTableName, (List) subDataMap.get(subTableName),formNo,id); + } + } + } + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = new ArrayList<>(); + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_115"); + String formNo = resMap.get("formCode"); + Long dept = getLong(mainFormData.get("部门")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + String cusName = (String) mainFormData.get("客户名称"); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", mainFormData.get("销户日期")); + rowData.put("个人履历备注", cusName == null ? "离职" : "销户"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + source.put("从表数据", subFormDatas); + + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusUnfreezeHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusUnfreezeHandler.java new file mode 100644 index 0000000..cd1ce7b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CusUnfreezeHandler.java @@ -0,0 +1,76 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.util.EnumMapUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +//客户解冻 +@Component +public class CusUnfreezeHandler extends FlowDataSyncHandler implements CustomerDocUpdateHandler{ + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + //客户档案状态改为正常 + log.info("客户解冻流程数据同步开始"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("客户档案更新", runStep(() -> updateCusDoc(map), "客户档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("客户解冻流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("客户解冻流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map formatMap = WeaverJsonUtils.getDisplayMap(source,templateMap); + String formNo = resMap.get("formCode"); + formatMap.put("formNo",formNo); + return formatMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_123"; + } + + @Override + public void addCusDoc(Map map) { + + } + + @Override + public void updateCusDoc(Map map) throws Exception { + String formNo = (String) map.get("formNo"); + Map mainFormData = (Map) map.get("主表数据"); + FormDataOperator formDataOperator = new FormDataOperator(); + List updateFields = new ArrayList<>(); + List conditions = new ArrayList<>(); + updateFields.add(FormUpdateField.build().display("状态").value(EnumMapUtils.getMasterTableEnumItemValue(formNo,"状态","正常"))); + updateFields.add(FormUpdateField.build().display("冻结时间").value(mainFormData.get("冻结日期"))); + updateFields.add(FormUpdateField.build().display("冻结原因").value(mainFormData.get("冻结原因"))); + updateFields.add(FormUpdateField.build().display("解冻原因").value(mainFormData.get("解冻原因"))); + conditions.add(FormWhereCondition.build().display("客户编码").value(mainFormData.get("客户编号"))); + formDataOperator.updateMasterForm(formNo,updateFields,conditions); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CustomerDocUpdateHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CustomerDocUpdateHandler.java new file mode 100644 index 0000000..7ece98b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/CustomerDocUpdateHandler.java @@ -0,0 +1,11 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; + +import java.util.Map; + +public interface CustomerDocUpdateHandler { + void addCusDoc(Map map) throws Exception; + void updateCusDoc(Map map) throws Exception; +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/EmploymentApprovalHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/EmploymentApprovalHandler.java new file mode 100644 index 0000000..b93ebf7 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/EmploymentApprovalHandler.java @@ -0,0 +1,82 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormFieldType; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.stereotype.Component; + +import java.util.*; + +//录用审批结束修改人才库档案 +@Component +public class EmploymentApprovalHandler extends FlowDataSyncHandler implements TalentDocUpdateHandler{ + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("开始同步录用审批流程数据"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("人才档案更新", runStep(() -> updateTalentDoc(map), "人才档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("录用审批流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("录用审批流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + String formNo = resMap.get("formCode"); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map displayMap = WeaverJsonUtils.getDisplayMap(source, templateMap); + displayMap.put("formNo",formNo); + return displayMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_116"; + } + + @Override + public void addTalentDoc(Map source) throws ServiceException { + + } + + @Override + public void updateTalentDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + String formNo = (String) source.get("formNo"); + FormDataOperator formDataOperator = new FormDataOperator(); + mainFormData.put("人才状态","拟录用"); + formDataOperator.handleEnumDeptEtc(mainFormData,formNo); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().value(mainFormData.get("人才状态")).display("人才状态")); + for (Map formData : subFormDatas) { + String table = formData.keySet().iterator().next(); + List> list = (List>)formData.get(table); + for (Map map : list) { + String ypbh = (String)map.get("应聘编号"); + if(ypbh != null) { + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().display("应聘编号").value(ypbh)); + formDataOperator.updateMasterForm(formNo, updateFields, whereClause); + } + } + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/FlowDataSyncHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/FlowDataSyncHandler.java new file mode 100644 index 0000000..bf5e410 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/FlowDataSyncHandler.java @@ -0,0 +1,90 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + + +import cn.hutool.log.Log; +import com.seeyon.apps.src_receiveFVFlow.config.RfvfPluginConfigProvider; +import com.seeyon.apps.src_receiveFVFlow.dao.IReceiveFVFlowDao; +import com.seeyon.apps.src_receiveFVFlow.indexinterface.StepTask; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.v3x.services.form.FormFactory; + +import java.util.Map; + +public abstract class FlowDataSyncHandler { + protected Log log = Log.get(FlowDataSyncHandler.class); + public abstract boolean support(String flowName); + public abstract void process(Map source) throws Exception; + protected abstract Map buildParamsMap(Map source) throws BusinessException; + protected RfvfPluginConfigProvider configProvider = (RfvfPluginConfigProvider) AppContext.getBean("rfvfPluginConfigProvider"); + private IReceiveFVFlowDao receiveFVFlowDao; + private FormFactory formFactory; + private FormApi4Cap4 formApi4Cap4 = null; + protected String respJsonLineSeparatorForJson = System.lineSeparator() + .replace("\n", "\\u000A") + .replace("\r", "\\u000D"); + + public Long getLong(Object source) { + if(source instanceof Long) { + return (Long)source; + }else if(source instanceof String) { + try { + return Long.parseLong((String)source); + }catch (Exception e) { + System.out.println(e.getMessage()); + log.error(e.getMessage(),e); + } + } + return null; + } + + public FormApi4Cap4 getFormApi4Cap4() { + if (this.formApi4Cap4 == null) { + this.formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + } + + return this.formApi4Cap4; + } + + public IReceiveFVFlowDao getReceiveFVFlowDao() { + if (receiveFVFlowDao == null) { + receiveFVFlowDao = (IReceiveFVFlowDao) AppContext.getBean("receiveFVFlowDao"); + } + return receiveFVFlowDao; + } + public void setReceiveFVFlowDao(IReceiveFVFlowDao receiveFVFlowDao) { + this.receiveFVFlowDao = receiveFVFlowDao; + } + public RfvfPluginConfigProvider getConfigProvider() { + return configProvider; + } + + public void setConfigProvider(RfvfPluginConfigProvider configProvider) { + this.configProvider = configProvider; + } + public FormFactory getFormFactory() { + if (formFactory == null) { + formFactory = (FormFactory) AppContext.getBean("formFactory"); + } + return formFactory; + } + public void setFormFactory(FormFactory formFactory) { + this.formFactory = formFactory; + } + + protected abstract String getFormCode(); + + /** 统一执行步骤 */ + public boolean runStep(StepTask step, String stepName) { + try { + step.run(); + log.info("{}成功", stepName); + return true; + } catch (Exception e) { + log.error(e,"{}失败:", stepName); + log.error(e.getMessage(),e); + return false; + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/NormalResignationHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/NormalResignationHandler.java new file mode 100644 index 0000000..dd56730 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/NormalResignationHandler.java @@ -0,0 +1,188 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.EnumMapUtils; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormFieldType; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.bo.V3xOrgPrincipal; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import com.seeyon.ctp.services.ServiceException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +//正常离职 +@Component +public class NormalResignationHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler,OrgMemberUpdateHandler,TalentDocUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("开始同步正常离职流程数据"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("构建履历记录", runStep(() -> addLlRecord(map), "构建履历记录")); + results.put("更新组织人员信息", runStep(() -> updateOrgMember(map), "更新组织人员信息")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + results.put("人才档案更新", runStep(() -> updateTalentDoc(map), "人才档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("正常离职流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("正常离职流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + //修改人员档案、修改组织架构人员信息 + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + String formNo = resMap.get("formCode"); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map displayMap = WeaverJsonUtils.getDisplayMap(source, templateMap); + displayMap.put("formNo",formNo); + return displayMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_113"; + } + + @Override + public void addOrgMember(Map source) { + + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = new ArrayList<>(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String formNo = (String) source.get("formNo"); + Long dept = getLong(mainFormData.get("部门")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", mainFormData.get("离职日期")); + rowData.put("个人履历备注", "离职"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + source.put("从表数据", subFormDatas); + + } + + @Override + public void updateOrgMember(Map source) throws Exception { + //先查询组织架构人员信息是否存在,若不存在则报错,存在则更新 + Map mainFormData = (Map) source.get("主表数据"); + String uid = mainFormData.get("姓名") + ""; //人员ID + V3xOrgMember member = orgManager.getMemberById(Long.parseLong(uid)); + if(member == null) { + throw new RuntimeException("组织架构人员信息不存在"); + } + member.setState(2); + member.setEnabled(false); + V3xOrgPrincipal v3xOrgPrincipal = member.getV3xOrgPrincipal(); + v3xOrgPrincipal.setLoginName(null); + member.setV3xOrgPrincipal(v3xOrgPrincipal); + member.setCode(null); + orgManagerDirect.updateMember(member); + } + + @Override + public void addPersonnelDoc(Map source) { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + String formNo = (String) source.get("formNo"); + Map mainFormData = (Map) source.get("主表数据"); + mainFormData.put("员工状态","离职"); + FormDataOperator operator = new FormDataOperator(); + operator.handleEnumDeptEtc(mainFormData,formNo); + List updateFields = new ArrayList<>(); + List> subFormDatas = (List>) source.get("从表数据"); + String leaveDate = mainFormData.get("离职日期") + ""; //预计离职时间 + String employeeState = mainFormData.get("员工状态") + ""; //人员状态 + updateFields.add(FormUpdateField.build().value(employeeState).display("员工状态")); + updateFields.add(FormUpdateField.build().value(leaveDate).display("离职日期")); + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().value(mainFormData.get("姓名")).display("姓名")); + operator.updateMasterForm(formNo,updateFields,whereClause); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + List formColumns = operator.queryFormDataCondition(formNo, null, whereClause); + if(formColumns != null && formColumns.size() > 0 && subDataMap.get(subTableName) != null) { + operator.addSubTableRecord(subTableName,(List)subDataMap.get(subTableName),formNo,formColumns.get(0).getId()); + } + } + + @Override + public void addTalentDoc(Map source) throws ServiceException, BusinessException { + + } + + @Override + public void updateTalentDoc(Map source) throws Exception { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode("formtable_main_132"); + String formNo = resMap.get("formCode"); + FormDataOperator formDataOperator = new FormDataOperator(); + Map mainFormData = (Map) source.get("主表数据"); + String telPhone = (String) mainFormData.get("手机号"); + Map temp = new HashMap<>(); + temp.put("人才状态","已离职"); + formDataOperator.handleEnumDeptEtc(temp,formNo); + List updateFields = new ArrayList<>(); + updateFields.add(FormUpdateField.build().value(temp.get("人才状态")).value("人才状态")); + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().value(telPhone).display("手机")); + formDataOperator.updateMasterForm(formNo, updateFields, whereClause); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/OrgMemberUpdateHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/OrgMemberUpdateHandler.java new file mode 100644 index 0000000..dcbca15 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/OrgMemberUpdateHandler.java @@ -0,0 +1,10 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.seeyon.ctp.common.exceptions.BusinessException; + +import java.util.Map; + +public interface OrgMemberUpdateHandler { + void addOrgMember(Map source) throws Exception; + void updateOrgMember(Map source) throws Exception; +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/PersonnelDocUpdateHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/PersonnelDocUpdateHandler.java new file mode 100644 index 0000000..bcc856b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/PersonnelDocUpdateHandler.java @@ -0,0 +1,11 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; + +import java.util.Map; + +public interface PersonnelDocUpdateHandler { + void addPersonnelDoc(Map source) throws Exception; + void updatePersonnelDoc(Map source) throws Exception; +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/RegularizationFlowApprovalHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/RegularizationFlowApprovalHandler.java new file mode 100644 index 0000000..de04a65 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/RegularizationFlowApprovalHandler.java @@ -0,0 +1,81 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormFieldType; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import org.springframework.stereotype.Component; + + +import java.util.*; + +//转正流程 +@Component +public class RegularizationFlowApprovalHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler{ + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("开始同步转正流程数据"); + Map map = buildParamsMap(source); + Map results = new LinkedHashMap<>(); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("转正流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("转正流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + String formNo = resMap.get("formCode"); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map displayMap = WeaverJsonUtils.getDisplayMap(source, templateMap); + displayMap.put("formNo",formNo); + return displayMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_112"; + } + + @Override + public void addPersonnelDoc(Map source) { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String formNo = (String) source.get("formNo"); + FormDataOperator formDataOperator = new FormDataOperator(); + List updateFields = new ArrayList<>(); + String state = (String) mainFormData.get("人事部意见"); + + if(state.equals("转正")) { + mainFormData.put("员工状态","在职"); + formDataOperator.handleEnumDeptEtc(mainFormData, formNo); + updateFields.add(FormUpdateField.build().value(mainFormData.get("转正日期")).display("转正日期")); + updateFields.add(FormUpdateField.build().value(mainFormData.get("员工状态")).display("员工状态")); + }else if(state.equals("延长试用期")) { + updateFields.add(FormUpdateField.build().value(mainFormData.get("试用期延长后日期")).display("转正日期")); + }else if(state.equals("不予录用")) { + return; + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().value(mainFormData.get("姓名")).display("姓名")); + formDataOperator.updateMasterForm(formNo, updateFields, whereClause); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/TalentDocUpdateHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/TalentDocUpdateHandler.java new file mode 100644 index 0000000..71d412a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/TalentDocUpdateHandler.java @@ -0,0 +1,11 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.services.ServiceException; + +import java.util.Map; + +public interface TalentDocUpdateHandler { + void addTalentDoc(Map source) throws Exception; + void updateTalentDoc(Map source) throws Exception; +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/TransferApprovalHandler.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/TransferApprovalHandler.java new file mode 100644 index 0000000..14899a5 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/handler/TransferApprovalHandler.java @@ -0,0 +1,167 @@ +package com.seeyon.apps.src_receiveFVFlow.handler; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.org.OrgManagerDirectFacade; +import com.seeyon.apps.src_receiveFVFlow.util.FormColumn; +import com.seeyon.apps.src_receiveFVFlow.util.FormDataOperator; +import com.seeyon.apps.src_receiveFVFlow.util.FormFieldType; +import com.seeyon.apps.src_receiveFVFlow.util.FormUpdateField; +import com.seeyon.apps.src_receiveFVFlow.util.FormWhereCondition; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; + +//调动 +@Component +public class TransferApprovalHandler extends FlowDataSyncHandler implements PersonnelDocUpdateHandler,OrgMemberUpdateHandler{ + + @Autowired + private OrgManager orgManager; + @Autowired + private OrgManagerDirectFacade orgManagerDirect; + + @Override + public boolean support(String flowName) { + return getFormCode().equals(flowName); + } + + @Override + public void process(Map source) throws Exception { + log.info("开始同步调动流程数据"); + Map map = buildParamsMap(source); + addLlRecord(map); + updatePersonnelDoc(map); + updateOrgMember(map); + Map results = new LinkedHashMap<>(); + results.put("构建履历信息", runStep(() -> addLlRecord(map), "构建履历信息")); + results.put("人员档案更新", runStep(() -> updatePersonnelDoc(map), "人员档案更新")); + results.put("更新组织人员信息", runStep(() -> updateOrgMember(map), "更新组织人员信息")); + // 检查结果 + if (results.containsValue(false)) { + StringBuilder errorMsg = new StringBuilder("调动流程数据同步失败:" + respJsonLineSeparatorForJson); + results.forEach((k, v) -> errorMsg.append(k).append(v ? " ✅ 成功" : " ❌ 失败").append(respJsonLineSeparatorForJson)); + throw new RuntimeException(errorMsg.toString()); + } + log.info("调动流程数据同步结束"); + } + + @Override + protected Map buildParamsMap(Map source) { + //修改人员档案、修改组织架构人员信息 + Map resMap = getReceiveFVFlowDao().getTemplateJsonByFormCode(getFormCode()); + String formNo = resMap.get("formCode"); + Map templateMap = JSONObject.parseObject(resMap.get("templateJson"),Map.class); + Map displayMap = WeaverJsonUtils.getDisplayMap(source, templateMap); + displayMap.put("formNo",formNo); + return displayMap; + } + + @Override + protected String getFormCode() { + return "formtable_main_114"; + } + + @Override + public void addOrgMember(Map source) { + + } + + @Override + public void updateOrgMember(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + String uid = (String) mainFormData.get("姓名"); + Long dept = getLong(mainFormData.get("部门")) ; + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + V3xOrgMember member = orgManager.getMemberById(Long.parseLong(uid)); + if(member == null) { + throw new RuntimeException("组织架构人员信息不存在"); + } + member.setOrgDepartmentId(dept); + if(orgLevel != null) { + member.setOrgLevelId(orgLevel); + } + member.setOrgAccountId(unit); + member.setOrgPostId(post); + orgManagerDirect.updateMember(member); + } + + @Override + public void addPersonnelDoc(Map source) { + + } + + @Override + public void updatePersonnelDoc(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + String formNo = (String) source.get("formNo"); + FormDataOperator formDataOperator = new FormDataOperator(); + List updateFields = new ArrayList<>(); + formDataOperator.handleEnumDeptEtc(mainFormData,formNo); + updateFields.add(FormUpdateField.build().value(mainFormData.get("部门")).display("部门")); + updateFields.add(FormUpdateField.build().value(mainFormData.get("岗位")).display("岗位")); + updateFields.add(FormUpdateField.build().value(mainFormData.get("单位")).display("单位")); + updateFields.add(FormUpdateField.build().value(mainFormData.get("服务客户")).display("服务客户")); + updateFields.add(FormUpdateField.build().value(mainFormData.get("所属区域")).display("所属区域")); + if(mainFormData.get("职务级别") != null) { + updateFields.add(FormUpdateField.build().value(mainFormData.get("职务级别")).display("职务级别")); + } + List whereClause = new ArrayList<>(); + whereClause.add(FormWhereCondition.build().value(mainFormData.get("姓名")).display("姓名")); + formDataOperator.updateMasterForm(formNo, updateFields, whereClause); + Map subDataMap = subFormDatas.get(0); + String subTableName = subDataMap.keySet().iterator().next(); + List formColumns = formDataOperator.queryFormDataCondition(formNo, null, whereClause); + if(formColumns != null && formColumns.size() > 0) { + formDataOperator.addSubTableRecord(subTableName,(List)subDataMap.get(subTableName),formNo,formColumns.get(0).getId()); + } + } + + //增加履历记录 + private void addLlRecord(Map source) throws Exception { + Map mainFormData = (Map) source.get("主表数据"); + List> subFormDatas = (List>) source.get("从表数据"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + String formNo = (String) source.get("formNo"); + Long dept = getLong(mainFormData.get("部门")); + Long orgLevel = getLong(mainFormData.get("职务级别")); + Long unit = getLong(mainFormData.get("单位")); + Long post = getLong(mainFormData.get("岗位")); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean llBean = null; + for (FormTableBean tableBean : cap4FormBean.getSubTableBean()) { + if (tableBean.getDisplay().contains("个人履历")) { + llBean = tableBean; + break; + } + } + String dbTableName = llBean.getTableName(); + List> list = new ArrayList<>(); + Map rowData = new HashMap<>(); + rowData.put("个人履历单位", unit); + rowData.put("个人履历部门", dept); + rowData.put("个人履历岗位", post); + rowData.put("个人履历职务级别", orgLevel); + rowData.put("个人履历日期", df.format(new Date())); + rowData.put("个人履历备注", "调动"); + list.add(rowData); + Map llTableData = new HashMap<>(); + llTableData.put(dbTableName, list); + subFormDatas.add(llTableData); + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/indexinterface/StepTask.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/indexinterface/StepTask.java new file mode 100644 index 0000000..c16e4dd --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/indexinterface/StepTask.java @@ -0,0 +1,6 @@ +package com.seeyon.apps.src_receiveFVFlow.indexinterface; + +@FunctionalInterface +public interface StepTask { + void run() throws Exception; +} \ No newline at end of file diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/org/OrgManagerDirectFacade.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/org/OrgManagerDirectFacade.java new file mode 100644 index 0000000..32ca9f2 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/org/OrgManagerDirectFacade.java @@ -0,0 +1,75 @@ +package com.seeyon.apps.src_receiveFVFlow.org; + +import cn.hutool.log.Log; +import com.seeyon.aicloud.common.JsonUtils; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.organization.bo.OrganizationMessage; +import com.seeyon.ctp.organization.bo.V3xOrgDepartment; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManagerDirect; +import com.seeyon.ctp.util.JDBCAgent; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Component +public class OrgManagerDirectFacade { + + @Autowired + private OrgManagerDirect orgManagerDirect; + private static final Log log = Log.get(OrgManagerDirectFacade.class); + + public void updateMember(V3xOrgMember orgMember) throws BusinessException { + OrganizationMessage organizationMessage = orgManagerDirect.updateMember(orgMember); + log.info("修改人员信息结果: " + JsonUtils.toJSONString(organizationMessage)); + if(!organizationMessage.isSuccess()) { + throw new BusinessException(JsonUtils.toJSONString(organizationMessage.getErrorMsgInfos())); + } + } + + public void updateDepartment(V3xOrgDepartment department) throws BusinessException { + OrganizationMessage organizationMessage = orgManagerDirect.updateDepartment(department); + log.info("修改部门信息结果: " + JsonUtils.toJSONString(organizationMessage)); + if(!organizationMessage.isSuccess()) { + throw new BusinessException(JsonUtils.toJSONString(organizationMessage.getErrorMsgInfos())); + } + } + + public void addMember(V3xOrgMember orgMember) throws BusinessException { + OrganizationMessage organizationMessage = orgManagerDirect.addMember(orgMember); + log.info("添加人员信息结果: " + JsonUtils.toJSONString(organizationMessage)); + if(!organizationMessage.isSuccess()) { + throw new BusinessException(JsonUtils.toJSONString(organizationMessage.getErrorMsgInfos())); + } + } + + public void addDepartment(V3xOrgDepartment department) throws BusinessException { + OrganizationMessage organizationMessage = orgManagerDirect.addDepartment(department); + log.info("添加部门信息结果: " + JsonUtils.toJSONString(organizationMessage)); + if(!organizationMessage.isSuccess()) { + throw new BusinessException(JsonUtils.toJSONString(organizationMessage.getErrorMsgInfos())); + } + } + + public String getExistDepartmentIdByName(V3xOrgDepartment department) { + String sql = "SELECT * FROM ORG_UNIT WHERE `NAME` = ? AND `ORG_ACCOUNT_ID` = ? "; + try (JDBCAgent agent = new JDBCAgent()){ + List params = new ArrayList<>(); + params.add(department.getName()); + params.add(department.getOrgAccountId()); + agent.execute(sql,params); + List list = agent.resultSetToList(); + if(list != null && list.size() > 0) { + Map objectMap = (Map) list.get(0); + return objectMap.get("id") + ""; + } + }catch (Exception e) { + + } + return null; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/service/IReceiveFVFlowService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/service/IReceiveFVFlowService.java new file mode 100644 index 0000000..5f8119a --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/service/IReceiveFVFlowService.java @@ -0,0 +1,16 @@ +package com.seeyon.apps.src_receiveFVFlow.service; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.vo.ReceiveFVFlowResponse; +import com.seeyon.ctp.services.ServiceException; + +public interface IReceiveFVFlowService { + + + /** + * 客户服务平台流程结束操作主数据平台信息 + * @param flowData + * @return + */ + public ReceiveFVFlowResponse createFormData(JSONObject flowData); +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/service/impl/ReceiveFVFlowService.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/service/impl/ReceiveFVFlowService.java new file mode 100644 index 0000000..9fb744e --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/service/impl/ReceiveFVFlowService.java @@ -0,0 +1,98 @@ +package com.seeyon.apps.src_receiveFVFlow.service.impl; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.common.config.ICstConfigApi; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.apps.src_receiveFVFlow.dao.IReceiveFVFlowDao; +import com.seeyon.apps.src_receiveFVFlow.handler.FlowDataSyncHandler; +import com.seeyon.apps.src_receiveFVFlow.service.IReceiveFVFlowService; +import com.seeyon.apps.src_receiveFVFlow.util.WeaverJsonUtils; +import com.seeyon.apps.src_receiveFVFlow.vo.ReceiveFVFlowResponse; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.v3x.services.form.FormFactory; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.inject.Inject; +import java.util.*; + +public class ReceiveFVFlowService implements IReceiveFVFlowService { + + @Inject + private ICstConfigApi cstConfigApi; + @Autowired + private List syncHandlers; + + private static final Log log = Log.get(ReceiveFVFlowService.class); + + private FormFactory formFactory; + public FormFactory getFormFactory() { + if (formFactory == null) { + formFactory = (FormFactory) AppContext.getBean("formFactory"); + } + return formFactory; + } + public void setFormFactory(FormFactory formFactory) { + this.formFactory = formFactory; + } + + private IReceiveFVFlowDao receiveFVFlowDao; + public IReceiveFVFlowDao getReceiveFVFlowDao() { + if (receiveFVFlowDao == null) { + receiveFVFlowDao = (IReceiveFVFlowDao) AppContext.getBean("receiveFVFlowDao"); + } + return receiveFVFlowDao; + } + public void setReceiveFVFlowDao(IReceiveFVFlowDao receiveFVFlowDao) { + this.receiveFVFlowDao = receiveFVFlowDao; + } + + + private EnumManager enumManagerNew; + public void setEnumManagerNew(EnumManager enumManagerNew) {this.enumManagerNew = enumManagerNew; } + public EnumManager getEnumManagerNew() { + if (enumManagerNew == null) {enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew");}return enumManagerNew; + } + + @Override + public ReceiveFVFlowResponse createFormData(JSONObject flowData) { + JSONObject resjson = new JSONObject(); + // 根据流程ID获取流程数据 + try{ + Map standardizededJsonMap = WeaverJsonUtils.standardizedJson(flowData.toString()); + //获取泛微流程表单编号 + String formCode = (String) standardizededJsonMap.get("formCode"); + log.info("当前流程类型为: " + formCode); + for (FlowDataSyncHandler handler : syncHandlers) { + if(handler.support(formCode)) { + handler.process(standardizededJsonMap); + resjson.put("status","1"); + resjson.put("msg","成功"); + resjson.put("data",""); + ReceiveFVFlowResponse response = new ReceiveFVFlowResponse(resjson); + return response; + } + } + throw new RuntimeException("未匹配到对应的处理器"); + }catch (Exception e){ + log.error(e.getMessage(),e); + resjson.put("status","2"); + resjson.put("msg","OA处理异常:"+e); + resjson.put("data",""); + ReceiveFVFlowResponse response = new ReceiveFVFlowResponse(resjson); + return response; + } + } + + +// 1.应聘人员登记流程(新增档案表) +// 2.人员入职流程(先进行组织架构新增-->进行人员档案表新增) +// 3.人员转正流程(根据选人控件人员ID查询档案表信息,修改人员状态) +// 4.人员调用流程(根据选人控件人员ID,修改组织架构人员信息,修改人员档案表信息) +// 5.人员离职流程(根据选人控件人员ID,修改组织架构人员信息,修改人员档案表信息) + public String getPluginId() { + return ReceiveFVFlowConstans.getPluginId(); + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/ClauseFactor.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/ClauseFactor.java new file mode 100644 index 0000000..5b9fa22 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/ClauseFactor.java @@ -0,0 +1,19 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +public enum ClauseFactor { + EQ, //相等 + GT, //大于 + GE, //大于等于 + LT, //小于 + LE, //小于等于 + NULL, //空 + NOT_NULL, //非空 + LIKE, //模糊 + AND, + OR + ; + + public boolean isNullType() { + return this == NULL || this == NOT_NULL; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/DeptGetUtils.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/DeptGetUtils.java new file mode 100644 index 0000000..f8f488e --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/DeptGetUtils.java @@ -0,0 +1,40 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import com.seeyon.ctp.util.JDBCAgent; + +import java.util.ArrayList; +import java.util.List; + +public class DeptGetUtils { + + public static String getDeptIdByName(String deptName) { + String querySql = "SELECT ID FROM org_unit where IS_ENABLE = 1 AND `NAME` = ? limit 1"; + JDBCAgent agent = new JDBCAgent(); + try { + List params = new ArrayList<>(); + params.add(deptName); + agent.execute(querySql,params); + return agent.resultSetToMap().get("id") + ""; + } catch (Exception e) { + return null; + }finally { + agent.close(); + } + } + + public static String getPostByNameAndAccount(String name,String account) { + String querySql = "SELECT ID FROM org_post where `NAME` = ? and `ORG_ACCOUNT_ID` = ? AND `STATUS` = 1 limit 1"; + JDBCAgent agent = new JDBCAgent(); + try { + List params = new ArrayList<>(); + params.add(name); + params.add(account); + agent.execute(querySql,params); + return agent.resultSetToMap().get("id") + ""; + } catch (Exception e) { + return null; + }finally { + agent.close(); + } + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/EnumMapUtils.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/EnumMapUtils.java new file mode 100644 index 0000000..15585eb --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/EnumMapUtils.java @@ -0,0 +1,91 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.ctpenumnew.manager.EnumManager; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumBean; +import com.seeyon.ctp.common.po.ctpenumnew.CtpEnumItem; +import com.seeyon.ctp.util.JDBCAgent; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +public class EnumMapUtils { + + public static String getMasterTableEnumItemValue(String formNo,String fieldDisplay, String targetValue) { + if(targetValue == null || "null".equals(targetValue) || "".equals(targetValue)){ + return ""; + } + try { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + FormFieldBean beanByDisplay = masterTableBean.getFieldBeanByDisplay(fieldDisplay); + if(beanByDisplay == null || beanByDisplay.getEnumId() == 0l) { + return ""; + } + return getEnumItemValueByEnumId(targetValue, beanByDisplay.getEnumId()); + } catch (Exception e) { + return ""; + } + } + + public static String getEnumItemValue(String rootPCode, String groupValue, String targetValue) { + if(targetValue == null || "null".equals(targetValue) || "".equals(targetValue)){ + return ""; + } + String queryIdSql = "SELECT ce.ID FROM ctp_enum ce inner join ctp_enum cei on ce.`PARENT_ID` = cei.ID where CEI.`PROGRAM_CODE` = ? and ce.`ENUMNAME` = ?"; + Long enumId = null; + JDBCAgent agent = new JDBCAgent(); + try { + agent.execute(queryIdSql, Arrays.asList(rootPCode,groupValue)); + List> list = (List>) agent.resultSetToList(); + if(list == null || list.size() == 0) { + return ""; + } + Map map = list.get(0); + enumId = (Long)map.get("ID"); + } catch (Exception e) { + return ""; + }finally { + agent.close(); + } + EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); + CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(enumId); + if(ctpEnumBean == null) { + return ""; + } + List ctpEnumItems = ctpEnumBean.getItems(); + if(ctpEnumBean.getItems() == null) { + return ""; + } + for (CtpEnumItem enumItem : ctpEnumItems) { + if(enumItem.getShowvalue().equals(targetValue)) { + return enumItem.getId() + ""; + } + } + return ""; + } + + public static String getEnumItemValueByEnumId(String showValue,long enumId) { + EnumManager enumManagerNew = (EnumManager) AppContext.getBean("enumManagerNew"); + CtpEnumBean ctpEnumBean = enumManagerNew.getEnum(enumId); + if(ctpEnumBean == null) { + return ""; + } + List ctpEnumItems = ctpEnumBean.getItems(); + if(ctpEnumBean.getItems() == null) { + return ""; + } + for (CtpEnumItem enumItem : ctpEnumItems) { + if(enumItem.getShowvalue().equals(showValue)) { + return enumItem.getId() + ""; + } + } + return ""; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FileUtils.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FileUtils.java new file mode 100644 index 0000000..e0492ef --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FileUtils.java @@ -0,0 +1,101 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import cn.hutool.http.HttpUtil; +import com.seeyon.apps.src_receiveFVFlow.config.RfvfPluginConfigProvider; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.common.filemanager.manager.AttachmentManager; +import com.seeyon.ctp.common.po.filemanager.Attachment; +import com.seeyon.ctp.organization.bo.V3xOrgAccount; +import com.seeyon.ctp.organization.bo.V3xOrgMember; +import com.seeyon.ctp.organization.manager.OrgManager; +import com.seeyon.ctp.services.FileUploadExporter; +import com.seeyon.ctp.services.ServiceException; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +public class FileUtils { + + public static String uploadFilesToOA(List files,String formId,String loginName,String updateAccountName) throws IOException, ServiceException, BusinessException { + OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager"); + V3xOrgMember v3xOrgMember = orgManager.getMemberByLoginName(loginName); + V3xOrgAccount v3xOrgAccount = orgManager.getAccountByName(updateAccountName); + List> filesInfo = new ArrayList<>(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + FileUploadExporter fileUpload = new FileUploadExporter(); + List attachments = new ArrayList(); + for (Object file : files) { + Map fileTempInfo = (Map)file; + String fileName = (String) fileTempInfo.get("fileName"); + String fileUrl = (String) fileTempInfo.get("fileUrl"); + if(fileUrl == null || fileUrl.equals("")) { + continue; + } + if(fileName == null || fileName.equals("")) { + fileName = new String("没有文件名_" + UUID.randomUUID().toString().replace("_","")); + } + String localFilePath = System.getProperty("java.io.tmpdir") + File.separator + "seeyontempfile"; + File tempFileParent = new File(localFilePath); + String tempFileName = localFilePath + File.separator + UUID.randomUUID() + "_" + fileName; + File tempFile = new File(tempFileName); + Map fileDetails = new HashMap<>(); + if(!tempFileParent.exists()) { + tempFileParent.mkdir(); + } + if(!tempFile.exists()) { + tempFile.createNewFile(); + } + HttpClient.httpDownloadFile(fileUrl,null,tempFileName,null); + fileDetails.put("oriFileName",fileName); + fileDetails.put("localFileName",tempFileName); + filesInfo.add(fileDetails); + } + String refId = Math.abs(UUID.randomUUID().getLeastSignificantBits()) + ""; + for(int n = 0 ; n < filesInfo.size() ; n++){ +// 判断文件路径是否存在 + Map fileInfoMap = filesInfo.get(n); + String fileLocalPath = fileInfoMap.get("localFileName"); + String fileFinalName = fileInfoMap.get("oriFileName"); + File file = new File(fileLocalPath); + if(file.exists()) { + if(file.length() > 102400000) { + return null; + } + String[] strs = new String[]{file.getAbsolutePath()}; + String s = fileUpload.processUpload(strs); + Map map = new HashMap(); + String attachName = fileFinalName; + String[] suffixNames = attachName.split("\\."); + map.put("type", "0"); + map.put("fileUrl", s); + if(suffixNames.length > 1 ) { + map.put("mimeType", "application/" + suffixNames[suffixNames.length - 1].toLowerCase()); + } + map.put("size", file.length() + ""); + map.put("subReference", refId); + map.put("category", "66"); + map.put("createdate", sdf.format(new Date())); + map.put("filename", fileFinalName); + map.put("reference", formId); + Attachment attachment = new Attachment(map); + + attachments.add(attachment); + } + file.delete(); + } + if(attachments.size() == 0) { + return null; + } + AttachmentManager attachmentManager = (AttachmentManager) AppContext.getBean("attachmentManager"); + attachmentManager.create(attachments, v3xOrgMember.getId(), v3xOrgAccount.getId()); + return attachments.get(0).getSubReference() + ""; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormColumn.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormColumn.java new file mode 100644 index 0000000..4c231ed --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormColumn.java @@ -0,0 +1,24 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import java.util.List; + +public class FormColumn { + private String id; + private List vos; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getVos() { + return vos; + } + + public void setVos(List vos) { + this.vos = vos; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormDataOperator.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormDataOperator.java new file mode 100644 index 0000000..686f9fb --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormDataOperator.java @@ -0,0 +1,525 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import com.seeyon.cap4.form.api.FormApi4Cap4; +import com.seeyon.cap4.form.bean.FormBean; +import com.seeyon.cap4.form.bean.FormFieldBean; +import com.seeyon.cap4.form.bean.FormTableBean; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.ctp.common.exceptions.BusinessException; +import com.seeyon.ctp.util.JDBCAgent; + +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; + +public class FormDataOperator { + + public void updateMasterForm(String formNo, List updateFieldVos, List conditionVos) throws BusinessException { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + + if (updateFieldVos == null) { + throw new IllegalArgumentException("要修改的字段为空"); + } + for (FormUpdateField fieldVo : updateFieldVos) { + FormFieldBean bean = masterTableBean.getFieldBeanByDisplay(fieldVo.getDisplay()); + if (bean == null) { + continue; + } + if(bean.getInputType().equals("image") || bean.getInputType().equals("attachment")){} + fieldVo.fieldName(bean.getColumnName()); + } + List updateFields = updateFieldVos.stream().filter(u -> u.getFieldName() != null).collect(Collectors.toList()); + for (FormWhereCondition conditionVo : conditionVos) { + FormFieldBean bean = masterTableBean.getFieldBeanByDisplay(conditionVo.getDisplay()); + if (bean == null) { + if (conditionVo.getDisplay().equals("ID") || conditionVo.getDisplay().equals("id")) { + conditionVo.setFieldName(conditionVo.getDisplay()); + } + continue; + } + conditionVo.setFieldName(bean.getColumnName()); + } + List conditions = conditionVos.stream().filter(c -> c.getFieldName() != null).collect(Collectors.toList()); + Map map = generateSql(updateFields, masterTableBean.getTableName(), conditions); + JDBCAgent agent = new JDBCAgent(); + try { + agent.execute((String) map.get("sql"), (List) map.get("params")); + return; + } catch (Exception e) { + e.printStackTrace(); + } finally { + agent.close(); + } + } + + + public List queryFormDataCondition(String formNo, List queryColumnVos, List conditionVos) throws Exception { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + List queryColumns = new ArrayList<>(); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + String tableName = masterTableBean.getTableName(); + Map fieldMap4Name = masterTableBean.getFieldMap4Name(); + if (queryColumnVos != null) { + for (String queryColumnVo : queryColumnVos) { + FormFieldBean fieldBeanByDisplay = masterTableBean.getFieldBeanByDisplay(queryColumnVo); + if (fieldBeanByDisplay == null) { + continue; + } + queryColumns.add(fieldBeanByDisplay.getColumnName()); + } + } + for (FormWhereCondition conditionVo : conditionVos) { + FormFieldBean fieldBeanByDisplay = masterTableBean.getFieldBeanByDisplay(conditionVo.getDisplay()); + if (fieldBeanByDisplay == null) { + if (conditionVo.getDisplay().equals("ID") || conditionVo.getDisplay().equals("id")) { + conditionVo.setFieldName(conditionVo.getDisplay()); + } + continue; + } + conditionVo.setFieldName(fieldBeanByDisplay.getColumnName()); + } + + Map generateSql = generateSql(queryColumns, conditionVos, tableName); + String sql = (String) generateSql.get("sql"); + List params = (List) generateSql.get("params"); + JDBCAgent jdbcAgent = new JDBCAgent(); + List columns = new ArrayList<>(); + try { + jdbcAgent.execute(sql, params); + List list = jdbcAgent.resultSetToList(); + for (Object o : list) { + FormColumn column = new FormColumn(); + Map columnMap = (Map) o; + List vos = new ArrayList<>(); + for (String key : columnMap.keySet()) { + FormFieldVo fieldVo = new FormFieldVo(); + if (fieldMap4Name.containsKey(key)) { + FormFieldBean fieldBean = fieldMap4Name.get(key); + fieldVo.setDisplayName(fieldBean.getDisplay()); + fieldVo.setValue(columnMap.get(key)); + vos.add(fieldVo); + } + } + column.setVos(vos); + if (columnMap.get("id") != null) { + column.setId(columnMap.get("id") + ""); + } + columns.add(column); + } + return columns; + } finally { + jdbcAgent.close(); + } + } + + private Map generateSql(List queryColumn, List conditions, String tableName) { + if (tableName == null) { + throw new IllegalArgumentException("tableName cannot be null or empty"); + } + StringBuilder sqlBuilder = new StringBuilder("SELECT "); + if (queryColumn == null || queryColumn.isEmpty()) { + sqlBuilder.append("*"); + } + + for (int i = 0; i < queryColumn.size(); i++) { + sqlBuilder.append(queryColumn.get(i)); + if (queryColumn.size() > 1 && i >= 0 && i < queryColumn.size() - 1) { + sqlBuilder.append(","); + } + } + + if (queryColumn.size() > 0) { + sqlBuilder.append(",`ID`"); + } + + sqlBuilder.append(" from " + tableName); + List params = new ArrayList<>(); + sqlBuilder.append(buildWhereClause(conditions,params)); + Map result = new HashMap<>(); + result.put("sql", sqlBuilder.toString()); + result.put("params", params); + return result; + } + + private Map generateSql(List fieldValues, String tableName,List conditions) { + if (fieldValues == null || fieldValues.isEmpty()) { + throw new IllegalArgumentException("Field values cannot be null or empty"); + } + if (tableName == null || tableName.trim().isEmpty()) { + throw new IllegalArgumentException("Table name cannot be null or empty"); + } + StringBuilder sqlBuilder = new StringBuilder("UPDATE ").append(tableName).append(" SET "); + List params = new ArrayList<>(); + // Build the SET clause + int fieldCount = 0; + for (FormUpdateField updateField : fieldValues) { + if (updateField.getFieldName() == null) { + continue; + } + if (fieldCount > 0) { + sqlBuilder.append(", "); + } + if (updateField.getValue() instanceof String && ((String) updateField.getValue()).startsWith("DATE>")) { + String oldValue = (String) updateField.getValue(); + sqlBuilder.append(updateField.getFieldName()).append(" = TO_DATE( ?, 'YYYY-MM-DD')"); + updateField.setValue(oldValue.substring(oldValue.indexOf(">") + 1)); + } else { + sqlBuilder.append(updateField.getFieldName()).append(" = ?"); + } + params.add(updateField.getValue()); + fieldCount++; + } + String whereClauseStr = buildWhereClause(conditions,params); + // Append the WHERE clause + sqlBuilder.append(whereClauseStr); + // Create result map + Map result = new HashMap<>(); + result.put("sql", sqlBuilder.toString()); + result.put("params", params); + return result; + } + + public Map> getMainFormTableAttachments(String formNo,Map sourceMap) throws BusinessException { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + Map> attachmentTempMap = new HashMap<>(); + Set removeKey = new HashSet<>(); + for (String key : sourceMap.keySet()) { + FormFieldBean fieldBeanByDisplay = masterTableBean.getFieldBeanByDisplay(key); + if(fieldBeanByDisplay == null ){ + continue; + } + if(fieldBeanByDisplay.getInputType().equals("image") || + fieldBeanByDisplay.getInputType().equals("attachment")) { + attachmentTempMap.put(fieldBeanByDisplay.getDisplay(),(List)sourceMap.get(key)); + removeKey.add(key); + } + } + for (String key : removeKey) { + sourceMap.remove(key); + } + return attachmentTempMap; + } + + public Map> getSubFormTableAttachments(String formNo,Map sourceMap) throws BusinessException { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + List subTableBean = cap4FormBean.getSubTableBean(); + Map> attachmentTempMap = new HashMap<>(); + String tableName = null; + for (String key : sourceMap.keySet()) { + tableName = key; + } + String finalTableName = tableName; + FormTableBean tableBean = subTableBean.stream().filter(s->s.getTableName().equals(finalTableName)).collect(Collectors.toList()).get(0); + List> tableData = (List>)sourceMap.get(tableName); + Set removeKey = new HashSet<>(); + for (Map rowData : tableData) { + for (String key : rowData.keySet()) { + FormFieldBean fieldBeanByDisplay = tableBean.getFieldBeanByDisplay(key); + if(fieldBeanByDisplay == null ){ + continue; + } + if(fieldBeanByDisplay.getInputType().equals("image") || + fieldBeanByDisplay.getInputType().equals("attachment")) { + attachmentTempMap.put(fieldBeanByDisplay.getDisplay(),(List)sourceMap.get(key)); + removeKey.add(key); + } + } + for (String key : removeKey) { + rowData.remove(key); + } + removeKey.clear(); + } + return attachmentTempMap; + } + + public void addSubTableRecord(String subTableName,List data,String formNo,String formId) { + JDBCAgent agent = new JDBCAgent(); + try { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + List tableBean = cap4FormBean.getSubTableBean(); + for (FormTableBean bean : tableBean) { + if(!bean.getTableName().equals(subTableName)) { + continue; + } + for (Object column : data) { + Map map = (Map) column; + Map tempMap = new HashMap<>(); + for (String key : map.keySet()) { + FormFieldBean fieldBeanByDisplay = bean.getFieldBeanByDisplay(key); + if(fieldBeanByDisplay == null) { + continue; + } + tempMap.put(fieldBeanByDisplay.getColumnName(),map.get(key)); + } + tempMap.put("formmain_id",formId); + tempMap.put("sort",1); + tempMap.put("ID",Math.abs(UUID.randomUUID().getLeastSignificantBits())); + Map insertSql = generateInsertSql(tempMap, subTableName); + agent.execute((String)insertSql.get("sql"),(List)insertSql.get("params")); + } + } + } catch (Exception e) { + + } finally { + agent.close(); + } + } + + public void rebuildSubTableRecord(String subTableName,List data,String formNo,String formId) { + String deleteSql = "delete from " + subTableName + " where formmain_id = ? "; + JDBCAgent agent = new JDBCAgent(); + try { + agent.execute(deleteSql, Arrays.asList(formId)); + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + List tableBean = cap4FormBean.getSubTableBean(); + for (FormTableBean bean : tableBean) { + if(!bean.getTableName().equals(subTableName)) { + continue; + } + for (Object column : data) { + Map map = (Map) column; + Map tempMap = new HashMap<>(); + for (String key : map.keySet()) { + FormFieldBean fieldBeanByDisplay = bean.getFieldBeanByDisplay(key); + if(fieldBeanByDisplay == null) { + continue; + } + tempMap.put(fieldBeanByDisplay.getColumnName(),map.get(key)); + } + tempMap.put("formmain_id",formId); + tempMap.put("sort",1); + tempMap.put("ID",Math.abs(UUID.randomUUID().getLeastSignificantBits())); + Map insertSql = generateInsertSql(tempMap, subTableName); + agent.execute((String)insertSql.get("sql"),(List)insertSql.get("params")); + } + } + } catch (Exception e) { + + } finally { + agent.close(); + } + } + + public void handleEnumDeptEtc(Map map,String formNo) throws BusinessException { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + for (String key : map.keySet()) { + FormFieldBean fieldBean = masterTableBean.getFieldBeanByDisplay(key); + if(fieldBean == null) { + continue; + } + switch (fieldBean.getInputType()) { + case "select": if(fieldBean.getEnumId() != 0l) { + String enumItemId = EnumMapUtils.getEnumItemValueByEnumId((String)map.get(key),fieldBean.getEnumId()); + map.put(key,enumItemId); + } break; + case "image":break; + case "attachment": break; + case "account": break; + case "department": break; + case "radio": break; + case "member":break; + case "checkbox": + case "date": + case "text":break; + default: break; + + } + } + } + + public void handleSubTableEnumDeptEtc(Map map,String formNo) throws BusinessException { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + List subTableBean = cap4FormBean.getSubTableBean(); + for (FormTableBean tableBean : subTableBean) { + String tableName = null; + for (String key : map.keySet()) { + tableName = key; + } + if(!tableBean.getTableName().equals(tableName)) { + continue; + } + List> subDatas = (List>) map.get(tableName); + for (Map subData : subDatas) { + for (String key : subData.keySet()) { + FormFieldBean fieldBean = tableBean.getFieldBeanByDisplay(key); + if(fieldBean == null) { + continue; + } + switch (fieldBean.getInputType()) { + case "select": if(fieldBean.getEnumId() != 0l) { + String enumItemId = EnumMapUtils.getEnumItemValueByEnumId((String)subData.get(key),fieldBean.getEnumId()); + subData.put(key,enumItemId); + } break; + case "image":break; + case "attachment": break; + case "account": break; + case "department": break; + case "radio": break; + case "member":break; + case "checkbox": + case "date": + case "text":break; + default: break; + + } + } + } + } + } + + public boolean isMasterTableFile(String displayName,String formNo) { + FormApi4Cap4 formApi4Cap4 = (FormApi4Cap4) AppContext.getBean("formApi4Cap4"); + try { + FormBean cap4FormBean = formApi4Cap4.getFormByFormCode(formNo); + FormTableBean masterTableBean = cap4FormBean.getMasterTableBean(); + FormFieldBean fieldBeanByDisplay = masterTableBean.getFieldBeanByDisplay(displayName); + return fieldBeanByDisplay.getInputType().equals("image") || fieldBeanByDisplay.getInputType().equals("attachment"); + } catch (BusinessException e) { + + } + return false; + } + + private Map generateInsertSql(Map data, String tableName) { + if (tableName == null || tableName.isEmpty()) { + throw new IllegalArgumentException("tableName cannot be null or empty"); + } + if (data == null || data.isEmpty()) { + throw new IllegalArgumentException("data cannot be null or empty"); + } + StringBuilder sqlBuilder = new StringBuilder("INSERT INTO " + tableName + " ("); + List params = new ArrayList<>(); + // 拼接字段名 + StringBuilder columns = new StringBuilder(); + // 拼接字段值 + StringBuilder values = new StringBuilder(); + for (Map.Entry entry : data.entrySet()) { + // 拼接字段名 + if (columns.length() > 0) { + columns.append(", "); + } + columns.append(entry.getKey()); + // 拼接值,使用占位符 ? + if (values.length() > 0) { + values.append(", "); + } + values.append("?"); + // 将值加入 params 列表 + params.add(entry.getValue()); + } + // 完善 SQL 语句 + sqlBuilder.append(columns).append(") VALUES (").append(values).append(");"); + Map result = new HashMap<>(); + result.put("sql", sqlBuilder.toString()); + result.put("params", params); + return result; + } + + /** + * 动态生成 WHERE 子句 + * @param conditions 条件集合 + * @param params 参数列表(引用传递) + * @return 拼接后的 WHERE 子句(包含 WHERE 关键字) + */ + private String buildWhereClause(List conditions, List params) { + if (conditions == null || conditions.isEmpty()) { + return ""; + } + + StringBuilder whereClause = new StringBuilder(" WHERE "); + int conditionIndex = 0; + + for (FormWhereCondition condition : conditions) { + // 处理括号起始 + if (condition.isStartWithBracket()) { + whereClause.append("("); + } + + // 字段名校验 + String fieldName = condition.getFieldName(); + ClauseFactor factor = condition.getClauseFactor(); + String operator = parseOperator(factor); + + // 构建条件表达式 + String conditionExpr; + if (factor.isNullType()) { + // 处理 NULL/NOT NULL 条件(无需参数) + conditionExpr = String.format("%s %s", fieldName, operator); + } else { + // 处理普通条件(带占位符) + conditionExpr = String.format("%s %s ?", fieldName, operator); + // 处理函数模板(如 TO_DATE) + if (condition.getIndex() != null) { + conditionExpr = conditionExpr.replace("?", condition.getIndex()); + } + // 添加参数值 + params.add(condition.getValue()); + } + + whereClause.append(conditionExpr); + + // 处理括号闭合 + if (condition.isEndWithBracket()) { + whereClause.append(")"); + } + + // 添加连接符(AND/OR) + if (conditionIndex < conditions.size() - 1) { + whereClause.append(" ").append(condition.getConcatFactor()).append(" "); + } + conditionIndex++; + } + + return whereClause.toString(); + } + + /** + * 校验字段名合法性(防止 SQL 注入) + */ + private String validateFieldName(String fieldName) { + if (!fieldName.matches("^[a-zA-Z_][a-zA-Z0-9_]*$")) { + throw new IllegalArgumentException("非法字段名: " + fieldName); + } + return fieldName; + } + + /** + * 解析运算符映射(eq -> =, lt -> < 等) + */ + private String parseOperator(ClauseFactor factor) { + if(factor == null) { + return "="; + } + switch (factor) { + case EQ: return "="; + case GT: return ">"; + case GE: return ">="; + case LT: return "<"; + case LE: return "<="; + case LIKE: return "LIKE"; + case NULL: return "IS NULL"; // 空值判断 + case NOT_NULL: return "IS NOT NULL"; // 非空判断 + default: throw new UnsupportedOperationException("不支持的运算符: " + factor); + } + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormExportUtil.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormExportUtil.java new file mode 100644 index 0000000..e48eda9 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormExportUtil.java @@ -0,0 +1,84 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import com.seeyon.v3x.services.form.bean.RecordExport; +import com.seeyon.v3x.services.form.bean.SubordinateFormExport; +import com.seeyon.v3x.services.form.bean.ValueExport; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +//创建无流程表单数据处理工具类 +public class FormExportUtil { + + /** + * 设置主表信息 + * @param map 设置主表字段。Map<主表显示名称,主表数据> + * @return + */ + public List setFormValue(Map map ){ +// 创建返回值对象 + List valueExports = new ArrayList(); + ValueExport valueExport ; +// 获取参数信息(显示名称) + Set keys = map.keySet(); + if(keys.size()>0) { +// 对控件赋值 + for (String key : keys) { + if(map.get(key) != null ){ + valueExport = new ValueExport(); + valueExport.setDisplayName(key); + valueExport.setValue(map.get(key).toString()); + valueExports.add(valueExport); + } + System.out.println(key+":"+map.get(key)); + } + } + return valueExports; + } + + /** + * 设置从表信息 + * @param lists 设置主表字段。List> + */ + public List setSubordinateFormValue(List> lists){ + List subordinateFormExports = new ArrayList(); + SubordinateFormExport subordinateFormExport = new SubordinateFormExport(); + List recordExports = new ArrayList(); + List valueExports; + RecordExport recordExport; + for(int i = 0 ; i < lists.size() ; i++) { + recordExport = new RecordExport(); + valueExports = setFormValue(lists.get(i)); + recordExport.setRecord(valueExports); + recordExports.add(recordExport); + } + subordinateFormExport.setValues(recordExports); + subordinateFormExports.add(subordinateFormExport); + + return subordinateFormExports; + } + + public List setAllSubordinateFormValue(List> lists){ + List subordinateFormExports = new ArrayList(); + for (Map list : lists) { + SubordinateFormExport subordinateFormExport = new SubordinateFormExport(); + List recordExports = new ArrayList(); + for (String key : list.keySet()) { + List> columns = (List>) list.get(key); + for(int i = 0 ; i < columns.size() ; i++) { + List valueExports = setFormValue(columns.get(i)); + RecordExport recordExport = new RecordExport(); + recordExport.setRecord(valueExports); + recordExports.add(recordExport); + } + } + subordinateFormExport.setValues(recordExports); + subordinateFormExports.add(subordinateFormExport); + } + return subordinateFormExports; + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormFieldType.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormFieldType.java new file mode 100644 index 0000000..161128f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormFieldType.java @@ -0,0 +1,7 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +public enum FormFieldType { + common, + file, + ; +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormFieldVo.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormFieldVo.java new file mode 100644 index 0000000..83a05e7 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormFieldVo.java @@ -0,0 +1,22 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +public class FormFieldVo { + private String displayName; + private Object value; + + public String getDisplayName() { + return displayName; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormUpdateField.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormUpdateField.java new file mode 100644 index 0000000..19dfb1f --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormUpdateField.java @@ -0,0 +1,57 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +public class FormUpdateField { + private String display; + private String fieldName; + private Object value; + + public FormUpdateField(Object value) { + this.value = value; + } + + public FormUpdateField() { + } + + public static FormUpdateField build() { + return new FormUpdateField(); + } + + public FormUpdateField display(String display) { + this.display = display; + return this; + } + + public FormUpdateField value(Object value) { + this.value = value; + return this; + } + + public FormUpdateField fieldName(String fieldName) { + this.fieldName = fieldName; + return this; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + public String getDisplay() { + return display; + } + + public void setDisplay(String display) { + this.display = display; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormWhereCondition.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormWhereCondition.java new file mode 100644 index 0000000..0eff51e --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/FormWhereCondition.java @@ -0,0 +1,121 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +public class FormWhereCondition { + private String display; + private String fieldName; //字段名 + private Object value; //值 + private ClauseFactor clauseFactor = ClauseFactor.EQ; //条件因子 eq lt gt not_null null + private ClauseFactor concatFactor = ClauseFactor.AND; //拼接因子 + private boolean startWithBracket = false; //是否以括号开头生成子条件 + private boolean endWithBracket = false; //是否以括号结尾结束子条件 + private String index; + + public FormWhereCondition() { + } + + public String getDisplay() { + return display; + } + + public void setDisplay(String display) { + this.display = display; + } + + public static FormWhereCondition build() { + return new FormWhereCondition(); + } + + public FormWhereCondition display(String display) { + this.display = display; + return this; + } + public FormWhereCondition value(Object value) { + this.value = value; + return this; + } + public FormWhereCondition clauseFactor(ClauseFactor clauseFactor) { + this.clauseFactor = clauseFactor; + return this; + } + public FormWhereCondition index(String index) { + this.index = index; + return this; + } + + public FormWhereCondition startWithBracket(boolean startWithBracket) { + this.startWithBracket = startWithBracket; + return this; + } + + public FormWhereCondition endWithBracket(boolean endWithBracket) { + this.endWithBracket = endWithBracket; + return this; + } + + public FormWhereCondition concatFactor(ClauseFactor concatFactor) { + this.concatFactor = concatFactor; + return this; + } + + + public FormWhereCondition(Object value, ClauseFactor clauseFactor) { + this.value = value; + this.clauseFactor = clauseFactor; + } + + public boolean isStartWithBracket() { + return startWithBracket; + } + + public void setStartWithBracket(boolean startWithBracket) { + this.startWithBracket = startWithBracket; + } + + public String getFieldName() { + return fieldName; + } + + public void setFieldName(String fieldName) { + this.fieldName = fieldName; + } + + public Object getValue() { + return value; + } + + public void setValue(Object value) { + this.value = value; + } + + public ClauseFactor getClauseFactor() { + return clauseFactor; + } + + public void setClauseFactor(ClauseFactor clauseFactor) { + this.clauseFactor = clauseFactor; + } + + public ClauseFactor getConcatFactor() { + return concatFactor; + } + + public void setConcatFactor(ClauseFactor concatFactor) { + this.concatFactor = concatFactor; + } + + public String getIndex() { + return index; + } + + public void setIndex(String index) { + this.index = index; + } + + public boolean isEndWithBracket() { + return endWithBracket; + } + + public void setEndWithBracket(boolean endWithBracket) { + this.endWithBracket = endWithBracket; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/HttpClient.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/HttpClient.java new file mode 100644 index 0000000..1e552b7 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/HttpClient.java @@ -0,0 +1,420 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import org.apache.http.HttpEntity; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.*; +import org.apache.http.entity.ContentType; +import org.apache.http.entity.StringEntity; +import org.apache.http.entity.mime.HttpMultipartMode; +import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.util.EntityUtils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * @ClassName: HttpClient + * @Description: HTTP请求工具类 + * @Author: GiikJc + * @Date: 2022/7/12 15:03 + */ +/** + * 发送Get请求:HttpResponse httpGet(String url,Map headers,String encode) + *发送Post请求,同表单Post提交:HttpResponse httpPostForm(String url,Map params, Map headers,String encode) + *发送Post Raw请求:HttpResponse httpPostRaw(String url,String stringJson,Map headers, String encode) + *发送Put Raw请求:HttpResponse httpPutRaw(String url,String stringJson,Map headers, String encode) + *发送Delete请求:HttpResponse httpDelete(String url,Map headers,String encode) + */ +public class HttpClient { + + + /** + * 发送 HTTP GET 请求下载文件 + * @param url 下载文件的 URL + * @param headers 请求头 + * @param savePath 文件保存的路径 + * @param encode 文件内容的编码 + * @return 下载成功返回 true,失败返回 false + */ + public static boolean httpDownloadFile(String url, Map headers, String savePath, String encode) { + if (encode == null) { + encode = "utf-8"; // 默认字符编码 + } + + CloseableHttpClient httpClient = null; + CloseableHttpResponse httpResponse = null; + InputStream inputStream = null; + OutputStream outputStream = null; + + try { + // 创建 HttpClient 实例 + httpClient = HttpClients.createDefault(); + HttpGet httpGet = new HttpGet(url); + + // 设置请求头 + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpGet.setHeader(entry.getKey(), entry.getValue()); + } + } + + // 执行请求 + httpResponse = httpClient.execute(httpGet); + HttpEntity entity = httpResponse.getEntity(); + + // 检查响应状态码 + if (httpResponse.getStatusLine().getStatusCode() == 200) { + inputStream = entity.getContent(); + + // 创建输出流,将文件保存到本地 + outputStream = new FileOutputStream(savePath); + + // 设置缓冲区 + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + + // 文件下载成功 + return true; + } else { + System.out.println("Download failed, HTTP error code: " + httpResponse.getStatusLine().getStatusCode()); + return false; + } + } catch (Exception e) { + e.printStackTrace(); + return false; + } finally { + try { + if (inputStream != null) { + inputStream.close(); + } + if (outputStream != null) { + outputStream.close(); + } + if (httpResponse != null) { + httpResponse.close(); + } + if (httpClient != null) { + httpClient.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 发送http get请求 + */ + public static String httpGet(String url,Map headers,String encode){ + + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + closeableHttpClient = HttpClientBuilder.create().build(); + HttpGet httpGet = new HttpGet(url); + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpGet.setHeader(entry.getKey(),entry.getValue()); + } + } + + httpResponse = closeableHttpClient.execute(httpGet); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + /** + * 发送 http post 请求,参数以form表单键值对的形式提交。 + */ + public static String httpPostForm(String url,Map params, Map headers,String encode){ + + if(encode == null){ + encode = "utf-8"; + } + + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + + closeableHttpClient = HttpClients.createDefault(); + HttpPost httpost = new HttpPost(url); + + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpost.setHeader(entry.getKey(),entry.getValue()); + } + } + //组织请求参数 + List paramList = new ArrayList (); + if(params != null && params.size() > 0){ + Set keySet = params.keySet(); + for(String key : keySet) { + paramList.add(new BasicNameValuePair(key, params.get(key))); + } + } + httpost.setEntity(new UrlEncodedFormEntity(paramList, encode)); + + + httpResponse = closeableHttpClient.execute(httpost); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 发送 http post 请求,参数以原生字符串进行提交 + * @param url + * @param encode + * @return + */ + public static String httpPostRaw(String url,String stringJson,Map headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPost httpost = new HttpPost(url); + + //设置header + httpost.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpost.setHeader(entry.getKey(),entry.getValue()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpost.setEntity(stringEntity); + + + //响应信息 + httpResponse = closeableHttpClient.execute(httpost); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 发送 http put 请求,参数以原生字符串进行提交 + * @param url + * @param encode + * @return + */ + public static String httpPutRaw(String url,String stringJson,Map headers, String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + //HttpClients.createDefault()等价于 HttpClientBuilder.create().build(); + closeableHttpClient = HttpClients.createDefault(); + HttpPut httpput = new HttpPut(url); + + //设置header + httpput.setHeader("Content-type", "application/json"); + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpput.setHeader(entry.getKey(),entry.getValue()); + } + } + //组织请求参数 + StringEntity stringEntity = new StringEntity(stringJson, encode); + httpput.setEntity(stringEntity); + //响应信息 + httpResponse = closeableHttpClient.execute(httpput); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { + closeableHttpClient.close(); //关闭连接、释放资源 + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + /** + * 发送http delete请求 + */ + public static String httpDelete(String url,Map headers,String encode){ + if(encode == null){ + encode = "utf-8"; + } + String content = null; + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + try { + //since 4.3 不再使用 DefaultHttpClient + closeableHttpClient = HttpClientBuilder.create().build(); + HttpDelete httpdelete = new HttpDelete(url); + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpdelete.setHeader(entry.getKey(),entry.getValue()); + } + } + + httpResponse = closeableHttpClient.execute(httpdelete); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + + /** + * 发送 http post 请求,支持文件上传 + */ + public static String httpPostFormMultipart(String url,Map params, List files,Map headers,String encode){ + if(encode == null){ + encode = "utf-8"; + } + CloseableHttpResponse httpResponse = null; + CloseableHttpClient closeableHttpClient = null; + String content = null; + //since 4.3 不再使用 DefaultHttpClient + try { + + closeableHttpClient = HttpClients.createDefault(); + HttpPost httpost = new HttpPost(url); + + //设置header + if (headers != null && headers.size() > 0) { + for (Map.Entry entry : headers.entrySet()) { + httpost.setHeader(entry.getKey(),entry.getValue()); + } + } + MultipartEntityBuilder mEntityBuilder = MultipartEntityBuilder.create(); + mEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); + mEntityBuilder.setCharset(Charset.forName(encode)); + + // 普通参数 + ContentType contentType = ContentType.create("text/plain",Charset.forName(encode));//解决中文乱码 + if (params != null && params.size() > 0) { + Set keySet = params.keySet(); + for (String key : keySet) { + mEntityBuilder.addTextBody(key, params.get(key),contentType); + } + } + //二进制参数 + if (files != null && files.size() > 0) { + for (File file : files) { + mEntityBuilder.addBinaryBody("file", file); + } + } + httpost.setEntity(mEntityBuilder.build()); + httpResponse = closeableHttpClient.execute(httpost); + HttpEntity entity = httpResponse.getEntity(); + content = EntityUtils.toString(entity, encode); + } catch (Exception e) { + e.printStackTrace(); + }finally{ + try { + httpResponse.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + try { //关闭连接、释放资源 + closeableHttpClient.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return content; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/WeaverJsonUtils.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/WeaverJsonUtils.java new file mode 100644 index 0000000..d34e290 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/util/WeaverJsonUtils.java @@ -0,0 +1,143 @@ +package com.seeyon.apps.src_receiveFVFlow.util; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.config.RfvfPluginConfigProvider; +import com.seeyon.apps.src_receiveFVFlow.constans.ReceiveFVFlowConstans; +import com.seeyon.ctp.common.AppContext; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class WeaverJsonUtils { + public static Map standardizedJson(String json) { + JSONObject jsonObject = JSONObject.parseObject(json); + Object workflowid = jsonObject.get("workflowid"); + Object requestid = jsonObject.get("requestid"); + + Map rootData = (Map)jsonObject.get("data"); + if(rootData == null) { + return null; + } + Map mainData = (Map)rootData.get("mainData"); + Object tableDBName = mainData.get("tableDBName"); + Object formCode = tableDBName; + List detailData = (List)rootData.get("detailData"); + List workflowRequestTableRecords1 = null; + if(mainData != null) { + workflowRequestTableRecords1 = (List)mainData.get("workflowRequestTableRecords"); + } + Map record = new HashMap<>(); + if(workflowRequestTableRecords1 != null) { + for (Object o : workflowRequestTableRecords1) { + Map column = (Map)o; + String attachment = column.get("attachmentField") + ""; + if("true".equals(attachment)) { + List> attachments = (List>) column.get("attachmentInfo"); + try { + record.put(column.get("fieldName")+"",attachments); + }catch (Exception e) { + System.err.println(e.getMessage()); + } + + }else if(column.get("fieldName") != null && column.get("fieldValue") != null && !column.get("fieldValue").equals("")){ + record.put(column.get("fieldName")+"",column.get("fieldValue") + ""); + } + } + } + + List>> subForms = new ArrayList<>(); + if(detailData != null) { + for (Object detailDatum : detailData) { + Map> subFormMap = new HashMap<>(); + List sumFormColumns = new ArrayList<>(); + Map temp = (Map)detailDatum; + String waveTableDBName = (String)temp.get("tableDBName"); + String subFormTableName = "subTable" + waveTableDBName.substring(waveTableDBName.length() - 1,waveTableDBName.length()); + subFormMap.put(subFormTableName,sumFormColumns); + subForms.add(subFormMap); + List> workflowRequestTableRecords2 = (List>)temp.get("workflowRequestTableRecords"); + for (Map o : workflowRequestTableRecords2) { + Map columnData = new HashMap<>(); + List tableData = (List)o.get("workflowRequestTableFields"); + for (Object datum : tableData) { + Map column = (Map)datum; + String attachment = column.get("attachmentField") + ""; + if("true".equals(attachment)) { + List> attachments = (List>) column.get("attachmentInfo"); + try { + record.put(column.get("fieldName")+"",attachments); + }catch (Exception e) { + System.err.println(e.getMessage()); + } + }else if(column.get("fieldName") != null && column.get("fieldValue") != null){ + columnData.put(column.get("fieldName")+"",column.get("fieldValue") + ""); + } + } + sumFormColumns.add(columnData); + } + } + } + + Map resMap = new HashMap<>(); + resMap.put("workflowId",workflowid); + resMap.put("formCode",formCode); + resMap.put("mainForm",record); + resMap.put("subForms",subForms); + resMap.put("requestid",requestid); + return resMap; + } + + public static Map getDisplayMap(Map map,Map sourceFieldMap) { + Map resMap = new HashMap<>(); + Map mainForm = new HashMap<>(); + List subFormTableList = new ArrayList<>(); + if(sourceFieldMap == null) { + throw new RuntimeException("字段映射模板为空"); + } + resMap.put("泛微流程ID",map.get("workflowId")); + Map mainFormMap = (Map) map.get("mainForm"); + if(mainFormMap == null ) { + throw new RuntimeException("主表数据为空"); + } + for (String sourceKey : mainFormMap.keySet()) { + if(sourceFieldMap.containsKey(sourceKey)) { + mainForm.put((String) sourceFieldMap.get(sourceKey),mainFormMap.get(sourceKey)); + } + } + Map> subFormMapping = (Map>)sourceFieldMap.get("从表映射"); + List subForms = (List) map.get("subForms"); + if(subFormMapping != null && subForms != null) { + for (Object subForm : subForms) { + Map subFormMap = (Map)subForm; + Map finalSubFormDataMap = new HashMap<>(); + subFormTableList.add(finalSubFormDataMap); + for (String subTableName : subFormMap.keySet()) { + List subFormDataList = new ArrayList<>(); + List> columns = (List>) subFormMap.get(subTableName); + if(!subFormMapping.containsKey(subTableName)) { + continue; + } + Map mappingDetail = subFormMapping.get(subTableName); + String subDbTableName = mappingDetail.get("从表表名"); + finalSubFormDataMap.put(subDbTableName,subFormDataList); + for (Map column : columns) { + Map columnData = new HashMap<>(); + subFormDataList.add(columnData); + for (String sourceKey : column.keySet()) { + if(mappingDetail.containsKey(sourceKey)) { + columnData.put(mappingDetail.get(sourceKey),column.get(sourceKey)); + } + } + } + + } + } + } + resMap.put("主表数据",mainForm); + resMap.put("从表数据",subFormTableList); + resMap.put("泛微请求ID",map.get("requestid")); + return resMap; + } +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/vo/ReceiveFVFlowResponse.java b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/vo/ReceiveFVFlowResponse.java new file mode 100644 index 0000000..1e10c73 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/apps/src_receiveFVFlow/vo/ReceiveFVFlowResponse.java @@ -0,0 +1,56 @@ +package com.seeyon.apps.src_receiveFVFlow.vo; + +import com.alibaba.fastjson.JSONObject; + +public class ReceiveFVFlowResponse { + + private boolean success; + private int status; + private String msg; + private String data; + public ReceiveFVFlowResponse() {} + public ReceiveFVFlowResponse(JSONObject object) { + + this.status = object.getString("status").equals("1")?1:2; + this.success = (1 == status); + this.msg = object.getString("msg"); + this.data = object.getString("data"); + } + + public boolean isSuccess() { + return success; + } + + public ReceiveFVFlowResponse setSuccess(boolean success) { + this.success = success; + return this; + } + + public int getStatus() { + return status; + } + + public ReceiveFVFlowResponse setStatus(int status) { + this.status = status; + return this; + } + + public String getMsg() { + return msg; + } + + public ReceiveFVFlowResponse setMsg(String msg) { + this.msg = msg; + return this; + } + + public String getData() { + return data; + } + + public ReceiveFVFlowResponse setData(String data) { + this.data = data; + return this; + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/QuartFormTableResource.java b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/QuartFormTableResource.java new file mode 100644 index 0000000..8df3a85 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/QuartFormTableResource.java @@ -0,0 +1,75 @@ +package com.seeyon.ctp.rest.resources; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_quartformtable.dao.IQuartFormTableDao; +import com.seeyon.apps.src_receiveFVFlow.service.IReceiveFVFlowService; +import com.seeyon.apps.src_receiveFVFlow.vo.ReceiveFVFlowResponse; +import com.seeyon.ctp.common.AppContext; +import www.seeyon.com.utils.StringUtil; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import java.io.IOException; +import java.util.List; +import java.util.Map; + + +/** + * @author huangzhengguo: + * @version 创建时间:2025年03月14日 + * 类说明 根据表名或者表编码、数据唯一值,查询对应档案表的各ID数据 + */ +@Path("/formTable") +@Produces({"application/json", "application/xml"}) +public class QuartFormTableResource extends BaseResource{ + + private static final Log log = Log.get(QuartFormTableResource.class); + + private IQuartFormTableDao quartFormTableDao; + public IQuartFormTableDao getQuartFormTableDao() { + if (this.quartFormTableDao == null) { + this.quartFormTableDao = ((IQuartFormTableDao) AppContext.getBean("quartFormTableDao")); + } + return quartFormTableDao; + } + public void setQuartFormTableDao(IQuartFormTableDao quartFormTableDao) { + this.quartFormTableDao = quartFormTableDao; + } + + @GET + @Path("/quart") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response getData(@QueryParam("params") String params) throws IOException { + log.info("获取查询参数为:"+params); + JSONObject param = JSONObject.parseObject(params); +// 处理调用参数,根据参数查询主要数据 + String formCode = param.getString("formCode"); +// 根据表单编码查询数据库表名 + + String formName = getQuartFormTableDao().getFormNameByFormCode(formCode); + if(StringUtil.isEmpty(formName)){ + return fail("根据表单编号查询表单为空,请确定表单编号是是否存在"); + } + JSONObject uniqueness = param.getJSONObject("uniqueness"); +// 根据唯一值字段设置查询当前表单是否存在此字段 + Map uniquenessMap = uniqueness.getInnerMap(); + List formmainIds = getQuartFormTableDao().getFormmainDataByUniqueness(formName,uniquenessMap); + if(formmainIds.size()>1){ + return fail("查询数据不唯一,请确定查询条件是否正确"); + }else{ + JSONObject res = new JSONObject(); + if(formmainIds.size()==1){ + String id = formmainIds.get(0); + res.put("id",id); + return success(res); + }else{ + res.put("id",""); + return success(res); + } + } + + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ReceiveFVFlowDataResource.java b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ReceiveFVFlowDataResource.java new file mode 100644 index 0000000..7100c6d --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/ReceiveFVFlowDataResource.java @@ -0,0 +1,70 @@ +package com.seeyon.ctp.rest.resources; + +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_receiveFVFlow.service.IReceiveFVFlowService; +import com.seeyon.apps.src_receiveFVFlow.vo.ReceiveFVFlowResponse; +import com.seeyon.ctp.common.AppContext; + +import cn.hutool.log.Log; +import com.seeyon.ctp.common.SystemEnvironment; +import com.seeyon.ctp.services.ServiceException; +import com.seeyon.ctp.util.annotation.RestInterfaceAnnotation; +import com.seeyon.v3x.dee.util.DateUtil; +import org.apache.commons.io.FileUtils; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import java.io.File; +import java.io.IOException; +import java.util.Date; +import java.util.Map; + + +/** + * @author huangzhengguo: + * @version 创建时间:2025年01月17日 + * 类说明 接收客户服务平台流程结束后传递给主数据平台的流程ID,并切执行组织架构和档案表创建操作 + */ +@Path("/weaver/oa") +@Produces({"application/json", "application/xml"}) +public class ReceiveFVFlowDataResource extends BaseResource{ + + private static final Log log = Log.get(ReceiveFVFlowDataResource.class); + + private IReceiveFVFlowService receiveFVFlowService; + public IReceiveFVFlowService getReceiveFVFlowService() { + if (this.receiveFVFlowService == null) { + this.receiveFVFlowService = ((IReceiveFVFlowService) AppContext.getBean("receiveFVFlowService")); + } + return receiveFVFlowService; + } + public void setReceiveFVFlowService(IReceiveFVFlowService receiveFVFlowService) { + this.receiveFVFlowService = receiveFVFlowService; + } + + @POST + @Path("/receiveFVFlowData") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response getData(JSONObject params) throws IOException { + log.info("获取泛微结束流程ID为:"+params); + String str = "/home/seeyon/Seeyon/A8/ApacheJetspeed/logs_sy"; + String date = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + FileUtils.writeStringToFile(new File(str+"/testFVflowdata/" + date + ".json"), params.toString(), "UTF-8"); + + ReceiveFVFlowResponse result = new ReceiveFVFlowResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveFVFlowService().createFormData(params); + if(result.isSuccess()) { + return success("推送数据到主数据成功"); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + return fail(e.getMessage()); + } + } + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SaveAndUpdateDepartmentResource.java b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SaveAndUpdateDepartmentResource.java new file mode 100644 index 0000000..9650630 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SaveAndUpdateDepartmentResource.java @@ -0,0 +1,105 @@ +package com.seeyon.ctp.rest.resources; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgDepartmentService; +import com.seeyon.ctp.common.AppContext; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.io.IOException; + + +/** + * @author huangzhengguo: + * @version 创建时间:2025年04月16日 + * 类说明 根据接收消息新增或者修改组织架构信息 + */ +@Path("/orgDepartment") +@Produces({"application/json", "application/xml"}) +public class SaveAndUpdateDepartmentResource extends BaseResource{ + + private static final Log log = Log.get(SaveAndUpdateDepartmentResource.class); + + private IReceiveOrgDepartmentService receiveOrgDepartmentService; + + public IReceiveOrgDepartmentService getReceiveOrgDepartmentService() { + if (this.receiveOrgDepartmentService == null) { + this.receiveOrgDepartmentService = ((IReceiveOrgDepartmentService) AppContext.getBean("receiveOrgDepartmentService")); + } + return receiveOrgDepartmentService; + } + public void setReceiveOrgDepartmentService(IReceiveOrgDepartmentService receiveOrgDepartmentService) { + this.receiveOrgDepartmentService = receiveOrgDepartmentService; + } + + + @POST + @Path("/updateDepartmentSpanAccount") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response updateDepartmentSpanAccount(JSONObject params){ + log.info("新建部门参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgDepartmentService().updateDepartmentSpanAccount(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + @POST + @Path("/updateDepartmentMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response updateDepartmentMain(JSONObject params){ + log.info("新建部门参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgDepartmentService().updateDepartmentMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + @POST + @Path("/queryDepartmentMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryDepartmentMain(JSONObject params){ + log.info("查询部门参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgDepartmentService().queryDepartmentMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java new file mode 100644 index 0000000..46cd9f8 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SaveAndUpdateMemberMainResource.java @@ -0,0 +1,145 @@ +package com.seeyon.ctp.rest.resources; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.apps.src_receiveFVFlow.service.IReceiveFVFlowService; +import com.seeyon.apps.src_receiveFVFlow.vo.ReceiveFVFlowResponse; +import com.seeyon.ctp.common.AppContext; +import com.seeyon.v3x.dee.util.DateUtil; +import org.apache.commons.io.FileUtils; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.io.File; +import java.io.IOException; +import java.util.Date; + + +/** + * @author huangzhengguo: + * @version 创建时间:2025年04月16日 + * 类说明 根据接收消息新增或者修改组织架构信息 + */ +@Path("/orgMember") +@Produces({"application/json", "application/xml"}) +public class SaveAndUpdateMemberMainResource extends BaseResource{ + + private static final Log log = Log.get(SaveAndUpdateMemberMainResource.class); + + private IReceiveOrgMemberService receiveOrgMemberService; + + public IReceiveOrgMemberService getReceiveOrgMemberService() { + if (this.receiveOrgMemberService == null) { + this.receiveOrgMemberService = ((IReceiveOrgMemberService) AppContext.getBean("receiveOrgMemberService")); + } + return receiveOrgMemberService; + } + public void setReceiveOrgMemberService(IReceiveOrgMemberService receiveOrgMemberService) { + this.receiveOrgMemberService = receiveOrgMemberService; + } + + @POST + @Path("/saveMemberMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response saveMemberMain(JSONObject params){ + log.info("新建人员参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgMemberService().saveMemberMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + + @POST + @Path("/updateMemberMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response updateMemberMain(JSONObject params){ + log.info("修改人员参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgMemberService().updateMemberMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + /** + * 调用接口查询指定单位下所有人员 + * @param params + * @return + * @throws IOException + */ + @POST + @Path("/queryMemberMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryMemberMain(JSONObject params){ + log.info("查询人员参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgMemberService().queryMemberMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + + /** + * 调用接口查询指定单位下所有人员 + * @param params + * @return + * @throws IOException + */ + @POST + @Path("/queryFHMemberMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryFHMemberMain(JSONObject params){ + log.info("查询人员参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveOrgMemberService().queryFHMemberMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SrcCustomerMainResource.java b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SrcCustomerMainResource.java new file mode 100644 index 0000000..38f9f3b --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SrcCustomerMainResource.java @@ -0,0 +1,69 @@ +package com.seeyon.ctp.rest.resources; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.apps.src_mainorganization.service.IReceiveSrcCustomerService; +import com.seeyon.ctp.common.AppContext; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.io.IOException; + + +/** + * @author huangzhengguo: + * @version 创建时间:2025年04月16日 + * 类说明 根据接收消息操作客户信息 + */ +@Path("/srcCustomer") +@Produces({"application/json", "application/xml"}) +public class SrcCustomerMainResource extends BaseResource{ + + private static final Log log = Log.get(SrcCustomerMainResource.class); + + private IReceiveSrcCustomerService receiveSrcCustomerService; + + public IReceiveSrcCustomerService getReceiveSrcCustomerService() { + if (this.receiveSrcCustomerService == null) { + this.receiveSrcCustomerService = ((IReceiveSrcCustomerService) AppContext.getBean("receiveSrcCustomerService")); + } + return receiveSrcCustomerService; + } + public void setReceiveSrcCustomerService(IReceiveSrcCustomerService receiveSrcCustomerService) { + this.receiveSrcCustomerService = receiveSrcCustomerService; + } + + /** + * 调用接口查询客户信息下所有人员 + * @param params + * @return + * @throws IOException + */ + @POST + @Path("/queryCustomerMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response queryCustomerMain(JSONObject params) { + log.info("查询客户参数:"+params); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getReceiveSrcCustomerService().queryCustomerMain(params); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + + +} diff --git a/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SrcMemberFormTableResource.java b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SrcMemberFormTableResource.java new file mode 100644 index 0000000..82a87c5 --- /dev/null +++ b/v5/apps-customize/src/main/java/com/seeyon/ctp/rest/resources/SrcMemberFormTableResource.java @@ -0,0 +1,66 @@ +package com.seeyon.ctp.rest.resources; + +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSONObject; +import com.seeyon.apps.src_mainorganization.bo.ReceiveOrgMemberResponse; +import com.seeyon.apps.src_mainorganization.service.IReceiveOrgMemberService; +import com.seeyon.apps.src_mainorganization.service.ISrcMemberFormTableService; +import com.seeyon.ctp.common.AppContext; + +import javax.ws.rs.Consumes; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; +import java.io.IOException; + +/** + * @author huangzhengguo: + * @version 创建时间:2025年04月16日 + * 类说明 根据接收消息新增或者修改组织架构信息 + */ +@Path("/srcMemberFormTable") +@Produces({"application/json", "application/xml"}) +public class SrcMemberFormTableResource extends BaseResource { + + private static final Log log = Log.get(SrcMemberFormTableResource.class); + + private ISrcMemberFormTableService srcMemberFormTableService; + public ISrcMemberFormTableService getSrcMemberFormTableService() { + if (this.srcMemberFormTableService == null) { + this.srcMemberFormTableService = ((ISrcMemberFormTableService) AppContext.getBean("srcMemberFormTableService")); + } + return srcMemberFormTableService; + } + public void setSrcMemberFormTableService(ISrcMemberFormTableService srcMemberFormTableService) { + this.srcMemberFormTableService = srcMemberFormTableService; + } + + + /** + * 调用接口根据人员组织架构信息补充人员档案信息 + * @return + * @throws IOException + */ + @POST + @Path("/saveMemberFormTableMain") + @Produces({"application/json"}) + @Consumes({"application/json"}) + public Response saveMemberFormTableMain(){ + log.info("生成人员档案表"); + ReceiveOrgMemberResponse result = new ReceiveOrgMemberResponse(); + try{ +// 根据泛微流程ID获取泛微流程数据 + result = getSrcMemberFormTableService().saveMemberFormTableMain(); + if(result.isSuccess()) { + return success(result.getData()); + }else { + return fail(result.getMsg()); + } + } catch (Exception e) { + e.printStackTrace(); + return fail(e.getMessage()); + } + } + +} diff --git a/v5/apps-customize/src/main/resources/needless_check_login.xml b/v5/apps-customize/src/main/resources/needless_check_login.xml new file mode 100644 index 0000000..97114bc --- /dev/null +++ b/v5/apps-customize/src/main/resources/needless_check_login.xml @@ -0,0 +1,322 @@ + + + + /qrCodeForm.do + + index + newMain + + + + /sc.do + + qr + + + + /elearning.do + + error + m3Redirect + message + pcRedirect + + + + /phoneLogin/phoneLogin.do + + getMessageCode + validateMessageCode + + + + /wechat/miniprogram.do + + a8home + bind + bindMemberPhone + login + unbind + + + + /portal/spaceController.do + + showThemSpace + + + + /identification.do + + getSessionId + + + + /fileUpload.do + + showRTE + + + + /fileDownload.do + + showRTE + + + + /form/formUpgrade.do + + toUpgrade + upgrade + viewUpgrade + + + + formtalkFormMapperController.do + + importFormtalkData + + + + /thirdpartyController.do + + access + index + logoutNotify + show + mailAuth + + + + /main.do + + changeLocale + hangup + headerjs + index + login + login4Ucpc + login4Ucpc3 + login4Vjoin + logout + logout4Session + logout4Vjoin + logout4ZX + main + login4QrCode + qrCodeHelp + updateLoginSeed + + + + /trustdo/A8/XRD.do + + getLoginAccount + getLoginAcctoken + webLogin + + + + /share.do + + index + + + + /genericController.do + + index + + + + /edoc/edocUpgradeControllor.do + + upgrade + download + + + + /uploadService.do + + processUploadService + + + + /autoinstall.do + + ieSetDown + regInstallDown + regInstallDown64 + downloadAssistant + + + + /personalBind.do + + getBindTypeByLoginName + isCanUse + retrievePassword + sendVerificationCodeToBindEmail + sendVerificationCodeToBindNum + validateVerificationCode + + + + + + + + + + + /commonimage.do + + showImage + + + + /individualManager.do + + resetPassword + + + + /wechat/dingding.do + + binding + index + main + newIndex + newMain + viewh5Message + + + + /uc/rest.do + + commonPierce + downloadImage + getBgTimeStamp + getLoginsecurityMsg + sendsms + smsrequired + testIp + isQrLogin + getDigitalCodeInfo + + + + portalManager + + sendSMSLoginCode + smsLoginEnabled + + + + loginUserManager + + getLockTime + + + + qrCodeLoginManager + + isLogin + + + + meetingAjaxManager + + meetingPanelData + meetingPanelDisplay + + + + /m3/loginController.do + + transLogin + transLogout + getProfile + + + + /m3/mClientBindController.do + + bindApply + + + + m3ProductManager + + productInfo + productStatus + + + + /m3/homeSkinController.do + + downloadImage + getSkinImageUrl + + + + /m3/transModeController.do + + getTransModeForMobile + + + + /media/media.do + + mediaShow + + + + /ocipEdoc.do + + index + + + + /colView.do + + index + + + + /caAccountManagerController.do + + findKeyNumByLoginName + + + + /fddCallbackController.do + + asynch + synch + + + + /seeyonReport/seeyonReportController.do + + redirectSeeyonReport + + + + /imc.do + + index + logout + + + + + /cloudbuild.do + + download + getDownloadPageInfo + getLatestVersionInfo + getDownloadQrUrl + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/resources/needless_check_login_recheck.xml b/v5/apps-customize/src/main/resources/needless_check_login_recheck.xml new file mode 100644 index 0000000..0e84aeb --- /dev/null +++ b/v5/apps-customize/src/main/resources/needless_check_login_recheck.xml @@ -0,0 +1,426 @@ + + + + + + /qrCodeForm.do + com.seeyon.apps.qrCodeForm.controller.QrCodeFormController + + index + newMain + + + + + /sc.do + com.seeyon.cap4.form.modules.smartCode.controller.SmartCodeController + + qr + + + + /media/media.do + com.seeyon.ctp.common.media.controller.MediaController + + mediaShow + + + + /phoneLogin/phoneLogin.do + com.seeyon.ctp.login.controller.PhoneLoginController + + getMessageCode + validateMessageCode + + + + portalManager + com.seeyon.ctp.portal.manager.PortalManagerImpl + + sendSMSLoginCode + smsLoginEnabled + + + + /fileDownload.do + com.seeyon.ctp.common.fileupload.FileUploadController + + showRTE + + + + loginUserManager + com.seeyon.ctp.login.LoginUserManagerImpl + + getLockTime + + + + /main.do + com.seeyon.ctp.login.controller.MainController + + changeLocale + hangup + headerjs + index + login + login4Ucpc + login4Ucpc3 + login4Vjoin + logout + logout4Session + logout4Vjoin + logout4ZX + main + login4QrCode + qrCodeHelp + updateLoginSeed + + + + /trustdo/A8/XRD.do + com.seeyon.apps.trustdo.controller.XRDController + + getLoginAccount + getLoginAcctoken + webLogin + + + + /share.do + com.seeyon.v3x.system.share.controller.ShareController + + index + + + + /edoc/edocUpgradeControllor.do + com.seeyon.v3x.edoc.controller.EdocUpgradeControllor + + upgrade + download + + + + /m3/mClientBindController.do + com.seeyon.apps.m3.bind.controller.M3ClientBindController + + bindApply + + + + /uploadService.do + com.seeyon.ctp.services.FileUploadService + + processUploadService + + + + /uc/rest.do + com.seeyon.apps.zx.controller.ZxRestController + + commonPierce + downloadImage + getBgTimeStamp + getLoginsecurityMsg + sendsms + smsrequired + testIp + isQrLogin + getDigitalCodeInfo + + + + /m3/homeSkinController.do + com.seeyon.apps.m3.skin.controller.M3HomeSkinController + + downloadImage + getSkinImageUrl + + + + /colView.do + com.seeyon.apps.ocip.exchange.collaboration.controller.CollViewController + + index + + + + /autoinstall.do + com.seeyon.apps.autoinstall.controller.AutoInstallController + + ieSetDown + regInstallDown + regInstallDown64 + downloadAssistant + + + + + + + + + + + + /caAccountManagerController.do + com.seeyon.v3x.ca.caaccount.controller.CAAccountManagerController + + findKeyNumByLoginName + + + + /elearning.do + com.seeyon.apps.elearning.controller.ElearningController + + error + m3Redirect + message + pcRedirect + + + + /wechat/miniprogram.do + com.seeyon.apps.weixin.controller.MiniProgramController + + a8home + bind + bindMemberPhone + login + unbind + + + + /portal/spaceController.do + com.seeyon.ctp.portal.space.controller.SpaceController + + showThemSpace + + + + /identification.do + com.seeyon.v3x.identification.controller.IdentificationController + + getSessionId + + + + /fddCallbackController.do + com.seeyon.apps.econtract.fdd.controller.FddCallbackController + + asynch + synch + + + + m3ProductManager + com.seeyon.apps.m3.product.manager.impl.M3ProductManagerImpl + + productInfo + productStatus + + + + /ocipEdoc.do + com.seeyon.apps.ocip.exchange.edoc.OCIPEdocController + + index + + + + /m3/loginController.do + + transLogin + transLogout + getProfile + + + + /fileUpload.do + com.seeyon.ctp.common.fileupload.FileUploadController + + showRTE + processUpload + + + + qrCodeLoginManager + com.seeyon.ctp.login.manager.QrCodeLoginManagerImpl + + isLogin + + + + /form/formUpgrade.do + com.seeyon.ctp.form.service.FormUpgradeController + + toUpgrade + upgrade + viewUpgrade + + + + /seeyonReport/seeyonReportController.do + com.seeyon.apps.seeyonreport.controller.SeeyonReportController + + redirectSeeyonReport + + + + formtalkFormMapperController.do + com.seeyon.apps.formtalk.controller.FormtalkImportController + + importFormtalkData + + + + /thirdpartyController.do + com.seeyon.ctp.portal.sso.thirdpartyintegration.controller.ThirdpartyController + + access + index + logoutNotify + show + mailAuth + + + + /m3/transModeController.do + com.seeyon.apps.m3.transmissionmode.controller.M3TransModeController + + getTransModeForMobile + + + + /genericController.do + com.seeyon.v3x.common.controller.GenericController + + index + + + + /personalBind.do + com.seeyon.v3x.personalaffair.controller.PersonalBindController + + getBindTypeByLoginName + isCanUse + retrievePassword + sendVerificationCodeToBindEmail + sendVerificationCodeToBindNum + validateVerificationCode + + + + /commonimage.do + com.seeyon.apps.common.image.controller.ImageController + + showImage + + + + /individualManager.do + com.seeyon.v3x.personalaffair.controller.IndividualManagerController + + resetPassword + + + + meetingAjaxManager + com.seeyon.apps.meeting.manager.MeetingAjaxManagerImpl + + meetingPanelData + meetingPanelDisplay + + + + /wechat/dingding.do + com.seeyon.apps.weixin.controller.DingDingController + + binding + index + main + newIndex + newMain + viewh5Message + + + + /imc.do + com.seeyon.apps.imc.controller.ImcLoginController + + index + logout + + + + /wechat/feishu.do + com.seeyon.apps.weixin.controller.FeishuController + + newMain + viewh5Message + + + + + + + + + + + + + + + /wechat/pcapp.do + com.seeyon.apps.weixin.controller.PcAppController + + transferPageFromWxCoreServer + gotoPcApp + checkCodeTurnToRightPage + transfer + transferMsg + + + + /wechat/feishu/approvalData.do + com.seeyon.apps.zhifei.feishu.approval.controller.ApprovalDataController + + index + + + + /zhifei/feishu.do + com.seeyon.apps.zhifei.controller.FeishuController + + newMain + viewh5Message + + + + /zhifei/pcapp.do + com.seeyon.apps.zhifei.controller.ZhifeiPcAppController + + transferPageFromWxCoreServer + gotoPcApp + + + + /zhifei/feishu/approvalData.do + com.seeyon.apps.zhifei.feishu.approval.controller.ApprovalDataController + + index + + + + /cloudbuild.do + com.seeyon.apps.cloudbuild.controller.CloudBuildController + + download + getDownloadPageInfo + getLatestVersionInfo + getDownloadQrUrl + + + diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/pluginCfg.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/pluginCfg.xml new file mode 100644 index 0000000..c12ee18 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/pluginCfg.xml @@ -0,0 +1,6 @@ + + + qrCodeForm + 二维码扫码填单 + 20220422 + diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-controller.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-controller.xml new file mode 100644 index 0000000..93d89e1 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-controller.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-manager.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-manager.xml new file mode 100644 index 0000000..7d6233b --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-manager.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-plugin.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-plugin.xml new file mode 100644 index 0000000..de1e69f --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/qrCodeForm/spring/spring-qrCodeForm-plugin.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/pluginCfg.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/pluginCfg.xml new file mode 100644 index 0000000..a5fce69 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_mainorganization + 稻花香主数据同步 + 20241220 + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-controller.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-controller.xml new file mode 100644 index 0000000..082e02d --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-controller.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-dao.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-dao.xml new file mode 100644 index 0000000..d088d3b --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-dao.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-fieldCtrl.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-fieldCtrl.xml new file mode 100644 index 0000000..2b0f3c0 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-fieldCtrl.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-node.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-node.xml new file mode 100644 index 0000000..d83cc64 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-quartz.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-quartz.xml new file mode 100644 index 0000000..0d8e0cc --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-quartz.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-server.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-server.xml new file mode 100644 index 0000000..987fa82 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-server.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-service.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-service.xml new file mode 100644 index 0000000..d878208 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring-service.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring.xml new file mode 100644 index 0000000..84d9063 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_mainorganization/spring/spring.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_quartformtable/pluginCfg.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_quartformtable/pluginCfg.xml new file mode 100644 index 0000000..a392322 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_quartformtable/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_quartformtable + 数据库表查询辅助管理 + 20250318 + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_quartformtable/spring/spring-dao.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_quartformtable/spring/spring-dao.xml new file mode 100644 index 0000000..6cd2fb6 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_quartformtable/spring/spring-dao.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/pluginCfg.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/pluginCfg.xml new file mode 100644 index 0000000..5d0f405 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_receiveFVFlow + 客户服务平台数据传递管理 + 20250212 + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/spring/spring-dao.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/spring/spring-dao.xml new file mode 100644 index 0000000..e282573 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/spring/spring-dao.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/spring/spring-service.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/spring/spring-service.xml new file mode 100644 index 0000000..ba7317d --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_receiveFVFlow/spring/spring-service.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_test/pluginCfg.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_test/pluginCfg.xml new file mode 100644 index 0000000..a798d9b --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_test/pluginCfg.xml @@ -0,0 +1,6 @@ + + + src_test + 稻花香断点测试超级节点 + 20241121 + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_test/spring/spring-node.xml b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_test/spring/spring-node.xml new file mode 100644 index 0000000..bb269f8 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/WEB-INF/cfgHome/plugin/src_test/spring/spring-node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp b/v5/apps-customize/src/main/webapp/WEB-INF/jsp/plugin/qrCodeForm/qrCodeFormIndex.jsp new file mode 100644 index 0000000..0f620b0 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/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/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/formQueryBtn.css b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/formQueryBtn.css new file mode 100644 index 0000000..ae96722 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/formQueryBtn.css @@ -0,0 +1,27 @@ +.customButton_class_box { + width: 100%; + line-height: 24px; + height:24px; + color: #1f85ec; + cursor: pointer; + font-family: "Microsoft YaHei"!important; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-break:keep-all; +} +.customButton_box_content{ + width: 100%; + height: 24px; + box-sizing: border-box; + -webkit-box-sizing : border-box; + -moz-box-sizing : border-box; + text-align: center; + outline: none; + border: 1px solid #1f85ec; + background-color: #fff; + border-radius: 15px; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; +} + diff --git a/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/img/icon16.png b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/img/icon16.png new file mode 100644 index 0000000..e43def3 Binary files /dev/null and b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/img/icon16.png differ diff --git a/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/setCondition.css b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/setCondition.css new file mode 100644 index 0000000..6e08db4 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/setCondition.css @@ -0,0 +1,13 @@ +.relation_container .panel_bottom .zidong_guanlian .guanlian_map{ + padding-left: 10px; +} +.relation_container .panel_bottom .zidong_guanlian .guanlian_map .error-title{ + margin: 0 2px; + visibility: hidden; +} +.relation_container .panel_bottom .zidong_guanlian .guanlian_map .error-title.active{ + visibility: visible; +} +.relation_container .biz_groupguanlian .div_sel3.active{ + border-color: red; +} \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/setTemplate.css b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/setTemplate.css new file mode 100644 index 0000000..a87540a --- /dev/null +++ b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/css/setTemplate.css @@ -0,0 +1,87 @@ +body{ + font-family: "microsoft yahei"; +} +#tab { + height: 26px; + width: 100%; + border-bottom: 1px solid #666666; + margin-bottom: 5px; +} +#tab span { + height: 30px; + line-height: 30px; + width: 50%; + font-size: 14px; + text-align: center; + color: #666666; + margin-right: 20px; + padding: 0 5px 0 5px; + cursor: pointer; +} +#tab span.select { + border-bottom: 2px solid #2453b3; + color: #2453b3; +} + +.list{ + list-style: none; + margin: 0; + padding: 0; + font-size: 14px; + height: 310px; + overflow: auto; +} +.list .active{ + background-color: #1F85EC; + border: 1px solid #1F85EC; + color: #ffffff; +} + +.list li{ + cursor: pointer; + margin: 3px 0 3px 0; +} +.list span{ + display: inline-block; + background: url("img/icon16.png") -32px -240px no-repeat scroll transparent; + margin-right: 2px; + vertical-align: middle; + width: 16px; + height: 16px; +} +.search-box { + height: 20px; + margin: 10px 0 10px 0; + position: relative; +} +.cap-icon-sousuo { + position: absolute; + top: 2px; + left: 170px; + color: #1F85EC; + font-size: 20px; + line-height: 20px; + cursor: pointer; +} +.cap-icon-sousuo:before { + content: ""; + background: url("img/icon16.png") -192px -176px no-repeat; + height: 16px; + line-height: 16px; + width: 16px; + font-size: 12px; + display: block; + position: absolute; + top: 5px; + margin-left: 2px; +} +.search-input { + background: #FFFFFF; + border: 1px solid #D4D4D4; + border-radius: 100px; + min-height: 20px; + width: 150px; + padding-right: 35px; + padding-left: 10px; + outline: none; +} diff --git a/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/LodopFuncs.js b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/LodopFuncs.js new file mode 100644 index 0000000..9bf5413 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/LodopFuncs.js @@ -0,0 +1,188 @@ +//==本JS是加载Lodop插件或Web打印服务CLodop/Lodop7的综合示例,可直接使用,建议理解后融入自己程序== + +//用双端口加载主JS文件Lodop.js(或CLodopfuncs.js兼容老版本)以防其中某端口被占: +var MainJS ="CLodopfuncs.js", + URL_WS1 = "ws://localhost:8000/"+MainJS, //ws用8000/18000 + URL_WS2 = "ws://localhost:18000/"+MainJS, + URL_HTTP1 = "http://localhost:8000/"+MainJS, //http用8000/18000 + URL_HTTP2 = "http://localhost:18000/"+MainJS, + URL_HTTP3 = "https://localhost.lodop.net:8443/"+MainJS; //https用8000/8443 + +var CreatedOKLodopObject, CLodopIsLocal, LoadJsState; + +//==判断是否需要CLodop(那些不支持插件的浏览器):== +function needCLodop() { + try { + var ua = navigator.userAgent; + if (ua.match(/Windows\sPhone/i) || + ua.match(/iPhone|iPod|iPad/i) || + ua.match(/Android/i) || + ua.match(/Edge\D?\d+/i)) + return true; + var verTrident = ua.match(/Trident\D?\d+/i); + var verIE = ua.match(/MSIE\D?\d+/i); + var verOPR = ua.match(/OPR\D?\d+/i); + var verFF = ua.match(/Firefox\D?\d+/i); + var x64 = ua.match(/x64/i); + if ((!verTrident) && (!verIE) && (x64)) return true; + else if (verFF) { + verFF = verFF[0].match(/\d+/); + if ((verFF[0] >= 41) || (x64)) return true; + } else if (verOPR) { + verOPR = verOPR[0].match(/\d+/); + if (verOPR[0] >= 32) return true; + } else if ((!verTrident) && (!verIE)) { + var verChrome = ua.match(/Chrome\D?\d+/i); + if (verChrome) { + verChrome = verChrome[0].match(/\d+/); + if (verChrome[0] >= 41) return true; + } + } + return false; + } catch (err) { + return true; + } +} + +//==检查加载成功与否,如没成功则用http(s)再试== +//==低版本CLODOP6.561/Lodop7.043及前)用本方法== +function checkOrTryHttp() { + if (window.getCLodop) { + LoadJsState = "complete"; + return true; + } + if (LoadJsState == "loadingB" || LoadJsState == "complete") return; + LoadJsState = "loadingB"; + var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement; + var JS1 = document.createElement("script") + ,JS2 = document.createElement("script") + ,JS3 = document.createElement("script"); + JS1.src = URL_HTTP1; + JS2.src = URL_HTTP2; + JS3.src = URL_HTTP3; + JS1.onload = JS2.onload = JS3.onload = JS2.onerror = JS3.onerror=function(){LoadJsState = "complete";} + JS1.onerror = function(e) { + if (window.location.protocol !== 'https:') + head.insertBefore(JS2, head.firstChild); else + head.insertBefore(JS3, head.firstChild); + } + head.insertBefore(JS1,head.firstChild); +} + +//==加载Lodop对象的主过程:== +(function loadCLodop(){ + if (!needCLodop()) return; + CLodopIsLocal = !!((URL_WS1 + URL_WS2).match(/\/\/localho|\/\/127.0.0./i)); + LoadJsState = "loadingA"; + if (!window.WebSocket && window.MozWebSocket) window.WebSocket=window.MozWebSocket; + //ws方式速度快(小于200ms)且可避免CORS错误,但要求Lodop版本足够新: + try { + var WSK1=new WebSocket(URL_WS1); + WSK1.onopen = function(e) { setTimeout("checkOrTryHttp();",200); } + WSK1.onmessage = function(e) {if (!window.getCLodop) eval(e.data);} + WSK1.onerror = function(e) { + var WSK2=new WebSocket(URL_WS2); + WSK2.onopen = function(e) {setTimeout("checkOrTryHttp();",200);} + WSK2.onmessage = function(e) {if (!window.getCLodop) eval(e.data);} + WSK2.onerror= function(e) {checkOrTryHttp();} + } + } catch(e){ + checkOrTryHttp(); + } +})(); + +//==获取LODOP对象主过程,判断是否安装、需否升级:== +function getLodop(oOBJECT, oEMBED) { + var strFontTag = "
打印控件"; + var strLodopInstall = strFontTag + "未安装!点击这里执行安装"; + var strLodopUpdate = strFontTag + "需要升级!点击这里执行升级"; + var strLodop64Install = strFontTag + "未安装!点击这里执行安装"; + var strLodop64Update = strFontTag + "需要升级!点击这里执行升级"; + var strCLodopInstallA = "
Web打印服务CLodop未安装启动,点击这里下载执行安装"; + var strCLodopInstallB = "
(若此前已安装过,可点这里直接再次启动)"; + var strCLodopUpdate = "
Web打印服务CLodop需升级!点击这里执行升级"; + var strLodop7FontTag = "
Web打印服务Lodop7"; + var strLodop7HrefX86 = "点击这里下载安装(下载后解压,点击lodop文件开始执行)"; + var strLodop7HrefARM = "点击这里下载安装(下载后解压,点击lodop文件开始执行)"; + var strLodop7Install_X86 = strLodop7FontTag + "未安装启动," + strLodop7HrefX86; + var strLodop7Install_ARM = strLodop7FontTag + "未安装启动," + strLodop7HrefARM; + var strLodop7Update_X86 = strLodop7FontTag + "需升级," + strLodop7HrefX86; + var strLodop7Update_ARM = strLodop7FontTag + "需升级," + strLodop7HrefARM; + var strInstallOK = ",成功后请刷新本页面或重启浏览器。"; + var LODOP; + try { + var isWinIE = (/MSIE/i.test(navigator.userAgent)) || (/Trident/i.test(navigator.userAgent)); + var isWinIE64 = isWinIE && (/x64/i.test(navigator.userAgent)); + var isLinuxX86 = (/Linux/i.test(navigator.platform)) && (/x86/i.test(navigator.platform)); + var isLinuxARM = (/Linux/i.test(navigator.platform)) && (/aarch/i.test(navigator.platform)); + + if (needCLodop() || isLinuxX86 || isLinuxARM) { + try { + LODOP = window.getCLodop(); + } catch (err) {} + if (!LODOP && LoadJsState !== "complete") { + if (!LoadJsState) + alert("未曾加载Lodop主JS文件,请先调用loadCLodop过程."); else + alert("网页还没下载完毕,请稍等一下再操作."); + return; + } + var strAlertMessage; + if (!LODOP) { + if (isLinuxX86) + strAlertMessage = strLodop7Install_X86; + else if (isLinuxARM) + strAlertMessage = strLodop7Install_ARM; + else + strAlertMessage = strCLodopInstallA + (CLodopIsLocal ? strCLodopInstallB : ""); + document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML; + return; + } else { + if (isLinuxX86 && LODOP.CVERSION < "7.0.4.3") + strAlertMessage = strLodop7Update_X86; + else if (isLinuxARM && LODOP.CVERSION < "7.0.4.3") + strAlertMessage = strLodop7Update_ARM; + else if (CLODOP.CVERSION < "6.5.7.1") + strAlertMessage = strCLodopUpdate; + + if (strAlertMessage) + document.body.innerHTML = strAlertMessage + strInstallOK + document.body.innerHTML; + } + } else { + //==如果页面有Lodop插件就直接使用,否则新建:== + if (oOBJECT || oEMBED) { + if (isWinIE) + LODOP = oOBJECT; + else + LODOP = oEMBED; + } else if (!CreatedOKLodopObject) { + LODOP = document.createElement("object"); + LODOP.setAttribute("width", 0); + LODOP.setAttribute("height", 0); + LODOP.setAttribute("style", "position:absolute;left:0px;top:-100px;width:0px;height:0px;"); + if (isWinIE) + LODOP.setAttribute("classid", "clsid:2105C259-1E0C-4534-8141-A753534CB4CA"); + else + LODOP.setAttribute("type", "application/x-print-lodop"); + document.documentElement.appendChild(LODOP); + CreatedOKLodopObject = LODOP; + } else + LODOP = CreatedOKLodopObject; + //==Lodop插件未安装时提示下载地址:== + if ((!LODOP) || (!LODOP.VERSION)) { + document.body.innerHTML = (isWinIE64 ? strLodop64Install : strLodopInstall) + strInstallOK + document.body.innerHTML; + return LODOP; + } + if (LODOP.VERSION < "6.2.2.6") { + document.body.innerHTML = (isWinIE64 ? strLodop64Update : strLodopUpdate) + strInstallOK + document.body.innerHTML; + } + } + //===如下空白位置适合调用统一功能(如注册语句、语言选择等):======================= + + + //=============================================================================== + return LODOP; + } catch (err) { + alert("getLodop出错:" + err); + } +} + diff --git a/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/setTemplate.js b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/setTemplate.js new file mode 100644 index 0000000..bc6bb40 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/setTemplate.js @@ -0,0 +1,99 @@ +var unflowList, param, loading, process; +$(document).ready(function() { + param = initParam().params;// 获取页面参数 + // 处理进度条 + process = top.$.progressBar({ + text : "加载中..." + }); + loading = true; + getUnflowList(); +}); + + +// 获取底表 +function getUnflowList() { + $.ajax({ + url : "/seeyon/rest/cap4/unflow/select", + async : true, + success : function(data) { + // 处理进度条 + if (loading) + process.close(); + loading = false; + //data = JSON.parse(data); + var result = data.data; + unflowList = result; + for (var i = 0; i < result.length; i++) { + $("#queryList ul").append( + $("
  • " + + result[i].name + + "
  • ").attr("info", + JSON.stringify(result[i]))); + } + $("#queryList ul").delegate( + "li", + "click", + function() { + $(this).siblings().removeClass('active').end() + .addClass('active'); + }); + if (param && param.id) { // 激活当前项 + $('#' + param.id).trigger('click'); + } + } + }); +} + +// 搜索 +function search() { + var searchValue = $("#search_query").val(); + $("#queryList ul").empty(); + for (var i = 0; i < unflowList.length; i++) { + if (unflowList[i].name.indexOf(searchValue) != -1) { + $("#queryList ul").append( + $("
  • " + + unflowList[i].name + "
  • ").attr( + "info", JSON.stringify(unflowList[i]))); + } + } +} + +// 返回参数获取 +function getResult() { + return JSON.parse($("#queryList ul").find(".active").attr("info") + || "{}"); +} + +// --------------------以下为固定方法,需要实现返回参数获取-------------- + +// 获取弹窗传递过来的参数 +function initParam() { + var obj = window.parentDialogObj && (window.parentDialogObj["ctrlDialog"]);// 获取窗口对象 + if (obj && obj.getTransParams) { + // 然后通过V5方法获取弹窗传递过来的参数 + return obj.getTransParams(); + } +} + +// 确定按钮调用方法,返回需要的json数据 +function OK() { + var result = getResult(); + + if (param && param.designId !== result.designId) + return { + valid : true, + data : { + customParam : { + templateId : result, + mapping : null + } + } + }; + + return { + valid : true, + data : result + }; +} \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/synchronization.js b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/synchronization.js new file mode 100644 index 0000000..3a4d691 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/apps_res/cap/customCtrlResources/synchronizationBtnResources/js/synchronization.js @@ -0,0 +1,275 @@ +(function(_self, factory) { + var nameSpace = 'customBtn_8381906109546975519'; + if (!window[nameSpace] && typeof factory === 'function') { + var Builder = factory(); + window[nameSpace] = { + initBtn : {} + }; + /** + * 初始化方法 + */ + window[nameSpace].init = function(el, options) { + var identification = Math.floor(Math.round() * 10000000000) + .toString(); + window[nameSpace].initBtn[identification] = new Builder(el, + options, _self, identification); + } + } +}) +( + window, + function() { + /** + * js,css文件加载方法 + */ + var dynamicLoading = { + css : function(path, name, callBk) { + if (!path || path.length === 0) { + throw new Error('argument "path" is required !'); + } + var head = document.getElementsByTagName('head')[0]; + var link = document.createElement('link'); + link.href = path; + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.setAttribute('data-name', name); + link.onload = function() { + callBk(); + } + head.appendChild(link); + }, + insertCss : function(innerTexts, name) { + var head = document.getElementsByTagName('head')[0]; + var style = document.createElement('style'); + style.type = 'text/css'; + style.setAttribute('data-name', name); + try { + style.appendChild(document + .createTextNode(innerTexts)); + } catch (ex) { + style.styleSheet.cssText = innerTexts;// 针对IE + } + head.appendChild(style); + }, + checkCss : function(name) { + var styleList = document + .getElementsByTagName('style'); + for (var i = 0; i < styleList.length; i++) { + if (styleList[i].getAttribute('data-name') === name) + return true; + } + return false; + }, + js : function(path, callBk) { + if (!path || path.length === 0) { + throw new Error('argument "path" is required !'); + } + var head = document.getElementsByTagName('head')[0]; + var script = document.createElement('script'); + script.src = path; + script.type = 'text/javascript'; + script.onload = function() { + callBk(); + } + head.appendChild(script); + }, + checkJs : function(name) { + var scriptList = document + .getElementsByTagName('script'); + for (var i = 0; i < scriptList.length; i++) { + if (scriptList[i].getAttribute('data-name') === name) + return true; + } + return false; + }, + } + /** + * 浏览器 + */ + function myBrowser() { + var userAgent = navigator.userAgent; // 取得浏览器的userAgent字符串 + var isOpera = userAgent.indexOf("Opera") > -1; + if (isOpera) { // 判断是否Opera浏览器 + return "Opera" + } + ; + if (userAgent.indexOf("Firefox") > -1) { // 判断是否Firefox浏览器 + return "FF"; + } + ; + if (userAgent.indexOf("Chrome") > -1) { + return "Chrome"; + } + ; + if (userAgent.indexOf("Safari") > -1) { // 判断是否Safari浏览器 + return "Safari"; + } + ; + if (userAgent.indexOf("compatible") > -1 + && userAgent.indexOf("MSIE") > -1 && !isOpera) { // 判断是否IE浏览器 + return "IE"; + } + ; + } + /** + * 定义标签打印按钮的构造函数 + * + * @param {*} + * options + * @param {*} + * _self + */ + function labelPrintingBtn(el, options, _self, + identification) { + var self = this; + self.window_self = _self; + self.el = el; + self.identification = identification; + // 解析传进来的数据 + self.initParams(options); + // 处理挂载 + self.initBtn(el); + // 销毁自己 + self.beforeDestroy = function() { + self = null; + } + } + /** + * 构造函数的原型方法 + */ + labelPrintingBtn.prototype = { + initParams : function(options) { + this.place = options.place; + this.rowData = options.rowData; + this.data = options.data; + }, + initBtn : function(el) { + /** + * 挂载dom初始化处理 + */ + var innerTexts = '.labelPrintingBtnHandler {' + + 'background-color: rgba(0,0,0,0);' + + 'font-family: "Ping Fang SC", "Microsoft YaHei", Arial, Helvetica, sans-serif, "SimSun";' + + 'cursor: pointer;' + + 'white-space : nowrap;' + + 'border: 0;' + + 'overflow: hidden;' + + 'text-overflow: ellipsis;' + + '}' + + '.labelPrintingBtnBox { box-sizing: border-box; cursor: pointer; outline: none; font-family: inherit; white-space: nowrap;display: inline-block; margin-top: 5px; vertical-align: middle; margin-right: 5px;' + + ' background-color: #fff; border: 1px solid #d4d4d4; color: #666;font-size: 14px; line-height: 28px; border-radius: 15px; height: 30px;}' + + '.labelPrintingBtnBox:hover{ border-color: #1f85ec; }' + + '.labelPrintingBtnRow{color: #1f85ec;}' + + '.labelPrintingBtnRow:hover{color : #479bf3}' + + '.labelPrintingBtnLi{color : #333}' + + '.labelPrintingBtnLi:hover{color : #fff}'; + if (!dynamicLoading.checkCss('labelPrintingBtn')) { + dynamicLoading.insertCss(innerTexts, + 'labelPrintingBtn'); + } + // 挂载dom + this.appendDom(el); + }, + appendDom : function(el) { + var self = this; + var labelPrint = document.createElement('div'), labelPrintToolbar, labelPrintIcon; + // 对代码片段进行配置 + el.appendChild(labelPrint); + // 根据不同位置渲染按钮 + switch (this.place) { + case 'toolbar': + labelPrint.parentNode.setAttribute('class', + 'labelPrintingBtnBox'); + labelPrint.style.padding = '0 14px'; + // 加入icon + labelPrintIcon = document.createElement('i'); + labelPrintIcon.setAttribute('class', + 'CAP cap-icon-dayin'); + labelPrintIcon.style.color = '#C3AF1C'; + labelPrint.appendChild(labelPrintIcon); + // 加入name信息 + labelPrintToolbar = document + .createElement('span'); + labelPrintToolbar.innerHTML = this.data + && this.data.name ? this.data.name : ''; + labelPrintToolbar.style.paddingLeft = '3px'; + labelPrint.appendChild(labelPrintToolbar); + break; + case 'li': + labelPrint.innerHTML = this.data + && this.data.name ? this.data.name : ''; + labelPrint + .setAttribute('class', + 'labelPrintingBtnLi labelPrintingBtnHandler') + break; + case 'row': + labelPrint.innerHTML = this.data + && this.data.name ? this.data.name : ''; + labelPrint + .setAttribute('class', + 'labelPrintingBtnRow labelPrintingBtnHandler') + break; + default: + } + labelPrint.onclick = function() { + switch (self.place) { + case 'toolbar': + // 点击执行对应的操作 + self.implementClick(); + break; + case 'li': + case 'row': + // 点击执行对应的操作 + self.implementClick(self.rowData); + break; + default: + } + + } + // 阻止数据污染 + labelPrint.parentNode.onclick = function(e) { + e.stopPropagation(); + } + }, + // 执行点击事件 + implementClick : function(rowData) { + var url2 = window.location.origin; + var result = confirm('是否执行同步!此操作位全量同步'); + if(result){ + $.ajax({ + //请求url + //url: 'http://127.0.0.1:8888/seeyon/servlet/partnersUnbindingServlet', + contentType:"application/json", + url: url2+'/seeyon/organizationFieldCtrlController.do', + //请求参数 + data: "", + //请求类型 + type: 'POST', + //响应体结果设置 + dataType: 'json', + //成功的回调函数 + success: function(data){ + alert("调用成功"); + }, + //失败的回调函数 + error: function(){ + alert("失败的回调"); + } + }); + this.handlerLogic(datas); + }else{ + + + } + + }, + // 点击逻辑执行 + handlerLogic : function(rowData) { + $.alert(JSON.stringify(rowData)); + } + }; + /** + * 返回值 + */ + return labelPrintingBtn; + }); \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/common/capextend/cap4/form/utils/qrcodeform/index.js b/v5/apps-customize/src/main/webapp/common/capextend/cap4/form/utils/qrcodeform/index.js new file mode 100644 index 0000000..ec27f89 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/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/v5/apps-customize/src/main/webapp/jsp/apps/src_mainorganization/businessStructureTree.jsp b/v5/apps-customize/src/main/webapp/jsp/apps/src_mainorganization/businessStructureTree.jsp new file mode 100644 index 0000000..cb4d3ac --- /dev/null +++ b/v5/apps-customize/src/main/webapp/jsp/apps/src_mainorganization/businessStructureTree.jsp @@ -0,0 +1,275 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%-- <%@ include file="/WEB-INF/jsp/common/INC/noCache.jsp"%> --%> +<%@ include file="/WEB-INF/jsp/common/common.jsp"%> +<%@ include file="/WEB-INF/jsp/ctp/form/common/common.js.jsp"%> + + + + 业务架构树 + + + +<%--
      --%> +
      +
      +
        +
        +
        +
        +
        +
        +
        +
        +
        +
        请点击左侧树节点查看人员信息
        +
        +
        +
        + + + \ No newline at end of file diff --git a/v5/apps-customize/src/main/webapp/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js b/v5/apps-customize/src/main/webapp/m3/apps/v5/capextend/cap4/form/utils/qrcodeform/index.js new file mode 100644 index 0000000..bc09362 --- /dev/null +++ b/v5/apps-customize/src/main/webapp/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