fix: 基础数据更新增加事务控制

This commit is contained in:
zhangyanduan
2022-06-02 14:08:09 +08:00
parent 096132126d
commit 577c6c5a82
3 changed files with 148 additions and 102 deletions
@@ -27,7 +27,7 @@ public class ScheduledSync {
@Scheduled(cron="0 0 2 * * ?") @Scheduled(cron="0 0 2 * * ?")
@Async @Async
public void syncSchedulingTasks() throws Exception { public void syncSchedulingTasks() {
iDataSyncService.orgDataSync(); //时间短 iDataSyncService.orgDataSync(); //时间短
iDataSyncService.dataSync(); //时间长 iDataSyncService.dataSync(); //时间长
} }
@@ -2,7 +2,7 @@ package com.adc.da.slrs.DataSync.service;
public interface IDataSyncService { public interface IDataSyncService {
public String dataSync() throws Exception; public String dataSync();
public String orgDataSync() throws Exception; public String orgDataSync();
} }
@@ -1,5 +1,6 @@
package com.adc.da.slrs.DataSync.service.impl; package com.adc.da.slrs.DataSync.service.impl;
import com.adc.da.login.util.UserUtils;
import com.adc.da.slrs.DataSync.service.IDataSyncService; import com.adc.da.slrs.DataSync.service.IDataSyncService;
import com.adc.da.slrs.sarInstitution.entity.TsInstitution; import com.adc.da.slrs.sarInstitution.entity.TsInstitution;
import com.adc.da.slrs.sarInstitution.service.ITsInstitutionService; import com.adc.da.slrs.sarInstitution.service.ITsInstitutionService;
@@ -12,8 +13,13 @@ import com.adc.da.sys.entity.UserOrgEO;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.log4j.Log4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.util.*; import java.util.*;
@@ -29,77 +35,80 @@ public class DataSyncServiceImpl implements IDataSyncService {
@Autowired @Autowired
ITsInstitutionService tsInstitutionService; ITsInstitutionService tsInstitutionService;
private static Logger logger = LoggerFactory.getLogger(DataSyncServiceImpl.class);
@Transactional(rollbackFor = {RuntimeException.class,Exception.class})
@Override @Override
public String dataSync() throws Exception { public String dataSync(){
SyncUserService syncUserService = new SyncUserService(); try{
List<String> res = syncUserService.syncFotonUser(); SyncUserService syncUserService = new SyncUserService();
//存放岗位信息 List<String> res = syncUserService.syncFotonUser();
Map<String, String> positionMap = new HashMap<>(); //存放岗位信息
Map<String, String> useDistinct = new HashMap<>(); Map<String, String> positionMap = new HashMap<>();
TsPosition position = new TsPosition(); Map<String, String> useDistinct = new HashMap<>();
position.setCurrent(1); TsPosition position = new TsPosition();
position.setPageSize(100000); position.setCurrent(1);
IPage<TsPosition> iPage = tsPositionService.getPosition(position); position.setPageSize(100000);
List<TsPosition> positions=iPage.getRecords(); IPage<TsPosition> iPage = tsPositionService.getPosition(position);
if (!positions.isEmpty()) { List<TsPosition> positions=iPage.getRecords();
positions.forEach(tsPosition -> { if (!positions.isEmpty()) {
positionMap.put(tsPosition.getName(), tsPosition.getId()); positions.forEach(tsPosition -> {
}); positionMap.put(tsPosition.getName(), tsPosition.getId());
} });
}
/** /**
* 得到数据时,删除系统表中所有用户信息 * 得到数据时,删除系统表中所有用户信息
*/ */
if (res.size()>0){ if (res.size()>0){
tsUserService.deleteUser(); tsUserService.deleteUser();
} }
for (String s : res) { for (String s : res) {
//获取到所有用户数据 //获取到所有用户数据
List<TsUser> tsUsers = new ArrayList<>(); List<TsUser> tsUsers = new ArrayList<>();
JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(s.toString()).getString("results")); JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(s.toString()).getString("results"));
jsonArray.forEach(object -> { jsonArray.forEach(object -> {
JSONObject jsonObject = JSONObject.parseObject(object.toString()); JSONObject jsonObject = JSONObject.parseObject(object.toString());
//先获取岗位以及岗位id //先获取岗位以及岗位id
TsUser tsUser = new TsUser(); TsUser tsUser = new TsUser();
UserOrgEO userOrgEO = new UserOrgEO(); UserOrgEO userOrgEO = new UserOrgEO();
//设置岗位 //设置岗位
if (null != jsonObject.getString("title")) { if (null != jsonObject.getString("title")) {
//通过岗位名称查询系统表中是否有岗位,有则设定用户的岗位为系统中的岗位,否则新增 //通过岗位名称查询系统表中是否有岗位,有则设定用户的岗位为系统中的岗位,否则新增
if (null == positionMap.get(jsonObject.getString("title"))) { if (null == positionMap.get(jsonObject.getString("title"))) {
TsPosition tsPosition = new TsPosition(); TsPosition tsPosition = new TsPosition();
tsPosition.setId(String.valueOf(UUID.randomUUID())); tsPosition.setId(String.valueOf(UUID.randomUUID()));
tsPosition.setName(jsonObject.getString("title")); tsPosition.setName(jsonObject.getString("title"));
tsPositionService.addPosition(tsPosition); tsPositionService.addPosition(tsPosition);
//放入岗位的map集合中 //放入岗位的map集合中
positionMap.put(tsPosition.getName(), tsPosition.getId()); positionMap.put(tsPosition.getName(), tsPosition.getId());
//放入类中 //放入类中
tsUser.setPositionName(tsPosition.getName()); tsUser.setPositionName(tsPosition.getName());
tsUser.setPositionId(tsPosition.getId()); tsUser.setPositionId(tsPosition.getId());
} else { } else {
tsUser.setPositionName(jsonObject.getString("title").trim()); tsUser.setPositionName(jsonObject.getString("title").trim());
tsUser.setPositionId(positionMap.get(jsonObject.getString("title").trim())); tsUser.setPositionId(positionMap.get(jsonObject.getString("title").trim()));
}
} }
} //设置其他数据
//设置其他数据 Timestamp createTime = new Timestamp(new Date().getTime());
Timestamp createTime = new Timestamp(new Date().getTime()); tsUser.setState(jsonObject.getString("userStatus"));
tsUser.setState(jsonObject.getString("userStatus")); tsUser.setUname(null!=jsonObject.getString("name")?jsonObject.getString("name"):"");
tsUser.setUname(null!=jsonObject.getString("name")?jsonObject.getString("name"):""); tsUser.setValidFlag("0");
tsUser.setValidFlag("0"); tsUser.setDisableFlag("0");
tsUser.setDisableFlag("0"); tsUser.setCreationTime(createTime);
tsUser.setCreationTime(createTime); tsUser.setUserId(jsonObject.getString("userid"));
tsUser.setUserId(jsonObject.getString("userid")); tsUser.setAccount(jsonObject.getString("userid"));
tsUser.setAccount(jsonObject.getString("userid")); tsUser.setInstitutionId(null!=jsonObject.getString("orgNumber")?jsonObject.getString("orgNumber"):"" );
tsUser.setInstitutionId(null!=jsonObject.getString("orgNumber")?jsonObject.getString("orgNumber"):"" ); tsUser.setInstitutionName(null!=jsonObject.getString("orgName")?jsonObject.getString("orgName"):"" );
tsUser.setInstitutionName(null!=jsonObject.getString("orgName")?jsonObject.getString("orgName"):"" ); //2022-05-23:用户同步增加状态标识,将停用的用户过滤掉
//2022-05-23:用户同步增加状态标识,将停用的用户过滤掉 if (null == useDistinct.get(jsonObject.getString("userid")) && "1".equals(jsonObject.getString("userStatus"))) {
if (null == useDistinct.get(jsonObject.getString("userid")) && "1".equals(jsonObject.getString("userStatus"))) { tsUsers.add(tsUser);
tsUsers.add(tsUser);
} }
// //测试数据删除 // //测试数据删除
// if (! "anbin".equals(jsonObject.getString("userid"))){ // if (! "anbin".equals(jsonObject.getString("userid"))){
@@ -113,12 +122,12 @@ public class DataSyncServiceImpl implements IDataSyncService {
// //
// } // }
// } // }
useDistinct.put(tsUser.getUserId(),tsUser.getUserId()); useDistinct.put(tsUser.getUserId(),tsUser.getUserId());
}); });
tsUserService.saveBatch(tsUsers); tsUserService.saveBatch(tsUsers);
} }
//测试数据添加 //测试数据添加
// TsUser addUser = new TsUser(); // TsUser addUser = new TsUser();
// addUser.setState("FFFFFFF"); // addUser.setState("FFFFFFF");
// addUser.setUname("zhaokaiyao"); // addUser.setUname("zhaokaiyao");
@@ -132,42 +141,79 @@ public class DataSyncServiceImpl implements IDataSyncService {
// //
// List<TsUser> addUserList = Arrays.asList(addUser); // List<TsUser> addUserList = Arrays.asList(addUser);
// tsUserService.saveBatch(addUserList); // tsUserService.saveBatch(addUserList);
}catch(Exception e){
logger.error(e.getMessage(),e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return "1"; return "1";
} }
@Transactional(rollbackFor = {RuntimeException.class,Exception.class})
public String orgDataSync() throws Exception { public String orgDataSync(){
SyncUserService syncUserService = new SyncUserService(); try{
List<String> res = syncUserService.syncFotonOrg(); SyncUserService syncUserService = new SyncUserService();
List<String> res = syncUserService.syncFotonOrg();
//获取到所有用户数据 //获取到所有用户数据
List<String> strings=new ArrayList<>(); List<String> strings=new ArrayList<>();
//tsInstitutionService.clearData();
tsInstitutionService.clearData(); for (String s : res) {
for (String s : res) { JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(s.toString()).getString("results"));
JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(s.toString()).getString("results")); jsonArray.forEach(object -> {
jsonArray.forEach(object -> { JSONObject jsonObject = JSONObject.parseObject(object.toString());
JSONObject jsonObject = JSONObject.parseObject(object.toString()); strings.add(jsonObject.getString("parentOrgNumber"));
strings.add(jsonObject.getString("parentOrgNumber")); });
}); }
} List<TsInstitution> allTsInstitutionList = tsInstitutionService.list();
for (String s : res) { for (String s : res) {
List<TsInstitution> tsInstitutions = new ArrayList<>(); List<TsInstitution> addTsInstitutionList = new ArrayList<>();
JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(s.toString()).getString("results")); List<TsInstitution> updateTsInstitutionList = new ArrayList<>();
jsonArray.forEach(object -> { List<TsInstitution> delTsInstitutionList = new ArrayList<>();
JSONObject jsonObject = JSONObject.parseObject(object.toString()); Set<String> syncAllIdList = new HashSet<>();
TsInstitution tsInstitution=new TsInstitution(); JSONArray jsonArray = JSONArray.parseArray(JSONObject.parseObject(s.toString()).getString("results"));
tsInstitution.setId(jsonObject.getString("orgNumber")); jsonArray.forEach(object -> {
tsInstitution.setName(jsonObject.getString("orgName")); JSONObject jsonObject = JSONObject.parseObject(object.toString());
tsInstitution.setHasChild(strings.contains(jsonObject.getString("orgNumber"))?"1":"0"); TsInstitution tsInstitution=new TsInstitution();
tsInstitution.setParentId(jsonObject.getString("parentOrgNumber")); tsInstitution.setId(jsonObject.getString("orgNumber"));
//部门为"null"的数据不保存 tsInstitution.setName(jsonObject.getString("orgName"));
if (!"null".equals(jsonObject.getString("orgName"))){ tsInstitution.setHasChild(strings.contains(jsonObject.getString("orgNumber"))?"1":"0");
tsInstitutions.add(tsInstitution); tsInstitution.setParentId(jsonObject.getString("parentOrgNumber"));
//部门为"null"的数据不保存
if (!"null".equals(jsonObject.getString("orgName"))){
TsInstitution institution = tsInstitutionService.getById(tsInstitution.getId());
if(institution!=null){
updateTsInstitutionList.add(tsInstitution);
}else{
addTsInstitutionList.add(tsInstitution);
}
syncAllIdList.add(tsInstitution.getId());
}
});
//遍历出来需要删除的数据
for(TsInstitution data :allTsInstitutionList){
if(!syncAllIdList.contains(data.getId())){
delTsInstitutionList.add(data);
}
} }
}); //需要新增的数据
tsInstitutionService.saveBatch(tsInstitutions); if(!addTsInstitutionList.isEmpty()){
tsInstitutionService.saveBatch(addTsInstitutionList);
}
//需要更新的数据
if(!updateTsInstitutionList.isEmpty()){
tsInstitutionService.updateBatchById(updateTsInstitutionList);
}
//需要删除的数据
if(!delTsInstitutionList.isEmpty()){
tsInstitutionService.updateBatchById(delTsInstitutionList);
}
}
}catch(Exception e){
logger.error(e.getMessage(),e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
} }
return "1"; return "1";
} }