(SSM练习)网上商城项目(十四)——付款结算

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40788630/article/details/85705717

首先打开项目的购物车,如图所示:

右下角有一个去结算按钮,按照设计,点击去结算按钮需要实现跳转到结算页面

实现此功能的顺序为:dao层(数据库操作层)——service层()——controller(控制层)——jsp层(表现层)

一、dao层

在com.dao包中创建orderDao接口:其接口中包含六个方法,分别是:添加订单、生成订单详情、查询购买数量

其详细代码如下所示:

package com.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.web.bind.annotation.RequestMapping;

import com.po.Order;

@RequestMapping("orderDao")
@Mapper
public interface OrderDao {
    public int addOrder(Order order);
    public int addOrderDetail(Map<String, Object> map);
    public List<Map<String, Object>> selectGoodsShop(Integer uid);
    public int updateStore(Map<String, Object> map);
    public int clear(Integer uid);
    public int pay(Integer ordersn);
}

其对应的映射文件如下所示:

<insert id="addOrder" parameterType="Order" keyProperty="id" useGeneratedKeys="true">
		insert into orderbasetable (busertable_id, amount, status, orderdate) values (#{busertable_id}, #{amount}, 0, now())
	</insert>
	<!-- 生成订单详情 -->
	<insert id="addOrderDetail" parameterType="map">
		insert into ORDERDETAIL (orderbasetable_id, goodstable_id, SHOPPINGNUM) select #{ordersn}, goodstable_id, SHOPPINGNUM from CARTTABLE where busertable_id = #{uid} 
	</insert>
	<!-- 查询商品购买量,以便更新库存使用 -->
	<select id="selectGoodsShop"  parameterType="Integer" resultType="map">
		select shoppingnum gshoppingnum, goodstable_id gid from carttable where busertable_id=#{uid}
	</select>
	<!-- 更新商品库存 -->
	<update id="updateStore" parameterType="map">
		update GOODSTABLE set GSTORE=GSTORE-#{gshoppingnum} where id=#{gid} 
	</update>
	<!-- 清空购物车 -->
	<delete id="clear" parameterType="Integer">
		delete from carttable where busertable_id=#{uid} 
	</delete>
	<!-- 支付订单 -->
	<update id="pay" parameterType="Integer">
		update orderbasetable set status=1 where id=#{ordersn}
	</update>

三、实现事务层(service层)

其接口如下所示:

package com.service.before;

import javax.servlet.http.HttpSession;

import org.springframework.ui.Model;

public interface OrderService {
    public String orderSubmit(Model model,HttpSession session,Double amount);
    public String pay(Integer ordersn);
}

其接口实现类:

package com.service.before;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;

import com.dao.OrderDao;
import com.po.Order;
import com.util.MyUtil;
@Service("orderService")
@Transactional
public class OrderServiceImpl implements OrderService {
    @Autowired
    private OrderDao orderDao;
	@Override
	public String orderSubmit(Model model, HttpSession session, Double amount) {
		Order order = new Order();
		order.setAmount(amount);
		order.setBusertable_id(MyUtil.getUserId(session));
		//生成订单,并将主键返回order
		orderDao.addOrder(order);
		//生成订单详情
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("ordersn", order.getId());
		map.put("uid", MyUtil.getUserId(session));
		orderDao.addOrderDetail(map);
		//更新商品库存
		//更新商品库存1.查询商品购买量,以便更新库存使用
		List<Map<String, Object>> list = orderDao.selectGoodsShop(MyUtil.getUserId(session));
		//更新商品库存2.根据商品购买量更新库存
		for (Map<String, Object> map2 : list) {
			orderDao.updateStore(map2);
		}
		//清空购物车
		orderDao.clear(MyUtil.getUserId(session));
		model.addAttribute("ordersn", order.getId());
		return "before/orderdone";
	}

	@Override
	public String pay(Integer ordersn) {
		orderDao.pay(ordersn);
		return "befeore/paydone";
	}

}

三、控制层实现

package com.controller.before;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.service.before.OrderService;

@Controller
@RequestMapping("/order")
public class OrderController extends BaseBeforeController{
	@Autowired
	private OrderService orderService;
	/**
	 * 提交订单
	 */
	@RequestMapping("/orderSubmit")
	public String orderSubmit(Model model, HttpSession session,Double amount) {
		return orderService.orderSubmit(model, session, amount);
	}
	/**
	 * 支付订单
	 */
	@RequestMapping("/pay")
	public String pay(Integer ordersn) {
		return orderService.pay(ordersn);
	}
}

四、jsp层

由于jsp文件太长就不一一列举

五、测试

将项目发送到tomcat上之后:

点击去结算:

点击提交订单:

点击银联图案进行支付:

至此就购买成功了,付款结算供能也就算是全面完成了

猜你喜欢

转载自blog.csdn.net/qq_40788630/article/details/85705717