Browse Source

腾达北森

liuling 9 months ago
commit
a525a30eb8

+ 28 - 0
metadata/com/kingdee/eas/custom/beisen/beisen.package

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="com.kingdee.bos.metadata">
+    <package>com.kingdee.eas.custom.beisen</package>
+    <name>beisen</name>
+    <alias>package[com.kingdee.eas.custom.beisen.beisen].alias</alias>
+    <description>package[com.kingdee.eas.custom.beisen.beisen].description</description>
+    <basicCode />
+    <resource>
+        <rs key="package[com.kingdee.eas.custom.beisen.beisen].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="北森" />
+            <lang locale="zh_HK" value="北森" />
+            <lang locale="zh_TW" value="北森" />
+        </rs>
+        <rs key="package[com.kingdee.eas.custom.beisen.beisen].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="null" />
+            <lang locale="zh_HK" value="null" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="package[com.kingdee.eas.custom.beisen.beisen].extendedProperty.userDefined">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+    </resource>
+</package>
+

+ 125 - 0
metadata/com/kingdee/eas/custom/beisen/synchronousorg/synchronousOrg.facade

@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<facade xmlns="com.kingdee.bos.metadata">
+    <package>com.kingdee.eas.custom.beisen.synchronousorg</package>
+    <name>synchronousOrg</name>
+    <alias>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].alias</alias>
+    <description>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].description</description>
+    <userDefined>true</userDefined>
+    <bosType>897A8C4E</bosType>
+    <stereoType>false</stereoType>
+    <businessImplName>com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg</businessImplName>
+    <businessControllerName>com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrgController</businessControllerName>
+    <accessLevel>public</accessLevel>
+    <subClassingMode>normal</subClassingMode>
+    <methods>
+        <method>
+            <name>createOrUpdateOrg</name>
+            <isListenerMethod>false</isListenerMethod>
+            <alias>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].alias</alias>
+            <description>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].description</description>
+            <innerID>f83ef127-3bc2-4c60-a96c-7800ffb94797</innerID>
+            <accessLevel>public</accessLevel>
+            <subClassingMode>normal</subClassingMode>
+            <returnValueType />
+            <metadataRef />
+            <transactionAttribute>Supports</transactionAttribute>
+            <userDefined>true</userDefined>
+            <userDefinedLogic />
+            <parameters>
+                <parameter>
+                    <name>day</name>
+                    <alias>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[day].alias</alias>
+                    <description>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[day].description</description>
+                    <direction>in</direction>
+                    <dataType>Integer</dataType>
+                    <metadataRef />
+                    <userDefined>true</userDefined>
+                </parameter>
+                <parameter>
+                    <name>orgId</name>
+                    <alias>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[orgId].alias</alias>
+                    <description>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[orgId].description</description>
+                    <direction>in</direction>
+                    <dataType>String</dataType>
+                    <metadataRef />
+                    <userDefined>true</userDefined>
+                </parameter>
+                <parameter>
+                    <name>isDelete</name>
+                    <alias>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[isDelete].alias</alias>
+                    <description>facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[isDelete].description</description>
+                    <direction>in</direction>
+                    <dataType>Boolean</dataType>
+                    <metadataRef />
+                    <userDefined>true</userDefined>
+                </parameter>
+            </parameters>
+            <configured>false</configured>
+        </method>
+    </methods>
+    <resource>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="同步组织" />
+            <lang locale="zh_HK" value="同步組織" />
+            <lang locale="zh_TW" value="同步組織" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="null" />
+            <lang locale="zh_HK" value="null" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].extendedProperty.userDefined">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="创建北森组织" />
+            <lang locale="zh_HK" value="創建北森組織" />
+            <lang locale="zh_TW" value="創建北森組織" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="创建北森组织,通过新增字段北森组织id,北森组织id为空则在北森创建该组织" />
+            <lang locale="zh_HK" value="創建北森組織,通過新增字段北森組織id,北森組織id為空則在北森創建該組織" />
+            <lang locale="zh_TW" value="創建北森組織,通過新增字段北森組織id,北森組織id為空則在北森創建該組織" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[day].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="前沿天" />
+            <lang locale="zh_HK" value="前沿天" />
+            <lang locale="zh_TW" value="前沿天" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[day].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[isDelete].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="是否删除" />
+            <lang locale="zh_HK" value="是否刪除" />
+            <lang locale="zh_TW" value="是否刪除" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[isDelete].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[orgId].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="组织ID" />
+            <lang locale="zh_HK" value="組織ID" />
+            <lang locale="zh_TW" value="組織ID" />
+        </rs>
+        <rs key="facade[com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg].methods.method[createOrUpdateOrg].parameters.parameter[orgId].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+    </resource>
+</facade>
+

+ 28 - 0
metadata/com/kingdee/eas/custom/beisen/synchronousorg/synchronousorg.package

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="com.kingdee.bos.metadata">
+    <package>com.kingdee.eas.custom.beisen.synchronousorg</package>
+    <name>synchronousorg</name>
+    <alias>package[com.kingdee.eas.custom.beisen.synchronousorg.synchronousorg].alias</alias>
+    <description>package[com.kingdee.eas.custom.beisen.synchronousorg.synchronousorg].description</description>
+    <basicCode />
+    <resource>
+        <rs key="package[com.kingdee.eas.custom.beisen.synchronousorg.synchronousorg].alias">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="同步组织" />
+            <lang locale="zh_HK" value="同步組織" />
+            <lang locale="zh_TW" value="同步組織" />
+        </rs>
+        <rs key="package[com.kingdee.eas.custom.beisen.synchronousorg.synchronousorg].description">
+            <lang locale="en_US" value="null" />
+            <lang locale="zh_CN" value="null" />
+            <lang locale="zh_HK" value="null" />
+            <lang locale="zh_TW" value="null" />
+        </rs>
+        <rs key="package[com.kingdee.eas.custom.beisen.synchronousorg.synchronousorg].extendedProperty.userDefined">
+            <lang locale="en_US" value="true" />
+            <lang locale="zh_CN" value="true" />
+            <lang locale="zh_TW" value="true" />
+        </rs>
+    </resource>
+</package>
+

+ 25 - 0
metadata/com/kingdee/eas/custom/custom.package

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<package xmlns="com.kingdee.bos.metadata">
+	<package>com.kingdee.eas.custom</package>
+	<name>custom</name>
+	<alias>package[com.kingdee.eas.custom.custom].alias</alias>
+	<description>package[com.kingdee.eas.custom.custom].description</description>
+	<basicCode/>
+	<resource>
+		<rs key="package[com.kingdee.eas.custom.custom].description">
+			<lang locale="zh_CN" value="用户自定义"/>
+			<lang locale="zh_TW" value="用戶自定義"/>
+			<lang locale="en_US" value="custom"/>
+		</rs>
+		<rs key="package[com.kingdee.eas.custom.custom].extendedProperty.userDefined">
+			<lang locale="zh_CN" value="false"/>
+			<lang locale="zh_TW" value="null"/>
+			<lang locale="en_US" value="null"/>
+		</rs>
+		<rs key="package[com.kingdee.eas.custom.custom].alias">
+			<lang locale="zh_CN" value="用户自定义"/>
+			<lang locale="zh_TW" value="用戶自定義"/>
+			<lang locale="en_US" value="custom"/>
+		</rs>
+	</resource>
+</package>

+ 58 - 0
src/com/kingdee/eas/custom/beisen/synchronousorg/AbstractsynchronousOrgControllerBean.java

@@ -0,0 +1,58 @@
+package com.kingdee.eas.custom.beisen.synchronousorg;
+
+import javax.ejb.*;
+import java.rmi.RemoteException;
+import com.kingdee.bos.*;
+import com.kingdee.bos.util.BOSObjectType;
+import com.kingdee.bos.metadata.IMetaDataPK;
+import com.kingdee.bos.metadata.rule.RuleExecutor;
+import com.kingdee.bos.metadata.MetaDataPK;
+//import com.kingdee.bos.metadata.entity.EntityViewInfo;
+import com.kingdee.bos.framework.ejb.AbstractEntityControllerBean;
+import com.kingdee.bos.framework.ejb.AbstractBizControllerBean;
+//import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.dao.IObjectCollection;
+import com.kingdee.bos.service.ServiceContext;
+import com.kingdee.bos.service.IServiceContext;
+import com.kingdee.eas.framework.Result;
+import com.kingdee.eas.framework.LineResult;
+import com.kingdee.eas.framework.exception.EASMultiException;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+
+import java.lang.String;
+
+
+
+public abstract class AbstractsynchronousOrgControllerBean extends AbstractBizControllerBean implements synchronousOrgController
+{
+    protected AbstractsynchronousOrgControllerBean()
+    {
+    }
+
+    protected BOSObjectType getBOSType()
+    {
+        return new BOSObjectType("897A8C4E");
+    }
+
+    public void createOrUpdateOrg(Context ctx, int day, String orgId, boolean isDelete) throws BOSException
+    {
+        try {
+            ServiceContext svcCtx = createServiceContext(new MetaDataPK("f83ef127-3bc2-4c60-a96c-7800ffb94797"), new Object[]{ctx, new Integer(day), orgId, new Boolean(isDelete)});
+            invokeServiceBefore(svcCtx);
+              if(!svcCtx.invokeBreak()) {
+            _createOrUpdateOrg(ctx, day, orgId, isDelete);
+            }
+            invokeServiceAfter(svcCtx);
+        } catch (BOSException ex) {
+            throw ex;
+        } finally {
+            super.cleanUpServiceState();
+        }
+    }
+    protected void _createOrUpdateOrg(Context ctx, int day, String orgId, boolean isDelete) throws BOSException
+    {    	
+        return;
+    }
+
+}

+ 18 - 0
src/com/kingdee/eas/custom/beisen/synchronousorg/IsynchronousOrg.java

@@ -0,0 +1,18 @@
+package com.kingdee.eas.custom.beisen.synchronousorg;
+
+import com.kingdee.bos.BOSException;
+//import com.kingdee.bos.metadata.*;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+import com.kingdee.bos.Context;
+
+import com.kingdee.bos.Context;
+import com.kingdee.bos.BOSException;
+import java.lang.String;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+
+public interface IsynchronousOrg extends IBizCtrl
+{
+    public void createOrUpdateOrg(int day, String orgId, boolean isDelete) throws BOSException;
+}

+ 51 - 0
src/com/kingdee/eas/custom/beisen/synchronousorg/synchronousOrg.java

@@ -0,0 +1,51 @@
+package com.kingdee.eas.custom.beisen.synchronousorg;
+
+import com.kingdee.bos.framework.ejb.EJBRemoteException;
+import com.kingdee.bos.util.BOSObjectType;
+import java.rmi.RemoteException;
+import com.kingdee.bos.framework.AbstractBizCtrl;
+import com.kingdee.bos.orm.template.ORMObject;
+
+import com.kingdee.bos.Context;
+import com.kingdee.bos.BOSException;
+import java.lang.String;
+import com.kingdee.eas.custom.beisen.synchronousorg.*;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+
+public class synchronousOrg extends AbstractBizCtrl implements IsynchronousOrg
+{
+    public synchronousOrg()
+    {
+        super();
+        registerInterface(IsynchronousOrg.class, this);
+    }
+    public synchronousOrg(Context ctx)
+    {
+        super(ctx);
+        registerInterface(IsynchronousOrg.class, this);
+    }
+    public BOSObjectType getType()
+    {
+        return new BOSObjectType("897A8C4E");
+    }
+    private synchronousOrgController getController() throws BOSException
+    {
+        return (synchronousOrgController)getBizController();
+    }
+    /**
+     *创建北森组织,通过新增字段北森组织id,北森组织id为空则在北森创建该组织-User defined method
+     *@param day 前沿天
+     *@param orgId 组织ID
+     *@param isDelete 是否删除
+     */
+    public void createOrUpdateOrg(int day, String orgId, boolean isDelete) throws BOSException
+    {
+        try {
+            getController().createOrUpdateOrg(getContext(), day, orgId, isDelete);
+        }
+        catch(RemoteException err) {
+            throw new EJBRemoteException(err);
+        }
+    }
+}

+ 21 - 0
src/com/kingdee/eas/custom/beisen/synchronousorg/synchronousOrgController.java

@@ -0,0 +1,21 @@
+package com.kingdee.eas.custom.beisen.synchronousorg;
+
+import com.kingdee.bos.BOSException;
+//import com.kingdee.bos.metadata.*;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+import com.kingdee.bos.Context;
+
+import com.kingdee.bos.Context;
+import com.kingdee.bos.BOSException;
+import java.lang.String;
+import com.kingdee.bos.framework.*;
+import com.kingdee.bos.util.*;
+
+import java.rmi.RemoteException;
+import com.kingdee.bos.framework.ejb.BizController;
+
+public interface synchronousOrgController extends BizController
+{
+    public void createOrUpdateOrg(Context ctx, int day, String orgId, boolean isDelete) throws BOSException, RemoteException;
+}

+ 313 - 0
src/com/kingdee/eas/custom/beisen/synchronousorg/synchronousOrgControllerBean.java

@@ -0,0 +1,313 @@
+package com.kingdee.eas.custom.beisen.synchronousorg;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.kingdee.bos.metadata.data.SortType;
+import com.kingdee.bos.metadata.entity.*;
+import com.kingdee.bos.metadata.query.util.CompareType;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.*;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.beisen.utils.BeiSenUtils;
+import com.kingdee.eas.fi.arap.util.DBUtil;
+import com.kingdee.eas.framework.report.util.DBUtils;
+import com.kingdee.eas.hr.emp.PersonPositionCollection;
+import com.kingdee.eas.hr.emp.PersonPositionFactory;
+import com.kingdee.eas.hr.emp.PersonPositionInfo;
+import org.apache.log4j.Logger;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import com.kingdee.bos.*;
+
+
+/**
+ * 同步组织信息的控制类,继承自 AbstractsynchronousOrgControllerBean。
+ * 主要负责创建或更新组织信息,并将其同步到外部系统。
+ */
+public class synchronousOrgControllerBean extends AbstractsynchronousOrgControllerBean {
+    // 日志记录器,用于记录系统运行过程中的信息和错误
+    private static final Logger logger = Logger.getLogger(synchronousOrgControllerBean.class);
+    // 日期格式化对象,用于将日期格式化为指定的格式
+    private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+
+    /**
+     * 创建或更新组织信息并同步到外部系统的方法。
+     *
+     * @param ctx    上下文对象,包含系统运行时的环境信息
+     * @param day    时间范围,用于筛选指定天数内更新的组织信息
+     * @param orgId  组织 ID,如果不为空,则仅处理指定 ID 的组织信息
+     * @param isDelete 是否为删除操作
+     * @throws BOSException 执行过程中发生业务异常时抛出
+     */
+    @Override
+    protected void _createOrUpdateOrg(Context ctx, int day, String orgId, boolean isDelete) throws BOSException {
+        // 创建 BeiSenUtils 实例,用于与外部系统进行交互
+        BeiSenUtils beiSenUtils = new BeiSenUtils();
+        // 获取当前日期
+        Date now = new Date();
+        // 获取指定天数前的日期
+        Date dayBefore = getDayBefore(now, day);
+        // 创建查询视图信息,用于筛选组织信息
+        EntityViewInfo entityViewInfo = createEntityViewInfo(orgId, dayBefore, now);
+        try {
+            // 获取组织信息本地实例
+            IAdminOrgUnit localInstance = AdminOrgUnitFactory.getLocalInstance(ctx);
+            // 根据查询条件获取组织信息集合
+            AdminOrgUnitCollection adminOrgUnitCollection = localInstance.getAdminOrgUnitCollection(entityViewInfo);
+
+            // 遍历组织信息集合
+            for (int i = 0; i < adminOrgUnitCollection.size(); i++) {
+                // 获取当前组织信息
+                AdminOrgUnitInfo adminOrgUnitInfo = adminOrgUnitCollection.get(i);
+                String originalId = adminOrgUnitInfo.getString("originalId");
+                if (originalId == null) {
+                    originalId = "";
+                }
+                try {
+                    JSONObject requestBody;
+                    if (isDelete) {
+                        // 如果是删除操作,设置 isDelete 标志
+                        JSONObject jsonObject = new JSONObject();
+                        jsonObject.put("isDelete", 1);
+                        requestBody = getRequestBody(ctx, adminOrgUnitInfo, jsonObject);
+                    } else {
+                        requestBody = getRequestBody(ctx, adminOrgUnitInfo, null);
+                    }
+                    JSONObject orUpdateByOrg;
+                    if (originalId.isEmpty()) {
+                        // originalId 为空时,执行创建操作
+                        orUpdateByOrg = beiSenUtils.createOrUpdateByOrg(requestBody, null);
+                    } else {
+                        // originalId 不为空时,执行更新操作
+                        orUpdateByOrg = beiSenUtils.createOrUpdateByOrg(requestBody, adminOrgUnitInfo.getId().toString());
+                    }
+                    System.out.println("orUpdateByOrg:"+orUpdateByOrg);
+                    // 获取响应状态码
+                    String code = orUpdateByOrg.getString("code");
+                    if ("200".equals(code)) {
+                        if (originalId.isEmpty()) {
+                            // 响应状态码为 200 时,更新组织信息的 originalId 字段
+                            String data = orUpdateByOrg.getString("data");
+                            //adminOrgUnitInfo.put("originalId", data);
+                            // 保存更新后的组织信息
+                            String id = adminOrgUnitInfo.getId().toString();
+                            String sql = "update T_ORG_Admin set cforiginalId = '"+data+"' where FID = '"+id+"'";
+                            DBUtil.execute(ctx,sql);
+                        }
+                    } else {
+                        // 响应状态码不为 200 时,记录错误信息
+                        logError(adminOrgUnitInfo.getName(), orUpdateByOrg.getString("message"));
+                    }
+                } catch (IOException e) {
+                    // 捕获异常并记录错误信息
+                    e.printStackTrace();
+                    logError(adminOrgUnitInfo.getName(), e.getMessage());
+                    logger.error("处理组织信息时发生异常", e);
+                } catch (URISyntaxException e) {
+                    e.printStackTrace();
+                    logError(adminOrgUnitInfo.getName(), e.getMessage());
+                    logger.error("处理组织信息时发生异常", e);
+                }
+            }
+        } catch (BOSException e) {
+            logger.error("获取组织信息集合时发生异常", e);
+            throw e;
+        }
+
+        // 调用父类的 _createOrUpdateOrg 方法
+        super._createOrUpdateOrg(ctx, day, orgId, isDelete);
+    }
+
+    /**
+     * 获取请求体的方法,用于构建发送到外部系统的请求信息。
+     *
+     * @param context          上下文对象,包含系统运行时的环境信息
+     * @param adminOrgUnitInfo 组织信息对象
+     * @param requestBody      请求体对象,如果为空则创建一个新的请求体
+     * @return 构建好的请求体对象
+     * @throws BOSException 执行过程中发生业务异常时抛出
+     */
+    public JSONObject getRequestBody(Context context, AdminOrgUnitInfo adminOrgUnitInfo, JSONObject requestBody) throws BOSException {
+        if (requestBody == null) {
+            // 请求体为空时,创建一个新的请求体
+            requestBody = new JSONObject();
+        }
+
+        // 添加组织名称
+        requestBody.put("name", adminOrgUnitInfo.getName());
+        // 添加组织编号
+        requestBody.put("code", adminOrgUnitInfo.getNumber());
+
+        // 获取上级组织信息
+        AdminOrgUnitInfo parent = adminOrgUnitInfo.getParent();
+        if (parent != null) {
+            // 上级组织信息不为空时,添加上级组织原始 ID
+            requestBody.put("parentOriginalId", parent.getId().toString());
+        }
+
+        // 添加组织原始 ID
+        requestBody.put("originalId", adminOrgUnitInfo.getId().toString());
+
+        // 创建一个 JSON 数组,用于存储部门负责人 ID
+        JSONArray originalIds = new JSONArray();
+        // 获取组织的负责人岗位信息
+        PositionInfo responPosition = adminOrgUnitInfo.getResponPosition();
+        if (responPosition != null) {
+            // 负责人岗位信息不为空时,获取人员岗位信息
+            BOSUuid id = responPosition.getId();
+            EntityViewInfo entityViewInfo = createPersonPositionViewInfo(id);
+            try {
+                PersonPositionCollection personPositionCollection = PersonPositionFactory
+                        .getLocalInstance(context).getPersonPositionCollection(entityViewInfo);
+                // 遍历人员岗位信息集合
+                for (int i = 0; i < personPositionCollection.size(); i++) {
+                    // 获取当前人员岗位信息
+                    PersonPositionInfo personPositionInfo = personPositionCollection.get(i);
+                    // 获取人员信息
+                    PersonInfo person = personPositionInfo.getPerson();
+                    // 将人员 ID 添加到部门负责人 ID 数组中
+                    originalIds.add(person.getId().toString());
+                }
+            } catch (BOSException e) {
+                logger.error("获取人员岗位信息集合时发生异常", e);
+                throw e;
+            }
+        }
+
+        if (originalIds.size() > 0) {
+            // 部门负责人 ID 数组不为空时,添加部门负责人 ID 数组到请求体
+            requestBody.put("departmentLeaders", originalIds);
+        }
+
+        // 添加组织修改时间
+        requestBody.put("modifiedTime", formatDate(adminOrgUnitInfo.getLastUpdateTime()));
+        // 添加组织创建时间
+        requestBody.put("createTime", formatDate(adminOrgUnitInfo.getCreateTime()));
+
+        // 获取组织是否为销售组织状态
+        boolean isSaleOrgUnit = adminOrgUnitInfo.isIsSealUp();
+        // 根据销售组织状态设置组织状态
+        requestBody.put("status", isSaleOrgUnit ? 0 : 1);
+
+        return requestBody;
+    }
+
+    /**
+     * 获取指定日期前 x 天的日期的方法。
+     *
+     * @param specifiedDay 指定日期
+     * @param x            天数
+     * @return 指定日期前 x 天的日期
+     */
+    public Date getDayBefore(Date specifiedDay, int x) {
+        // 获取 Calendar 实例
+        Calendar c = Calendar.getInstance();
+        // 设置 Calendar 的时间为指定日期
+        c.setTime(specifiedDay);
+        // 将日期向前移动 x 天
+        c.add(Calendar.DATE, -x);
+        // 返回移动后的日期
+        return c.getTime();
+    }
+
+    /**
+     * 创建查询视图信息的方法,用于筛选组织信息。
+     *
+     * @param orgId     组织 ID,如果不为空,则仅查询指定 ID 的组织信息
+     * @param dayBefore 指定日期前的日期,用于筛选更新时间在该日期之后的组织信息
+     * @param date      当前日期,用于筛选更新时间在该日期之前的组织信息
+     * @return 查询视图信息对象
+     */
+    private EntityViewInfo createEntityViewInfo(String orgId, Date dayBefore, Date date) {
+        // 创建查询视图信息对象
+        EntityViewInfo entityViewInfo = new EntityViewInfo();
+        FilterInfo filterInfo = new FilterInfo();
+        if (orgId != null && !orgId.isEmpty()) {
+            // orgId 不为空时,添加查询条件,筛选组织 ID 等于指定 ID 的组织信息
+            filterInfo.getFilterItems().add(new FilterItemInfo("id", orgId, CompareType.EQUALS));
+        } else {
+            // orgId 为空时,添加查询条件,筛选更新时间在指定日期范围之内的组织信息
+            filterInfo.getFilterItems().add(new FilterItemInfo("lastUpdateTime", dayBefore, CompareType.GREATER_EQUALS));
+            filterInfo.getFilterItems().add(new FilterItemInfo("lastUpdateTime", date, CompareType.LESS_EQUALS));
+        }
+        // 设置查询条件到查询视图信息对象中
+        entityViewInfo.setFilter(filterInfo);
+
+        // 创建排序项集合
+        SorterItemCollection sorterItemCollection = new SorterItemCollection();
+        SorterItemInfo sorterItemInfo = new SorterItemInfo();
+        // 设置排序字段为组织长编号
+        sorterItemInfo.setPropertyName("longNumber");
+        // 设置排序方式为升序
+        sorterItemInfo.setSortType(SortType.ASCEND);
+        sorterItemCollection.add(sorterItemInfo);
+        // 设置排序项集合到查询视图信息对象中
+        entityViewInfo.setSorter(sorterItemCollection);
+
+        // 创建选择项集合
+        SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
+        selectorItemCollection.add("*");
+        selectorItemCollection.add("parent.*");
+        // 设置选择项集合到查询视图信息对象中
+        entityViewInfo.setSelector(selectorItemCollection);
+
+        return entityViewInfo;
+    }
+
+    /**
+     * 创建人员岗位查询视图信息的方法,用于筛选人员岗位信息。
+     *
+     * @param positionId 岗位 ID
+     * @return 人员岗位查询视图信息对象
+     */
+    private EntityViewInfo createPersonPositionViewInfo(BOSUuid positionId) {
+        // 创建查询视图信息对象
+        EntityViewInfo entityViewInfo = new EntityViewInfo();
+        FilterInfo filterInfo = new FilterInfo();
+        // 添加查询条件,筛选主要岗位等于指定岗位 ID 的人员岗位信息
+        filterInfo.getFilterItems().add(new FilterItemInfo("primaryPosition", positionId.toString(), CompareType.EQUALS));
+        // 添加查询条件,筛选人员已同步的人员岗位信息
+        filterInfo.getFilterItems().add(new FilterItemInfo("person.isSync", true, CompareType.EQUALS));
+        // 设置查询条件到查询视图信息对象中
+        entityViewInfo.setFilter(filterInfo);
+
+        SelectorItemCollection selectorItemCollection = new SelectorItemCollection();
+        selectorItemCollection.add("*");
+        selectorItemCollection.add("person.*");
+        // 设置选择项集合到查询视图信息对象中
+        entityViewInfo.setSelector(selectorItemCollection);
+
+        return entityViewInfo;
+    }
+
+    /**
+     * 格式化日期的方法,将日期格式化为指定格式。
+     *
+     * @param date 要格式化的日期
+     * @return 格式化后的日期字符串
+     */
+    private String formatDate(Date date) {
+        if (date == null) {
+            return null;
+        }
+        return DATE_FORMAT.format(date);
+    }
+
+    /**
+     * 记录错误信息的方法,将错误信息输出到控制台并记录到日志文件中。
+     *
+     * @param orgName 组织名称
+     * @param message 错误信息
+     */
+    private void logError(String orgName, String message) {
+        String errorMsg = orgName + " 同步失败:" + message;
+        System.out.println(errorMsg);
+        logger.error(errorMsg);
+    }
+}

+ 30 - 0
src/com/kingdee/eas/custom/beisen/synchronousorg/synchronousOrgFactory.java

@@ -0,0 +1,30 @@
+package com.kingdee.eas.custom.beisen.synchronousorg;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.BOSObjectFactory;
+import com.kingdee.bos.util.BOSObjectType;
+import com.kingdee.bos.Context;
+
+public class synchronousOrgFactory
+{
+    private synchronousOrgFactory()
+    {
+    }
+    public static com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg getRemoteInstance() throws BOSException
+    {
+        return (com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg)BOSObjectFactory.createRemoteBOSObject(new BOSObjectType("897A8C4E") ,com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg.class);
+    }
+    
+    public static com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg getRemoteInstanceWithObjectContext(Context objectCtx) throws BOSException
+    {
+        return (com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg)BOSObjectFactory.createRemoteBOSObjectWithObjectContext(new BOSObjectType("897A8C4E") ,com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg.class, objectCtx);
+    }
+    public static com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg getLocalInstance(Context ctx) throws BOSException
+    {
+        return (com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg)BOSObjectFactory.createBOSObject(ctx, new BOSObjectType("897A8C4E"));
+    }
+    public static com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg getLocalInstance(String sessionID) throws BOSException
+    {
+        return (com.kingdee.eas.custom.beisen.synchronousorg.IsynchronousOrg)BOSObjectFactory.createBOSObject(sessionID, new BOSObjectType("897A8C4E"));
+    }
+}

+ 142 - 0
src/com/kingdee/eas/custom/beisen/utils/BeiSenUtils.java

@@ -0,0 +1,142 @@
+package com.kingdee.eas.custom.beisen.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONArray;
+import com.kingdee.util.StringUtils;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+public class BeiSenUtils {
+//    /**
+//     * 获取访问令牌的 URL
+//     */
+////    public static final String ACCESSTOKEN_URL = "https://openapi.italent.cn/token";
+//
+//    /**
+//     * 创建部门 URL
+//     */
+////    public static final String DEPARTMENTSPOST = "https://openapi.italent.cn/UserFrameworkApiV3/api/v1/departments/Post";
+//
+//    /**
+//     * 跟新部门 URL
+//     */
+//
+////    public static final  String DEPARTMENTSPUT = "https://openapi.italent.cn/UserFrameworkApiV3/api/v1/departments/Put";
+    /**
+     * 构造函数,通过传入 APP_KEY 和 APP_SECRET 初始化对象
+     *
+     * @param app_key    北森应用的 APP_KEY
+     * @param app_secret 北森应用的 APP_SECRET
+     */
+    // 北森应用的 APP_KEY
+    public String APP_KEY = null;
+    // 北森应用的 APP_SECRET
+    public String APP_SECRET = null;
+    Properties propt = new Properties();
+
+    public BeiSenUtils(String app_key, String app_secret) {
+        // 加载配置文件
+        try {
+            propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/beiSen/BeiSenConfig.properties"));
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        this.APP_KEY = app_key;
+        this.APP_SECRET = app_secret;
+    }
+    /**
+     * 构造函数,从配置文件中读取 APP_KEY 和 APP_SECRET 初始化对象
+     */
+    public BeiSenUtils() {
+        try {
+            // 创建 Properties 对象用于读取配置文件
+            // 加载配置文件
+            propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/beiSen/BeiSenConfig.properties"));
+            // 从配置文件中获取 APP_KEY
+            this.APP_KEY = propt.getProperty("APP_KEY");
+            // 从配置文件中获取 APP_SECRET
+            this.APP_SECRET = propt.getProperty("APP_SECRET");
+        } catch (FileNotFoundException e) {
+            // 若文件未找到,抛出运行时异常
+            throw new RuntimeException(e);
+        } catch (IOException e) {
+            // 若读取文件时发生 IO 异常,抛出运行时异常
+            throw new RuntimeException(e);
+        }
+    }
+    /**
+     * 获取访问令牌
+     *
+     * @return 访问令牌字符串
+     * @throws FileNotFoundException 文件未找到异常
+     * @throws IOException           IO 异常
+     * @throws URISyntaxException    URI 语法异常
+     */
+    public String getAccessToken() throws FileNotFoundException, IOException, URISyntaxException {
+        String tenantAccessToken = null;
+        // 创建请求头的 Map
+        Map<String, String> header = new HashMap<String, String>();
+        // 设置请求头的 Content-Type
+        header.put("Content-Type", "application/x-www-form-urlencoded");
+        // 创建请求体的 JSONObject
+        JSONObject requestBody = new JSONObject();
+        // 设置请求体的 grant_type
+        requestBody.put("grant_type", "client_credentials");
+        // 设置请求体的 app_key
+        requestBody.put("app_key", APP_KEY);
+        // 设置请求体的 app_secret
+        requestBody.put("app_secret", APP_SECRET);
+        // 调用 Helper 类的 getURLEncoded 方法发送请求并获取响应的 JSONObject
+        JSONObject responseJson = Helper.getURLEncoded(propt.getProperty("ACCESSTOKEN_URL"), header, requestBody, "POST");
+        // 从响应的 JSONObject 中获取访问令牌
+        tenantAccessToken = responseJson.getString("access_token");
+        return tenantAccessToken;
+    }
+    public JSONObject createOrUpdateByOrg(JSONObject requestBody,String originalId) throws FileNotFoundException, IOException
+            , URISyntaxException {
+        // 用于存储响应数据的 JSONArray
+        JSONArray responseData = new JSONArray();
+        // 用于存储响应的 JSONObject
+        JSONObject responseJson = null;
+        // 获取访问令牌
+        String token = getAccessToken();
+        // 若访问令牌不为空且开始时间和结束时间不为空
+        if (!StringUtils.isEmpty(token)) {
+            // 创建请求头的 Map
+            Map<String, String> header = new HashMap<String, String>();
+            // 设置请求头的 Content-Type
+            header.put("Content-Type", "application/json");
+            // 设置请求头的 Authorization
+            header.put("Authorization", "Bearer " + token);
+            if (originalId!=null){
+                // 调用 Helper 类的 getURL 方法发送请求并获取响应的 JSONObject
+
+                originalId = URLEncoder.encode(originalId, "UTF-8");
+                header.put("originalId",originalId);
+                String departmentsput = propt.getProperty("DEPARTMENTSPUT");
+                departmentsput+="?originalId="+originalId;
+                responseJson = Helper.getURL(departmentsput,header, requestBody, "PUT");
+                System.out.println("url:"+departmentsput);
+                System.out.println("requestBody:"+requestBody);
+            }else {
+                responseJson = Helper.getURL(propt.getProperty("DEPARTMENTSPOST"), header, requestBody, "POST");
+                System.out.println("url:"+propt.getProperty("DEPARTMENTSPOST"));
+                System.out.println("requestBody:"+requestBody);
+            }
+
+        }
+        return responseJson;
+    }
+
+
+
+}

+ 308 - 0
src/com/kingdee/eas/custom/beisen/utils/Helper.java

@@ -0,0 +1,308 @@
+package com.kingdee.eas.custom.beisen.utils;
+
+import com.alibaba.fastjson.JSONException;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONArray;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.*;
+import java.util.Map.Entry;
+
+/**
+ * 提供一些常用的HTTP请求和文件下载的辅助方法。
+ */
+public class Helper {
+	/**
+	 * 发送HTTP请求并返回JSON格式响应。
+	 *
+	 * @param url         请求的URL地址
+	 * @param header      请求头信息,键值对形式
+	 * @param requestBody 请求体,以JSONObject形式表示
+	 * @param method      请求方法,支持"GET"、"POST"、"PUT"
+	 * @return 服务器响应的JSON对象
+	 * @throws URISyntaxException      如果URL格式不正确
+	 * @throws JSONException           如果JSON解析出错
+	 * @throws IOException             如果发生I/O错误
+	 * @throws ClientProtocolException 如果HTTP协议出错
+	 */
+	public static JSONObject getURL(String url, Map<String, String> header, JSONObject requestBody, String method)
+			throws URISyntaxException, JSONException, ClientProtocolException, IOException {
+		// 用于存储服务器响应的JSON对象
+		JSONObject responseJson = new JSONObject();
+		HttpResponse response;
+		// 创建一个默认的HTTP客户端
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+
+		if ("GET".equals(method)) {
+			// 创建一个URIBuilder对象,用于构建包含请求参数的URL
+			URIBuilder uriBuilder = new URIBuilder(url);
+			// 获取请求体中的所有键
+			Set<String> strings = requestBody.keySet();
+			// 遍历键值对,将其添加到URL的查询参数中
+			for (String string : strings) {
+				String key = string;
+				String value = requestBody.getString(key);
+				uriBuilder.addParameter(key, value);
+			}
+			// 创建一个HTTP GET请求
+			HttpGet httpGet = new HttpGet(uriBuilder.build());
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpGet.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 执行HTTP GET请求
+			response = httpClient.execute(httpGet);
+		} else if ("POST".equals(method)) {
+			// 创建一个HTTP POST请求
+			HttpPost httpPost = new HttpPost(url);
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpPost.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 创建一个StringEntity对象,将请求体以UTF-8编码包装
+			StringEntity requestEntity = new StringEntity(requestBody.toString(), "UTF-8");
+			httpPost.setEntity(requestEntity);
+			// 执行HTTP POST请求
+			response = httpClient.execute(httpPost);
+		} else if ("PUT".equals(method)) {
+			// 创建一个HTTP PUT请求
+			HttpPut httpPut = new HttpPut(url);
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpPut.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 创建一个StringEntity对象,将请求体以UTF-8编码包装
+			StringEntity requestEntity = new StringEntity(requestBody.toString(), "UTF-8");
+			httpPut.setEntity(requestEntity);
+			// 执行HTTP PUT请求
+			response = httpClient.execute(httpPut);
+		} else {
+			throw new IllegalArgumentException("Unsupported HTTP method: " + method);
+		}
+		// 将响应实体转换为字符串
+		String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
+		// 将响应字符串解析为JSON对象
+		responseJson = JSONObject.parseObject(responseBody);
+		// 关闭HTTP客户端
+		httpClient.close();
+		return responseJson;
+	}
+
+	/**
+	 * 发送HTTP请求并返回JSON格式响应,请求体为JSONArray。
+	 *
+	 * @param url         请求的URL地址
+	 * @param header      请求头信息,键值对形式
+	 * @param requestBody 请求体,以JSONArray形式表示
+	 * @param method      请求方法,支持"GET"、"POST"、"PUT"
+	 * @return 服务器响应的JSON对象
+	 * @throws URISyntaxException      如果URL格式不正确
+	 * @throws JSONException           如果JSON解析出错
+	 * @throws IOException             如果发生I/O错误
+	 * @throws ClientProtocolException 如果HTTP协议出错
+	 */
+	public static JSONObject getURL(String url, Map<String, String> header, JSONArray requestBody, String method)
+			throws URISyntaxException, JSONException, ClientProtocolException, IOException {
+		// 用于存储服务器响应的JSON对象
+		JSONObject responseJson = new JSONObject();
+		HttpResponse response;
+		// 创建一个默认的HTTP客户端
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+
+		if ("GET".equals(method)) {
+			// 创建一个URIBuilder对象,用于构建包含请求参数的URL
+			URIBuilder uriBuilder = new URIBuilder(url);
+			// 创建一个列表,用于存储请求参数
+			List paramList = new ArrayList();
+			// 将JSONArray中的元素添加到参数列表中
+			for (int i = 0; i < requestBody.size(); i++) {
+				paramList.add(requestBody.get(i));
+			}
+			// 将参数列表添加到URL的查询参数中
+			uriBuilder.addParameters(paramList);
+			// 创建一个HTTP GET请求
+			HttpGet httpGet = new HttpGet(uriBuilder.build());
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpGet.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 执行HTTP GET请求
+			response = httpClient.execute(httpGet);
+		} else if ("POST".equals(method)) {
+			// 创建一个HTTP POST请求
+			HttpPost httpPost = new HttpPost(url);
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpPost.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 创建一个StringEntity对象,将请求体以UTF-8编码包装
+			StringEntity requestEntity = new StringEntity(requestBody.toString(), "UTF-8");
+			httpPost.setEntity(requestEntity);
+			// 执行HTTP POST请求
+			response = httpClient.execute(httpPost);
+		} else if ("PUT".equals(method)) {
+			// 创建一个HTTP PUT请求
+			HttpPut httpPut = new HttpPut(url);
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpPut.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 创建一个StringEntity对象,将请求体以UTF-8编码包装
+			StringEntity requestEntity = new StringEntity(requestBody.toString(), "UTF-8");
+			httpPut.setEntity(requestEntity);
+			// 执行HTTP PUT请求
+			response = httpClient.execute(httpPut);
+		} else {
+			throw new IllegalArgumentException("Unsupported HTTP method: " + method);
+		}
+		// 将响应实体转换为字符串
+		String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
+		// 将响应字符串解析为JSON对象
+		responseJson = JSONObject.parseObject(responseBody);
+		// 关闭HTTP客户端
+		httpClient.close();
+		return responseJson;
+	}
+
+	/**
+	 * 发送编码后的HTTP请求并返回JSON格式响应。
+	 *
+	 * @param url         请求的URL地址
+	 * @param header      请求头信息,键值对形式
+	 * @param requestBody 请求体,以JSONObject形式表示
+	 * @param method      请求方法,支持"GET"、"POST"、"PUT"
+	 * @return 服务器响应的JSON对象
+	 * @throws URISyntaxException      如果URL格式不正确
+	 * @throws JSONException           如果JSON解析出错
+	 * @throws IOException             如果发生I/O错误
+	 * @throws ClientProtocolException 如果HTTP协议出错
+	 */
+	public static JSONObject getURLEncoded(String url, Map<String, String> header, JSONObject requestBody, String method)
+			throws URISyntaxException, JSONException, ClientProtocolException, IOException {
+		// 用于存储服务器响应的JSON对象
+		JSONObject responseJson = new JSONObject();
+		HttpResponse response;
+		// 创建一个默认的HTTP客户端
+		CloseableHttpClient httpClient = HttpClients.createDefault();
+
+		if ("GET".equals(method)) {
+			// 创建一个URIBuilder对象,用于构建包含请求参数的URL
+			URIBuilder uriBuilder = new URIBuilder(url);
+			// 创建一个HTTP GET请求
+			HttpGet httpGet = new HttpGet(uriBuilder.build());
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpGet.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 获取请求体中的所有键
+			Set<String> strings = requestBody.keySet();
+			// 遍历键值对,将其添加到URL的查询参数中
+			for (String string : strings) {
+				String key = string;
+				String value = requestBody.getString(key);
+				uriBuilder.addParameter(key, value);
+			}
+			// 执行HTTP GET请求
+			response = httpClient.execute(httpGet);
+		} else if ("POST".equals(method)) {
+			// 创建一个HTTP POST请求
+			HttpPost httpPost = new HttpPost(url);
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpPost.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 创建一个列表,用于存储请求参数
+			ArrayList<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
+			// 获取请求体中的所有键
+			Set<String> strings = requestBody.keySet();
+			// 遍历键值对,将其添加到参数列表中
+			for (String string : strings) {
+				String key = (String) string;
+				String value = requestBody.getString(key);
+				list.add(new BasicNameValuePair(key, value));
+			}
+			// 创建一个UrlEncodedFormEntity对象,将参数列表以UTF-8编码包装
+			httpPost.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
+			// 执行HTTP POST请求
+			response = httpClient.execute(httpPost);
+		} else if ("PUT".equals(method)) {
+			// 创建一个HTTP PUT请求
+			HttpPut httpPut = new HttpPut(url);
+			// 设置请求头信息
+			for (Entry<String, String> entry : header.entrySet()) {
+				httpPut.addHeader(entry.getKey(), entry.getValue());
+			}
+			// 创建一个列表,用于存储请求参数
+			ArrayList<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
+			// 获取请求体中的所有键
+			Set<String> strings = requestBody.keySet();
+			// 遍历键值对,将其添加到参数列表中
+			for (String string : strings) {
+				String key = (String) string;
+				String value = requestBody.getString(key);
+				list.add(new BasicNameValuePair(key, value));
+			}
+			// 创建一个UrlEncodedFormEntity对象,将参数列表以UTF-8编码包装
+			httpPut.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));
+			// 执行HTTP PUT请求
+			response = httpClient.execute(httpPut);
+		} else {
+			throw new IllegalArgumentException("Unsupported HTTP method: " + method);
+		}
+		// 将响应实体转换为字符串
+		String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8");
+		// 将响应字符串解析为JSON对象
+		responseJson = JSONObject.parseObject(responseBody);
+		// 关闭HTTP客户端
+		httpClient.close();
+		return responseJson;
+	}
+
+	/**
+	 * 通过网络URL获取文件的字节数组。
+	 *
+	 * @param urlStr 文件的网络URL地址
+	 * @return 文件的字节数组
+	 * @throws IOException 如果发生I/O错误
+	 */
+	public static byte[] getBytesByNetURL(String urlStr) throws IOException {
+		// 创建一个URL对象
+		URL url = new URL(urlStr);
+		// 创建一个HTTP连接
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+		// 设置连接超时时间为5秒
+		conn.setConnectTimeout(5 * 1000);
+		// 获取输入流,用于读取文件内容
+		InputStream in = conn.getInputStream();
+		// 创建一个ByteArrayOutputStream对象,用于存储文件内容
+		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+		byte[] buffer = new byte[1024];
+		int len;
+		// 循环读取文件内容,并写入到ByteArrayOutputStream中
+		while ((len = in.read(buffer)) != -1) {
+			outputStream.write(buffer, 0, len);
+		}
+		// 关闭输入流
+		in.close();
+		// 返回文件的字节数组
+		return outputStream.toByteArray();
+	}
+}

+ 19 - 0
src/com/kingdee/eas/hr/org/app/OrgUnitOptFacadeControllerBeanEx.java

@@ -0,0 +1,19 @@
+package com.kingdee.eas.hr.org.app;
+
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.beisen.synchronousorg.synchronousOrg;
+
+
+public class OrgUnitOptFacadeControllerBeanEx extends OrgUnitOptFacadeControllerBean{
+    @Override
+    protected void beforDelete(Context ctx, String adminOrgID) throws BOSException, EASBizException {
+        System.out.println("================com.kingdee.eas.hr.org.app.OrgUnitOptFacadeControllerBeanEx================");
+//        synchronousOrgFactory.getLocalInstance(ctx).createOrUpdateOrg(0,adminOrgID,true);
+        synchronousOrg update = new synchronousOrg(ctx);
+        update.createOrUpdateOrg(10,adminOrgID,true);
+        super.beforDelete(ctx, adminOrgID);
+    }
+}