代客下单支持外带用餐模式

This commit is contained in:
SongZhang 2024-09-18 17:29:10 +08:00
parent e9fa13fdd8
commit 1b3158930f
18 changed files with 188 additions and 126 deletions

View File

@ -91,7 +91,7 @@ public class TbPlaceController {
@PutMapping("/returnCart")
@Log("代客下单 退单")
@ApiOperation("代客下单 清空购物车 /shop/table")
public ResponseEntity<Object> returnOrder(@Validated @RequestBody RemoveCartDTO removeCartDTO) {
public ResponseEntity<Object> returnOrder(@Validated @RequestBody ReturnOrderDTO removeCartDTO) {
tbShopTableService.returnCart(removeCartDTO);
return new ResponseEntity<>(HttpStatus.OK);
}
@ -112,40 +112,40 @@ public class TbPlaceController {
public ResponseEntity<Object> getCart(
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size,
@RequestParam Long tableId,
@RequestParam(required = false) Long tableId,
@RequestParam Integer shopId,
@RequestParam(required = false) Integer vipUserId,
@RequestParam String masterId
@RequestParam String masterId,
@RequestParam String useType
) {
return ResponseEntity.ok(tbShopTableService.getCart(tableId, page, size, shopId, vipUserId, masterId));
return ResponseEntity.ok(tbShopTableService.getCart(tableId, page, size, shopId,masterId, useType));
}
@AnonymousAccess
@AnonymousAccess
@GetMapping("/pending/cart")
@Log("代客下单 查询购物车")
@ApiOperation("代客下单 查询购物车 /shop/table")
public ResponseEntity<Object> getPendingCart(
@RequestParam Integer shopId,
@RequestParam String tableId
@RequestParam(required = false) String tableId,
@RequestParam String useType
) {
return ResponseEntity.ok(tbShopTableService.getCar(shopId, tableId));
return ResponseEntity.ok(tbShopTableService.getCar(shopId, tableId, useType));
}
@AnonymousAccess
@GetMapping("/masterId")
@Log("代客下单 查询购物车")
@ApiOperation("代客下单 ")
public ResponseEntity<Object> getMasterId(
@RequestParam Integer shopId,
@RequestParam Long tableId,
@RequestParam(defaultValue = "") String useType,
@RequestParam(required = false) Integer vipUserId
) {
return ResponseEntity.ok(tbShopTableService.getMasterId(shopId, tableId, vipUserId));
return ResponseEntity.ok(tbShopTableService.getMasterId(shopId, tableId, vipUserId, useType));
}
@AnonymousAccess
@PostMapping("/order")
@Log("代客下单 查询购物车")
@ApiOperation("代客下单 查询购物车 /shop/table")
@ -156,7 +156,6 @@ public class TbPlaceController {
}
@AnonymousAccess
@PostMapping("/pending")
@Log("代客下单 查询购物车")
@ApiOperation("代客下单 查询购物车 /shop/table")
@ -167,7 +166,6 @@ public class TbPlaceController {
}
@AnonymousAccess
@GetMapping("/payType")
@Log("代客下单 查询购物车")
@ApiOperation("代客下单 查询购物车 /shop/table")
@ -223,8 +221,6 @@ public class TbPlaceController {
return ResponseEntity.ok(tbShopTableService.choseCount(choseCountDTO));
}
@AnonymousAccess
@PutMapping("/updateVip")
@Log("代客下单 查询购物车")

View File

@ -3,6 +3,7 @@ package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@ -17,7 +18,6 @@ public class AddCartDTO {
private Integer skuId;
@NotNull
private Integer shopId;
@NotEmpty
private String tableId;
@NotNull
@Min(1)
@ -26,4 +26,8 @@ public class AddCartDTO {
private boolean isGift;
private Integer cartId;
private String note;
// 用餐类型
@NotBlank
private String useType;
}

View File

@ -17,4 +17,6 @@ public class ChoseCountDTO {
@NotNull
@Min(1)
private Integer num;
@NotEmpty
private String useType;
}

View File

@ -16,4 +16,5 @@ public class ChoseTableDTO {
private String newTableId;
@NotEmpty
private String oldTableId;
}

View File

@ -6,12 +6,12 @@ import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class ClearCartDTO {
public class ClearCartDTO {
@NotEmpty
private String masterId;
private Integer vipUserId;
@NotNull
private Long tableId;
@NotNull
private String shopId;
@NotEmpty
private String useType;
private Long tableId;
}

View File

@ -9,12 +9,12 @@ import javax.validation.constraints.NotNull;
public class CreateOrderDTO {
@NotEmpty
private String masterId;
private Integer vipUserId;
@NotNull
private Integer shopId;
@NotEmpty
private String tableId;
private String note;
private boolean postPay;
private Integer orderId;
@NotEmpty
private String useType;
}

View File

@ -2,8 +2,12 @@ package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class DeleteOrderDTO {
@NotNull
private Integer shopId;
@NotNull
private Integer orderId;
}

View File

@ -13,7 +13,6 @@ public class PackCartDTO {
private Integer vipUserId;
@NotNull
private Integer shopId;
@NotEmpty
private String tableId;
@NotNull
@Range(min = 0, max = 1)

View File

@ -3,6 +3,7 @@ package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import org.bouncycastle.asn1.cmc.PendInfo;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@ -12,9 +13,10 @@ public class PendingDTO {
@NotNull
private Integer shopId;
private String tableId;
private Integer vipUserId;
@NotNull
private Boolean isPending;
private Integer orderId;
private String note;
@NotBlank
private String useType;
}

View File

@ -2,6 +2,7 @@ package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@ -11,6 +12,7 @@ public class RemoveCartDTO {
private Integer cartId;
@NotNull
private Integer shopId;
@NotNull
private Long tableId;
@NotBlank
private String useType;
}

View File

@ -19,4 +19,5 @@ public class UpdateVipDTO {
@NotNull
@Range(min = 0, max = 1)
private Integer type;
}

View File

@ -0,0 +1,15 @@
package cn.ysk.cashier.enums;
import lombok.Getter;
@Getter
public enum OrderUseTypeEnum {
TAKEOUT("takeout"),
DINE_IN_AFTER("dine-in-after"),
DINE_IN_BEFORE("dine-in-before");
private final String value;
OrderUseTypeEnum(String value) {
this.value = value;
}
}

View File

@ -20,11 +20,8 @@ public interface TbCashierCartMapper extends BaseMapper<TbCashierCart> {
" from tb_cashier_cart where table_id is not null and shop_id = #{shopId} and status = 'refund' group by shop_Id, master_id order by trade_day desc")
List<CarVO> selectCar(@Param("shopId") Integer shopId);
@Select("select a.id orderId,b.pending_at pendingAt, sum(b.total_amount) totalAmount, count(b.id) totalCount, sum(b.total_number) totalNumber, a.remark from tb_order_info a " +
"JOIN tb_cashier_cart b on a.id=b.order_id " +
"where a.shop_id=#{shopId} and a.`status`='pending' and a.table_id=#{tableId} and a.trade_day=#{day}" +
"GROUP BY a.id ORDER BY a.id desc ")
List<PendingCountVO> countPending(@Param("shopId") Integer shopId, @Param("tableId") String tableId, @Param("day") String day);
List<PendingCountVO> countPending(@Param("shopId") Integer shopId, @Param("tableId") String tableId, @Param("day") String day, @Param("useType") String useType);
@Select("select a.*, b.spec_snap from tb_cashier_cart as a left join tb_product_sku as b on a.sku_id=b.id where a.shop_id=#{shopId} and a.status='refund';")
List<TbCashierCartVO> selectPending(Integer shopId);

View File

@ -159,6 +159,8 @@ public class TbCashierCart implements Serializable {
private Integer placeNum;
@Column(name = "`note`")
private String note;
@Column(name = "`use_type`")
private String useType;
public void copy(TbCashierCart source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));

View File

@ -119,6 +119,9 @@ public class TbOrderDetail implements Serializable {
@Column(name = "`cart_id`")
private Integer cartId;
@Column(name = "`use_type`")
private String useType;
public void copy(TbOrderDetail source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
}

View File

@ -10,6 +10,7 @@ import cn.ysk.cashier.config.security.security.TokenProvider;
import cn.ysk.cashier.cons.RedisConstant;
import cn.ysk.cashier.cons.rabbit.RabbitConstants;
import cn.ysk.cashier.dto.shoptable.*;
import cn.ysk.cashier.enums.OrderUseTypeEnum;
import cn.ysk.cashier.enums.ShopWxMsgTypeEnum;
import cn.ysk.cashier.enums.TableStateEnum;
import cn.ysk.cashier.exception.BadRequestException;
@ -341,7 +342,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public TbCashierCart addCartForUser(AddCartDTO addCartDTO) {
checkTableIsOpen(addCartDTO.getTableId());
if (StrUtil.isNotBlank(addCartDTO.getTableId())) {
checkTableIsOpen(addCartDTO.getTableId());
}
int currentPlaceNum = getCurrentPlaceNum(addCartDTO.getTableId(), addCartDTO.getShopId().toString());
@ -362,15 +365,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbCashierCart::getShopId, addCartDTO.getShopId())
.eq(TbCashierCart::getSkuId, addCartDTO.getSkuId())
.eq(TbCashierCart::getProductId, addCartDTO.getProductId())
.eq(TbCashierCart::getTableId, addCartDTO.getTableId())
.isNull(TbCashierCart::getPlaceNum)
.eq(TbCashierCart::getUseType, addCartDTO.getUseType())
.in(TbCashierCart::getStatus, "create", "refund")
// .and(q -> {
// q.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
// .or()
// .isNull(TbCashierCart::getTradeDay);
//
// });
.and(query2 -> {
query2.and(query3 -> {
query3.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
@ -386,6 +383,10 @@ public class TbShopTableServiceImpl implements TbShopTableService {
query.eq(TbCashierCart::getId, addCartDTO.getCartId());
}
if (StrUtil.isNotBlank(addCartDTO.getTableId())) {
query.eq(TbCashierCart::getTableId, addCartDTO.getTableId());
}
TbCashierCart tbCashierCart = cashierCartMapper.selectOne(query);
// 增加redis购物车数据
String tableCartKey = RedisConstant.getTableCartKey(addCartDTO.getTableId(), addCartDTO.getShopId().toString());
@ -393,11 +394,14 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 首次加入
if (tbCashierCart == null) {
tbCashierCart = new TbCashierCart();
tbCashierCart.setUseType(addCartDTO.getUseType());
tbCashierCart.setUserId(addCartDTO.getVipUserId());
tbCashierCart.setCoverImg(product.getCoverImg());
tbCashierCart.setCreatedAt(System.currentTimeMillis());
tbCashierCart.setIsSku(product.getTypeEnum());
tbCashierCart.setTableId(Long.valueOf(addCartDTO.getTableId()));
if (StrUtil.isNotBlank(addCartDTO.getTableId())) {
tbCashierCart.setTableId(Long.valueOf(addCartDTO.getTableId()));
}
tbCashierCart.setName(product.getName());
tbCashierCart.setProductId(String.valueOf(product.getId()));
tbCashierCart.setSalePrice(productSku.getSalePrice());
@ -451,7 +455,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
cashierCartRepository.save(tbCashierCart);
}
setRedisTableCartInfo(addCartDTO.getTableId(), addCartDTO.getShopId().toString(), Collections.singletonList(tbCashierCart), true);
if (StrUtil.isNotBlank(addCartDTO.getTableId())) {
setRedisTableCartInfo(addCartDTO.getTableId(), addCartDTO.getShopId().toString(), Collections.singletonList(tbCashierCart), true);
}
return tbCashierCart;
}
@ -483,16 +489,17 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public void removeCart(RemoveCartDTO removeCartDTO) {
int currentPlaceNum = getCurrentPlaceNum(removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString());
int currentPlaceNum = getCurrentPlaceNum(removeCartDTO.getTableId() == null ? "" : removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString());
// 会员点单
TbCashierCart cashierCart = cashierCartMapper.selectOne(new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, removeCartDTO.getShopId())
.eq(TbCashierCart::getUseType, removeCartDTO.getUseType())
.eq(TbCashierCart::getId, removeCartDTO.getCartId()));
if (cashierCart == null) {
throw new BadRequestException("购物车商品不存在");
}
if (cashierCart.getPlaceNum() != null && !cashierCart.getPlaceNum().equals(currentPlaceNum)) {
if (removeCartDTO.getTableId() != null && cashierCart.getPlaceNum() != null && !cashierCart.getPlaceNum().equals(currentPlaceNum)) {
throw new BadRequestException("已下单商品仅支持退单操作");
}
@ -501,26 +508,28 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbOrderDetail::getShopId, cashierCart.getShopId())
.eq(TbOrderDetail::getProductId, cashierCart.getProductId())
.eq(TbOrderDetail::getProductSkuId, cashierCart.getSkuId())
.eq(TbOrderDetail::getUseType, removeCartDTO.getUseType())
.isNull(TbOrderDetail::getPlaceNum)
.eq(TbOrderDetail::getOrderId, cashierCart.getOrderId()));
}
cashierCartMapper.deleteById(cashierCart.getId());
// 清空购物车 出票
long carCount = countCar(cashierCart.getTableId(), cashierCart.getShopId(), cashierCart.getMasterId());
if (removeCartDTO.getTableId() != null) {
// 清空购物车 出票
long carCount = countCar(cashierCart.getTableId(), cashierCart.getShopId(), cashierCart.getMasterId());
log.info("购物车数量: {}", carCount);
if (cashierCart.getOrderId() != null && carCount < 1) {
rabbitMsgUtils.printTicket(String.valueOf(cashierCart.getOrderId()));
log.info("购物车数量: {}", carCount);
if (cashierCart.getOrderId() != null && carCount < 1) {
rabbitMsgUtils.printTicket(String.valueOf(cashierCart.getOrderId()));
}
setRedisTableCartInfo(removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString(), Collections.singletonList(cashierCart), false);
}
setRedisTableCartInfo(removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString(), Collections.singletonList(cashierCart), false);
}
@Override
public void returnCart(RemoveCartDTO removeCartDTO) {
public void returnCart(ReturnOrderDTO removeCartDTO) {
rabbitMsgUtils.printDishesReturnTicket(4450, 9313);
int currentPlaceNum = getCurrentPlaceNum(removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString());
@ -562,13 +571,17 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public void clearCart(ClearCartDTO clearCartDTO) {
String orderId = redisTemplate.opsForValue().get(RedisConstant.getCurrentOrderKey(clearCartDTO.getTableId().toString(), clearCartDTO.getShopId()));
int currentPlaceNum = getCurrentPlaceNum(clearCartDTO.getTableId().toString(), clearCartDTO.getShopId());
String orderId;
if (clearCartDTO.getTableId() != null) {
orderId = getCurrentOrderId(clearCartDTO.getTableId().toString(), clearCartDTO.getShopId());
} else {
orderId = "";
}
cashierCartMapper.delete(new LambdaQueryWrapper<TbCashierCart>()
LambdaQueryWrapper<TbCashierCart> query = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, clearCartDTO.getShopId())
.eq(TbCashierCart::getTableId, clearCartDTO.getTableId())
.eq(TbCashierCart::getPlaceNum, currentPlaceNum)
.isNull(TbCashierCart::getPlaceNum)
.eq(TbCashierCart::getUseType, clearCartDTO.getUseType())
.and(q -> {
q.eq(TbCashierCart::getMasterId, clearCartDTO.getMasterId())
.or()
@ -580,20 +593,14 @@ public class TbShopTableServiceImpl implements TbShopTableService {
q.eq(TbCashierCart::getOrderId, orderId)
.or()
.isNull(TbCashierCart::getOrderId);
})
);
});
if (clearCartDTO.getTableId() != null) {
query.eq(TbCashierCart::getTableId, clearCartDTO.getTableId());
// tbShopTableRepository.deleteByTableIdAndShopId(clearCartDTO.getTableId(), clearCartDTO.getShopId());
if (StrUtil.isNotBlank(orderId)) {
orderDetailMapper.delete(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, clearCartDTO.getShopId())
.eq(TbOrderDetail::getPlaceNum, currentPlaceNum)
.eq(TbOrderDetail::getOrderId, orderId));
rabbitMsgUtils.printTicket(orderId);
}
cashierCartMapper.delete(query);
}
private long countCar(Long tableId, String shopId, String masterId) {
@ -606,11 +613,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public Map<String, Object> getCart(Long tableId, Integer page,
Integer size, Integer shopId, Integer vipUserId, String masterId) {
Integer size, Integer shopId, String masterId, String useType) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getTableId, tableId)
.in(TbCashierCart::getStatus, "create", "refund", "return")
.eq(TbCashierCart::getShopId, shopId)
.eq(TbCashierCart::getUseType, useType)
.and(query2 -> {
query2.or(query3 -> {
query3.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
@ -622,12 +629,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}));
});
// if (vipUserId != null) {
// queryWrapper.eq(TbCashierCart::getUserId, vipUserId);
// }else {
// queryWrapper.eq(TbCashierCart::getMasterId, masterId);
// queryWrapper.isNull(TbCashierCart::getUserId);
// }
if (tableId != null) {
queryWrapper.eq(TbCashierCart::getTableId, tableId);
}
com.baomidou.mybatisplus.extension.plugins.pagination.Page<TbCashierCart> cartPage = cashierCartMapper
.selectPage(new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(page, size), queryWrapper);
@ -683,7 +687,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public void pack(PackCartDTO packCartDTO) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getTableId, packCartDTO.getTableId())
.eq(TbCashierCart::getShopId, packCartDTO.getShopId())
.in(TbCashierCart::getStatus, "create", "refund")
.and(query2 -> {
@ -697,11 +700,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}));
});
// if (packCartDTO.getVipUserId() != null) {
// queryWrapper.eq(TbCashierCart::getUserId, packCartDTO.getVipUserId());
// } else {
// queryWrapper.isNull(TbCashierCart::getUserId);
// }
if (StrUtil.isNotBlank(packCartDTO.getTableId())) {
queryWrapper.eq(TbCashierCart::getTableId, packCartDTO.getTableId());
}
List<TbCashierCart> tbCashierCarts = cashierCartMapper.selectList(queryWrapper);
tbCashierCarts.forEach(item -> {
@ -925,7 +926,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
private final StringRedisTemplate redisTemplate;
@Override
public JSONObject getMasterId(Integer shopId, Long tableId, Integer vipUserId) {
public JSONObject getMasterId(Integer shopId, Long tableId, Integer vipUserId, String useType) {
String account = tokenProvider.getSubject();
if (account == null) {
throw new BadRequestException("token解析失败");
@ -934,7 +935,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
String day = DateUtils.getDay();
JSONObject jsonObject = new JSONObject();
// 当前台桌码
String key = "SHOP:CODE:USER:pc" + ":" + shopId + ":" + day + ":" + tableId;
String key = "SHOP:CODE:USER:pc" + ":" + shopId + ":" + day + ":" + tableId + useType;
String userCode = redisTemplate.opsForValue().get(key);
if (StringUtils.isEmpty(userCode) || "null".equals(userCode) || "#null".equals(userCode)) {
@ -965,21 +966,24 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public TbOrderInfo createOrder(CreateOrderDTO createOrderDTO, boolean addMaterId, boolean isPrint) {
return Utils.runFunAndCheckKey(() -> {
TbShopTable tbShopTable = mpShopTableMapper.selectOne(new LambdaQueryWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, createOrderDTO.getTableId())
.in(TbShopTable::getStatus, "idle", "using"));
TbShopTable tbShopTable = null;
boolean tableFlag = StrUtil.isNotBlank(createOrderDTO.getTableId());
if (tableFlag) {
tbShopTable = mpShopTableMapper.selectOne(new LambdaQueryWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, createOrderDTO.getTableId())
.in(TbShopTable::getStatus, "idle", "using"));
if (tbShopTable == null) {
throw new BadRequestException("台桌未开台或不存在");
if (tbShopTable == null) {
throw new BadRequestException("台桌未开台或不存在");
}
}
// 传递orderId直接取否则取当前缓存id
String currentOrderKey = RedisConstant.getCurrentOrderKey(createOrderDTO.getTableId(),
createOrderDTO.getShopId().toString());
String orderIdValue = redisTemplate.opsForValue().get(currentOrderKey);
Integer orderId = orderIdValue == null ? null : Integer.parseInt(orderIdValue);
orderId = createOrderDTO.getOrderId() != null ? createOrderDTO.getOrderId() : orderId;
orderId = tableFlag ? createOrderDTO.getOrderId() != null ? createOrderDTO.getOrderId() : orderId : null;
// 查询订单
TbOrderInfo orderInfo = null;
@ -994,8 +998,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
String day = DateUtils.getDay();
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, createOrderDTO.getShopId())
.eq(TbCashierCart::getTableId, createOrderDTO.getTableId())
.in(TbCashierCart::getStatus, "create", "refund")
.in(TbCashierCart::getStatus, "create")
.eq(TbCashierCart::getUseType, createOrderDTO.getUseType())
.and(query2 -> {
query2.or(query3 -> {
query3.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
@ -1007,6 +1011,10 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}));
});
if (StrUtil.isNotBlank(createOrderDTO.getTableId())) {
queryWrapper.eq(TbCashierCart::getTableId, createOrderDTO.getTableId());
}
List<TbCashierCart> cashierCarts = cashierCartMapper
.selectList(queryWrapper);
if (cashierCarts.isEmpty()) {
@ -1018,13 +1026,13 @@ public class TbShopTableServiceImpl implements TbShopTableService {
BigDecimal feeAmount = BigDecimal.ZERO;
BigDecimal saleAmount = BigDecimal.ZERO;
// 当前下单次数
int placeNum = getCurrentPlaceNum(createOrderDTO.getTableId(), createOrderDTO.getShopId().toString());
int placeNum = StrUtil.isNotBlank(createOrderDTO.getTableId()) ? getCurrentPlaceNum(createOrderDTO.getTableId(), createOrderDTO.getShopId().toString()) : 1;
List<TbOrderDetail> orderDetails = new ArrayList<>();
Integer mealNum = null;
boolean unAdd = cashierCarts.stream().noneMatch(item -> item.getPlaceNum() == null);
if (addMaterId && unAdd) {
if (addMaterId && unAdd && !OrderUseTypeEnum.TAKEOUT.getValue().equals(createOrderDTO.getUseType())) {
throw new BadRequestException("此次未添加新商品,清先添加商品");
}
for (TbCashierCart cashierCart : cashierCarts) {
@ -1056,6 +1064,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderDetail.setShopId(Integer.valueOf(cashierCart.getShopId()));
orderDetail.setPackAmount(cashierCart.getPackFee());
orderDetail.setStatus("unpaid");
orderDetail.setUseType(createOrderDTO.getUseType());
orderDetail.setProductImg(cashierCart.getCoverImg());
orderDetail.setCartId(cashierCart.getId());
orderDetails.add(orderDetail);
@ -1066,7 +1075,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderDetail.setPlaceNum(placeNum);
}
if (mealNum == null) {
if ((OrderUseTypeEnum.DINE_IN_BEFORE.getValue().equals(createOrderDTO.getUseType()) || OrderUseTypeEnum.DINE_IN_AFTER.getValue().equals(createOrderDTO.getUseType()))
&& mealNum == null) {
throw new BadRequestException("请选择用餐人数");
}
@ -1087,7 +1097,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setProductAmount(saleAmount);
orderInfo.setTradeDay(DateUtils.getDay());
orderInfo.setUseType(createOrderDTO.isPostPay() ? "postPay" : "afterPay");
orderInfo.setUserId(createOrderDTO.getVipUserId() == null ? null : String.valueOf(createOrderDTO.getVipUserId()));
orderInfo.setUseType(createOrderDTO.getUseType());
orderInfo.setCreatedAt(DateUtil.current());
if (!unAdd) {
orderInfo.setPlaceNum(placeNum);
@ -1115,10 +1125,10 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setMasterId(createOrderDTO.getMasterId());
orderInfo.setOutNumber(createOrderDTO.getMasterId());
orderInfo.setRemark(createOrderDTO.getNote());
orderInfo.setUserId(createOrderDTO.getVipUserId() == null ? null : String.valueOf(createOrderDTO.getVipUserId()));
orderInfo.setCreatedAt(DateUtil.current());
orderInfo.setTableName(tbShopTable.getName());
orderInfo.setTableName(tbShopTable != null ? tbShopTable.getName() : null);
orderInfo.setPlaceNum(placeNum);
orderInfo.setUseType(createOrderDTO.getUseType());
TbMerchantAccount merchantAccount = merchantAccountMapper.selectOne(new LambdaQueryWrapper<TbMerchantAccount>()
.eq(TbMerchantAccount::getShopId, createOrderDTO.getShopId())
.eq(TbMerchantAccount::getStatus, 1));
@ -1128,7 +1138,10 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setMerchantId(merchantAccount.getId().toString());
orderInfoMapper.insert(orderInfo);
redisTemplate.opsForValue().set(currentOrderKey, orderInfo.getId().toString());
// 台桌下单才保存订单信息
if (tableFlag) {
redisTemplate.opsForValue().set(currentOrderKey, orderInfo.getId().toString());
}
}
@ -1166,8 +1179,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 后付费不增加当前台桌取餐号
if (createOrderDTO.isPostPay()) {
addGlobalCode(day, "pc", String.valueOf(createOrderDTO.getShopId()));
// String key = "SHOP:CODE:USER:pc" + ":" + createOrderDTO.getShopId() + ":" + day + ":" + orderInfo.getTableId();
// redisTemplate.delete(key);
}
if (!createOrderDTO.isPostPay() || (addMaterId && "pending".equals(orderInfo.getStatus()))) {
@ -1225,6 +1236,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getUseType, pendingDTO.getUseType())
.eq(TbCashierCart::getShopId, pendingDTO.getShopId());
if (!pendingDTO.getIsPending()) {
@ -1234,9 +1246,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
queryWrapper.eq(TbCashierCart::getOrderId, pendingDTO.getOrderId());
} else {
queryWrapper.eq(TbCashierCart::getTableId, pendingDTO.getTableId())
queryWrapper
.eq(TbCashierCart::getStatus, "create")
.eq(TbCashierCart::getTableId, pendingDTO.getTableId())
.and(query2 -> {
query2.or(query3 -> {
query3.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
@ -1247,12 +1258,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbCashierCart::getMasterId, "");
}));
});
// if (pendingDTO.getVipUserId() != null) {
// queryWrapper.eq(TbCashierCart::getUserId, pendingDTO.getVipUserId());
// }else {
// queryWrapper.eq(TbCashierCart::getMasterId, pendingDTO.getMasterId())
// .isNull(TbCashierCart::getUserId);
// }
if (StrUtil.isNotBlank(pendingDTO.getTableId())) {
queryWrapper.eq(TbCashierCart::getTableId, pendingDTO.getTableId());
}
}
List<TbCashierCart> cashierCarts = cashierCartMapper
@ -1273,22 +1283,22 @@ public class TbShopTableServiceImpl implements TbShopTableService {
createOrderDTO.setTableId(pendingDTO.getTableId());
createOrderDTO.setShopId(pendingDTO.getShopId());
createOrderDTO.setMasterId(pendingDTO.getMasterId());
createOrderDTO.setVipUserId(pendingDTO.getVipUserId());
createOrderDTO.setNote(pendingDTO.getNote());
createOrderDTO.setUseType(pendingDTO.getUseType());
orderId = createOrder(createOrderDTO, true, false).getId();
}
TbOrderDetail orderDetail = new TbOrderDetail();
orderDetail.setStatus(pendingDTO.getIsPending() ? "pending" : "cancelled");
orderDetail.setStatus(pendingDTO.getIsPending() ? "pending" : "unpaid");
orderDetailMapper.update(orderDetail, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, pendingDTO.getIsPending())
.eq(TbOrderDetail::getShopId, pendingDTO.getShopId())
.eq(TbOrderDetail::getOrderId, orderId));
TbOrderInfo orderInfo = new TbOrderInfo();
orderInfo.setId(orderId);
orderInfo.setStatus(pendingDTO.getIsPending() ? "pending" : "cancelled");
orderInfo.setStatus(pendingDTO.getIsPending() ? "pending" : "unpaid");
orderInfoMapper.updateById(orderInfo);
TbCashierCart cashierCart = new TbCashierCart();
@ -1299,31 +1309,36 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 后付款订单修改台桌状态并打票
if (pendingDTO.getIsPending()) {
if (pendingDTO.getIsPending() && StrUtil.isNotBlank(pendingDTO.getTableId())) {
mpShopTableMapper.update(null, new LambdaUpdateWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, cashierCart.getTableId())
.set(TbShopTable::getStatus, TableStateEnum.PENDING.getState()));
}
redisTemplate.delete(RedisConstant.getCurrentOrderKey(pendingDTO.getTableId(), pendingDTO.getShopId().toString()));
if (StrUtil.isNotBlank(pendingDTO.getTableId())) {
redisTemplate.delete(RedisConstant.getCurrentOrderKey(pendingDTO.getTableId(), pendingDTO.getShopId().toString()));
}
return orderInfoMapper.selectById(orderId);
}
@Override
public Object getCar(Integer shopId, String tableId) {
public Object getCar(Integer shopId, String tableId, String useType) {
ArrayList<Map<String, Object>> data = new ArrayList<>();
List<PendingCountVO> pendingCountVOS = cashierCartMapper.countPending(shopId, tableId, DateUtils.getDay());
List<TbCashierCart> tbCashierCarts = cashierCartMapper.selectList(new LambdaQueryWrapper<TbCashierCart>()
List<PendingCountVO> pendingCountVOS = cashierCartMapper.countPending(shopId, tableId, DateUtils.getDay(), useType);
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, shopId)
.eq(TbCashierCart::getTableId, tableId)
.eq(TbCashierCart::getStatus, "refund"));
.eq(TbCashierCart::getUseType, useType)
.eq(TbCashierCart::getStatus, "refund");
if (StrUtil.isNotBlank(tableId)) {
queryWrapper.eq(TbCashierCart::getTableId, tableId);
}
List<TbCashierCart> tbCashierCarts = cashierCartMapper.selectList(queryWrapper);
ArrayList<Integer> skuIds = new ArrayList<>();
tbCashierCarts.forEach(item -> {
skuIds.add(Integer.valueOf(item.getSkuId()));
});
tbCashierCarts.forEach(item -> skuIds.add(Integer.valueOf(item.getSkuId())));
List<TbProductSku> skuList = productSkuRepository.findAllById(skuIds);
@ -1530,7 +1545,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override
public Object choseTable(ChoseTableDTO choseTableDTO) {
String masterId = getMasterId(choseTableDTO.getShopId(), Long.valueOf(choseTableDTO.getNewTableId()), null).getString("masterId");
String masterId = getMasterId(choseTableDTO.getShopId(), Long.valueOf(choseTableDTO.getNewTableId()), null, "").getString("masterId");
String currentOrderId = choseTableDTO.getOrderId() == null ? getCurrentOrderId(choseTableDTO.getOldTableId(),
choseTableDTO.getShopId().toString()) : choseTableDTO.getOrderId().toString();
@ -1598,6 +1613,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbCashierCart::getMasterId, choseCountDTO.getMasterId())
.eq(TbCashierCart::getProductId, "-999")
.eq(TbCashierCart::getSkuId, "-999")
.eq(TbCashierCart::getUseType, choseCountDTO.getUseType())
.eq(TbCashierCart::getTradeDay, cn.ysk.cashier.utils.DateUtils.getDay())
.eq(TbCashierCart::getTableId, choseCountDTO.getTableId());
TbCashierCart tbCashierCart = cashierCartMapper.selectOne(query);

View File

@ -100,11 +100,11 @@ public interface TbShopTableService {
void removeCart(RemoveCartDTO removeCartDTO);
void returnCart(RemoveCartDTO removeCartDTO);
void returnCart(ReturnOrderDTO removeCartDTO);
void clearCart(ClearCartDTO clearCartDTO);
Map<String, Object> getCart(Long tableId, Integer page, Integer size, Integer shopId, Integer vipUserId, String masterId);
Map<String, Object> getCart(Long tableId, Integer page, Integer size, Integer shopId, String masterId, String useType);
TbCashierCart updateCart(UpdateCartDTO updateCartDTO);
@ -112,11 +112,11 @@ public interface TbShopTableService {
Object createOrder(CreateOrderDTO createOrderDTO, boolean addMasterId, boolean isPrint);
JSONObject getMasterId(Integer shopId, Long tableId, Integer vipUserId);
JSONObject getMasterId(Integer shopId, Long tableId, Integer vipUserId, String useType);
Object pending(PendingDTO pendingDTO);
Object getCar(Integer shopId, String tableId);
Object getCar(Integer shopId, String tableId, String useType);
Object getPayType(Integer shopId);

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.ysk.cashier.mybatis.mapper.TbCashierCartMapper">
<select id="countPending" resultType="cn.ysk.cashier.vo.PendingCountVO">
select
a.id orderId,b.pending_at pendingAt, sum(b.total_amount) totalAmount,
count(b.id) totalCount, sum(b.total_number) totalNumber, a.remark
from tb_order_info a
JOIN tb_cashier_cart b on a.id=b.order_id
where a.shop_id=#{shopId} and a.`status`='pending'
and a.trade_day=#{day} and a.use_type=#{useType}
<if test="tableId != null and tableId != ''">
and a.table_id=#{tableId}
</if>
GROUP BY a.id ORDER BY a.id desc
</select>
</mapper>