chenmingliang 9 months ago
parent
commit
a15b1cfddb

+ 47 - 0
src/com/kingdee/eas/basedata/org/app/PositionControllerBeanEx.java

@@ -0,0 +1,47 @@
+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.PositionInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
+import org.apache.log4j.Logger;
+
+public class PositionControllerBeanEx extends PositionControllerBean{
+
+    private static Logger logger =
+            Logger.getLogger(PositionControllerBeanEx.class);
+
+    @Override
+    protected IObjectPK _addnew(Context ctx, IObjectValue model) throws BOSException, EASBizException {
+        logger.error("PositionControllerBeanEx--------------------_addnew");
+        IObjectPK iObjectPK = super._addnew(ctx, model);
+        PositionInfo info = (PositionInfo) model;
+        String id = info.getId().toString();
+        //肮祭郪眽善OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPositionToOA(id, null);
+        return iObjectPK;
+    }
+
+    @Override
+    protected void _update(Context ctx, IObjectPK pk, IObjectValue model) throws BOSException, EASBizException {
+        super._update(ctx, pk, model);
+        logger.error("PositionControllerBeanEx--------------------_update");
+        //肮祭郪眽善OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPositionToOA(pk.toString(), null);
+    }
+
+    @Override
+    protected void _updatePartial(Context ctx, IObjectValue model, SelectorItemCollection selector) throws BOSException, EASBizException {
+        super._updatePartial(ctx, model, selector);
+        logger.error("PositionControllerBeanEx--------------------_updatePartial");
+
+        PositionInfo info = (PositionInfo) model;
+        String id = info.getId().toString();
+        //肮祭郪眽善OA
+        SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPositionToOA(id, null);
+    }
+}

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

@@ -10,10 +10,7 @@ import com.kingdee.bos.metadata.entity.FilterInfo;
 import com.kingdee.bos.metadata.entity.FilterItemInfo;
 import com.kingdee.bos.metadata.entity.SelectorItemCollection;
 import com.kingdee.bos.metadata.query.util.CompareType;
-import com.kingdee.eas.basedata.org.AdminOrgUnitCollection;
-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.basedata.org.*;
 import com.kingdee.eas.common.EASBizException;
 import com.kingdee.eas.custom.log.ISyncLog;
 import com.kingdee.eas.custom.log.SyncLogFactory;
@@ -23,6 +20,7 @@ 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.entity.AdminOrg;
+import com.kingdee.eas.custom.synctask.entity.PositionEntity;
 import com.kingdee.eas.hr.ats.AtsUtil;
 import com.kingdee.eas.util.app.DbUtil;
 import com.kingdee.util.StringUtils;
@@ -235,6 +233,7 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
         return JSONObject.toJSONString(map);
     }
 
+
     /**
      * 同步职位信息
      *
@@ -245,7 +244,96 @@ public class SyncTranForOAFacadeControllerBean extends AbstractSyncTranForOAFaca
      */
     @Override
     protected void _syncPositionToOA(Context ctx, String billds, ActionTypeEnum action) throws BOSException, EASBizException {
-        super._syncPositionToOA(ctx, billds, action);
+        ISyncLog iSyncLog = SyncLogFactory.getLocalInstance(ctx);
+        SyncLogInfo syncLogInfo = new SyncLogInfo();
+        syncLogInfo.setEntityName(SyncEntityNameEnum.postiton);
+        syncLogInfo.setDataDirection(DataDirectionEnum.outflow);
+        syncLogInfo.setDockingSystem(DockingSystemEnum.OA);
+        try {
+            super._syncPositionToOA(ctx, billds, action);
+            logger.error("_syncPositionToOA---billds: " + billds);
+            String data = getPositionColData(ctx, billds);
+            String syncPositionApiUrl = this.propt.getProperty("syncPositionApiUrl");
+            synScyRequest(ctx,data, syncPositionApiUrl,syncLogInfo);
+        } catch (Exception e) {
+            e.printStackTrace();
+            syncLogInfo.setSyncStatus(SyncStatusEnum.ERROR);
+            syncLogInfo.setSyncResult(e.getMessage());
+            iSyncLog.save(syncLogInfo);
+            throw new BOSException(e.getMessage());
+        }
+
+
+    }
+
+    /**
+     * 获取岗位信息
+     * @param ctx
+     * @param billIds
+     * @return
+     * @throws IOException
+     * @throws BOSException
+     */
+    protected String getPositionColData(Context ctx,String billIds) throws IOException, BOSException {
+        List list = new ArrayList();
+        ObjectMapper mapper = new ObjectMapper();
+        Set positionIds = new HashSet();
+        PositionCollection positionCollection = new PositionCollection();
+        IPosition localInstance = PositionFactory.getLocalInstance(ctx);
+        if (org.apache.commons.lang.StringUtils.isNotBlank(billIds)){
+            String[] split = billIds.split(",");
+            for (int i = 0; i < split.length; i++) {
+                positionIds.add(split[i]);
+            }
+            positionCollection = localInstance.getPositionCollection("where id in( " + AtsUtil.convertSetToString(positionIds) + ")");
+        }else {
+            positionCollection = localInstance.getPositionCollection();
+        }
+        for (int i = 0; i < positionCollection.size(); i++) {
+            PositionEntity positionEntity = new PositionEntity();
+            PositionInfo positionInfo = positionCollection.get(i);
+            DeletedStatusEnum deletedStatus = positionInfo.getDeletedStatus();
+            if ("2".equals(deletedStatus.getValue())){ // 失效
+                positionEntity.setAction("delete");
+            }else {
+                positionEntity.setAction("add");
+            }
+            positionEntity.setJobtitlecode(positionInfo.getNumber());
+            positionEntity.setJobtitlename(positionInfo.getName());
+            positionEntity.setJobtitleremark(positionInfo.getName());
+            list.add(positionEntity);
+        }
+        //封装请求参数
+        String data = mapper.writeValueAsString(list);
+        logger.error("_syncPositionToOA----------------------data" + data);
+        return data;
+    }
+
+    /**
+     * 同步请求方法
+     * @param param
+     * @param aipUrl
+     * @return
+     * @throws IOException
+     */
+    public void synScyRequest(Context ctx,String param, String aipUrl, SyncLogInfo syncLogInfo) throws IOException, BOSException, EASBizException {
+        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(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();
+        //处理响应结果,写入日志
+        Response response = client.newCall(request).execute();
+        handlerResponse(ctx, response, syncLogInfo);
     }
 
     /**

+ 49 - 0
websrc/com/kingdee/eas/custom/synctask/handler/PositionListHandlerEx.java

@@ -0,0 +1,49 @@
+package com.kingdee.eas.custom.synctask.handler;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.eas.basedata.org.*;
+import com.kingdee.eas.basedata.org.app.PositionControllerBean;
+import com.kingdee.eas.custom.synctask.ActionTypeEnum;
+import com.kingdee.eas.custom.synctask.SyncTranForOAFacadeFactory;
+import com.kingdee.eas.custom.synctask.entity.PositionEntity;
+import com.kingdee.eas.hr.ats.AtsUtil;
+import com.kingdee.eas.hr.org.web.handler.PositionListHandler;
+import com.kingdee.shr.base.syssetting.context.SHRContext;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
+import okhttp3.*;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.log4j.Logger;
+import org.springframework.ui.ModelMap;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.util.*;
+
+
+/**
+ * ְλÈÕ³£Î¬»¤list  OAͬ²½
+ * @date 2024/10/23
+ * @apiNote
+ */
+public class PositionListHandlerEx extends PositionListHandler {
+    public void syncOAPositionAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
+        HashMap<Object, Object> map = new HashMap<>();
+        Context ctx = SHRContext.getInstance().getContext();
+        String billIds = request.getParameter("billIds");
+        try {
+            SyncTranForOAFacadeFactory.getLocalInstance(ctx).syncPositionToOA(billIds, null);
+            map.put("error","cgong");
+            map.put("errorType","1");
+        } catch (Exception e) {
+            e.printStackTrace();
+            map.put("error",e.getMessage());
+            map.put("errorType","0");
+        }
+        this.writeSuccessData(map);
+    }
+}