|
@ -0,0 +1,757 @@
|
|
|
package com.yihu.jw.care.service.security;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.yihu.jw.care.dao.device.PatientDeviceDao;
|
|
|
import com.yihu.jw.care.dao.security.*;
|
|
|
import com.yihu.jw.care.service.sign.ServicePackageService;
|
|
|
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.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.base.servicePackage.ServicePackageRecordDO;
|
|
|
import com.yihu.jw.entity.care.device.PatientDevice;
|
|
|
import com.yihu.jw.entity.care.securitymonitoring.*;
|
|
|
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.restmodel.ResponseContant;
|
|
|
import com.yihu.jw.util.common.IdCardUtil;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.util.entity.EntityUtils;
|
|
|
import com.yihu.mysql.query.BaseJpaService;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Random;
|
|
|
|
|
|
/**
|
|
|
* Created by Bing on 2021/4/6.
|
|
|
*/
|
|
|
@Service
|
|
|
public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonitoringOrderDO, SecurityMonitoringOrderDao> {
|
|
|
|
|
|
@Autowired
|
|
|
private SecurityMonitoringOrderDao securityMonitoringOrderDao;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
|
private PatientDeviceDao patientDeviceDao;
|
|
|
@Autowired
|
|
|
private ServicePackageService servicePackageService;
|
|
|
@Autowired
|
|
|
private SecurityMonitoringOrderCancelLogDao securityMonitoringOrderCancelLogDao;
|
|
|
@Autowired
|
|
|
private MessageUtil messageUtil;
|
|
|
@Autowired
|
|
|
private SecurityMonitoringOrderPatientConfirmLogDao securityMonitoringOrderPatientConfirmLogDao;
|
|
|
@Autowired
|
|
|
private SecurityMonitoringDoctorStatusDao doctorStatusDao;
|
|
|
@Autowired
|
|
|
private SystemMessageDao systemMessageDao;
|
|
|
@Autowired
|
|
|
private BasePatientDao basePatientDao;
|
|
|
@Autowired
|
|
|
private BaseDoctorDao baseDoctorDao;
|
|
|
@Autowired
|
|
|
private SecurityMonitoringConclusionDao securityMonitoringConclusionDao;
|
|
|
|
|
|
private Logger logger = LoggerFactory.getLogger(SecurityMonitoringOrderService.class);
|
|
|
|
|
|
public JSONObject createOrder(String jsonData){
|
|
|
logger.info("创建上门服务jsonData参数:" + jsonData);
|
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
JSONObject jsonObjectParam;
|
|
|
try {
|
|
|
jsonObjectParam = JSONObject.parseObject(jsonData);
|
|
|
} catch (Exception e) {
|
|
|
result.put("resultFlag", 0);
|
|
|
String failMsg = "参数转换成JSON对象异常:" + e.getMessage();
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
SecurityMonitoringOrderDO orderDO = null;
|
|
|
try {
|
|
|
orderDO = EntityUtils.jsonToEntity(jsonObjectParam.get("order").toString(), SecurityMonitoringOrderDO.class);
|
|
|
} catch (Exception e) {
|
|
|
result.put("resultFlag", 0);
|
|
|
String failMsg = "服务工单服务基本信息:" + e.getMessage();
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
orderDO.setStatus(1);
|
|
|
orderDO.setNumber(getRandomIntStr());
|
|
|
orderDO.setCreateTime(new Date());
|
|
|
orderDO.setCreateUser(orderDO.getCreateUser());
|
|
|
orderDO.setCreateUserName(orderDO.getCreateUserName());
|
|
|
orderDO.setOrderInfo("0");
|
|
|
|
|
|
if(StringUtils.isEmpty(orderDO.getPatient())){
|
|
|
result.put("resultFlag", 0);
|
|
|
String failMsg = "当前服务对象code为空,请联系管理员检查参数!patient = " + orderDO.getPatient();
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
//签约防走失服务包
|
|
|
List<ServicePackageRecordDO> signRecords = servicePackageService.servicePackageByPatient(orderDO.getPatient(),"3");
|
|
|
if (signRecords.size()<0) {
|
|
|
result.put("resultFlag", 0);
|
|
|
String failMsg = "当前服务对象未完成签约,请完成签约后再预约服务!";
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
//已取消的订单也可以申请
|
|
|
boolean bool = securityMonitoringOrderDao.existsByPatientAndStatusIn(orderDO.getPatient(),
|
|
|
new Integer[]{SecurityMonitoringOrderDO.Status.waitForSend.getType(),
|
|
|
SecurityMonitoringOrderDO.Status.waitForArrive.getType(),
|
|
|
SecurityMonitoringOrderDO.Status.signed.getType(),
|
|
|
SecurityMonitoringOrderDO.Status.registerSummary.getType(),
|
|
|
SecurityMonitoringOrderDO.Status.waitForAdded.getType(),
|
|
|
});
|
|
|
|
|
|
if(bool){
|
|
|
String failMsg = "当前服务对象存在未完成的服务,请先完成该服务!";
|
|
|
result.put("resultFlag", 0);
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
orderDO.setHospital(jsonObjectParam.getJSONObject("hospital").get("code").toString());
|
|
|
orderDO.setCreateTime(new Date());
|
|
|
//判断创建预警服务类型,发起类型(1本人发起 2家人待预约 3医生代预约)
|
|
|
orderDO.setType(3);//发起类型
|
|
|
orderDO.setServiceStatus("2");
|
|
|
this.save(orderDO);
|
|
|
|
|
|
//创建咨询
|
|
|
org.json.JSONObject successOrNot = null;
|
|
|
try {
|
|
|
// successOrNot = consultTeamService.addDoorServiceConsult(orderDO.getId());
|
|
|
|
|
|
successOrNot = null;//TODO 接单时创建两个人聊天
|
|
|
} catch (Exception e) {
|
|
|
String failMsg = "创建咨询时异常: " + e.getMessage();
|
|
|
result.put("resultFlag", 0);
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
if (Integer.parseInt(successOrNot.get("resultFlag").toString()) == 0) {
|
|
|
return JSONObject.parseObject(successOrNot.toString());
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
public JSONArray getSecurityOrderList(String doctor, String patient, String status, Integer page, Integer pageSize){
|
|
|
String sql = " select p.id patientCode,p.name,p.sex,p.idcard,ord.id orderId,ord.number,ord.serve_desc,ord.create_time,ord.`status`,ord.doctor," +
|
|
|
"ord.doctor_name,ord.patient_phone from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
|
|
|
"where 1=1 ";
|
|
|
if (StringUtils.isNotBlank(doctor)){
|
|
|
sql +=" and ord.doctor = '"+doctor+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(patient)){
|
|
|
sql+=" and ord.patient='"+patient+"' ";
|
|
|
}
|
|
|
if (StringUtils.isNotBlank(status)){
|
|
|
sql+=" and ord.status='"+Integer.parseInt(status)+"' ";
|
|
|
}
|
|
|
sql+=" order by ord.create_time desc limit " + (page*pageSize) + "," + pageSize;
|
|
|
List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
|
|
|
|
|
|
JSONArray result = new JSONArray();
|
|
|
for (Map<String,Object>one:sqlResult){
|
|
|
JSONObject tmp = new JSONObject();
|
|
|
tmp.put("patientCode",one.get("patientCode"));
|
|
|
tmp.put("patientName",one.get("name"));
|
|
|
tmp.put("sex",one.get("sex"));
|
|
|
tmp.put("idcard",one.get("idcard"));
|
|
|
tmp.put("number",one.get("number"));
|
|
|
tmp.put("id",one.get("orderId"));
|
|
|
tmp.put("serveDesc",one.get("serve_desc"));
|
|
|
Date date = (Date)one.get("create_time");
|
|
|
tmp.put("createTime", DateUtil.dateToStr(date,"yyyy-MM-dd hh:mm:ss"));
|
|
|
tmp.put("status",one.get("status"));
|
|
|
tmp.put("doctor",one.get("doctor"));
|
|
|
tmp.put("doctorName",one.get("doctor_ame"));
|
|
|
tmp.put("patientPhone",one.get("patient_phone"));
|
|
|
Integer statustemp = Integer.valueOf(one.get("status")+"");
|
|
|
String statusName = "";
|
|
|
switch (statustemp){
|
|
|
case -1:statusName="已取消";break;
|
|
|
case 1:statusName="待处置";break;
|
|
|
case 2:statusName="前往居民定位";break;
|
|
|
case 3:statusName="已签到";break;
|
|
|
case 4:statusName="已登记小结";break;
|
|
|
case 5:statusName="待补录";break;
|
|
|
case 6:statusName="待评价";break;
|
|
|
case 7:statusName="已完成";break;
|
|
|
}
|
|
|
tmp.put("statusName",statusName);
|
|
|
result.add(tmp);
|
|
|
Integer age = IdCardUtil.getAgeForIdcard(tmp.getString("idcard"));
|
|
|
tmp.put("age",age);
|
|
|
//患者设备
|
|
|
List<PatientDevice> devices = patientDeviceDao.findAllByUser(tmp.get("patientCode").toString());
|
|
|
if (devices.size()>0){
|
|
|
tmp.put("deviceFlag","1");
|
|
|
}
|
|
|
else {
|
|
|
tmp.put("deviceFlag","0");
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 系统更新医生上门服务工单状态
|
|
|
* @param doctor
|
|
|
* @param dispatchOrderStatus
|
|
|
*/
|
|
|
public void updateDispatchStatusBySystem(String doctor, Integer dispatchOrderStatus) {
|
|
|
SecurityMonitoringDoctorStatusDo doctorSwitch = doctorStatusDao.findByDoctor(doctor);
|
|
|
if (null != doctorSwitch) {
|
|
|
doctorSwitch.setStatus(dispatchOrderStatus);
|
|
|
doctorSwitch.setUpdateTime(new Date());
|
|
|
doctorSwitch.setCreateUser("System");
|
|
|
doctorSwitch.setCreateUserName("System");
|
|
|
} else {
|
|
|
doctorSwitch = new SecurityMonitoringDoctorStatusDo();
|
|
|
doctorSwitch.setDoctor(doctor);
|
|
|
doctorSwitch.setStatus(dispatchOrderStatus);
|
|
|
doctorSwitch.setCreateTime(new Date());
|
|
|
doctorSwitch.setCreateUser("System");
|
|
|
doctorSwitch.setCreateUserName("System");
|
|
|
}
|
|
|
doctorStatusDao.save(doctorSwitch);
|
|
|
}
|
|
|
|
|
|
public SecurityMonitoringOrderDO acceptOrder1(String orderId,String doctor) throws Exception{
|
|
|
SecurityMonitoringOrderDO doorServiceOrder = securityMonitoringOrderDao.findOne(orderId);
|
|
|
if (null == doorServiceOrder) {
|
|
|
throw new Exception("该工单不存在");
|
|
|
}
|
|
|
doorServiceOrder.setStatus(SecurityMonitoringOrderDO.Status.waitForArrive.getType()); //
|
|
|
this.updateDispatchStatusBySystem(doorServiceOrder.getDoctor(), 3);//待服务
|
|
|
doorServiceOrder.setServiceResponseTime(new Date());
|
|
|
|
|
|
//新增工单医生关联关系
|
|
|
// JSONObject jsonObjectParam = new JSONObject();
|
|
|
// JSONObject doc = new JSONObject();
|
|
|
// doc.put("doctor",doorServiceOrder.getDoctor());
|
|
|
// doc.put("doctorName",doorServiceOrder.getDoctorName());
|
|
|
// doc.put("hospitalLevel",hospitalLevel);
|
|
|
// doc.put("doctorJobCode",jobCode);
|
|
|
// doc.put("doctorJobName",jobCodeName);
|
|
|
// JSONArray docArr = new JSONArray();
|
|
|
// docArr.add(doc);
|
|
|
// jsonObjectParam.put("doctorArr",docArr);
|
|
|
|
|
|
// 无费用
|
|
|
// if (wlyyDoorServiceOrderService.orderWithDoctorAdd(new JSONObject(), jsonObjectParam, doorServiceOrder)) return null;
|
|
|
|
|
|
securityMonitoringOrderDao.save(doorServiceOrder);
|
|
|
|
|
|
systemMessageDao.orderMessageDelByType(doorServiceOrder.getDoctor(),orderId,"607");
|
|
|
|
|
|
if(doorServiceOrder.getType() == null|| doorServiceOrder.getType() != 3) {
|
|
|
|
|
|
// //获取咨询
|
|
|
// ConsultTeam consultTeam = consultTeamDao.queryByRelationCode(orderId);
|
|
|
// consultTeam.setDoctor(doorServiceOrder.getDoctor());
|
|
|
// consultTeam.setDoctorName(doorServiceOrder.getDoctorName());
|
|
|
// consultTeamDao.save(consultTeam);
|
|
|
//
|
|
|
// String sessionId = doorServiceOrder.getPatient() + "_" + consultTeam.getConsult() + "_" + doorServiceOrder.getNumber() + "_" + consultTeam.getType();
|
|
|
// //成功创建服务工单后,居民所在机构调度员向居民发起一条通知服务消息
|
|
|
//
|
|
|
// // 发送IM消息通知患者医生已接单
|
|
|
// String noticeContent = "我已接受您的服务工单预约," + doorServiceOrder.getDoctorName() + "医生正在为您服务!";
|
|
|
//// imUtill.sendIntoTopicIM(doorServiceOrder.getDoctor(), sessionId, consultTeam.getConsult(), noticeContent, doorServiceOrder.getProxyPatient(), doorServiceOrder.getProxyPatientName());
|
|
|
// wlyyDoorServiceOrderService.qucikSendIM(doorServiceOrder.getId(), doorServiceOrder.getDispatcher(), "智能助手", "1", noticeContent);
|
|
|
// // 发送居民上门服务简要信息
|
|
|
// JSONObject orderInfoContent = wlyyDoorServiceOrderService.queryOrderCardInfo(doorServiceOrder);
|
|
|
// orderInfoContent.put("re_msg_type", 0);
|
|
|
// wlyyDoorServiceOrderService.qucikSendIM(doorServiceOrder.getId(), doorServiceOrder.getDispatcher(), "智能助手", "2101", orderInfoContent.toJSONString());
|
|
|
}
|
|
|
|
|
|
return doorServiceOrder;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 接单
|
|
|
* @param orderId
|
|
|
*/
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public JSONObject acceptOrder(String orderId,String doctor) throws Exception {
|
|
|
JSONObject result = new JSONObject();
|
|
|
SecurityMonitoringOrderDO doorServiceOrderDO = securityMonitoringOrderDao.findOne(orderId);
|
|
|
if(null == doorServiceOrderDO){
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "当前工单不存在,id:" + orderId;
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
SecurityMonitoringDoctorStatusDo doorDoctorStatusDO = doctorStatusDao.queryByDoctorAndStatusIn(doctor,new Integer[]{SecurityMonitoringDoctorStatusDo.Status.waitForSend.getType(),
|
|
|
SecurityMonitoringDoctorStatusDo.Status.waitForAccept.getType(),
|
|
|
SecurityMonitoringDoctorStatusDo.Status.waitForServe.getType(),
|
|
|
SecurityMonitoringDoctorStatusDo.Status.serving.getType(),
|
|
|
});
|
|
|
if(null == doorDoctorStatusDO){
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "当前接单的医生不存在或禁止接单,doctor:" + doctor;
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
BaseDoctorDO doctorDO= baseDoctorDao.findById(doctor);
|
|
|
doorServiceOrderDO.setDoctor(doctor);
|
|
|
doorServiceOrderDO.setDoctorName(doctorDO.getName());
|
|
|
doorServiceOrderDO.setDoctorType("医生");
|
|
|
doorServiceOrderDO.setStatus(SecurityMonitoringOrderDO.Status.waitForArrive.getType());//前往居民定位
|
|
|
doorServiceOrderDO.setUpdateUser(doctor);
|
|
|
doorServiceOrderDO.setUpdateUserName(doctorDO.getName());
|
|
|
securityMonitoringOrderDao.save(doorServiceOrderDO);
|
|
|
// 派单时,把医生拉入会话,作为其中一个成员,医生拒单时,退出会话
|
|
|
//TODO 接单时创建两个人聊天
|
|
|
// ConsultDo consult = consultDao.queryByRelationCode(orderId);
|
|
|
// String sessionId = doorServiceOrderDO.getPatient() + "_" + consult.getId() + "_" + doorServiceOrderDO.getNumber() + "_" + consult.getType();
|
|
|
// imUtill.updateParticipantNew(sessionId,doctor,null);
|
|
|
|
|
|
// 工单状态变更记录
|
|
|
// WlyyDoorProcessLogDO processLogDO = new WlyyDoorProcessLogDO();
|
|
|
// processLogDO.setOrderId(orderId);
|
|
|
// processLogDO.setStatus(WlyyDoorServiceOrderDO.Status.waitForAccept.getType());
|
|
|
// processLogDO.setDispatcher(dispatcher);
|
|
|
// processLogDO.setDispatcherName(dispathcherName);
|
|
|
// processLogDO.setCreateTime(new Date());
|
|
|
// wlyyDoorProcessLogDao.save(processLogDO);
|
|
|
|
|
|
|
|
|
// 发送IM消息通知患者医生已派单
|
|
|
// String noticeContent = "已转派"+doorServiceOrderDO.getDoctorName()+"医生为您服务,请耐心等待医生接单";
|
|
|
// this.qucikSendIM(doorServiceOrderDO.getId(), dispatcher, "智能助手","1", noticeContent);
|
|
|
|
|
|
SecurityMonitoringOrderDO doorServiceOrder = acceptOrder1(orderId, doctor);
|
|
|
if(doorServiceOrder==null){
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "当前接单的医生不存在或禁止接单,doctor:" + doctor;
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.success);
|
|
|
result.put(ResponseContant.resultMsg, doorServiceOrder);
|
|
|
|
|
|
// 发送微信模板消息通知患者医生已接单
|
|
|
// BasePatientDO patient = basePatientDao.findById(doorServiceOrder.getPatient());//
|
|
|
// 获取微信模板
|
|
|
// ConsultDo consult = consultDao.queryByRelationCode(orderId);
|
|
|
// try {
|
|
|
// JSONObject json = new JSONObject();
|
|
|
// if(consult != null) {
|
|
|
// json.put("consult", consult.getId());
|
|
|
// }
|
|
|
// String first = "key1,您好!您的上门预约服务已由【key2】医生接单了";
|
|
|
// first = first.replace("key1",(patient.getName()==null?"":patient.getName()));
|
|
|
// first = first.replace("key2", null != doorServiceOrder.getDoctorName() ? doorServiceOrder.getDoctorName() : "");
|
|
|
// List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,patient.getId());
|
|
|
// String openId = basePatientWechatDos.get(0).getOpenid();
|
|
|
// messageUtil.putTemplateWxMessage(wxId,"template_process_feedback","smyyyjjd",openId,first,null,null,30,json,DateUtil.dateToChineseDate(new Date()),"上门服务已接单");
|
|
|
// }catch (Exception e){
|
|
|
// e.printStackTrace();
|
|
|
// logger.error(e.getMessage());
|
|
|
// }
|
|
|
// 待接单消息设为已操作, 434 医生接单-- 王五接受了服务工单12345678
|
|
|
messageUtil.createMessage("医生接单","634",doorServiceOrder.getPatient(),doorServiceOrder.getPatientName(),
|
|
|
doorServiceOrder.getId(), doorServiceOrder.getDoctor(),doorServiceOrder.getDoctorName() ,null, doorServiceOrder.getDoctor() + "接受了服务工单"+ doorServiceOrder.getNumber());
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 取消工单
|
|
|
* @param orderId
|
|
|
* @param type
|
|
|
* @param reason
|
|
|
* @param dispatcher
|
|
|
* @param dispatcherName
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONObject cancelOrder(String orderId,int type,String reason,String dispatcher,String dispatcherName){
|
|
|
JSONObject result = new JSONObject();
|
|
|
SecurityMonitoringOrderDO orderDO = securityMonitoringOrderDao.findOne(orderId);
|
|
|
if(null == orderDO){
|
|
|
String failMsg = "【取消工单】该工单不存在:," + orderId;
|
|
|
result.put("resultFlag", 0);
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
//接单前可取消工单
|
|
|
if(orderDO.getStatus() > SecurityMonitoringOrderDO.Status.waitForSend.getType()){
|
|
|
String failMsg = "只有医生接单前的工单才可取消:," + orderId;
|
|
|
result.put("resultFlag", 0);
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
orderDO.setCancelType(type);
|
|
|
orderDO.setCancelTime(new Date());
|
|
|
orderDO.setCancelReason(reason);
|
|
|
orderDO.setStatus(SecurityMonitoringOrderDO.Status.cancel.getType());
|
|
|
this.save(orderDO);
|
|
|
|
|
|
if(type == SecurityMonitoringOrderDO.CancelType.patient.getType()){ //居民取消,消息列表也应该不显示
|
|
|
messageUtil.updateSecurityMonitoringOrderMessage(orderDO,new String[]{"602","603"},"patientCancel");
|
|
|
}
|
|
|
|
|
|
//保存取消记录
|
|
|
SecurityMonitoringOrderCancelLog cancelLogDO = new SecurityMonitoringOrderCancelLog();
|
|
|
cancelLogDO.setOrderId(orderId);
|
|
|
cancelLogDO.setPatient(orderDO.getPatient());
|
|
|
cancelLogDO.setCancelType(type);
|
|
|
cancelLogDO.setCancelReason(reason);
|
|
|
cancelLogDO.setTime(orderDO.getCancelTime());
|
|
|
securityMonitoringOrderCancelLogDao.save(cancelLogDO);
|
|
|
|
|
|
//保存居民确认取消记录
|
|
|
JSONObject confirmInfo = new JSONObject();
|
|
|
confirmInfo.put("orderId",orderId);
|
|
|
confirmInfo.put("patient",orderDO.getPatient());
|
|
|
confirmInfo.put("patientName",orderDO.getPatientName());
|
|
|
confirmInfo.put("type",4);
|
|
|
confirmInfo.put("description",reason);
|
|
|
JSONObject confirmInfoJson = new JSONObject();
|
|
|
confirmInfoJson.put("confirmInfo",confirmInfo);
|
|
|
this.orderWithConfirmLogAdd(result,confirmInfo,orderId);
|
|
|
|
|
|
|
|
|
// Consult consult = consultDao.queryByRelationCode(orderId);
|
|
|
// // 发送微信模板消息,通知居民工单已取消(smyyyqx-上门预约已取消)
|
|
|
//
|
|
|
// Patient patient = patientInfoService.findByCode(orderDO.getPatient());
|
|
|
// WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_process_feedback","smyyyqx");
|
|
|
// String first = templateConfig.getFirst().replace("key1", null != patient.getName() ? patient.getName() : "");
|
|
|
// org.json.JSONObject json = new org.json.JSONObject();
|
|
|
// json.put("first", first);
|
|
|
// json.put("keyword1", DateUtil.dateToStrShort(new Date()));
|
|
|
// json.put("keyword2", "上门预约已取消");
|
|
|
// json.put("url", templateConfig.getUrl());
|
|
|
// json.put("remark", templateConfig.getRemark());
|
|
|
// if(consult != null) {
|
|
|
// json.put("consult", consult.getCode());
|
|
|
// }else {
|
|
|
// json.put("id", orderDO.getId());
|
|
|
// }
|
|
|
// pushMsgTask.putWxMsg(tokenUtils.getAccessToken(), 30, patient.getOpenid(), patient.getName(), json);
|
|
|
|
|
|
result.put("resultFlag", 1);
|
|
|
result.put("resultMsg", "工单服务已取消!");
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean orderWithConfirmLogAdd(JSONObject result, JSONObject jsonObjectParam, String orderId) {
|
|
|
// 确认信息
|
|
|
JSONObject confirmInfo = jsonObjectParam.getJSONObject("confirmInfo");
|
|
|
if (null != confirmInfo) {
|
|
|
SecurityMonitoringOrderPatientConfirmLog confirmLogDO = null;
|
|
|
try {
|
|
|
confirmLogDO = EntityUtils.jsonToEntity(confirmInfo.toString(), SecurityMonitoringOrderPatientConfirmLog.class);
|
|
|
} catch (Exception e) {
|
|
|
String failMsg = "工单关联【居民确认操作日志记录】时," + e.getMessage();
|
|
|
result.put("resultFlag", 0);
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return true;
|
|
|
}
|
|
|
confirmLogDO.setOrderId(orderId);
|
|
|
confirmLogDO.setCreateTime(new Date());
|
|
|
try {
|
|
|
securityMonitoringOrderPatientConfirmLogDao.save(confirmLogDO);
|
|
|
} catch (Exception e) {
|
|
|
String failMsg = "保存工单关联的【居民确认操作日志记录】时:," + e.getMessage();
|
|
|
result.put("resultFlag", 0);
|
|
|
result.put("resultMsg", failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return true;
|
|
|
}
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 签到保存
|
|
|
* @param orderId
|
|
|
* @param signTime
|
|
|
* @param signWay
|
|
|
* @param signLocation
|
|
|
* @param signImg
|
|
|
* @return
|
|
|
*/
|
|
|
public SecurityMonitoringOrderDO signIn(String orderId, String signTime, Integer signWay, String signLocation,
|
|
|
String signImg, String twoDimensionalCode,String doctorId) throws Exception {
|
|
|
SecurityMonitoringOrderDO doorServiceOrder = securityMonitoringOrderDao.findOne(orderId);
|
|
|
doorServiceOrder.setDoctorSignTime(DateUtil.strToDate(signTime));
|
|
|
doorServiceOrder.setDoctorSignWay(signWay);
|
|
|
// 签到方式-2扫码时,需要去解析地址
|
|
|
doorServiceOrder.setDoctorSignLocation(signLocation);
|
|
|
doorServiceOrder.setDoctorSignImg(org.apache.commons.lang.StringUtils.isEmpty(signImg) ? null : signImg);
|
|
|
doorServiceOrder.setStatus(SecurityMonitoringOrderDO.Status.signed.getType());
|
|
|
|
|
|
if(signWay == 4 ){//扫码签到
|
|
|
if (twoDimensionalCode.equals(doorServiceOrder.getNumber())){
|
|
|
this.setUpdateColumnInfo(doorServiceOrder);
|
|
|
doorServiceOrder = securityMonitoringOrderDao.save(doorServiceOrder);
|
|
|
// 修改医生上门服务工单状态 4服务中
|
|
|
this.updateDispatchStatusBySystem(doorServiceOrder.getDoctor(), 4);//服务中
|
|
|
return doorServiceOrder;
|
|
|
}else {
|
|
|
logger.info("扫码签到失败");
|
|
|
return null;
|
|
|
}
|
|
|
}else {
|
|
|
this.setUpdateColumnInfo(doorServiceOrder);
|
|
|
doorServiceOrder = securityMonitoringOrderDao.save(doorServiceOrder);
|
|
|
// 修改医生上门服务工单状态 4服务中
|
|
|
this.updateDispatchStatusBySystem(doorServiceOrder.getDoctor(), 4);
|
|
|
return doorServiceOrder;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据接单医生code获取最近一次服务orderId
|
|
|
* @param doctor
|
|
|
* @return
|
|
|
*/
|
|
|
public String getOrderIdByDoctor(String doctor) {
|
|
|
String sql = "SELECT id as orderId from base_security_monitoring_order where doctor=? and status in(2,3,4,5,6,7) ORDER BY update_time desc,create_time desc, status ASC limit 1";
|
|
|
String orderId = jdbcTemplate.queryForObject(sql, String.class, new Object[]{doctor});
|
|
|
return orderId;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 编辑保存服务工单小结
|
|
|
* @param model
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public SecurityMonitoringConclusionDO updateDoorConclusion(String model, Integer examPapeStatus) throws Exception {
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
|
|
|
SecurityMonitoringConclusionDO doorConclusion = objectMapper.readValue(model, SecurityMonitoringConclusionDO.class);
|
|
|
SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(doorConclusion.getOrderId());
|
|
|
BaseDoctorDO doctorVO = baseDoctorDao.findById(one.getDoctor());
|
|
|
if (doorConclusion != null && org.apache.commons.lang.StringUtils.isNotEmpty(doorConclusion.getId())) {
|
|
|
doorConclusion.setUpdateTime(new Date());
|
|
|
doorConclusion.setUpdateUser(one.getDoctor());
|
|
|
doorConclusion.setUpdateUserName(null != doctorVO ? doctorVO.getName() : null);
|
|
|
} else {
|
|
|
doorConclusion.setCreateTime(new Date());
|
|
|
doorConclusion.setUpdateTime(new Date());
|
|
|
doorConclusion.setCreateUser(one.getDoctor());
|
|
|
doorConclusion.setCreateUserName(null != doctorVO ? doctorVO.getName() : null);
|
|
|
}
|
|
|
securityMonitoringConclusionDao.save(doorConclusion);
|
|
|
// 设置是否需要上传补录报告
|
|
|
one.setStatus(SecurityMonitoringOrderDO.Status.registerSummary.getType());//已登记服务小结
|
|
|
one.setExamPaperStatus(examPapeStatus);
|
|
|
one.setConclusionStatus(2);
|
|
|
securityMonitoringOrderDao.save(one);
|
|
|
return doorConclusion;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 跳过登记服务小结
|
|
|
* @param orderId
|
|
|
*/
|
|
|
public void cancelConclusion(String orderId) {
|
|
|
securityMonitoringOrderDao.updateConclusionStatus(orderId);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 统计居民已经服务的次数
|
|
|
* @param patient
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer countPatientDoorTimes(String patient){
|
|
|
Integer count = 0;
|
|
|
String sql = "SELECT count(d.id) as count FROM base_security_monitoring_order o where o.patient = '" + patient + "' and status>3 ";
|
|
|
count = jdbcTemplate.queryForObject(sql,Integer.class);
|
|
|
return count;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据orderId获取工单服务小结
|
|
|
* @param orderId
|
|
|
* @return
|
|
|
*/
|
|
|
public SecurityMonitoringConclusionDO getDoorConclusion(String orderId){
|
|
|
SecurityMonitoringConclusionDO doorConclusion = securityMonitoringConclusionDao.findByOrderId(orderId);
|
|
|
SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
|
|
|
if (doorConclusion==null&&one!=null) {
|
|
|
doorConclusion = new SecurityMonitoringConclusionDO();
|
|
|
doorConclusion.setOrderId(one.getId());
|
|
|
doorConclusion.setPatient(one.getPatient());
|
|
|
doorConclusion.setPatientName(one.getPatientName());
|
|
|
doorConclusion.setDoctor(one.getDoctor());
|
|
|
doorConclusion.setDoctorName(one.getDoctorName());
|
|
|
}
|
|
|
return doorConclusion;
|
|
|
}
|
|
|
|
|
|
public SecurityMonitoringOrderDO saveOrderFinishBydoctor(String orderId ,String finishImg) throws Exception {
|
|
|
SecurityMonitoringOrderDO one = securityMonitoringOrderDao.findOne(orderId);
|
|
|
one.setDoctorConfirmFinishImg(finishImg);
|
|
|
one.setStatus(SecurityMonitoringOrderDO.Status.complete.getType());
|
|
|
one.setDoctorConfirmFinishFinishTime(new Date());
|
|
|
// 更新记录
|
|
|
this.setUpdateColumnInfo(one);
|
|
|
// 计算保存服务总的支付费用
|
|
|
|
|
|
|
|
|
securityMonitoringOrderDao.save(one);
|
|
|
SecurityMonitoringOrderDO doorServiceOrderDO = this.getDoorServiceOrderById(orderId);
|
|
|
|
|
|
// 发送微信通知 待付款
|
|
|
BasePatientDO patient = basePatientDao.findById(one.getPatient());
|
|
|
// 获取微信模板 smfwdwk-上门服务待付款
|
|
|
// Consult consult = consultDao.queryByRelationCode(orderId);
|
|
|
try {
|
|
|
// WechatTemplateConfig templateConfig = templateConfigDao.findByScene("template_process_feedback","fwyspf");
|
|
|
// String first = templateConfig.getFirst();
|
|
|
// first = first.replace("key1", DateUtil.dateToStr(new Date(), "yyyy-MM-dd HH:mm"));
|
|
|
// first = first .replace("key2", null != one.getDoctorName() ? one.getDoctorName() : "");
|
|
|
// org.json.JSONObject json = new org.json.JSONObject();
|
|
|
// json.put("first", first);
|
|
|
// json.put("keyword1", DateUtil.dateToStrShort(new Date()));
|
|
|
// json.put("keyword2", "服务医生评分");
|
|
|
// json.put("url", templateConfig.getUrl());
|
|
|
// json.put("remark", templateConfig.getRemark());
|
|
|
// json.put("id",orderId);
|
|
|
// //json.put("consult",consult.getCode());
|
|
|
// WlyyDoorCommentDO wlyyDoorCommentDO = this.DoorCommentDao.selectCommentDoctor(patient.getCode(),orderId);
|
|
|
// String finish="";
|
|
|
// if(wlyyDoorCommentDO!=null){
|
|
|
// finish = "0";
|
|
|
// json.put("finish",finish);
|
|
|
// }else {
|
|
|
// finish = "1";
|
|
|
// json.put("finish",finish);
|
|
|
// }
|
|
|
// pushMsgTask.putWxMsg(tokenUtils.getAccessToken(), 31, patient.getOpenid(), patient.getName(), json);
|
|
|
}catch (Exception e){
|
|
|
logger.error(e.getMessage());
|
|
|
}
|
|
|
return doorServiceOrderDO;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 根据id获取服务工单信息
|
|
|
* @param id
|
|
|
* @return
|
|
|
*/
|
|
|
public SecurityMonitoringOrderDO getDoorServiceOrderById(String id) throws Exception {
|
|
|
SecurityMonitoringOrderDO doorServiceOrder = securityMonitoringOrderDao.findOne(id);
|
|
|
if (null == doorServiceOrder) {
|
|
|
return null;
|
|
|
}
|
|
|
BasePatientDO patient = basePatientDao.findById(doorServiceOrder.getPatient());
|
|
|
if (patient != null) {
|
|
|
String sex = IdCardUtil.getSexForIdcard_new(patient.getIdcard());
|
|
|
int age = IdCardUtil.getAgeByIdcardOrBirthday(patient.getIdcard(),patient.getBirthday());
|
|
|
doorServiceOrder.setSex("1".equals(sex) ? "男" : "2".equals(sex) ? "女" : "未知");
|
|
|
doorServiceOrder.setAge(age);
|
|
|
doorServiceOrder.setPhoto(patient.getPhoto());
|
|
|
// String typeValues = this.getTypeValueByPatientCode(patient.getCode());
|
|
|
// doorServiceOrder.setTypeValue(typeValues);
|
|
|
}
|
|
|
// 获取服务次数
|
|
|
Integer count = 1;//本年服务次数 一年只能1次
|
|
|
Integer times = countPatientDoorTimes(doorServiceOrder.getPatient());//服务次数
|
|
|
// List<WlyyDoorDoctorDO> djDetailList = this.djDetailList(id,level,times);
|
|
|
// doorServiceOrder.setDjDetailList(djDetailList);
|
|
|
// List<Map<String, Object>> feeDetailDOS = this.getDoorFeeDetailGroupByStatus(id);
|
|
|
// String jsonData = this.serverPackagePriceByOrderId(id);
|
|
|
// if (null != feeDetailDOS && feeDetailDOS.size() > 0) {
|
|
|
// // 设置服务项及费用信息
|
|
|
// doorServiceOrder.setDoorFeeDetailList(feeDetailDOS);
|
|
|
// //计算扣服务包后应付的服务项费用
|
|
|
// /*Map<String, Object> map = this.countServerPackagePrice(jsonData, doorServiceOrder.getPatient());
|
|
|
// BigDecimal cashPrice = this.calculateCash(String.valueOf(map.get("cashPrice")), id, level, times);
|
|
|
// WlyyDoorServiceOrderDO wlyyDoorServiceOrderDO = this.doorServiceOrderDao.findOne(id);
|
|
|
// if(wlyyDoorServiceOrderDO.getTotalFee()!=cashPrice){
|
|
|
// wlyyDoorServiceOrderDO.setTotalFee(cashPrice);
|
|
|
// wlyyDoorServiceOrderService.save(wlyyDoorServiceOrderDO);
|
|
|
// }
|
|
|
// map.put("cashPrice", cashPrice);
|
|
|
// doorServiceOrder.setServiceCost(map);*/
|
|
|
// }
|
|
|
|
|
|
// 服务工单关联的医护人员
|
|
|
// List<Map<String, Object>> doorServiceDoctors = this.getDoorServiceDoctor(id);
|
|
|
// if (null != doorServiceDoctors && doorServiceDoctors.size() > 0) {
|
|
|
// doorServiceOrder.setDoctors(doorServiceDoctors);
|
|
|
// }
|
|
|
// 设置医生出诊费信息,先获取工单出诊医生
|
|
|
/*List<WlyyDoorDoctorDO> doorDoctorDOList = doorDoctorDao.findByOrderId(id);
|
|
|
if (doorDoctorDOList != null && doorDoctorDOList.size() > 0) {
|
|
|
Map<String,String> jobName = new HashMap<>();
|
|
|
Map<String,String> jobCode = new HashMap<>();
|
|
|
List<Integer> levels = new ArrayList<>();
|
|
|
for(WlyyDoorDoctorDO doorDoctorDO : doorDoctorDOList){
|
|
|
jobName.put(doorDoctorDO.getDoctor(),doorDoctorDO.getDoctorJobName());
|
|
|
jobName.put(doorDoctorDO.getDoctor(),doorDoctorDO.getDoctorJobCode());
|
|
|
levels.add(doorDoctorDO.getHospitalLevel());
|
|
|
}
|
|
|
List<Map<String, Object>> jobFeeList = dmJobService.getJobFeeList(jobCode, jobName, levels, times);
|
|
|
doorServiceOrder.setVisitCost(jobFeeList);
|
|
|
}*/
|
|
|
|
|
|
//获取咨询 //TODO 获取咨询
|
|
|
// Consult consult = consultDao.queryByRelationCode(id);
|
|
|
// if (null != consult) {
|
|
|
// doorServiceOrder.setSessionId(doorServiceOrder.getPatient() + "_" + consult.getCode() + "_" + doorServiceOrder.getNumber() + "_" + consult.getType());
|
|
|
// }
|
|
|
|
|
|
// 设置服务小结
|
|
|
SecurityMonitoringConclusionDO doorConclusion = this.getDoorConclusion(id);
|
|
|
doorServiceOrder.setMonitoringConclusion(doorConclusion);
|
|
|
|
|
|
|
|
|
return doorServiceOrder;
|
|
|
}
|
|
|
|
|
|
private String getRandomIntStr(){
|
|
|
Random rand = new Random();
|
|
|
int i = rand.nextInt(); //int范围类的随机数
|
|
|
i = rand.nextInt(100); //生成0-100以内的随机数
|
|
|
i = (int)(Math.random() * 100000000); //0-100以内的随机数,用Matn.random()方式
|
|
|
return String.valueOf(i);
|
|
|
}
|
|
|
|
|
|
private void setUpdateColumnInfo(SecurityMonitoringOrderDO one) {
|
|
|
one.setUpdateTime(new Date());
|
|
|
one.setUpdateUser(one.getDoctor());
|
|
|
one.setUpdateUserName(one.getDoctorName());
|
|
|
}
|
|
|
|
|
|
}
|