package shkd.bamp.base.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import kd.bos.context.RequestContext; import kd.bos.dataentity.entity.DynamicObject; import kd.bos.dataentity.entity.DynamicObjectCollection; 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.permission.model.UserParam; import kd.bos.schedule.executor.AbstractTask; import kd.bos.servicehelper.BusinessDataServiceHelper; import kd.bos.servicehelper.QueryServiceHelper; import kd.bos.servicehelper.operation.SaveServiceHelper; import kd.bos.servicehelper.user.UserServiceHelper; import kd.sdk.plugin.Plugin; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import shkd.utils.DobeDWUtils; import shkd.utils.OAUtils; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 人员修改后台任务插件 yxl 20240910 */ public class DobeDWpersonUpdateTask extends AbstractTask implements Plugin { private static final String entityName = "bos_user";//系统库 表名 t_sec_user private static final String personEntityName = "qeug_recon_personbank";//供应链库 人员收款银行账户 表名 tk_qeug_recon_personbank private static final String proficientName = "rebm_proficient";//供应链库 评标专家库 表名 t_bid_proficient private static final String proficientTypeName = "rebm_proficienttype";//供应链库 专家专业分类 表名 t_bid_majortype private static Log log = LogFactory.getLog(DobeDWpersonUpdateTask.class); private static final String dw_menthod = "mdm_user"; @Override public void execute(RequestContext requestContext, Map map) throws KDException { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(DobeDWUtils.dwUrl+dw_menthod) .post(DobeDWUtils.createRequestBody("person",1)) .header("Content-Type", "application/json") .header("Authorization", DobeDWUtils.appCode) .build(); String resultData = null; Response response = null; try { response = client.newCall(request).execute(); resultData = response.body().string(); // log.info("人员接口返回结果:\n{}", resultData); } catch (IOException e) { log.info(String.format("人员接口异常:%s", e.getMessage())); throw new RuntimeException(e); } boolean personoabid = false; if(map != null && "yes".equals(map.get("personoabid"))){ personoabid = true; } JSONObject json_body = JSON.parseObject(resultData); //接口返回的数据进行了分页 int totalNum = json_body.getIntValue("totalNum");//分页-SQL查询总数据量 handleUser(json_body,personoabid); int queryCount = DobeDWUtils.getQueryCount(totalNum); if(queryCount > 1){ //查询次数不止一次,需要分页查询 for (int i = 2; i <= queryCount; i++) { request = new Request.Builder().url(DobeDWUtils.dwUrl+dw_menthod) .post(DobeDWUtils.createRequestBody("person",i)) .header("Content-Type", "application/json") .header("Authorization", DobeDWUtils.appCode) .build(); try { response = client.newCall(request).execute(); resultData = response.body().string(); // log.info("人员接口返回结果:\n{}", resultData); } catch (IOException e) { log.info(String.format("人员接口异常:%s", e.getMessage())); throw new RuntimeException(e); } json_body = JSON.parseObject(resultData); handleUser(json_body,personoabid); } } } private void handleUser(JSONObject json_body,boolean personoabid) { //解析接口返回值,与系统数据比较 JSONArray detailsJson = json_body.getJSONArray("data"); // String userID = null; String number = null; String name = null; String phone = null; String email = null; String deptid = null; String jobposition = null; String bank = null; String bank_branch = null; String bank_account = null; List updateList = new ArrayList<>(); List userinfos = new ArrayList<>(); UserParam user = null; DynamicObject currentUser = null; DynamicObject deptOrg = null; DynamicObject personbank = null; Map dataMap = null; DynamicObject proficientInfo = null;//评标专家库 DynamicObject ptinfo = BusinessDataServiceHelper.loadSingleFromCache(proficientTypeName,"id,number,name",new QFilter[]{new QFilter("number","=","00")}); DynamicObjectCollection ptcoll = null; for (int i = 0; i < detailsJson.size(); i++) { json_body = detailsJson.getJSONObject(i); // userID = json_body.getString("user_id"); number = json_body.getString("user_code");//工号,作为唯一值? name = json_body.getString("user_name"); email = json_body.getString("email"); phone = json_body.getString("mobile_phone"); deptid = json_body.getString("department_id");//部门id jobposition = json_body.getString("jobposition");//职位 bank = json_body.getString("bank");//银行 bank_branch = json_body.getString("bank_branch");//支行 bank_account = json_body.getString("bank_account");//账号 if(DobeDWUtils.isEmpty(number) || DobeDWUtils.isEmpty(name)){ log.info(String.format("人员入参为空异常:%s", json_body.toJSONString())); continue; } currentUser = QueryServiceHelper.queryOne(entityName,"id,number,name",new QFilter[]{new QFilter("number","=",number)}); if(currentUser != null){ user = new UserParam();//常用或者重要的参数,详情请查看参数对象UserParam dataMap = new HashMap<>(); //修改 姓名、是否启用、手机、邮箱、职位、部门等情况 user.setId(currentUser.getLong("id")); dataMap.put("name", name);//姓名 dataMap.put("phone", phone);//手机号 dataMap.put("email", email);//电子邮箱 user.setDataMap(dataMap); updateList.add(user); //组装要与OA绑定的人员集合 if(personoabid){ userinfos.add(currentUser); } //处理部门和职位 if(!DobeDWUtils.isEmpty(deptid)){ deptOrg = QueryServiceHelper.queryOne("bos_org","id,number,name",new QFilter[]{new QFilter("fyzjorgid","=",deptid)}); if(deptOrg != null){ List> posList = new ArrayList<>(); Map entryentity = new HashMap<>(); entryentity.put("dpt", deptOrg.getLong("id"));//设置部门ID //职位名称 为空时,默认为编外人员 if(DobeDWUtils.isEmpty(jobposition)){ entryentity.put("position", "编外人员");//职位名称 }else{ entryentity.put("position", jobposition);//职位名称 } entryentity.put("isincharge", false);//是否负责人 entryentity.put("ispartjob", false);//是否兼职 entryentity.put("seq", 1);//职位顺序号 1 posList.add(entryentity); dataMap.put("entryentity", posList); }else{ log.info(String.format("数仓的部门在金蝶中未找到对应组织:%s", deptid)); } } //处理新增 评标专家库 proficientInfo = BusinessDataServiceHelper.loadSingle(proficientName,new QFilter[]{new QFilter("billno","=",number)}); if(proficientInfo == null){ proficientInfo = BusinessDataServiceHelper.newDynamicObject(proficientName); proficientInfo.set("billno",number);//专家编号 proficientInfo.set("name",name);//专家姓名 proficientInfo.set("type","internalExperts");//专家来源--默认内部专家 proficientInfo.set("telephone",phone);//手机号 ptcoll = proficientInfo.getDynamicObjectCollection("majortype"); DynamicObject newptinfo = new DynamicObject(ptcoll.getDynamicObjectType()); newptinfo.set("fbasedataId", ptinfo); ptcoll.add(newptinfo); proficientInfo.set("majortype",ptcoll);//专业分类 proficientInfo.set("org",deptOrg.getLong("id"));//采购组织 proficientInfo.set("userdstatus","Enable"); //使用状态--默认可用 proficientInfo.set("billstatus","C"); //使用状态--默认已审核 proficientInfo.set("politicalstatus","other"); //政治面貌--默认其他 proficientInfo.set("majortypenames",ptinfo.getString("name")); //专业分类名称字符串 proficientInfo.set("entitytypeid",proficientName); //实体类型ID //保存数据:直接保存入库,不走操作校验 SaveServiceHelper.save(new DynamicObject[]{proficientInfo}); } //处理人员收款银行账户的修改,银行账户为空时,不处理 if(DobeDWUtils.isEmpty(bank_account)){ continue; } personbank = BusinessDataServiceHelper.loadSingle(personEntityName,new QFilter[]{new QFilter("number","=",number)}); if(personbank != null){ if(isNeedUpdate(personbank,name,bank,bank_branch,bank_account)){ //姓名、银行账户、开户银行任意一个不相同则更新 personbank.set("name",name); personbank.set("qeug_banknumber",bank_account);//银行账户 personbank.set("qeug_bankname",bank_branch);//开户银行(支行) personbank.set("qeug_bank",bank);//银行 SaveServiceHelper.update(personbank); } }else{ //新增 personbank = BusinessDataServiceHelper.newDynamicObject(personEntityName); personbank.set("number",number); personbank.set("name",name); personbank.set("qeug_banknumber",bank_account);//银行账户 personbank.set("qeug_bankname",bank_branch);//开户银行(支行) personbank.set("qeug_bank",bank);//银行 personbank.set("status","C"); //单据状态默认为已审核 personbank.set("enable",1);//默认可用 //保存数据:直接保存入库,不走操作校验 SaveServiceHelper.save(new DynamicObject[]{personbank}); } } } if(updateList.size() > 0){ UserServiceHelper.update(updateList); //判断执行结果 for (UserParam result : updateList) { if (!result.isSuccess()) { log.info(String.format("人员修改异常:%s", result.getMsg())); } } } //调用OA人员绑定 if(userinfos.size() > 0){ String billNo = "person-first-all-bid"; //获取token String oaToken = OAUtils.getOaToken(billNo); if (!DobeDWUtils.isEmpty(oaToken)) { OAUtils.thirdpartyUser(userinfos, oaToken, billNo); } } } private boolean isNeedUpdate(DynamicObject personbank,String name,String bank,String bank_branch,String bank_account){ if(!name.equals(personbank.getString("name"))){ return true; }else if(!bank_account.equals(personbank.getString("qeug_banknumber"))){ return true; }else if(DobeDWUtils.isEmpty(bank) || !bank.equals(personbank.getString("qeug_bank"))){ return true; }else if(DobeDWUtils.isEmpty(bank_branch) || !bank_branch.equals(personbank.getString("qeug_bankname"))){ return true; } return false; } }