Browse Source

修复缴费失败情况

hurugang 5 years ago
parent
commit
0faa65ed0e

+ 15 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/MzChargeDetailMapper.java

@@ -34,6 +34,9 @@ public interface MzChargeDetailMapper {
             "<when test='mzChargeDetail.times!=null'>",
             " and times =#{mzChargeDetail.times,jdbcType=INTEGER}",
             "</when>",
+            "<when test='mzChargeDetail.receiptNo!=null'>",
+            " and receipt_no =#{mzChargeDetail.receiptNo,jdbcType=INTEGER}",
+            "</when>",
             "<when test='mzChargeDetail.name!=null'>",
             " and name like #{mzChargeDetail.name,jdbcType=CHAR}",
             "</when>",
@@ -160,6 +163,9 @@ public interface MzChargeDetailMapper {
             "<when test='mzChargeDetail.times!=null'>",
             " and times =#{mzChargeDetail.times,jdbcType=INTEGER}",
             "</when>",
+            "<when test='mzChargeDetail.receiptNo!=null'>",
+            " and receipt_no =#{mzChargeDetail.receiptNo,jdbcType=INTEGER}",
+            "</when>",
             "<when test='mzChargeDetail.name!=null'>",
             " and name like #{mzChargeDetail.name,jdbcType=CHAR}",
             "</when>",
@@ -896,4 +902,13 @@ public interface MzChargeDetailMapper {
     List<MzChargeDetail> selectByPatientIdAndTimesAndReceiptNo(@Param("patientId") String patientId,@Param("times") Integer times,@Param("receiptNo") Integer receiptNo);
 
 
+
+    /**
+     * 查询药房
+     * @param
+     * @return
+     */
+    @Select("select  rtrim(group_no) from mz_charge_detail where  patient_id = #{patientId} and times = #{times} and receipt_no=#{receiptNo} and group_no<> '00' GROUP BY group_no")
+    List<String> selectGroupNo(MzChargeDetail mzChargeDetail);
+
 }

+ 9 - 1
src/main/java/cn/hnthyy/thmz/mapper/his/MzYjReqMapper.java

@@ -11,7 +11,7 @@ public interface MzYjReqMapper {
             "req_ward,exec_dept,req_date,inspect_part,inspect_stuff,sample_status,rtrim(print_flag) print_flag,rtrim(receive_flag) receive_flag,req_type,result_comment,sys_date," +
             "rtrim(pay_mark) pay_mark,rtrim(status_flag) status_flag,serial_no,cash_id,jy_remark,req_other_result,original_list_no,req_tz_comment,rtrim(jz_flag) jz_flag,req_studyid," +
             "percent_ft,rtrim(confirm_flag) confirm_flag,confirm_time,confirm_id,rtrim(print_flag_yj) print_flag_yj from mz_yj_req")
-    MzYjReq selectMzYjReq();
+    List<MzYjReq> selectMzYjReq(MzYjReq mzYjReq);
 
     @Insert("INSERT INTO mz_yj_req(req_no,patient_id,p_name,birth_date,times,receipt_no,order_no,item_no,p_bar_code,group_name,order_code,order_name,page_no,req_comment,req_doctor," +
             "req_ward,exec_dept,req_date,inspect_part,inspect_stuff,sample_status,print_flag,receive_flag,req_type,result_comment,sys_date,pay_mark,status_flag,serial_no,cash_id," +
@@ -139,4 +139,12 @@ public interface MzYjReqMapper {
      */
     @Delete("delete  from  mz_yj_req where patient_id =#{patientId,jdbcType=CHAR} and pay_mark = 5 ")
     int deleteNotPayYjReByPatientId(@Param("patientId") String patientId);
+
+    /**
+     * 查询执行科室
+     * @param mzYjReq
+     * @return
+     */
+    @Select("select rtrim(exec_dept) from  mz_yj_req where  patient_id = #{patientId} and times = #{times} and receipt_no=#{receiptNo} GROUP BY exec_dept ")
+    List<String> selectExecDept(MzYjReq mzYjReq);
 }

+ 87 - 7
src/main/java/cn/hnthyy/thmz/mq/ConsumerListener.java

@@ -1,20 +1,22 @@
 package cn.hnthyy.thmz.mq;
 
-import cn.hnthyy.thmz.entity.his.MzPatientMi;
-import cn.hnthyy.thmz.entity.his.MzyReqrec;
-import cn.hnthyy.thmz.entity.his.ZdUnitCode;
+import cn.hnthyy.thmz.common.Constants;
+import cn.hnthyy.thmz.entity.his.*;
 import cn.hnthyy.thmz.enums.OrderStatusEnum;
-import cn.hnthyy.thmz.service.his.MzPatientMiService;
-import cn.hnthyy.thmz.service.his.MzyReqrecService;
-import cn.hnthyy.thmz.service.his.ZdUnitCodeService;
+import cn.hnthyy.thmz.enums.PayMarkEnum;
+import cn.hnthyy.thmz.pageDto.MzChargeDetailPageDto;
+import cn.hnthyy.thmz.service.his.*;
 import cn.hnthyy.thmz.service.thmz.HaiCiAdapterService;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.jms.annotation.JmsListener;
 import org.springframework.stereotype.Component;
 
+import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * MQ监听者
@@ -29,6 +31,12 @@ public class ConsumerListener {
     private MzyReqrecService mzyReqrecService;
     @Autowired
     private ZdUnitCodeService zdUnitCodeService;
+    @Autowired
+    private EmployeeService employeeService;
+    @Autowired
+    private MzChargeDetailService mzChargeDetailService;
+    @Autowired
+    private MzYjReqService mzYjReqService;
     //就诊状态通知开关
     @Value("${sendNoticeToPatient}")
     private boolean sendNoticeToPatient;
@@ -67,7 +75,79 @@ public class ConsumerListener {
             if(zdUnitCode==null){
                 return;
             }
-            haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),zdUnitCode.getOfficePos(),new Date());
+            String doctorName ="";
+            if(StringUtils.isNotBlank(mzyReqrec.getDoctorCode())){
+                Employee employee=employeeService.queryByUserCode(mzyReqrec.getDoctorCode());
+                if(employee!=null){
+                    doctorName= employee.getEmployeeName();
+                }
+            }
+            haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),"{\"data\":{\"first\":{\"color\":\"#FF0000\",\"value\":\"您好,您已经挂号成功,请您及时前往医生诊室就诊,详情如下:\"},\"deptname\":{\"color\":\"#173177\",\"value\":\""+zdUnitCode.getName()+"\"},\"doctorname\":{\"color\":\"#173177\",\"value\":\""+doctorName+"\"},\"remark\":{\"color\":\"#FF0000\",\"value\":\"就诊地点 : "+zdUnitCode.getOfficePos()+"。\"}},\"miniprogram\":{\"appid\":\"\",\"pagepath\":\"\"},\"template_id\":\"ctMSV4jb3aHYJS0hOjTl8h9Nyrj-46XTLMnUFn6eWh8\",\"touser\":\"\",\"url\":\"\"}",new Date());
+            return;
+        }
+        if(OrderStatusEnum.SUCCESSFUL_PRESCRIPTION_PAYMENT.code.equals(status)){
+            MzChargeDetailPageDto mzChargeDetailPageDto = new MzChargeDetailPageDto();
+            MzChargeDetail mzChargeDetailParams = new MzChargeDetail(patientInfo[0],Integer.valueOf(patientInfo[1]));
+            mzChargeDetailParams.setReceiptNo(Integer.valueOf(patientInfo[2]));
+            mzChargeDetailParams.setPayMark(PayMarkEnum.CHARGED.code);
+            mzChargeDetailPageDto.setMzChargeDetail(mzChargeDetailParams);
+            List<MzChargeDetail> mzChargeDetailList=mzChargeDetailService.queryMzChargeDetailWithPage(mzChargeDetailPageDto);
+            if(mzChargeDetailList==null || mzChargeDetailList.size()==0){
+                return;
+            }
+            MzChargeDetail mzChargeDetail= mzChargeDetailList.get(0);
+            if(mzChargeDetail==null){
+                return;
+            }
+            if(StringUtils.isBlank(mzChargeDetail.getWarnDept())){
+                return;
+            }
+            ZdUnitCode zdUnitCode= zdUnitCodeService.queryByCode(mzChargeDetail.getWarnDept());
+            if(zdUnitCode==null){
+                return;
+            }
+            if (mzChargeDetail.getAmount() != null) {
+                mzChargeDetail.setAmount(mzChargeDetail.getAmount().setScale(1, BigDecimal.ROUND_HALF_UP));
+            }
+            String doctorName ="";
+            if(StringUtils.isNotBlank(mzChargeDetail.getDoctorCode())){
+                Employee employee=employeeService.queryByUserCode(mzChargeDetail.getDoctorCode());
+                if(employee!=null){
+                    doctorName= employee.getEmployeeName();
+                }
+            }
+            haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),"{\"data\":{\"first\":{\"color\":\"#FF0000\",\"value\":\"您好,您本次缴费账单消息:\"},\"keynote1\":{\"color\":\"#173177\",\"value\":\""+mzChargeDetail.getName()+"\"},\"keynote2\":{\"color\":\"#173177\",\"value\":\""+arr[0]+"\"},\"keynote3\":{\"color\":\"#173177\",\"value\":\""+mzChargeDetail.getAmount()+"\"},\"keynote4\":{\"color\":\"#173177\",\"value\":\""+doctorName+"\"},\"keynote5\":{\"color\":\"#173177\",\"value\":\""+zdUnitCode.getName()+"\"},\"keynote6\":{\"color\":\"#173177\",\"value\":\"湖南泰和医院\"},\"keynote7\":{\"color\":\"#173177\",\"value\":\""+DateFormatUtils.format(mzChargeDetail.getChargeDate(), "yyyy-MM-dd HH:mm:ss")+"\"},\"remark\":{\"color\":\"#FF0000\",\"value\":\" 缴费已成功,湖南泰和医院祝您身体健康。\"}},\"miniprogram\":{\"appid\":\"\",\"pagepath\":\"\"},\"template_id\":\"IGc0AXcLvxD7TUvtjH4EA91xQppYMKBYObHXayBNd6A\",\"touser\":\"\",\"url\":\"\"}",new Date());
+            MzYjReq mzYjReq = new MzYjReq(patientInfo[0],Integer.valueOf(patientInfo[1]));
+            mzYjReq.setReceiptNo(Integer.valueOf(patientInfo[2]));
+            List<String> execDeps= mzYjReqService.queryExecDept(mzYjReq);
+            if(execDeps==null || execDeps.size()==0){
+                return;
+            }
+            for (String str :execDeps){
+                zdUnitCode= zdUnitCodeService.queryByCode(str);
+                if(zdUnitCode==null){
+                    continue;
+                }
+                if("2010000".equals(str)){
+                    //检验
+                    haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),"{\"data\":{\"first\":{\"color\":\"#FF0000\",\"value\":\"您好,您已完成缴费,请到指定地点进行检验检查。\"},\"keyword1\":{\"color\":\"#173177\",\"value\":\""+zdUnitCode.getName()+"\"},\"keyword2\":{\"color\":\"#173177\",\"value\":\""+zdUnitCode.getOfficePos()+"\"},\"remark\":{\"color\":\"#FF0000\",\"value\":\" 抽血室在一楼急诊科,大小便标本在门诊大楼三楼医学检验科。\"}},\"miniprogram\":{\"appid\":\"\",\"pagepath\":\"\"},\"template_id\":\"amY5BinXb2IpwdXqcOyXxtZZ26XyQOIQ3j1ablSWxy0\",\"touser\":\"\",\"url\":\"\"}",new Date());
+                }else {
+                    //检查
+                    haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),"{\"data\":{\"first\":{\"color\":\"#FF0000\",\"value\":\"您好,您已完成缴费,请到指定地点进行检验检查。\"},\"keyword1\":{\"color\":\"#173177\",\"value\":\""+zdUnitCode.getName()+"\"},\"keyword2\":{\"color\":\"#173177\",\"value\":\""+zdUnitCode.getOfficePos()+"\"},\"remark\":{\"color\":\"#FF0000\",\"value\":\" 感谢您的使用。\"}},\"miniprogram\":{\"appid\":\"\",\"pagepath\":\"\"},\"template_id\":\"amY5BinXb2IpwdXqcOyXxtZZ26XyQOIQ3j1ablSWxy0\",\"touser\":\"\",\"url\":\"\"}",new Date());
+                }
+
+            }
+            List<String> groupNos=mzChargeDetailService.queryGroupNo(mzChargeDetailParams);
+            if(groupNos==null || groupNos.size()==0){
+                return;
+            }
+            for (String str :groupNos){
+                if(Constants.XY_ZCY_GROUP_NO.equals(str)){
+                    haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),"{\"data\":{\"first\":{\"color\":\"#FF0000\",\"value\":\"您好,您已完成缴费,请到指定地点取药。\"},\"keyword1\":{\"color\":\"#173177\",\"value\":\"门诊西药房\"},\"keyword2\":{\"color\":\"#173177\",\"value\":\"门诊大楼一楼\"},\"remark\":{\"color\":\"#FF0000\",\"value\":\" 感谢您的使用。\"}},\"miniprogram\":{\"appid\":\"\",\"pagepath\":\"\"},\"template_id\":\"amY5BinXb2IpwdXqcOyXxtZZ26XyQOIQ3j1ablSWxy0\",\"touser\":\"\",\"url\":\"\"}",new Date());
+                }else if(Constants.ZY_GROUP_NO.equals(str)){
+                    haiCiAdapterService.commonMessageNotice(mzPatientMi.getIcCardNo(),"{\"data\":{\"first\":{\"color\":\"#FF0000\",\"value\":\"您好,您已完成缴费,请到指定地点取药。\"},\"keyword1\":{\"color\":\"#173177\",\"value\":\"门诊中药房\"},\"keyword2\":{\"color\":\"#173177\",\"value\":\"门诊大楼一楼\"},\"remark\":{\"color\":\"#FF0000\",\"value\":\" 感谢您的使用。\"}},\"miniprogram\":{\"appid\":\"\",\"pagepath\":\"\"},\"template_id\":\"amY5BinXb2IpwdXqcOyXxtZZ26XyQOIQ3j1ablSWxy0\",\"touser\":\"\",\"url\":\"\"}",new Date());
+                }
+            }
             return;
         }
         System.out.println("Consumer收到的报文为:" + text);

+ 8 - 0
src/main/java/cn/hnthyy/thmz/service/his/MzChargeDetailService.java

@@ -283,4 +283,12 @@ public interface MzChargeDetailService {
      * @return
      */
     int savePrescription(MzPrescriptionVo mzPrescriptionVo) throws MzException;
+
+
+    /**
+     * 查询药房类型
+     * @param
+     * @return
+     */
+    List<String> queryGroupNo(MzChargeDetail mzChargeDetail);
 }

+ 8 - 0
src/main/java/cn/hnthyy/thmz/service/his/MzYjReqService.java

@@ -38,4 +38,12 @@ public interface MzYjReqService {
      */
     List<MzYjReq> queryNotRefundYjReq(String patientId,Integer times,List<String> orderCodes);
 
+
+    /**
+     * 查询执行科室
+     * @param mzYjReq
+     * @return
+     */
+    List<String> queryExecDept(MzYjReq mzYjReq);
+
 }

+ 26 - 0
src/main/java/cn/hnthyy/thmz/service/impl/his/MzChargeDetailServiceImpl.java

@@ -12,6 +12,7 @@ import cn.hnthyy.thmz.mapper.his.*;
 import cn.hnthyy.thmz.mapper.thmz.WindowsMapper;
 import cn.hnthyy.thmz.pageDto.MzChargeDetailPageDto;
 import cn.hnthyy.thmz.service.his.*;
+import cn.hnthyy.thmz.service.thmz.MqService;
 import cn.hnthyy.thmz.vo.MzDepositFileVo;
 import cn.hnthyy.thmz.vo.MzPrescriptionVo;
 import cn.hnthyy.thmz.vo.ThmzmxsrParamsVo;
@@ -67,6 +68,8 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
     private EmployeeService employeeService;
     @Autowired
     private YpZdDictService ypZdDictService;
+    @Autowired
+    private MqService mqService;
     @SuppressWarnings("all")
     @Autowired
     private MzDepositFileMapper mzDepositFileMapper;
@@ -301,6 +304,22 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         //yes 预览需要将原数据库中已存在的明细与临时生成的一起返回
         if (YesNoEnum.YES.equals(yesNo)) {
             mzChargeDetails.addAll(mzChargeDetailList);
+        }else {
+            //判断新生产的服务项是否已经入库了,如果存在相同的组合键,则重新生成iemNo
+            Set<String> tempSet = new HashSet<>();
+            StringBuffer sbf =new StringBuffer();
+            for (MzChargeDetail mz:mzChargeDetailList){
+                sbf.append(mz.getPatientId()).append("_").append(mz.getTimes()).append("_").append(receiptNo).append("_").append(mz.getOrderNo()).append("_").append(mz.getItemNo()).append("_").append(mz.getChargeItemCode());
+                tempSet.add(sbf.toString());
+                sbf.setLength(0);
+            }
+            for (MzChargeDetail mz:mzChargeDetails){
+                sbf.append(mz.getPatientId()).append("_").append(mz.getTimes()).append("_").append(receiptNo).append("_").append(mz.getOrderNo()).append("_").append(mz.getItemNo()).append("_").append(mz.getChargeItemCode());
+                if(tempSet.contains(sbf.toString())){
+                    mz.setItemNo(itemNo++);
+                }
+                sbf.setLength(0);
+            }
         }
         return mzChargeDetails;
     }
@@ -400,6 +419,8 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         if (Constants.JZ_IC_CARD.equals(mzPatientMi.getIcCardNo())) {
             mzChargeDetailMapper.updateNameByPatientIdAndTimes(mzPatientMi.getName(), mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes());
         }
+        //发送挂号成功MQ
+        mqService.sendOrderStatusChangeMessage(mzDepositFileVo.getPatientId()+"_"+mzDepositFileVo.getTimes()+"_"+receiptNo,OrderStatusEnum.SUCCESSFUL_PRESCRIPTION_PAYMENT.code);
         return receiptNo;
     }
 
@@ -824,6 +845,11 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         return 1;
     }
 
+    @Override
+    public List<String> queryGroupNo(MzChargeDetail mzChargeDetail) {
+        return mzChargeDetailMapper.selectGroupNo(mzChargeDetail);
+    }
+
 
     /**
      * 更新收费状态,并入库发药记录

+ 5 - 0
src/main/java/cn/hnthyy/thmz/service/impl/his/MzYjReqServiceImpl.java

@@ -38,4 +38,9 @@ public class MzYjReqServiceImpl implements MzYjReqService {
         return mzYjReqMapper.selectNotRefundYjReq(patientId,times,orderCodes);
     }
 
+    @Override
+    public List<String> queryExecDept(MzYjReq mzYjReq) {
+        return mzYjReqMapper.selectExecDept(mzYjReq);
+    }
+
 }