1.代客下单 退单接口 选择台桌 选择人数

This commit is contained in:
2024-09-11 11:17:39 +08:00
parent 6096f91b6c
commit 10290bd37b
14 changed files with 397 additions and 151 deletions

View File

@@ -19,4 +19,9 @@ public interface RabbitConstants {
// 售出记录 // 售出记录
String EXCHANGE_STOCK_RECORD = "exchange.stock.record"; String EXCHANGE_STOCK_RECORD = "exchange.stock.record";
String ROUTING_STOCK_RECORD_SALE = "routing.stock.record.sale"; String ROUTING_STOCK_RECORD_SALE = "routing.stock.record.sale";
// 菜品打印
String EXCHANGE_PRINT = "exchange.print";
String ROUTING_KEY_PRINT_DISHES = "routing.dishes.print";
} }

View File

@@ -86,6 +86,15 @@ public class TbPlaceController {
tbShopTableService.removeCart(removeCartDTO); tbShopTableService.removeCart(removeCartDTO);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@AnonymousAccess
@PutMapping("/returnOrder")
@Log("代客下单 退单")
@ApiOperation("代客下单 清空购物车 /shop/table")
public ResponseEntity<Object> returnOrder(@Validated @RequestBody RemoveCartDTO removeCartDTO) {
tbShopTableService.returnCart(removeCartDTO);
return new ResponseEntity<>(HttpStatus.OK);
}
@AnonymousAccess @AnonymousAccess
@DeleteMapping("/clearCart") @DeleteMapping("/clearCart")
@@ -192,6 +201,31 @@ public class TbPlaceController {
return ResponseEntity.ok(tbShopTableService.pay(payDTO)); return ResponseEntity.ok(tbShopTableService.pay(payDTO));
} }
@AnonymousAccess
@PutMapping("/choseTable")
@Log("代客下单 选择台桌")
@ApiOperation("代客下单 选择台桌 /shop/table")
public ResponseEntity<Object> choseTable(
@Validated @RequestBody ChoseTableDTO choseTableDTO
) {
return ResponseEntity.ok(tbShopTableService.choseTable(choseTableDTO));
}
@AnonymousAccess
@PutMapping("/choseCount")
@Log("代客下单 选择用餐人数")
@ApiOperation("代客下单 选择台桌 /shop/table")
public ResponseEntity<Object> choseCount(
@Validated @RequestBody ChoseCountDTO choseCountDTO
) {
return ResponseEntity.ok(tbShopTableService.choseCount(choseCountDTO));
}
@AnonymousAccess @AnonymousAccess
@PutMapping("/updateVip") @PutMapping("/updateVip")
@Log("代客下单 查询购物车") @Log("代客下单 查询购物车")

View File

@@ -20,9 +20,10 @@ public class AddCartDTO {
@NotEmpty @NotEmpty
private String tableId; private String tableId;
@NotNull @NotNull
@Min(0) @Min(1)
private Integer num; private Integer num;
private boolean isPack; private boolean isPack;
private boolean isGift; private boolean isGift;
private Integer cartId; private Integer cartId;
} }

View File

@@ -0,0 +1,20 @@
package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class ChoseCountDTO {
@NotEmpty
private String masterId;
@NotNull
private Integer shopId;
@NotEmpty
private String tableId;
@NotNull
@Min(1)
private Integer num;
}

View File

@@ -0,0 +1,19 @@
package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@Data
public class ChoseTableDTO {
@NotNull
private Integer shopId;
private Integer orderId;
@NotNull
private String newTableId;
@NotEmpty
private String oldTableId;
}

View File

@@ -0,0 +1,15 @@
package cn.ysk.cashier.dto.shoptable;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
public class ReturnOrderDTO {
@NotNull
private Integer cartId;
@NotNull
private Integer shopId;
@NotNull
private Long tableId;
}

View File

@@ -155,6 +155,8 @@ public class TbCashierCart implements Serializable {
private String uuid; private String uuid;
@Column(name = "`sku_name`") @Column(name = "`sku_name`")
private String skuName; private String skuName;
@Column(name = "`place_num`")
private Integer placeNum;
public void copy(TbCashierCart source){ public void copy(TbCashierCart source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));

View File

@@ -15,6 +15,7 @@
*/ */
package cn.ysk.cashier.pojo.order; package cn.ysk.cashier.pojo.order;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data; import lombok.Data;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@@ -101,12 +102,17 @@ public class TbOrderDetail implements Serializable {
@Transient @Transient
@ApiModelProperty(value = "退单数量") @ApiModelProperty(value = "退单数量")
@TableField(exist = false)
private Integer refundNumber; private Integer refundNumber;
@Column(name = "`is_vip`") @Column(name = "`is_vip`")
@ApiModelProperty(value = "isVip") @ApiModelProperty(value = "isVip")
private Integer isVip; private Integer isVip;
@Column(name = "`place_num`")
@ApiModelProperty(value = "place_num")
private Integer placeNum;
public void copy(TbOrderDetail source){ public void copy(TbOrderDetail source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
} }

View File

@@ -228,6 +228,9 @@ public class TbOrderInfo implements Serializable {
private String isUseCoupon; private String isUseCoupon;
@Column(name = "`use_type`") @Column(name = "`use_type`")
private String useType; private String useType;
@Column(name = "`place_num`")
@ApiModelProperty(value = "place_num")
private Integer placeNum;
public void copy(TbOrderInfo source){ public void copy(TbOrderInfo source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true)); BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
} }

View File

@@ -7,14 +7,15 @@ import cn.ysk.cashier.pojo.order.TbOrderInfo;
import javax.validation.constraints.Max; import javax.validation.constraints.Max;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
public interface TbPayService { public interface TbPayService {
TbOrderInfo scanPay(PayDTO payDTO); TbOrderInfo scanPay(Integer shopId, String code, Integer merchantId, Integer memberId, BigDecimal payMount, TbOrderInfo orderInfo);
TbOrderInfo vipPay(@NotNull Integer shopId, @NotNull Integer orderId, Double discount, Integer vipUserId); void vipPay(BigDecimal payMount, Integer vipUserId);
TbOrderInfo cashPay(PayDTO payDTO); TbOrderInfo cashPay(PayDTO payDTO);
TbOrderInfo memberAccountPay(String memberId, String shopId, String accountCode, Integer orderId, Double discount) throws Exception; TbOrderInfo memberAccountPay(String memberId, String shopId, String accountCode, TbOrderInfo orderInfo, BigDecimal payMount) throws Exception;
} }

View File

@@ -106,29 +106,20 @@ public class TbPayServiceImpl implements TbPayService {
} }
@Override @Override
public TbOrderInfo scanPay(PayDTO scanPayDTO) { public TbOrderInfo scanPay(Integer shopId, String code, Integer merchantId, Integer memberId, BigDecimal payMount, TbOrderInfo orderInfo) {
if (StrUtil.isBlank(scanPayDTO.getCode())) { if (StrUtil.isBlank(code)) {
throw new BadRequestException("无效码"); throw new BadRequestException("无效码");
} }
TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaUpdateWrapper<TbOrderInfo>()
.in(TbOrderInfo::getStatus, "unpaid", "paying")
.eq(TbOrderInfo::getId, scanPayDTO.getOrderId())
.eq(TbOrderInfo::getShopId, scanPayDTO.getShopId()));
if (orderInfo == null) { if (merchantId == null) {
throw new BadRequestException("订单不存在或已支付");
}
if (ObjectUtil.isNull(orderInfo.getMerchantId()) || ObjectUtil.isEmpty(orderInfo.getMerchantId())) {
throw new BadRequestException("订单商户id为空"); throw new BadRequestException("订单商户id为空");
} }
List<TbCashierCart> cashierCarts = cashierCartMapper.selectList(new LambdaUpdateWrapper<TbCashierCart>() List<TbCashierCart> cashierCarts = cashierCartMapper.selectList(new LambdaUpdateWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, scanPayDTO.getShopId()) .eq(TbCashierCart::getShopId, shopId)
.eq(TbCashierCart::getOrderId, scanPayDTO.getOrderId())); .eq(TbCashierCart::getOrderId, orderInfo.getId()));
if (cashierCarts.isEmpty()) { if (cashierCarts.isEmpty()) {
throw new BadRequestException("购物车为空"); throw new BadRequestException("购物车为空");
} }
@@ -138,10 +129,8 @@ public class TbPayServiceImpl implements TbPayService {
body.append(cashierCart.getName()); body.append(cashierCart.getName());
} }
BigDecimal payMount = orderInfo.getOrderAmount().multiply(BigDecimal.valueOf(scanPayDTO.getDiscount())).setScale(2, RoundingMode.HALF_UP);
TbMerchantThirdApply thirdApply = merchantThirdApplyRepository.getById(merchantId);
TbMerchantThirdApply thirdApply = merchantThirdApplyRepository.getById(Integer.valueOf(orderInfo.getMerchantId()));
if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) { if (ObjectUtil.isEmpty(thirdApply) || ObjectUtil.isNull(thirdApply)) {
throw new BadRequestException("三方支付信息不存在"); throw new BadRequestException("三方支付信息不存在");
} }
@@ -149,7 +138,7 @@ public class TbPayServiceImpl implements TbPayService {
String payType; String payType;
String payName; String payName;
String qpay; String qpay;
String payTypeCode = scanPayDTO.getCode().substring(0, 2);// 判断收款码 String payTypeCode = code.substring(0, 2);// 判断收款码
if(Integer.parseInt(payTypeCode) >=25 && Integer.parseInt(payTypeCode) <= 30){ if(Integer.parseInt(payTypeCode) >=25 && Integer.parseInt(payTypeCode) <= 30){
payType = "aliPay"; payType = "aliPay";
@@ -168,32 +157,32 @@ public class TbPayServiceImpl implements TbPayService {
} }
long count = shopPayTypeMapper.selectCount(new LambdaUpdateWrapper<TbShopPayType>() long count = shopPayTypeMapper.selectCount(new LambdaUpdateWrapper<TbShopPayType>()
.eq(TbShopPayType::getShopId, scanPayDTO.getShopId()) .eq(TbShopPayType::getShopId, shopId)
.eq(TbShopPayType::getIsDisplay, 1) .eq(TbShopPayType::getIsDisplay, 1)
.eq(TbShopPayType::getPayType, qpay)); .eq(TbShopPayType::getPayType, qpay));
if (count < 1) { if (count < 1) {
throw new BadRequestException("未到找支付方式"); throw new BadRequestException("未到找支付方式");
} }
TbOrderPayment payment = orderPaymentService.getById(scanPayDTO.getOrderId()); TbOrderPayment payment = orderPaymentService.getById(orderInfo.getId());
if (ObjectUtil.isEmpty(payment) || payment == null) { if (ObjectUtil.isEmpty(payment) || payment == null) {
payment = new TbOrderPayment(); payment = new TbOrderPayment();
payment.setPayTypeId("ysk"); payment.setPayTypeId("ysk");
payment.setAmount(payMount.doubleValue()); payment.setAmount(payMount.doubleValue());
payment.setPaidAmount(orderInfo.getPayAmount().doubleValue()); payment.setPaidAmount(payMount.doubleValue());
payment.setHasRefundAmount((double) 0); payment.setHasRefundAmount((double) 0);
payment.setPayName(payName); payment.setPayName(payName);
payment.setPayType(payType); payment.setPayType(payType);
payment.setReceived(payment.getAmount()); payment.setReceived(payment.getAmount());
payment.setChangeFee((double) 0); payment.setChangeFee((double) 0);
payment.setMemberId(orderInfo.getMemberId()); payment.setMemberId(String.valueOf(memberId));
payment.setShopId(orderInfo.getShopId()); payment.setShopId(String.valueOf(shopId));
payment.setOrderId(orderInfo.getId().toString()); payment.setOrderId(String.valueOf(orderInfo.getId()));
payment.setCreatedAt(System.currentTimeMillis()); payment.setCreatedAt(System.currentTimeMillis());
payment.setAuthCode(scanPayDTO.getCode()); payment.setAuthCode(code);
orderPaymentService.save(payment); orderPaymentService.save(payment);
} else { } else {
payment.setAuthCode(scanPayDTO.getCode()); payment.setAuthCode(code);
payment.setUpdatedAt(System.currentTimeMillis()); payment.setUpdatedAt(System.currentTimeMillis());
orderPaymentService.updateById(payment); orderPaymentService.updateById(payment);
} }
@@ -202,15 +191,13 @@ public class TbPayServiceImpl implements TbPayService {
orderInfo.setPayAmount(payMount); orderInfo.setPayAmount(payMount);
orderInfo.setPayType(qpay); orderInfo.setPayType(qpay);
orderInfo.setUpdatedAt(System.currentTimeMillis()); orderInfo.setUpdatedAt(System.currentTimeMillis());
orderInfoMapper.update(orderInfo, new LambdaUpdateWrapper<TbOrderInfo>()
.eq(TbOrderInfo::getId, scanPayDTO.getOrderId()));
if ("ysk".equals(thirdPayType)) { if ("ysk".equals(thirdPayType)) {
ScanPayReq scanPayReq = new ScanPayReq(); ScanPayReq scanPayReq = new ScanPayReq();
scanPayReq.setAppId(thirdApply.getAppId()); scanPayReq.setAppId(thirdApply.getAppId());
scanPayReq.setTimestamp(System.currentTimeMillis()); scanPayReq.setTimestamp(System.currentTimeMillis());
scanPayReq.setAuthCode(scanPayDTO.getCode()); scanPayReq.setAuthCode(code);
scanPayReq.setNotifyUrl(backUrl); scanPayReq.setNotifyUrl(backUrl);
scanPayReq.setConsumeFee(BigDecimal.valueOf(payment.getAmount()).setScale(2, RoundingMode.DOWN).toPlainString()); scanPayReq.setConsumeFee(BigDecimal.valueOf(payment.getAmount()).setScale(2, RoundingMode.DOWN).toPlainString());
@@ -231,20 +218,20 @@ public class TbPayServiceImpl implements TbPayService {
orderInfo.setStatus("closed"); orderInfo.setStatus("closed");
orderInfo.setPayOrderNo(object.getJSONObject("data").get("orderNumber").toString()); orderInfo.setPayOrderNo(object.getJSONObject("data").get("orderNumber").toString());
orderInfoMapper.update(orderInfo, new LambdaQueryWrapper<TbOrderInfo>() orderInfoMapper.update(orderInfo, new LambdaQueryWrapper<TbOrderInfo>()
.eq(TbOrderInfo::getId, scanPayDTO.getOrderId())); .eq(TbOrderInfo::getId, orderInfo.getId()));
//更新购物车状态 //更新购物车状态
TbCashierCart cashierCart = new TbCashierCart(); TbCashierCart cashierCart = new TbCashierCart();
cashierCart.setStatus("final"); cashierCart.setStatus("final");
int cartCount = cashierCartMapper.update(cashierCart, new LambdaQueryWrapper<TbCashierCart>() int cartCount = cashierCartMapper.update(cashierCart, new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getOrderId, scanPayDTO.getOrderId())); .eq(TbCashierCart::getOrderId, orderInfo.getId()));
log.info("更新购物车:{}", cartCount); log.info("更新购物车:{}", cartCount);
//更新子单状态 //更新子单状态
TbOrderDetail orderDetail = new TbOrderDetail(); TbOrderDetail orderDetail = new TbOrderDetail();
orderDetail.setStatus("closed"); orderDetail.setStatus("closed");
orderDetailMapper.update(orderDetail, new LambdaQueryWrapper<TbOrderDetail>() orderDetailMapper.update(orderDetail, new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getOrderId, scanPayDTO.getOrderId())); .eq(TbOrderDetail::getOrderId, orderInfo.getId()));
return orderInfo; return orderInfo;
@@ -282,7 +269,7 @@ public class TbPayServiceImpl implements TbPayService {
reqbody, reqbody, reqbody, reqbody,
BigDecimal.valueOf(payment.getAmount()).setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(), BigDecimal.valueOf(payment.getAmount()).setScale(2, RoundingMode.DOWN).multiply(new BigDecimal(100)).longValue(),
payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null, payType.equals("wechatPay") ? thirdApply.getSmallAppid() : null,
scanPayDTO.getCode(), DateUtils.getSsdfTimes(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken()); code, DateUtils.getSsdfTimes(), thirdApply.getStoreId(), callBack, thirdApply.getAppToken());
log.info("响应信息, {}", publicResp); log.info("响应信息, {}", publicResp);
if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) { if (ObjectUtil.isNotNull(publicResp) && ObjectUtil.isNotEmpty(publicResp)) {
if ("000000".equals(publicResp.getCode())) { if ("000000".equals(publicResp.getCode())) {
@@ -331,41 +318,25 @@ public class TbPayServiceImpl implements TbPayService {
} }
@Override @Override
public TbOrderInfo vipPay(@NotNull Integer shopId, @NotNull Integer orderId, Double discount, Integer vipUserId) { public void vipPay(BigDecimal payMount, Integer vipUserId) {
TbOrderInfo orderInfo = orderInfoMapper.selectById(orderId);
if (ObjectUtil.isEmpty(orderInfo)) {
throw new BadRequestException("订单不存在");
}
if (!"unpaid".equals(orderInfo.getStatus()) && !"pending".equals(orderInfo.getStatus())) {
throw new BadRequestException("订单非未支付状态");
}
if (vipUserId != null) {
orderInfo.setUserId(String.valueOf(vipUserId));
}
// 扣减会员余额 // 扣减会员余额
TbShopUser shopUser = shopUserMapper.selectOne(new LambdaUpdateWrapper<TbShopUser>() TbShopUser shopUser = shopUserMapper.selectOne(new LambdaUpdateWrapper<TbShopUser>()
.eq(TbShopUser::getStatus, 1) .eq(TbShopUser::getStatus, 1)
.eq(TbShopUser::getId, orderInfo.getUserId())); .eq(TbShopUser::getId, vipUserId));
if (shopUser == null) { if (shopUser == null) {
throw new BadRequestException("用户不存在或已被禁用"); throw new BadRequestException("用户不存在或已被禁用");
} }
BigDecimal finalAmount = orderInfo.getOrderAmount().multiply(BigDecimal.valueOf(discount)).setScale(2, RoundingMode.HALF_UP); long flag = shopUserMapper.decrBalance(vipUserId, payMount);
long flag = shopUserMapper.decrBalance(Integer.valueOf(orderInfo.getUserId()), finalAmount);
if (flag < 1) { if (flag < 1) {
throw new BadRequestException("余额不足或扣除余额失败"); throw new BadRequestException("余额不足或扣除余额失败");
} }
TbShopUserFlow userFlow = new TbShopUserFlow(); TbShopUserFlow userFlow = new TbShopUserFlow();
userFlow.setAmount(finalAmount); userFlow.setAmount(payMount);
userFlow.setBalance(shopUser.getAmount().subtract(finalAmount)); userFlow.setBalance(shopUser.getAmount().subtract(payMount));
userFlow.setShopUserId(shopUser.getId()); userFlow.setShopUserId(shopUser.getId());
userFlow.setBizCode("vipCardCash"); userFlow.setBizCode("vipCardCash");
userFlow.setBizName("余额支付"); userFlow.setBizName("余额支付");
@@ -373,22 +344,6 @@ public class TbPayServiceImpl implements TbPayService {
userFlow.setType("-"); userFlow.setType("-");
shopUserFlowMapper.insert(userFlow); shopUserFlowMapper.insert(userFlow);
orderInfo.setPayAmount(finalAmount);
orderInfo.setPayType("cash");
orderInfo.setStatus("closed");
orderInfo.setPayOrderNo("cash".concat(SnowFlakeUtil.generateOrderNo()));
orderInfo.setDiscountRatio(BigDecimal.valueOf(discount));
orderInfo.setDiscountAmount(orderInfo.getAmount().subtract(finalAmount));
orderInfoMapper.updateById(orderInfo);
//更新购物车状态
int cartCount = cashierCartMapper.update(null, new LambdaUpdateWrapper<TbCashierCart>()
.eq(TbCashierCart::getOrderId, orderId)
.set(TbCashierCart::getStatus, "final"));
orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getOrderId, orderId)
.set(TbOrderDetail::getStatus, "closed"));
return orderInfo;
} }
@@ -442,33 +397,11 @@ public class TbPayServiceImpl implements TbPayService {
return orderInfo; return orderInfo;
} }
public TbOrderInfo memberAccountPay(String memberId, String shopId, String accountCode, Integer orderId, Double discount) { public TbOrderInfo memberAccountPay(String memberId, String shopId, String accountCode, TbOrderInfo orderInfo, BigDecimal payMount) {
if (StrUtil.isBlank(accountCode)) { if (StrUtil.isBlank(accountCode)) {
throw new BadRequestException("无效码"); throw new BadRequestException("无效码");
} }
TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaUpdateWrapper<TbOrderInfo>()
.eq(TbOrderInfo::getId, orderId)
.eq(TbOrderInfo::getShopId, shopId));
if (orderInfo == null) {
throw new BadRequestException("订单不存在或已支付");
}
if (!"unpaid".equals(orderInfo.getStatus()) && !"pending".equals(orderInfo.getStatus())) {
throw new BadRequestException("此订单不处于未支付状态");
}
BigDecimal payMount = orderInfo.getOrderAmount().multiply(BigDecimal.valueOf(discount)).setScale(2, RoundingMode.HALF_UP);
long count = tbShopPayTypeMapper.selectCount(new LambdaQueryWrapper<TbShopPayType>()
.eq(TbShopPayType::getShopId, shopId)
.eq(TbShopPayType::getIsDisplay, 1)
.eq(TbShopPayType::getPayType, "deposit"));
if (count < 1) {
throw new BadRequestException("未知支付方式");
}
TbShopUser user = null; TbShopUser user = null;
@@ -520,22 +453,7 @@ public class TbPayServiceImpl implements TbPayService {
orderInfo.setUserId(user.getUserId()); orderInfo.setUserId(user.getUserId());
orderInfo.setMemberId(user.getId().toString()); orderInfo.setMemberId(user.getId().toString());
orderInfo.setPayType("deposit"); orderInfo.setPayType("deposit");
orderInfo.setStatus("closed");
orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo())); orderInfo.setPayOrderNo("deposit".concat(SnowFlakeUtil.generateOrderNo()));
orderInfoMapper.updateById(orderInfo);
//更新购物车状态
int cartCount = cashierCartMapper.update(null, new LambdaUpdateWrapper<TbCashierCart>()
.eq(TbCashierCart::getId, orderId)
.set(TbCashierCart::getStatus, "final"));
orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getOrderId, orderId)
.set(TbOrderDetail::getStatus, "closed"));
log.info("更新购物车:{}", cartCount);
return orderInfo; return orderInfo;
} }
} }

View File

@@ -18,6 +18,7 @@ package cn.ysk.cashier.service.impl.shopimpl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.ysk.cashier.config.security.security.TokenProvider; import cn.ysk.cashier.config.security.security.TokenProvider;
import cn.ysk.cashier.cons.RedisConstant; import cn.ysk.cashier.cons.RedisConstant;
@@ -27,7 +28,9 @@ import cn.ysk.cashier.enums.ShopWxMsgTypeEnum;
import cn.ysk.cashier.enums.TableStateEnum; import cn.ysk.cashier.enums.TableStateEnum;
import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.exception.BadRequestException;
import cn.ysk.cashier.mybatis.entity.TbShopOpenId; import cn.ysk.cashier.mybatis.entity.TbShopOpenId;
import cn.ysk.cashier.mybatis.entity.TbShopUserFlow;
import cn.ysk.cashier.mybatis.mapper.*; import cn.ysk.cashier.mybatis.mapper.*;
import cn.ysk.cashier.pojo.TbShopPayType;
import cn.ysk.cashier.pojo.order.TbCashierCart; import cn.ysk.cashier.pojo.order.TbCashierCart;
import cn.ysk.cashier.pojo.order.TbOrderDetail; import cn.ysk.cashier.pojo.order.TbOrderDetail;
import cn.ysk.cashier.pojo.order.TbOrderInfo; import cn.ysk.cashier.pojo.order.TbOrderInfo;
@@ -66,6 +69,8 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.sql.Timestamp;
import java.time.Instant; import java.time.Instant;
import java.util.*; import java.util.*;
import java.io.IOException; import java.io.IOException;
@@ -105,6 +110,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
private final WxMsgUtils wxMsgUtils; private final WxMsgUtils wxMsgUtils;
private final TbShopPayTypeRepository payTypeRepository; private final TbShopPayTypeRepository payTypeRepository;
private final MpShopTableMapper mpShopTableMapper; private final MpShopTableMapper mpShopTableMapper;
private final TbShopPayTypeMapper tbShopPayTypeMapper;
/** /**
* 桌码前缀 * 桌码前缀
@@ -322,10 +329,24 @@ public class TbShopTableServiceImpl implements TbShopTableService {
return shopTable; return shopTable;
} }
private int getCurrentPlaceNum(String tableId, String shopId) {
String currentOrderKey = RedisConstant.getCurrentOrderKey(tableId,
shopId);
if (StrUtil.isBlank(currentOrderKey)) {
return 1;
}
TbOrderInfo orderInfo = orderInfoMapper.selectOne(new LambdaQueryWrapper<TbOrderInfo>()
.eq(TbOrderInfo::getUseType, "postPay")
.eq(TbOrderInfo::getId, currentOrderKey).select(TbOrderInfo::getPlaceNum));
return orderInfo == null ? 1 : orderInfo.getPlaceNum() + 1;
}
@Override @Override
public TbCashierCart addCartForUser(AddCartDTO addCartDTO) { public TbCashierCart addCartForUser(AddCartDTO addCartDTO) {
checkTableIsOpen(addCartDTO.getTableId()); checkTableIsOpen(addCartDTO.getTableId());
int currentPlaceNum = getCurrentPlaceNum(addCartDTO.getShopId().toString(), addCartDTO.getTableId());
TbProductSku productSku = productMapper.selectSkuByIdAndShopId(addCartDTO.getShopId(), addCartDTO.getSkuId()); TbProductSku productSku = productMapper.selectSkuByIdAndShopId(addCartDTO.getShopId(), addCartDTO.getSkuId());
TbProduct product = productMapper.selectByIdAndShopId(addCartDTO.getShopId(), addCartDTO.getProductId()); TbProduct product = productMapper.selectByIdAndShopId(addCartDTO.getShopId(), addCartDTO.getProductId());
@@ -344,6 +365,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbCashierCart::getSkuId, addCartDTO.getSkuId()) .eq(TbCashierCart::getSkuId, addCartDTO.getSkuId())
.eq(TbCashierCart::getProductId, addCartDTO.getProductId()) .eq(TbCashierCart::getProductId, addCartDTO.getProductId())
.eq(TbCashierCart::getTableId, addCartDTO.getTableId()) .eq(TbCashierCart::getTableId, addCartDTO.getTableId())
.eq(TbCashierCart::getPlaceNum, currentPlaceNum)
.in(TbCashierCart::getStatus, "create", "refund") .in(TbCashierCart::getStatus, "create", "refund")
// .and(q -> { // .and(q -> {
// q.eq(TbCashierCart::getTradeDay, DateUtils.getDay()) // q.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
@@ -391,6 +413,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
tbCashierCart.setSalePrice(productSku.getSalePrice()); tbCashierCart.setSalePrice(productSku.getSalePrice());
tbCashierCart.setTotalAmount(new BigDecimal(addCartDTO.getNum()).multiply(productSku.getSalePrice())); tbCashierCart.setTotalAmount(new BigDecimal(addCartDTO.getNum()).multiply(productSku.getSalePrice()));
tbCashierCart.setSkuName(productSku.getSpecSnap()); tbCashierCart.setSkuName(productSku.getSpecSnap());
tbCashierCart.setPlaceNum(currentPlaceNum);
if (!addCartDTO.isPack()) { if (!addCartDTO.isPack()) {
tbCashierCart.setPackFee(BigDecimal.ZERO); tbCashierCart.setPackFee(BigDecimal.ZERO);
} else { } else {
@@ -425,11 +448,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
tbCashierCart.setIsGift(String.valueOf(addCartDTO.isGift())); tbCashierCart.setIsGift(String.valueOf(addCartDTO.isGift()));
tbCashierCart.setTotalNumber(addCartDTO.getNum()); tbCashierCart.setTotalNumber(addCartDTO.getNum());
tbCashierCart.setNumber(addCartDTO.getNum()); tbCashierCart.setNumber(addCartDTO.getNum());
// 数量0删除
if (tbCashierCart.getNumber() == 0) {
cashierCartRepository.deleteById(tbCashierCart.getId());
return null;
}
tbCashierCart.setUpdatedAt(DateUtil.current()); tbCashierCart.setUpdatedAt(DateUtil.current());
cashierCartRepository.save(tbCashierCart); cashierCartRepository.save(tbCashierCart);
} }
@@ -466,9 +484,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override @Override
public void removeCart(RemoveCartDTO removeCartDTO) { public void removeCart(RemoveCartDTO removeCartDTO) {
int currentPlaceNum = getCurrentPlaceNum(removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString());
// 会员点单 // 会员点单
TbCashierCart cashierCart = cashierCartMapper.selectOne(new LambdaQueryWrapper<TbCashierCart>() TbCashierCart cashierCart = cashierCartMapper.selectOne(new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, removeCartDTO.getShopId()) .eq(TbCashierCart::getShopId, removeCartDTO.getShopId())
.eq(TbCashierCart::getPlaceNum, currentPlaceNum)
.eq(TbCashierCart::getId, removeCartDTO.getCartId())); .eq(TbCashierCart::getId, removeCartDTO.getCartId()));
if (cashierCart == null) { if (cashierCart == null) {
throw new BadRequestException("购物车商品不存在"); throw new BadRequestException("购物车商品不存在");
@@ -479,11 +499,9 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.eq(TbOrderDetail::getShopId, cashierCart.getShopId()) .eq(TbOrderDetail::getShopId, cashierCart.getShopId())
.eq(TbOrderDetail::getProductId, cashierCart.getProductId()) .eq(TbOrderDetail::getProductId, cashierCart.getProductId())
.eq(TbOrderDetail::getProductSkuId, cashierCart.getSkuId()) .eq(TbOrderDetail::getProductSkuId, cashierCart.getSkuId())
.eq(TbOrderDetail::getPlaceNum, currentPlaceNum)
.eq(TbOrderDetail::getOrderId, cashierCart.getOrderId())); .eq(TbOrderDetail::getOrderId, cashierCart.getOrderId()));
} }
cashierCartMapper.delete(new LambdaQueryWrapper<TbCashierCart>().eq(TbCashierCart::getShopId, removeCartDTO.getShopId())
.eq(TbCashierCart::getId, removeCartDTO.getCartId()));
// 清空购物车 出票 // 清空购物车 出票
long carCount = countCar(cashierCart.getTableId(), cashierCart.getShopId(), cashierCart.getMasterId()); long carCount = countCar(cashierCart.getTableId(), cashierCart.getShopId(), cashierCart.getMasterId());
@@ -497,13 +515,55 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} }
@Override
public void returnCart(RemoveCartDTO removeCartDTO) {
rabbitMsgUtils.printDishesReturnTicket(4450, 9313);
int currentPlaceNum = getCurrentPlaceNum(removeCartDTO.getTableId().toString(), removeCartDTO.getShopId().toString());
// 会员点单
TbCashierCart cashierCart = cashierCartMapper.selectOne(new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, removeCartDTO.getShopId())
.in(TbCashierCart::getStatus, "create")
.eq(TbCashierCart::getId, removeCartDTO.getCartId()));
if (cashierCart == null) {
throw new BadRequestException("购物车商品不存在或已退单");
}
TbOrderDetail tbOrderDetail = orderDetailMapper.selectOne(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, removeCartDTO.getShopId())
.eq(TbOrderDetail::getPlaceNum, cashierCart.getPlaceNum())
.in(TbOrderDetail::getStatus, "unpaid")
.eq(TbOrderDetail::getOrderId, cashierCart.getOrderId()));
if (tbOrderDetail == null) {
throw new BadRequestException("购物车商品不存在或已退单");
}
if (cashierCart.getOrderId() == null) {
throw new BadRequestException("此商品还未下单,无需退单");
}
cashierCartMapper.update(null, new LambdaUpdateWrapper<TbCashierCart>()
.eq(TbCashierCart::getId, cashierCart.getId())
.set(TbCashierCart::getStatus, "return"));
orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getId, tbOrderDetail.getId())
.set(TbOrderDetail::getUpdateTime, DateUtil.date())
.set(TbOrderDetail::getStatus, "return"));
rabbitMsgUtils.printDishesReturnTicket(tbOrderDetail.getOrderId(), tbOrderDetail.getOrderId());
}
@Override @Override
public void clearCart(ClearCartDTO clearCartDTO) { public void clearCart(ClearCartDTO clearCartDTO) {
String orderId = redisTemplate.opsForValue().get(RedisConstant.getCurrentOrderKey(clearCartDTO.getTableId().toString(), clearCartDTO.getShopId())); String orderId = redisTemplate.opsForValue().get(RedisConstant.getCurrentOrderKey(clearCartDTO.getTableId().toString(), clearCartDTO.getShopId()));
int currentPlaceNum = getCurrentPlaceNum(clearCartDTO.getTableId().toString(), clearCartDTO.getShopId());
cashierCartMapper.delete(new LambdaQueryWrapper<TbCashierCart>() cashierCartMapper.delete(new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, clearCartDTO.getShopId()) .eq(TbCashierCart::getShopId, clearCartDTO.getShopId())
.eq(TbCashierCart::getTableId, clearCartDTO.getTableId()) .eq(TbCashierCart::getTableId, clearCartDTO.getTableId())
.eq(TbCashierCart::getPlaceNum, currentPlaceNum)
.and(q -> { .and(q -> {
q.eq(TbCashierCart::getMasterId, clearCartDTO.getMasterId()) q.eq(TbCashierCart::getMasterId, clearCartDTO.getMasterId())
.or() .or()
@@ -518,10 +578,13 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}) })
); );
// tbShopTableRepository.deleteByTableIdAndShopId(clearCartDTO.getTableId(), clearCartDTO.getShopId()); // tbShopTableRepository.deleteByTableIdAndShopId(clearCartDTO.getTableId(), clearCartDTO.getShopId());
if (StrUtil.isNotBlank(orderId)) { if (StrUtil.isNotBlank(orderId)) {
orderDetailMapper.delete(new LambdaQueryWrapper<TbOrderDetail>().eq(TbOrderDetail::getShopId, clearCartDTO.getShopId()) orderDetailMapper.delete(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, clearCartDTO.getShopId())
.eq(TbOrderDetail::getPlaceNum, currentPlaceNum)
.eq(TbOrderDetail::getOrderId, orderId)); .eq(TbOrderDetail::getOrderId, orderId));
rabbitMsgUtils.printTicket(orderId); rabbitMsgUtils.printTicket(orderId);
} }
@@ -541,7 +604,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
Integer size, Integer shopId, Integer vipUserId, String masterId) { Integer size, Integer shopId, Integer vipUserId, String masterId) {
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>() LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getTableId, tableId) .eq(TbCashierCart::getTableId, tableId)
.in(TbCashierCart::getStatus, "create", "refund") .in(TbCashierCart::getStatus, "create", "refund", "return")
.eq(TbCashierCart::getShopId, shopId) .eq(TbCashierCart::getShopId, shopId)
.and(query2 -> { .and(query2 -> {
query2.or(query3 -> { query2.or(query3 -> {
@@ -835,7 +898,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
private final StringRedisTemplate redisTemplate; private final StringRedisTemplate redisTemplate;
@Override @Override
public Object getMasterId(Integer shopId, Long tableId, Integer vipUserId) { public JSONObject getMasterId(Integer shopId, Long tableId, Integer vipUserId) {
String account = tokenProvider.getSubject(); String account = tokenProvider.getSubject();
if (account == null) { if (account == null) {
throw new BadRequestException("token解析失败"); throw new BadRequestException("token解析失败");
@@ -875,12 +938,32 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override @Override
public TbOrderInfo createOrder(CreateOrderDTO createOrderDTO, boolean addMaterId, boolean isPrint) { public TbOrderInfo createOrder(CreateOrderDTO createOrderDTO, boolean addMaterId, boolean isPrint) {
return Utils.runFunAndCheckKey(() -> { return Utils.runFunAndCheckKey(() -> {
TbShopTable tbShopTable = mpShopTableMapper.selectOne(new LambdaQueryWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, createOrderDTO.getTableId())
.in(TbShopTable::getStatus, "idle", "using"));
if (tbShopTable == null) {
throw new BadRequestException("台桌未开台或不存在");
}
// 传递orderId直接取否则取当前缓存id
String currentOrderKey = RedisConstant.getCurrentOrderKey(createOrderDTO.getTableId(), String currentOrderKey = RedisConstant.getCurrentOrderKey(createOrderDTO.getTableId(),
createOrderDTO.getShopId().toString()); createOrderDTO.getShopId().toString());
String orderIdValue = redisTemplate.opsForValue().get(currentOrderKey); String orderIdValue = redisTemplate.opsForValue().get(currentOrderKey);
Integer orderId = orderIdValue == null ? null : Integer.parseInt(orderIdValue); Integer orderId = orderIdValue == null ? null : Integer.parseInt(orderIdValue);
orderId = createOrderDTO.getOrderId() != null ? createOrderDTO.getOrderId() : orderId; orderId = createOrderDTO.getOrderId() != null ? createOrderDTO.getOrderId() : orderId;
// 查询订单
TbOrderInfo orderInfo = null;
if (orderId != null) {
orderInfo = orderInfoMapper.selectById(orderId);
if (orderInfo == null || !"unpaid".equals(orderInfo.getStatus())) {
redisTemplate.delete(currentOrderKey);
}
}
String day = DateUtils.getDay(); String day = DateUtils.getDay();
LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>() LambdaQueryWrapper<TbCashierCart> queryWrapper = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, createOrderDTO.getShopId()) .eq(TbCashierCart::getShopId, createOrderDTO.getShopId())
@@ -896,33 +979,26 @@ public class TbShopTableServiceImpl implements TbShopTableService {
.isNull(TbCashierCart::getMasterId); .isNull(TbCashierCart::getMasterId);
})); }));
}); });
// if (createOrderDTO.getVipUserId() != null) {
// queryWrapper.eq(TbCashierCart::getUserId, createOrderDTO.getVipUserId());
// }else {
// queryWrapper.eq(TbCashierCart::getMasterId, createOrderDTO.getMasterId())
// .isNull(TbCashierCart::getUserId);
// }
List<TbCashierCart> cashierCarts = cashierCartMapper List<TbCashierCart> cashierCarts = cashierCartMapper
.selectList(queryWrapper); .selectList(queryWrapper);
if (cashierCarts.isEmpty()) { if (cashierCarts.isEmpty()) {
throw new BadRequestException("购物车为空,请先添加商品"); throw new BadRequestException("购物车为空,请先添加商品");
} }
TbShopTable tbShopTable = mpShopTableMapper.selectOne(new LambdaQueryWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, createOrderDTO.getTableId())
.in(TbShopTable::getStatus, "idle", "using"));
if (tbShopTable == null) {
throw new BadRequestException("台桌未开台或不存在");
}
BigDecimal totalAmount = BigDecimal.ZERO; BigDecimal totalAmount = BigDecimal.ZERO;
BigDecimal packAMount = BigDecimal.ZERO; BigDecimal packAMount = BigDecimal.ZERO;
BigDecimal feeAmount = BigDecimal.ZERO; BigDecimal feeAmount = BigDecimal.ZERO;
BigDecimal saleAmount = BigDecimal.ZERO; BigDecimal saleAmount = BigDecimal.ZERO;
// 当前下单次数
int placeNum = orderInfo == null ? 1 : orderInfo.getPlaceNum() + 1;
List<TbOrderDetail> orderDetails = new ArrayList<>(); List<TbOrderDetail> orderDetails = new ArrayList<>();
boolean mealCost = false;
for (TbCashierCart cashierCart : cashierCarts) { for (TbCashierCart cashierCart : cashierCarts) {
if ("客位费".equals(cashierCart.getName())) {
mealCost = true;
}
totalAmount = totalAmount.add(cashierCart.getTotalAmount()); totalAmount = totalAmount.add(cashierCart.getTotalAmount());
packAMount = packAMount.add(cashierCart.getPackFee()); packAMount = packAMount.add(cashierCart.getPackFee());
feeAmount = cashierCart.getPackFee(); feeAmount = cashierCart.getPackFee();
@@ -950,15 +1026,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderId = cashierCart.getOrderId(); orderId = cashierCart.getOrderId();
} }
orderDetail.setOrderId(orderId); orderDetail.setOrderId(orderId);
orderDetail.setPlaceNum(placeNum);
} }
TbOrderInfo orderInfo = null; if (!mealCost) {
if (orderId != null) { throw new BadRequestException("请选择用餐人数");
orderInfo = orderInfoMapper.selectById(orderId);
if (orderInfo == null || !"unpaid".equals(orderInfo.getStatus())) {
redisTemplate.delete(currentOrderKey);
}
} }
// 修改订单信息 // 修改订单信息
@@ -1236,25 +1308,70 @@ public class TbShopTableServiceImpl implements TbShopTableService {
@Override @Override
public Object pay(PayDTO payDTO) { public Object pay(PayDTO payDTO) {
return Utils.runFunAndCheckKey(() -> { return Utils.runFunAndCheckKey(() -> {
TbOrderInfo orderInfo = null; long count = tbShopPayTypeMapper.selectCount(new LambdaQueryWrapper<TbShopPayType>()
.eq(TbShopPayType::getShopId, payDTO.getShopId())
.eq(TbShopPayType::getIsDisplay, 1)
.eq(TbShopPayType::getPayType, "deposit"));
if (count < 1) {
throw new BadRequestException("未知支付方式");
}
TbOrderInfo orderInfo = orderInfoMapper.selectById(payDTO.getOrderId());
if (ObjectUtil.isEmpty(orderInfo)) {
throw new BadRequestException("订单不存在");
}
if (!"unpaid".equals(orderInfo.getStatus()) && !"pending".equals(orderInfo.getStatus())) {
throw new BadRequestException("订单非未支付状态");
}
if (payDTO.getDiscount() == null) {
payDTO.setDiscount((double) 1);
}
BigDecimal finalAmount = orderInfo.getOrderAmount().multiply(BigDecimal.valueOf(payDTO.getDiscount())).setScale(2, RoundingMode.HALF_UP);
switch (payDTO.getPayType()) { switch (payDTO.getPayType()) {
case "vipPay": case "vipPay":
orderInfo = tbPayServiceImpl.vipPay(payDTO.getShopId(), payDTO.getOrderId(), payDTO.getDiscount(), payDTO.getVipUserId()); if (payDTO.getVipUserId() != null) {
orderInfo.setUserId(String.valueOf(payDTO.getVipUserId()));
}
tbPayServiceImpl.vipPay(finalAmount, Integer.valueOf(orderInfo.getUserId()));
orderInfo.setPayOrderNo("vipPay".concat(SnowFlakeUtil.generateOrderNo()));
orderInfo.setPayType("deposit");
break; break;
case "cash": case "cash":
orderInfo = tbPayServiceImpl.cashPay(payDTO); orderInfo.setPayType("cash");
orderInfo.setPayOrderNo("cash".concat(SnowFlakeUtil.generateOrderNo()));
// orderInfo = tbPayServiceImpl.cashPay(payDTO);
break; break;
case "scanCode": case "scanCode":
orderInfo = tbPayServiceImpl.scanPay(payDTO); orderInfo = tbPayServiceImpl.scanPay(payDTO.getShopId(), payDTO.getCode(), Integer.valueOf(orderInfo.getMerchantId()), Integer.valueOf(orderInfo.getMemberId()), finalAmount, orderInfo);
break; break;
case "deposit": case "deposit":
orderInfo = tbPayServiceImpl.memberAccountPay("", String.valueOf(payDTO.getShopId()), payDTO.getCode(), payDTO.getOrderId(), payDTO.getDiscount()); orderInfo = tbPayServiceImpl.memberAccountPay("", String.valueOf(payDTO.getShopId()), payDTO.getCode(), orderInfo, finalAmount);
break; break;
default: default:
throw new BadRequestException("未知支付方式"); throw new BadRequestException("未知支付方式");
} }
log.info("更新购物车"); orderInfo.setPayAmount(finalAmount);
orderInfo.setStatus("closed");
orderInfo.setDiscountRatio(BigDecimal.valueOf(payDTO.getDiscount()));
orderInfo.setDiscountAmount(orderInfo.getAmount().subtract(finalAmount));
orderInfoMapper.updateById(orderInfo);
//更新购物车状态
cashierCartMapper.update(null, new LambdaUpdateWrapper<TbCashierCart>()
.eq(TbCashierCart::getOrderId, orderInfo.getId())
.set(TbCashierCart::getStatus, "final"));
orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getOrderId, orderInfo.getId())
.set(TbOrderDetail::getStatus, "closed"));
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("token", null); jsonObject.put("token", null);
@@ -1327,4 +1444,94 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} }
return cashierCartMapper.update(null, queryWrapper); return cashierCartMapper.update(null, queryWrapper);
} }
private String getCurrentOrderId(String tableId, String shopId) {
String currentOrderKey = RedisConstant.getCurrentOrderKey(tableId, shopId);
return redisTemplate.opsForValue().get(currentOrderKey);
}
@Override
public Object choseTable(ChoseTableDTO choseTableDTO) {
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();
TbShopTable shopTable = mpShopTableMapper.selectOne(new LambdaQueryWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, choseTableDTO.getNewTableId())
.eq(TbShopTable::getStatus, "idle"));
if (shopTable == null) {
throw new BadRequestException("台桌不存在或非空闲状态");
}
cashierCartMapper.update(null, new LambdaUpdateWrapper<TbCashierCart>()
.eq(TbCashierCart::getTableId, choseTableDTO.getOldTableId())
.in(TbCashierCart::getStatus, "create", "return")
.eq(TbCashierCart::getShopId, choseTableDTO.getShopId())
.and(q -> {
q.isNull(TbCashierCart::getOrderId)
.or()
.eq(TbCashierCart::getOrderId, currentOrderId);
})
.and(query2 -> {
query2.or(query3 -> {
query3.eq(TbCashierCart::getTradeDay, DateUtils.getDay())
.isNotNull(TbCashierCart::getMasterId);
})
.or((query4 -> {
query4.isNull(TbCashierCart::getTradeDay)
.isNull(TbCashierCart::getMasterId);
}));
})
.set(TbCashierCart::getMasterId, masterId)
.set(TbCashierCart::getTableId, choseTableDTO.getNewTableId()));
mpShopTableMapper.update(null, new LambdaUpdateWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, choseTableDTO.getNewTableId())
.set(TbShopTable::getStatus, "using"));
mpShopTableMapper.update(null, new LambdaUpdateWrapper<TbShopTable>()
.eq(TbShopTable::getQrcode, choseTableDTO.getOldTableId())
.set(TbShopTable::getStatus, "idle"));
return orderInfoMapper.update(null, new LambdaUpdateWrapper<TbOrderInfo>()
.eq(TbOrderInfo::getId, currentOrderId)
.set(TbOrderInfo::getMasterId, masterId)
.set(TbOrderInfo::getTableId, choseTableDTO.getNewTableId()));
}
@Override
public Object choseCount(ChoseCountDTO choseCountDTO) {
LambdaQueryWrapper<TbCashierCart> query = new LambdaQueryWrapper<TbCashierCart>()
.eq(TbCashierCart::getShopId, choseCountDTO.getShopId())
.eq(TbCashierCart::getMasterId, choseCountDTO.getMasterId())
.eq(TbCashierCart::getProductId, -999)
.eq(TbCashierCart::getTableId, choseCountDTO.getTableId());
TbCashierCart tbCashierCart = cashierCartMapper.selectOne(query);
if (tbCashierCart == null) {
tbCashierCart = new TbCashierCart();
tbCashierCart.setStatus("create");
tbCashierCart.setCreatedAt(System.currentTimeMillis());
tbCashierCart.setTableId(Long.valueOf(choseCountDTO.getTableId()));
tbCashierCart.setName("客座费");
tbCashierCart.setSalePrice(BigDecimal.ONE);
tbCashierCart.setMasterId(choseCountDTO.getMasterId());
tbCashierCart.setShopId(String.valueOf(choseCountDTO.getShopId()));
tbCashierCart.setTradeDay(DateUtils.getDay());
tbCashierCart.setStatus("create");
tbCashierCart.setTotalAmount(new BigDecimal(choseCountDTO.getNum()).multiply(BigDecimal.ONE));
tbCashierCart.setPlaceNum(1);
tbCashierCart.setProductId("-999");
tbCashierCart.setSkuId("-999");
tbCashierCartMapper.insert(tbCashierCart);
}else {
tbCashierCart.setTotalAmount(new BigDecimal(choseCountDTO.getNum()).multiply(BigDecimal.ONE));
tbCashierCart.setNumber(choseCountDTO.getNum());
tbCashierCart.setTotalNumber(choseCountDTO.getNum());
tbCashierCartMapper.updateById(tbCashierCart);
}
return tbCashierCart;
}
} }

View File

@@ -20,6 +20,7 @@ import cn.ysk.cashier.pojo.order.TbCashierCart;
import cn.ysk.cashier.pojo.shop.TbShopTable; import cn.ysk.cashier.pojo.shop.TbShopTable;
import cn.ysk.cashier.dto.shop.TbShopTableDto; import cn.ysk.cashier.dto.shop.TbShopTableDto;
import cn.ysk.cashier.dto.shop.TbShopTableQueryCriteria; import cn.ysk.cashier.dto.shop.TbShopTableQueryCriteria;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.Map; import java.util.Map;
@@ -100,6 +101,8 @@ public interface TbShopTableService {
void removeCart(RemoveCartDTO removeCartDTO); void removeCart(RemoveCartDTO removeCartDTO);
void returnCart(RemoveCartDTO removeCartDTO);
void clearCart(ClearCartDTO clearCartDTO); void clearCart(ClearCartDTO clearCartDTO);
Page<TbCashierCart> getCart(Long tableId, Integer page, Integer size, Integer shopId, Integer vipUserId, String masterId); Page<TbCashierCart> getCart(Long tableId, Integer page, Integer size, Integer shopId, Integer vipUserId, String masterId);
@@ -110,7 +113,7 @@ public interface TbShopTableService {
Object createOrder(CreateOrderDTO createOrderDTO, boolean addMasterId, boolean isPrint); Object createOrder(CreateOrderDTO createOrderDTO, boolean addMasterId, boolean isPrint);
Object getMasterId(Integer shopId, Long tableId, Integer vipUserId); JSONObject getMasterId(Integer shopId, Long tableId, Integer vipUserId);
Object pending(PendingDTO pendingDTO); Object pending(PendingDTO pendingDTO);
@@ -123,4 +126,8 @@ public interface TbShopTableService {
Object deleteOrder(DeleteOrderDTO deleteOrderDTO); Object deleteOrder(DeleteOrderDTO deleteOrderDTO);
Object updateVip(UpdateVipDTO updateVipDTO); Object updateVip(UpdateVipDTO updateVipDTO);
Object choseTable(ChoseTableDTO choseTableDTO);
Object choseCount(ChoseCountDTO choseCountDTO);
} }

View File

@@ -46,4 +46,12 @@ public class RabbitMsgUtils implements RabbitTemplate.ConfirmCallback {
// 发送库存记录mq消息 // 发送库存记录mq消息
sendMsg(RabbitConstants.EXCHANGE_STOCK_RECORD, RabbitConstants.ROUTING_STOCK_RECORD_SALE, mqData, "库存记录", true); sendMsg(RabbitConstants.EXCHANGE_STOCK_RECORD, RabbitConstants.ROUTING_STOCK_RECORD_SALE, mqData, "库存记录", true);
} }
public void printDishesReturnTicket(Integer orderId, Integer... orderIds) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("orderId", orderId);
jsonObject.put("orderDetailIds", orderIds);
jsonObject.put("isReturn", true);
sendMsg(RabbitConstants.EXCHANGE_PRINT, RabbitConstants.ROUTING_KEY_PRINT_DISHES, jsonObject, "菜品退单", false);
}
} }