diff --git a/src/main/java/com/docus/server/archive/converter/MzsyDeptInfoConverter.java b/src/main/java/com/docus/server/archive/converter/MzsyDeptInfoConverter.java new file mode 100644 index 0000000..88887d1 --- /dev/null +++ b/src/main/java/com/docus/server/archive/converter/MzsyDeptInfoConverter.java @@ -0,0 +1,22 @@ +package com.docus.server.archive.converter; + +import com.docus.server.archive.entity.PowerDept; +import com.docus.server.mzsy.entity.MzsyDeptInfoView; + + +/** + * 梅州三院科室信息转换器 + * @author wyb + */ +public class MzsyDeptInfoConverter { + public static PowerDept convertDeptInfo(MzsyDeptInfoView view) { + if (view == null) { + return null; + } + PowerDept powerDept = new PowerDept(); + powerDept.setDeptCode(view.getCODE()); + powerDept.setDeptName(view.getNAME()); + powerDept.setEffective(1); + return powerDept; + } +} diff --git a/src/main/java/com/docus/server/archive/converter/MzsyUserInfoConverter.java b/src/main/java/com/docus/server/archive/converter/MzsyUserInfoConverter.java new file mode 100644 index 0000000..9f4df4d --- /dev/null +++ b/src/main/java/com/docus/server/archive/converter/MzsyUserInfoConverter.java @@ -0,0 +1,47 @@ +package com.docus.server.archive.converter; + +import com.docus.server.archive.entity.PowerUser; +import com.docus.server.mzsy.entity.MzsyUserInfoView; + + +/** + * 梅州三院用户信息转换器 + * + * @author wyb + */ +public class MzsyUserInfoConverter { + public static PowerUser convertUserInfo(MzsyUserInfoView view) { + if (view == null) { + return null; + } + Long roleId = 0L; + // 角色 0-医生 1-护士 2-病案室 3-其他 + String role = view.getFL(); + if ("0".equals(role)) { + roleId = 1L; + } + if ("1".equals(role)) { + roleId = 2L; + } + if ("2".equals(role)) { + roleId = 7L; + } + if ("3".equals(role)) { + roleId = 0L; + } + Integer enable = "是".equals(view.getFISAVAILABLE()) ? 1 : 0; + PowerUser user = new PowerUser(); + user.setUserName(view.getFEMPCODE()); + user.setName(view.getFEMPNAME()); + user.setDeptId(view.getFIP_DEPTID()); + user.setEffective(enable); + user.setEnabled(enable); + user.setRoleId(roleId); + user.setPowerDept(user.getDeptId()); + // 医生默认管辖医生为自己 + if (roleId.equals(1L)) { + user.setPowerAttending(user.getUserName()); + } + return user; + } +} diff --git a/src/main/java/com/docus/server/archive/service/impl/MzsyDeptInfoSyncServiceImpl.java b/src/main/java/com/docus/server/archive/service/impl/MzsyDeptInfoSyncServiceImpl.java new file mode 100644 index 0000000..e2edf84 --- /dev/null +++ b/src/main/java/com/docus/server/archive/service/impl/MzsyDeptInfoSyncServiceImpl.java @@ -0,0 +1,94 @@ +package com.docus.server.archive.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.archive.constans.SyncConstant; +import com.docus.server.archive.converter.MzsyDeptInfoConverter; +import com.docus.server.archive.entity.PowerDept; +import com.docus.server.archive.mapper.PowerDeptMapper; +import com.docus.server.archive.service.DeptInfoSyncService; +import com.docus.server.mzsy.entity.MzsyDeptInfoView; +import com.docus.server.mzsy.mapper.MzsyDeptInfoViewMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 梅州三院科室数据同步 + * @author YongBin Wen + * @date 2024/3/27 16:25 + */ +@Service("Mzsy" + SyncConstant.DEPT_INFO_SYNC_SERVICE_SUFFIX) +@Slf4j +public class MzsyDeptInfoSyncServiceImpl implements DeptInfoSyncService { + @Resource + private PowerDeptMapper powerDeptMapper; + @Resource + private MzsyDeptInfoViewMapper deptInfoViewMapper; + @Resource + private IdService idService; + + @Override + public void fullSync() { + List deptInfoViews = deptInfoViewMapper.list(); + if (Func.isEmpty(deptInfoViews)) { + return; + } + List powerDeptList = deptInfoViews.stream() + .map(MzsyDeptInfoConverter::convertDeptInfo) + .collect(Collectors.toList()); + saveOrUpdate(powerDeptList); + } + + /** + * 根据修改的科室信息,根据科室code判断是否存在,如果存在则更新科室名称状态信息,如果不存在则插入科室信息 + * + * @param iuPowerDeptList 修改的科室信息 + */ + private void saveOrUpdate(List iuPowerDeptList) { + Date nowDate = new Date(); + List iuDeptCodes = iuPowerDeptList.stream() + .map(PowerDept::getDeptCode) + .collect(Collectors.toList()); + List existsPowerDeptList = powerDeptMapper.findByDeptCodes(iuDeptCodes); + Map existsPowerDeptMap = existsPowerDeptList.stream().collect(Collectors.toMap(PowerDept::getDeptCode, Function.identity())); + + + List insertDeptList = new ArrayList<>(); + List updateDeptList = new ArrayList<>(); + for (PowerDept iuPowerDept : iuPowerDeptList) { + if (existsPowerDeptMap.containsKey(iuPowerDept.getDeptCode())) { + PowerDept powerDept = existsPowerDeptMap.get(iuPowerDept.getDeptCode()); + powerDept.setDeptName(iuPowerDept.getDeptName()); + powerDept.setEffective(iuPowerDept.getEffective()); + powerDept.setUpdateDate(nowDate); + powerDept.setUpdater("java-sync"); + updateDeptList.add(powerDept); + continue; + } + iuPowerDept.setDeptId(idService.getDateSeq()); + iuPowerDept.setUpdater("java-sync"); + iuPowerDept.setUpdateDate(nowDate); + iuPowerDept.setCreater("java-sync"); + iuPowerDept.setCreateDate(nowDate); + iuPowerDept.setType(1); + iuPowerDept.setSort(0); + insertDeptList.add(iuPowerDept); + } + if (Func.isNotEmpty(insertDeptList)) { + powerDeptMapper.insertBatch(insertDeptList); + } + + if (Func.isNotEmpty(updateDeptList)) { + powerDeptMapper.updateBatch(updateDeptList); + } + + } +} diff --git a/src/main/java/com/docus/server/archive/service/impl/MzsyUserInfoSyncServiceImpl.java b/src/main/java/com/docus/server/archive/service/impl/MzsyUserInfoSyncServiceImpl.java new file mode 100644 index 0000000..3f4912a --- /dev/null +++ b/src/main/java/com/docus/server/archive/service/impl/MzsyUserInfoSyncServiceImpl.java @@ -0,0 +1,138 @@ +package com.docus.server.archive.service.impl; + +import com.docus.core.util.Func; +import com.docus.infrastructure.redis.service.IdService; +import com.docus.server.archive.config.DocusProperties; +import com.docus.server.archive.constans.SyncConstant; +import com.docus.server.archive.converter.MzsyUserInfoConverter; +import com.docus.server.archive.entity.PowerUser; +import com.docus.server.archive.mapper.PowerUserMapper; +import com.docus.server.archive.service.UserInfoSyncService; +import com.docus.server.mzsy.entity.MzsyDeptInfoView; +import com.docus.server.mzsy.entity.MzsyUserInfoView; +import com.docus.server.mzsy.mapper.MzsyDeptInfoViewMapper; +import com.docus.server.mzsy.mapper.MzsyUserInfoViewMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 梅州三院用户数据同步 + * @author YongBin Wen + * @date 2024/3/27 16:25 + */ +@Service("Mzsy" + SyncConstant.USER_INFO_SYNC_SERVICE_SUFFIX) +@Slf4j +public class MzsyUserInfoSyncServiceImpl implements UserInfoSyncService { + @Resource + private PowerUserMapper powerUserMapper; + @Resource + private MzsyUserInfoViewMapper userInfoViewMapper; + @Resource + private MzsyDeptInfoViewMapper deptInfoViewMapper; + @Resource + private IdService idService; + @Resource + private DocusProperties docusProperties; + + @Override + public void fullSync() { + int size = 2000; + int pageNumber = 1; + List deptInfoViews = deptInfoViewMapper.list(); + Map deptNameIdMap = new HashMap<>(); + + while (true) { + int startRow = ((pageNumber - 1) * size) + 1; + int endRow = pageNumber * size; + List userInfoViews = userInfoViewMapper.page(startRow, endRow); + if (Func.isNotEmpty(userInfoViews)) { + // 转换保存 + List powerUsers = userInfoViews.stream() + .map(MzsyUserInfoConverter::convertUserInfo) + .collect(Collectors.toList()); + saveOrUpdate(powerUsers); + } + if (Func.isEmpty(userInfoViews) || userInfoViews.size() < size) { + break; + } + pageNumber++; + } + } + + /** + * 根据修改的用户信息,根据工号判断是否存在,如果存在则更新名字,科室 状态等信息,如果不存在则插入用户信息 + * + * @param iuPowerUserList 修改的用户信息 + */ + private void saveOrUpdate(List iuPowerUserList) { + Date nowDate = new Date(); + List iuUserNames = iuPowerUserList.stream() + .map(PowerUser::getUserName) + .collect(Collectors.toList()); + + List existsPowerUserList = powerUserMapper.findByUserNames(iuUserNames); + Map existsPowerUserMap = existsPowerUserList.stream().collect(Collectors.toMap(PowerUser::getUserName, Function.identity())); + final String delimiter = ","; + + List insertUserList = new ArrayList<>(); + List updateUserList = new ArrayList<>(); + for (PowerUser iuPowerUser : iuPowerUserList) { + if (existsPowerUserMap.containsKey(iuPowerUser.getUserName())) { + PowerUser powerUser = existsPowerUserMap.get(iuPowerUser.getUserName()); + // 如果修改的管辖科室不为空,获取原来的,加上现在的,得到最新的,下面管辖医生同理 + String powerDept = powerUser.getPowerDept(); + if (Func.isNotBlank(iuPowerUser.getPowerDept())) { + HashSet powerDepts = new HashSet<>(); + if (Func.isNotBlank(powerDept)) { + Collections.addAll(powerDepts, powerDept.split(delimiter)); + } + powerDepts.add(iuPowerUser.getPowerDept()); + powerDept = String.join(delimiter, powerDepts); + } + String powerAttending = powerUser.getPowerAttending(); + if (Func.isNotBlank(iuPowerUser.getPowerAttending())) { + HashSet powerAttendings = new HashSet<>(); + if (Func.isNotBlank(powerAttending)) { + Collections.addAll(powerAttendings, powerAttending.split(delimiter)); + } + powerAttendings.add(iuPowerUser.getPowerAttending()); + powerAttending = String.join(delimiter, powerAttendings); + } + powerUser.setName(iuPowerUser.getName()); + powerUser.setEnabled(iuPowerUser.getEnabled()); + powerUser.setEffective(iuPowerUser.getEffective()); + powerUser.setDeptId(iuPowerUser.getDeptId()); + powerUser.setPowerDept(powerDept); + powerUser.setPowerAttending(powerAttending); + powerUser.setUpdateDate(nowDate); + powerUser.setUpdater("java-sync"); + updateUserList.add(powerUser); + continue; + } + iuPowerUser.setUserId(idService.getDateSeq()); + iuPowerUser.setUpdater("java-sync"); + iuPowerUser.setUpdateDate(nowDate); + iuPowerUser.setCreater("java-sync"); + iuPowerUser.setCreateDate(nowDate); + iuPowerUser.setAccountState(0); + iuPowerUser.setIsThird(0); + iuPowerUser.setLoginFlag(0); + iuPowerUser.setPwdChange(0); + iuPowerUser.setUserPwd(docusProperties.getDefaultUserPwd()); + insertUserList.add(iuPowerUser); + } + + if (Func.isNotEmpty(insertUserList)) { + powerUserMapper.insertBatch(insertUserList); + } + + if (Func.isNotEmpty(updateUserList)) { + powerUserMapper.updateBatch(updateUserList); + } + } +} diff --git a/src/main/java/com/docus/server/mzsy/entity/MzsyDeptInfoView.java b/src/main/java/com/docus/server/mzsy/entity/MzsyDeptInfoView.java new file mode 100644 index 0000000..c74a91d --- /dev/null +++ b/src/main/java/com/docus/server/mzsy/entity/MzsyDeptInfoView.java @@ -0,0 +1,20 @@ +package com.docus.server.mzsy.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 梅州三院科室信息视图 + * @author wyb + */ +@ApiModel("梅州三院科室信息视图") +@Data +public class MzsyDeptInfoView { + @ApiModelProperty("Id号") + private String ID; + @ApiModelProperty("科室编号") + private String CODE; + @ApiModelProperty("科室名称") + private String NAME; +} diff --git a/src/main/java/com/docus/server/mzsy/entity/MzsyUserInfoView.java b/src/main/java/com/docus/server/mzsy/entity/MzsyUserInfoView.java new file mode 100644 index 0000000..2ceda8d --- /dev/null +++ b/src/main/java/com/docus/server/mzsy/entity/MzsyUserInfoView.java @@ -0,0 +1,22 @@ +package com.docus.server.mzsy.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel("梅州三院用户信息视图") +@Data +public class MzsyUserInfoView { + @ApiModelProperty("ID") + private String ID; + @ApiModelProperty("员工编号") + private String FEMPCODE; + @ApiModelProperty("员工姓名") + private String FEMPNAME; + @ApiModelProperty("所属科室") + private String FIP_DEPTID; + @ApiModelProperty("是否可用 是/否") + private String FISAVAILABLE; + @ApiModelProperty("角色 0-医生 1-护士 2-病案室 3-其他") + private String FL; +} diff --git a/src/main/java/com/docus/server/mzsy/mapper/MzsyDeptInfoViewMapper.java b/src/main/java/com/docus/server/mzsy/mapper/MzsyDeptInfoViewMapper.java new file mode 100644 index 0000000..9af1d43 --- /dev/null +++ b/src/main/java/com/docus/server/mzsy/mapper/MzsyDeptInfoViewMapper.java @@ -0,0 +1,17 @@ +package com.docus.server.mzsy.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.mzsy.entity.MzsyDeptInfoView; + +import java.util.List; + +/** + * @author YongBin Wen + * @date 2024/3/27 15:55 + */ +@DS("mzsy") +public interface MzsyDeptInfoViewMapper { + + + List list(); +} diff --git a/src/main/java/com/docus/server/mzsy/mapper/MzsyUserInfoViewMapper.java b/src/main/java/com/docus/server/mzsy/mapper/MzsyUserInfoViewMapper.java new file mode 100644 index 0000000..06eceb3 --- /dev/null +++ b/src/main/java/com/docus/server/mzsy/mapper/MzsyUserInfoViewMapper.java @@ -0,0 +1,14 @@ +package com.docus.server.mzsy.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.mzsy.entity.MzsyUserInfoView; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +@DS("mzsy") +public interface MzsyUserInfoViewMapper { + + List page(@Param("startRow") int startRow,@Param("endRow") int endRow); +} diff --git a/src/main/resources/mapper/MzsyDeptInfoViewMapper.xml b/src/main/resources/mapper/MzsyDeptInfoViewMapper.xml new file mode 100644 index 0000000..d340578 --- /dev/null +++ b/src/main/resources/mapper/MzsyDeptInfoViewMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/src/main/resources/mapper/MzsyUserInfoViewMapper.xml b/src/main/resources/mapper/MzsyUserInfoViewMapper.xml new file mode 100644 index 0000000..09a5e82 --- /dev/null +++ b/src/main/resources/mapper/MzsyUserInfoViewMapper.xml @@ -0,0 +1,26 @@ + + + + + + +