|
@ -1,10 +1,12 @@
|
|
|
package com.yihu.jw.care.service.lifeCare;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.care.dao.lifeCare.LifeCareCancelLogDao;
|
|
|
import com.yihu.jw.care.dao.lifeCare.LifeCareFeeDetailDao;
|
|
|
import com.yihu.jw.care.dao.lifeCare.LifeCareItemDictDao;
|
|
|
import com.yihu.jw.care.dao.lifeCare.LifeCareOrderDao;
|
|
|
import com.yihu.jw.care.service.common.OrderNoService;
|
|
|
import com.yihu.jw.care.util.MessageUtil;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
|
|
@ -21,9 +23,11 @@ import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.restmodel.ResponseContant;
|
|
|
import com.yihu.jw.restmodel.web.PageEnvelop;
|
|
|
import com.yihu.jw.util.common.IdCardUtil;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.util.entity.EntityUtils;
|
|
|
import com.yihu.jw.wechat.dao.BasePatientWechatDao;
|
|
|
import com.yihu.mysql.query.BaseJpaService;
|
|
|
import org.apache.commons.collections.CollectionUtils;
|
|
|
import org.apache.commons.collections.map.HashedMap;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
@ -70,6 +74,8 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
private BaseOrgDao baseOrgDao;
|
|
|
@Autowired
|
|
|
private BaseDoctorDao doctorDao;
|
|
|
@Autowired
|
|
|
private OrderNoService orderNoService;
|
|
|
|
|
|
/**
|
|
|
* 记录完成情况
|
|
@ -140,9 +146,10 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
sql += " WHERE a.hospital = ? group BY a.status";
|
|
|
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, hospital);
|
|
|
Map<String, Integer> map = new HashMap<>();
|
|
|
//状态 待服务 1、已完成 2 、已取消 -1
|
|
|
//状态 待服务 1、已完成 2 、已取消 -1 已签到 3
|
|
|
map.put("1",0);
|
|
|
map.put("2",0);
|
|
|
map.put("3",0);
|
|
|
map.put("-1",0);
|
|
|
int total = 0;
|
|
|
for (Map<String, Object> one:list){
|
|
@ -401,6 +408,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 申请生活照料
|
|
|
*
|
|
@ -413,16 +421,19 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
|
|
|
JSONObject result = new JSONObject();
|
|
|
JSONObject jsonObjectParam;
|
|
|
LifeCareOrderDO orderDO = null;
|
|
|
try {
|
|
|
jsonObjectParam = JSONObject.parseObject(jsonData);
|
|
|
if (jsonObjectParam.getJSONObject("order").getInteger("type")==1||jsonObjectParam.getJSONObject("order").getInteger("type")==2){
|
|
|
orderDO = EntityUtils.jsonToEntity(jsonObjectParam.get("order").toString(), LifeCareOrderDO.class);
|
|
|
Integer type = orderDO.getType();
|
|
|
if (type==1||type==2){
|
|
|
//本人或家人代发起
|
|
|
BasePatientDO patientDO = patientDao.findById(proxyPatient);
|
|
|
jsonObjectParam.put("proxyPatient",proxyPatient);
|
|
|
jsonObjectParam.put("proxyPatientName",patientDO.getName());
|
|
|
jsonObjectParam.put("proxyPatientPhone",patientDO.getMobile());
|
|
|
}
|
|
|
if (jsonObjectParam.getJSONObject("order").getInteger("type")==3) {//医生代发起
|
|
|
}else if (type==3) {
|
|
|
//医生代发起
|
|
|
BaseDoctorDO doctorDO = doctorDao.findById(proxyPatient);
|
|
|
jsonObjectParam.put("proxyPatient",proxyPatient);
|
|
|
jsonObjectParam.put("proxyPatientName",doctorDO.getName());
|
|
@ -436,17 +447,6 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
LifeCareOrderDO orderDO = null;
|
|
|
try {
|
|
|
orderDO = EntityUtils.jsonToEntity(jsonObjectParam.get("order").toString(), LifeCareOrderDO.class);
|
|
|
} catch (Exception e) {
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "生活照料工单服务基本信息:" + e.getMessage();
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
orderDO.setCreateTime(new Date());
|
|
|
orderDO.setCreateUser(orderDO.getProxyPatient());
|
|
|
orderDO.setCreateUserName(orderDO.getProxyPatientName());
|
|
|
|
|
@ -470,14 +470,8 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
BaseOrgDO orgDO = baseOrgDao.findByCode(orderDO.getHospital());
|
|
|
orderDO.setHospitalName(orgDO.getName());
|
|
|
}
|
|
|
|
|
|
orderDO.setNumber(orderNoService.getOrderNo(1));
|
|
|
orderDO.setCreateTime(new Date());
|
|
|
//判断创建生活照料类型,发起类型(1本人发起 2家人待预约 3医生代预约)
|
|
|
if(orderDO.getProxyPatient().equals(orderDO.getPatient())){
|
|
|
orderDO.setType(1);
|
|
|
}else if(!orderDO.getProxyPatient().equals(orderDO.getPatient())){
|
|
|
orderDO.setType(2);
|
|
|
}
|
|
|
this.save(orderDO);
|
|
|
result.put("orderId",orderDO.getId());
|
|
|
|
|
@ -498,7 +492,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
totalFee = new BigDecimal(0);
|
|
|
}
|
|
|
|
|
|
for ( LifeCareFeeDetailDO feeDetailDO : feeDetailDOList) {
|
|
|
for (LifeCareFeeDetailDO feeDetailDO : feeDetailDOList) {
|
|
|
try {
|
|
|
//工单主表中记录总费用
|
|
|
totalFee = totalFee.add(feeDetailDO.getFee().multiply(BigDecimal.valueOf(feeDetailDO.getNumber())));
|
|
@ -542,6 +536,30 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean orderWithFeeDelete(JSONObject jsonObjectParam,LifeCareOrderDO orderDO) {
|
|
|
BigDecimal totalFee = orderDO.getTotalFee();
|
|
|
//删除的服务项
|
|
|
JSONArray itemArray = jsonObjectParam.getJSONArray("deleteItemArr");
|
|
|
if (!CollectionUtils.isEmpty(itemArray)) {
|
|
|
List<LifeCareFeeDetailDO> list = new ArrayList<>();
|
|
|
//删除的服务项要减去服务项费用
|
|
|
BigDecimal itemFee = new BigDecimal(0);
|
|
|
for(Object oneId : itemArray) {
|
|
|
JSONObject oneIdJson = (JSONObject) oneId;
|
|
|
LifeCareFeeDetailDO doorFeeDetail = lifeCareFeeDetailDao.findOne(String.valueOf(oneIdJson.get("id")));
|
|
|
if(doorFeeDetail.getPayStatus()==0){
|
|
|
doorFeeDetail.setStatus(3);
|
|
|
doorFeeDetail.setUpdateTime(new Date());
|
|
|
list.add(doorFeeDetail);
|
|
|
itemFee = itemFee.add(doorFeeDetail.getFee().multiply(BigDecimal.valueOf(doorFeeDetail.getNumber())));
|
|
|
}
|
|
|
}
|
|
|
lifeCareFeeDetailDao.save(list);
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
public PageEnvelop getPatientOrderList(String patient, Integer status, int page, int size) {
|
|
|
page = page>0?page-1:0;
|
|
|
|
|
@ -561,4 +579,131 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 签到保存
|
|
|
* @param orderId
|
|
|
* @param signTime
|
|
|
* @param signWay
|
|
|
* @param signLocation
|
|
|
* @param signImg
|
|
|
* @return
|
|
|
*/
|
|
|
public LifeCareOrderDO signIn(String orderId, String signTime, Integer signWay, String signLocation,
|
|
|
String signImg, String twoDimensionalCode,String doctorId) throws Exception {
|
|
|
LifeCareOrderDO lifeCareOrderDO = this.lifeCareOrderDao.findOne(orderId);
|
|
|
lifeCareOrderDO.setDoctorSignTime(DateUtil.strToDate(signTime));
|
|
|
lifeCareOrderDO.setDoctorSignWay(signWay);
|
|
|
// 签到方式-2扫码时,需要去解析地址
|
|
|
lifeCareOrderDO.setDoctorSignLocation(signLocation);
|
|
|
lifeCareOrderDO.setDoctorSignImg(StringUtils.isEmpty(signImg) ? null : signImg);
|
|
|
//3 已签到
|
|
|
lifeCareOrderDO.setStatus(3);
|
|
|
BaseDoctorDO doctorDO = doctorDao.findById(doctorId);
|
|
|
lifeCareOrderDO.setUpdateTime(new Date());
|
|
|
lifeCareOrderDO.setUpdateUser(doctorId);
|
|
|
lifeCareOrderDO.setUpdateUserName(doctorDO.getName());
|
|
|
if(signWay == 4 ){//扫码签到
|
|
|
if (twoDimensionalCode.equals(lifeCareOrderDO.getNumber())){
|
|
|
lifeCareOrderDO = lifeCareOrderDao.save(lifeCareOrderDO);
|
|
|
return lifeCareOrderDO;
|
|
|
}else {
|
|
|
logger.info("扫码签到失败");
|
|
|
return null;
|
|
|
}
|
|
|
}else {
|
|
|
lifeCareOrderDO = lifeCareOrderDao.save(lifeCareOrderDO);
|
|
|
return lifeCareOrderDO;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 生活照料代预约-- 废弃用原来的接口
|
|
|
* @param jsonData
|
|
|
* @param doctorCode
|
|
|
* @return
|
|
|
*/
|
|
|
@Transactional
|
|
|
public JSONObject proxyCreate(String jsonData,String doctorCode) {
|
|
|
JSONObject result = new JSONObject();
|
|
|
JSONObject jsonObjectParam;
|
|
|
try {
|
|
|
jsonObjectParam = JSONObject.parseObject(jsonData);
|
|
|
} catch (Exception e) {
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "参数转换成JSON对象异常:" + e.getMessage();
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
LifeCareOrderDO orderDO = null;
|
|
|
try {
|
|
|
orderDO = EntityUtils.jsonToEntity(jsonObjectParam.get("order").toString(), LifeCareOrderDO.class);
|
|
|
} catch (Exception e) {
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "生活照料工单服务基本信息:" + e.getMessage();
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
if(StringUtils.isEmpty(orderDO.getPatient())){
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
String failMsg = "当前服务对象code为空,请联系管理员检查参数!patient = " + orderDO.getPatient();
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
//医生代预约
|
|
|
orderDO.setType(3);
|
|
|
BaseDoctorDO doctorDO = doctorDao.findById(doctorCode);
|
|
|
orderDO.setProxyPatient(doctorCode);
|
|
|
orderDO.setProxyPatientName(doctorDO.getName());
|
|
|
orderDO.setProxyPatientPhone(doctorDO.getMobile());
|
|
|
//判断工单是否已存在,新建或者编辑
|
|
|
if(StringUtils.isBlank(orderDO.getId())) {
|
|
|
//已取消的订单也可以申请
|
|
|
boolean bool = lifeCareOrderDao.existsByPatientAndStatusIn(orderDO.getPatient(),
|
|
|
new Integer[]{LifeCareOrderDO.Status.waitForAccept.getType()
|
|
|
});
|
|
|
|
|
|
if(bool){
|
|
|
String failMsg = "当前服务对象存在未完成的生活照料,请先完成该服务!";
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
logger.error(failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
orderDO.setNumber(orderNoService.getOrderNo(1));
|
|
|
orderDO.setHospital(jsonObjectParam.getJSONObject("hospital").get("code").toString());
|
|
|
orderDO.setCreateTime(new Date());
|
|
|
orderDO.setCreateUser(orderDO.getProxyPatient());
|
|
|
orderDO.setCreateUserName(orderDO.getProxyPatientName());
|
|
|
}else {
|
|
|
LifeCareOrderDO serviceOrderDO = lifeCareOrderDao.findOne(orderDO.getId());
|
|
|
// 删除出诊医生或服务项
|
|
|
Boolean b = this.orderWithFeeDelete(jsonObjectParam, serviceOrderDO);
|
|
|
if(b){
|
|
|
String failMsg = "删除服务项失败!";
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.fail);
|
|
|
result.put(ResponseContant.resultMsg, failMsg);
|
|
|
return result;
|
|
|
}
|
|
|
orderDO.setNumber(serviceOrderDO.getNumber());
|
|
|
orderDO.setHospital(serviceOrderDO.getHospital());
|
|
|
orderDO.setUpdateTime(new Date());
|
|
|
orderDO.setUpdateUser(orderDO.getProxyPatient());
|
|
|
orderDO.setUpdateUserName(orderDO.getProxyPatientName());
|
|
|
}
|
|
|
orderDO.setStatus(2);
|
|
|
orderDO.setType(3);
|
|
|
this.save(orderDO);
|
|
|
result.put("orderId",orderDO.getId());
|
|
|
//新增工单与服务项费用关联关系
|
|
|
if (orderWithPackageItemFeeAdd(result, jsonObjectParam, orderDO,doctorCode)) {return result;}
|
|
|
|
|
|
result.put(ResponseContant.resultFlag, ResponseContant.success);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
}
|