diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/DataSyncController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/DataSyncController.java index 3920a3bc..f5a0e5b6 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/DataSyncController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/DataSyncController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.*; @RestController @@ -40,6 +41,12 @@ public class DataSyncController { return iDataSyncService.dataSync(); } + @ApiOperation("同步用户数据2") + @PostMapping("/importUserData2") + public String importUserData2(Long chuo) throws Exception { + return iDataSyncService.dataSync2(chuo); + } + @ApiOperation("同步组织机构") @PostMapping("/importOrgData") public String importOrgData() throws Exception { diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/IDataSyncService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/IDataSyncService.java index 5b174abe..8ba11071 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/IDataSyncService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/IDataSyncService.java @@ -7,6 +7,8 @@ public interface IDataSyncService { public String dataSync(); + public String dataSync2(Long chuo); + public String orgDataSync(); public String updateByOrgs(); diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/impl/DataSyncServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/impl/DataSyncServiceImpl.java index d6eeb052..c2faa26c 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/impl/DataSyncServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/DataSync/service/impl/DataSyncServiceImpl.java @@ -38,6 +38,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -366,6 +367,106 @@ public class DataSyncServiceImpl implements IDataSyncService { } + @Transactional(rollbackFor = {RuntimeException.class,Exception.class}) + public String dataSync2(Long chuo){ + try{ + SyncUserService syncUserService = new SyncUserService(); + List res = syncUserService.syncFotonUser2(chuo); + if(res!=null && !res.isEmpty()){ + //存放岗位信息 + Map positionMap = new HashMap<>(); + TsPosition position = new TsPosition(); + position.setCurrent(1); + position.setPageSize(100000); + IPage iPage = tsPositionService.getPosition(position); + List positions=iPage.getRecords(); + if (!positions.isEmpty()) { + positions.forEach(tsPosition -> { + positionMap.put(tsPosition.getName(), tsPosition.getId()); + }); + } + List addUserList = new ArrayList<>(); + List upUserList = new ArrayList<>(); + for (String s : res) { + JSONObject userData = JSONObject.parseObject(s); + if(userData.containsKey("results")){ + JSONArray jsonArray = userData.getJSONArray("results"); + jsonArray.forEach(object -> { + JSONObject jsonObject = JSONObject.parseObject(object.toString()); + String userid = jsonObject.getString("userid"); + TsUser userEO = tsUserService.getById(userid); + String userState = ""; + if(userEO != null){ + userState = "UPDATE"; + }else{ + userState = "ADD"; + userEO = new TsUser(); + } + //先获取岗位以及岗位id + //设置岗位 + if (null != jsonObject.getString("title")) { + //通过岗位名称查询系统表中是否有岗位,有则设定用户的岗位为系统中的岗位,否则新增 + if (null == positionMap.get(jsonObject.getString("title"))) { + TsPosition tsPosition = new TsPosition(); + tsPosition.setId(String.valueOf(UUID.randomUUID())); + tsPosition.setName(jsonObject.getString("title")); + tsPositionService.addPosition(tsPosition); + //放入岗位的map集合中 + positionMap.put(tsPosition.getName(), tsPosition.getId()); + //放入类中 + userEO.setPositionName(tsPosition.getName()); + userEO.setPositionId(tsPosition.getId()); + } else { + userEO.setPositionName(jsonObject.getString("title").trim()); + userEO.setPositionId(positionMap.get(jsonObject.getString("title").trim())); + } + }else{ + userEO.setPositionId(null); + userEO.setPositionName(null); + } + //设置其他数据 + Timestamp createTime = new Timestamp(new Date().getTime()); + userEO.setState(jsonObject.getString("userStatus")); + userEO.setUname(null!=jsonObject.getString("name")?jsonObject.getString("name"):""); + userEO.setCreationTime(createTime); + userEO.setUserId(jsonObject.getString("userid")); + userEO.setAccount(jsonObject.getString("userid")); + userEO.setInstitutionId(null!=jsonObject.getString("orgNumber")?jsonObject.getString("orgNumber"):"" ); + userEO.setInstitutionName(null!=jsonObject.getString("orgName")?jsonObject.getString("orgName"):"" ); + //2022-05-23:用户同步增加状态标识,将停用的用户过滤掉 + if("1".equals(jsonObject.getString("userStatus"))){ + userEO.setValidFlag(ValidFlagEnum.VALID_TRUE.getValue()+""); + userEO.setDisableFlag(ValidFlagEnum.VALID_TRUE.getValue()+""); + }else{ + userEO.setValidFlag(ValidFlagEnum.VALID_FALSE.getValue()+""); + userEO.setDisableFlag(ValidFlagEnum.VALID_FALSE.getValue()+""); + } + if("ADD".equals(userState)){ + addUserList.add(userEO); + }else { + upUserList.add(userEO); + } + }); + } + } + if(!addUserList.isEmpty()){ + logger.debug("本次新增的用户为:"+JSONObject.toJSONString(addUserList)); + tsUserService.saveBatch(addUserList); + } + if(!upUserList.isEmpty()){ + logger.debug("本次更新的用户为:"+JSONObject.toJSONString(upUserList)); + tsUserService.updateBatchById(upUserList); + } + }else{ + logger.info("本次获取用户的数据为空,原因有2种:1、没有同步数据 2、请求接口报错"); + } + }catch(Exception e){ + logger.error(e.getMessage(),e); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } + return "1"; + + } @Transactional(rollbackFor = {RuntimeException.class,Exception.class}) diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/controller/AskQuestionsController.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/controller/AskQuestionsController.java index e92c093b..d113ed47 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/controller/AskQuestionsController.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/controller/AskQuestionsController.java @@ -61,16 +61,12 @@ public class AskQuestionsController extends BaseController { if(StringUtils.isBlank(askQuestions.getUserId())){ return Result.error(); } - Set askIdList = askQuestionsService.getAskQuestionsPage(askQuestions); + QueryWrapper queryWrapper = askQuestionsService.getqueryWrapper(askQuestions); //查询出所有的回答 IPage iPage = new Page<>(); iPage.setSize(askQuestions.getPageSize()); - iPage.setPages(askQuestions.getPage()); - QueryWrapper queryWrapper = new QueryWrapper(); - queryWrapper.orderByDesc("QUESTION_TIME"); - if(!askIdList.isEmpty()){ - queryWrapper.in("id",askIdList); - } + //iPage.setPages(askQuestions.getPage()); + iPage.setCurrent(askQuestions.getPage()); IPage page = askQuestionsService.page(iPage,queryWrapper); if(!page.getRecords().isEmpty()){ for (AskQuestions data : page.getRecords()){ diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/AskQuestionsService.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/AskQuestionsService.java index 33587c73..7156f595 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/AskQuestionsService.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/AskQuestionsService.java @@ -5,6 +5,7 @@ import com.adc.da.slrs.StandardQA.entity.AskQuestions; import com.adc.da.slrs.StandardQA.entity.AskQuestionsPage; import com.adc.da.slrs.StandardQA.entity.Reply; import com.adc.da.util.http.ResponseMessage; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; @@ -34,4 +35,7 @@ public interface AskQuestionsService extends IService { List getAskQuestionsByakId(String id,String state,String userId); Set getAskQuestionsPage(AskQuestionsPage askQuestions); + + QueryWrapper getqueryWrapper(AskQuestionsPage askQuestions); + } diff --git a/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/impl/AskQuestionsServiceImpl.java b/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/impl/AskQuestionsServiceImpl.java index aa50e6b3..79a3c8c2 100644 --- a/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/impl/AskQuestionsServiceImpl.java +++ b/adc-da-slrs/src/main/java/com/adc/da/slrs/StandardQA/service/impl/AskQuestionsServiceImpl.java @@ -150,49 +150,89 @@ public class AskQuestionsServiceImpl extends ServiceImpl getAskQuestionsPage(AskQuestionsPage askQuestions) { //当前人是法规部门 则返回未被回答的提问信息 List uId = askQuestionsDao.getUId(); - for (String uid : uId){ - if(uid.equals(askQuestions.getUserId())){ - //查询所有的问 答 - List askQuestionsList = baseMapper.selectList(null); - List repLies = replyDao.selectList(null); - List askList = new ArrayList<>(); - for (AskQuestions ask: askQuestionsList){ - for (Reply reply: repLies){ - if(ask.getId().equals(reply.getAskId())){ - askList.add(ask); + if(!uId.isEmpty()) { + for (String uid : uId) { + if (uid.equals(askQuestions.getUserId())) { + //查询所有的问 答 + List askQuestionsList = baseMapper.selectList(null); + List repLies = replyDao.selectList(null); + List askList = new ArrayList<>(); + for (AskQuestions ask : askQuestionsList) { + for (Reply reply : repLies) { + if (ask.getId().equals(reply.getAskId())) { + askList.add(ask); + } } } + askQuestionsList.removeAll(askList.stream().distinct().collect(Collectors.toList())); + Set askIdList = new HashSet<>(); + //所有没有回答的问题 + for (AskQuestions ask : askQuestionsList) { + askIdList.add(ask.getId()); + } + return askIdList; } - askQuestionsList.removeAll(askList.stream().distinct().collect(Collectors.toList())); - Set askIdList = new HashSet<>(); - //所有没有回答的问题 - for (AskQuestions ask: askQuestionsList){ - askIdList.add(ask.getId()); - } - //查询出所有的回答 - return askIdList; } } - // 不是法规部门 但是被邀请回答 + // 不是法规部门 但是被邀请回答 和自己的提问 + // 当前人的提问 + Set askIdList = new HashSet<>(); QueryWrapper askQuestionsQueryWrapper = new QueryWrapper<>(); askQuestionsQueryWrapper.eq("QUESTIONER",askQuestions.getUserId()); List askQuestionsList = baseMapper.selectList(askQuestionsQueryWrapper); - Set askIdList = new HashSet<>(); - //所有没有回答的问题 - for (AskQuestions ask: askQuestionsList){ - askIdList.add(ask.getId()); + // 当前人的提问没有被回答的 + if(!askQuestionsList.isEmpty()) { + for (AskQuestions ask :askQuestionsList) { + QueryWrapper replyQueryWrapper = new QueryWrapper<>(); + replyQueryWrapper.eq("ASK_ID",ask.getId()); + List replies = replyDao.selectList(replyQueryWrapper); + if(replies.isEmpty()){ + askIdList.add(ask.getId()); + } + } } - // 邀请当前人回答 + //邀请当前人回答 当前人未回答 QueryWrapper objectQueryWrapper = new QueryWrapper<>(); objectQueryWrapper.eq("USID",askQuestions.getUserId()); List askUsers = askUserService.list(objectQueryWrapper); - for (AskUser askUser: askUsers){ - askIdList.add(askUser.getAsdId()); + if(!askUsers.isEmpty()){ + for (AskUser ask :askUsers) { + QueryWrapper replyQueryWrapper = new QueryWrapper<>(); + replyQueryWrapper.eq("ASK_ID",ask.getAsdId()); + replyQueryWrapper.eq("ANSWERER",askQuestions.getUserId()); + List replies = replyDao.selectList(replyQueryWrapper); + if(replies.isEmpty()){ + askIdList.add(ask.getAsdId()); + } + } } //查询出所有的回答 return askIdList; } + @Override + public QueryWrapper getqueryWrapper(AskQuestionsPage askQuestions) { + Set askIdList = getAskQuestionsPage(askQuestions); + IPage iPage = new Page<>(); + iPage.setSize(askQuestions.getPageSize()); + iPage.setCurrent(askQuestions.getPage()); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.orderByDesc("QUESTION_TIME"); + if(!askIdList.isEmpty()){ + queryWrapper.in("id",askIdList); + } + if(StringUtils.isNotBlank(askQuestions.getClassification())){ + queryWrapper.eq("CLASSIFICATION",askQuestions.getClassification()); + } + if(StringUtils.isNotBlank(askQuestions.getProblemDescription())){ + queryWrapper.like("PROBLEM_DESCRIPTION",askQuestions.getProblemDescription()); + } + if(StringUtils.isNotBlank(askQuestions.getQuestioner())){ + queryWrapper.eq("QUESTIONER",askQuestions.getQuestioner()); + } + return queryWrapper; + } + public ResponseMessage selectAskReply(String id) { ArrayList objects = new ArrayList<>(); diff --git a/adc-da-slrs/src/main/resources/mysql/foton.sql b/adc-da-slrs/src/main/resources/mysql/foton.sql new file mode 100644 index 00000000..e69de29b diff --git a/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncUserService.java b/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncUserService.java index 15267047..5e01e973 100644 --- a/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncUserService.java +++ b/adc-da-sys/src/main/java/com/adc/da/sync/service/SyncUserService.java @@ -69,6 +69,51 @@ public class SyncUserService { return json; } + public List syncFotonUser2(Long chuo)throws Exception{ + String appuser = "app_slrs"; + String appkey = "Fxi5LHbI5yGbQQDpVp86GcCdXeC5Bjfe"; + AuthUtils util = new AuthUtils(appuser, appkey, null); + + List json=new ArrayList<>(); + byte[] cookie = null; + do { + Map params = new HashMap(); + params.put("cookie", Base64.encodeBase64String(cookie)); + params.put("timestamp", chuo); + + // 用户参数 + params.put("filter", "(userid=*)"); + params.put("basedn", "ou=People,o=foton.com.cn,o=isp"); + System.out.println("RequestBody:" + params.toString()); + // 用户测试 + String rs = util.getResponseFromServer("http://idmsync.foton.com.cn/rest/users/getUserList", params); + log.debug(rs); + JSONObject responseStr = JSON.parseObject(rs); + if(responseStr.containsKey("status") && responseStr.getBoolean("status")){ + json.add(rs); + } + if (responseStr.containsKey("cookie")) { + try { + JSONArray entries = responseStr.getJSONArray("cookie"); + if(entries==null){ + break; + } + cookie = new byte[entries.size()]; + for (int i = 0; i < entries.size(); i++) { + cookie[i] = (byte) entries.getByte(i); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + if (e.getMessage().contains("is not a JSONArray")) { + cookie = null; + } + } + } + + } while (cookie != null); + return json; + } + public List syncFotonOrg()throws Exception{