package com.ynxbd.common.dao; import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.PatientLink; import com.ynxbd.common.bean.enums.HCardTypeEnum; import com.ynxbd.common.config.db.DataBase; import com.ynxbd.common.helper.common.CodeHelper; import org.apache.commons.lang3.ObjectUtils; import java.util.ArrayList; import java.util.List; /** * 患者表操作 * * @Author wsq * @Date 2020/9/25 11:08 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ public class PatientDao { /** * 根据openid查询绑定健康卡的用户 * * @param openid openid * @return 患者集合 */ public List selectHealthCardListByOpenid(String openid) { String sql = "select * from patientBase where openid= ? and deletedState = 0 and healthCardId is not null"; return DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openid); }); } /** * 根据openid查询患者 * * @param openid openid * @return 患者列表 */ public List selectListByToken(String openid, String unionId) { if (ObjectUtils.isEmpty(unionId)) { return selectListByOpenid(openid); } String sql = "select * from patientBase where openid = ? and deletedState = 0 order by isDefault desc"; return DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openid); }); } /** * 根据openid查询患者 * * @param openid openid * @return 患者列表 */ public List selectListByOpenid(String openid) { String sql = "select * from patientBase where openid = ? and deletedState = 0 order by isDefault desc"; return DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openid); }); } /** * 根据openid查询患者 部分信息 用作外部对接 * * @param openid openid * @return 患者列表 */ public List selectPatientsByOpenid(String openid) { String sql = "select OpenID,PatientID,Name,Sex,IDCardNo,Age,Birthday,Address,Nation from patientBase where openid = ? and deletedState = 0 order by isDefault desc"; return DataBase.select(sql, PatientLink.class, ps -> { ps.setString(1, openid); }); } /** * 根据openid查询患者 部分信息 用作外部对接 不回传openId * * @param openid * @return */ public List selectPatientsByEncOpenid(String openid) { String sql = "select PatientID,Name,Sex,IDCardNo,Age,Birthday,Address,Nation from patientBase where openid = ? and deletedState = 0 order by isDefault desc"; return DataBase.select(sql, PatientLink.class, ps -> { ps.setString(1, openid); }); } /** * 根据身份证查询患者 * * @param openid openid * @param idCardNo 身份证号 * @return 患者信息 */ public Patient selectByIdCardNo(String openid, String idCardNo) { String sql = "select * from patientBase where openid= ? and idCardNo= ?"; List resultList = DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openid); ps.setString(2, idCardNo); }); return !resultList.isEmpty() ? resultList.get(0) : null; } /** * 根据身份证查询患者 * * @param openid openid * @param patientId 患者ID * @return 患者信息 */ public boolean hasPatient(String openid, String patientId) { return selectByOpenidAndPatientId(openid, patientId) != null; } /** * 查询患者本人 * * @param openid openid * @return 患者信息 */ public Patient selectMyself(String openid) { String sql = "select * from patientBase where openid= ? and isMyself = 1"; List resultList = DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openid); }); return !resultList.isEmpty() ? resultList.get(0) : null; } /** * 根据身份证查询患者 * * @param openid openid * @param patientId 患者ID * @return 患者信息 */ public Patient selectByOpenidAndPatientId(String openid, String patientId) { String sql = "select * from patientBase where openid= ? and patientId= ? and deletedState = 0"; List dataList = DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openid); ps.setString(2, patientId); }); return !dataList.isEmpty() ? dataList.get(0) : null; } /** * 查询患者本人 * * @param openId openId * @return 患者信息 */ public List selectPatientsByOpenId(String openId) { String sql = "select patientId, name, sex, birthday, idCardNo, tel from patientBase where openId= ? and deletedState = 0 order by isDefault desc, id asc"; return DataBase.select(sql, Patient.class, ps -> { ps.setString(1, openId); }); } /** * 健康卡解绑 * * @param openid openid * @param patientId 身份证号 * @return 是否成功 */ public boolean removePatient(String openid, String patientId) { String sql = "update patientBase set updateTime=now(), age=null, deletedState=1 where openid=? and patientId=?"; return DataBase.update(sql, ps -> { ps.setString(1, openid); ps.setString(2, patientId); }) > 0; } /** * 更新用户信息 * * @param bindInfo 绑定信息 * @return 是否成功 */ public boolean updateInfo(Patient bindInfo) { String sql = "update patientBase set deletedState=0, healthCardId=?, name=?, nation=?, tel=?, address=?, uuid=?, areaCode=?, areaAddress=?, patientId=?, " + " uniqueId=if(uniqueId is null or uniqueId = '', ?, uniqueId), " + " gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId) " + " where openid=? and idCardNo=?"; return DataBase.update(sql, ps -> { ps.setString(1, bindInfo.getHealthCardId()); ps.setString(2, bindInfo.getName()); ps.setString(3, bindInfo.getNation()); ps.setString(4, bindInfo.getTel()); ps.setString(5, bindInfo.getAddress()); ps.setString(6, bindInfo.getUuid()); ps.setString(7, bindInfo.getAreaCode()); ps.setString(8, bindInfo.getAreaAddress()); ps.setString(9, bindInfo.getPatientId()); ps.setString(10, CodeHelper.get32UUID()); ps.setString(11, bindInfo.getGmcUniqueId()); // 条件 ps.setString(12, bindInfo.getOpenid()); ps.setString(13, bindInfo.getIdCardNo()); }) > 0; } /** * [患者]绑定身份证(成人) * */ public boolean insertCard(boolean isMyself, Patient bindData) { bindData.clearGuardianData(); return insert(isMyself, bindData); } /** * [患者]绑定身份证 * * @param isMyself 是否为自己 * @param bindData 绑定数据 * @return bool */ public boolean insert(boolean isMyself, Patient bindData) { String sql = "insert into patientBase(bindDate, openid, patientId, hisTransNo, name, sex, idCardNo, tel, birthday, nation, healthCardId, age, uuid, fatherName, fatherTel, fatherIDCardNo, motherName, motherTel, motherIDCardNo, address, areaCode, areaAddress, isMyself, cardType, unionId, hospAppId, gmcUniqueId, uniqueId) " + " values(now(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; HCardTypeEnum cardTypeEnum = bindData.getCardTypeEnum(); return DataBase.insert(sql, ps -> { ps.setString(1, bindData.getOpenid()); ps.setString(2, bindData.getPatientId()); ps.setString(3, bindData.getHisTransNo()); ps.setString(4, bindData.getName()); ps.setString(5, bindData.getSex()); ps.setString(6, bindData.getIdCardNo()); ps.setString(7, bindData.getTel()); ps.setString(8, bindData.getBirthday()); ps.setString(9, bindData.getNation()); ps.setString(10, bindData.getHealthCardId()); ps.setString(11, bindData.getAge()); ps.setString(12, bindData.getUuid()); // ps.setString(13, bindData.getFatherName()); ps.setString(14, bindData.getFatherTel()); ps.setString(15, bindData.getFatherIdCardNo()); ps.setString(16, bindData.getMotherName()); ps.setString(17, bindData.getMotherTel()); ps.setString(18, bindData.getMotherIdCardNo()); ps.setString(19, bindData.getAddress()); ps.setString(20, bindData.getAreaCode()); ps.setString(21, bindData.getAreaAddress()); ps.setBoolean(22, isMyself); ps.setString(23, cardTypeEnum == null ? HCardTypeEnum._01.WX_CODE : cardTypeEnum.WX_CODE); ps.setString(24, bindData.getUnionId()); ps.setString(25, bindData.getHospAppId()); ps.setString(26, bindData.getGmcUniqueId()); ps.setString(27, CodeHelper.get32UUID()); }) > 0; } /** * 查询所有未领取健康卡的用户信息,民族、电话不能为空,一次读取15条信息 */ public List selectPatient4BatchUpdateHealthCard() { String sql = "select * from patientBase where HealthCardID is null and ifNull(idCardNo,'') <> '' " + "and ifNull(nation,'') <> '' and ifNull(tel, '') <> '' and callFlag=0 LIMIT 15"; return DataBase.select(sql, Patient.class); } /** * 批量领卡后,更新健康卡ID * * @param healthCardId 健康卡id * @param idCardNo 身份证 */ public boolean updateHealthCard(String healthCardId, String idCardNo) { String sql = "update patientBase set healthCardId = ? where idCardNo = ?"; return DataBase.update(sql, ps -> { ps.setString(1, healthCardId); ps.setString(2, idCardNo); }) > 0; } /** * 批量领卡调用标记(领取成功与否都更新为1) * * @param idCardNo 身份证 * @return */ public boolean updateCallFlag(String idCardNo) { String sql = "update patientBase set callFlag = 1 where idCardNo = ?"; return DataBase.update(sql, ps -> { ps.setString(1, idCardNo); }) > 0; } public List selectOpenIdsByPatientId(String patientId) { List dataList = DataBase.select("select bindDate, openid from patientBase where patientId= ? and deletedState = 0 and openid is not null and length(openid) > 20 order by bindDate desc", Patient.class, ps -> { ps.setString(1, patientId); }); if (dataList.isEmpty()) { return new ArrayList<>(); } return dataList; } public List selectOpenIdsByCardNo(String cardNo) { List dataList = DataBase.select("select bindDate, openid from patientBase where idCardNo= ? and deletedState = 0 and openid is not null and length(openid) > 20 order by bindDate desc", Patient.class, ps -> { ps.setString(1, cardNo); }); if (dataList.isEmpty()) { return new ArrayList<>(); } return dataList; } public List selectListByPatientId(String patientId) { List dataList = DataBase.select("select * from patientBase where patientId= ? and deletedState = 0 order by bindDate desc", Patient.class, ps -> { ps.setString(1, patientId); }); if (dataList.isEmpty()) { return new ArrayList<>(); } return dataList; } public boolean updateMyself(Patient bindInfo) { String idCardNo = bindInfo.getIdCardNo(); if (idCardNo == null) { return false; } idCardNo = "'" + idCardNo + "'"; String sql = "update patientBase set isMyself = (CASE idCardNo WHEN " + idCardNo + " THEN 1 else 0 end)," + " deletedState = (CASE idCardNo WHEN " + idCardNo + " THEN 0 else deletedState end)," + " areaCode = (CASE idCardNo WHEN " + idCardNo + " THEN ? else areaCode end)," + " address = (CASE idCardNo WHEN " + idCardNo + " THEN ? else address end)," + " patientId = (CASE idCardNo WHEN " + idCardNo + " THEN ? else patientId end)," + " name = (CASE idCardNo WHEN " + idCardNo + " THEN ? else name end)," + " tel = (CASE idCardNo WHEN " + idCardNo + " THEN ? else tel end)," + " nation = (CASE idCardNo WHEN " + idCardNo + " THEN ? else nation end)" + " where openid = ?"; return DataBase.update(sql, ps -> { ps.setString(1, bindInfo.getAreaCode()); ps.setString(2, bindInfo.getAddress()); ps.setString(3, bindInfo.getPatientId()); ps.setString(4, bindInfo.getName()); ps.setString(5, bindInfo.getTel()); ps.setString(6, bindInfo.getNation()); //--------------------------------------- ps.setString(7, bindInfo.getOpenid()); }) > 0; } }