This commit is contained in:
parent
65a862121e
commit
d39356eddb
|
|
@ -3,6 +3,7 @@ package com.bonus.canteen.core.menu.mapper;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.bonus.canteen.core.menu.domain.MenuRecipeDishes;
|
import com.bonus.canteen.core.menu.domain.MenuRecipeDishes;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜品计划菜品关联Mapper接口
|
* 菜品计划菜品关联Mapper接口
|
||||||
|
|
@ -43,6 +44,10 @@ public interface MenuRecipeDishesMapper {
|
||||||
*/
|
*/
|
||||||
public int updateMenuRecipeDishes(MenuRecipeDishes menuRecipeDishes);
|
public int updateMenuRecipeDishes(MenuRecipeDishes menuRecipeDishes);
|
||||||
|
|
||||||
|
public int reduceMenuRecipeDishesSupplyNum(@Param("dish") MenuRecipeDishes menuRecipeDishes, @Param("quantity") Integer quantity);
|
||||||
|
|
||||||
|
public int addMenuRecipeDishesSupplyNum(@Param("dish")MenuRecipeDishes menuRecipeDishes, @Param("quantity") Integer quantity);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除菜品计划菜品关联
|
* 删除菜品计划菜品关联
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,17 @@ public interface IMenuRecipeDishesService {
|
||||||
*/
|
*/
|
||||||
public int updateMenuRecipeDishes(MenuRecipeDishes menuRecipeDishes);
|
public int updateMenuRecipeDishes(MenuRecipeDishes menuRecipeDishes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 修改菜品计划菜品关联供应量
|
||||||
|
*
|
||||||
|
* @param menuRecipeDishes 菜品计划菜品关联
|
||||||
|
* @return 结果
|
||||||
|
*/
|
||||||
|
public int reduceMenuRecipeDishesSupplyNum(MenuRecipeDishes menuRecipeDishes, Integer quantity);
|
||||||
|
|
||||||
|
public int addMenuRecipeDishesSupplyNum(MenuRecipeDishes menuRecipeDishes, Integer quantity);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除菜品计划菜品关联
|
* 批量删除菜品计划菜品关联
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,14 @@ package com.bonus.canteen.core.menu.service.impl;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.bonus.canteen.core.account.service.impl.AccSubServiceImpl;
|
||||||
|
import com.bonus.canteen.core.common.utils.RedisUtil;
|
||||||
import com.bonus.common.core.exception.ServiceException;
|
import com.bonus.common.core.exception.ServiceException;
|
||||||
import com.bonus.common.core.utils.DateUtils;
|
import com.bonus.common.core.utils.DateUtils;
|
||||||
|
import com.bonus.common.houqin.constant.GlobalConstants;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import com.bonus.canteen.core.menu.mapper.MenuRecipeDishesMapper;
|
import com.bonus.canteen.core.menu.mapper.MenuRecipeDishesMapper;
|
||||||
|
|
@ -18,6 +24,8 @@ import com.bonus.canteen.core.menu.service.IMenuRecipeDishesService;
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class MenuRecipeDishesServiceImpl implements IMenuRecipeDishesService {
|
public class MenuRecipeDishesServiceImpl implements IMenuRecipeDishesService {
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(MenuRecipeDishesServiceImpl.class);
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MenuRecipeDishesMapper menuRecipeDishesMapper;
|
private MenuRecipeDishesMapper menuRecipeDishesMapper;
|
||||||
|
|
||||||
|
|
@ -75,6 +83,62 @@ public class MenuRecipeDishesServiceImpl implements IMenuRecipeDishesService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int reduceMenuRecipeDishesSupplyNum(MenuRecipeDishes menuRecipeDishes, Integer quantity) {
|
||||||
|
if(menuRecipeDishes == null || menuRecipeDishes.getDetailId() == null || menuRecipeDishes.getDishesId() == null) {
|
||||||
|
throw new ServiceException("参数错误");
|
||||||
|
}
|
||||||
|
String lockKey = String.format("sc:menu_recipe_dishes_supply_num_tenant_%s_detailed_%s_dishes_id_%s",
|
||||||
|
GlobalConstants.TENANT_ID, menuRecipeDishes.getDetailId(), menuRecipeDishes.getDishesId());
|
||||||
|
try {
|
||||||
|
if (!RedisUtil.tryLock(lockKey, 10, 15)) {
|
||||||
|
throw new ServiceException("修改库存失败");
|
||||||
|
}
|
||||||
|
List<MenuRecipeDishes> menuRecipeDishesList = selectMenuRecipeDishesList(menuRecipeDishes);
|
||||||
|
if (menuRecipeDishesList == null || menuRecipeDishesList.isEmpty()) {
|
||||||
|
throw new ServiceException("菜品计划菜品关联不存在");
|
||||||
|
}
|
||||||
|
menuRecipeDishes = menuRecipeDishesList.get(0);
|
||||||
|
if(menuRecipeDishes.getSurplusNum() < quantity) {
|
||||||
|
throw new ServiceException("菜品供应量不足");
|
||||||
|
}
|
||||||
|
return menuRecipeDishesMapper.reduceMenuRecipeDishesSupplyNum(menuRecipeDishes, quantity);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("修改菜谱菜品供应量失败", e);
|
||||||
|
throw new ServiceException("修改菜谱菜品供应量失败");
|
||||||
|
}finally {
|
||||||
|
try {
|
||||||
|
RedisUtil.safeUnLock(lockKey);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("账户操作解锁异常", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int addMenuRecipeDishesSupplyNum(MenuRecipeDishes menuRecipeDishes, Integer quantity) {
|
||||||
|
if(menuRecipeDishes == null || menuRecipeDishes.getDetailId() == null || menuRecipeDishes.getDishesId() == null) {
|
||||||
|
throw new ServiceException("参数错误");
|
||||||
|
}
|
||||||
|
String lockKey = String.format("sc:menu_recipe_dishes_supply_num_tenant_%s_detailed_%s_dishes_id_%s",
|
||||||
|
GlobalConstants.TENANT_ID, menuRecipeDishes.getDetailId(), menuRecipeDishes.getDishesId());
|
||||||
|
try {
|
||||||
|
if (!RedisUtil.tryLock(lockKey, 10, 15)) {
|
||||||
|
throw new ServiceException("账户有交易正在进行中");
|
||||||
|
}
|
||||||
|
return menuRecipeDishesMapper.addMenuRecipeDishesSupplyNum(menuRecipeDishes, quantity);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("修改菜谱菜品供应量失败", e);
|
||||||
|
throw new ServiceException("修改菜谱菜品供应量失败");
|
||||||
|
}finally {
|
||||||
|
try {
|
||||||
|
RedisUtil.safeUnLock(lockKey);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
log.error("账户操作解锁异常", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量删除菜品计划菜品关联
|
* 批量删除菜品计划菜品关联
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@ package com.bonus.canteen.core.order.business;
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO;
|
import com.bonus.canteen.core.account.domain.vo.AccInfoDetailsVO;
|
||||||
import com.bonus.canteen.core.account.service.IAccInfoService;
|
import com.bonus.canteen.core.account.service.IAccInfoService;
|
||||||
|
import com.bonus.canteen.core.menu.domain.MenuRecipeDishes;
|
||||||
|
import com.bonus.canteen.core.menu.service.IMenuRecipeDishesService;
|
||||||
import com.bonus.canteen.core.order.domain.OrderDetail;
|
import com.bonus.canteen.core.order.domain.OrderDetail;
|
||||||
import com.bonus.canteen.core.order.domain.OrderInfo;
|
import com.bonus.canteen.core.order.domain.OrderInfo;
|
||||||
import com.bonus.canteen.core.order.domain.param.OrderAddParam;
|
import com.bonus.canteen.core.order.domain.param.OrderAddParam;
|
||||||
|
|
@ -23,6 +25,9 @@ public class OrderBusiness {
|
||||||
private IOrderDetailService orderDetailService;
|
private IOrderDetailService orderDetailService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderInfoMapper orderInfoMapper;
|
private OrderInfoMapper orderInfoMapper;
|
||||||
|
@Autowired
|
||||||
|
private IMenuRecipeDishesService menuRecipeDishesService;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public List<OrderInfo> orderPlaceHandler(OrderAddParam orderAddParam) {
|
public List<OrderInfo> orderPlaceHandler(OrderAddParam orderAddParam) {
|
||||||
AccInfoDetailsVO accInfoVO = this.accInfoService.queryAccInfoByUserId(orderAddParam.getUserId());
|
AccInfoDetailsVO accInfoVO = this.accInfoService.queryAccInfoByUserId(orderAddParam.getUserId());
|
||||||
|
|
@ -35,7 +40,26 @@ public class OrderBusiness {
|
||||||
orderInfoList.forEach(orderInfo -> {
|
orderInfoList.forEach(orderInfo -> {
|
||||||
List<OrderDetail> orderDetailList = orderInfo.getOrderDetailList();
|
List<OrderDetail> orderDetailList = orderInfo.getOrderDetailList();
|
||||||
orderDetailService.batchInsertOrderDetail(orderDetailList);
|
orderDetailService.batchInsertOrderDetail(orderDetailList);
|
||||||
|
reduceMenuDishSupplyNum(orderDetailList);
|
||||||
});
|
});
|
||||||
return orderInfoList;
|
return orderInfoList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void reduceMenuDishSupplyNum(List<OrderDetail> orderDetailList) {
|
||||||
|
for(OrderDetail orderDetail : orderDetailList) {
|
||||||
|
MenuRecipeDishes menuRecipeDishes = new MenuRecipeDishes();
|
||||||
|
menuRecipeDishes.setDetailId(orderDetail.getDetailId());
|
||||||
|
menuRecipeDishes.setDishesId(orderDetail.getGoodsId());
|
||||||
|
menuRecipeDishesService.reduceMenuRecipeDishesSupplyNum(menuRecipeDishes, orderDetail.getQuantity());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addMenuDishSupplyNum(List<OrderDetail> orderDetailList) {
|
||||||
|
for(OrderDetail orderDetail : orderDetailList) {
|
||||||
|
MenuRecipeDishes menuRecipeDishes = new MenuRecipeDishes();
|
||||||
|
menuRecipeDishes.setDetailId(orderDetail.getDetailId());
|
||||||
|
menuRecipeDishes.setDishesId(orderDetail.getGoodsId());
|
||||||
|
menuRecipeDishesService.addMenuRecipeDishesSupplyNum(menuRecipeDishes, orderDetail.getQuantity());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ public class OrderInfoController extends BaseController
|
||||||
/**
|
/**
|
||||||
* 新增保存订单
|
* 新增保存订单
|
||||||
*/
|
*/
|
||||||
@SysLog(title = "订单", module = "订单", businessType = OperaType.INSERT)
|
@SysLog(title = "下单", module = "订单", businessType = OperaType.INSERT)
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult addSave(OrderAddParam orderAddParam)
|
public AjaxResult addSave(OrderAddParam orderAddParam)
|
||||||
|
|
@ -94,6 +94,15 @@ public class OrderInfoController extends BaseController
|
||||||
return AjaxResult.success();
|
return AjaxResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SysLog(title = "付款", module = "订单", businessType = OperaType.INSERT)
|
||||||
|
@PostMapping("/pay/{orderId}")
|
||||||
|
@ResponseBody
|
||||||
|
public AjaxResult pay(@PathVariable Long orderId)
|
||||||
|
{
|
||||||
|
orderInfoService.pay(orderId);
|
||||||
|
return AjaxResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改订单
|
* 修改订单
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,13 @@
|
||||||
package com.bonus.canteen.core.order.controller;
|
package com.bonus.canteen.core.order.controller;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
||||||
|
import com.bonus.canteen.core.order.domain.param.OrderShoppingCartQueryParam;
|
||||||
|
import com.bonus.canteen.core.order.domain.param.ShoppingCartDelParam;
|
||||||
|
import com.bonus.canteen.core.order.domain.vo.OrderShoppingCartVO;
|
||||||
import com.bonus.canteen.core.order.service.IOrderShoppingCartService;
|
import com.bonus.canteen.core.order.service.IOrderShoppingCartService;
|
||||||
import com.bonus.canteen.core.order.utils.ShoppingCartParamChecker;
|
import com.bonus.canteen.core.order.utils.ShoppingCartParamChecker;
|
||||||
import com.bonus.common.core.exception.ServiceException;
|
import com.bonus.common.core.exception.ServiceException;
|
||||||
|
|
@ -21,6 +25,7 @@ import org.springframework.ui.ModelMap;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 订单购物车Controller
|
* 订单购物车Controller
|
||||||
|
|
@ -40,11 +45,11 @@ public class OrderShoppingCartController extends BaseController
|
||||||
*/
|
*/
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(@RequestBody OrderShoppingCart orderShoppingCart)
|
public TableDataInfo list(@RequestBody OrderShoppingCartQueryParam orderShoppingCart)
|
||||||
{
|
{
|
||||||
ShoppingCartParamChecker.listCheck(orderShoppingCart);
|
ShoppingCartParamChecker.listCheck(orderShoppingCart);
|
||||||
startPage();
|
startPage();
|
||||||
List<OrderShoppingCart> list = orderShoppingCartService.selectOrderShoppingCartList(orderShoppingCart);
|
List<OrderShoppingCartVO> list = orderShoppingCartService.selectOrderShoppingCartList(orderShoppingCart);
|
||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -54,10 +59,10 @@ public class OrderShoppingCartController extends BaseController
|
||||||
@SysLog(title = "订单购物车", module = "订单-订单详情", businessType = OperaType.EXPORT)
|
@SysLog(title = "订单购物车", module = "订单-订单详情", businessType = OperaType.EXPORT)
|
||||||
@PostMapping("/export")
|
@PostMapping("/export")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public void export(OrderShoppingCart orderShoppingCart, HttpServletResponse response)
|
public void export(OrderShoppingCartQueryParam orderShoppingCart, HttpServletResponse response)
|
||||||
{
|
{
|
||||||
List<OrderShoppingCart> list = orderShoppingCartService.selectOrderShoppingCartList(orderShoppingCart);
|
List<OrderShoppingCartVO> list = orderShoppingCartService.selectOrderShoppingCartList(orderShoppingCart);
|
||||||
ExcelUtil<OrderShoppingCart> util = new ExcelUtil<OrderShoppingCart>(OrderShoppingCart.class);
|
ExcelUtil<OrderShoppingCartVO> util = new ExcelUtil<OrderShoppingCartVO>(OrderShoppingCartVO.class);
|
||||||
util.exportExcel(response, list, "订单购物车数据");
|
util.exportExcel(response, list, "订单购物车数据");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -97,14 +102,14 @@ public class OrderShoppingCartController extends BaseController
|
||||||
/**
|
/**
|
||||||
* 删除订单购物车
|
* 删除订单购物车
|
||||||
*/
|
*/
|
||||||
@SysLog(title = "订单购物车", module = "订单-订单详情", businessType = OperaType.DELETE)
|
@SysLog(title = "订单购物车删除", module = "订单-订单详情", businessType = OperaType.DELETE)
|
||||||
@PostMapping( "/remove")
|
@PostMapping( "/remove")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult remove(@RequestBody List<Long> shoppingCartIds)
|
public AjaxResult remove(@RequestBody ShoppingCartDelParam param)
|
||||||
{
|
{
|
||||||
if(CollUtil.isEmpty(shoppingCartIds)) {
|
if(Objects.isNull(param) || CollUtil.isEmpty(param.getShoppingCartIds())) {
|
||||||
throw new ServiceException("购物车餐品ID为空");
|
throw new ServiceException("购物车餐品ID为空");
|
||||||
}
|
}
|
||||||
return toAjax(orderShoppingCartService.deleteOrderShoppingCartByShoppingCartIds(shoppingCartIds));
|
return toAjax(orderShoppingCartService.deleteOrderShoppingCartByShoppingCartIds(param.getShoppingCartIds()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.bonus.canteen.core.order.domain;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class MenuDishCheckDTO {
|
||||||
|
/** 食堂id */
|
||||||
|
private Long canteenId;
|
||||||
|
/** 档口id */
|
||||||
|
private Long stallId;
|
||||||
|
/** 供应日期 */
|
||||||
|
private String applyDate;
|
||||||
|
/** 适用类型 */
|
||||||
|
private String applyType;
|
||||||
|
}
|
||||||
|
|
@ -68,7 +68,7 @@ public class OrderShoppingCart extends BaseEntity
|
||||||
|
|
||||||
/** 餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵 */
|
/** 餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵 */
|
||||||
@Excel(name = "餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵")
|
@Excel(name = "餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵")
|
||||||
private Long mealtimeType;
|
private Integer mealtimeType;
|
||||||
|
|
||||||
public void setShoppingCartId(Long shoppingCartId)
|
public void setShoppingCartId(Long shoppingCartId)
|
||||||
{
|
{
|
||||||
|
|
@ -190,12 +190,12 @@ public class OrderShoppingCart extends BaseEntity
|
||||||
return orderDate;
|
return orderDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMealtimeType(Long mealtimeType)
|
public void setMealtimeType(Integer mealtimeType)
|
||||||
{
|
{
|
||||||
this.mealtimeType = mealtimeType;
|
this.mealtimeType = mealtimeType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getMealtimeType()
|
public Integer getMealtimeType()
|
||||||
{
|
{
|
||||||
return mealtimeType;
|
return mealtimeType;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
package com.bonus.canteen.core.order.domain.param;
|
||||||
|
|
||||||
|
import com.bonus.common.core.annotation.Excel;
|
||||||
|
import com.bonus.common.core.web.domain.BaseEntity;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单购物车对象 order_shopping_cart
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2025-04-14
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OrderShoppingCartQueryParam
|
||||||
|
{
|
||||||
|
|
||||||
|
/** 食堂id */
|
||||||
|
private Long canteenId;
|
||||||
|
|
||||||
|
/** 档口id */
|
||||||
|
private Long stallId;
|
||||||
|
|
||||||
|
/** 订单类型 */
|
||||||
|
private Integer orderType;
|
||||||
|
|
||||||
|
/** 菜谱日期 yyyy-MM-dd */
|
||||||
|
private List<String> menuDateList;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.bonus.canteen.core.order.domain.param;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class ShoppingCartDelParam {
|
||||||
|
private List<Long> shoppingCartIds;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
package com.bonus.canteen.core.order.domain.vo;
|
||||||
|
|
||||||
|
import com.bonus.common.core.annotation.Excel;
|
||||||
|
import com.bonus.common.core.web.domain.BaseEntity;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单购物车对象 order_shopping_cart
|
||||||
|
*
|
||||||
|
* @author ruoyi
|
||||||
|
* @date 2025-04-14
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class OrderShoppingCartVO extends BaseEntity
|
||||||
|
{
|
||||||
|
|
||||||
|
/** 主键 */
|
||||||
|
private Long shoppingCartId;
|
||||||
|
|
||||||
|
/** 人员id */
|
||||||
|
@Excel(name = "人员id")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/** 菜谱id */
|
||||||
|
@Excel(name = "菜谱id")
|
||||||
|
private Long menuId;
|
||||||
|
|
||||||
|
/** 食堂id */
|
||||||
|
@Excel(name = "食堂id")
|
||||||
|
private Long canteenId;
|
||||||
|
|
||||||
|
/** 档口id */
|
||||||
|
@Excel(name = "档口id")
|
||||||
|
private Long stallId;
|
||||||
|
|
||||||
|
/** 商品菜品id */
|
||||||
|
@Excel(name = "商品菜品id")
|
||||||
|
private Long goodsId;
|
||||||
|
|
||||||
|
/** 商品菜品名称 */
|
||||||
|
@Excel(name = "商品菜品名称")
|
||||||
|
private String goodsName;
|
||||||
|
|
||||||
|
/** 商品菜品图片路径 */
|
||||||
|
@Excel(name = "商品菜品图片路径")
|
||||||
|
private String goodsImgUrl;
|
||||||
|
|
||||||
|
/** 数量/重量 */
|
||||||
|
@Excel(name = "数量/重量")
|
||||||
|
private Integer quantity;
|
||||||
|
|
||||||
|
/** 订单类型 */
|
||||||
|
@Excel(name = "订单类型")
|
||||||
|
private Integer orderType;
|
||||||
|
|
||||||
|
/** 明细类别 1 菜品 2 套餐 3 商品 4 按键 5 补扣 6 报餐 */
|
||||||
|
@Excel(name = "明细类别 1 菜品 2 套餐 3 商品 4 按键 5 补扣 6 报餐")
|
||||||
|
private Integer detailType;
|
||||||
|
|
||||||
|
/** 订单日期 yyyy-MM-dd */
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||||
|
@Excel(name = "订单日期 yyyy-MM-dd", width = 30, dateFormat = "yyyy-MM-dd")
|
||||||
|
private Date orderDate;
|
||||||
|
|
||||||
|
/** 餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵 */
|
||||||
|
@Excel(name = "餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵")
|
||||||
|
private Integer mealtimeType;
|
||||||
|
|
||||||
|
@Excel(name = "餐次类型 0-已失效 1-未失效")
|
||||||
|
private Integer isValid;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
package com.bonus.canteen.core.order.module;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import com.bonus.canteen.core.menu.domain.MenuRecipe;
|
||||||
|
import com.bonus.canteen.core.menu.enums.MenuRecipeSortEnum;
|
||||||
|
import com.bonus.canteen.core.menu.service.IMenuRecipeService;
|
||||||
|
import com.bonus.canteen.core.menu.vo.MenuRecipeDetailsVO;
|
||||||
|
import com.bonus.canteen.core.menu.vo.MenuRecipeDishesVO;
|
||||||
|
import com.bonus.canteen.core.menu.vo.MenuRecipeMealtimeTypeVO;
|
||||||
|
import com.bonus.canteen.core.menu.vo.MenuRecipeVO;
|
||||||
|
import com.bonus.canteen.core.order.domain.MenuDishCheckDTO;
|
||||||
|
import com.bonus.common.core.exception.ServiceException;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class MenuModule {
|
||||||
|
@Autowired
|
||||||
|
private IMenuRecipeService menuRecipeService;
|
||||||
|
|
||||||
|
public Map<Integer, List<MenuRecipeDishesVO>> getMenuRecipeDish(MenuDishCheckDTO menuDishCheckDTO) {
|
||||||
|
MenuRecipe menuRecipe = new MenuRecipe();
|
||||||
|
menuRecipe.setApplyDate(menuDishCheckDTO.getApplyDate());
|
||||||
|
menuRecipe.setCanteenId(menuDishCheckDTO.getCanteenId());
|
||||||
|
menuRecipe.setStallId(menuDishCheckDTO.getStallId());
|
||||||
|
menuRecipe.setKey(menuDishCheckDTO.getApplyType());
|
||||||
|
Map<Integer, List<MenuRecipeDishesVO>> mealTimeTypeMap = new HashMap<>();
|
||||||
|
List<MenuRecipeVO> menuRecipeList = menuRecipeService.selectMenuRecipeList(menuRecipe);
|
||||||
|
if (CollUtil.isNotEmpty(menuRecipeList) && menuRecipeList.size() == 1) {
|
||||||
|
List<MenuRecipeDetailsVO> menuRecipeDetailsVOList = menuRecipeList.get(0).getDetail();
|
||||||
|
if(CollUtil.isNotEmpty(menuRecipeDetailsVOList) && menuRecipeDetailsVOList.size() == 1) {
|
||||||
|
List<MenuRecipeMealtimeTypeVO> menuRecipeMealtimeTypeVOS = menuRecipeDetailsVOList.get(0).getDetails();
|
||||||
|
if(CollUtil.isNotEmpty(menuRecipeMealtimeTypeVOS)) {
|
||||||
|
Integer mealType = null;
|
||||||
|
List<MenuRecipeDishesVO> dishsIdList = new ArrayList<>();
|
||||||
|
for (MenuRecipeMealtimeTypeVO menuRecipeMealtimeTypeVO : menuRecipeMealtimeTypeVOS) {
|
||||||
|
mealType = menuRecipeMealtimeTypeVO.getMealtimeType();
|
||||||
|
if(CollUtil.isNotEmpty(menuRecipeMealtimeTypeVO.getDishesList())) {
|
||||||
|
dishsIdList.addAll(menuRecipeMealtimeTypeVO.getDishesList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(Objects.nonNull(mealType)) {
|
||||||
|
mealTimeTypeMap.put(mealType, dishsIdList);
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
throw new ServiceException("菜谱信息异常");
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
throw new ServiceException("菜谱信息异常");
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
throw new ServiceException("菜谱信息异常");
|
||||||
|
}
|
||||||
|
return mealTimeTypeMap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -63,4 +63,5 @@ public interface IOrderInfoService
|
||||||
public int deleteOrderInfoByOrderId(Long orderId);
|
public int deleteOrderInfoByOrderId(Long orderId);
|
||||||
|
|
||||||
public void refund(Long orderId);
|
public void refund(Long orderId);
|
||||||
|
public void pay(Long orderId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
package com.bonus.canteen.core.order.service;
|
package com.bonus.canteen.core.order.service;
|
||||||
|
|
||||||
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
||||||
|
import com.bonus.canteen.core.order.domain.param.OrderShoppingCartQueryParam;
|
||||||
|
import com.bonus.canteen.core.order.domain.vo.OrderShoppingCartVO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -26,7 +28,7 @@ public interface IOrderShoppingCartService
|
||||||
* @param orderShoppingCart 订单购物车
|
* @param orderShoppingCart 订单购物车
|
||||||
* @return 订单购物车集合
|
* @return 订单购物车集合
|
||||||
*/
|
*/
|
||||||
public List<OrderShoppingCart> selectOrderShoppingCartList(OrderShoppingCart orderShoppingCart);
|
public List<OrderShoppingCartVO> selectOrderShoppingCartList(OrderShoppingCartQueryParam orderShoppingCart);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增订单购物车
|
* 新增订单购物车
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
@ -108,6 +109,33 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
||||||
throw new ServiceException("请勿重复提交订单");
|
throw new ServiceException("请勿重复提交订单");
|
||||||
}
|
}
|
||||||
List<OrderInfo> orderInfoList = orderBusiness.orderPlaceHandler(orderAddParam);
|
List<OrderInfo> orderInfoList = orderBusiness.orderPlaceHandler(orderAddParam);
|
||||||
|
orderPay(orderInfoList);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void pay(Long orderId) {
|
||||||
|
if(Objects.isNull(orderId) || orderId <= 0) {
|
||||||
|
throw new ServiceException("订单ID不能为空");
|
||||||
|
}
|
||||||
|
OrderInfo orderInfo = selectOrderInfoByOrderId(orderId);
|
||||||
|
if(Objects.isNull(orderInfo)) {
|
||||||
|
throw new ServiceException("订单不存在");
|
||||||
|
}
|
||||||
|
String payOrderKey = String.format("sc:order_pay_orderId_%s", orderId);
|
||||||
|
if (!RedisUtil.setNx(payOrderKey, 1, 2)) {
|
||||||
|
log.info("退单处理中:{}", payOrderKey);
|
||||||
|
throw new ServiceException("退单处理中");
|
||||||
|
}
|
||||||
|
if(orderInfo.getOrderState().equals(OrderRefundStateEnum.FINISH.getKey())) {
|
||||||
|
throw new ServiceException("订单已退");
|
||||||
|
}
|
||||||
|
if(PayStateEnum.isUnPay(orderInfo.getPayState())) {
|
||||||
|
List<OrderInfo> orderInfoList = new ArrayList<>();
|
||||||
|
orderInfoList.add(orderInfo);
|
||||||
|
orderPay(orderInfoList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private void orderPay(List<OrderInfo> orderInfoList) {
|
||||||
OrderPayDTO orderPayDTO = buildOrderPayDTO(orderInfoList);
|
OrderPayDTO orderPayDTO = buildOrderPayDTO(orderInfoList);
|
||||||
try {
|
try {
|
||||||
List<AccWalletInfo> walletInfoList = accWalletInfoService.selectAccWalletInfoByUserId(orderPayDTO.getUserId());
|
List<AccWalletInfo> walletInfoList = accWalletInfoService.selectAccWalletInfoByUserId(orderPayDTO.getUserId());
|
||||||
|
|
@ -140,14 +168,13 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
||||||
orderPayResultDTO.setUpdateBy(SecurityUtils.getUsername());
|
orderPayResultDTO.setUpdateBy(SecurityUtils.getUsername());
|
||||||
orderInfoMapper.updateOrderPayResult(orderPayResultDTO);
|
orderInfoMapper.updateOrderPayResult(orderPayResultDTO);
|
||||||
try {
|
try {
|
||||||
DeviceMqPersonalUpdateMessageDTO bean = new DeviceMqPersonalUpdateMessageDTO().setUpdatePerson(Math.toIntExact(orderAddParam.getUserId()),"update");
|
DeviceMqPersonalUpdateMessageDTO bean = new DeviceMqPersonalUpdateMessageDTO().setUpdatePerson(Math.toIntExact(orderInfoList.get(0).getUserId()),"update");
|
||||||
String jsonString = JacksonUtil.writeValueAsString(bean);
|
String jsonString = JacksonUtil.writeValueAsString(bean);
|
||||||
log.info("账户变动发送mq内容:{}", jsonString);
|
log.info("账户变动发送mq内容:{}", jsonString);
|
||||||
MqUtil.pushToTenantAllDevice(bean, LeMqConstant.Topic.DEVICE_UPDATE_PERSONAL_CONFIG_V4);
|
MqUtil.pushToTenantAllDevice(bean, LeMqConstant.Topic.DEVICE_UPDATE_PERSONAL_CONFIG_V4);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("发送MQ消息失败", e);
|
log.error("发送MQ消息失败", e);
|
||||||
}
|
}
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BigDecimal getWalletBalance(List<AccWalletInfo> walletInfoList, AccWalletIdEnum walletIdEnum) {
|
private BigDecimal getWalletBalance(List<AccWalletInfo> walletInfoList, AccWalletIdEnum walletIdEnum) {
|
||||||
|
|
@ -233,6 +260,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = {Exception.class})
|
||||||
public void refund(Long orderId) {
|
public void refund(Long orderId) {
|
||||||
if(Objects.isNull(orderId) || orderId <= 0) {
|
if(Objects.isNull(orderId) || orderId <= 0) {
|
||||||
throw new ServiceException("订单ID不能为空");
|
throw new ServiceException("订单ID不能为空");
|
||||||
|
|
@ -287,6 +315,7 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
||||||
orderDetail.setDetailState(OrderDetailStateEnum.REFUNDED.getKey());
|
orderDetail.setDetailState(OrderDetailStateEnum.REFUNDED.getKey());
|
||||||
orderDetailService.updateOrderDetail(orderDetail);
|
orderDetailService.updateOrderDetail(orderDetail);
|
||||||
}
|
}
|
||||||
|
orderBusiness.addMenuDishSupplyNum(orderDetailList);
|
||||||
try {
|
try {
|
||||||
DeviceMqPersonalUpdateMessageDTO bean = new DeviceMqPersonalUpdateMessageDTO().setUpdatePerson(Math.toIntExact(orderInfo.getUserId()),"update");
|
DeviceMqPersonalUpdateMessageDTO bean = new DeviceMqPersonalUpdateMessageDTO().setUpdatePerson(Math.toIntExact(orderInfo.getUserId()),"update");
|
||||||
String jsonString = JacksonUtil.writeValueAsString(bean);
|
String jsonString = JacksonUtil.writeValueAsString(bean);
|
||||||
|
|
@ -295,6 +324,14 @@ public class OrderInfoServiceImpl implements IOrderInfoService
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("发送MQ消息失败", e);
|
log.error("发送MQ消息失败", e);
|
||||||
}
|
}
|
||||||
|
}else {
|
||||||
|
OrderInfo refundOrderInfo = new OrderInfo();
|
||||||
|
refundOrderInfo.setOrderId(orderId);
|
||||||
|
refundOrderInfo.setOrderRefundState(OrderRefundStateEnum.FINISH.getKey());
|
||||||
|
refundOrderInfo.setOrderState(OrderStateEnum.CANCEL.getKey());
|
||||||
|
refundOrderInfo.setUpdateBy(SecurityUtils.getUsername());
|
||||||
|
refundOrderInfo.setUpdateTime(DateUtils.getNowDate());
|
||||||
|
orderInfoMapper.updateOrderInfo(refundOrderInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,25 @@
|
||||||
package com.bonus.canteen.core.order.service.impl;
|
package com.bonus.canteen.core.order.service.impl;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import com.bonus.canteen.core.menu.enums.MenuRecipeSortEnum;
|
||||||
|
import com.bonus.canteen.core.menu.service.IMenuRecipeService;
|
||||||
|
import com.bonus.canteen.core.menu.vo.MenuRecipeDishesVO;
|
||||||
|
import com.bonus.canteen.core.order.domain.MenuDishCheckDTO;
|
||||||
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
||||||
|
import com.bonus.canteen.core.order.domain.param.OrderShoppingCartQueryParam;
|
||||||
|
import com.bonus.canteen.core.order.domain.vo.OrderShoppingCartVO;
|
||||||
import com.bonus.canteen.core.order.mapper.OrderShoppingCartMapper;
|
import com.bonus.canteen.core.order.mapper.OrderShoppingCartMapper;
|
||||||
|
import com.bonus.canteen.core.order.module.MenuModule;
|
||||||
import com.bonus.canteen.core.order.service.IOrderShoppingCartService;
|
import com.bonus.canteen.core.order.service.IOrderShoppingCartService;
|
||||||
import com.bonus.common.core.utils.DateUtils;
|
import com.bonus.common.core.utils.DateUtils;
|
||||||
import com.bonus.common.security.utils.SecurityUtils;
|
import com.bonus.common.security.utils.SecurityUtils;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
|
@ -21,6 +34,8 @@ public class OrderShoppingCartServiceImpl implements IOrderShoppingCartService
|
||||||
{
|
{
|
||||||
@Autowired
|
@Autowired
|
||||||
private OrderShoppingCartMapper orderShoppingCartMapper;
|
private OrderShoppingCartMapper orderShoppingCartMapper;
|
||||||
|
@Autowired
|
||||||
|
private MenuModule menuModule;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询订单购物车
|
* 查询订单购物车
|
||||||
|
|
@ -41,11 +56,68 @@ public class OrderShoppingCartServiceImpl implements IOrderShoppingCartService
|
||||||
* @return 订单购物车
|
* @return 订单购物车
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<OrderShoppingCart> selectOrderShoppingCartList(OrderShoppingCart orderShoppingCart)
|
public List<OrderShoppingCartVO> selectOrderShoppingCartList(OrderShoppingCartQueryParam orderShoppingCart) {
|
||||||
{
|
OrderShoppingCart orderShoppingCartQuery = new OrderShoppingCart();
|
||||||
return orderShoppingCartMapper.selectOrderShoppingCartList(orderShoppingCart);
|
orderShoppingCartQuery.setCanteenId(orderShoppingCart.getCanteenId());
|
||||||
|
orderShoppingCartQuery.setStallId(orderShoppingCart.getStallId());
|
||||||
|
orderShoppingCartQuery.setOrderType(orderShoppingCart.getOrderType());
|
||||||
|
orderShoppingCartQuery.setUserId(SecurityUtils.getUserId());
|
||||||
|
List<OrderShoppingCart> orderShoppingCartList = orderShoppingCartMapper.selectOrderShoppingCartList(orderShoppingCartQuery);
|
||||||
|
if (CollUtil.isEmpty(orderShoppingCartList)) {
|
||||||
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MenuDishCheckDTO menuDishCheckDTO = new MenuDishCheckDTO();
|
||||||
|
menuDishCheckDTO.setCanteenId(orderShoppingCart.getCanteenId());
|
||||||
|
menuDishCheckDTO.setStallId(orderShoppingCart.getStallId());
|
||||||
|
menuDishCheckDTO.setApplyType(MenuRecipeSortEnum.MOBILE_RESERVE.getKey().toString());
|
||||||
|
|
||||||
|
Map<String, List<OrderShoppingCart>> groupedByOrderDate = orderShoppingCartList.stream()
|
||||||
|
.collect(Collectors.groupingBy(cart -> DateUtil.format(cart.getOrderDate(), "yyyy-MM-dd")));
|
||||||
|
|
||||||
|
List<OrderShoppingCartVO> orderShoppingCartVOList = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<OrderShoppingCart>> entry : groupedByOrderDate.entrySet()) {
|
||||||
|
String orderDateStr = entry.getKey();
|
||||||
|
List<OrderShoppingCart> carts = entry.getValue();
|
||||||
|
String filteredOrderDate = orderShoppingCart.getMenuDateList().stream().filter(orderDate -> orderDate.equals(orderDateStr))
|
||||||
|
.findFirst().orElse(null);
|
||||||
|
|
||||||
|
menuDishCheckDTO.setApplyDate(orderDateStr);
|
||||||
|
Map<Integer, List<MenuRecipeDishesVO>> menuRecipeDishMap = menuModule.getMenuRecipeDish(menuDishCheckDTO);
|
||||||
|
|
||||||
|
for (OrderShoppingCart shoppingCart : carts) {
|
||||||
|
OrderShoppingCartVO shoppingCartVO = convertToOrderShoppingCartVO(shoppingCart, menuRecipeDishMap);
|
||||||
|
if(filteredOrderDate == null) {
|
||||||
|
shoppingCartVO.setIsValid(0);
|
||||||
|
}
|
||||||
|
orderShoppingCartVOList.add(shoppingCartVO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return orderShoppingCartVOList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private OrderShoppingCartVO convertToOrderShoppingCartVO(OrderShoppingCart shoppingCart,
|
||||||
|
Map<Integer, List<MenuRecipeDishesVO>> menuRecipeDishMap) {
|
||||||
|
OrderShoppingCartVO shoppingCartVO = new OrderShoppingCartVO();
|
||||||
|
BeanUtils.copyProperties(shoppingCart, shoppingCartVO);
|
||||||
|
shoppingCartVO.setIsValid(0);
|
||||||
|
|
||||||
|
List<MenuRecipeDishesVO> menuRecipeDishes = menuRecipeDishMap.get(shoppingCart.getMealtimeType());
|
||||||
|
if (CollUtil.isNotEmpty(menuRecipeDishes)) {
|
||||||
|
for (MenuRecipeDishesVO menuRecipeDishesVO : menuRecipeDishes) {
|
||||||
|
if (shoppingCart.getGoodsId().toString().equals(menuRecipeDishesVO.getDishesId())) {
|
||||||
|
shoppingCartVO.setIsValid(1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return shoppingCartVO;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增订单购物车
|
* 新增订单购物车
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,29 @@
|
||||||
package com.bonus.canteen.core.order.utils;
|
package com.bonus.canteen.core.order.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
import com.bonus.canteen.core.order.constants.OrderDetailTypeEnum;
|
import com.bonus.canteen.core.order.constants.OrderDetailTypeEnum;
|
||||||
import com.bonus.canteen.core.order.constants.OrderTypeEnum;
|
import com.bonus.canteen.core.order.constants.OrderTypeEnum;
|
||||||
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
import com.bonus.canteen.core.order.domain.OrderShoppingCart;
|
||||||
|
import com.bonus.canteen.core.order.domain.param.OrderShoppingCartQueryParam;
|
||||||
import com.bonus.common.core.exception.ServiceException;
|
import com.bonus.common.core.exception.ServiceException;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class ShoppingCartParamChecker {
|
public class ShoppingCartParamChecker {
|
||||||
public static void listCheck(OrderShoppingCart orderShoppingCart) {
|
public static void listCheck(OrderShoppingCartQueryParam orderShoppingCart) {
|
||||||
checkOrderShoppingCart(orderShoppingCart);
|
checkOrderShoppingCart(orderShoppingCart);
|
||||||
checkUserId(orderShoppingCart);
|
checkCanteenId(orderShoppingCart.getCanteenId());
|
||||||
checkCanteenId(orderShoppingCart);
|
checkStallId(orderShoppingCart.getStallId());
|
||||||
checkStallId(orderShoppingCart);
|
checkOrderType(orderShoppingCart.getOrderType());
|
||||||
checkOrderType(orderShoppingCart);
|
checkMenuDateList(orderShoppingCart.getMenuDateList());
|
||||||
}
|
}
|
||||||
public static void addCheck(OrderShoppingCart orderShoppingCart) {
|
public static void addCheck(OrderShoppingCart orderShoppingCart) {
|
||||||
checkOrderShoppingCart(orderShoppingCart);
|
checkOrderShoppingCart(orderShoppingCart);
|
||||||
checkUserId(orderShoppingCart);
|
checkUserId(orderShoppingCart);
|
||||||
checkGoodsId(orderShoppingCart);
|
checkGoodsId(orderShoppingCart);
|
||||||
checkQuantity(orderShoppingCart);
|
checkQuantity(orderShoppingCart);
|
||||||
checkCanteenId(orderShoppingCart);
|
checkCanteenId(orderShoppingCart.getCanteenId());
|
||||||
checkStallId(orderShoppingCart);
|
checkStallId(orderShoppingCart.getStallId());
|
||||||
checkOrderDate(orderShoppingCart);
|
checkOrderDate(orderShoppingCart);
|
||||||
checkMealtimeType(orderShoppingCart);
|
checkMealtimeType(orderShoppingCart);
|
||||||
checkDetailType(orderShoppingCart);
|
checkDetailType(orderShoppingCart);
|
||||||
|
|
@ -32,7 +36,7 @@ public class ShoppingCartParamChecker {
|
||||||
checkQuantity(orderShoppingCart);
|
checkQuantity(orderShoppingCart);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkOrderShoppingCart(OrderShoppingCart orderShoppingCart) {
|
private static void checkOrderShoppingCart(Object orderShoppingCart) {
|
||||||
if (orderShoppingCart == null) {
|
if (orderShoppingCart == null) {
|
||||||
throw new ServiceException("订单购物车对象为空");
|
throw new ServiceException("订单购物车对象为空");
|
||||||
}
|
}
|
||||||
|
|
@ -61,14 +65,14 @@ public class ShoppingCartParamChecker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkCanteenId(OrderShoppingCart orderShoppingCart) {
|
private static void checkCanteenId(Long canteenId) {
|
||||||
if (orderShoppingCart.getCanteenId() == null) {
|
if (canteenId == null) {
|
||||||
throw new ServiceException("食堂ID为空");
|
throw new ServiceException("食堂ID为空");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkStallId(OrderShoppingCart orderShoppingCart) {
|
private static void checkStallId(Long stallId) {
|
||||||
if (orderShoppingCart.getStallId() == null) {
|
if (stallId == null) {
|
||||||
throw new ServiceException("档口ID为空");
|
throw new ServiceException("档口ID为空");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -99,13 +103,18 @@ public class ShoppingCartParamChecker {
|
||||||
throw new ServiceException("菜谱ID为空");
|
throw new ServiceException("菜谱ID为空");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private static void checkOrderType(OrderShoppingCart orderShoppingCart) {
|
private static void checkOrderType(Integer orderType) {
|
||||||
if (orderShoppingCart.getOrderType() == null) {
|
if (orderType == null) {
|
||||||
throw new ServiceException("订单类型为空");
|
throw new ServiceException("订单类型为空");
|
||||||
}
|
}
|
||||||
if(OrderTypeEnum.isValidKey(orderShoppingCart.getOrderType())) {
|
if(OrderTypeEnum.isValidKey(orderType)) {
|
||||||
throw new ServiceException("订单类型错误");
|
throw new ServiceException("订单类型错误");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void checkMenuDateList(List<String> menuDateList) {
|
||||||
|
if (CollUtil.isEmpty(menuDateList)) {
|
||||||
|
throw new ServiceException("菜谱日期列表为空");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,5 +24,8 @@ public enum PayStateEnum {
|
||||||
public String getDesc() {
|
public String getDesc() {
|
||||||
return this.desc;
|
return this.desc;
|
||||||
}
|
}
|
||||||
|
public static boolean isUnPay(Integer key) {
|
||||||
|
return !UN_PAY.getKey().equals(key);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,9 +14,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<result property="surplusNum" column="surplus_num" />
|
<result property="surplusNum" column="surplus_num" />
|
||||||
<result property="restrictNum" column="restrict_num" />
|
<result property="restrictNum" column="restrict_num" />
|
||||||
<result property="salePrice" column="sale_price" />
|
<result property="salePrice" column="sale_price" />
|
||||||
<result property="saleStart" column="sale_start" />
|
<!-- <result property="saleStart" column="sale_start" />-->
|
||||||
<result property="saleEnd" column="sale_end" />
|
<!-- <result property="saleEnd" column="sale_end" />-->
|
||||||
<result property="chefId" column="chef_id" />
|
<!-- <result property="chefId" column="chef_id" />-->
|
||||||
<result property="recommendFlag" column="recommend_flag" />
|
<result property="recommendFlag" column="recommend_flag" />
|
||||||
<result property="sortNum" column="sort_num" />
|
<result property="sortNum" column="sort_num" />
|
||||||
<result property="revision" column="revision" />
|
<result property="revision" column="revision" />
|
||||||
|
|
@ -24,7 +24,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<result property="createTime" column="create_time" />
|
<result property="createTime" column="create_time" />
|
||||||
<result property="updateBy" column="update_by" />
|
<result property="updateBy" column="update_by" />
|
||||||
<result property="updateTime" column="update_time" />
|
<result property="updateTime" column="update_time" />
|
||||||
<result property="remark" column="remark" />
|
<!-- <result property="remark" column="remark" />-->
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectMenuRecipeDishesVo">
|
<sql id="selectMenuRecipeDishesVo">
|
||||||
|
|
@ -132,6 +132,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<update id="reduceMenuRecipeDishesSupplyNum">
|
||||||
|
update menu_recipe_dishes set
|
||||||
|
sale_num = sale_num + #{quantity},
|
||||||
|
surplus_num = surplus_num - #{quantity}
|
||||||
|
where detail_id = #{dish.detailId} and dishes_id = #{dish.dishesId}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<update id="addMenuRecipeDishesSupplyNum">
|
||||||
|
update menu_recipe_dishes set
|
||||||
|
sale_num = sale_num - #{quantity},
|
||||||
|
surplus_num = surplus_num + #{quantity}
|
||||||
|
where detail_id = #{dish.detailId} and dishes_id = #{dish.dishesId}
|
||||||
|
</update>
|
||||||
|
|
||||||
<delete id="deleteMenuRecipeDishesById" parameterType="Long">
|
<delete id="deleteMenuRecipeDishesById" parameterType="Long">
|
||||||
delete from menu_recipe_dishes where id = #{id}
|
delete from menu_recipe_dishes where id = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue