feat:英德中医院,用户数据同步

master
wyb 10 months ago
parent 8caf37d681
commit f56298d979

@ -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;
}
}

@ -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<YdZyyUserInfoView> userInfoViews = userInfoViewMapper.page(startRow, endRow);
if (Func.isNotEmpty(userInfoViews)) {
// 转换保存
List<PowerUser> 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<PowerUser> iuPowerUserList) {
Date nowDate = new Date();
List<String> iuUserNames = iuPowerUserList.stream()
.map(PowerUser::getUserName)
.collect(Collectors.toList());
List<PowerUser> existsPowerUserList = powerUserMapper.findByUserNames(iuUserNames);
Map<String, PowerUser> existsPowerUserMap = existsPowerUserList.stream().collect(Collectors.toMap(PowerUser::getUserName, Function.identity()));
final String delimiter = ",";
List<PowerUser> insertUserList = new ArrayList<>();
List<PowerUser> 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);
}
}
}

@ -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;
}

@ -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<YdZyyUserInfoView> page(@Param("startRow") int startRow, @Param("endRow") int endRow);
}

@ -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:
# 采集任务补偿地址

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.docus.server.ydzyy.mapper.YdZyyUserInfoViewMapper">
<select id="page" resultType="com.docus.server.ydzyy.entity.YdZyyUserInfoView">
SELECT code, name, roleName, isActive, password
FROM (
SELECT userView.*, rownum as rn
FROM (
SELECT code, name, roleName, isActive, password
FROM his_user.PL_User
GROUP BY code, name, roleName, isActive, password
) userView
) paging
WHERE rn BETWEEN ${startRow} AND ${endRow}
</select>
</mapper>
Loading…
Cancel
Save