feat: 新增挂账退款

This commit is contained in:
张松 2024-11-28 14:07:14 +08:00
parent 15d2e28921
commit 7693850127
7 changed files with 49 additions and 33 deletions

View File

@ -105,6 +105,9 @@ public interface TableConstant {
PayType(String value) { PayType(String value) {
this.value = value; this.value = value;
} }
public boolean equalsVals(String value) {
return this.value.equals(value);
}
} }

View File

@ -29,5 +29,6 @@ public class CreateOrderDTO {
private List<UserCouponInfoDTO> userCouponInfos = new ArrayList<>(); private List<UserCouponInfoDTO> userCouponInfos = new ArrayList<>();
// 使用的积分抵扣数量 // 使用的积分抵扣数量
private Integer pointsNum; private Integer pointsNum;
private Integer isWaitCall;
} }

View File

@ -24,5 +24,7 @@ public class UpdateCartDTO {
private Boolean isGift; private Boolean isGift;
// 是否打印 // 是否打印
private Boolean isPrint; private Boolean isPrint;
// 是否等叫
private Integer isWaitCall;
} }

View File

@ -179,6 +179,8 @@ public class TbCashierCart implements Serializable {
private String useCouponInfo; private String useCouponInfo;
// 是否团购券商品 // 是否团购券商品
private Integer isThirdCoupon; private Integer isThirdCoupon;
// 是否等叫
private Integer isWaitCall;
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

@ -139,6 +139,7 @@ public class TbOrderDetail implements Serializable {
private BigDecimal returnAmount; private BigDecimal returnAmount;
private BigDecimal canReturnAmount; private BigDecimal canReturnAmount;
private Integer isThirdCoupon; private Integer isThirdCoupon;
private Integer isWaitCall;
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

@ -252,8 +252,11 @@ public class TbOrderInfo implements Serializable {
// 满减抵扣金额 // 满减抵扣金额
private BigDecimal fullCouponDiscountAmount; private BigDecimal fullCouponDiscountAmount;
private Integer isPostpaid; private Integer isPostpaid;
private Integer isWaitCall;
private String creditBuyerId;
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

@ -466,6 +466,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
tbCashierCart.setTotalAmount(updateCartDTO.getNum().multiply(tbCashierCart.getSalePrice())); tbCashierCart.setTotalAmount(updateCartDTO.getNum().multiply(tbCashierCart.getSalePrice()));
tbCashierCart.setNote(updateCartDTO.getNote()); tbCashierCart.setNote(updateCartDTO.getNote());
tbCashierCart.setIsPrint(updateCartDTO.getIsPrint()); tbCashierCart.setIsPrint(updateCartDTO.getIsPrint());
tbCashierCart.setIsWaitCall(updateCartDTO.getIsWaitCall());
if (updateCartDTO.getIsPack() != null) { if (updateCartDTO.getIsPack() != null) {
if (!updateCartDTO.getIsPack()) { if (!updateCartDTO.getIsPack()) {
@ -493,6 +494,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
if (tbCashierCart.getOrderId() != null && StrUtil.isNotBlank(updateCartDTO.getNote())) { if (tbCashierCart.getOrderId() != null && StrUtil.isNotBlank(updateCartDTO.getNote())) {
orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>() orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getCartId, tbCashierCart.getId()) .eq(TbOrderDetail::getCartId, tbCashierCart.getId())
.set(TbOrderDetail::getIsWaitCall, updateCartDTO.getIsWaitCall())
.set(TbOrderDetail::getNote, updateCartDTO.getNote())); .set(TbOrderDetail::getNote, updateCartDTO.getNote()));
} }
@ -1231,11 +1233,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 创建订单详情 // 创建订单详情
OrderPriceDTO detailPriceDTO = createOrderDetailWithCoupon(cartInfoDTO.getCashierCarts(), orderInfo, OrderPriceDTO detailPriceDTO = createOrderDetailWithCoupon(cartInfoDTO.getCashierCarts(), orderInfo,
createOrderDTO.getShopId(), true, shopEatTypeInfoDTO); createOrderDTO.getShopId(), true, shopEatTypeInfoDTO, createOrderDTO.getIsWaitCall());
// 是否是第一次创建订单 // 是否是第一次创建订单
orderInfo = createOrderWithAction(createOrderDTO, detailPriceDTO, shopEatTypeInfoDTO, orderInfo = createOrderWithAction(createOrderDTO, detailPriceDTO, shopEatTypeInfoDTO,
orderInfo, cartInfoDTO.getSeatCart(), shopUser, shopTable); orderInfo, cartInfoDTO.getSeatCart(), shopUser, shopTable, createOrderDTO.getIsWaitCall());
// 修改订单详情并打票 // 修改订单详情并打票
updateDetailAndPrint(orderInfo, detailPriceDTO, shopEatTypeInfoDTO); updateDetailAndPrint(orderInfo, detailPriceDTO, shopEatTypeInfoDTO);
@ -1548,7 +1550,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
* @param updateState * @param updateState
* @return * @return
*/ */
private OrderPriceDTO createOrderDetailWithCoupon(List<TbCashierCart> fullCashierCarts, TbOrderInfo orderInfo, Integer shopId, boolean updateState, ShopEatTypeInfoDTO shopEatTypeInfoDTO) { private OrderPriceDTO createOrderDetailWithCoupon(List<TbCashierCart> fullCashierCarts, TbOrderInfo orderInfo, Integer shopId,
boolean updateState, ShopEatTypeInfoDTO shopEatTypeInfoDTO, Integer isWaitCall) {
OrderPriceDTO priceDTO = new OrderPriceDTO(); OrderPriceDTO priceDTO = new OrderPriceDTO();
List<Integer> cartIds = fullCashierCarts.stream().map(TbCashierCart::getId).collect(Collectors.toList()); List<Integer> cartIds = fullCashierCarts.stream().map(TbCashierCart::getId).collect(Collectors.toList());
@ -1566,6 +1569,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}); });
for (TbCashierCart cashierCart : fullCashierCarts) { for (TbCashierCart cashierCart : fullCashierCarts) {
cashierCart.setIsWaitCall(isWaitCall);
if (orderInfo != null && shopEatTypeInfoDTO != null) { if (orderInfo != null && shopEatTypeInfoDTO != null) {
cashierCart.setIsMember(StrUtil.isBlank(orderInfo.getMemberId()) ? 0 : shopEatTypeInfoDTO.isMemberPrice() ? 1 : 0); cashierCart.setIsMember(StrUtil.isBlank(orderInfo.getMemberId()) ? 0 : shopEatTypeInfoDTO.isMemberPrice() ? 1 : 0);
} }
@ -1605,6 +1609,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderDetail.setProductId(Integer.valueOf(cashierCart.getProductId())); orderDetail.setProductId(Integer.valueOf(cashierCart.getProductId()));
} }
orderDetail.setIsWaitCall(cashierCart.getIsWaitCall());
orderDetail.setUserCouponId(cashierCart.getUserCouponId()); orderDetail.setUserCouponId(cashierCart.getUserCouponId());
orderDetail.setMemberPrice(cashierCart.getMemberPrice()); orderDetail.setMemberPrice(cashierCart.getMemberPrice());
orderDetail.setNote(cashierCart.getNote()); orderDetail.setNote(cashierCart.getNote());
@ -1634,7 +1639,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} }
private TbOrderInfo createOrderWithAction(CreateOrderDTO createOrderDTO, OrderPriceDTO priceDTO, ShopEatTypeInfoDTO eatTypeInfoDTO, private TbOrderInfo createOrderWithAction(CreateOrderDTO createOrderDTO, OrderPriceDTO priceDTO, ShopEatTypeInfoDTO eatTypeInfoDTO,
TbOrderInfo orderInfo, TbCashierCart seatCart, TbShopUser shopUser, TbShopTable shopTable) { TbOrderInfo orderInfo, TbCashierCart seatCart, TbShopUser shopUser, TbShopTable shopTable, Integer isWaitCall) {
int placeNum = getCurrentPlaceNum(eatTypeInfoDTO); int placeNum = getCurrentPlaceNum(eatTypeInfoDTO);
boolean isFirst = false; boolean isFirst = false;
// 修改订单信息 // 修改订单信息
@ -1660,6 +1665,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setMerchantId(merchantAccount.getId().toString()); orderInfo.setMerchantId(merchantAccount.getId().toString());
orderInfo.setIsPostpaid(eatTypeInfoDTO.isDineInAfter() ? 1 : 0); orderInfo.setIsPostpaid(eatTypeInfoDTO.isDineInAfter() ? 1 : 0);
} }
orderInfo.setIsWaitCall(isWaitCall);
// 更新取餐号 // 更新取餐号
orderInfo.setOutNumber(updateOutNumber(String.valueOf(createOrderDTO.getShopId())).toString()); orderInfo.setOutNumber(updateOutNumber(String.valueOf(createOrderDTO.getShopId())).toString());
orderInfo.setUpdatedAt(System.currentTimeMillis()); orderInfo.setUpdatedAt(System.currentTimeMillis());
@ -2152,7 +2158,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 更新订单信息 // 更新订单信息
ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(orderInfo.getShopId(), orderInfo.getTableId()); ShopEatTypeInfoDTO shopEatTypeInfoDTO = checkEatModel(orderInfo.getShopId(), orderInfo.getTableId());
OrderPriceDTO priceDTO = createOrderDetailWithCoupon(activateCartInfo, orderInfo, payDTO.getShopId(), false, shopEatTypeInfoDTO); OrderPriceDTO priceDTO = createOrderDetailWithCoupon(activateCartInfo, orderInfo, payDTO.getShopId(), false, shopEatTypeInfoDTO, null);
BigDecimal finalAmount = priceDTO.getTotalAmount().setScale(2, RoundingMode.HALF_UP); BigDecimal finalAmount = priceDTO.getTotalAmount().setScale(2, RoundingMode.HALF_UP);
orderInfo.setUpdatedAt(System.currentTimeMillis()); orderInfo.setUpdatedAt(System.currentTimeMillis());
@ -2288,6 +2294,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} }
creditBuyerOrderService.save(payDTO.getCreditBuyerId(), Long.valueOf(orderInfo.getId())); creditBuyerOrderService.save(payDTO.getCreditBuyerId(), Long.valueOf(orderInfo.getId()));
orderInfo.setPayType(TableConstant.OrderInfo.PayType.CREDIT_BUYER.getValue()); orderInfo.setPayType(TableConstant.OrderInfo.PayType.CREDIT_BUYER.getValue());
orderInfo.setCreditBuyerId(payDTO.getCreditBuyerId());
break; break;
case "vipPay": case "vipPay":
if (payDTO.getVipUserId() != null) { if (payDTO.getVipUserId() != null) {
@ -2794,7 +2801,20 @@ public class TbShopTableServiceImpl implements TbShopTableService {
detailIds.add(item.getId()); detailIds.add(item.getId());
returnNumMap.put(item.getId().toString(), item.getNum()); returnNumMap.put(item.getId().toString(), item.getNum());
}); });
List<TbOrderDetail> detailList = orderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
List<TbOrderDetail> detailList = null;
if (TableConstant.OrderInfo.PayType.CREDIT_BUYER.equalsVals(oldOrderInfo.getPayType())) {
detailList = orderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId())
.eq(TbOrderDetail::getStatus, "closed")
.eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId())
.orderByDesc(TbOrderDetail::getUserCouponId));
if (detailList.size() != returnOrderDTO.getOrderDetails().size()) {
throw new BadRequestException("挂账退款必须全退");
}
}else {
detailList = orderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId()) .eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId())
.eq(TbOrderDetail::getStatus, "closed") .eq(TbOrderDetail::getStatus, "closed")
.eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId()) .eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId())
@ -2803,6 +2823,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
if (detailList.size() != returnOrderDTO.getOrderDetails().size()) { if (detailList.size() != returnOrderDTO.getOrderDetails().size()) {
throw new BadRequestException("订单明细数量不一致"); throw new BadRequestException("订单明细数量不一致");
} }
}
HashMap<String, Object> data = new HashMap<>(); HashMap<String, Object> data = new HashMap<>();
BigDecimal returnAmount = BigDecimal.ZERO; BigDecimal returnAmount = BigDecimal.ZERO;
@ -3066,6 +3088,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} else if ("cash".equals(payType)) { } else if ("cash".equals(payType)) {
mpOrderDetailService.updateStatusByOrderIdAndIds(OrderStatusEnums.REFUNDING, OrderStatusEnums.REFUND, mpOrderDetailService.updateStatusByOrderIdAndIds(OrderStatusEnums.REFUNDING, OrderStatusEnums.REFUND,
returnOrderDTO.getOrderId(), returnOrderDTO.getOrderDetails().stream().map(ReturnOrderDTO.OrderDetail::getId).collect(Collectors.toList())); returnOrderDTO.getOrderId(), returnOrderDTO.getOrderDetails().stream().map(ReturnOrderDTO.OrderDetail::getId).collect(Collectors.toList()));
}else if (TableConstant.OrderInfo.PayType.CREDIT_BUYER.equalsVals(payType)) {
creditBuyerOrderService.refund(orderInfo.getCreditBuyerId(), Long.valueOf(orderInfo.getId()));
} }
orderInfo.setStatus(TableConstant.OrderInfo.Status.CLOSED.getValue()); orderInfo.setStatus(TableConstant.OrderInfo.Status.CLOSED.getValue());
@ -3080,26 +3104,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
memberPointsService.addPoints(Long.valueOf(orderInfo.getMemberId()), orderInfo.getPointsNum(), memberPointsService.addPoints(Long.valueOf(orderInfo.getMemberId()), orderInfo.getPointsNum(),
"用户退款订单积分返还: " + orderInfo.getPointsNum() + "积分", Long.valueOf(orderInfo.getId())); "用户退款订单积分返还: " + orderInfo.getPointsNum() + "积分", Long.valueOf(orderInfo.getId()));
} }
// String couponInfoList = orderInfo.getCouponInfoList();
// if (StrUtil.isNotBlank(couponInfoList)) {
// OrderInfoCouponInfoDTO orderInfoCouponInfoDTO = JSONObject.parseObject(couponInfoList, OrderInfoCouponInfoDTO.class);
// if (orderInfoCouponInfoDTO.getProductCoupon() != null && !orderInfoCouponInfoDTO.getProductCoupon().isEmpty()) {
// int remainNum = 0;
// for (OrderInfoUserCouponVo item : orderInfoCouponInfoDTO.getProductCoupon()) {
// if (item.getFinalUseNum() > item.getReturnNum()) {
// remainNum = remainNum + (item.getFinalUseNum() - item.getReturnNum());
// }
// }
//
// if (remainNum == 0) {
// returnCoupon(orderInfo, true);
// // 返还积分
// memberPointsService.addPoints(Long.valueOf(orderInfo.getMemberId()), orderInfo.getPointsNum(),
// "用户退款订单积分返还: " + orderInfo.getPointsNum() + "积分", Long.valueOf(orderInfo.getId()));
//
// }
// }
// }
} }
orderInfoMapper.updateById(orderInfo); orderInfoMapper.updateById(orderInfo);
// 打印退款小票 // 打印退款小票