001 springboot整合mybatis-plus 商品列表 购买商品 商品详情确认订单 订单详情去支付 支付返回流水(一种商品)

文章目录

    • AlipayConfig
    • AliPayController.java
    • FlowController.java
    • OrdersController.java
    • ProductController.java
    • UserController.java
    • Flow.java
    • Orders.java
    • Product.java
    • User.java
    • FlowMapper.java
    • OrdersMapper.java
    • ProductMapper.java
    • UserMapper.java
    • AliPayServiceImpl.java
    • FlowServiceImpl.java
    • OrdersServiceImpl.java
    • ProductServiceImpl.java
    • UserServiceImpl.java
    • alipay.sql
    • application.yaml
    • flow_detail.jsp
    • index.jsp
    • order_detail.jsp
    • order_list.jsp
    • product_detail.jsp
    • product_list.jsp
    • pom.xml

AlipayConfig


package com.example.config;public class AlipayConfig {//支付宝沙箱应用IDpublic static String app_id ="";//私钥public static String merchant_private_key = "";//支付宝公钥public static String alipay_public_key = "";public static String notify_url = "";//支付宝同步通知路径,也就是当付款完毕后跳转本项目的页面,可以不是公网地址public static String return_url = "";//签名方式public static String sign_type = "RSA2";public static String charset = "utf-8";//沙箱测试public static String gatewayUrl = "";}

AliPayController.java


package com.example.controller;import com.alipay.api.AlipayApiException;
import com.example.entity.Flow;
import com.example.entity.Orders;
import com.example.service.IAliPayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;@Controller
@RequestMapping("")
public class AliPayController {@Autowiredprivate IAliPayService aliPayService;// 去支付@PostMapping("pay")@ResponseBodypublic String pay(Orders orders){return  aliPayService.pay(orders);// 调用支付宝 支付 service}//    // 同步请求 支付宝调用接受后,数据响应,展示流水信息
//    @GetMapping("alipayReturnNotice")
//    public ModelAndView alipayReturnNotice(HttpServletRequest request) throws UnsupportedEncodingException, AlipayApiException {
//        System.out.println("同步请求,支付成功后,支付宝的返回数据是:" + request);
//
//        //商户订单号
//        String orderNum = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
//        //支付宝交易号
//        String tradeNo = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
//        //付款金额
//        String payPrice = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");
//
//        System.out.println("return orderNum:" + orderNum);
//        System.out.println("return tradeNo:" + tradeNo);
//        System.out.println("return payPrice:" + payPrice);
//
//        //
//        Orders orders =  ordersService.getByNumber(orderNum);
//        Flow flow = new Flow();
//        flow.setOrderId(orders.getId());
//        flow.setOrderNum(orderNum);
//        flow.setFlowNum(tradeNo);
//        flow.setPaidAmount(payPrice);
//        flow.setCreateTime(LocalDateTime.now());
//        flow.setProductId(orders.getProductId());
//        flow.setBuyCounts(orders.getBuyCounts());
//
//        // 添加流水 , 修改订单状态
//        boolean result = flowService.saveFlow(flow,orders);
//
//        ModelAndView mav = new ModelAndView("flow_detail");
//        mav.addObject("flow",flow);
//        mav.addObject("orders",orders);
//        return  mav;
//    }
//
//    // 异步请求回调
//    @PostMapping("alipayNotifyNotice")
//    @ResponseBody
//    public String alipayNotifyNotice(HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {
//        System.out.println("异步请求,支付成功后,支付宝的返回数据是:" + request);
//        //商户订单号
//        String orderNum = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
//        //支付宝交易号
//        String tradeNo = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
//        //付款金额
//        String payPrice = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");
//
//        System.out.println("return orderNum:" + orderNum);
//        System.out.println("return tradeNo:" + tradeNo);
//        System.out.println("return payPrice:" + payPrice);
//
//        //
//        Orders orders =  ordersService.getByNumber(orderNum);
//        Flow flow = new Flow();
//        flow.setOrderId(orders.getId());
//        flow.setFlowNum(tradeNo);
//        flow.setOrderNum(orderNum);
//        flow.setPaidAmount(payPrice);
//        flow.setCreateTime(LocalDateTime.now());
//        flow.setProductId(orders.getProductId());
//        flow.setBuyCounts(orders.getBuyCounts());
//        request.setAttribute("flow",flow);
//        request.setAttribute("orders",orders);
//        return  "success";
//    }}

FlowController.java

package com.example.controller;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.config.AlipayConfig;
import com.example.entity.Flow;
import com.example.entity.Orders;
import com.example.service.IFlowService;
import com.example.service.IOrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;/*** <p>* 流水表 前端控制器* </p>** @author dd* @since 2024-04-26*/
@Controller
@RequestMapping("/flow")
public class FlowController {@Autowiredprivate IOrdersService ordersService;@Autowiredprivate IFlowService flowService;@GetMapping("alipayReturnNotice")public ModelAndView save(HttpServletRequest request) throws UnsupportedEncodingException {System.out.println("同步请求,支付成功后,支付宝的返回数据是:" + request);//商户订单号String orderNum = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");//支付宝交易号String tradeNo = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");//付款金额String payPrice = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");System.out.println("return orderNum:" + orderNum);System.out.println("return tradeNo:" + tradeNo);System.out.println("return payPrice:" + payPrice);//Orders orders =  ordersService.getByNumber(orderNum);Flow flow = new Flow();flow.setOrderId(orders.getId());flow.setOrderNum(orderNum);flow.setFlowNum(tradeNo);flow.setPaidAmount(payPrice);flow.setCreateTime(LocalDateTime.now());flow.setProductId(orders.getProductId());flow.setBuyCounts(orders.getBuyCounts());// 添加流水 , 修改订单状态boolean result = flowService.saveFlow(flow,orders);ModelAndView mav = new ModelAndView("flow_detail");mav.addObject("flow",flow);mav.addObject("orders",orders);return  mav;}}

OrdersController.java


package com.example.controller;import com.example.entity.Orders;
import com.example.entity.Product;
import com.example.service.IOrdersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;/*** <p>* 订单表 前端控制器* </p>** @author dd* @since 2024-04-26*/
@Controller
@RequestMapping("")
public class OrdersController {@Autowiredprivate IOrdersService ordersService;// 添加新订单@PostMapping("orders")public ModelAndView saveOrder(Orders orders){boolean result =  ordersService.saveOrders(orders);System.out.println("订单添加结果:" + result);System.out.println("订单信息是:" + orders);ModelAndView mav =new ModelAndView("order_detail");mav.addObject("orders",orders);return mav;}//    @GetMapping("orders")
//    // 我的所有订单
//    public ModelAndView getAllOrderByUserId(Integer userId){
//        ModelAndView mav = new ModelAndView("order_list");
//        List<Orders> ordersList = ordersService.getAllOrderByUserId(userId);
//        mav.addObject("ordersList",ordersList);
//        return mav;
//    }}

ProductController.java

package com.example.controller;import com.example.entity.Product;
import com.example.service.IProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;import java.util.List;/*** <p>* 产品表  前端控制器* </p>** @author dd* @since 2024-04-26*/
@Controller
@RequestMapping("")
public class ProductController {@Autowiredprivate IProductService productService;@GetMapping("product")public ModelAndView getAll(){ModelAndView mav = new ModelAndView("product_list");List<Product> products =   productService.list();mav.addObject("products",products);return mav;}@GetMapping("product/{id}")public ModelAndView getById(@PathVariable("id")Integer proId){ModelAndView mav = new ModelAndView("product_detail");Product product =   productService.getById(proId);mav.addObject("product",product);return mav;}
}

UserController.java


package com.example.controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.stereotype.Controller;/*** <p>* 用户表 前端控制器* </p>** @author dd* @since 2024-04-26*/
@Controller
@RequestMapping("/user")
public class UserController {}

Flow.java


package com.example.entity;import java.io.Serializable;
import java.time.LocalDateTime;/*** <p>* 流水表* </p>** @author dd* @since 2024-04-26*/
public class Flow implements Serializable {private static final long serialVersionUID = 1L;private String id;/*** 流水号*/private String flowNum;/*** 订单号*/private String orderNum;/*** 产品主键ID*/private String productId;/*** 支付金额*/private String paidAmount;/*** 支付方式	            1:支付宝	            2:微信*/private Integer paidMethod;/*** 购买个数*/private Integer buyCounts;/*** 创建时间*/private LocalDateTime createTime;private String orderId;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getFlowNum() {return flowNum;}public void setFlowNum(String flowNum) {this.flowNum = flowNum;}public String getOrderNum() {return orderNum;}public void setOrderNum(String orderNum) {this.orderNum = orderNum;}public String getProductId() {return productId;}public void setProductId(String productId) {this.productId = productId;}public String getPaidAmount() {return paidAmount;}public void setPaidAmount(String paidAmount) {this.paidAmount = paidAmount;}public Integer getPaidMethod() {return paidMethod;}public void setPaidMethod(Integer paidMethod) {this.paidMethod = paidMethod;}public Integer getBuyCounts() {return buyCounts;}public void setBuyCounts(Integer buyCounts) {this.buyCounts = buyCounts;}public LocalDateTime getCreateTime() {return createTime;}public void setCreateTime(LocalDateTime createTime) {this.createTime = createTime;}public String getOrderId() {return orderId;}public void setOrderId(String orderId) {this.orderId = orderId;}@Overridepublic String toString() {return "Flow{" +"id=" + id +", flowNum=" + flowNum +", orderNum=" + orderNum +", productId=" + productId +", paidAmount=" + paidAmount +", paidMethod=" + paidMethod +", buyCounts=" + buyCounts +", createTime=" + createTime +", orderId=" + orderId +"}";}
}

Orders.java


package com.example.entity;import java.io.Serializable;
import java.time.LocalDateTime;/*** <p>* 订单表* </p>** @author dd* @since 2024-04-26*/
public class Orders implements Serializable {private static final long serialVersionUID = 1L;private String id;/*** 订单号*/private String orderNum;/*** 订单状态	            10:待付款	            20:已付款*/private String orderStatus;/*** 订单金额*/private Float orderPrice;/*** 实际支付金额*/private String paidAmount;/*** 产品表外键ID*/private String productId;/*** 产品购买的个数*/private Integer buyCounts;/*** 订单创建时间*/private LocalDateTime createTime;/*** 支付时间*/private String proName;private Float proPrice;private Integer userId;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getOrderNum() {return orderNum;}public void setOrderNum(String orderNum) {this.orderNum = orderNum;}public String getOrderStatus() {return orderStatus;}public void setOrderStatus(String orderStatus) {this.orderStatus = orderStatus;}public Float getOrderPrice() {return orderPrice;}public void setOrderPrice(Float orderPrice) {this.orderPrice = orderPrice;}public String getPaidAmount() {return paidAmount;}public void setPaidAmount(String paidAmount) {this.paidAmount = paidAmount;}public String getProductId() {return productId;}public void setProductId(String productId) {this.productId = productId;}public Integer getBuyCounts() {return buyCounts;}public void setBuyCounts(Integer buyCounts) {this.buyCounts = buyCounts;}public LocalDateTime getCreateTime() {return createTime;}public void setCreateTime(LocalDateTime createTime) {this.createTime = createTime;}public String getProName() {return proName;}public void setProName(String proName) {this.proName = proName;}public Float getProPrice() {return proPrice;}public void setProPrice(Float proPrice) {this.proPrice = proPrice;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}@Overridepublic String toString() {return "Orders{" +"id=" + id +", orderNum=" + orderNum +", orderStatus=" + orderStatus +", orderPrice=" + orderPrice +", paidAmount=" + paidAmount +", productId=" + productId +", buyCounts=" + buyCounts +", createTime=" + createTime +", proName=" + proName +", proPrice=" + proPrice +", userId=" + userId +"}";}
}

Product.java


package com.example.entity;import java.io.Serializable;/*** <p>* 产品表 * </p>** @author dd* @since 2024-04-26*/
public class Product implements Serializable {private static final long serialVersionUID = 1L;private String id;/*** 产品名称*/private String name;/*** 价格*/private Float price;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Float getPrice() {return price;}public void setPrice(Float price) {this.price = price;}@Overridepublic String toString() {return "Product{" +"id=" + id +", name=" + name +", price=" + price +"}";}
}

User.java


package com.example.entity;import java.io.Serializable;/*** <p>* 用户表* </p>** @author dd* @since 2024-04-26*/
public class User implements Serializable {private static final long serialVersionUID = 1L;private String id;private String username;private String sex;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "User{" +"id=" + id +", username=" + username +", sex=" + sex +"}";}
}

FlowMapper.java


package com.example.mapper;import com.example.entity.Flow;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** <p>* 流水表 Mapper 接口* </p>** @author dd* @since 2024-04-26*/
public interface FlowMapper extends BaseMapper<Flow> {}

OrdersMapper.java


package com.example.mapper;import com.example.entity.Orders;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** <p>* 订单表 Mapper 接口* </p>** @author dd* @since 2024-04-26*/
public interface OrdersMapper extends BaseMapper<Orders> {}

ProductMapper.java


package com.example.mapper;import com.example.entity.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** <p>* 产品表  Mapper 接口* </p>** @author dd* @since 2024-04-26*/
public interface ProductMapper extends BaseMapper<Product> {}

UserMapper.java


package com.example.mapper;import com.example.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;/*** <p>* 用户表 Mapper 接口* </p>** @author dd* @since 2024-04-26*/
public interface UserMapper extends BaseMapper<User> {}

AliPayServiceImpl.java


package com.example.service.impl;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.config.AlipayConfig;
import com.example.entity.Orders;
import com.example.service.IAliPayService;
import org.springframework.stereotype.Service;@Service
public class AliPayServiceImpl implements IAliPayService {@Overridepublic String pay(Orders orders){//Integer proId,String proName,String orderId, String orderNum,Float orderPriceString orderNum = orders.getOrderNum();Float orderPrice = orders.getOrderPrice();String orderId = orders.getId();String proName = orders.getProName();String proId = orders.getProductId();AlipayClient alipayClient =  new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);//创建API对应的requestAlipayTradePagePayRequest alipayRequest =  new  AlipayTradePagePayRequest();alipayRequest.setReturnUrl(AlipayConfig.return_url );//在公共参数中设置回跳和通知地址alipayRequest.setNotifyUrl("" );String timeout_express = "1c";String body="";alipayRequest.setBizContent("{\"out_trade_no\":\"" + orderNum + "\","+ "\"total_amount\":\"" + orderPrice + "\","+ "\"subject\":\"" + proName + "\","+ "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");String result = null;try {result = alipayClient.pageExecute(alipayRequest).getBody();} catch (AlipayApiException e) {System.out.println("支付有异常");throw new RuntimeException(e);}System.out.println("执行支付请求后,result:" + result);return  result;}}

FlowServiceImpl.java


package com.example.service.impl;import com.example.entity.Flow;
import com.example.entity.Orders;
import com.example.mapper.FlowMapper;
import com.example.mapper.OrdersMapper;
import com.example.service.IFlowService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;/*** <p>* 流水表 服务实现类* </p>** @author dd* @since 2024-04-26*/
@Service
public class FlowServiceImpl  implements IFlowService {@Autowiredprivate FlowMapper flowMapper;@Autowiredprivate OrdersMapper ordersMapper;@Transactionalpublic boolean saveFlow(Flow flow, Orders orders) {int flowRows = flowMapper.insert(flow);if(flowRows >0){orders.setOrderStatus("1");int orderRows =  ordersMapper.updateById(orders);return orderRows >0;}return false;}}

OrdersServiceImpl.java


package com.example.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.entity.Orders;
import com.example.mapper.OrdersMapper;
import com.example.service.IOrdersService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.util.List;
import java.util.UUID;/*** <p>* 订单表 服务实现类* </p>** @author dd* @since 2024-04-26*/
@Service
public class OrdersServiceImpl  implements IOrdersService {@Autowiredprivate OrdersMapper ordersMapper;@Overridepublic boolean saveOrders(Orders orders){// 封装订单的信息//orders.setUserId(1);//模拟假用户orders.setOrderNum(UUID.randomUUID().toString().replace("-",""));orders.setOrderStatus("0");orders.setCreateTime(LocalDateTime.now());
//
//        orders.setProductId(product.getId());
//        orders.setProName(product.getName());
//        orders.setProPrice(product.getPrice());
//        orders.setBuyCounts(buyCount);
//        orders.setOrderPrice(product.getPrice() * buyCount);int rows = ordersMapper.insert(orders);return rows>0;}@Overridepublic Orders getByNumber(String orderNumber) {QueryWrapper<Orders> queryWrapper = new QueryWrapper<>();queryWrapper.eq("order_num",orderNumber);return ordersMapper.selectOne(queryWrapper);}
//
//    @Override
//    public List<Orders> getAllOrderByUserId(Integer userId) {
//        QueryWrapper<Orders> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("user_id",userId);
//        queryWrapper.lt("order_status",2);
//        return ordersMapper.selectList(queryWrapper);
//    }}

ProductServiceImpl.java


package com.example.service.impl;import com.example.entity.Product;
import com.example.mapper.ProductMapper;
import com.example.service.IProductService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;/*** <p>* 产品表  服务实现类* </p>** @author dd* @since 2024-04-26*/
@Service
public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements IProductService {}

UserServiceImpl.java


package com.example.service.impl;import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.IUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;/*** <p>* 用户表 服务实现类* </p>** @author dd* @since 2024-04-26*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {}

alipay.sql

/*Navicat Premium Data TransferSource Server         : mysql_localhostSource Server Type    : MySQLSource Server Version : 80029Source Host           : localhost:3306Source Schema         : alipayTarget Server Type    : MySQLTarget Server Version : 80029File Encoding         : 65001Date: 18/05/2023 10:01:39
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for flow
-- ----------------------------
DROP TABLE IF EXISTS `flow`;
CREATE TABLE `flow`  (`id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`flow_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '流水号',`order_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单号',`product_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产品主键ID',`paid_amount` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付金额',`paid_method` int(0) NULL DEFAULT NULL COMMENT '支付方式\r\n            1:支付宝\r\n            2:微信',`buy_counts` int(0) NULL DEFAULT NULL COMMENT '购买个数',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',`order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '流水表' ROW_FORMAT = Compact;-- ----------------------------
-- Records of flow
-- ----------------------------
INSERT INTO `flow` VALUES ('1658997929823645697', NULL, 'b3de9207055242c2b55c16d281f5117a', '201', '30.00', NULL, 3, '2023-05-18 08:48:24', NULL);
INSERT INTO `flow` VALUES ('1659000347818930178', NULL, '4754166daf0b4a3f929d7cfa2fd34144', '204', '17.60', NULL, 2, '2023-05-18 08:58:00', NULL);
INSERT INTO `flow` VALUES ('1659000586453856258', NULL, 'b836abcde23c485f82b562595cf9a444', '203', '21.00', NULL, 6, '2023-05-18 08:58:57', NULL);
INSERT INTO `flow` VALUES ('1659004599899467777', '2023051822001488720502559317', 'cc6ca6569aa042acadd5d6722769d851', '203', '10.50', NULL, 3, '2023-05-18 09:14:54', NULL);
INSERT INTO `flow` VALUES ('1659010430405652482', '2023051822001488720502559834', '612c16a1b88248ce994fd8f78e381f9f', '201', '10.00', NULL, 1, '2023-05-18 09:38:04', NULL);
INSERT INTO `flow` VALUES ('1659013287892692993', '2023051822001488720502559836', 'd6d900ada2474c03994331d5ac572996', '201', '10.00', NULL, 1, '2023-05-18 09:49:25', NULL);
INSERT INTO `flow` VALUES ('1659015578301444098', '2023051822001488720502559836', 'd6d900ada2474c03994331d5ac572996', '201', '10.00', NULL, 1, '2023-05-18 09:58:31', NULL);-- ----------------------------
-- Table structure for orders
-- ----------------------------
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders`  (`id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`order_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单号',`order_status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '订单状态\r\n            10:待付款\r\n            20:已付款',`order_price` float(11, 0) NULL DEFAULT NULL COMMENT '订单金额',`paid_amount` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '实际支付金额',`product_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产品表外键ID',`buy_counts` int(0) NULL DEFAULT NULL COMMENT '产品购买的个数',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '订单创建时间',`pro_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '支付时间',`pro_price` float(10, 2) NULL DEFAULT NULL,`user_id` int(0) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '订单表' ROW_FORMAT = Compact;-- ----------------------------
-- Records of orders
-- ----------------------------
INSERT INTO `orders` VALUES ('1658997691247439874', 'b3de9207055242c2b55c16d281f5117a', '1', 30, NULL, '201', 3, '2023-05-18 08:47:27', 'milk', 10.00, 1);
INSERT INTO `orders` VALUES ('1659000133737459713', '4754166daf0b4a3f929d7cfa2fd34144', '1', 18, NULL, '204', 2, '2023-05-18 08:57:09', '清风面纸', 8.80, 1);
INSERT INTO `orders` VALUES ('1659000395994705921', 'b836abcde23c485f82b562595cf9a444', '1', 21, NULL, '203', 6, '2023-05-18 08:58:12', '冰红茶', 3.50, 1);
INSERT INTO `orders` VALUES ('1659004376556974081', 'cc6ca6569aa042acadd5d6722769d851', '1', 10, NULL, '203', 3, '2023-05-18 09:14:01', '冰红茶', 3.50, 2);
INSERT INTO `orders` VALUES ('1659006193118425089', '612c16a1b88248ce994fd8f78e381f9f', '1', 10, NULL, '201', 1, '2023-05-18 09:21:14', 'milk', 10.00, 2);
INSERT INTO `orders` VALUES ('1659012787835187202', 'd6d900ada2474c03994331d5ac572996', '1', 10, NULL, '201', 1, '2023-05-18 09:47:26', 'milk', 10.00, 2);-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product`  (`id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '产品名称',`price` float(11, 2) NULL DEFAULT NULL COMMENT '价格',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '产品表 ' ROW_FORMAT = Compact;-- ----------------------------
-- Records of product
-- ----------------------------
INSERT INTO `product` VALUES ('201', 'milk', 10.00);
INSERT INTO `product` VALUES ('202', 'apple', 6.00);
INSERT INTO `product` VALUES ('203', '冰红茶', 3.50);
INSERT INTO `product` VALUES ('204', '清风面纸', 8.80);-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`id` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`username` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`sex` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Compact;-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'tom', 'F');
INSERT INTO `user` VALUES ('2', 'smith', 'F');SET FOREIGN_KEY_CHECKS = 1;

application.yaml


server:servlet:context-path: /appport: 8080spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/alipay?serverTimezone=Asia/Shanghaiusername: rootpassword: 123456mvc:view:prefix: /suffix: .jsp

flow_detail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head><body><h2>流水详情</h2>订单编号是:${orders.orderNum}     <br>交易流水号:${flow.flowNum}     <br>购买的商品:${orders.proName}      <br>购买的原价:${orders.proPrice}     <br>购买的数量:${orders.buyCounts}    <br>实际支付金额 ${flow.paidAmount}    <br>支付时间是${flow.createTime} <br><a href="${pageContext.request.contextPath}/orders?userId=1">我的所有订单</a></body>
</html>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head><title>Title</title>
</head>
<body><a href="${pageContext.request.contextPath}/product">查询所有的商品</a>
</body>
</html>

order_detail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head><title>Title</title><script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
</head>
<body><h2>订单详情页面</h2><form  method="post" action="${pageContext.request.contextPath}/pay" ><input type="hidden" name="orderId" class="orderId" value="${orders.id}">  <br><input type="hidden" name="productId" class="proId" value="${orders.productId}">  <br>订单编号:<input type="text" name="orderNum" class="orderNum" value="${orders.orderNum}">  <br>购买的商品:<input type="text" name="proName" class="proName" value="${orders.proName}">  <br>订单总价:<input type="text" name="orderPrice" class="orderPrice" value="${orders.orderPrice}">   <br><input type="submit" value="去支付" class="payBtn"></form></body>
</html>

order_list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body><h2>我的所有订单</h2><ul><c:forEach var="order" items="${ordersList}"><li>订单编号:${order.orderNum} <br>商品名称:${order.proName} <br>商品原价:${order.proPrice} <br>购买数量:${order.buyCounts} <br>订单金额:${order.orderPrice} <br>订单状态:<c:if test="${order.orderStatus ==0}">未支付</c:if><c:if test="${order.orderStatus ==1}">已支付</c:if><c:if test="${order.orderStatus ==2}">已取消</c:if><hr></li></c:forEach></ul>
</body>
</html>

product_detail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body><h2>商品详情</h2><form action="${pageContext.request.contextPath}/orders" method="post"><input type="hidden" name="userId" value="1">商品id:<input type="text" name="productId" value="${product.id}" readonly><br>商品名称:<input type="text"name="proName"  value="${product.name}" readonly><br>商品价格:<input type="text" name="orderPrice" value="${product.price}" readonly><br>购买数量:<input type="text"  name="buyCounts" value="1"><br><input type="submit" value="确认订单"></form>
</body>
</html>

product_list.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Title</title>
</head>
<body><h2>商品列表</h2><c:forEach var="product" items="${products}">商品名称:${product.name}商品价格:${product.price}<a href="${pageContext.request.contextPath}/product/${product.id}">购买</a> <br></c:forEach>
</body>
</html>

pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>Payment</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>Payment</name><description>Payment</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.1.0</version></dependency><!-- JSTL (JSP standard Tag Library) JSP 标准标签库 --><!-- =================jstl==========================--><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><!-- https://mvnrepository.com/artifact/taglibs/standard --><dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1.1.0</version></dependency><!--mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><!-- mybatis-plus逆向工程--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据标注】使用LabelImg标注YOLO格式的数据(案例演示)

文章目录 LabelImg介绍LabelImg安装LabelImg界面标注常用的快捷键标注前的一些设置案例演示检查YOLO标签中的标注信息是否正确参考文章 LabelImg介绍 LabelImg是目标检测数据标注工具&#xff0c;可以标注两种格式&#xff1a; VOC标签格式&#xff0c;标注的标签存储在xml文…

目标检测——蔬菜杂草数据集

引用 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

架构师系列- 消息中间件(12)-kafka基础

1、应用场景 1.1 kafka场景 Kafka最初是由LinkedIn公司采用Scala语言开发&#xff0c;基于ZooKeeper&#xff0c;现在已经捐献给了Apache基金会。目前Kafka已经定位为一个分布式流式处理平台&#xff0c;它以 高吞吐、可持久化、可水平扩展、支持流处理等多种特性而被广泛应用…

22年全国职业技能大赛——Web Proxy配置(web 代理)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 系统服务&#xff08;22年国赛&#xff09;—— web Proxy服务&#xff08;web代理&#xff09;https://myweb.myskillstree.cn/114.html 目录 RouterSrv …

强复购、循环消费:排队复购模式助您在市场中脱颖而出

尊敬的各位读者&#xff0c;今天我很高兴向大家介绍一种新颖而又引人入胜的商业模式——排队复购模式。这个模式因其强大的复购属性和循环消费特性而备受瞩目&#xff0c;被誉为电商领域的新宠儿。 为何要介绍排队复购模式&#xff1f;因为它不仅操作简单、容易引起消费者的兴…

BUUCTF_[BSidesCF 2020]Had a bad day

[BSidesCF 2020]Had a bad day 1.一看题目直接尝试文件包含 2.直接报错&#xff0c;确实是存在文件包含漏洞 http://307b4461-36d6-443f-879a-68803a57f721.node5.buuoj.cn:81/index.php?categoryphp://filter/convert.base64-encode/resourceindex strpos() 函数查找字符串…

安卓玩机工具推荐----MTK芯片 简单制作线刷包 备份分区 备份基带 去除锁类 推荐工具操作解析

工具说明 在前面几期mtk芯片类玩机工具中解析过如何无官方固件从手机抽包 制作线刷包的步骤&#xff0c;类似的工具与操作有很多种。演示的只是本人片面的理解与一些步骤解析。mtk芯片机型抽包关键点在于..mt*****txt的分区地址段引导和 perloader临时分区引导。前面几期都是需…

【嵌入式Linux】STM32P1开发环境搭建

要进行嵌入式Linux开发&#xff0c;需要在Windows、Linux和嵌入式Linux3个系统之间来回跑&#xff0c;需要使用多个软件工具。经过了4小时的安装&#xff08;包括下载时间&#xff09;&#xff0c;我怕以后会忘记&#xff0c;本着互利互助的原则&#xff0c;我打算把这些步骤详…

java接口加密解密

这里写目录标题 controller加解密工具类加密&#xff08;本质是对ResponseBody加密&#xff09;解密&#xff08;本质是对RequestBody传参解密&#xff09;注解 controller Controller public class PathVariableController {GetMapping(value "/test")ResponseBod…

IDEA pom.xml依赖警告

IDEA中&#xff0c;有时 pom.xml 中会出现如下提示&#xff1a; IDEA 2022.1 升级了检测易受攻击的 Maven 和 Gradle 依赖项&#xff0c;并建议修正&#xff0c;通过插件 Package Checker 捆绑到 IDE 中。 这并不是引用错误&#xff0c;不用担心。如果实在强迫症不想看到这个提…

使用 FFmpeg 实现录屏和录音

FFmpeg 是一个非常强大的开源工具&#xff0c;可以用来处理音频和视频。可以实现录屏和录音&#xff0c;也可以进行简单的剪辑。 要使用 FFmpeg 进行录屏和录音&#xff0c;需要首先确保系统已经安装了 FFmpeg。在大多数 Linux 发行版中&#xff0c;可以通过包管理器&#xff0…

用友政务财务系统FileDownload接口存在任意文件读取漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友政务财务系统是由用友软件开发的一款针对政府机…

62、回溯-N皇后

思路&#xff1a; N皇后问题要求在一个nn的棋盘上放置n个皇后&#xff0c;使得它们不能相互攻击。皇后可以攻击同一行、同一列&#xff0c;以及两个对角线方向上的其他皇后。解决这个问题意味着找到所有可能的棋盘配置&#xff0c;每个配置都符合上述条件。 1、初始化数据结构…

前端更优雅的使用 jsonp

前端更优雅的使用 jsonp 背景&#xff1a;最近项目中又使用到了 jsonp 这一项跨域的技术&#xff0c;&#xff08;主要还是受同源策略影响&#xff09;&#xff0c;下面有为大家提供封装好的函数及对应使用示例&#xff0c;欢迎大家阅读理解 文章目录 前端更优雅的使用 jsonp同…

【系统架构师】-选择题(四)

1、“41”视图 ①逻辑视图(Logical View)&#xff0c;设计的对象模型(使用面向对象的设计方法时)。 ②过程视图(Process View)&#xff0c;捕捉设计的并发和同步特征。系统集成师 ③物理视图(Physical View)&#xff0c;描述了软件到硬件的映射&#xff0c;反映了分布式特性。系…

【算法】人工蜂群算法,解决多目标车间调度问题,柔性车间调度问题

文章目录 复现论文什么是柔性作业车间调度问题&#xff1f;数据处理ABC算法编码解码种群初始化雇佣蜂操作IPOX交叉多点交叉 观察蜂操作侦察蜂操作算法流程 结果程序截图问询、帮助 复现论文 什么是柔性作业车间调度问题&#xff1f; 也叫多目标车间调度问题。 柔性作业车间调…

03 后端入参校验:自定义注解实现

03 后端入参校验&#xff1a;自定义注解实现 一、前言二、实现1、新建Spring Boot项目2、引入依赖3、新建注解类4、新建校验器5、全局异常处理器6、编写Controller7、新建实体类8、启动并测试 一、前言 在 Java 后端开发中&#xff0c;为了实现入参校验&#xff0c;常常会使用…

4月26(信息差)

&#x1f30d; 1170万台 华为跃升重回首位&#xff01;苹果跌至第五位 &#x1f384;工业软件大事件 —— OGG 1.0 发布&#xff0c;华为贡献全部源代码 ✨ 苹果发布 OpenELM&#xff1a;专为在设备端运行而设计的小型开源 AI 模型 1.FisheyeDetNet&#xff1a;首个基于鱼眼相…

GraspNet-1Billion 论文阅读

这里写自定义目录标题 GraspNet-1Billion总体数据集评价指标网络pointnet&#xff1a;Approach Network:Operation Network&#xff1a;Tolerance Network 摘要相关工作基于深度学习的抓取预测算法抓取数据集点云深度学习 GraspNet-1Billion CVPR2020 上海交大 论文和数据集地…

MATLAB中左边的大括号最后一行为什么会留很大的空白——解决

看了一些帖子说改字体&#xff0c;但是并没有什么用&#xff0c;在此给出亲测有效的方法&#xff1a;改变矩阵的行间距 先说一下问题 上图中留有大块空白 **解决办法&#xff1a;**光标放在矩阵上 格式——矩阵——更改矩阵&#xff0c;在矩阵设置中选中“行高相等”&#xff…