diff --git a/src/main/java/com/ynxbd/common/TestA.java b/src/main/java/com/ynxbd/common/TestA.java index 71ab2f4..911d850 100644 --- a/src/main/java/com/ynxbd/common/TestA.java +++ b/src/main/java/com/ynxbd/common/TestA.java @@ -137,8 +137,7 @@ public class TestA { public static void main(String[] args) { - System.out.println(new BigDecimal("0.101").movePointRight(2).intValueExact()); - System.out.println(new BigDecimal("0.100").movePointRight(2).toString()); + // System.out.println(DateHelper.dateFormatDate("20260831100304", DateHelper.DateEnum.yyyyMMddHHmmss, DateHelper.DateEnum.yyyy_MM_dd_HH_mm_ss)); // XKChargeOrRefund info = new XKChargeOrRefund(); // info.setVisitNo("111"); diff --git a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java index 062a601..9948eab 100644 --- a/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/MedicalAction.java @@ -467,9 +467,10 @@ public class MedicalAction extends BaseAction { // 成功返回 Result.respXml(MedRespHelper.respOk(WxMedConfig.PAY_KEY)); + String outTradeNo = notifyInfo.getHospOutTradeNo(); String openid = notifyInfo.getOpenid(); String bankTransNo = notifyInfo.getMedTransId(); - String outTradeNo = notifyInfo.getHospOutTradeNo(); + String payInfo = notifyInfo.getInfo(); BigDecimal totalFee = notifyInfo.getTotalFee(); String payDate = notifyInfo.getPayDate(); diff --git a/src/main/java/com/ynxbd/common/action/pay/PayAction.java b/src/main/java/com/ynxbd/common/action/pay/PayAction.java index 3b9abcd..9492f8b 100644 --- a/src/main/java/com/ynxbd/common/action/pay/PayAction.java +++ b/src/main/java/com/ynxbd/common/action/pay/PayAction.java @@ -12,11 +12,13 @@ import com.ynxbd.common.config.interceptor.AesDecode; import com.ynxbd.common.dao.SelfHelpDao; import com.ynxbd.common.dao.his.HisRecipeDao; import com.ynxbd.common.dao.sys.SysUserDao; -import com.ynxbd.common.helper.common.*; +import com.ynxbd.common.helper.common.ErrorHelper; +import com.ynxbd.common.helper.common.HttpHelper; +import com.ynxbd.common.helper.common.JwtHelper; +import com.ynxbd.common.helper.common.QRCodeHelper; import com.ynxbd.common.helper.rsa.RSAHelper; import com.ynxbd.common.helper.xbd.XbdConfigHelper; import com.ynxbd.common.his.HisConfig; -import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; diff --git a/src/main/java/com/ynxbd/common/action/xk/XKAction.java b/src/main/java/com/ynxbd/common/action/xk/XKAction.java index 3e88020..807a3c1 100644 --- a/src/main/java/com/ynxbd/common/action/xk/XKAction.java +++ b/src/main/java/com/ynxbd/common/action/xk/XKAction.java @@ -1,23 +1,35 @@ package com.ynxbd.common.action.xk; +import cn.hutool.core.util.IdcardUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.ynxbd.common.action.base.BaseAction; +import com.ynxbd.common.action.pay.PEnum; +import com.ynxbd.common.bean.Dept; +import com.ynxbd.common.bean.enums.MerchantEnum; import com.ynxbd.common.bean.his.HisTreat; +import com.ynxbd.common.bean.pay.Order; import com.ynxbd.common.config.interceptor.AesDecode; +import com.ynxbd.common.dao.his.HisSysDictDao; import com.ynxbd.common.dao.his.HisTreatDao; import com.ynxbd.common.dao.his.HisXKDao; +import com.ynxbd.common.helper.common.AesMicroHelper; +import com.ynxbd.common.helper.common.JsonHelper; +import com.ynxbd.common.helper.common.ParamHelper; +import com.ynxbd.common.his.HisFactory; import com.ynxbd.common.result.JsonResult; import com.ynxbd.common.result.Result; import com.ynxbd.common.result.ResultEnum; +import com.ynxbd.common.service.PayService; import com.ynxbd.common.service.RxService; -import com.ynxbd.wx.config.WeChatConfig; import com.ynxbd.wx.wxfactory.AesWxHelper; 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.math.BigDecimal; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -153,6 +165,35 @@ public class XKAction extends BaseAction { } } + + /** + * [问诊]挂号退费 + */ + @Action("refundRegOLOrder") + public Result refundRegOLOrder(String payCode, String outTradeNo, String totalFee, String bankTransNo, String openid, String patientId, String refundDesc) { + MerchantEnum merchantEnum = MerchantEnum.findEnumByCode(payCode); + if (merchantEnum == null) { + return Result.error(ResultEnum.PAY_TYPE_NOT_SUPPORT); + } + bankTransNo = AesMicroHelper.decode(bankTransNo); + outTradeNo = AesMicroHelper.decode(outTradeNo); + totalFee = AesMicroHelper.decode(totalFee); + openid = AesMicroHelper.decode(openid); + log.info("[问诊]挂号退费 outTradeNo={}, bankTransNo={}, totalFee={}, openid={}, patientId={}", outTradeNo, bankTransNo, totalFee, openid, patientId); + if (outTradeNo == null || bankTransNo == null || openid == null || totalFee == null) { + return Result.error(ResultEnum.PARAM_IS_BLANK); + } + + BigDecimal orderTotalFee = new BigDecimal(totalFee); + String outRefundNo = HisFactory.getOutRefundNo(bankTransNo, PEnum.OL_REG); + Order orderRefund = PayService.refund(merchantEnum, outTradeNo, outRefundNo, orderTotalFee, orderTotalFee, refundDesc, new Date(), openid, patientId, null); + if (orderRefund.isSuccess()) { + return Result.success(AesMicroHelper.encode(outRefundNo)); + } + return Result.error(orderRefund.getErrorMsg()); + } + + /** * [问诊]查询问诊挂号-咨询费用[未使用] * @@ -200,4 +241,73 @@ public class XKAction extends BaseAction { // return Result.success(response); return Result.success(); } + + + @Action("addDept") + public Result addDept(String callNo, String data) { + log.info("[科室]添加 callNo={}, data={}", callNo, data); + if (ObjectUtils.isEmpty(callNo) || ObjectUtils.isEmpty(data)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + JSONObject dept = JsonHelper.parseObject(data); + if (dept == null) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + + String deptName = dept.getString("deptName"); + String deptClassCode = dept.getString("deptClassCode"); + String deptClassName = dept.getString("deptClassName"); + log.info("[科室]添加 deptName={}, deptClassCode={}, deptClassName={}", deptName, deptClassCode, deptClassName); + if (StrUtil.hasBlank(deptName, deptClassCode, deptClassName)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + JsonResult jsonResult = new HisSysDictDao().addDept(deptName, deptClassCode, deptClassName); + if (!jsonResult.success()) { + return Result.error(jsonResult.getMessage()); + } + return Result.success(); + } + + @Action("addDoctor") + public Result addDoctor(String callNo, String data) { + log.info("[医生]添加 callNo={}, data={}", callNo, data); + data = AesWxHelper.decode(data); + if (ObjectUtils.isEmpty(callNo) || ObjectUtils.isEmpty(data)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + JSONObject doctor = JsonHelper.parseObject(data); + if (doctor == null) { + return Result.error(ResultEnum.PARAM_IS_INVALID); + } + + String deptCode = doctor.getString("deptCode"); + String doctType = doctor.getString("doctType"); + String doctName = doctor.getString("doctName"); + String idCardNo = doctor.getString("idCardNo"); + String birthdate = doctor.getString("birthdate"); + String gender = doctor.getString("gender"); + String certCode = doctor.getString("certCode"); + String titleCode = doctor.getString("titleCode"); + log.info("[医生]添加 deptCode={}, doctType={}, doctName={}, idCardNo={}, gender={}, certCode={}, titleCode={}", + deptCode, doctType, doctName, ParamHelper.hideIdCardNo(idCardNo), gender, certCode, titleCode); + if (StrUtil.hasBlank(deptCode, doctType, doctName, idCardNo, gender, certCode, titleCode)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + + if (ObjectUtils.isEmpty(birthdate)) { + birthdate = IdcardUtil.getBirthByIdCard(idCardNo); + if (ObjectUtils.isEmpty(birthdate)) { + return Result.error(ResultEnum.PARAM_IS_DEFECT); + } + } + JsonResult jsonResult = new HisSysDictDao().addDoctor(deptCode, doctType, doctName, idCardNo, birthdate, gender, certCode, titleCode); + if (!jsonResult.success()) { + return Result.error(jsonResult.getMessage()); + } + return Result.success(); + } + } diff --git a/src/main/java/com/ynxbd/common/dao/his/HisSysDictDao.java b/src/main/java/com/ynxbd/common/dao/his/HisSysDictDao.java new file mode 100644 index 0000000..804de08 --- /dev/null +++ b/src/main/java/com/ynxbd/common/dao/his/HisSysDictDao.java @@ -0,0 +1,31 @@ +package com.ynxbd.common.dao.his; + +import com.ynxbd.common.his.HisEnum; +import com.ynxbd.common.his.HisFactory; +import com.ynxbd.common.result.JsonResult; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class HisSysDictDao { + public JsonResult addDept(String deptName, String deptClassCode, String deptClassName) { + return HisFactory.His().getJsonResult(HisEnum.AP_ADD_DEPT, params -> { + params.put("deptName", deptName); + params.put("deptClassCode", deptClassCode); + params.put("deptClassName", deptClassName); + }); + } + + + public JsonResult addDoctor(String deptCode, String doctType, String doctName, String idCardNo, String birthdate, String gender, String certCode, String titleCode) { + return HisFactory.His().getJsonResult(HisEnum.AP_ADD_DOCTOR, params -> { + params.put("deptCode", deptCode); // + params.put("doctType", doctType); // 1:护士; 2:医生; 3:非医技人员,4:药师 + params.put("doctName", doctName); // + params.put("idCardNo", idCardNo); // + params.put("birthdate", birthdate); // 出生日期:yyyyMMdd + params.put("gender", gender); // 性别 + params.put("certCode", certCode); // 执业证书编号 + params.put("titleCode", titleCode); // 职称资格证编号 + }); + } +} diff --git a/src/main/java/com/ynxbd/common/his/HisEnum.java b/src/main/java/com/ynxbd/common/his/HisEnum.java index 1ca733e..c80c0c9 100644 --- a/src/main/java/com/ynxbd/common/his/HisEnum.java +++ b/src/main/java/com/ynxbd/common/his/HisEnum.java @@ -3,6 +3,9 @@ package com.ynxbd.common.his; public enum HisEnum { AP_Query_Hospital("查询医院列表", "1", "AP_Query_Hospital", true), + AP_ADD_DEPT("新增科室", "19001", "UniversalInterface", true), + AP_ADD_DOCTOR("新增医生", "19002", "UniversalInterface", true), + AP_Query_Patient("[患者]获取用户绑定信息", "1001", "AP_Query_Patient", true), AP_Binding_Card("[患者]身份证绑定", "1002", "AP_Binding_Card", true), AP_UnBinding_Card("[患者]身份证解绑", "1003", "AP_UnBinding_Card", true),