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 < Patient > 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 < Patient > 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 < Patient > 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 < PatientLink > 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 < PatientLink > 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 < Patient > resultList = DataBase . select ( sql , Patient . class , ps - > {
ps . setString ( 1 , openid ) ;
ps . setString ( 2 , idCardNo ) ;
} ) ;
return resultList . size ( ) > 0 ? 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 < Patient > 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 < Patient > 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 < Patient > selectPatientsByOpenId ( String openId ) {
String sql = "select patientId, name, sex, birthday, idCardNo, tel from patientBase where openId= ? and deletedState = 0 order by isDefault desc" ;
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(), 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=?, gmcHisPatientId=?, gmcBindState=1, " +
" uniqueId=if(uniqueId is null or uniqueId = '', ?, uniqueId), " +
" gmcUniqueId=if(gmcUniqueId is null or gmcUniqueId = '', ?, gmcUniqueId), " +
" hospAppId=if(hospAppId is null or hospAppId = '', ?, hospAppId) " +
" 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 , bindInfo . getGmcHisPatientId ( ) ) ;
ps . setString ( 11 , CodeHelper . get32UUID ( ) ) ;
ps . setString ( 12 , bindInfo . getGmcUniqueId ( ) ) ;
ps . setString ( 13 , bindInfo . getHospAppId ( ) ) ;
// 条件
ps . setString ( 14 , bindInfo . getOpenid ( ) ) ;
ps . setString ( 15 , 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, gmcHisPatientId, gmcBindState, 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 , bindData . getGmcHisPatientId ( ) ) ;
ps . setInt ( 28 , bindData . getGmcBindState ( ) ) ;
ps . setString ( 29 , CodeHelper . get32UUID ( ) ) ;
} ) > 0 ;
}
/ * *
* 查询所有未领取健康卡的用户信息 , 民族 、 电话不能为空 , 一次读取15条信息
* /
public List < Patient > 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 < Patient > selectOpenIdsByPatientId ( String patientId ) {
List < Patient > 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 < Patient > selectOpenIdsByCardNo ( String cardNo ) {
List < Patient > 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 < Patient > selectListByPatientId ( String patientId ) {
List < Patient > 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 ;
}
}