package com.bysj.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.bysj.beans.Cart;
import com.bysj.beans.Order;
import com.bysj.beans.OrderProduct;
import com.bysj.beans.Product;
import com.bysj.service.CartService;
import com.bysj.service.CommonService;
import com.bysj.service.OrderProductService;
import com.bysj.service.OrderService;
import com.bysj.service.ProductService;
import com.bysj.tools.CommonUtils;
import com.bysj.tools.MsgHelper;
import com.github.pagehelper.PageInfo;
//订单类
@RequestMapping("/client")
@Controller
public class OrderController extends ClientBaseController {
@Autowired
private CartService cartService;
@Autowired
private ProductService productService;
@Autowired
private OrderService orderService;
@Autowired
private OrderProductService orderProductService;
@Autowired
private CommonService<Order> statisService;
@Autowired
private CommonService<OrderProduct> statisService2;
// 我的订单
@RequestMapping(value = "order/index")
public String index(HttpServletRequest request, HttpSession session, @RequestParam Map<String, String> parameter,
Map<String, Object> map) {
getCategory(map);
if (getUser(session) == null) {
return "redirect:/client/tologin?error=timeout";
} else {
return "client/order/index";
}
}
// 获取我的订单
@RequestMapping(value = "order/getdata")
public String getData(HttpServletRequest request, HttpSession session, @Param("title") String title,
Map<String, Object> map, @RequestParam(defaultValue = "1") Integer pageIndex,
@RequestParam(defaultValue = "8") Integer pageSize) throws Exception {
// get orders
String sql = "SELECT a.*,u.username FROM t_order AS a LEFT JOIN t_user AS u ON a.userid = u.id where a.userid = "
+ getUserId(session) + " order by a.id desc ";
PageInfo<Order> pageInfo = statisService.getAllBySql(Order.class, sql, pageIndex, pageSize);
// get product by order
for (Order o : pageInfo.getList()) {
Integer totalCnt = 0;
sql = "SELECT a.*,b.title,b.price,a.number*b.price AS subprice,imagepath FROM t_order_product AS a\r\n"
+ "LEFT JOIN t_product AS b ON a.productid = b.id where orderid = " + o.getId();//订单编码
List<OrderProduct> orderProduct = statisService2.getAllBySql(OrderProduct.class, sql).getList();
o.setOrderProduct(orderProduct);
// 计算商品总数
for (OrderProduct tOrderProduct : orderProduct) {
totalCnt += tOrderProduct.getNumber();
}
o.setNumber(totalCnt);
}
map.put("list", pageInfo.getList());
map.put("pageIndex", pageIndex);
map.put("pageSize", pageSize);
map.put("itemTotal", pageInfo.getTotal());
map.put("number", (pageIndex == 0 ? pageIndex : pageIndex - 1) * pageSize);
return "client/order/getdata";
}
// 提交订单
@ResponseBody
@RequestMapping("order/addorder")
public MsgHelper addorder(HttpSession session, @RequestParam Map<String, String> parameter, Order bean) {
MsgHelper msgHelper = new MsgHelper();
if (getUser(session) == null) {
msgHelper.setCode(300);
msgHelper.setMessage("登录已过期,请重新登录!");
return msgHelper;
}
List<Cart> listCart = new ArrayList<>();
// 0.get cart product
List<Cart> list = cartService.selectList(new EntityWrapper<Cart>().eq("userid", getUserId(session)));
int failCounter = 0;
Integer sumPrice = 0;
// 1 check store
for (Cart c : list) {
// 2.1 check product store
Product product = productService.selectById(c.getProductid());
Integer stockNumber = product.getNumber();
Integer saleNumber = c.getNumber();
Integer orderNumber = saleNumber;
// 库存为0
if (stockNumber == 0) {
failCounter++;
continue;
}
// 购物车里的产品数量大于库存数量
if (saleNumber > stockNumber) {
orderNumber = stockNumber;
sumPrice += (product.getPrice() * orderNumber);
OrderProduct orderProduct = new OrderProduct();
orderProduct.setProductid(product.getId());
orderProduct.setNumber(orderNumber);
c.settOrderProduct(orderProduct);
listCart.add(c);
failCounter++;
} else {
sumPrice += (product.getPrice() * orderNumber);
OrderProduct orderProduct = new OrderProduct();
orderProduct.setProductid(product.getId());
orderProduct.setNumber(orderNumber);
c.settOrderProduct(orderProduct);
listCart.add(c);
}
}
bean.setSumprice(sumPrice);
if (failCounter == list.size()) {
msgHelper.setCode(500);
msgHelper.setMessage("抱歉,由于库存不足订单生成失败!");
return msgHelper;
}
// 2.create order ******
bean.setCreatedate(CommonUtils.getNowDateTime());
bean.setUserid(getUserId(session));
bean.setOrdername("系统自动生成");
bean.setOrdercode(new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()));
bean.setStatus("待发货");
orderService.insert(bean);
// 3.create order-product
// Order lastOne = orderService.selectList(new
// EntityWrapper<Order>().orderDesc(Arrays.asList(new String[] { "id"
// })).last("limit 1")).get(0);
Order lastOne = orderService.selectById(bean.getId());
for (Cart c : listCart) {
OrderProduct opb = c.gettOrderProduct();
opb.setOrderid(lastOne.getId());
orderProductService.insert(opb);
// 2.2 update stock number
Product product = productService.selectById(c.getProductid());
product.setNumber(product.getNumber() - opb.getNumber());
productService.updateById(product);
}
// 4. clear cart
cartService.delete(new EntityWrapper<Cart>().eq("userid", getUserId(session)));
if (failCounter > 0) {
msgHelper.setCode(400);
msgHelper.setMessage("订单生成成功!但由于部分商品库存不足,订单中的数量小于购物的数量!");
} else {
msgHelper.setMessage("恭喜您,订单生成成功!");
}
return msgHelper;
}
// 取消订单
@ResponseBody
@RequestMapping("order/cancelorder")
public MsgHelper cancelorder(HttpSession session, @RequestParam Map<String, String> parameter, Order bean) {
MsgHelper msgHelper = new MsgHelper();
if (getUser(session) == null) {
msgHelper.setCode(300);
msgHelper.setMessage("登录已过期,请重新登录!");
} else {
Integer orderId = bean.getId();
// 1.get order-product -> delete
String sql = "SELECT a.*,b.title,b.price,a.number*b.price AS subprice,imagepath FROM t_order_product AS a\r\n"
+ "LEFT JOIN t_product AS b ON a.productid = b.id where orderid = " + orderId;
List<OrderProduct> list = statisService2.getAllBySql(OrderProduct.class, sql).getList();
for (OrderProduct c : list) {
// 1.1 update stock number
Product product = productService.selectById(c.getProductid());
Integer stockNumber = product.getNumber();
Integer orderNumber = c.getNumber();
product.setNumber(stockNumber + orderNumber);
productService.updateById(product);
// 1.2 delete order-product
orderProductService.deleteById(c.getId());
}
// 2.delete order
orderService.deleteById(orderId);
msgHelper.setMessage("订单取消成功!");
}
return msgHelper;
}
// 确认收货
@ResponseBody
@RequestMapping("order/getproduct")
public MsgHelper getproduct(HttpSession
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于JavaWeb的校园二手交易网站的设计与实现 (1300个子文件)
SysUserController.class 10KB
SysUserController.class 10KB
OrderController.class 10KB
OrderController.class 10KB
SysProductController.class 8KB
SysProductController.class 8KB
AccountController.class 8KB
AccountController.class 8KB
CartController.class 8KB
CartController.class 8KB
SysNoticeController.class 7KB
SysNoticeController.class 7KB
CommentController.class 7KB
CommentController.class 7KB
ProductController.class 7KB
ProductController.class 7KB
User.class 7KB
User.class 7KB
SysOrderController.class 7KB
SysOrderController.class 7KB
MatedataController.class 7KB
MatedataController.class 7KB
SysMessageController.class 6KB
SysMessageController.class 6KB
SysCategoryController.class 6KB
SysCategoryController.class 6KB
SysCommentController.class 6KB
SysCommentController.class 6KB
Product.class 5KB
Product.class 5KB
NoticeController.class 5KB
NoticeController.class 5KB
FileController.class 5KB
FileController.class 5KB
MessageController.class 5KB
MessageController.class 5KB
Item.class 5KB
Item.class 5KB
Message.class 5KB
Message.class 5KB
Order.class 4KB
Order.class 4KB
Comment.class 4KB
Comment.class 4KB
Notice.class 4KB
Notice.class 4KB
CommonServiceImpl.class 4KB
CommonServiceImpl.class 4KB
BaseBean.class 4KB
BaseBean.class 4KB
Matedata.class 4KB
Matedata.class 4KB
Cart.class 3KB
Cart.class 3KB
Category.class 3KB
Category.class 3KB
OrderProduct.class 3KB
OrderProduct.class 3KB
HomeController.class 3KB
HomeController.class 3KB
ItemData.class 3KB
ItemData.class 3KB
SysLoginController.class 3KB
SysLoginController.class 3KB
MyConstant.class 2KB
MyConstant.class 2KB
ClientBaseController.class 2KB
ClientBaseController.class 2KB
CommonService.class 991B
CommonService.class 991B
SysHomeController.class 772B
SysHomeController.class 772B
OrderProductServiceImpl.class 677B
OrderProductServiceImpl.class 677B
CommonMapper.class 673B
CommonMapper.class 673B
CategoryServiceImpl.class 649B
ItemDataServiceImpl.class 649B
MatedataServiceImpl.class 649B
CategoryServiceImpl.class 649B
ItemDataServiceImpl.class 649B
MatedataServiceImpl.class 649B
MessageServiceImpl.class 642B
CommentServiceImpl.class 642B
ProductServiceImpl.class 642B
MessageServiceImpl.class 642B
CommentServiceImpl.class 642B
ProductServiceImpl.class 642B
NoticeServiceImpl.class 635B
NoticeServiceImpl.class 635B
OrderServiceImpl.class 628B
OrderServiceImpl.class 628B
ItemServiceImpl.class 621B
UserServiceImpl.class 621B
CartServiceImpl.class 621B
ItemServiceImpl.class 621B
UserServiceImpl.class 621B
CartServiceImpl.class 621B
OrderProductService.class 300B
OrderProductService.class 300B
共 1300 条
- 1
- 2
- 3
- 4
- 5
- 6
- 13
资源评论
u012739845
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 部署yolov8的tensorrt模型支持检测分割姿态估计的C++源码+部署步骤.zip
- 以简单、易用、高性能为目标、开源的时序数据库,支持Linux及Windows, Time Series Database.zip
- python-leetcode面试题解之第198题打家劫舍-题解.zip
- python-leetcode面试题解之第191题位1的个数-题解.zip
- python-leetcode面试题解之第186题反转字符串中的单词II-题解.zip
- 一个基于python的web后端高性能开发框架,下载可用
- python-leetcode面试题解之第179题最大数-题解.zip
- python-leetcode面试题解之第170题两数之和III数据结构设计-题解.zip
- python-leetcode面试题解之第168题Excel表列名称-题解.zip
- python-leetcode面试题解之第167题两数之和II输入有序数组-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功