package com.weaver.seconddev.tjzs.cronjob.job.baseDataSync; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.weaver.common.escheduler.handler.annotation.ESchedulerHandler; import com.weaver.ebuilder.common.exception.BusinessException; import com.weaver.ebuilder.form.client.entity.data.*; import com.weaver.ebuilder.form.client.service.data.RemoteSimpleDataService; import com.weaver.framework.rpc.annotation.RpcReference; import com.weaver.framework.rpc.context.impl.TenantRpcContext; import com.weaver.mc.util.StringUtils; import com.weaver.seconddev.tjzs.cronjob.job.util.DataUtil; import com.weaver.seconddev.tjzs.tb.config.EbDbDataSourceConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * use:基础信息同步 团队人员关系信息 * author:liuhao */ @Slf4j @Service @Component public class SyncBaseInfoTeamAndUserJob { @Autowired private static JdbcTemplate jdbcTemplate = new JdbcTemplate(EbDbDataSourceConfig.dbDataSource()); static { //根据表单配置获取同步方式。全量,天,月,年 String sql = "select timeperiodname as name,timeperiod as num from ec_base.uf_setdaymaindata"; Map map = jdbcTemplate.queryForMap(sql); String count = String.valueOf(map.get("num")); code = Integer.parseInt(count); } private String teamuserformid; private String sysadminid; private String tenantkey; private String teamusercode; private String teamusername; private String teamcode; private String usercode; public SyncBaseInfoTeamAndUserJob() { PropertiesConfiguration p = null; try { p = new PropertiesConfiguration(); p.setEncoding("utf-8"); p.setFileName("tjzssecond.properties"); p.load(); this.tenantkey = p.getString("tenantkey"); this.teamuserformid = p.getString("teamuser.formid"); this.teamusercode = p.getString("teamuser.teamusercode"); this.teamusername = p.getString("teamuser.teamusername"); this.teamcode = p.getString("teamuser.teamcode"); this.usercode = p.getString("teamuser.usercode"); this.sysadminid=p.getString("sysadminid"); }catch (ConfigurationException e) { throw new BusinessException("获取tjzssecond.properties配置文件失败,", e); } } private static int code; @RpcReference(group = "ebuilderform") private RemoteSimpleDataService remoteSimpleDataService; @ESchedulerHandler(value = "syncBaseInfoTeamAndUserJob",cron = "0 0 0/4 * * ?") public void syncProjectPostJob() { log.error("更新团队人员关系信息启动..."); Map datajson = new HashMap<>(); //通过接口获取团队人员关系信息,全量获取,动态分页 DataUtil dataUtil = new DataUtil(); //获取总页数,总条数 String tmpData = dataUtil.syncData(1, code, "团队人员关系信息"); log.error("获取团队人员关系信息返回报文:{}",tmpData); if (!StringUtils.isBlank(tmpData)) { JSONObject obj = JSONObject.parseObject(tmpData); boolean suc = (boolean) obj.get("Success"); if (suc) { int pageNum; JSONObject pageObj = obj.getJSONObject("Page"); int totalNumber = pageObj.getIntValue("TotalNumber"); int pageSize = pageObj.getIntValue("PageSize"); if (totalNumber % pageSize == 0) { pageNum = totalNumber / pageSize; } else { pageNum = totalNumber / pageSize + 1; } //开始分页 for (int i = 1; i <= pageNum; i++) { tmpData = dataUtil.syncData(i, code, "团队人员关系信息"); log.error("获取团队信息返回报文:{},当前页数:{}",tmpData,i); JSONObject resdata = JSONObject.parseObject(tmpData); JSONArray data = resdata.getJSONArray("Data"); if (data != null && data.size() > 0) { List mainDatas = new ArrayList<>(); for (int a = 0; a < data.size(); a++) { JSONObject dataobj = data.getJSONObject(a); String MemberCode = dataobj.getString("MemberCode"); String MemberName = dataobj.getString("MemberName"); Map smallarray = getValueByNameArea(dataobj.getJSONArray("MemberAttributes")); String Team_Code =smallarray.containsKey("Team_Code")? smallarray.get("Team_Code") : ""; String Ppl_Code =smallarray.containsKey("Ppl_Code")? smallarray.get("Ppl_Code") : ""; //根据MemberCode判断是否更新 String id = "yongyuanbucunzaiid";//如果是新增,则传一个数据库永远不存在的id String sql = "select count(id) as nums from uf_teamuserelaship where teamusercode = '" + MemberCode + "'"; Map rs = jdbcTemplate.queryForMap(sql); long nums = (long) rs.get("nums"); if (nums > 0l) { sql = "select id from uf_teamuserelaship where teamusercode = '" + MemberCode + "'"; rs = jdbcTemplate.queryForMap(sql); id = String.valueOf(rs.get("id")); } //数据拼接 EBDataReqDto ebDataReqDto = new EBDataReqDto(); List singledata = Lists.newArrayList(); singledata.add(new EBDataReqDetailDto("id", id)); singledata.add(new EBDataReqDetailDto(teamusercode, MemberCode)); singledata.add(new EBDataReqDetailDto(teamusername, MemberName)); singledata.add(new EBDataReqDetailDto(teamcode, Team_Code)); singledata.add(new EBDataReqDetailDto(usercode, Ppl_Code)); ebDataReqDto.setMainDatas(singledata); mainDatas.add(ebDataReqDto); } //保存 saveEb(mainDatas,teamuserformid); } } } } } /** * eb表单保存 * 括号内由EB组装转换生成, 括号外更新由表单引擎执行 */ private void saveEb(List datas,String formid) { //二开免登陆的方式,设置租户 TenantRpcContext.setTargetTenantKey(tenantkey); EBDataChangeReqDto ebDataChangeReqDto = new EBDataChangeReqDto(); // 构建基础参数; objId 表单id, operator 操作人, tenantKey 租户 ebDataChangeReqDto.setHeader(new EBDataReqHeader(formid, sysadminid, tenantkey)); EBDataReqOperation ebDataReqOperation = new EBDataReqOperation(); ebDataReqOperation.setUpdateType(EBDataUpdateType.ids); EBDataReqOperationInfo ebDataReqOperationInfo = new EBDataReqOperationInfo(); ebDataReqOperationInfo.setNeedAdd(true); ebDataReqOperation.setMainData(ebDataReqOperationInfo); ebDataChangeReqDto.setOperation(ebDataReqOperation); ebDataChangeReqDto.setDatas(datas); EBDataChangeResult ebDataChangeResult = remoteSimpleDataService.updateFormData(ebDataChangeReqDto); log.info("批量更新/新增eb-uf_teamuserelaship返回值:"+ebDataChangeResult.getMessage()); log.info("批量更新/新增eb-uf_teamuserelaship返回值:"+ebDataChangeResult.getStatus()); log.info("批量更新/新增eb-uf_teamuserelaship返回值:"+ebDataChangeResult.getDataIds().toString()); } private Map getValueByNameArea(JSONArray jsonArray) { if(jsonArray == null || jsonArray.size() == 0) { return null; } Map map = new HashMap<>(); for(int i = 0 ;i < jsonArray.size(); i++) { JSONObject obj1 = jsonArray.getJSONObject(i); String name1 = obj1.getString("Name"); if("String".equals(obj1.getString("ValueType"))) { map.put(name1,obj1.getString("Value")); } if("Domain".equals(obj1.getString("ValueType"))) { JSONObject v2 = obj1.getJSONObject("Value"); String code = v2.getString("Code"); map.put(name1,code); } } return map; } }