You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
9.2 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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基础信息同步 团队人员关系信息
* authorliuhao
*/
@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<String, Object> 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<String, Object> 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<EBDataReqDto> 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<String, String> 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<String, Object> 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<EBDataReqDetailDto> 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<EBDataReqDto> 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<String,String> getValueByNameArea(JSONArray jsonArray) {
if(jsonArray == null || jsonArray.size() == 0) {
return null;
}
Map<String,String> 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;
}
}