diff --git a/ruisi_java/ruisi-cc-common/src/main/java/com/ccsens/common/core/domain/entity/SysDept.java b/ruisi_java/ruisi-cc-common/src/main/java/com/ccsens/common/core/domain/entity/SysDept.java index ea9a2b5..31c8fca 100644 --- a/ruisi_java/ruisi-cc-common/src/main/java/com/ccsens/common/core/domain/entity/SysDept.java +++ b/ruisi_java/ruisi-cc-common/src/main/java/com/ccsens/common/core/domain/entity/SysDept.java @@ -74,6 +74,8 @@ public class SysDept extends BaseEntity { */ private String parentName; + private String deptCode; + /** * 子部门 */ @@ -181,6 +183,14 @@ public class SysDept extends BaseEntity { this.children = children; } + public String getDeptCode() { + return deptCode; + } + + public void setDeptCode(String deptCode) { + this.deptCode = deptCode; + } + @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) diff --git a/ruisi_java/ruisi-system/src/main/java/com/ccsens/system/service/impl/DockServiceImpl.java b/ruisi_java/ruisi-system/src/main/java/com/ccsens/system/service/impl/DockServiceImpl.java index c4ef038..739bd84 100644 --- a/ruisi_java/ruisi-system/src/main/java/com/ccsens/system/service/impl/DockServiceImpl.java +++ b/ruisi_java/ruisi-system/src/main/java/com/ccsens/system/service/impl/DockServiceImpl.java @@ -8,8 +8,11 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.pinyin.PinyinUtil; import com.ccsens.common.annotation.DataSource; import com.ccsens.common.constant.ErrorConstant; +import com.ccsens.common.core.domain.entity.SysDept; +import com.ccsens.common.core.domain.entity.SysUser; import com.ccsens.common.enums.DataSourceType; import com.ccsens.common.exception.base.BaseException; +import com.ccsens.common.utils.SecurityUtils; import com.ccsens.system.domain.dto.DockDto; import com.ccsens.system.domain.po.*; import com.ccsens.system.persist.dao.DockDao; @@ -17,11 +20,13 @@ import com.ccsens.system.persist.mapper.*; import com.ccsens.system.service.DmsDataValueService; import com.ccsens.system.service.DockService; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; @@ -62,6 +67,13 @@ public class DockServiceImpl implements DockService { private PmsPatientDiagnosisMapper pmsPatientDiagnosisMapper; @Resource private PmsPatientParentIllnessMapper pmsPatientParentIllnessMapper; + @Resource + private SysDeptMapper sysDeptMapper; + @Resource + private SysUserMapper sysUserMapper; + + @Value("${hospitalId:}") + private Long hospitalId; @Override @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) @@ -289,32 +301,127 @@ public class DockServiceImpl implements DockService { public void syncDeptAndUserData() { //部门信息 try { - syncUmsDeptMaster(); - syncUmsDeptSlave(); + List sysDepts = syncUmsDeptSlave(); + syncUmsDeptMaster(sysDepts); }catch (Exception e){ - log.error("用药信息同步失败",e); + log.error("部门信息同步失败",e); + } + //用户信息 + try { + List sysUsers = syncUmsUserSlave(); + syncUmsUserMaster(sysUsers); + }catch (Exception e){ + log.error("用户信息同步失败",e); } } + @DataSource(value = DataSourceType.MASTER) @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) - public void syncUmsDeptMaster() { + public void syncUmsUserMaster(List sysUsers) { + if(CollUtil.isNotEmpty(sysUsers)){ + for (SysUser sysUser : sysUsers) { + //根据code查找用户 + SysUser user = new SysUser(); + user.setEmplCode(sysUser.getEmplCode()); + List users = sysUserMapper.selectUserList(user); + if (CollUtil.isEmpty(users)) { + sysUserMapper.insertUser(sysUser); + } + } + } + } + + @DataSource(value = DataSourceType.SLAVE) + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public List syncUmsUserSlave() { + List returnUsers = new ArrayList<>(); + DockEmplExample dockEmplExample = new DockEmplExample(); + dockEmplExample.createCriteria().andSyncEqualTo("0").andDelFlagEqualTo("0"); + List dockEmpls = dockEmplMapper.selectByExample(dockEmplExample); + if (CollUtil.isEmpty(dockEmpls)) { + return returnUsers; + } + for (DockEmpl dockEmpl : dockEmpls) { + //根据code查找部门信息 + SysDept sysDept = new SysDept(); + sysDept.setDeptCode(dockEmpl.getDeptCode()); + List sysDepts = sysDeptMapper.selectDeptList(sysDept); + if (CollUtil.isEmpty(sysDepts)) { + continue; + }else { + sysDept = sysDepts.get(0); + } + SysUser sysUser = new SysUser(); + sysUser.setEmplCode(dockEmpl.getEmplCode()); + List sysUsers = sysUserMapper.selectUserList(sysUser); + if (CollUtil.isEmpty(sysUsers)) { + sysUser.setDeptId(sysDept.getDeptId()); + sysUser.setUserName(dockEmpl.getEmplCode()); + sysUser.setNickName(dockEmpl.getEmplName()); + sysUser.setEmplCode(dockEmpl.getEmplCode()); + sysUser.setPassword(SecurityUtils.encryptPassword("hnzxyjhyy")); + sysUserMapper.insertUser(sysUser); + returnUsers.add(sysUser); + } + } + return returnUsers; + } + + @DataSource(value = DataSourceType.SLAVE) + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public List syncUmsDeptSlave() { + List returnDepts = new ArrayList<>(); //查找同步表中的部门信息 DockDeptExample dockDeptExample = new DockDeptExample(); dockDeptExample.createCriteria().andSyncEqualTo("0").andDelFlagEqualTo("0"); List dockDepts = dockDeptMapper.selectByExample(dockDeptExample); if (CollUtil.isEmpty(dockDepts)) { - return; + return returnDepts; } for (DockDept dockDept : dockDepts) { - - + //根据code查找系统的部门信息 + SysDept sysDept = new SysDept(); + sysDept.setDeptCode(dockDept.getDeptCode()); + List sysDepts = sysDeptMapper.selectDeptList(sysDept); + if (CollUtil.isEmpty(sysDepts)) { + sysDept.setParentId(hospitalId); + sysDept.setAncestors("0," + hospitalId); + sysDept.setDeptName(dockDept.getDeptName()); + sysDept.setDeptCode(dockDept.getDeptCode()); + sysDeptMapper.insertDept(sysDept); + returnDepts.add(sysDept); + }else { + sysDept = sysDepts.get(0); + sysDept.setParentId(hospitalId); + sysDept.setAncestors("0," + hospitalId); + sysDept.setDeptName(dockDept.getDeptName()); + sysDept.setDeptCode(dockDept.getDeptCode()); + sysDeptMapper.updateDept(sysDept); + returnDepts.add(sysDept); + } } + return returnDepts; } - @DataSource(value = DataSourceType.SLAVE) - private void syncUmsDeptSlave() { - + @DataSource(value = DataSourceType.MASTER) + @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) + public void syncUmsDeptMaster(List sysDepts) { + if(CollUtil.isNotEmpty(sysDepts)){ + sysDepts.forEach(sysDept -> { + //根据code查找系统的部门信息 + SysDept dept = new SysDept(); + dept.setDeptCode(sysDept.getDeptCode()); + List depts = sysDeptMapper.selectDeptList(dept); + if (CollUtil.isEmpty(depts)) { + sysDeptMapper.insertDept(sysDept); + }else { + SysDept sysDept1 = depts.get(0); + sysDept.setDeptId(sysDept1.getDeptId()); + sysDeptMapper.updateDept(sysDept); + } + }); + } } @@ -348,6 +455,9 @@ public class DockServiceImpl implements DockService { disposePmsPatient(dockPatientBaseInfo, pmsPatient); pmsPatientMapper.insertSelective(pmsPatient); } + //修改同步表数据的状态 + dockPatientBaseInfo.setSync("1"); + dockPatientBaseInfoMapper.updateByPrimaryKeySelective(dockPatientBaseInfo); } } @@ -361,6 +471,9 @@ public class DockServiceImpl implements DockService { } for (DockPatientVisitInfo dockPatientVisitInfo : dockPatientVisitInfos) { savePatientBady(dockPatientVisitInfo); + //修改同步表数据的状态 + dockPatientVisitInfo.setSync("1"); + dockPatientVisitInfoMapper.updateByPrimaryKeySelective(dockPatientVisitInfo); } } @@ -458,6 +571,8 @@ public class DockServiceImpl implements DockService { pmsPatientDiagnosis.setDiagnosisName(dockPatientDiagnosis.getDiagnosisName()); pmsPatientDiagnosis.setDiagnosisDate(DateUtil.format(dockPatientDiagnosis.getDiagnosisDate(), "yyyy-MM-dd HH:mm:ss")); pmsPatientDiagnosisMapper.insertSelective(pmsPatientDiagnosis); + dockPatientDiagnosis.setSync("1"); + dockPatientDiagnosisMapper.updateByPrimaryKeySelective(dockPatientDiagnosis); } } } @@ -510,6 +625,9 @@ public class DockServiceImpl implements DockService { pmsPatientParentIllness.setUnit(dockPatientMedicationInfo.getUnit()); pmsPatientParentIllness.setFrequency(dockPatientMedicationInfo.getFrequency()); pmsPatientParentIllnessMapper.insertSelective(pmsPatientParentIllness); + //修改同步表数据的状态 + dockPatientMedicationInfo.setSync("1"); + dockPatientMedicationInfoMapper.updateByPrimaryKeySelective(dockPatientMedicationInfo); } } } diff --git a/ruisi_java/ruisi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruisi_java/ruisi-system/src/main/resources/mapper/system/SysDeptMapper.xml index aa8bf4e..09992f2 100644 --- a/ruisi_java/ruisi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruisi_java/ruisi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -42,6 +42,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND status = #{status} + + AND dept_code = #{deptCode} + ${params.dataScope} order by d.parent_id, d.order_num diff --git a/ruisi_java/ruisi-web-client/src/main/java/com/ccsens/client/controller/scheduled/SyncHospitalData.java b/ruisi_java/ruisi-web-client/src/main/java/com/ccsens/client/controller/scheduled/SyncHospitalData.java index 63574c3..841b771 100644 --- a/ruisi_java/ruisi-web-client/src/main/java/com/ccsens/client/controller/scheduled/SyncHospitalData.java +++ b/ruisi_java/ruisi-web-client/src/main/java/com/ccsens/client/controller/scheduled/SyncHospitalData.java @@ -24,4 +24,9 @@ public class SyncHospitalData { dockService.syncHospitalData(); } + @Scheduled(cron = "0 */3 * * * ?") + public void syncDeptAndUserData() { + dockService.syncDeptAndUserData(); + } + } diff --git a/ruisi_java/ruisi-web-client/src/main/resources/application-dev.yml b/ruisi_java/ruisi-web-client/src/main/resources/application-dev.yml index fe271b3..6d71d66 100644 --- a/ruisi_java/ruisi-web-client/src/main/resources/application-dev.yml +++ b/ruisi_java/ruisi-web-client/src/main/resources/application-dev.yml @@ -123,4 +123,6 @@ informed: #clientVersion: v1.1.0 #clientVersion: v1.8.1.0 #clientVersion: v1.8.2.0 -clientVersion: v1.8.3.0 \ No newline at end of file +clientVersion: v1.8.3.0 + +hospitalId: 174 \ No newline at end of file diff --git a/ruisi_java/ruisi-web-client/src/main/resources/application-prod.yml b/ruisi_java/ruisi-web-client/src/main/resources/application-prod.yml index 6b6c4df..3dbe88a 100644 --- a/ruisi_java/ruisi-web-client/src/main/resources/application-prod.yml +++ b/ruisi_java/ruisi-web-client/src/main/resources/application-prod.yml @@ -128,4 +128,6 @@ informed: #clientVersion: v1.6.8 #clientVersion: v1.8.1.0 #clientVersion: v1.8.2.0 -clientVersion: v1.8.3.0 \ No newline at end of file +clientVersion: v1.8.3.0 + +hospitalId: 174 \ No newline at end of file