package com.guahao.h5.reserve.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.guahao.WebLog; import com.guahao.api.walkinto.service.PayService; import com.guahao.common.Exception.LogicException; import com.guahao.common.annotation.CheckPatientId; import com.guahao.common.response.ErrorCode; import com.guahao.common.response.ResponseResult; import com.guahao.common.util.SoapUtil; import com.guahao.common.util.XmlUtil; import com.guahao.h5.hsjc.service.TXSendMsg; import com.guahao.h5.reserve.mapper.Reserve8Mapper; import com.guahao.h5.reserve.service.Reserve8Service; import com.guahao.h5.reserve.vo.HisRefundVo; import com.guahao.h5.reserve.vo.Reserve8Vo; import com.guahao.h5.reserve.vo.ReservePresentVo; import com.guahao.h5.reserve.vo.TextVO; import com.guahao.h5.token.service.TokenService; import com.guahao.h5.token.vo.TokenVo; import com.guahao.h5.user.model.UserVo; // sang:注释icbc部分 // import com.icbc.api.utils.IcbcSignature; // import com.icbc.api.utils.WebUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.math.BigDecimal; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 预约挂号接口 */ @RestController @RequestMapping("/reserve") public class ReserveController { private Logger log = LoggerFactory.getLogger(ReserveController.class); @Autowired private Reserve8Service reserve8Service; @Autowired private Reserve8Mapper reserve8Mapper; @Autowired private TokenService tokenService; @Autowired private TXSendMsg txSendMsg; /** * * 取待取消列表 */ @RequestMapping(value = "/opRegisterCancelList", method = RequestMethod.POST) @WebLog(description = "opRegisterCancelList") @CheckPatientId(userIdParam="userId",patientIdParam = "PatientId") public Object opRegisterCancelList(Integer userId,String token, String PatientId, Integer SearchType, String StartTime, String EndTime) { try { int retToken = getUserToken(userId, token); if (retToken != 0) { List lstvo = reserve8Mapper.getCancelList(PatientId, 0); JSONArray array= JSONArray.parseArray(JSON.toJSONString(lstvo)); return ResponseResult.success(token, array); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * * 取消挂号,退费 */ @RequestMapping(value = "/opRegisterCancel", method = RequestMethod.POST) @WebLog(description = "opRegisterCancel") public Object opRegisterCancel(Integer userId,String token, String hisorderno) { try { int retToken = getUserToken(userId, token); if (retToken != 0) { String xml = reserve8Service.MOP_RegisterCancel(hisorderno); if(xml.equals("success")){ return ResponseResult.success(xml); }else{ return ResponseResult.failure(ErrorCode.ERROR_LOGIC); } } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * * 查询挂号记录 */ @RequestMapping(value = "/opRegisterListQuery", method = RequestMethod.POST) @WebLog(description = "opRegisterListQuery") @CheckPatientId(userIdParam="userId",patientIdParam = "PatientId") public Object opRegisterListQuery(Integer userId,String token, String PatientId, Integer SearchType, String StartTime, String EndTime) { try { int retToken = getUserToken(userId, token); if (retToken != 0) { String xml = reserve8Service.MOP_OutpRegisterListQuery(PatientId, SearchType, StartTime, EndTime); // 解析报文 // List> maps = XmlUtil.parseQueryGH(xml); // log.info("opRegisterListQuery:{}", maps); // if (mapCreate.get("returncode").toString().equals("1")) { // // log.debug("opRegisterListQuery" + " success"); // // if (mapCreate.get("FlowNo") != null) { // // // // // } // } return ResponseResult.success(xml); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * * 退费查询 */ @RequestMapping(value = "/opBillsPayedRefundQuery", method = RequestMethod.POST) @WebLog(description = "opBillsPayedRefundQuery") @CheckPatientId(userIdParam="userId",patientIdParam = "PatientId") public Object opBillsPayedRefundQuery(Integer userId,String token, String PatientId, String FlowNo) { try { int retToken = getUserToken(userId, token); if (retToken != 0) { String xml = reserve8Service.MOP_BillsPayedRefundQuery(PatientId, FlowNo); // 解析报文 Map mapCreate = XmlUtil.parse(xml); if (mapCreate.get("returncode").toString().equals("1")) { log.debug("opRegisterListQuery" + " success"); // if (mapCreate.get("FlowNo") != null) { // // // } } return ResponseResult.success(xml); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * * 挂号的退费退号方法 */ @RequestMapping(value = "/opBillsPayedRefund", method = RequestMethod.POST) @WebLog(description = "opBillsPayedRefund") public Object opBillsPayedRefund(HisRefundVo vo) { //可改造成callable多线程,返回结果判断,加快速度 try { log.info("退费vo: {}", vo); // 1. 执行退号 String registRefundResult = reserve8Service.MOP_RegistRefund(vo); log.info("退号结果: {}", registRefundResult); if (!registRefundResult.equals("success")) { log.warn("退号失败,结果: {}", registRefundResult); throw new RuntimeException("退号失败:" + registRefundResult); } } catch (Exception e) { log.error("退号操作失败", e); return ResponseResult.sysError("退号失败: " + e.getMessage()); } try { Map refundResult = null; // 2. 执行退费 refundResult = reserve8Service.MOP_BillsPayedRefund(vo); log.info("退费结果: {}", refundResult + ",判断结果:" + refundResult.get("return_code")); boolean isSuccess = refundResult != null && ("1".equals(refundResult.get("returncode")) || "SUCCESS".equals(refundResult.get("return_code"))) && ("success".equals(refundResult.get("refundResult")) || "SUCCESS".equals(refundResult.get("result_code"))); if (!isSuccess) { log.warn("退费接口返回失败: {}", refundResult); // 将失败内容存到数据库,进行每1小时一次退款任务 reserve8Service.insertRefundError(vo); throw new RuntimeException("退费失败,请检查支付系统"); } // 3. 返回成功 return ResponseResult.success(vo.getToken(), refundResult); } catch (Exception e) { log.error("退费操作失败", e); reserve8Service.insertRefundError(vo); return ResponseResult.sysError("退费失败: " + e.getMessage()); } } /** * 动态介绍 * 预约和挂号须知查询 */ @RequestMapping(value = "/getMedicalNotice", method = RequestMethod.GET) @WebLog(description = "getMedicalNotice") public Object getMedicalNotice(Integer userId, String token,String type) { try { int retToken = getUserToken(userId, token); if (retToken != 0) { TextVO vo = reserve8Service.getMedicalNotice(type); return ResponseResult.success(vo); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 动态介绍 * 预约和挂号须知查询 */ @RequestMapping(value = "/getReservePresent", method = RequestMethod.POST) @WebLog(description = "getReservePresent") public Object getReservePresent(ReservePresentVo vo) { try { int retToken = getUserToken(vo.getUserId(), vo.getToken()); if (retToken != 0) { ReservePresentVo resultList = reserve8Service.getReservePresent(vo.getId()); return ResponseResult.success(vo.getToken(), resultList); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 预约挂号状态 */ @RequestMapping(value = "/getReserveList", method = RequestMethod.POST) @WebLog(description = "getReserveList") public Object getReserveList(Reserve8Vo vo) { try { int retToken = getUserToken(vo.getUserId(), vo.getToken()); if (retToken != 0) { List resultList = reserve8Service.getReserveList(vo); return ResponseResult.success(vo.getToken(), resultList); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 预约详情 */ @RequestMapping(value = "/getReserveDetail", method = RequestMethod.POST) @WebLog(description = "getReserveDetail") public Object getReserveDetail(Reserve8Vo vo) { try { int retToken = getUserToken(vo.getUserId(), vo.getToken()); if (retToken != 0) { Map resultList = reserve8Service.getReserveDetail(vo); return ResponseResult.success(vo.getToken(), resultList); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 锁号 消号 第一步 */ @RequestMapping(value = "/opAppRegist", method = RequestMethod.POST) @WebLog(description = "opAppRegist") public Object opAppAppoint( Reserve8Vo vo, HttpServletRequest request) { try { log.info("锁号:"+vo); int retToken = getUserToken(vo.getUserId(), vo.getToken()); if (retToken != 0) { Map result = reserve8Service.opAppAppoint(vo, request); return ResponseResult.success(vo.getToken(), result); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 取消预约写入 */ @RequestMapping(value = "/opAppCancelAppoint", method = RequestMethod.POST) @WebLog(description = "opAppCancelAppoint") public Object opAppCancelAppoint(Reserve8Vo vo) { try { int retToken = getUserToken(vo.getUserId(), vo.getToken()); if (retToken != 0) { int resultInt = reserve8Service.opAppCancelAppoint(vo); return ResponseResult.success(vo.getToken(), resultInt); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 取消挂号写入 */ @RequestMapping(value = "/opAppCancelRegist", method = RequestMethod.POST) @WebLog(description = "opAppCancelRegist") public Object opAppCancelRegist(Reserve8Vo vo) { try { int retToken = getUserToken(vo.getUserId(), vo.getToken()); if (retToken != 0) { int resultInt = reserve8Service.opAppCancelRegist(vo); return ResponseResult.success(vo.getToken(), resultInt); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * 挂号支付回调 */ @RequestMapping(value="/callback", method = RequestMethod.POST) public void callback(HttpServletRequest request, HttpServletResponse response){ reserve8Service.callback(request,response); } /** * 挂号微信手动推送 */ @RequestMapping(value = "/WxSend", method = RequestMethod.POST) @WebLog(description = "WxSend") public Object WxSend(Integer userId, String token,String openid,String name,String ksmc,String ysmc,String registerdate,String timeinterval) { try { int retToken = getUserToken(userId, token); if (retToken != 0) { txSendMsg.SendNotifyGH("挂号成功", openid, name, ksmc, ysmc, registerdate+" "+timeinterval, "XQQAg3l56vhHDYj1grFNxF5lgL6yz8_zXuQdRBk_nMc"); return ResponseResult.success(); } else { return ResponseResult.sysLoginError(); } } catch (Exception e) { return ResponseResult.sysError(e.getLocalizedMessage()); } } /** * token验证 */ private int getUserToken(Integer userId, String token) throws Exception { TokenVo tokenVo = new TokenVo(userId, token); int result = tokenService.getUserToken(tokenVo); return result; } }