<select id="selectByOrderNo" parameterType="java.lang.String" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>
from imooc_mall_order
where order_no =#{orderNo}</select>
先在dao创建接口
dao
List<OrderItem> selectByOrderNo(String orderNo);
Mapper
<select id="selectByOrderNo" parameterType="java.lang.String" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>
from imooc_mall_order_item
where order_no=#{orderNo}</select>
service,主要还是在拼接信息上
//查询订单详情
@Override
public OrderVO detail(String orderNo){
Order order = orderMapper.selectByOrderNo(orderNo);
//订单不存在,则报错
if(order == null){
throw new MallException(MallExceptionEnum.NO_ORDER);}
//订单存在,则判断所属
Integer userId = UserFilter.currentUser.getId();if(!order.getUserId().equals(userId)){
throw new MallException(MallExceptionEnum.NO_YOU_ORDER);}
//拼接信息,将order转成orderVO
OrderVO orderVO = getOrder(order);return orderVO;}
private OrderVO getOrder(Order order){
OrderVO orderVO = new OrderVO();
BeanUtils.copyProperties(order,orderVO);
//获取订单对应的orderItemVOList
List<OrderItem> orderItemList = orderItemMapper.selectByOrderNo(order.getOrderNo());
List<OrderItemVO> orderItemVOList = new ArrayList<>();for(int i = 0; i < orderItemList.size(); i++){
OrderItem orderItem = orderItemList.get(i);
OrderItemVO orderItemVO = new OrderItemVO();
BeanUtils.copyProperties(orderItem,orderItemVO);
orderItemVOList.add(orderItemVO);}
orderVO.setOrderItemVOList(orderItemVOList);
orderVO.setOrderStatusName(Constant.OrderStatusEnum.cedeOf(orderVO.getOrderStatus()).getValue());return orderVO;}
<select id="selectForCustomer" resultMap="BaseResultMap" parameterType="integer">select<include refid="Base_Column_List"/>
from imooc_mall_order
where user_id =#{userId}
order by create_time desc
</select>
service
@Override
public PageInfo listForCustomer(Integer pageNum,Integer pageSize){
Integer userId = UserFilter.currentUser.getId();
PageHelper.startPage(pageNum,pageSize);
List<Order> orderList = orderMapper.selectForCustomer(userId);
//将order转化为orderVO
List<OrderVO> orderVOList = orderListToOrderVOList(orderList);
//包装成pageInfo进行返回
PageInfo pageInfo = new PageInfo<>(orderList);
pageInfo.setList(orderVOList);return pageInfo;}
private List<OrderVO> orderListToOrderVOList(List<Order> orderList){
List<OrderVO> orderVOList = new ArrayList<>();for(int i = 0; i < orderList.size(); i++){
Order order = orderList.get(i);
OrderVO orderVO = getOrder(order);
orderVOList.add(orderVO);}return orderVOList;}
@Override
public void cancel(String orderNo){
//查不到订单,报错
Order order = orderMapper.selectByOrderNo(orderNo);if(order == null){
throw new MallException(MallExceptionEnum.NO_ORDER);}
//验证用户身份
//订单存在,则判断所属
Integer userId = UserFilter.currentUser.getId();if(!order.getUserId().equals(userId)){
throw new MallException(MallExceptionEnum.NO_YOU_ORDER);}
//没有付款才取消
if(order.getOrderStatus().equals(Constant.OrderStatusEnum.NOT_PAID.getCode())){
//将订单状态设置成取消
order.setOrderStatus(Constant.OrderStatusEnum.CANCELED.getCode());
order.setEndTime(new Date());
//将订单传到数据库,来更新数据库的状态
orderMapper.updateByPrimaryKeySelective(order);}else{
throw new MallException(MallExceptionEnum.WRONG_ORDER_STATUS);}}
controller
@PostMapping("/cancel")
@ApiOperation("前台取消订单")
public ApiRestResponse cancel(@RequestParam String orderNo){
orderSrvice.cancel(orderNo);return ApiRestResponse.success();}
postman
(五)后台管理员列表开发
dao
List<Order> selectForAdmin();
mapper
<select id="selectForAdmin" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>
from imooc_mall_order
order by create_time desc
</select>
@Override
public void pay(String orderNo){
Order order = orderMapper.selectByOrderNo(orderNo);
//查不到订单,报错
if(order == null){
throw new MallException(MallExceptionEnum.NO_ORDER);}if(order.getOrderStatus()== Constant.OrderStatusEnum.NOT_PAID.getCode()){
order.setOrderStatus(Constant.OrderStatusEnum.PAID.getCode());
order.setPayTime(new Date());
orderMapper.updateByPrimaryKeySelective(order);}else {
throw new MallException(MallExceptionEnum.WRONG_ORDER_STATUS);}}
controller
@GetMapping("/pay")
@ApiOperation("前台:支付订单")
public ApiRestResponse pay(@RequestParam String orderNo){
orderSrvice.pay(orderNo);return ApiRestResponse.success();}
postman
(八)发货订单
service
@Override
public void delivered(String orderNo){
Order order = orderMapper.selectByOrderNo(orderNo);
//查不到订单,报错
if(order == null){
throw new MallException(MallExceptionEnum.NO_ORDER);}
//订单状态是不是付款的
if(order.getOrderStatus()== Constant.OrderStatusEnum.NOT_PAID.getCode()){
order.setOrderStatus(Constant.OrderStatusEnum.DELIVERED.getCode());
order.setDeliveryTime(new Date());
orderMapper.updateByPrimaryKeySelective(order);}else {
throw new MallException(MallExceptionEnum.WRONG_ORDER_STATUS);}}
controller
@PostMapping("/admin/order/delivered")
@ApiOperation("后台:订单发货")
public ApiRestResponse delivered(@RequestParam String orderNo){
orderSrvice.delivered(orderNo);return ApiRestResponse.success();}
postman
(九)完结订单接口
service
@Override
public void finish(String orderNo){
Order order = orderMapper.selectByOrderNo(orderNo);
//查不到订单,报错
if(order == null){
throw new MallException(MallExceptionEnum.NO_ORDER);}
//如果是普通用户,就要校验订单的所属
if(!userService.checkAdminRole(UserFilter.currentUser)&&!order.getUserId().equals(UserFilter.currentUser.getId())){
throw new MallException(MallExceptionEnum.NO_YOU_ORDER);}
//发货后可以完结订单
//订单状态是不是付款的
if(order.getOrderStatus()== Constant.OrderStatusEnum.DELIVERED.getCode()){
order.setOrderStatus(Constant.OrderStatusEnum.FINISHED.getCode());
order.setEndTime(new Date());
orderMapper.updateByPrimaryKeySelective(order);}else {
throw new MallException(MallExceptionEnum.WRONG_ORDER_STATUS);}}
controller
@PostMapping("/order/finish")
@ApiOperation("订单完结")
public ApiRestResponse finish(@RequestParam String orderNo){
orderSrvice.finish(orderNo);return ApiRestResponse.success();}