package com.weaver.seconddev.tjzs.cronjob.job.baseDataSync; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; 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 SyncBaseInfoCountryJob { @Autowired private static JdbcTemplate jdbcTemplate = new JdbcTemplate(EbDbDataSourceConfig.dbDataSource()); private static String transactionId = "D3640368-7615-426B-91DE-DF6367683DDD"; //测试 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 countryformid; private String sysadminid; private String tenantkey; private String cntyname; private String cntycode; public SyncBaseInfoCountryJob() { PropertiesConfiguration p = null; try { p = new PropertiesConfiguration(); p.setEncoding("utf-8"); p.setFileName("tjzssecond.properties"); p.load(); this.tenantkey = p.getString("tenantkey"); this.countryformid = p.getString("country.formid"); this.cntyname = p.getString("country.cnty_name"); this.cntycode = p.getString("country.cnty_code"); 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 = "syncBaseInfoCountryJob",cron = "0 0 0/4 * * ?") public void syncCountryInfoJob() { log.error("更新国家信息启动..."); Map datajson = new HashMap<>(); //通过接口获取区域信息,全量获取,动态分页 DataUtil dataUtil = new DataUtil(); //获取总页数,总条数 String tmpData = dataUtil.syncDataPro(1, code, "国别","参考数据",transactionId); 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.syncDataPro(i, code, "国别","参考数据",transactionId); 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"); //根据MemberCode判断是否更新 String id = "yongyuanbucunzaiid";//如果是新增,则传一个数据库永远不存在的id String sql = "select count(id) as nums from uf_country where cnty_code = '" + MemberCode + "'"; Map rs = jdbcTemplate.queryForMap(sql); long nums = (long) rs.get("nums"); if (nums > 0l) { sql = "select id from uf_country where cnty_code = '" + MemberCode + "'"; log.error("howec333:{}",sql); 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(cntyname, MemberName)); singledata.add(new EBDataReqDetailDto(cntycode, MemberCode)); ebDataReqDto.setMainDatas(singledata); mainDatas.add(ebDataReqDto); log.error("howec:::::::::id:{},cntyname:{},cntycode:{}",id,MemberCode,MemberName); } //保存 if(CollectionUtil.isNotEmpty(mainDatas)) { saveEb(mainDatas,countryformid); }else { log.error("howec无符合数据"); } } } } } } /** * eb表单保存 * 括号内由EB组装转换生成, 括号外更新由表单引擎执行 */ private void saveEb(List datas,String formid) { Gson gson = new Gson(); String jsonString = gson.toJson(datas); log.error("howec:::tenantkey:{}",tenantkey); log.error("howec:::sysadminid:{}",sysadminid); log.error("howec:::jsons:{}",jsonString); //二开免登陆的方式,设置租户 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.error("批量更新/新增uf_country返回值:"+ebDataChangeResult.getMessage()); log.error("批量更新/新增uf_country返回值:"+ebDataChangeResult.getStatus()); log.error("批量更新/新增uf_country返回值:"+ebDataChangeResult.getDataIds().toString()); } }