feat: 梅州三院用户信息,科室信息同步

master
wyb 11 months ago
parent db1f3b6251
commit 2e3098fb61

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

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

@ -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<MzsyDeptInfoView> deptInfoViews = deptInfoViewMapper.list();
if (Func.isEmpty(deptInfoViews)) {
return;
}
List<PowerDept> powerDeptList = deptInfoViews.stream()
.map(MzsyDeptInfoConverter::convertDeptInfo)
.collect(Collectors.toList());
saveOrUpdate(powerDeptList);
}
/**
* code
*
* @param iuPowerDeptList
*/
private void saveOrUpdate(List<PowerDept> iuPowerDeptList) {
Date nowDate = new Date();
List<String> iuDeptCodes = iuPowerDeptList.stream()
.map(PowerDept::getDeptCode)
.collect(Collectors.toList());
List<PowerDept> existsPowerDeptList = powerDeptMapper.findByDeptCodes(iuDeptCodes);
Map<String, PowerDept> existsPowerDeptMap = existsPowerDeptList.stream().collect(Collectors.toMap(PowerDept::getDeptCode, Function.identity()));
List<PowerDept> insertDeptList = new ArrayList<>();
List<PowerDept> 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);
}
}
}

@ -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<MzsyDeptInfoView> deptInfoViews = deptInfoViewMapper.list();
Map<String, String> deptNameIdMap = new HashMap<>();
while (true) {
int startRow = ((pageNumber - 1) * size) + 1;
int endRow = pageNumber * size;
List<MzsyUserInfoView> userInfoViews = userInfoViewMapper.page(startRow, endRow);
if (Func.isNotEmpty(userInfoViews)) {
// 转换保存
List<PowerUser> 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<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());
// 如果修改的管辖科室不为空,获取原来的,加上现在的,得到最新的,下面管辖医生同理
String powerDept = powerUser.getPowerDept();
if (Func.isNotBlank(iuPowerUser.getPowerDept())) {
HashSet<String> 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<String> 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);
}
}
}

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

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

@ -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<MzsyDeptInfoView> list();
}

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

@ -0,0 +1,11 @@
<?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.mzsy.mapper.MzsyDeptInfoViewMapper">
<select id="list" resultType="com.docus.server.mzsy.entity.MzsyDeptInfoView">
SELECT ID,CODE,NAME FROM dbo.ZD_DEPT_KS
</select>
</mapper>

@ -0,0 +1,26 @@
<?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.mzsy.mapper.MzsyUserInfoViewMapper">
<select id="page" resultType="com.docus.server.mzsy.entity.MzsyUserInfoView">
SELECT paging.ID,
paging.FEMPCODE,
paging.FEMPNAME,
paging.FIP_DEPTID,
paging.FISAVAILABLE,
paging.FL
FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID) AS RowNumber,
ID,
FEMPCODE,
FEMPNAME,
FIP_DEPTID,
FISAVAILABLE,
FL
FROM dbo.ZD_EMR_EMPLOYEE
) AS paging
WHERE paging.RowNumber BETWEEN ${startRow} AND ${endRow}
</select>
</mapper>
Loading…
Cancel
Save