package com.cn.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.cn.domain.Prep;
import com.cn.service.PrepService;
import com.cn.service.impl.PrepServiceImpl;

/**
 * 
 * @ClassName: PayServlet
 * @Description: 用户付款的Servlet
 * @author: ljy
 * @date: 2019年9月28日 下午10:38:37
 */
public class PayServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * 处理GET请求的方法。
     * 当客户端发送GET请求到此Servlet时，这个方法会被调用。
     * @param request HttpServletRequest对象，包含客户端请求信息。
     * @param response HttpServletResponse对象，用于发送响应到客户端。
     * @throws ServletException 可能抛出的Servlet异常。
     * @throws IOException 可能抛出的IO异常。
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 获取请求参数temp，用于判断是否是从支付宝支付接口回跳来的
        String temp = request.getParameter("temp");

        // 判断是否是从支付宝支付接口回跳来的
        if (temp != null && "1".equals(temp)) {
            // 获取订单ID
            Integer prepId = Integer.valueOf(request.getParameter("prepId"));
            // 创建PrepService的实现类对象，用于访问订单相关的业务逻辑
            PrepService prepService = new PrepServiceImpl();
            // 根据订单ID获取订单对象
            Prep prep = prepService.getById(prepId);

            // 设置付款状态为真
            prep.setWay(true);
            // 更新订单对象
            int recordNumber = prepService.update(prep);

            // 获取PrintWriter对象，用于向客户端发送响应
            PrintWriter out = response.getWriter();
            // 判断更新是否成功
            if (recordNumber == 1) {
                // 如果成功，弹出提示并跳转到会员中心
                out.write("<script>alert('付款成功！');" + "window.location.href='pages/user/myCenter/myCenter.jsp'</script>");
            } else {
                // 如果失败，弹出提示并跳转到我的订单页面
                out.write("<script>alert('很抱歉,付款失败！');" + "window.location.href='MyPrepServlet'</script>");
            }

            // 关闭PrintWriter对象
            out.close();
        }

        // 获取订单ID
        Integer prepId = Integer.valueOf(request.getParameter("prepId"));
        // 创建PrepService的实现类对象
        PrepService prepService = new PrepServiceImpl();
        // 根据订单ID获取订单对象
        Prep prep = prepService.getById(prepId);

        // 将订单对象设置为request属性，以便在支付页面中可以访问
        request.setAttribute("prep", prep);
        // 转发请求到支付接口调用的Servlet
        request.getRequestDispatcher("AlipayServlet").forward(request, response);

        // 支付接口调用 end

		
		/* 沙箱服务器在每周日12点至周一12点维护，如调用接口失效 ，1.将本段解除注释，2.将 上面代码全部注释
		Integer prepId = Integer.valueOf(request.getParameter("prepId")); PrepService
		prepService = new PrepServiceImpl(); 
		Prep prep = prepService.getById(prepId); 
		prep.setWay(true); int recordNumber = prepService.update(prep);
		
		PrintWriter out = response.getWriter(); 
		if(recordNumber == 1) {
			out.write("<script>alert('付款成功！');" +
				"window.location.href='MyPrepServlet'</script>"); 
		} else {
			out.write("<script>alert('很抱歉,付款失败！');" +
				"window.location.href='MyPrepServlet'</script>"); }
		
		out.close();
		*/
        
    }

    /**
     * 处理POST请求的方法。
     * 当客户端发送POST请求时，这个方法会被调用。
     * @param request HttpServletRequest对象，包含客户端请求信息。
     * @param response HttpServletResponse对象，用于发送响应到客户端。
     * @throws ServletException 可能抛出的Servlet异常。
     * @throws IOException 可能抛出的IO异常。
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        // TODO Auto-generated method stub

        doGet(request, response);
    }

}