Explorar o código

挂号在线退费功能开发完成

hurugang %!s(int64=2) %!d(string=hai) anos
pai
achega
e37725818b

+ 109 - 25
src/main/java/cn/hnthyy/thmz/controller/api/MedicalViewApiController.java

@@ -1991,10 +1991,10 @@ public class MedicalViewApiController {
             mzyReqrec.setUnitCode(mzyRequest.getUnitCode());
             mzyReqrec.setChargeType(mzyRequest.getChargeType());
             mzyReqrec.setDoctorCode(mzyRequest.getDoctorCode());
-            Date now= new Date();
-            if(DateUtil.fomart(now,"yyyy-MM-dd").equals(DateUtil.fomart(mzyRequest.getRequestDay(),"yyyy-MM-dd"))){
+            Date now = new Date();
+            if (DateUtil.fomart(now, "yyyy-MM-dd").equals(DateUtil.fomart(mzyRequest.getRequestDay(), "yyyy-MM-dd"))) {
                 mzyReqrec.setRequestDay(now);
-            }else {
+            } else {
                 mzyReqrec.setRequestDay(mzyRequest.getRequestDay());
             }
             if (WX.equals(mzyReqrec.getPaymode())) {
@@ -2770,35 +2770,66 @@ public class MedicalViewApiController {
     }
 
 
-
-
-
     /**
-     * 查询未缴费的挂号列表
+     * 查询挂号列表
      *
+     * @param patientId 患者id
+     * @param payMark   列表类型  5 未缴费  0 已缴费   1 已退费
      * @return
      */
-    @RequestMapping(value = "/listMzyReqrecUnPay", method = {RequestMethod.GET})
-    public Map<String, Object> listMzyReqrecUnPay(@RequestParam("patientId") String patientId) {
+    @RequestMapping(value = "/listMzyReqrec", method = {RequestMethod.GET})
+    public Map<String, Object> listMzyReqrec(@RequestParam("patientId") String patientId, @RequestParam("payMark") String payMark, HttpServletRequest httpServletRequest) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
-            if(patientId==null || StringUtils.isBlank(patientId)){
+            String ip = HttpUtil.getIPAddress(httpServletRequest);
+            WhiteList whiteList = whiteListService.queryByIpAddress(ip);
+            if (whiteList == null) {
+                resultMap.put("resultCode", -1);
+                resultMap.put("message", "当前请求来源未在白名单中【" + ip + "】");
+                return resultMap;
+            }
+            if (patientId == null || StringUtils.isBlank(patientId)) {
                 resultMap.put("resultCode", -1);
                 resultMap.put("message", "患者ID不能为空");
                 return resultMap;
             }
-            MzyReqrecPageDto mzyReqrecPageDto =new MzyReqrecPageDto();
-            MzyReqrec mzyReqrec= new MzyReqrec();
-            mzyReqrec.setVisitedMark(YesNoEnum.NO.code);
-            mzyReqrec.setCancelMark(YesNoEnum.NO.code);
+            MzyReqrecPageDto mzyReqrecPageDto = new MzyReqrecPageDto();
+            MzyReqrec mzyReqrec = new MzyReqrec();
             mzyReqrecPageDto.setMzyReqrec(mzyReqrec);
-            mzyReqrecPageDto.setPageSize(200);
             mzyReqrecPageDto.setPatientIds(Arrays.asList(patientId));
-            mzyReqrecPageDto.setBeginTime(DateUtil.pase("2023-03-01:00:00:00","yyyy-MM-dd HH:mm:ss"));
-            mzyReqrecPageDto.setPayMark(PayMarkEnum.NO_CHARGE.code);
+            mzyReqrecPageDto.setPageSize(2000);
             resultMap.put("resultCode", 0);
             resultMap.put("message", "查询挂号信息成功");
-            resultMap.put("data", mzyReqrecService.getMzyReqrecVo(mzyReqrecService.queryMzyReqrecWithPage(mzyReqrecPageDto)));
+            if (PayMarkEnum.NO_CHARGE.code.equals(payMark)) {
+                mzyReqrec.setVisitedMark(YesNoEnum.NO.code);
+                mzyReqrec.setCancelMark(YesNoEnum.NO.code);
+                mzyReqrecPageDto.setBeginTime(DateUtil.pase("2023-03-01:00:00:00", "yyyy-MM-dd HH:mm:ss"));
+                mzyReqrecPageDto.setPayMark(PayMarkEnum.NO_CHARGE.code);
+                resultMap.put("data", mzyReqrecService.getMzyReqrecVo(mzyReqrecService.queryMzyReqrecWithPage(mzyReqrecPageDto)));
+                return resultMap;
+            }
+            if (PayMarkEnum.CHARGED.code.equals(payMark)) {
+                mzyReqrec.setOpId(whiteList.getOpId());
+                mzyReqrec.setVisitedMark(YesNoEnum.NO.code);
+                mzyReqrec.setCancelMark(YesNoEnum.NO.code);
+                List<MzyReqrec> chargedLIst = mzyReqrecService.queryMzyReqrecWithPage(mzyReqrecPageDto);
+                mzyReqrec.setVisitedMark(YesNoEnum.YES.code);
+                if (chargedLIst == null) {
+                    chargedLIst = mzyReqrecService.queryMzyReqrecWithPage(mzyReqrecPageDto);
+                } else {
+                    chargedLIst.addAll(mzyReqrecService.queryMzyReqrecWithPage(mzyReqrecPageDto));
+                }
+                resultMap.put("data", mzyReqrecService.getMzyReqrecVo(chargedLIst));
+                return resultMap;
+            }
+            if (PayMarkEnum.RETURN_PREMIUM.code.equals(payMark)) {
+                mzyReqrec.setOpId(whiteList.getOpId());
+                mzyReqrec.setCancelMark(YesNoEnum.YES.code);
+                resultMap.put("data", mzyReqrecService.getMzyReqrecVo(mzyReqrecService.queryMzyReqrecWithPage(mzyReqrecPageDto)));
+                return resultMap;
+            }
+            resultMap.put("resultCode", -1);
+            resultMap.put("message", "查询挂号信息失败,请求状态异常");
             return resultMap;
         } catch (Exception e) {
             e.printStackTrace();
@@ -2810,28 +2841,27 @@ public class MedicalViewApiController {
     }
 
 
-
     /**
      * 查询挂号信息明细
      *
      * @return
      */
     @RequestMapping(value = "/getMzyReqrecInfo", method = {RequestMethod.GET})
-    public Map<String, Object> getMzyReqrecInfo(@RequestParam("patientId") String patientId,@RequestParam("times") Integer times) {
+    public Map<String, Object> getMzyReqrecInfo(@RequestParam("patientId") String patientId, @RequestParam("times") Integer times) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
-            if(patientId==null || StringUtils.isBlank(patientId)){
+            if (patientId == null || StringUtils.isBlank(patientId)) {
                 resultMap.put("resultCode", -1);
                 resultMap.put("message", "患者ID不能为空");
                 return resultMap;
             }
-            if(times==null){
+            if (times == null) {
                 resultMap.put("resultCode", -1);
                 resultMap.put("message", "患者就诊次数不能为空");
                 return resultMap;
             }
-            MzyReqrec mzyReqrec=mzyReqrecService.queryMzyReqrecByPatientIdAndTimes(patientId,times);
-            if(mzyReqrec==null){
+            MzyReqrec mzyReqrec = mzyReqrecService.queryMzyReqrecByPatientIdAndTimes(patientId, times);
+            if (mzyReqrec == null) {
                 resultMap.put("resultCode", -1);
                 resultMap.put("message", "未查询到符合条件的挂号详情");
                 return resultMap;
@@ -2906,7 +2936,7 @@ public class MedicalViewApiController {
             } else {
                 mzyReqrec.setPaymode(Constants.ZZZFB);
             }
-            int num = mzyReqrecService.payRegistration(mzyReqrec.getPatientId(), mzyReqrec.getTimes(), mzyReqrec.getPaymode(), mzyReqrec.getPsordnum(), mzyReqrec.getAgtordnum(), mzyReqrec.getAmount(),whiteList.getOpId());
+            int num = mzyReqrecService.payRegistration(mzyReqrec.getPatientId(), mzyReqrec.getTimes(), mzyReqrec.getPaymode(), mzyReqrec.getPsordnum(), mzyReqrec.getAgtordnum(), mzyReqrec.getAmount(), whiteList.getOpId());
             if (num == 1) {
                 resultMap.put("resultCode", 0);
                 resultMap.put("message", "支付未缴费的挂号记录成功");
@@ -2924,4 +2954,58 @@ public class MedicalViewApiController {
         }
     }
 
+
+    /**
+     * 自助挂号退费
+     *
+     * @return
+     */
+    @RequestMapping(value = "/cancelReqrec", method = {RequestMethod.POST})
+    public Map<String, Object> cancelReqrec(@RequestBody MzyReqrec mzyReqrec, HttpServletRequest httpServletRequest) {
+        Map<String, Object> resultMap = new HashMap<>();
+        try {
+            String ip = HttpUtil.getIPAddress(httpServletRequest);
+            WhiteList whiteList = whiteListService.queryByIpAddress(ip);
+            if (whiteList == null) {
+                resultMap.put("resultCode", -1);
+                resultMap.put("message", "当前请求来源未在白名单中【" + ip + "】");
+                return resultMap;
+            }
+            if (mzyReqrec == null) {
+                resultMap.put("resultCode", -1);
+                resultMap.put("message", "自助挂号退费参数不能为空");
+                return resultMap;
+            }
+            if (StringUtils.isBlank(mzyReqrec.getPatientId())) {
+                resultMap.put("resultCode", -1);
+                resultMap.put("message", "病人id不能为空");
+                return resultMap;
+            }
+            if (mzyReqrec.getTimes() == null) {
+                resultMap.put("resultCode", -1);
+                resultMap.put("message", "病人挂号次数不能为空");
+                return resultMap;
+            }
+            mzyReqrec.setCancelMark(YesNoEnum.YES.code);
+            int num = mzyReqrecService.modifyMzyReqrec(mzyReqrec, whiteList.getOpId());
+            if (num == 1) {
+                resultMap.put("resultCode", 0);
+                resultMap.put("message", "自助挂号退费成功");
+                return resultMap;
+            }
+            resultMap.put("resultCode", -1);
+            resultMap.put("message", "自助挂号退费失败");
+            return resultMap;
+        } catch (MzException e) {
+            resultMap.put("resultCode", -1);
+            resultMap.put("message", e.getMessage());
+            return resultMap;
+        } catch (Exception e) {
+            e.printStackTrace();
+            resultMap.put("resultCode", -1);
+            resultMap.put("message", "自助挂号退费失败,系统出错,请联系管理员");
+            log.error("自助挂号退费失败,系统异常,错误信息{}", e);
+            return resultMap;
+        }
+    }
 }

+ 5 - 1
src/main/java/cn/hnthyy/thmz/controller/mz/MzyReqrecController.java

@@ -566,7 +566,7 @@ public class MzyReqrecController {
                 return resultMap;
             }
             mzyReqrec.setOpId(tokenUser.getUserIdCode());
-            int num = mzyReqrecService.modifyMzyReqrec(mzyReqrec, tokenUser);
+            int num = mzyReqrecService.modifyMzyReqrec(mzyReqrec, tokenUser.getUserIdCode());
             if (num == 1) {
                 resultMap.put("code", 0);
                 resultMap.put("message", "更新挂号信息成功");
@@ -575,6 +575,10 @@ public class MzyReqrecController {
             resultMap.put("code", -1);
             resultMap.put("message", "更新挂号信息失败");
             return resultMap;
+        } catch (MzException e) {
+            resultMap.put("code", -1);
+            resultMap.put("message", e.getMessage());
+            return resultMap;
         } catch (Exception e) {
             e.printStackTrace();
             resultMap.put("code", -1);

+ 2 - 1
src/main/java/cn/hnthyy/thmz/service/his/mz/MzyReqrecService.java

@@ -56,9 +56,10 @@ public interface MzyReqrecService {
      * 修改挂号信息
      *
      * @param mzyReqrec
+     * @param opId
      * @return
      */
-    int modifyMzyReqrec(MzyReqrec mzyReqrec, User tokenUser);
+    int modifyMzyReqrec(MzyReqrec mzyReqrec, String opId) throws MzException;
 
     /**
      * 按照病人id 和次数查询病人挂号信息

+ 23 - 16
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/MzyReqrecServiceImpl.java

@@ -157,7 +157,7 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
             throw new MzException("当前号别不存在,请先设置!");
         }
         MzyRequest mzyRequest = mzyRequestMapper.selectMzyRequestById(mzyReqrecPageDto.getMzyRequestId());
-        if(mzyRequest==null){
+        if (mzyRequest == null) {
             throw new MzException("挂号对应的排班不存在!");
         }
         pediatricAgeLimit(mzPatientMi, mzyRequest);
@@ -194,7 +194,7 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
         Integer clinicStatus = ClinicStatusEnum.REGISTRATION_UN_PAY.code;
         BigDecimal totalAmount = mzyReqrec.getTotalAmount();
         //是否可以直接入库,收费员直接挂号 或者医生创建的免挂号的挂号申请可以直接写入挂号信息,其他的需要成为未缴费的挂号记录
-        boolean canPay=PayMarkEnum.CHARGED.code.equals(mzyReqrecPageDto.getPayMark()) || (PayMarkEnum.NO_CHARGE.code.equals(mzyReqrecPageDto.getPayMark()) && BigDecimal.ZERO.compareTo(totalAmount) == 0);
+        boolean canPay = PayMarkEnum.CHARGED.code.equals(mzyReqrecPageDto.getPayMark()) || (PayMarkEnum.NO_CHARGE.code.equals(mzyReqrecPageDto.getPayMark()) && BigDecimal.ZERO.compareTo(totalAmount) == 0);
         if (canPay) {
             clinicStatus = ClinicStatusEnum.REGISTRATION.code;
             mzfzPatientOrderMapper.insertMzfzPatientOrder(mzfzPatientOrder);
@@ -222,33 +222,34 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
             sendAlarmMessage(mzyReqrec, mzyRequest);
         } else {
             //发送预约挂号未缴费的信息,推送缴费链接
-            orderStatusChangeService.orderStatusChange(mzyReqrec.getPatientId() + "_" +times +  "," + OrderStatusEnum.REGISTRATION_UN_PAY.code);
+            orderStatusChangeService.orderStatusChange(mzyReqrec.getPatientId() + "_" + times + "," + OrderStatusEnum.REGISTRATION_UN_PAY.code);
         }
         return 1;
     }
 
     /**
      * 儿科年龄校验
+     *
      * @param mzPatientMi
      * @param mzyRequest
      * @throws MzException
      */
     private void pediatricAgeLimit(MzPatientMi mzPatientMi, MzyRequest mzyRequest) throws MzException {
-        ZdUnitCode zdUnitCode= zdUnitCodeService.queryByCode(mzyRequest.getUnitCode());
-        if(zdUnitCode!=null && StringUtils.isNotBlank(zdUnitCode.getParentCode()) && Constants.EK_CODE.equals(zdUnitCode.getParentCode())){
-            Config config= configMapper.selectConfigByKey("pediatric_age_limit");
-            if(config!=null && StringUtils.isNotBlank(config.getConfigValue())){
-                Integer age=mzPatientMi.getAgeForYear();
-                if(age==null){
+        ZdUnitCode zdUnitCode = zdUnitCodeService.queryByCode(mzyRequest.getUnitCode());
+        if (zdUnitCode != null && StringUtils.isNotBlank(zdUnitCode.getParentCode()) && Constants.EK_CODE.equals(zdUnitCode.getParentCode())) {
+            Config config = configMapper.selectConfigByKey("pediatric_age_limit");
+            if (config != null && StringUtils.isNotBlank(config.getConfigValue())) {
+                Integer age = mzPatientMi.getAgeForYear();
+                if (age == null) {
                     throw new MzException("患者年龄为空,请先完善患者基础信息!");
                 }
-                Integer configValue=99999;
+                Integer configValue = 99999;
                 try {
-                    configValue= Integer.valueOf(config.getConfigValue());
-                }catch (Exception e){
+                    configValue = Integer.valueOf(config.getConfigValue());
+                } catch (Exception e) {
                     e.printStackTrace();
                 }
-                if(age>configValue){
+                if (age > configValue) {
                     throw new MzException("患者年龄超限,无法继续在儿科相关科室就诊!");
                 }
             }
@@ -564,7 +565,7 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
-    public int modifyMzyReqrec(MzyReqrec mzyReqrec, User tokenUser) {
+    public int modifyMzyReqrec(MzyReqrec mzyReqrec, String opId) throws MzException {
         if (YesNoEnum.YES.code.equals(mzyReqrec.getCancelMark())) {
             //此时是退号,需要把就诊信息也标记成退号
             MzVisitTable mzVisitTable = new MzVisitTable();
@@ -574,6 +575,12 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
             mzVisitTableMapper.updateMzVisitTable(mzVisitTable);
             //将原记录查出,并设置相关字段为负数,新增该记录,用于费用统计
             MzyReqrec dbMzyReqrec = mzyReqrecMapper.selectMzyReqrecByPatientIdAndTimes(mzyReqrec.getPatientId(), mzyReqrec.getTimes(), "mzy_reqrec");
+            if (dbMzyReqrec == null) {
+                throw new MzException("需要退号的挂号记录不存在!");
+            }
+            if (YesNoEnum.YES.code.equals(dbMzyReqrec.getVisitedMark())) {
+                throw new MzException("您操作的挂号记录已就诊,无法退费!");
+            }
             ReqrecRequestRelation reqrecRequestRelation = reqrecRequestRelationMapper.selectReqrecRequestRelation(dbMzyReqrec.getSerialNo());
             if (reqrecRequestRelation != null && reqrecRequestRelation.getRequestId() != null) {
                 mzyRequestMapper.updateLeftNumById(reqrecRequestRelation.getRequestId());
@@ -585,10 +592,10 @@ public class MzyReqrecServiceImpl implements MzyReqrecService {
             dbMzyReqrec.setSerialNo(-dbMzyReqrec.getSerialNo());
             dbMzyReqrec.setCancelMark(mzyReqrec.getCancelMark());
             dbMzyReqrec.setOpDay(new Date());
-            dbMzyReqrec.setOpId(tokenUser.getUserIdCode());
+            dbMzyReqrec.setOpId(opId);
             dbMzyReqrec.setDcountNo(YesNoEnum.NO.code);
             dbMzyReqrec.setClosingDate(null);
-            if (!Constants.BYJZ.equals(dbMzyReqrec.getPaymode())) {
+            if (!(Constants.BRZZJF_CODE.equals(opId) || Constants.BYJZ.equals(dbMzyReqrec.getPaymode()))) {
                 dbMzyReqrec.setPaymode(Constants.CASH);
             }
             mzyReqrecMapper.insertMzyReqrec(dbMzyReqrec);