diff --git a/src/main/java/com/docus/server/archive/converter/YdZyyUserInfoConverter.java b/src/main/java/com/docus/server/archive/converter/YdZyyUserInfoConverter.java new file mode 100644 index 0000000..8ec710e --- /dev/null +++ b/src/main/java/com/docus/server/archive/converter/YdZyyUserInfoConverter.java @@ -0,0 +1,43 @@ +package com.docus.server.archive.converter; + +import com.docus.server.archive.entity.PowerUser; +import com.docus.server.ydzyy.entity.YdZyyUserInfoView; + + +/** + * 梅州三院用户信息转换器 + * + * @author wyb + */ +public class YdZyyUserInfoConverter { + public static PowerUser convertUserInfo(YdZyyUserInfoView view) { + if (view == null) { + return null; + } + Long roleId = 0L; + // 角色:0医生,1护士 + String role = view.getRoleName(); + if ("0".equals(role)) { + roleId = 1L; + } + if ("1".equals(role)) { + roleId = 2L; + } + + Integer enable = Integer.valueOf(view.getIsActive()); + ; + PowerUser user = new PowerUser(); + user.setUserName(view.getCode()); + user.setName(view.getName()); + user.setDeptId(""); + user.setEffective(enable); + user.setEnabled(enable); + user.setRoleId(roleId); + user.setPowerDept(""); + // 医生默认管辖医生为自己 + if (roleId.equals(1L)) { + user.setPowerAttending(user.getUserName()); + } + return user; + } +} diff --git a/src/main/java/com/docus/server/archive/service/impl/YdZyyUserInfoSyncServiceImpl.java b/src/main/java/com/docus/server/archive/service/impl/YdZyyUserInfoSyncServiceImpl.java new file mode 100644 index 0000000..6bc376a --- /dev/null +++ b/src/main/java/com/docus/server/archive/service/impl/YdZyyUserInfoSyncServiceImpl.java @@ -0,0 +1,113 @@ +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.YdZyyUserInfoConverter; +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.ydzyy.entity.YdZyyUserInfoView; +import com.docus.server.ydzyy.mapper.YdZyyUserInfoViewMapper; +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("YdZyy" + SyncConstant.USER_INFO_SYNC_SERVICE_SUFFIX) +@Slf4j +public class YdZyyUserInfoSyncServiceImpl implements UserInfoSyncService { + @Resource + private PowerUserMapper powerUserMapper; + @Resource + private YdZyyUserInfoViewMapper userInfoViewMapper; + + @Resource + private IdService idService; + @Resource + private DocusProperties docusProperties; + + @Override + public void fullSync() { + int size = 2000; + int pageNumber = 1; + + 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(YdZyyUserInfoConverter::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()); + powerUser.setName(iuPowerUser.getName()); + powerUser.setEnabled(iuPowerUser.getEnabled()); + powerUser.setEffective(iuPowerUser.getEffective()); + 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/ydzyy/entity/YdZyyUserInfoView.java b/src/main/java/com/docus/server/ydzyy/entity/YdZyyUserInfoView.java new file mode 100644 index 0000000..b481b7b --- /dev/null +++ b/src/main/java/com/docus/server/ydzyy/entity/YdZyyUserInfoView.java @@ -0,0 +1,21 @@ +package com.docus.server.ydzyy.entity; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@ApiModel("英德中医院用户信息视图") +@Data +public class YdZyyUserInfoView { + @ApiModelProperty("用户工号") + private String code; + @ApiModelProperty("用户姓名") + private String name; + @ApiModelProperty("登录密码(密文EMR系统)") + private String password; + @ApiModelProperty("启用标记(0禁用,1启用)(EMR系统删除或禁用用户时,同步") + private String isActive; + @ApiModelProperty("角色:0医生,1护士") + private String roleName; + +} diff --git a/src/main/java/com/docus/server/ydzyy/mapper/YdZyyUserInfoViewMapper.java b/src/main/java/com/docus/server/ydzyy/mapper/YdZyyUserInfoViewMapper.java new file mode 100644 index 0000000..600d4f1 --- /dev/null +++ b/src/main/java/com/docus/server/ydzyy/mapper/YdZyyUserInfoViewMapper.java @@ -0,0 +1,18 @@ +package com.docus.server.ydzyy.mapper; + +import com.baomidou.dynamic.datasource.annotation.DS; +import com.docus.server.ydzyy.entity.YdZyyUserInfoView; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + + +@DS("ydzyy") +public interface YdZyyUserInfoViewMapper { + /** + * @param startRow 起始1 + * @param endRow 结束 + * @return 视图数据 + */ + List page(@Param("startRow") int startRow, @Param("endRow") int endRow); +} diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 1ad2521..8e65289 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -81,6 +81,28 @@ spring: # test-on-borrow: false # test-on-return: false # validation-query: select 1 from dual + ydzyy: + url: jdbc:oracle:thin:@//10.10.100.13:1521/HISDB + username: WZHPL + password: 123456 + driver-class-name: oracle.jdbc.driver.OracleDriver + type: com.alibaba.druid.pool.DruidDataSource + # 初始化配置 + initial-size: 1 + # 最小连接数 + min-idle: 1 + # 最大连接数 + max-active: 5 + # 获取连接超 时时间 + max-wait: 5000 + # 连接有效性检测时间 + time-between-eviction-runs-millis: 90000 + # 最大空闲时间 + min-evictable-idle-time-millis: 1800000 + test-while-idle: true + test-on-borrow: false + test-on-return: false + validation-query: select 1 from dual redis: @@ -101,7 +123,7 @@ spring: docus: - sync-service-prefix: Mzsy + sync-service-prefix: YdZyy default-user-pwd: fd29cd53ec12616e5f36b77d4afffbff url: # 采集任务补偿地址 diff --git a/src/main/resources/mapper/YdZyyUserInfoViewMapper.xml b/src/main/resources/mapper/YdZyyUserInfoViewMapper.xml new file mode 100644 index 0000000..f6f54b5 --- /dev/null +++ b/src/main/resources/mapper/YdZyyUserInfoViewMapper.xml @@ -0,0 +1,20 @@ + + + + + + +