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 . 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 < 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, 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 < 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 ;
}
}