|
@ -1,6 +1,7 @@
|
|
|
package com.yihu.jw.care.service.sign;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fasterxml.jackson.databind.JavaType;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.yihu.jw.care.dao.apply.PatientBedApplyDao;
|
|
|
import com.yihu.jw.care.dao.label.WlyyPatientLabelDao;
|
|
@ -8,6 +9,7 @@ import com.yihu.jw.care.dao.sign.*;
|
|
|
import com.yihu.jw.care.service.common.DictService;
|
|
|
import com.yihu.jw.care.service.device.DeviceService;
|
|
|
import com.yihu.jw.care.util.ConstantUtil;
|
|
|
import com.yihu.jw.care.util.MessageUtil;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
import com.yihu.jw.entity.base.org.BaseOrgDO;
|
|
@ -86,13 +88,201 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
|
|
|
private DeviceService deviceService;
|
|
|
@Autowired
|
|
|
private BasePatientHelperDao patientHelperDao;
|
|
|
@Autowired
|
|
|
private MessageUtil messageUtil;
|
|
|
|
|
|
//分配服务者
|
|
|
public void allocationDoctor(String jsonData) throws Exception{
|
|
|
List<ServicePackageRecordDO> recordDOList = new ArrayList<>();
|
|
|
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, Map.class);
|
|
|
List<Map<String, String>> list = objectMapper.readValue(jsonData, javaType);
|
|
|
for (Map<String, String> map:list){
|
|
|
ServicePackageRecordDO recordDO = new ServicePackageRecordDO();
|
|
|
String signId = map.get("signId");
|
|
|
String servicePackageId = map.get("servicePackageId");
|
|
|
String patient = map.get("patient");
|
|
|
String packageItemId = map.get("packageItemId");
|
|
|
String type = map.get("type");
|
|
|
String doctor = map.get("doctor");
|
|
|
String doctorName = map.get("doctorName");
|
|
|
String id = map.get("recordId");
|
|
|
if(StringUtils.isNotBlank(id)&&!"null".equals(id)){
|
|
|
recordDO.setCreateTime(new Date());
|
|
|
}
|
|
|
recordDO.setPatient(patient);
|
|
|
recordDO.setSignId(signId);
|
|
|
recordDO.setServicePackageId(servicePackageId);
|
|
|
recordDO.setPackageItemId(packageItemId);
|
|
|
recordDO.setDoctor(doctor);
|
|
|
recordDO.setDoctorName(doctorName);
|
|
|
recordDO.setType(type);
|
|
|
recordDOList.add(recordDO);
|
|
|
}
|
|
|
servicePackageRecordDao.save(recordDOList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 签约审核
|
|
|
* @param id 申请记录id
|
|
|
* @param uid
|
|
|
* @param status 1同意 2拒绝
|
|
|
* @param refuseType 拒绝原因
|
|
|
* @param refuseReason 拒绝说明
|
|
|
*/
|
|
|
public void check(String id,String uid,String status,String refuseType,String refuseReason){
|
|
|
ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
|
|
|
BaseDoctorDO doctorDO = doctorDao.findById(uid);
|
|
|
signRecordDO.setCheckTime(DateUtil.getStringDate());
|
|
|
if(doctorDO!=null){
|
|
|
signRecordDO.setCheckDoctor(doctorDO.getId());
|
|
|
signRecordDO.setCheckDoctorName(doctorDO.getName());
|
|
|
}
|
|
|
if("2".equals(status)){
|
|
|
signRecordDO.setStatus(-4);
|
|
|
signRecordDO.setRefuseType(refuseType);
|
|
|
signRecordDO.setRefuseReason(refuseReason);
|
|
|
}else {
|
|
|
signRecordDO.setStatus(2);
|
|
|
ServicePackageDO servicePackageDO = servicePackageDao.findOne(signRecordDO.getServicePackageId());
|
|
|
//判断支付金额
|
|
|
if(new BigDecimal(0).compareTo(servicePackageDO.getPrice())==0){
|
|
|
//不需要支付
|
|
|
signRecordDO.setStatus(1);//已签约
|
|
|
//设置到期时间
|
|
|
setSignDate(servicePackageDO,signRecordDO);
|
|
|
}else{
|
|
|
signRecordDO.setPayTime((3*24*60)+"");//3天 单位分钟
|
|
|
}
|
|
|
}
|
|
|
|
|
|
servicePackageSignRecordDao.save(signRecordDO);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 签约人数列表
|
|
|
* status 状态 0待审核 1已签约 2待支付 3已拒绝 -1已过期 -2已失效 -3已撤销
|
|
|
*/
|
|
|
public PageEnvelop signNumPage(String doctorId,String name,Integer page,Integer size){
|
|
|
String sql = "SELECT DISTINCT ar.level_conclusion,di2.dict_value levelConclusionName,p.id" +
|
|
|
",p.`name`,p.sex,p.mobile,p.idcard,p.birthday,p.openid,p.photo ";
|
|
|
String countSql = "select count(distinct p.id) ";
|
|
|
String filter = " from base_patient p " +
|
|
|
" inner JOIN base_service_package_sign_record r on p.id = r.patient and r.status=1 " +
|
|
|
" LEFT JOIN base_capacity_assessment_record ar on ar.patient = p.id and ar.assessment_time>= '" + DateUtil.getNowYear() + "-01-01' " +
|
|
|
" LEFT JOIN wlyy_hospital_sys_dict di2 on di2.dict_name = 'level_conclusion' and di2.dict_code=ar.level_conclusion " +
|
|
|
" where 1=1 ";
|
|
|
if(StringUtils.isNotBlank(doctorId)){
|
|
|
filter += " and r.check_doctor = '"+doctorId+"' ";
|
|
|
}
|
|
|
if(StringUtils.isNotBlank(name)){
|
|
|
filter += " and p.name like '%"+name+"%' ";
|
|
|
}
|
|
|
String oderBy = " order by r.id desc limit "+(page-1)*size+","+size;
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filter+oderBy);
|
|
|
String packageSql = "SELECT r.id,r.end_time,r.type,p.`name`,p.num from base_service_package_sign_record r,base_service_package p " +
|
|
|
"WHERE r.patient =? and r.`status`=1 and r.service_package_id=p.id ";
|
|
|
for (Map<String,Object> map:list){
|
|
|
String id = map.get("id")+"";
|
|
|
String idcard = map.get("idcard")+"";
|
|
|
String birthday = map.get("birthday")+"";
|
|
|
map.put("age", IdCardUtil.getAgeByBirthdayStrOrIdcard(idcard,birthday));
|
|
|
List<Map<String,Object>> packageList = jdbcTemplate.queryForList(packageSql,new Object[]{id});
|
|
|
map.put("packageList",packageList);
|
|
|
}
|
|
|
long count = jdbcTemplate.queryForObject(countSql+filter+oderBy,Long.class);
|
|
|
return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,count);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取签约总人数
|
|
|
* @param doctorId
|
|
|
* @return
|
|
|
*/
|
|
|
public int doctorSignTotal(String doctorId){
|
|
|
String sql = "SELECT COUNT(distinct sr.patient) from base_service_package_sign_record sr " +
|
|
|
"WHERE sr.status=1 and sr.check_doctor = '"+doctorId+"' ";
|
|
|
return jdbcTemplate.queryForObject(sql,Integer.class);
|
|
|
}
|
|
|
|
|
|
//签约服务包数
|
|
|
public int doctorSignServerPackageTotal(String doctorId){
|
|
|
String sql = "SELECT COUNT(sr.service_package_id) from base_service_package_sign_record sr " +
|
|
|
"WHERE sr.status=1 and sr.check_doctor = '"+doctorId+"' ";
|
|
|
return jdbcTemplate.queryForObject(sql,Integer.class);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 签约详情
|
|
|
* @param id
|
|
|
* @param type 1返回分配情况 0不返回
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject signInfo(String id,String type){
|
|
|
JSONObject json = new JSONObject();
|
|
|
ServicePackageSignRecordDO signRecordDO = servicePackageSignRecordDao.findOne(id);
|
|
|
ServicePackageDO servicePackageDO = servicePackageDao.findOne(signRecordDO.getServicePackageId());
|
|
|
List<ServicePackageItemDO> itemDOList = null;
|
|
|
if("1".equals(type)){
|
|
|
String sql = "SELECT i.*,r.id recordId,r.doctor,r.doctor_name,r.type serverType from base_service_package_item i " +
|
|
|
"LEFT JOIN base_service_package_record r on r.sign_id='"+id+"' and r.package_item_id=i.id " +
|
|
|
"WHERE i.service_package_id ='"+servicePackageDO.getId()+"' and i.del='1' ";
|
|
|
itemDOList = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(ServicePackageItemDO.class));
|
|
|
}else {
|
|
|
itemDOList = servicePackageItemDao.findByServicePackageId(signRecordDO.getServicePackageId());
|
|
|
}
|
|
|
servicePackageDO.setPackageItemDOList(itemDOList);
|
|
|
json.put("signRecordDO",signRecordDO);
|
|
|
json.put("servicePackageDO",servicePackageDO);
|
|
|
return json;
|
|
|
}
|
|
|
|
|
|
//签约各状态数 状态新- 0待审核 1已签约 2待支付 -4已拒绝 -1已过期 -2已失效 -3已撤销
|
|
|
public JSONObject signTopNum(String doctorId){
|
|
|
JSONObject result = new JSONObject();
|
|
|
int total = 0;
|
|
|
int auditNum = 0;//待审核
|
|
|
int payNum = 0;//待支付
|
|
|
int signNum = 0;//已签约
|
|
|
int expiredNum = 0;//已到期
|
|
|
String sql = "SELECT COUNT(sr.id) num,status from base_service_package_sign_record sr " +
|
|
|
"WHERE sr.status=1 and sr.check_doctor = '"+doctorId+"' group by status";
|
|
|
List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String,Object> map :list){
|
|
|
String status = map.get("status")+"";
|
|
|
int num = Integer.parseInt(map.get("num")+"");
|
|
|
total += num;
|
|
|
if("0".equals(status)){
|
|
|
auditNum = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("2".equals(status)){
|
|
|
payNum = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("1".equals(status)){
|
|
|
signNum = num;
|
|
|
continue;
|
|
|
}
|
|
|
if("-1".equals(status)){
|
|
|
expiredNum = num;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
result.put("total",total);
|
|
|
result.put("auditNum",auditNum);
|
|
|
result.put("payNum",payNum);
|
|
|
result.put("signNum",signNum);
|
|
|
result.put("expiredNum",expiredNum);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 签约记录
|
|
|
* status 状态 0待审核 1已签约 2待支付 3已拒绝 -1已过期 -2已失效 -3已撤销
|
|
|
*/
|
|
|
public PageEnvelop signPage(String patientId,String doctorId,String name,String status,Integer page,Integer size){
|
|
|
String sql = "SELECT DISTINCT if(ar.id=null,'0','1') isCapacityAssessment,r.id,r.`status`,di.dict_value statusName" +
|
|
|
String sql = "SELECT DISTINCT ar.level_conclusion,di2.dict_value levelConclusionName,r.id,r.`status`,di.dict_value statusName" +
|
|
|
",r.patient,p.`name`,p.sex,p.mobile,p.idcard,p.birthday,p.openid " +
|
|
|
",p.photo,r.create_time createTime,r.type,sp.`name` packageName,sp.num,sp.org_name orgName";
|
|
|
String countSql = "select count(distinct r.id) ";
|
|
@ -100,7 +290,8 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
|
|
|
" inner JOIN base_patient p on p.id = r.patient " +
|
|
|
" LEFT JOIN base_service_package sp on r.service_package_id=sp.id " +
|
|
|
" LEFT JOIN wlyy_hospital_sys_dict di on di.dict_name = 'sign_status' and di.dict_code=r.status " +
|
|
|
" LEFT JOIN base_capacity_assessment_record ar on ar.patient = r.patient and ar.assessment_time>= '" + DateUtil.getNowYear() + "-01-01'" +
|
|
|
" LEFT JOIN base_capacity_assessment_record ar on ar.patient = r.patient and ar.assessment_time>= '" + DateUtil.getNowYear() + "-01-01' " +
|
|
|
" LEFT JOIN wlyy_hospital_sys_dict di2 on di2.dict_name = 'level_conclusion' and di2.dict_code=ar.level_conclusion " +
|
|
|
" where 1=1 ";
|
|
|
if(StringUtils.isNotBlank(patientId)){
|
|
|
filter += " and r.patient = '"+patientId+"' ";
|
|
@ -166,6 +357,8 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
|
|
|
if(new BigDecimal(0).compareTo(servicePackageDO.getPrice())==0){
|
|
|
//不需要支付
|
|
|
signRecordDO.setStatus(1);//已签约
|
|
|
//设置到期时间
|
|
|
setSignDate(servicePackageDO,signRecordDO);
|
|
|
}else{
|
|
|
signRecordDO.setPayTime("10");//10分钟
|
|
|
}
|
|
@ -196,6 +389,61 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//设置签约的服务期限
|
|
|
public void setSignDate(ServicePackageDO servicePackageDO,ServicePackageSignRecordDO signRecordDO){
|
|
|
if("1".equals(servicePackageDO.getServerTimeType())){
|
|
|
//固定期限
|
|
|
String serverTime = servicePackageDO.getServerTime();
|
|
|
if(StringUtils.isNotBlank(serverTime)&&!"*".equals(serverTime)){
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
int year = 0;
|
|
|
int month = 0;
|
|
|
String sTime[] = serverTime.split("\\*");
|
|
|
if(sTime.length==1){
|
|
|
year = Integer.parseInt(sTime[0]);
|
|
|
cal.add(Calendar.YEAR,year);
|
|
|
}else {
|
|
|
if(!"".equals(sTime[0])){
|
|
|
year = Integer.parseInt(sTime[0]);
|
|
|
cal.add(Calendar.YEAR,year);
|
|
|
}
|
|
|
month = Integer.parseInt(sTime[1]);
|
|
|
cal.add(Calendar.MONTH,month);
|
|
|
}
|
|
|
signRecordDO.setEndTime(cal.getTime());
|
|
|
}
|
|
|
}
|
|
|
signRecordDO.setStartTime(new Date());
|
|
|
|
|
|
sendMessage(servicePackageDO,signRecordDO);
|
|
|
}
|
|
|
|
|
|
//给分配者发送消息
|
|
|
private void sendMessage(ServicePackageDO servicePackageDO,ServicePackageSignRecordDO signRecordDO){
|
|
|
try {
|
|
|
String sql = "SELECT DISTINCT d.id,d.name from base_doctor_role r,base_doctor_hospital h,base_doctor d " +
|
|
|
" WHERE r.role_code = 'dispatcher' and r.del='1' and r.doctor_code=h.doctor_code " +
|
|
|
"and h.del='1' and r.doctor_code=d.id and h.org_code='"+servicePackageDO.getOrgCode()+"'";
|
|
|
String content = "居民签约了服务包,请及时处理";
|
|
|
List<Map<String,Object>> doctorList = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String,Object> map:doctorList){
|
|
|
messageUtil.createMessage("服务项调度","980","system","服务项调度通知助手",signRecordDO.getId(),
|
|
|
map.get("id")+"",map.get("name")+"",signRecordDO.getName()+content);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
String s1 = "*1";
|
|
|
String s2 = "2*";
|
|
|
String ss[] = s1.split("\\*");
|
|
|
String ss2[] = s2.split("\\*");
|
|
|
System.out.println(ss.length);
|
|
|
System.out.println(ss2.length);
|
|
|
}
|
|
|
|
|
|
//服务包列表
|
|
|
public PageEnvelop servicePackagePage(Integer page,Integer size){
|
|
|
String sql = "SELECT id,name,type,price,org_name orgName,server_time_type serverTimeType,serverTime,isCheck,feeAfter ";
|