|
@ -6,18 +6,11 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeam;
|
|
|
import com.yihu.wlyy.entity.message.Message;
|
|
|
import com.yihu.wlyy.entity.patient.Patient;
|
|
|
import com.yihu.wlyy.entity.patient.prescription.Prescription;
|
|
|
import com.yihu.wlyy.entity.patient.prescription.PrescriptionDiagnosis;
|
|
|
import com.yihu.wlyy.entity.patient.prescription.PrescriptionExpressage;
|
|
|
import com.yihu.wlyy.entity.patient.prescription.PrescriptionLog;
|
|
|
import com.yihu.wlyy.repository.doctor.DoctorMappingDao;
|
|
|
import com.yihu.wlyy.entity.patient.prescription.*;
|
|
|
import com.yihu.wlyy.repository.doctor.DoctorTeamDao;
|
|
|
import com.yihu.wlyy.repository.message.MessageDao;
|
|
|
import com.yihu.wlyy.repository.patient.PatientDao;
|
|
|
import com.yihu.wlyy.repository.prescription.PrescriptionDao;
|
|
|
import com.yihu.wlyy.repository.prescription.PrescriptionDiagnosisDao;
|
|
|
import com.yihu.wlyy.repository.prescription.PrescriptionDispensaryCodeDao;
|
|
|
import com.yihu.wlyy.repository.prescription.PrescriptionExpressageDao;
|
|
|
import com.yihu.wlyy.repository.prescription.*;
|
|
|
import com.yihu.wlyy.service.BaseService;
|
|
|
import com.yihu.wlyy.service.third.jw.JwPrescriptionService;
|
|
|
import com.yihu.wlyy.task.PushMsgTask;
|
|
@ -27,10 +20,13 @@ import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.orm.jpa.JpaTransactionManager;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.TransactionDefinition;
|
|
|
import org.springframework.transaction.TransactionStatus;
|
|
|
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
|
|
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Created by chenweida on 2017/7/27.
|
|
@ -40,6 +36,9 @@ public class PrescriptionService extends BaseService {
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(PrescriptionService.class);
|
|
|
|
|
|
@Value("${wechat.wechat_base_url}")
|
|
|
private String wechat_base_url;
|
|
|
|
|
|
@Autowired
|
|
|
private PrescriptionDao prescriptionDao;
|
|
|
@Autowired
|
|
@ -55,15 +54,17 @@ public class PrescriptionService extends BaseService {
|
|
|
@Autowired
|
|
|
private JwPrescriptionService jwPrescriptionService;
|
|
|
@Autowired
|
|
|
private DoctorMappingDao doctorMappingDao;
|
|
|
@Autowired
|
|
|
private PrescriptionDiagnosisDao prescriptionDiagnosisDao;
|
|
|
@Value("${wechat.wechat_base_url}")
|
|
|
private String wechat_base_url;
|
|
|
@Autowired
|
|
|
private PrescriptionDispensaryCodeDao prescriptionDispensaryCodeDao;
|
|
|
|
|
|
@Autowired
|
|
|
private DoctorTeamDao doctorTeamDao;
|
|
|
@Autowired
|
|
|
private PrescriptionInfoDao prescriptionInfoDao;
|
|
|
@Autowired
|
|
|
private JpaTransactionManager transactionManager;
|
|
|
|
|
|
@Autowired
|
|
|
private com.yihu.wlyy.util.CommonUtil CommonUtil;
|
|
|
|
|
|
|
|
|
/**
|
|
@ -75,6 +76,26 @@ public class PrescriptionService extends BaseService {
|
|
|
return prescriptionDao.findByCode(prescriptionCode);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* redis 消息队列
|
|
|
* @param message
|
|
|
*/
|
|
|
public void redisMessage(String message){
|
|
|
logger.info("redis_onMessage...:"+message);
|
|
|
//this.unsubscribe();
|
|
|
try{
|
|
|
JSONObject json = JSONObject.parseObject(message);
|
|
|
String title = json.getString("title");
|
|
|
if("dispensingComplete".equals(title)){//配药完成
|
|
|
//药品配送完成,提醒取药
|
|
|
String prescriptionCode = json.getString("prescription");
|
|
|
dispensingComplete(prescriptionCode);
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
logger.error("redis_error...",e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 配药完成
|
|
|
* @param code
|
|
@ -215,19 +236,19 @@ public class PrescriptionService extends BaseService {
|
|
|
// "yszjdj":"医师诊金级别","bqbm00":"病情编码","sfygwd":"是否医改网点"}
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("yyksbm",zyCfinfoObj.getString("VISIT_DEPT"));//医生科室编号
|
|
|
jsonObject.put("bcsfcs",1);//本次收费次数
|
|
|
jsonObject.put("bcsfcs","1");//本次收费次数
|
|
|
jsonObject.put("yszjhm",zyCfinfoObj.getString("VISIT_IDENTITY_CARD_NO"));//医生证件号码
|
|
|
jsonObject.put("ysxm00",prescription.getDoctorName());//医生姓名
|
|
|
jsonObject.put("mzlb00",zyCfinfoObj.getString("INSUR_DISP_REGISTER_TYPE"));//门诊类别---普通门诊默认为101
|
|
|
jsonObject.put("sfydgh","N");//是否药店挂号,默认为N,不是药店挂号
|
|
|
jsonObject.put("bcghcs",1);//本次挂号次数
|
|
|
jsonObject.put("bcghcs","1");//本次挂号次数
|
|
|
jsonObject.put("ghksmc",prescription.getDeptName());//挂号科室名称
|
|
|
jsonObject.put("mzlsh0","");//医保挂号流水号
|
|
|
jsonObject.put("ghfy00",0);//挂号费用
|
|
|
jsonObject.put("ghfy00","0");//挂号费用
|
|
|
jsonObject.put("bqbm00","");//病情编码---可为空,不传递
|
|
|
jsonObject.put("sfygwd","N");//是否医改网点--默认为否
|
|
|
jsonObject.put("yszjdj",zyCfinfoObj.getString("INSUR_DOCTOR_RANK"));//医师诊金级别
|
|
|
jsonObject.put("cfxms0",zySettleDetailList.size());//明细上传数量
|
|
|
jsonObject.put("cfxms0",""+zySettleDetailList.size());//明细上传数量
|
|
|
json.put("recipeContent",jsonObject);
|
|
|
|
|
|
|
|
@ -250,7 +271,7 @@ public class PrescriptionService extends BaseService {
|
|
|
// "sptxbm":"商品条形编码","xmmc00":"项目名称","fpxmbh":"发票项目编号","xmsl00":"项目数量","ypyl00":"药品用量","qyzldw":"取药单位","xmdw00":"项目单位",
|
|
|
// "jx0000":"剂型"}
|
|
|
|
|
|
for (int j= 0; i < zySettleDetailList.size(); j++) {
|
|
|
for (int j= 0; j < zySettleDetailList.size(); j++) {
|
|
|
JSONObject zySettleDetailObj = zySettleDetailList.getJSONObject(j);
|
|
|
|
|
|
JSONObject j2 = new JSONObject();
|
|
@ -258,11 +279,19 @@ public class PrescriptionService extends BaseService {
|
|
|
j2.put("xmmc00",zySettleDetailObj.getString("INSUR_ITEM_NAME"));//项目名称
|
|
|
j2.put("fpxmbh","");//发票项目编号
|
|
|
j2.put("sfybxm",zySettleDetailObj.getString("INSUR_FLAG"));//是否医保项目
|
|
|
j2.put("xmdj00",zySettleDetailObj.getString("INSUR_ITEM_PRICE"));//项目单价
|
|
|
|
|
|
Double _price = Double.parseDouble(zySettleDetailObj.getString("INSUR_ITEM_PRICE"));
|
|
|
Integer infoprice = CommonUtil.doubleToInt(_price);
|
|
|
j2.put("xmdj00",String.valueOf(infoprice));//项目单价
|
|
|
|
|
|
j2.put("xmdw00",zySettleDetailObj.getString("INSUR_ITEM_UNIT_NAME"));//项目单位
|
|
|
j2.put("xmgg00",zySettleDetailObj.getString("INSUR_ITEM_SPEC"));//项目规格(医保)
|
|
|
j2.put("xmsl00",zySettleDetailObj.getString("ITEM_QUANTITY"));//项目数量
|
|
|
j2.put("xmje00",zySettleDetailObj.getString("COST"));//项目金额
|
|
|
|
|
|
Double _cost = Double.parseDouble(zySettleDetailObj.getString("COST"));
|
|
|
Integer infocost = CommonUtil.doubleToInt(_cost);
|
|
|
j2.put("xmje00",String.valueOf(infocost));//项目金额
|
|
|
|
|
|
j2.put("ysxm00",zySettleDetailObj.getString("APPLY_OPERATOR_NAME"));//医生姓名
|
|
|
j2.put("sptxbm","");//商品条形编码
|
|
|
j2.put("yppl00",zySettleDetailObj.getString("FREQUENCY"));//药品频率
|
|
@ -286,4 +315,78 @@ public class PrescriptionService extends BaseService {
|
|
|
return json;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
*从待结算列表获取药品明细和总金额,更新到处方药品明细表
|
|
|
*@author huangwenjie
|
|
|
*@date 2017/8/16 19:15
|
|
|
*/
|
|
|
public void getPerscriptionInfoCostFromPayInfo(String prescriptionCode){
|
|
|
try {
|
|
|
//根据挂号号获取处方明细
|
|
|
Prescription prescription = prescriptionDao.findByCode(prescriptionCode);
|
|
|
|
|
|
Map<String,String> zyInfoCodeAndCost = new HashMap<>();
|
|
|
|
|
|
//根据医保卡号和挂号号从基卫获取待结算明细
|
|
|
String result = jwPrescriptionService.getDispUnSettleFeeInfoList(prescription.getSsc(),prescription.getVisitNo());
|
|
|
if(StringUtils.isNotBlank(result)){
|
|
|
|
|
|
JSONObject jwobj = JSON.parseObject(result);
|
|
|
JSONObject zyCfinfo = jwobj.getJSONObject("data");
|
|
|
Integer code = zyCfinfo.getInteger("CODE");
|
|
|
|
|
|
if( 1 == code){
|
|
|
|
|
|
JSONArray zyCfinfoListReturnData = zyCfinfo.getJSONArray("returnData");
|
|
|
JSONArray zyCfinfoList = zyCfinfoListReturnData.getJSONArray(0);
|
|
|
for (int i = 0; i < zyCfinfoList.size(); i++) {
|
|
|
//支付明细
|
|
|
JSONArray zySettleDetailList = zyCfinfoList.getJSONObject(i).getJSONArray("SETTLE_DETAIL");
|
|
|
for (int j= 0; j < zySettleDetailList.size(); j++) {
|
|
|
JSONObject zySettleDetailObj = zySettleDetailList.getJSONObject(j);
|
|
|
|
|
|
//药品编码
|
|
|
String zyinfoKey = zySettleDetailObj.getString("INSUR_ITEM_CODE");
|
|
|
//总金额
|
|
|
String cost = zySettleDetailObj.getString("COST");
|
|
|
|
|
|
if(StringUtils.isNotBlank(zyinfoKey)){
|
|
|
zyInfoCodeAndCost.put(zyinfoKey,cost);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}else{
|
|
|
String errormessage = zyCfinfo.getString("MESSAGE");
|
|
|
throw new Exception(errormessage);
|
|
|
}
|
|
|
}else {
|
|
|
throw new Exception("请求基卫接口报错,无数据返回!");
|
|
|
}
|
|
|
|
|
|
if(!zyInfoCodeAndCost.keySet().isEmpty()){
|
|
|
|
|
|
//使用事务控制批量更新
|
|
|
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
|
|
|
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); // 事物隔离级别,开启新事务
|
|
|
TransactionStatus status = transactionManager.getTransaction(def); // 获得事务状态
|
|
|
try {
|
|
|
|
|
|
for (String infoCode : zyInfoCodeAndCost.keySet()) {
|
|
|
Double _cost = Double.parseDouble(zyInfoCodeAndCost.get(infoCode));
|
|
|
Integer infocost = CommonUtil.doubleToInt(_cost);
|
|
|
prescriptionInfoDao.updateStatus(infoCode,infocost);
|
|
|
}
|
|
|
//事务提交
|
|
|
transactionManager.commit(status);
|
|
|
} catch (Exception ex) {
|
|
|
//报错事务回滚
|
|
|
transactionManager.rollback(status);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}catch (Exception e){
|
|
|
logger.info("从待结算列表获取药品明细和总金额失败:"+e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|