微信后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

363 lines
14 KiB

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