Merge remote-tracking branch 'origin/master'

This commit is contained in:
Tankaikai 2025-03-04 15:48:11 +08:00
commit 8b2b70e13c
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.vo.UserCouponVo;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.mybatisflex.core.paginate.Page;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;
@ -30,10 +31,9 @@ public class UserShopCouponController {
*/
@GetMapping("/findByUserId")
public CzgResult<Page<ShopActivateCouponRecord>> findByUserId(
@RequestParam Long userId,
@RequestParam(required = false) Integer status,
@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.web.bind.annotation.*;
import java.util.Map;
/**
* 订单管理
@ -41,6 +43,11 @@ public class AdminOrderController {
return CzgResult.success(orderInfoService.getOrderByPage(queryDTO));
}
@GetMapping("/getOrderById")
public CzgResult<HistoryOrderVo> getOrderById(Long orderId) {
return orderInfoService.getOrderDetails(orderId);
}
@GetMapping("/historyOrder")
public CzgResult<HistoryOrderVo> historyOrder(
@RequestParam(required = false) Long orderId,
@ -59,7 +66,7 @@ public class AdminOrderController {
/**
* 订单全额退款 只传订单id
* 部分退款 传参refundDetailMap {"详情id":"数量","详情id":"数量"}
* 部分退款 传参refundDetail
*/
@PostMapping("/refundOrder")
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 org.springframework.web.bind.annotation.*;
import java.util.Map;
/**
* 订单管理
@ -38,6 +40,11 @@ public class UserOrderController {
return CzgResult.success(orderInfoService.getOrderByPage(queryDTO));
}
@GetMapping("/getOrderById")
public CzgResult<HistoryOrderVo> getOrderById(Long orderId) {
return orderInfoService.getOrderDetails(orderId);
}
@GetMapping("/historyOrder")
public CzgResult<HistoryOrderVo> historyOrder(
@RequestParam(required = false) Long orderId,

View File

@ -80,8 +80,8 @@ public class ShopStorageGoodController {
*/
@SaAdminCheckPermission(value = "storageGood:del", name = "存酒商品删除")
@DeleteMapping
public CzgResult<Boolean> del(@RequestBody @Validated({UpdateGroup.class}) ShopStorageGoodDTO shopStorageGoodDTO) {
return CzgResult.success(shopStorageGoodService.remove(new QueryWrapper().eq(ShopStorageGood::getShopId, StpKit.USER.getShopId()).eq(ShopStorageGood::getId, shopStorageGoodDTO.getId())));
public CzgResult<Boolean> del(@RequestParam Integer id) {
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.NotRoleException;
import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.io.resource.NoResourceException;
import com.czg.resp.CzgRespCode;
import com.czg.resp.CzgResult;
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.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.resource.NoResourceFoundException;
import java.util.List;
import java.util.stream.Collectors;
@ -37,6 +39,14 @@ public class CzgControllerAdvice {
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
@ExceptionHandler(value = NotLoginException.class)
@ResponseStatus(HttpStatus.OK)

View File

@ -201,4 +201,8 @@ public class OrderDetail implements Serializable {
public String getRefundRemark() {
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.vo.HistoryOrderVo;
import com.czg.order.vo.OrderInfoVo;
import com.czg.resp.CzgResult;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import jakarta.validation.constraints.NotBlank;
@ -30,6 +31,8 @@ public interface OrderInfoService extends IService<OrderInfo> {
Page<OrderInfoVo> getOrderByPage(OrderInfoQueryDTO param);
CzgResult<HistoryOrderVo> getOrderDetails(Long orderId);
HistoryOrderVo historyOrder(Long orderId, String tableCode);
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.OrderDetailSmallVO;
import com.czg.order.vo.OrderInfoVo;
import com.czg.resp.CzgResult;
import com.czg.sa.StpKit;
import com.czg.service.RedisService;
import com.czg.order.dto.BigDecimalDTO;
@ -128,6 +129,12 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
return orderInfoVoPage;
}
@Override
public CzgResult<HistoryOrderVo> getOrderDetails(Long orderId) {
AssertUtil.isNull(orderId, "订单id不能为空");
return CzgResult.success(historyOrder(orderId, null));
}
@Override
public HistoryOrderVo historyOrder(Long orderId, String 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))
.oneAs(HistoryOrderVo.class);
} 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) {
return null;
@ -158,7 +166,6 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
Integer placeNum = orderDetail.getPlaceNum();
// 检查 Map 中是否已经存在该 placeNum 对应的列表
resultMap.computeIfAbsent(placeNum.toString(), k -> new ArrayList<>()).add(orderDetail);
}
historyOrderVo.setDetailMap(resultMap);
return historyOrderVo;
@ -212,13 +219,13 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
@Override
public OrderInfo checkOrderPay(CheckOrderPay param) {
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())) {
// redisService.set(RedisCst.classKeyExpired.EXPIRED_ORDER + param.getOrderId(), "", 60 * 15);
// } else {
// throw new ValidateException("订单已过期,请重新下单");
// }
}
// }
ShopInfo shopInfo = shopInfoService.getById(orderInfo.getShopId());
AssertUtil.isNull(shopInfo, "生成订单失败,店铺信息不存在");
if (param.isVipPrice() && !shopInfo.getIsMemberPrice().equals(1)) {
@ -380,9 +387,13 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
}
}
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(orderDetail.getNum()) >= 0) {
orderDetail.setCouponNum(orderDetail.getNum());
@ -658,7 +669,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
orderInfo.setSeatNum(param.getSeatNum());
}
orderInfo.setPlaceNum(param.getPlaceNum());
orderInfo.setOriginAmount(BigDecimal.ZERO);
orderInfo.setOriginAmount(param.getOriginAmount());
orderInfo.setOrderAmount(BigDecimal.ZERO);
orderInfo.setPackFee(orderInfo.getPackFee().add(param.getPackFee()));
orderInfo.setRoundAmount(BigDecimal.ZERO);

View File

@ -530,6 +530,11 @@ public class PayServiceImpl implements PayService {
if (orderDetail.getReturnAmount().compareTo(orderDetail.getPayAmount()) > 0) {
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 {
orderDetail.setReturnNum(orderDetail.getRefundNum().add(refNum));
orderDetail.setPayAmount((orderDetail.getNum().subtract(orderDetail.getRefundNum()).subtract(orderDetail.getReturnNum())
@ -537,21 +542,15 @@ public class PayServiceImpl implements PayService {
}
orderDetail.setRefundNo(refPayOrderNo);
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);
returnProMap.put(orderDetail.getProductId(), refundDetail.getNum());
}
long count = orderDetailService.queryChain()
.eq(OrderDetail::getOrderId, orderInfo.getId())
.ne(OrderDetail::getStatus, OrderStatusEnums.REFUND.getCode()).count();
if (count > 0) {
if (count > 0 && isPay) {
orderInfo.setStatus(OrderStatusEnums.PART_REFUND.getCode());
} else {
} else if (isPay) {
orderInfo.setStatus(OrderStatusEnums.REFUND.getCode());
}
} else {
@ -566,11 +565,12 @@ public class PayServiceImpl implements PayService {
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()).subtract(orderDetail.getRefundNum()));
orderDetail.setRefundNum(orderDetail.getNum().subtract(orderDetail.getReturnNum()));
orderDetail.setReturnAmount(orderDetail.getPayAmount());
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
} else {
returnProMap.put(orderDetail.getProductId(), orderDetail.getNum().subtract(orderDetail.getReturnNum()));
orderDetail.setReturnNum(orderDetail.getNum());
orderDetail.setStatus(OrderStatusEnums.CANCELLED.getCode());
}
orderDetail.setStatus(OrderStatusEnums.REFUND.getCode());
}
orderDetailService.updateBatch(orderDetails);
}

View File

@ -54,7 +54,18 @@ public class ShopStorageServiceImpl extends ServiceImpl<ShopStorageMapper, ShopS
queryWrapper.eq(ShopStorage::getPhone, phone);
}
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
@ -104,9 +115,13 @@ public class ShopStorageServiceImpl extends ServiceImpl<ShopStorageMapper, ShopS
}
shopStorage.setNum(shopStorage.getNum() + shopStorageEditDTO.getNum());
if (shopStorage.getNum() == 0) {
shopStorage.setStatus(0);
}
boolean b = updateById(shopStorage);
if (b) {
ShopStorageRecord record = new ShopStorageRecord();
record.setStorageId(shopStorage.getId());
record.setTime(DateUtil.date().toLocalDateTime());