2026-01-07 10:36:02 +08:00
|
|
|
|
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;
|
2026-03-04 17:19:44 +08:00
|
|
|
|
import com.guahao.common.annotation.CheckPatientId;
|
2026-01-07 10:36:02 +08:00
|
|
|
|
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")
|
2026-03-04 17:19:44 +08:00
|
|
|
|
@CheckPatientId(userIdParam="userId",patientIdParam = "PatientId")
|
2026-01-07 10:36:02 +08:00
|
|
|
|
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<Reserve8Vo> 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")
|
2026-03-04 17:19:44 +08:00
|
|
|
|
@CheckPatientId(userIdParam="userId",patientIdParam = "PatientId")
|
2026-01-07 10:36:02 +08:00
|
|
|
|
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<Map<Object, Object>> 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")
|
2026-03-04 17:19:44 +08:00
|
|
|
|
@CheckPatientId(userIdParam="userId",patientIdParam = "PatientId")
|
2026-01-07 10:36:02 +08:00
|
|
|
|
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<String, Object> 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) {
|
2026-03-04 16:23:41 +08:00
|
|
|
|
//可改造成callable多线程,返回结果判断,加快速度
|
2026-01-07 10:36:02 +08:00
|
|
|
|
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<String, Object> refundResult = null;
|
|
|
|
|
|
// 2. 执行退费
|
|
|
|
|
|
refundResult = reserve8Service.MOP_BillsPayedRefund(vo);
|
|
|
|
|
|
log.info("退费结果: {}", refundResult + ",判断结果:" + refundResult.get("return_code"));
|
2026-02-06 14:43:41 +08:00
|
|
|
|
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) {
|
2026-01-07 10:36:02 +08:00
|
|
|
|
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<Reserve8Vo> 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<String,Object> 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<String, Object> 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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|