package shkd.repc.task; import com.alibaba.fastjson.JSONObject; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.db.DB; import kd.bos.db.DBRoute; import kd.bos.exception.KDException; import kd.bos.logging.Log; import kd.bos.logging.LogFactory; import kd.bos.orm.query.QCP; import kd.bos.orm.query.QFilter; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.sdk.plugin.Plugin; import shkd.utils.DobeDWUtils; import shkd.utils.OAUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * 金蝶人员与OA用户绑定后台任务插件 yxl 20250409 */ public class DobePersonOARealtionTask extends AbstractTask implements Plugin { private static final String entityName = "bos_user";//系统库 表名 t_sec_user private static Log logger = LogFactory.getLog(DobePersonOARealtionTask.class); //更新人员绑定OA成功的标记 private static final String updateFlag = "update t_sec_user set fk_qeug_flag='1' where fnumber=?;"; @Override public void execute(RequestContext requestContext, Map map) throws KDException { //查找未绑定成功的人员 QFilter dwFilter = new QFilter("source", QCP.equals, "dw"); QFilter enableFilter = new QFilter("qeug_flag", QCP.equals, "0"); DynamicObject[] dos = BusinessDataServiceHelper.load(entityName,"id,number,name",new QFilter[]{dwFilter.and(enableFilter)}); if(dos.length > 0){ logger.info("本次需要绑定用户个数"+dos.length); DynamicObject userinfo; List userinfos = new ArrayList<>(1); String thirdPostjson;//OA绑定返回结果 JSONObject jsonObject;//OA绑定返回结果json对象 String billNo = "person-task-bid"; //获取token,调用OA人员绑定接口 String oaToken = OAUtils.getOaToken(billNo); for (int i = 0; i < dos.length; i++) { userinfo = dos[i]; userinfos.clear(); userinfos.add(userinfo); if (!DobeDWUtils.isEmpty(oaToken)) { thirdPostjson = OAUtils.thirdpartyUser(userinfos, oaToken, billNo); //处理OA绑定结果,将处理成功的人员打上标记 if (!DobeDWUtils.isEmpty(thirdPostjson)) { jsonObject = JSONObject.parseObject(thirdPostjson); if(jsonObject.getBoolean("success")){ DB.update(DBRoute.of("sys"), updateFlag, new Object[]{userinfo.getString("number")}); } }else{ logger.info("OA绑定返回值为空,人员编号"+userinfo.getString("number")); } } } }else{ logger.info("现有用户已全部绑定,无需处理"); } } }