From 9dc550542246d2935f9c2cf7a8a4cce8f8ccbebd Mon Sep 17 00:00:00 2001 From: czx <28353131@qq.com> Date: Thu, 17 Dec 2020 16:13:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=90=8C=E6=AD=A5=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E4=B8=89=E4=B8=AA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/fantang/domain/FtOrderDao.java | 4 ++ .../fantang/mapper/FtNotifyDaoMapper.java | 2 + .../fantang/mapper/FtPatientDaoMapper.java | 14 ++++- .../mapper/FtSyncConflictDaoMapper.java | 9 ++++ .../service/impl/FtOrderDaoServiceImpl.java | 7 ++- .../system/fantang/vo/ftSyncConflictVo.java | 52 +++++++++++++++++++ .../service/impl/SyncPatientServiceImpl.java | 48 +++++++++++++---- 7 files changed, 124 insertions(+), 12 deletions(-) create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtSyncConflictDaoMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/fantang/vo/ftSyncConflictVo.java diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/domain/FtOrderDao.java b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/domain/FtOrderDao.java index b04784ced..aed3a5a23 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/domain/FtOrderDao.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/domain/FtOrderDao.java @@ -1,5 +1,6 @@ package com.ruoyi.system.fantang.domain; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -43,6 +44,9 @@ public class FtOrderDao implements Serializable { @Excel(name = "订单类型") private Integer orderType; + @TableField(exist = false) + private String orderTypeString; + /** * 员工 id */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtNotifyDaoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtNotifyDaoMapper.java index 1b551750f..636a26d23 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtNotifyDaoMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtNotifyDaoMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.system.fantang.mapper; import com.ruoyi.system.fantang.domain.FtNotifyDao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.springframework.stereotype.Repository; /** * 系统信息Mapper接口 @@ -9,6 +10,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @author ft * @date 2020-12-17 */ +@Repository public interface FtNotifyDaoMapper extends BaseMapper { } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtPatientDaoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtPatientDaoMapper.java index 38d15d467..ed3d0324f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtPatientDaoMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtPatientDaoMapper.java @@ -2,10 +2,14 @@ package com.ruoyi.system.fantang.mapper; import com.ruoyi.system.fantang.domain.FtPatientDao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.fantang.vo.ftSyncConflictVo; import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.springframework.stereotype.Repository; +import java.util.List; + /** * 病人管理Mapper接口 * @@ -17,10 +21,16 @@ public interface FtPatientDaoMapper extends BaseMapper { @Update("update ft_patient set sync_flag = 0 where off_flag = 0") public int initForSync(); + @Update("update ft_patient a, ft_sync b set a.name= b.name, a.bed_id = b.bed_id, a.sync_flag = 1 where a.hospital_id = b.hospital_id and a.name = b.name and a.bed_id = b.bed_id and a.depart_name = b.depart_name") + public int syncEqual(); + + @Update("update ft_patient a, ft_sync b set a.name= b.name, a.bed_id = b.bed_id, a.sync_flag = 1 where a.hospital_id = b.hospital_id and a.name = b.name") + int syncEqualForHospitalAndName(); + @Update("update ft_patient a, ft_sync b set a.name= b.name, a.bed_id = b.bed_id, a.sync_flag = 1 where a.hospital_id = b.hospital_id") public int syncEqualHospitalId(); - @Insert("Insert into ft_patient (name, bed_id, hospital_id, sync_flag) select name, bed_id, hospital_id, 2 from ft_sync where hospital_id not in (select hospital_id from ft_patient)") + @Insert("Insert into ft_patient (hospital_id, name, depart_id, bed_id, sync_flag) select a.hospital_id, a.name, c.depart_id, a.bed_id,2 from ft_sync a LEFT JOIN ft_depart c on a.depart_name = c.depart_name LEFT JOIN ft_patient b on a.`name` = b.`name` and c.depart_id = b.depart_id where a.hospital_id not in (select hospital_id from ft_patient d)") public int syncNewHospitalId(); @Update("update ft_patient set off_flag = 1 where sync_flag = 0") @@ -30,4 +40,6 @@ public interface FtPatientDaoMapper extends BaseMapper { public int updateDepartIDToNewPatient(); + @Select("select a.hospital_id, a.name, a.depart_name, a.bed_id, b.depart_id, c.hospital_id as old_hospital_id, c.name as old_name, a.depart_name as old_depart_name, c.bed_id as old_bed_id, c.depart_id as old_depart_id from ft_sync a LEFT JOIN ft_depart b on a.depart_name = b.depart_name LEFT JOIN ft_patient c on a.hospital_id = c.hospital_id where b.depart_id = c.depart_id and a.bed_id = c.bed_id and a.name != c.name") + List syncConflictOnlyHospitalEqual(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtSyncConflictDaoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtSyncConflictDaoMapper.java new file mode 100644 index 000000000..f5ce62581 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/mapper/FtSyncConflictDaoMapper.java @@ -0,0 +1,9 @@ +package com.ruoyi.system.fantang.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.system.fantang.vo.ftSyncConflictVo; +import org.springframework.stereotype.Repository; + +@Repository +public interface FtSyncConflictDaoMapper extends BaseMapper { +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/service/impl/FtOrderDaoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/service/impl/FtOrderDaoServiceImpl.java index faef576fe..6ee885971 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/service/impl/FtOrderDaoServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/service/impl/FtOrderDaoServiceImpl.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.List; /** * 订单管理Service业务层处理 @@ -32,7 +33,11 @@ public class FtOrderDaoServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); wrapper.eq("staff_id", staffId); wrapper.between("order_date", DateUtil.beginOfDay(new Date()), DateUtil.endOfDay(new Date())); - return AjaxResult.success(this.baseMapper.selectList(wrapper)); + List daos = this.baseMapper.selectList(wrapper); + for (FtOrderDao dao : daos) { + dao.setOrderTypeString(dao.getOrderType().toString()); + } + return AjaxResult.success(daos); } @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/fantang/vo/ftSyncConflictVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/vo/ftSyncConflictVo.java new file mode 100644 index 000000000..601fde361 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/fantang/vo/ftSyncConflictVo.java @@ -0,0 +1,52 @@ +package com.ruoyi.system.fantang.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.system.fantang.domain.FtSyncPatientDao; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 远程病患数据冲突数据实体类 + * + * @author 陈智兴 + * @date 2020-12-17 + */ +@Data +@ToString +@EqualsAndHashCode +@NoArgsConstructor +@Accessors(chain = true) +public class ftSyncConflictVo extends FtSyncPatientDao implements Serializable { + +private static final long serialVersionUID=1L; + + + + /** 本地住院号 */ + @TableField(value = "old_hospital_id") + private String oldHospitalid; + + /** 本地姓名 */ + @TableField(value = "old_name") + private String oldName; + + // 本地科室名称 + @TableField("old_depart_name") + private String oldDepartName; + + // 本地床号 + @TableField("old_bed_id") + private String oldDedId; + + @TableField("depart_id") + private String departId; + + @TableField("old_depart_id") + private String oldDepartId; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SyncPatientServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SyncPatientServiceImpl.java index cc912e567..0f19a3f78 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SyncPatientServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SyncPatientServiceImpl.java @@ -4,12 +4,10 @@ import com.ruoyi.common.annotation.DataSource; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.system.fantang.domain.FtRemotePatientDao; import com.ruoyi.system.fantang.domain.FtSyncLogDao; -import com.ruoyi.system.fantang.mapper.FtPatientDaoMapper; -import com.ruoyi.system.fantang.mapper.FtSyncLogDaoMapper; -import com.ruoyi.system.fantang.mapper.FtSyncPatientDaoMapper; +import com.ruoyi.system.fantang.mapper.*; +import com.ruoyi.system.fantang.vo.ftSyncConflictVo; import com.ruoyi.system.service.ISyncPatientService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.annotation.Transient; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,10 +26,26 @@ public class SyncPatientServiceImpl implements ISyncPatientService { @Autowired private FtSyncLogDaoMapper syncLogDaoMapper; - // 从远程数据源插上病患数据 + @Autowired + private FtNotifyDaoMapper notifyDaoMapper; + + @Autowired + private FtSyncConflictDaoMapper syncConflictDaoMapper; + + /** + * 从远程数据源插上病患数据 + * 业务逻辑: + * 1、本地同步表将标志位置 0 等待同步状态; + * 2、 + * + * @param remotePatientDaoList + * @return + */ @Transactional @Override public Integer insertToLocalSync(List remotePatientDaoList) { + StringBuilder syncMessage = new StringBuilder(); + syncMessage.append("同步信息:"); // 清空本地中间表数据,准备接收同步数据 syncPatientDaoMapper.delete(null); @@ -42,13 +56,27 @@ public class SyncPatientServiceImpl implements ISyncPatientService { // 初始化本地病患表准备同步,将标志位置“0” int ret = patientDaoMapper.initForSync(); + syncMessage.append(String.format("本地初始化记录:%d 条",ret)); - // 更新住院号相同的记录,并标注flag=1 - int syncCount = patientDaoMapper.syncEqualHospitalId(); - // 从中间表添加新增病患数据,并标注flag=2 - ret = patientDaoMapper.syncNewHospitalId(); - System.out.println(ret); + // 同步逻辑1:更新住院号、科室、床号、姓名全部相同的记录,并标注flag=1 + int syncCount = patientDaoMapper.syncEqual(); + syncMessage.append(String.format("更新逻辑1: %d 条", syncCount)); + + // 同步逻辑2:更新住院号、姓名相同的记录,并标注flag=1 + syncCount = patientDaoMapper.syncEqualForHospitalAndName(); + syncMessage.append(String.format("更新逻辑2: %d 条", syncCount)); + + // 同步逻辑3:新增住院号、科室、床号相同的记录,作为新病患同步,并标注flag=2 + syncCount = patientDaoMapper.syncNewHospitalId(); + syncMessage.append(String.format("更新逻辑3: %d 条", syncCount)); + + // 冲突逻辑1:住院号相同、科室、床号、姓名都不相同的记录,作为冲突数据,并标注flag=3 + List syncPatientVos = patientDaoMapper.syncConflictOnlyHospitalEqual(); + syncMessage.append(String.format("冲突逻辑1: %d 条", syncPatientVos.size())); + for (ftSyncConflictVo vo : syncPatientVos) { + syncConflictDaoMapper.insert(vo); + } // 将没有同步的病患数据设置为出院状态, off_flag=1 patientDaoMapper.updateOffHospitalFlag();