Merge remote-tracking branch 'origin/master'

This commit is contained in:
Tankaikai
2025-03-04 15:48:11 +08:00
10 changed files with 79 additions and 22 deletions

View File

@@ -4,6 +4,7 @@ import com.czg.account.entity.ShopActivateCouponRecord;
import com.czg.account.service.ShopCouponService; import com.czg.account.service.ShopCouponService;
import com.czg.account.vo.UserCouponVo; import com.czg.account.vo.UserCouponVo;
import com.czg.resp.CzgResult; import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -30,10 +31,9 @@ public class UserShopCouponController {
*/ */
@GetMapping("/findByUserId") @GetMapping("/findByUserId")
public CzgResult<Page<ShopActivateCouponRecord>> findByUserId( public CzgResult<Page<ShopActivateCouponRecord>> findByUserId(
@RequestParam Long userId,
@RequestParam(required = false) Integer status, @RequestParam(required = false) Integer status,
@RequestParam(required = false) Long shopId) { @RequestParam(required = false) Long shopId) {
return CzgResult.success(couponService.find(userId, shopId, status)); return CzgResult.success(couponService.find(StpKit.USER.getLoginIdAsLong(), shopId, status));
} }
/** /**

View File

@@ -16,6 +16,8 @@ import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Map;
/** /**
* 订单管理 * 订单管理
@@ -41,6 +43,11 @@ public class AdminOrderController {
return CzgResult.success(orderInfoService.getOrderByPage(queryDTO)); return CzgResult.success(orderInfoService.getOrderByPage(queryDTO));
} }
@GetMapping("/getOrderById")
public CzgResult<HistoryOrderVo> getOrderById(Long orderId) {
return orderInfoService.getOrderDetails(orderId);
}
@GetMapping("/historyOrder") @GetMapping("/historyOrder")
public CzgResult<HistoryOrderVo> historyOrder( public CzgResult<HistoryOrderVo> historyOrder(
@RequestParam(required = false) Long orderId, @RequestParam(required = false) Long orderId,
@@ -59,7 +66,7 @@ public class AdminOrderController {
/** /**
* 订单全额退款 只传订单id * 订单全额退款 只传订单id
* 部分退款 传参refundDetailMap {"详情id":"数量","详情id":"数量"} * 部分退款 传参refundDetail
*/ */
@PostMapping("/refundOrder") @PostMapping("/refundOrder")
public CzgResult<Object> refundOrder(@Validated @RequestBody OrderInfoRefundDTO refundDTO) { public CzgResult<Object> refundOrder(@Validated @RequestBody OrderInfoRefundDTO refundDTO) {

View File

@@ -14,6 +14,8 @@ import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Map;
/** /**
* 订单管理 * 订单管理
@@ -38,6 +40,11 @@ public class UserOrderController {
return CzgResult.success(orderInfoService.getOrderByPage(queryDTO)); return CzgResult.success(orderInfoService.getOrderByPage(queryDTO));
} }
@GetMapping("/getOrderById")
public CzgResult<HistoryOrderVo> getOrderById(Long orderId) {
return orderInfoService.getOrderDetails(orderId);
}
@GetMapping("/historyOrder") @GetMapping("/historyOrder")
public CzgResult<HistoryOrderVo> historyOrder( public CzgResult<HistoryOrderVo> historyOrder(
@RequestParam(required = false) Long orderId, @RequestParam(required = false) Long orderId,

View File

@@ -80,8 +80,8 @@ public class ShopStorageGoodController {
*/ */
@SaAdminCheckPermission(value = "storageGood:del", name = "存酒商品删除") @SaAdminCheckPermission(value = "storageGood:del", name = "存酒商品删除")
@DeleteMapping @DeleteMapping
public CzgResult<Boolean> del(@RequestBody @Validated({UpdateGroup.class}) ShopStorageGoodDTO shopStorageGoodDTO) { public CzgResult<Boolean> del(@RequestParam Integer id) {
return CzgResult.success(shopStorageGoodService.remove(new QueryWrapper().eq(ShopStorageGood::getShopId, StpKit.USER.getShopId()).eq(ShopStorageGood::getId, shopStorageGoodDTO.getId()))); return CzgResult.success(shopStorageGoodService.remove(new QueryWrapper().eq(ShopStorageGood::getShopId, StpKit.USER.getShopId()).eq(ShopStorageGood::getId, id)));
} }
} }

View File

@@ -4,6 +4,7 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException; import cn.dev33.satoken.exception.NotPermissionException;
import cn.dev33.satoken.exception.NotRoleException; import cn.dev33.satoken.exception.NotRoleException;
import cn.hutool.core.exceptions.ValidateException; import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.io.resource.NoResourceException;
import com.czg.resp.CzgRespCode; import com.czg.resp.CzgRespCode;
import com.czg.resp.CzgResult; import com.czg.resp.CzgResult;
import com.fasterxml.jackson.databind.exc.InvalidFormatException; import com.fasterxml.jackson.databind.exc.InvalidFormatException;
@@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.resource.NoResourceFoundException;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -37,6 +39,14 @@ public class CzgControllerAdvice {
return CzgResult.failure(CzgRespCode.SYSTEM_ERROR.getCode(), ex.getMessage()); return CzgResult.failure(CzgRespCode.SYSTEM_ERROR.getCode(), ex.getMessage());
} }
@ResponseBody
@ExceptionHandler(value = NoResourceFoundException.class)
@ResponseStatus(HttpStatus.OK)
public CzgResult<Object> errorHandler(NoResourceFoundException ex) {
log.error("资源不存在");
return CzgResult.failure(CzgRespCode.SYSTEM_ERROR.getCode(), ex.getMessage());
}
@ResponseBody @ResponseBody
@ExceptionHandler(value = NotLoginException.class) @ExceptionHandler(value = NotLoginException.class)
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)

View File

@@ -201,4 +201,8 @@ public class OrderDetail implements Serializable {
public String getRefundRemark() { public String getRefundRemark() {
return StrUtil.isBlank(refundRemark) ? "" : refundRemark + " "; return StrUtil.isBlank(refundRemark) ? "" : refundRemark + " ";
} }
public BigDecimal getCouponNum() {
return couponNum == null ? BigDecimal.ZERO : couponNum;
}
} }

View File

@@ -10,6 +10,7 @@ import com.czg.order.entity.OrderInfo;
import com.czg.order.enums.PayEnums; import com.czg.order.enums.PayEnums;
import com.czg.order.vo.HistoryOrderVo; import com.czg.order.vo.HistoryOrderVo;
import com.czg.order.vo.OrderInfoVo; import com.czg.order.vo.OrderInfoVo;
import com.czg.resp.CzgResult;
import com.mybatisflex.core.paginate.Page; import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService; import com.mybatisflex.core.service.IService;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
@@ -30,6 +31,8 @@ public interface OrderInfoService extends IService<OrderInfo> {
Page<OrderInfoVo> getOrderByPage(OrderInfoQueryDTO param); Page<OrderInfoVo> getOrderByPage(OrderInfoQueryDTO param);
CzgResult<HistoryOrderVo> getOrderDetails(Long orderId);
HistoryOrderVo historyOrder(Long orderId, String tableCode); HistoryOrderVo historyOrder(Long orderId, String tableCode);
OrderInfo createOrder(OrderInfoAddDTO param); OrderInfo createOrder(OrderInfoAddDTO param);

View File

@@ -30,6 +30,7 @@ import com.czg.order.service.OrderPaymentService;
import com.czg.order.vo.HistoryOrderVo; import com.czg.order.vo.HistoryOrderVo;
import com.czg.order.vo.OrderDetailSmallVO; import com.czg.order.vo.OrderDetailSmallVO;
import com.czg.order.vo.OrderInfoVo; import com.czg.order.vo.OrderInfoVo;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit; import com.czg.sa.StpKit;
import com.czg.service.RedisService; import com.czg.service.RedisService;
import com.czg.order.dto.BigDecimalDTO; import com.czg.order.dto.BigDecimalDTO;
@@ -128,6 +129,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
return orderInfoVoPage; return orderInfoVoPage;
} }
@Override
public CzgResult<HistoryOrderVo> getOrderDetails(Long orderId) {
AssertUtil.isNull(orderId, "订单id不能为空");
return CzgResult.success(historyOrder(orderId, null));
}
@Override @Override
public HistoryOrderVo historyOrder(Long orderId, String tableCode) { public HistoryOrderVo historyOrder(Long orderId, String tableCode) {
if (orderId == null && StrUtil.isBlank(tableCode)) { if (orderId == null && StrUtil.isBlank(tableCode)) {
@@ -142,7 +149,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
.gt(OrderInfo::getCreateTime, DateUtil.offsetDay(new Date(), -1)) .gt(OrderInfo::getCreateTime, DateUtil.offsetDay(new Date(), -1))
.oneAs(HistoryOrderVo.class); .oneAs(HistoryOrderVo.class);
} else { } else {
historyOrderVo = getOneAs(new QueryWrapper().eq(OrderInfo::getId, orderId), HistoryOrderVo.class); historyOrderVo = getOneAs(new QueryWrapper()
.eq(OrderInfo::getId, orderId), HistoryOrderVo.class);
} }
if (historyOrderVo == null || historyOrderVo.getId() == null) { if (historyOrderVo == null || historyOrderVo.getId() == null) {
return null; return null;
@@ -158,7 +166,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
Integer placeNum = orderDetail.getPlaceNum(); Integer placeNum = orderDetail.getPlaceNum();
// 检查 Map 中是否已经存在该 placeNum 对应的列表 // 检查 Map 中是否已经存在该 placeNum 对应的列表
resultMap.computeIfAbsent(placeNum.toString(), k -> new ArrayList<>()).add(orderDetail); resultMap.computeIfAbsent(placeNum.toString(), k -> new ArrayList<>()).add(orderDetail);
} }
historyOrderVo.setDetailMap(resultMap); historyOrderVo.setDetailMap(resultMap);
return historyOrderVo; return historyOrderVo;
@@ -212,13 +219,13 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
@Override @Override
public OrderInfo checkOrderPay(CheckOrderPay param) { public OrderInfo checkOrderPay(CheckOrderPay param) {
OrderInfo orderInfo = getById(param.getOrderId()); OrderInfo orderInfo = getById(param.getOrderId());
if (!"after-pay".equals(orderInfo.getPayMode())) { // if (!"after-pay".equals(orderInfo.getPayMode())) {
// if (redisService.hasKey(RedisCst.classKeyExpired.EXPIRED_ORDER + param.getOrderId())) { // if (redisService.hasKey(RedisCst.classKeyExpired.EXPIRED_ORDER + param.getOrderId())) {
// redisService.set(RedisCst.classKeyExpired.EXPIRED_ORDER + param.getOrderId(), "", 60 * 15); // redisService.set(RedisCst.classKeyExpired.EXPIRED_ORDER + param.getOrderId(), "", 60 * 15);
// } else { // } else {
// throw new ValidateException("订单已过期,请重新下单"); // throw new ValidateException("订单已过期,请重新下单");
// } // }
} // }
ShopInfo shopInfo = shopInfoService.getById(orderInfo.getShopId()); ShopInfo shopInfo = shopInfoService.getById(orderInfo.getShopId());
AssertUtil.isNull(shopInfo, "生成订单失败,店铺信息不存在"); AssertUtil.isNull(shopInfo, "生成订单失败,店铺信息不存在");
if (param.isVipPrice() && !shopInfo.getIsMemberPrice().equals(1)) { if (param.isVipPrice() && !shopInfo.getIsMemberPrice().equals(1)) {
@@ -380,9 +387,13 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
} }
} }
if (isAllPack) { if (isAllPack) {
orderDetail.setPackNumber(orderDetail.getNum()); if ("weigh".equals(orderDetail.getProductType())) {
orderDetail.setPackNumber(BigDecimal.ONE);
} else {
orderDetail.setPackNumber(orderDetail.getNum());
}
} }
packAmount.setPrice(packAmount.getPrice().add(orderDetail.getPackAmount().multiply(orderDetail.getPackNumber()))); packAmount.setPrice(packAmount.getPrice().add(orderDetail.getPackAmount().multiply(orderDetail.getPackNumber()).setScale(2, RoundingMode.DOWN)));
if (couponNum.compareTo(BigDecimal.ZERO) > 0) { if (couponNum.compareTo(BigDecimal.ZERO) > 0) {
if (couponNum.compareTo(orderDetail.getNum()) >= 0) { if (couponNum.compareTo(orderDetail.getNum()) >= 0) {
orderDetail.setCouponNum(orderDetail.getNum()); orderDetail.setCouponNum(orderDetail.getNum());
@@ -658,7 +669,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
orderInfo.setSeatNum(param.getSeatNum()); orderInfo.setSeatNum(param.getSeatNum());
} }
orderInfo.setPlaceNum(param.getPlaceNum()); orderInfo.setPlaceNum(param.getPlaceNum());
orderInfo.setOriginAmount(BigDecimal.ZERO); orderInfo.setOriginAmount(param.getOriginAmount());
orderInfo.setOrderAmount(BigDecimal.ZERO); orderInfo.setOrderAmount(BigDecimal.ZERO);
orderInfo.setPackFee(orderInfo.getPackFee().add(param.getPackFee())); orderInfo.setPackFee(orderInfo.getPackFee().add(param.getPackFee()));
orderInfo.setRoundAmount(BigDecimal.ZERO); orderInfo.setRoundAmount(BigDecimal.ZERO);

View File

@@ -530,6 +530,11 @@ public class PayServiceImpl implements PayService {
if (orderDetail.getReturnAmount().compareTo(orderDetail.getPayAmount()) > 0) { if (orderDetail.getReturnAmount().compareTo(orderDetail.getPayAmount()) > 0) {
throw new ValidateException("退单失败," + orderDetail.getProductName() + "退单金额不正确"); throw new ValidateException("退单失败," + orderDetail.getProductName() + "退单金额不正确");
} }
if (orderDetail.getNum().compareTo(orderDetail.getRefundNum().add(orderDetail.getReturnNum())) == 0) {
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
} else {
orderDetail.setStatus(OrderStatusEnums.PART_REFUND.getCode());
}
} else { } else {
orderDetail.setReturnNum(orderDetail.getRefundNum().add(refNum)); orderDetail.setReturnNum(orderDetail.getRefundNum().add(refNum));
orderDetail.setPayAmount((orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum()) orderDetail.setPayAmount((orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum())
@@ -537,21 +542,15 @@ public class PayServiceImpl implements PayService {
} }
orderDetail.setRefundNo(refPayOrderNo); orderDetail.setRefundNo(refPayOrderNo);
orderDetail.setRefundRemark(orderDetail.getRefundRemark() + param.getRefundReason()); orderDetail.setRefundRemark(orderDetail.getRefundRemark() + param.getRefundReason());
if (orderDetail.getNum().compareTo(orderDetail.getRefundNum().add(orderDetail.getReturnNum())) == 0) {
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
} else {
orderDetail.setStatus(OrderStatusEnums.PART_REFUND.getCode());
}
orderDetailService.updateById(orderDetail); orderDetailService.updateById(orderDetail);
returnProMap.put(orderDetail.getProductId(), refundDetail.getNum()); returnProMap.put(orderDetail.getProductId(), refundDetail.getNum());
} }
long count = orderDetailService.queryChain() long count = orderDetailService.queryChain()
.eq(OrderDetail::getOrderId, orderInfo.getId()) .eq(OrderDetail::getOrderId, orderInfo.getId())
.ne(OrderDetail::getStatus, OrderStatusEnums.REFUND.getCode()).count(); .ne(OrderDetail::getStatus, OrderStatusEnums.REFUND.getCode()).count();
if (count > 0) { if (count > 0 && isPay) {
orderInfo.setStatus(OrderStatusEnums.PART_REFUND.getCode()); orderInfo.setStatus(OrderStatusEnums.PART_REFUND.getCode());
} else { } else if (isPay) {
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode()); orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
} }
} else { } else {
@@ -566,11 +565,12 @@ public class PayServiceImpl implements PayService {
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()).subtract(orderDetail.getRefundNum())); returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()).subtract(orderDetail.getRefundNum()));
orderDetail.setRefundNum(orderDetail.getNum().subtract(orderDetail.getReturnNum())); orderDetail.setRefundNum(orderDetail.getNum().subtract(orderDetail.getReturnNum()));
orderDetail.setReturnAmount(orderDetail.getPayAmount()); orderDetail.setReturnAmount(orderDetail.getPayAmount());
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
} else { } else {
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum())); returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()));
orderDetail.setReturnNum(orderDetail.getNum()); orderDetail.setReturnNum(orderDetail.getNum());
orderDetail.setStatus(OrderStatusEnums.CANCELLED.getCode());
} }
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
} }
orderDetailService.updateBatch(orderDetails); orderDetailService.updateBatch(orderDetails);
} }

View File

@@ -54,7 +54,18 @@ public class ShopStorageServiceImpl extends ServiceImpl<ShopStorageMapper, ShopS
queryWrapper.eq(ShopStorage::getPhone, phone); queryWrapper.eq(ShopStorage::getPhone, phone);
} }
queryWrapper.orderBy(ShopStorage::getId, false); queryWrapper.orderBy(ShopStorage::getId, false);
return page(PageUtil.buildPage(), queryWrapper); Page<ShopStorage> shopStoragePage = page(PageUtil.buildPage(), queryWrapper);
shopStoragePage.getRecords().forEach(item -> {
if (item.getNum() == 0) {
item.setStatus(0);
}
if (item.getExpTime().isBefore(DateUtil.date().toLocalDateTime())) {
item.setStatus(2);
}
});
updateBatch(shopStoragePage.getRecords());
return shopStoragePage;
} }
@Override @Override
@@ -104,9 +115,13 @@ public class ShopStorageServiceImpl extends ServiceImpl<ShopStorageMapper, ShopS
} }
shopStorage.setNum(shopStorage.getNum() + shopStorageEditDTO.getNum()); shopStorage.setNum(shopStorage.getNum() + shopStorageEditDTO.getNum());
if (shopStorage.getNum() == 0) {
shopStorage.setStatus(0);
}
boolean b = updateById(shopStorage); boolean b = updateById(shopStorage);
if (b) { if (b) {
ShopStorageRecord record = new ShopStorageRecord(); ShopStorageRecord record = new ShopStorageRecord();
record.setStorageId(shopStorage.getId()); record.setStorageId(shopStorage.getId());
record.setTime(DateUtil.date().toLocalDateTime()); record.setTime(DateUtil.date().toLocalDateTime());