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) {
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 Integer pointsNum;
private Integer isWaitCall;
}

View File

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

View File

@ -179,6 +179,8 @@ public class TbCashierCart implements Serializable {
private String useCouponInfo;
// 是否团购券商品
private Integer isThirdCoupon;
// 是否等叫
private Integer isWaitCall;
public void copy(TbCashierCart source) {
BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));

View File

@ -139,6 +139,7 @@ public class TbOrderDetail implements Serializable {
private BigDecimal returnAmount;
private BigDecimal canReturnAmount;
private Integer isThirdCoupon;
private Integer isWaitCall;
public void copy(TbOrderDetail source){
BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));

View File

@ -252,8 +252,11 @@ public class TbOrderInfo implements Serializable {
// 满减抵扣金额
private BigDecimal fullCouponDiscountAmount;
private Integer isPostpaid;
private Integer isWaitCall;
private String creditBuyerId;
public void copy(TbOrderInfo source){
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.setNote(updateCartDTO.getNote());
tbCashierCart.setIsPrint(updateCartDTO.getIsPrint());
tbCashierCart.setIsWaitCall(updateCartDTO.getIsWaitCall());
if (updateCartDTO.getIsPack() != null) {
if (!updateCartDTO.getIsPack()) {
@ -493,6 +494,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
if (tbCashierCart.getOrderId() != null && StrUtil.isNotBlank(updateCartDTO.getNote())) {
orderDetailMapper.update(null, new LambdaUpdateWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getCartId, tbCashierCart.getId())
.set(TbOrderDetail::getIsWaitCall, updateCartDTO.getIsWaitCall())
.set(TbOrderDetail::getNote, updateCartDTO.getNote()));
}
@ -1231,11 +1233,11 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 创建订单详情
OrderPriceDTO detailPriceDTO = createOrderDetailWithCoupon(cartInfoDTO.getCashierCarts(), orderInfo,
createOrderDTO.getShopId(), true, shopEatTypeInfoDTO);
createOrderDTO.getShopId(), true, shopEatTypeInfoDTO, createOrderDTO.getIsWaitCall());
// 是否是第一次创建订单
orderInfo = createOrderWithAction(createOrderDTO, detailPriceDTO, shopEatTypeInfoDTO,
orderInfo, cartInfoDTO.getSeatCart(), shopUser, shopTable);
orderInfo, cartInfoDTO.getSeatCart(), shopUser, shopTable, createOrderDTO.getIsWaitCall());
// 修改订单详情并打票
updateDetailAndPrint(orderInfo, detailPriceDTO, shopEatTypeInfoDTO);
@ -1548,7 +1550,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
* @param updateState
* @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();
List<Integer> cartIds = fullCashierCarts.stream().map(TbCashierCart::getId).collect(Collectors.toList());
@ -1566,6 +1569,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
});
for (TbCashierCart cashierCart : fullCashierCarts) {
cashierCart.setIsWaitCall(isWaitCall);
if (orderInfo != null && shopEatTypeInfoDTO != null) {
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.setIsWaitCall(cashierCart.getIsWaitCall());
orderDetail.setUserCouponId(cashierCart.getUserCouponId());
orderDetail.setMemberPrice(cashierCart.getMemberPrice());
orderDetail.setNote(cashierCart.getNote());
@ -1634,7 +1639,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}
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);
boolean isFirst = false;
// 修改订单信息
@ -1660,6 +1665,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
orderInfo.setMerchantId(merchantAccount.getId().toString());
orderInfo.setIsPostpaid(eatTypeInfoDTO.isDineInAfter() ? 1 : 0);
}
orderInfo.setIsWaitCall(isWaitCall);
// 更新取餐号
orderInfo.setOutNumber(updateOutNumber(String.valueOf(createOrderDTO.getShopId())).toString());
orderInfo.setUpdatedAt(System.currentTimeMillis());
@ -2152,7 +2158,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
// 更新订单信息
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);
orderInfo.setUpdatedAt(System.currentTimeMillis());
@ -2288,6 +2294,7 @@ public class TbShopTableServiceImpl implements TbShopTableService {
}
creditBuyerOrderService.save(payDTO.getCreditBuyerId(), Long.valueOf(orderInfo.getId()));
orderInfo.setPayType(TableConstant.OrderInfo.PayType.CREDIT_BUYER.getValue());
orderInfo.setCreditBuyerId(payDTO.getCreditBuyerId());
break;
case "vipPay":
if (payDTO.getVipUserId() != null) {
@ -2794,16 +2801,31 @@ public class TbShopTableServiceImpl implements TbShopTableService {
detailIds.add(item.getId());
returnNumMap.put(item.getId().toString(), item.getNum());
});
List<TbOrderDetail> detailList = orderDetailMapper.selectList(new LambdaQueryWrapper<TbOrderDetail>()
.eq(TbOrderDetail::getShopId, returnOrderDTO.getShopId())
.eq(TbOrderDetail::getStatus, "closed")
.eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId())
.in(TbOrderDetail::getId, detailIds)
.orderByDesc(TbOrderDetail::getUserCouponId));
if (detailList.size() != returnOrderDTO.getOrderDetails().size()) {
throw new BadRequestException("订单明细数量不一致");
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::getStatus, "closed")
.eq(TbOrderDetail::getOrderId, returnOrderDTO.getOrderId())
.in(TbOrderDetail::getId, detailIds)
.orderByDesc(TbOrderDetail::getUserCouponId));
if (detailList.size() != returnOrderDTO.getOrderDetails().size()) {
throw new BadRequestException("订单明细数量不一致");
}
}
HashMap<String, Object> data = new HashMap<>();
BigDecimal returnAmount = BigDecimal.ZERO;
BigDecimal packAMount = BigDecimal.ZERO;
@ -3066,6 +3088,8 @@ public class TbShopTableServiceImpl implements TbShopTableService {
} else if ("cash".equals(payType)) {
mpOrderDetailService.updateStatusByOrderIdAndIds(OrderStatusEnums.REFUNDING, OrderStatusEnums.REFUND,
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());
@ -3080,26 +3104,6 @@ public class TbShopTableServiceImpl implements TbShopTableService {
memberPointsService.addPoints(Long.valueOf(orderInfo.getMemberId()), orderInfo.getPointsNum(),
"用户退款订单积分返还: " + 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);
// 打印退款小票