“luojun” преди 7 месеца
родител
ревизия
6aa1851fbb

+ 45 - 0
src/com/kingdee/eas/basedata/org/app/AdminOrgUnitControllerBeanEx.java

@@ -0,0 +1,45 @@
+package com.kingdee.eas.basedata.org.app;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.IObjectValue;
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
+
+/**
+ * @author qingwu
+ * @date 2024/10/23
+ * @apiNote
+ */
+public class AdminOrgUnitControllerBeanEx extends AdminOrgUnitControllerBean {
+    @Override
+    protected IObjectPK _addnew(Context ctx, IObjectValue model) throws BOSException, EASBizException {
+        IObjectPK iObjectPK = super._addnew(ctx, model);
+        AdminOrgUnitInfo info = (AdminOrgUnitInfo) model;
+        String id = info.getId().toString();
+        //同步组织到OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(id,null);
+        return iObjectPK;
+    }
+
+    @Override
+    protected void _update(Context ctx, IObjectPK pk, IObjectValue model) throws BOSException, EASBizException {
+        super._update(ctx, pk, model);
+        //同步组织到OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(pk.toString(),null);
+    }
+
+    @Override
+    protected void _updatePartial(Context ctx, IObjectValue model, SelectorItemCollection selector) throws BOSException, EASBizException {
+        super._updatePartial(ctx, model, selector);
+        AdminOrgUnitInfo info = (AdminOrgUnitInfo) model;
+        String id = info.getId().toString();
+        //同步组织到OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(id,null);
+    }
+
+
+}

+ 2 - 2
src/com/kingdee/eas/custom/synctask/SyncTranForOAFacadeControllerBean.java

@@ -21,7 +21,7 @@ import com.kingdee.eas.custom.log.app.DataDirectionEnum;
 import com.kingdee.eas.custom.log.app.DockingSystemEnum;
 import com.kingdee.eas.custom.log.app.SyncEntityNameEnum;
 import com.kingdee.eas.custom.log.app.SyncStatusEnum;
-import com.kingdee.eas.custom.synctask.entry.AdminOrg;
+import com.kingdee.eas.custom.synctask.entity.AdminOrg;
 import com.kingdee.eas.hr.ats.AtsUtil;
 import com.kingdee.util.StringUtils;
 import okhttp3.*;
@@ -91,7 +91,7 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
                 boolean isSealUp = adminOrgUnitInfo.isIsSealUp();
                 if (isSealUp) {
                     adminOrg.setAction("delete");
-                    adminOrg.setCanceled("1");
+                    adminOrg.setCanceled("0");
                 } else {
                     adminOrg.setAction("add");
                 }

+ 112 - 0
websrc/com/kingdee/eas/custom/synctask/entity/AdminOrg.java

@@ -0,0 +1,112 @@
+package com.kingdee.eas.custom.synctask.entity;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * @author qingwu
+ * @date 2024/10/21
+ * @apiNote
+ */
+public class AdminOrg {
+    @JsonProperty("@action")
+    private String action;//add 新增,edit 编辑 delete 删除(只会处理canceled字段)
+    private String code;//编号
+    private String shortname;//简称
+    private String fullname;//全称
+    private String org_code;// 分部编号
+    private String parent_code;//上级部门编号
+    private String canceled;//封存标志
+    private String order;//排序
+
+    public AdminOrg() {
+    }
+
+    public AdminOrg(String action, String code, String shortname, String fullname, String org_code, String parent_code, String canceled, String order) {
+        this.action = action;
+        this.code = code;
+        this.shortname = shortname;
+        this.fullname = fullname;
+        this.org_code = org_code;
+        this.parent_code = parent_code;
+        this.canceled = canceled;
+        this.order = order;
+    }
+
+    public void setAction(String action) {
+        this.action = action;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public void setShortname(String shortname) {
+        this.shortname = shortname;
+    }
+
+    public void setFullname(String fullname) {
+        this.fullname = fullname;
+    }
+
+    public void setOrg_code(String org_code) {
+        this.org_code = org_code;
+    }
+
+    public void setParent_code(String parent_code) {
+        this.parent_code = parent_code;
+    }
+
+    public void setCanceled(String canceled) {
+        this.canceled = canceled;
+    }
+
+    public void setOrder(String order) {
+        this.order = order;
+    }
+
+    public String getAction() {
+        return action;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getShortname() {
+        return shortname;
+    }
+
+    public String getFullname() {
+        return fullname;
+    }
+
+    public String getOrg_code() {
+        return org_code;
+    }
+
+    public String getParent_code() {
+        return parent_code;
+    }
+
+    public String getCanceled() {
+        return canceled;
+    }
+
+    public String getOrder() {
+        return order;
+    }
+
+    @Override
+    public String toString() {
+        return "AdminOrg{" +
+                "action='" + action + '\'' +
+                ", code='" + code + '\'' +
+                ", shortname='" + shortname + '\'' +
+                ", fullname='" + fullname + '\'' +
+                ", org_code='" + org_code + '\'' +
+                ", parent_code='" + parent_code + '\'' +
+                ", canceled='" + canceled + '\'' +
+                ", order='" + order + '\'' +
+                '}';
+    }
+}

+ 0 - 2
websrc/com/kingdee/eas/custom/synctask/handler/OrgUnitEditHandlerEx.java

@@ -1,7 +1,5 @@
 package com.kingdee.eas.custom.synctask.handler;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
 import com.kingdee.eas.custom.synctask.ActionTypeEnum;

+ 6 - 11
websrc/com/kingdee/eas/custom/synctask/handler/OrgUnitListHandlerEx.java

@@ -2,12 +2,12 @@ package com.kingdee.eas.custom.synctask.handler;
 
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
 import com.kingdee.eas.custom.synctask.utils.SynctaskUtils;
 import com.kingdee.eas.hr.org.web.handler.OrgUnitListHandler;
 import com.kingdee.shr.base.syssetting.context.SHRContext;
 import com.kingdee.shr.base.syssetting.exception.SHRWebException;
-import com.kingdee.shr.base.syssetting.exception.ShrWebBizException;
-import com.kingdee.util.StringUtils;
 import org.apache.log4j.Logger;
 import org.springframework.ui.ModelMap;
 
@@ -20,17 +20,12 @@ import javax.servlet.http.HttpServletResponse;
  * @apiNote
  */
 public class OrgUnitListHandlerEx extends OrgUnitListHandler {
-    Logger logger = Logger.getLogger("com.kingdee.eas.custom.synctask.handler.OrgUnitListHandlerEx");
+    Logger logger = Logger.getLogger(OrgUnitListHandlerEx.class);
     private Context ctx = SHRContext.getInstance().getContext();
 
-    public void syncOrgUnitToOAAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+    public void syncOrgUnitToOAAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws BOSException, EASBizException {
         String billIds = request.getParameter("billIds");
-        try {
-            SynctaskUtils synctaskUtils = new SynctaskUtils();
-            synctaskUtils._syncOrgUnitToOA(ctx, billIds == "" ? null : billIds, null);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException(e);
-        }
+        //ͬ²½×éÖ¯µ½OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncOrgUnitToOA(billIds, null);
     }
 }

+ 59 - 121
websrc/com/kingdee/eas/custom/synctask/utils/SynctaskUtils.java

@@ -14,7 +14,8 @@ import com.kingdee.eas.basedata.org.AdminOrgUnitFactory;
 import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
 import com.kingdee.eas.basedata.org.IAdminOrgUnit;
 import com.kingdee.eas.custom.synctask.ActionTypeEnum;
-import com.kingdee.eas.custom.synctask.entry.AdminOrg;
+import com.kingdee.eas.custom.synctask.entity.AdminOrg;
+import com.kingdee.eas.hr.ats.AtsUtil;
 import com.kingdee.util.StringUtils;
 import okhttp3.*;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -35,8 +36,8 @@ public class SynctaskUtils {
 
     public SynctaskUtils() {
         try {
-            this.propt.load(new FileInputStream("E:\\Kingdee\\eas\\server\\properties\\scy\\synOAConfig.properties"));
-            //propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/scy/synOAConfig.properties"));
+            this.propt.load(new FileInputStream("E:\\Kingdee\\eas\\server\\properties\\scy\\syncOAConfig.properties"));
+            //propt.load(new FileInputStream(System.getProperty("EAS_HOME") + "/server/properties/scy/syncOAConfig.properties"));
         } catch (IOException e) {
             e.printStackTrace();
         }
@@ -55,149 +56,87 @@ public class SynctaskUtils {
      * @throws BOSException
      */
     public void _syncOrgUnitToOA(Context ctx, String billds, ActionTypeEnum action) throws BOSException, IOException {
-        Set adminOrgIds = new HashSet();
+        logger.error("_syncOrgUnitToOA----------------------start");
+        logger.error("_syncOrgUnitToOA----------------------billds: " + billds);
         IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
+        List dataList = new ArrayList();
         String actionType = action == null ? "" : action.getValue().toLowerCase();
         //当参数billIds不为空值时,增量同步参数中的部门数据到OA
+        FilterInfo filterInfo = null;
         if (!StringUtils.isEmpty(billds)) {
-            String[] split = billds.split(",");
-            for (String adminOrgId : split) {
-                adminOrgIds.add(adminOrgId);
-            }
-            ////当参数action为空时,判断部门状态是否为失效,如果失效就执行删除同步,否则就执行编辑同步
-            //if (!StringUtils.isEmpty(billds) && action == null) {
-            //    logger.error("_syncOrgUnitToOA---------incrementalQuery");
-            //    AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
-            //    saveSynOrgUnit(adminOrgColl, actionType);
-            //
-            //} else if (!StringUtils.isEmpty(billds) && action != null) {//当参数action不为空时,根据操作类型同步数据
-            //    logger.error("_syncOrgUnitToOA---------saveQuery");
-            //    //新增同步
-            //    if (ActionTypeEnum.ADD.getValue().equals(action.getValue())) {
-            //        logger.error("_syncOrgUnitToOA---------add");
-            //        AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
-            //        saveSynOrgUnit(adminOrgColl, actionType);
-            //    }
-            //    //编辑同步
-            //    if (ActionTypeEnum.EDIT.getValue().equals(action.getValue())) {
-            //        logger.error("_syncOrgUnitToOA---------edit");
-            //        AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
-            //        saveSynOrgUnit(adminOrgColl, actionType);
-            //    }
-            //}
-            AdminOrgUnitCollection adminOrgColl = getAdminOrgColl(ctx, adminOrgIds);
-            saveSynOrgUnit(adminOrgColl, actionType);
-        } else {
-            if (StringUtils.isEmpty(billds) && action == null) { //当参数billIds为空时,全量同步所有组织数据到OA
-                logger.error("_syncOrgUnitToOA---------batchQuery");
-                SelectorItemCollection sic = new SelectorItemCollection();
-                sic.add("*");
-                sic.add("parent.*");
-                AdminOrgUnitCollection adminOrgUnitCollection = iAdminOrgUnit.getAdminOrgUnitCollection(EntityViewInfo.getInstance(null, sic, null));
-                if (adminOrgUnitCollection.size() > 0) {
-                    saveSynOrgUnit(adminOrgUnitCollection, actionType);
-                }
-            }
+            Set<String> adminOrgIds = AtsUtil.toSet(billds);
+            filterInfo = new FilterInfo();
+            filterInfo.getFilterItems().add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE));
         }
-    }
-
-    /**
-     * 批量查询行政组织数据
-     *
-     * @param ctx
-     * @param adminOrgIds
-     * @return
-     * @throws BOSException
-     */
-    public AdminOrgUnitCollection getAdminOrgColl(Context ctx, Set adminOrgIds) throws BOSException {
-        IAdminOrgUnit iAdminOrgUnit = AdminOrgUnitFactory.getLocalInstance(ctx);
         SelectorItemCollection sic = new SelectorItemCollection();
         sic.add("*");
-        sic.add("parent.*");
-        FilterInfo filterInfo = new FilterInfo();
-        filterInfo.getFilterItems().add(new FilterItemInfo("id", adminOrgIds, CompareType.INCLUDE));
+        sic.add("parent.number");
         EntityViewInfo entityViewInfo = EntityViewInfo.getInstance(filterInfo, sic, null);
-        return iAdminOrgUnit.getAdminOrgUnitCollection(entityViewInfo);
-    }
-
-    /**
-     * 新增方法
-     *
-     * @param adminOrgUnitCollection
-     */
-    public void saveSynOrgUnit(AdminOrgUnitCollection adminOrgUnitCollection, String action) throws IOException {
-        ObjectMapper mapper = new ObjectMapper();
-        //mapper.writeValueAsString();
-        //mapper.readValue(paramData, Map.class)
-        logger.error("saveSynOrgUnit----------------------start");
-        List saveList = new ArrayList();
+        AdminOrgUnitCollection adminOrgUnitCollection = iAdminOrgUnit.getAdminOrgUnitCollection(entityViewInfo);
         for (int i = 0; i < adminOrgUnitCollection.size(); i++) {
             AdminOrgUnitInfo adminOrgUnitInfo = adminOrgUnitCollection.get(i);
+            String orgName = adminOrgUnitInfo.getName();
             AdminOrg adminOrg = new AdminOrg();
             boolean isSealUp = adminOrgUnitInfo.isIsSealUp();
             if (isSealUp) {
                 adminOrg.setAction("delete");
+                adminOrg.setCanceled("0");
             } else {
                 adminOrg.setAction("add");
             }
             adminOrg.setCode(adminOrgUnitInfo.getNumber());
-            adminOrg.setShortname(adminOrgUnitInfo.getName());
-            adminOrg.setFullname(adminOrgUnitInfo.getName());
-            adminOrg.setParent_code("ITCS");
+            adminOrg.setShortname(orgName);
+            adminOrg.setFullname(orgName);
+            //adminOrg.setParent_code("ITCS");
             adminOrg.setOrg_code("0");
-            //adminOrg.setParent_code(adminOrgUnitInfo.getParent().getNumber());
-            adminOrg.setCanceled(adminOrgUnitInfo.isIsSealUp() == true ? "1" : "0");
+            adminOrg.setParent_code(adminOrgUnitInfo.getParent().getNumber());
             //adminOrg.setOrder((String.valueOf(adminOrgUnitInfo.getIndex())));
-            saveList.add(adminOrg);
+            dataList.add(adminOrg);
         }
-        //封装请求参数
-        String data = mapper.writeValueAsString(saveList);
-        logger.error("saveSynOrgUnit----------------------data" + data);
-        String adminOrgApiUrl = "/api/hrm/resful/synDepartment";
-        Response response = synScyRequest(data, adminOrgApiUrl);
-        logger.error("response----------------------data" + mapper.writeValueAsString(response));
+        //调用执行同步组织到OA
+        executeSyncOrgUnitToOA(dataList);
     }
 
-
-    //public static void main(String[] args) throws JsonProcessingException {
-    //    ObjectMapper mapper = new ObjectMapper();
-    //    List saveList = new ArrayList();
-    //    for (int i = 0; i < 2; i++) {
-    //        AdminOrg adminOrg = new AdminOrg();
-    //        adminOrg.setAction("add");
-    //        saveList.add(adminOrg);
-    //    }
-    //    String s = mapper.writeValueAsString(saveList);
-    //    System.out.println(s);
-    //    System.out.println(ActionTypeEnum.EDIT.getValue().toLowerCase());
-    //
-    //}
-
     /**
-     * 同步请求方法
+     * 执行同步组织到OA
      *
-     * @param param
-     * @param aipUrl
-     * @return
-     * @throws IOException
+     * @param dataList
      */
-    public Response synScyRequest(String param, String aipUrl) throws IOException {
-        String url = this.propt.getProperty("url");
-        OkHttpClient client = new OkHttpClient();
-        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
-        String data = String.format("token = %s &data = %s", getToken(), param);
-        logger.error("synAdminOrgRequest----------------------date" + data);
-        RequestBody body = RequestBody.create(mediaType, data);
-        Request request = new Request.Builder()
-                .url(url + aipUrl)
-                .post(body)
-                .addHeader("Content-Type", "application/json")
-                .addHeader("Accept", "*/*")
-                .addHeader("Accept-Encoding", "gzip, deflate, br")
-                .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0")
-                .addHeader("Connection", "keep-alive")
-                .build();
-        return client.newCall(request).execute();
+    public void executeSyncOrgUnitToOA(List dataList) throws IOException, BOSException {
+        if (dataList != null && dataList.size() > 0) {
+            ObjectMapper mapper = new ObjectMapper();
+            //封装请求参数
+            String data = mapper.writeValueAsString(dataList);
+            String params = String.format("token = %s &data = %s", getToken(), data);
+            logger.error("executeSyncOrgUnitToOA----------------------params" + params);
+            //封装请求参数
+            //String syncOrgUnitApiUrl = "/api/hrm/resful/synDepartment";
+            String syncOrgUnitApiUrl = this.propt.getProperty("syncOrgUnitApiUrl");
+            String url = this.propt.getProperty("url");
+            logger.error("executeSyncOrgUnitToOA----------------------syncOrgUnitApiUrl" + syncOrgUnitApiUrl);
+            if (StringUtils.isEmpty(syncOrgUnitApiUrl)) {
+                throw new BOSException("同步组织到OA接口地址不能为空!");
+            }
+            OkHttpClient client = new OkHttpClient();
+            MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
+            RequestBody body = RequestBody.create(mediaType, params);
+            Request request = new Request.Builder()
+                    .url(url + syncOrgUnitApiUrl)
+                    .post(body)
+                    .addHeader("Content-Type", "application/json")
+                    .addHeader("Accept", "*/*")
+                    .addHeader("Accept-Encoding", "gzip, deflate, br")
+                    .addHeader("User-Agent", "PostmanRuntime-ApipostRuntime/1.1.0")
+                    .addHeader("Connection", "keep-alive")
+                    .build();
+            Response response = client.newCall(request).execute();
+            String respBody = response.body().string();
+            if (response.isSuccessful()) {
+
+            } else {
+
+            }
+        }
     }
 
     /**
@@ -211,7 +150,6 @@ public class SynctaskUtils {
         String code = key.concat(Long.toString(l));
         //String s = DigestUtils.md5Hex(code).toUpperCase();
         String s = DigestUtils.md5Hex(code).toUpperCase();
-        System.out.println(s);
         Map<String, String> map = new HashMap<>();
         map.put("key", s);
         map.put("ts", Long.toString(l));