package com.ynxbd.common.action; import com.ynxbd.common.action.base.BaseAction; import com.ynxbd.common.bean.HisRecipe; import com.ynxbd.common.bean.NatRecord; import com.ynxbd.common.bean.Patient; import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.pay.Recipe; import com.ynxbd.common.dao.NatRecordDao; import com.ynxbd.common.dao.PatientDao; import com.ynxbd.common.dao.his.HisRecipeDao; import com.ynxbd.common.dao.peis.PeisDao; import com.ynxbd.common.helper.common.DateHelper; import com.ynxbd.common.helper.his.HisEnum; import com.ynxbd.common.helper.his.HisHelper; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; import com.ynxbd.common.service.RecipeService; import com.ynxbd.wx.config.WeChatConfig; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 处方 * * @Author wsq * @Date 2020/11/6 9:45 * @Copyright @ 2020 云南新八达科技有限公司 All rights reserved. */ @Slf4j @Namespace("/recipe") public class RecipeAction extends BaseAction { /** * 获取已缴费项目 */ @Action("getPayedList") public Result getPayedList(String patientId, String personNo, String begDate, String endDate) { log.info("[处方]已缴费项目查询 patientId={}, begDate={}, endDate={}, personNo-{}", patientId, begDate, endDate, personNo); patientId = getDecodeString(patientId); if (patientId == null || begDate == null || endDate == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } List recipeList = new HisRecipeDao().getPaidRecipeList(patientId, begDate, endDate, personNo); return Result.success(recipeList); } /** * 查询已缴费项目 */ @Action("getRxPaidList") public Result getRxPaidList(String patientId, String personNo, String begDate, String endDate) { log.info("[处方]查询已缴费项目 patientId={}, begDate={}, endDate={}, personNo-{}", patientId, begDate, endDate, personNo); patientId = getDecodeString(patientId); if (patientId == null || begDate == null || endDate == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } if (!ObjectUtils.isEmpty(personNo)) { personNo = getDecodeString(personNo); if (personNo == null) { return Result.error(ResultEnum.PARAM_IS_INVALID); } } List hisRecipeList = new HisRecipeDao().getPaidRecipeList(patientId, begDate, endDate, personNo); List dataList = new ArrayList<>(); HisRecipe treatItem; List groupList; for (HisRecipe item : hisRecipeList) { String treatNum = item.getMzNum(); if (ObjectUtils.isEmpty(treatNum)) { continue; } String execDate = item.getExecDate(); item.setTreatNum(treatNum); HisRecipe findTreat = dataList.stream().filter(o -> o.getTreatNum().equals(treatNum)).findFirst().orElse(null); if (findTreat == null) { treatItem = new HisRecipe(); treatItem.setTreatNum(treatNum); treatItem.setDate(execDate); groupList = new ArrayList<>(); groupList.add(item); treatItem.setGroupList(groupList); dataList.add(treatItem); } else { if (findTreat.getGroupList() == null) { findTreat.setGroupList(new ArrayList<>()); } Boolean isGreaterThan = DateHelper.leftGreaterThanRight(execDate, findTreat.getDate(), null); if (isGreaterThan != null && isGreaterThan) { findTreat.setDate(execDate); } findTreat.getGroupList().add(item); } } return Result.success(dataList); } /** * 获取未缴费项目 */ @Action("getRxUnPayList") public Result getRxUnPayList(String patientId, String personNo, String begDate, String endDate) { log.info("[处方]未缴费项目查询 patientId={}, personNo={}, begDate={}, endDate={}", patientId, personNo, begDate, endDate); patientId = getDecodeString(patientId); if (patientId == null || begDate == null || endDate == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } if (!ObjectUtils.isEmpty(personNo)) { personNo = getDecodeString(personNo); if (personNo == null) { return Result.error(ResultEnum.PARAM_IS_INVALID); } } int days = DateHelper.intervalDays(begDate, endDate, true); List hisRecipes = new HisRecipeDao().getUnPayRecipe(patientId, personNo, days); List resultList = new ArrayList<>(); for (HisRecipe hisRecipe : hisRecipes) { hisRecipe.setTreatNum(hisRecipe.getMzNum()); if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd) && !"1".equals(hisRecipe.getSTDFlag()) && (!"1".equals(hisRecipe.getInternetHospFlag()) || "1".equals(hisRecipe.getYJSAuditFlag()))) { resultList.add(hisRecipe); } } return Result.success(resultList); } /** * 获取未缴费项目(旧) */ @Action("getUnPayList") public Result getUnPayList(String patientId, String personNo, String begDate, String endDate) { log.info("[处方]未缴费项目查询 patientId={}, personNo={}, begDate={}, endDate={}", patientId, personNo, begDate, endDate); patientId = getDecodeString(patientId); if (patientId == null || begDate == null || endDate == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } int days = DateHelper.intervalDays(begDate, endDate, true); List hisRecipes = new HisRecipeDao().getUnPayRecipe(patientId, personNo, days); List resultList = new ArrayList<>(); for (HisRecipe hisRecipe : hisRecipes) { if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd) && !"1".equals(hisRecipe.getSTDFlag()) && (!"1".equals(hisRecipe.getInternetHospFlag()) || "1".equals(hisRecipe.getYJSAuditFlag()))) { resultList.add(hisRecipe); } } return Result.success(resultList); } /** * 获取所以未缴费订单 包括互联网医院未审核,医保双通道订单 * * @param patientId patientId * @param begDate 开始时间 * @param endDate 结束时间 */ @Action("getMedicalRecipe") public Result getMedicalRecipe(String patientId, String begDate, String endDate) { log.info("[处方]未缴费项目查询 patientId={}", patientId); patientId = getDecodeString(patientId); if (patientId == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } int days = DateHelper.intervalDays(begDate, endDate, true); List hisRecipes = new HisRecipeDao().getUnPayRecipe(patientId, "", days); List resultList = new ArrayList<>(); for (HisRecipe hisRecipe : hisRecipes) { if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd)) { resultList.add(hisRecipe); } } return Result.success(resultList); } /** * 将订单上传到医保双通道 * * @param treatNum 门诊号 * @param personID 身份证 * @param recipes 处方号合集,中间用英文逗号隔开 */ @Action("uploadMedicalRecipe") public Result uploadMedicalRecipe(String treatNum, String personID, String recipes) { log.info("[互联网医院]处方医保双通道流转 treatNum={},personNo-{}, recipes={}", treatNum, personID, recipes); if (treatNum == null || personID == null || recipes == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } return new HisRecipeDao().uploadMedicalRecipe(treatNum, personID, recipes); } // /** // * 获取未缴费项目 // */ // @Action("getDevUnPayList") // public Result getDevUnPayList(String patientId, String begDate, String endDate ) { // log.info("[处方]未缴费项目查询 patientId={}, begDate={}, endDate={}", patientId, begDate, endDate); // if (patientId == null || begDate == null || endDate == null) { // return Result.error(ResultEnum.PARAM_IS_DEFECT); // } // // int days = DateHelper.intervalDays(begDate, endDate, true); // List hisRecipes = new DevHisRecipeDao().getDevUnPayRecipe(patientId, days); // // List resultList = new ArrayList<>(); // for (HisRecipe hisRecipe : hisRecipes) { // if (hisRecipe.getDate() != null && DateHelper.inDateRange(begDate, endDate, hisRecipe.getDate(), DateHelper.DateEnum.yyyy_MM_dd)) { // resultList.add(hisRecipe); // } // } // return Result.success(resultList); // } /** * 预约体检his缴费 * * @param treatNum 体检号 * @param payMoney 缴费金额 * @param payDate 缴费日期 * @param payTime 缴费时间 * @param bankTransNo bankTransNo * @param outTranNo outTranNo */ @Action("peisHisPay") public Result peisHisPay(String treatNum, String payMoney, String payDate, String payTime, String bankTransNo, String outTranNo) { log.info("[体检预约请求his计费]treatNum-{},payMoney-{},payDate-{},payTime-{},bankTransNo-{},outTranNo-{}", treatNum, payMoney, payDate, payTime, bankTransNo, outTranNo); if ("".equals(treatNum) || "".equals(outTranNo)) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } Recipe recipe = new PeisDao().selectByOutTradeNo(outTranNo); if (recipe == null) { return Result.error(ResultEnum.DATA_NOT_FOUND); } if (!recipe.getBankTransNo().equals(bankTransNo)) { log.info("[体检预约请求his计费]体检系统跟微信支付系统两笔订单不一致,体检系统:bankTransNo-{},微信系统:bankTransNo-{}", bankTransNo, recipe.getBankTransNo()); return Result.error(ResultEnum.DATA_IS_WRONG); } Map params = new HashMap<>(); params.put("MZNum", "0"); params.put("PatientID", "0"); params.put("TJBH", treatNum); params.put("GroupFlag", "1"); params.put("PayMoney", payMoney); params.put("PayDate", payDate); params.put("PayTime", payTime); params.put("TransNo", recipe.getTradeNo()); params.put("PayDeviceID", "app"); params.put("PayWay", MerchantEnum.WX.HIS_PAY_WAY); params.put("BankTransNo", bankTransNo); // 商户订单号 params.put("OpenId", recipe.getOpenid()); params.put("Token", WeChatConfig.TOKEN); JsonResult result = HisHelper.getJsonResult(HisEnum.AP_Pay_Invoice, params, MerchantEnum.WX); return result.success() ? Result.success(result) : Result.error(result.getMessage()); } /** * 标准物价查询 * * @param pageNum 页码 * @param pageSize 每页数量 * @param pyCode 拼音码 * @param type 类型 {1:检查治疗; 2:药品材料; 99:全部} * @param groupFlag 组套标识 { 0:不含组套; 1:包含组套 } * @return 结果 */ @Action("getStandardPrice") public Result getStandardPrice(Integer pageNum, Integer pageSize, String pyCode, String type, String groupFlag) { return new RecipeService().getStandardPrice(pageNum, pageSize, pyCode, type, groupFlag); } /** * 添加核酸检测记录(德宏) */ @Action("addNatRecord") public Result addNatRecord() { String openid = getString("openid"); String patientId = getString("patientId"); if (patientId == null || openid == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } Boolean isRepeat = getBoolean("isRepeat"); // 开启重复填写检查 if (isRepeat == null) isRepeat = false; NatRecordDao natRecordDao = new NatRecordDao(); if (isRepeat && natRecordDao.hasRecord(patientId, DateHelper.getCurDate())) { return Result.success(); } String temperature = getString("temperature"); // 体温 String country = getString("country"); // 国籍 String greenCode = getString("greenCode"); // 绿码情况 String tripCode = getString("tripCode"); // 行程码情况 String symptom = getString("symptom"); // 症状 String info = getString("info"); log.info("[核酸检测]记录 country={}, temperature={}, greenCode={}, tripCode={}, symptom={}", country, temperature, greenCode, tripCode, symptom); if (temperature == null || greenCode == null || tripCode == null) { return Result.error(ResultEnum.PARAM_IS_DEFECT); } Patient patient = new PatientDao().selectByOpenidAndPatientId(openid, patientId); if (patient == null) { return Result.error(ResultEnum.PATIENT_NOT_FOUND); } NatRecord natRecord = new NatRecord(); natRecord.setOperateUser("蓝旗"); natRecord.setPatientId(patientId); natRecord.setIdCardNo(patient.getIdCardNo()); natRecord.setName(patient.getName()); natRecord.setTel(patient.getTel()); natRecord.setSex(patient.getSex()); // natRecord.setCountry(country); natRecord.setTemperature(temperature); natRecord.setGreenCode(greenCode); natRecord.setTripCode(tripCode); natRecord.setSymptom(symptom); // natRecord.setInfo(info); boolean isInsert = natRecordDao.insert(natRecord); if (!isInsert) { log.info("[核酸检测] 记录信息失败 patientId={}, openid={}", patientId, openid); return Result.error(); } return Result.success(); } // /** // * 核酸检测支付 // */ // @Action("payNat") // public Result payNat() { // String patientId = getString("patientId"); // Boolean isDoubleCollect = getBoolean("isDoubleCollect"); // 是否双采 // if (StringUtils.isEmpty(patientId)) { // return Result.error(ResultEnum.PARAM_IS_DEFECT); // } // // // 开申请单 // JsonResult JsonResult = new HisRecipeDao().payNat(patientId, isDoubleCollect); // if (JsonResult.isTimeout()) { // 请求超时 // return Result.error(JsonResult.getMessage()); // } // // String mzNum = JsonResult.getDataMapString("MZNum"); // String recipeId = JsonResult.getDataMapString("RecipeId"); // if (ObjectUtils.isEmpty(recipeId) || ObjectUtils.isEmpty(mzNum)) { // return Result.error(JsonResult.getMessage()); // } // // if (!JsonResult.success()) { // return Result.error(ResultEnum.RECIPE_REPEAT_BILL, null, JsonResult.getMessage()); // } // // try { // Map resultData = new HashMap<>(); // resultData.put("recipeId", Long.toString(Long.parseLong(recipeId) + 1000000000L)); // resultData.put("treatNum", mzNum); // return Result.success(resultData); // } catch (Exception e) { // ErrorHelper.println(e); // } // return Result.error(); // } }