|
@@ -1,10 +1,7 @@
|
|
|
package com.fs.his.service.impl;
|
|
package com.fs.his.service.impl;
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
-import java.util.Date;
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-import java.util.Map;
|
|
|
|
|
-import java.util.Set;
|
|
|
|
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
import com.alibaba.excel.EasyExcel;
|
|
import com.alibaba.excel.EasyExcel;
|
|
@@ -243,10 +240,14 @@ public class FsImportMemberServiceImpl extends ServiceImpl<FsImportMemberMapper,
|
|
|
public void syncKdzlMemberInfo() {
|
|
public void syncKdzlMemberInfo() {
|
|
|
logger.info("开始同步会员信息...");
|
|
logger.info("开始同步会员信息...");
|
|
|
int totalCount = 0;
|
|
int totalCount = 0;
|
|
|
|
|
+ int loopCount = 0;
|
|
|
|
|
+ int maxLoopCount = 100;
|
|
|
|
|
+ int batchSize = 500;
|
|
|
|
|
|
|
|
- while (true) {
|
|
|
|
|
|
|
+ while (loopCount < maxLoopCount) {
|
|
|
|
|
+ loopCount++;
|
|
|
List<Custm> custms = kdzlService.exportCustomers();
|
|
List<Custm> custms = kdzlService.exportCustomers();
|
|
|
- logger.info("本次获取会员信息数量:{}", custms.size());
|
|
|
|
|
|
|
+ logger.info("本次获取会员信息数量:{},当前循环次数:{}", custms.size(), loopCount);
|
|
|
|
|
|
|
|
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(custms)) {
|
|
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(custms)) {
|
|
|
logger.info("未获取到会员数据,同步结束");
|
|
logger.info("未获取到会员数据,同步结束");
|
|
@@ -256,15 +257,27 @@ public class FsImportMemberServiceImpl extends ServiceImpl<FsImportMemberMapper,
|
|
|
totalCount += custms.size();
|
|
totalCount += custms.size();
|
|
|
logger.info("累计已同步会员数量:{}", totalCount);
|
|
logger.info("累计已同步会员数量:{}", totalCount);
|
|
|
|
|
|
|
|
|
|
+ List<Long> kdzlMemberIds = custms.stream()
|
|
|
|
|
+ .map(Custm::getCustmid)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ List<FsImportMember> existingMembers = importMemberMapper.selectFsImportMemberByMemberIds(kdzlMemberIds);
|
|
|
|
|
+ Map<Long, FsImportMember> existingMemberMap = existingMembers.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(FsImportMember::getKdzlMemberId, m -> m));
|
|
|
|
|
+
|
|
|
|
|
+ List<FsImportMember> membersToSave = new ArrayList<>();
|
|
|
|
|
+ Date nowDate = new Date();
|
|
|
|
|
+
|
|
|
for (Custm custm : custms) {
|
|
for (Custm custm : custms) {
|
|
|
try {
|
|
try {
|
|
|
- FsImportMember member = importMemberMapper.selectFsImportMemberByMemberId(custm.getCustmid());
|
|
|
|
|
- if (member == null) {
|
|
|
|
|
|
|
+ FsImportMember member = existingMemberMap.get(custm.getCustmid());
|
|
|
|
|
+ boolean isNew = (member == null);
|
|
|
|
|
+
|
|
|
|
|
+ if (isNew) {
|
|
|
member = new FsImportMember();
|
|
member = new FsImportMember();
|
|
|
member.setKdzlMemberId(custm.getCustmid());
|
|
member.setKdzlMemberId(custm.getCustmid());
|
|
|
- member.setKdzlMemberJson(JSON.toJSONString(custm));
|
|
|
|
|
member.setMemberName(custm.getName());
|
|
member.setMemberName(custm.getName());
|
|
|
- member.setCreateTime(new Date());
|
|
|
|
|
|
|
+ member.setCreateTime(nowDate);
|
|
|
|
|
|
|
|
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getContacts())) {
|
|
if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getContacts())) {
|
|
|
com.fs.kdzl.dto.Contact contact = custm.getContacts().get(0);
|
|
com.fs.kdzl.dto.Contact contact = custm.getContacts().get(0);
|
|
@@ -274,51 +287,52 @@ public class FsImportMemberServiceImpl extends ServiceImpl<FsImportMemberMapper,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
member.setAddress(custm.getAddr());
|
|
member.setAddress(custm.getAddr());
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getProperties())) {
|
|
|
|
|
- for (Property property : custm.getProperties()) {
|
|
|
|
|
- switch (property.getProp_name()) {
|
|
|
|
|
- case "现病史":
|
|
|
|
|
- member.setPresentIllness(property.getProp_value());
|
|
|
|
|
- break;
|
|
|
|
|
- case "现用药情况":
|
|
|
|
|
- member.setCurrentMedication(property.getProp_value());
|
|
|
|
|
- break;
|
|
|
|
|
- case "过敏史":
|
|
|
|
|
- member.setAllergyHistory(property.getProp_value());
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- member.setKdzlMemberJson(JSON.toJSONString(custm));
|
|
|
|
|
- member.setUpdateTime(new Date());
|
|
|
|
|
- member.setStatus(0);
|
|
|
|
|
-
|
|
|
|
|
- if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getProperties())) {
|
|
|
|
|
- for (Property property : custm.getProperties()) {
|
|
|
|
|
- switch (property.getProp_name()) {
|
|
|
|
|
- case "现病史":
|
|
|
|
|
- member.setPresentIllness(property.getProp_value());
|
|
|
|
|
- break;
|
|
|
|
|
- case "现用药情况":
|
|
|
|
|
- member.setCurrentMedication(property.getProp_value());
|
|
|
|
|
- break;
|
|
|
|
|
- case "过敏史":
|
|
|
|
|
- member.setAllergyHistory(property.getProp_value());
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ member.setKdzlMemberJson(JSON.toJSONString(custm));
|
|
|
|
|
+ member.setUpdateTime(nowDate);
|
|
|
|
|
+ member.setStatus(0);
|
|
|
|
|
+
|
|
|
|
|
+ if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getProperties())) {
|
|
|
|
|
+ for (Property property : custm.getProperties()) {
|
|
|
|
|
+ switch (property.getProp_name()) {
|
|
|
|
|
+ case "现病史":
|
|
|
|
|
+ member.setPresentIllness(property.getProp_value());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "现用药情况":
|
|
|
|
|
+ member.setCurrentMedication(property.getProp_value());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "过敏史":
|
|
|
|
|
+ member.setAllergyHistory(property.getProp_value());
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (member.getId() == null) {
|
|
|
|
|
- importMemberMapper.insertFsImportMember(member);
|
|
|
|
|
|
|
+ membersToSave.add(member);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("处理会员信息失败,custmid: {}, 错误: {}", custm.getCustmid(), e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!membersToSave.isEmpty()) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (membersToSave.size() <= batchSize) {
|
|
|
|
|
+ importMemberMapper.batchInsertOrUpdateFsImportMember(membersToSave);
|
|
|
|
|
+ logger.info("批量保存会员成功,数量:{}", membersToSave.size());
|
|
|
} else {
|
|
} else {
|
|
|
- importMemberMapper.updateFsImportMember(member);
|
|
|
|
|
|
|
+ for (int i = 0; i < membersToSave.size(); i += batchSize) {
|
|
|
|
|
+ int endIndex = Math.min(i + batchSize, membersToSave.size());
|
|
|
|
|
+ List<FsImportMember> batch = membersToSave.subList(i, endIndex);
|
|
|
|
|
+ importMemberMapper.batchInsertOrUpdateFsImportMember(batch);
|
|
|
|
|
+ logger.info("分批批量保存会员成功,批次:{}/{}, 数量:{}",
|
|
|
|
|
+ (i / batchSize + 1),
|
|
|
|
|
+ (membersToSave.size() + batchSize - 1) / batchSize,
|
|
|
|
|
+ batch.size());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- log.error("同步会员信息失败,custmid: {}, 错误: {}", custm.getCustmid(), e.getMessage());
|
|
|
|
|
|
|
+ log.error("批量保存会员失败,数量:{}, 错误: {}", membersToSave.size(), e.getMessage(), e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -330,6 +344,126 @@ public class FsImportMemberServiceImpl extends ServiceImpl<FsImportMemberMapper,
|
|
|
logger.info("本次获取数据量等于2000,继续获取下一页数据...");
|
|
logger.info("本次获取数据量等于2000,继续获取下一页数据...");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if (loopCount >= maxLoopCount) {
|
|
|
|
|
+ logger.warn("已达到最大循环次数{},强制退出循环,防止死循环", maxLoopCount);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
logger.info("会员信息同步完成,总共同步数量:{}", totalCount);
|
|
logger.info("会员信息同步完成,总共同步数量:{}", totalCount);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Async
|
|
|
|
|
+ public void syncKdzlHighSeaMemberInfo() {
|
|
|
|
|
+ logger.info("开始同步公海会员信息...");
|
|
|
|
|
+ int totalCount = 0;
|
|
|
|
|
+ int loopCount = 0;
|
|
|
|
|
+ int maxLoopCount = 100;
|
|
|
|
|
+ int batchSize = 500;
|
|
|
|
|
+
|
|
|
|
|
+ while (loopCount < maxLoopCount) {
|
|
|
|
|
+ loopCount++;
|
|
|
|
|
+ List<Custm> custms = kdzlService.exportHighSeasCustomers(null);
|
|
|
|
|
+ logger.info("本次获取公海会员信息数量:{},当前循环次数:{}", custms.size(), loopCount);
|
|
|
|
|
+
|
|
|
|
|
+ if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(custms)) {
|
|
|
|
|
+ logger.info("未获取到公海会员数据,同步结束");
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ totalCount += custms.size();
|
|
|
|
|
+ logger.info("累计已同步公海会员数量:{}", totalCount);
|
|
|
|
|
+
|
|
|
|
|
+ List<Long> kdzlMemberIds = custms.stream()
|
|
|
|
|
+ .map(Custm::getCustmid)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ List<FsImportMember> existingMembers = importMemberMapper.selectFsImportMemberByMemberIds(kdzlMemberIds);
|
|
|
|
|
+ Map<Long, FsImportMember> existingMemberMap = existingMembers.stream()
|
|
|
|
|
+ .collect(Collectors.toMap(FsImportMember::getKdzlMemberId, m -> m));
|
|
|
|
|
+
|
|
|
|
|
+ List<FsImportMember> membersToSave = new ArrayList<>();
|
|
|
|
|
+ Date nowDate = new Date();
|
|
|
|
|
+
|
|
|
|
|
+ for (Custm custm : custms) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ FsImportMember member = existingMemberMap.get(custm.getCustmid());
|
|
|
|
|
+ boolean isNew = (member == null);
|
|
|
|
|
+
|
|
|
|
|
+ if (isNew) {
|
|
|
|
|
+ member = new FsImportMember();
|
|
|
|
|
+ member.setKdzlMemberId(custm.getCustmid());
|
|
|
|
|
+ member.setMemberName(custm.getName());
|
|
|
|
|
+ member.setCreateTime(nowDate);
|
|
|
|
|
+
|
|
|
|
|
+ if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getContacts())) {
|
|
|
|
|
+ com.fs.kdzl.dto.Contact contact = custm.getContacts().get(0);
|
|
|
|
|
+ if (contact != null && com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(contact.getMobiles())) {
|
|
|
|
|
+ member.setMemberPhone(contact.getMobiles().get(0));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ member.setAddress(custm.getAddr());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ member.setKdzlMemberJson(JSON.toJSONString(custm));
|
|
|
|
|
+ member.setUpdateTime(nowDate);
|
|
|
|
|
+ member.setStatus(0);
|
|
|
|
|
+
|
|
|
|
|
+ if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(custm.getProperties())) {
|
|
|
|
|
+ for (Property property : custm.getProperties()) {
|
|
|
|
|
+ switch (property.getProp_name()) {
|
|
|
|
|
+ case "现病史":
|
|
|
|
|
+ member.setPresentIllness(property.getProp_value());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "现用药情况":
|
|
|
|
|
+ member.setCurrentMedication(property.getProp_value());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case "过敏史":
|
|
|
|
|
+ member.setAllergyHistory(property.getProp_value());
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ membersToSave.add(member);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("处理公海会员信息失败,custmid: {}, 错误: {}", custm.getCustmid(), e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!membersToSave.isEmpty()) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ if (membersToSave.size() <= batchSize) {
|
|
|
|
|
+ importMemberMapper.batchInsertOrUpdateFsImportMember(membersToSave);
|
|
|
|
|
+ logger.info("批量保存公海会员成功,数量:{}", membersToSave.size());
|
|
|
|
|
+ } else {
|
|
|
|
|
+ for (int i = 0; i < membersToSave.size(); i += batchSize) {
|
|
|
|
|
+ int endIndex = Math.min(i + batchSize, membersToSave.size());
|
|
|
|
|
+ List<FsImportMember> batch = membersToSave.subList(i, endIndex);
|
|
|
|
|
+ importMemberMapper.batchInsertOrUpdateFsImportMember(batch);
|
|
|
|
|
+ logger.info("分批批量保存公海会员成功,批次:{}/{}, 数量:{}",
|
|
|
|
|
+ (i / batchSize + 1),
|
|
|
|
|
+ (membersToSave.size() + batchSize - 1) / batchSize,
|
|
|
|
|
+ batch.size());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("批量保存公海会员失败,数量:{}, 错误: {}", membersToSave.size(), e.getMessage(), e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (custms.size() < 2000) {
|
|
|
|
|
+ logger.info("本次获取公海数据量小于2000,所有公海会员数据已同步完毕");
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ logger.info("本次获取公海数据量等于2000,继续获取下一页数据...");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (loopCount >= maxLoopCount) {
|
|
|
|
|
+ logger.warn("已达到最大循环次数{},强制退出循环,防止死循环", maxLoopCount);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ logger.info("公海会员信息同步完成,总共同步数量:{}", totalCount);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|