From c53143db4b981a3a93491e70b41cf5aef9422cc6 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Wed, 3 Sep 2025 10:02:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E7=A1=AC=E4=BB=B6=E6=89=AB=E4=B8=80?= =?UTF-8?q?=E6=89=AB=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/CacheConstants.java | 6 + .../hard/HardDoneHardQrCodeScanOrderDto.java | 15 +++ .../hard/api/dto/order/HardOrderDto.java | 2 +- .../HardCreateHardQrCodeScanOrderVo.java | 20 +++ .../controller/hard/HardApiController.java | 35 ++++++ .../hard/service/HardOrderService.java | 12 ++ .../impl/order/HardOrderServiceImpl.java | 117 ++++++++++++++++++ 7 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardDoneHardQrCodeScanOrderDto.java create mode 100644 pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCreateHardQrCodeScanOrderVo.java diff --git a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java index ae4eecda3..a4c483d4f 100644 --- a/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java +++ b/pjcloud-common/pjcloud-common-core/src/main/java/com/bsd/pjcloud/common/core/constant/CacheConstants.java @@ -153,5 +153,11 @@ public interface CacheConstants { /* ************************************* end 第三方对接相关 end ************************************* */ + /* ************************************* start 订单相关 start ************************************* */ + + String HARDER_ORDER_NON_PAY = "hard:order:non_pay"; + + /* ************************************* end 订单相关 end ************************************* */ + } diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardDoneHardQrCodeScanOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardDoneHardQrCodeScanOrderDto.java new file mode 100644 index 000000000..5ce6a28a7 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/hard/HardDoneHardQrCodeScanOrderDto.java @@ -0,0 +1,15 @@ +package com.bsd.pjcloud.hard.api.dto.hard; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class HardDoneHardQrCodeScanOrderDto { + + @NotNull(message = "订单ID不能为空") + private Long orderId; + + @NotNull(message = "钱包类型ID不能为空") + private Long walletTypeId; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java index 33c64697d..97b687819 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/HardOrderDto.java @@ -33,7 +33,7 @@ public class HardOrderDto extends HardOrderEntity implements BaseIsIncludeTreeIn private List orderStatusCodes; - private LocalDate[] createTimeList; + private LocalDateTime[] createTimeList; private LocalDateTime[] payTimeList; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCreateHardQrCodeScanOrderVo.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCreateHardQrCodeScanOrderVo.java new file mode 100644 index 000000000..2a5172f69 --- /dev/null +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/vo/order/HardCreateHardQrCodeScanOrderVo.java @@ -0,0 +1,20 @@ +package com.bsd.pjcloud.hard.api.vo.order; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class HardCreateHardQrCodeScanOrderVo { + + private Long orderId; + + private Long mchId; + + private String qrCodeData; + +} diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java index 4908c3de3..9807c153a 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/hard/HardApiController.java @@ -3,26 +3,33 @@ package com.bsd.pjcloud.hard.controller.hard; import cn.hutool.core.util.ObjectUtil; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; +import com.bsd.pjcloud.common.security.service.PjcloudUser; +import com.bsd.pjcloud.common.security.util.SecurityUtils; import com.bsd.pjcloud.hard.api.constant.HardProductNatureEnum; import com.bsd.pjcloud.hard.api.constant.HardTypeEnum; +import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.async.SyncOfflineReqVo; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardBindDto; import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; +import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardChartLatitudeVo; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.vo.HardInvoiceVo; import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.api.vo.android.HardAdUserVo; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.hard.service.*; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpHeaders; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -85,6 +92,34 @@ public class HardApiController { return R.ok(hardwareOrderService.createOrder(dto)); } + @PostMapping("/create-hard-qr-code-order") + @Operation(summary = "创建设备二维码扫一扫订单") + @Idempotent(expireTime = 10, info = "正在创建订单中,请勿重复操作") + public R createHardQrCodeScanOrder(@Valid @RequestBody HardCreateOrderDto dto) { + // 处理商品类型 + if (ObjectUtil.isNotEmpty(dto.getList())) { + for (HardCreateCarDto item : dto.getList()) { + if (ObjectUtil.isEmpty(item.getProductNature())) continue; + if (ObjectUtil.isNotEmpty(item.getProductWeight()) && item.getProductWeight().compareTo(BigDecimal.valueOf(0)) != 0) { + item.setProductNature(HardProductNatureEnum.WEIGHT); + } else if (ObjectUtil.isNotEmpty(item.getProductCount())) { + item.setProductNature(HardProductNatureEnum.DEFAULT); + } + } + } + dto.setOrderPayType(HardPayTypeEnum.WALLET_QR_CODE_SCAN); + return R.ok(hardwareOrderService.createHardQrCodeScanOrder(dto)); + } + + @PostMapping("/done-hard-qr-code-order") + @Operation(summary = "用户确认设备二维码扫一扫订单") + @Idempotent(expireTime = 10, info = "订单支付中,请勿重复操作") + public R doneHardQrCodeScanOrder(@Validated @RequestBody HardDoneHardQrCodeScanOrderDto body) { + PjcloudUser user = SecurityUtils.getUser(); + hardwareOrderService.doneHardQrCodeScanOrder(body, user); + return R.ok(); + } + @PostMapping("/cancel-code") @Operation(summary = "核销二维码") @Idempotent(expireTime = 10, info = "正在核销中,请勿重复操作") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java index 3a0349244..cfd7d4393 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/HardOrderService.java @@ -11,11 +11,13 @@ import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; +import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; import com.bsd.pjcloud.hard.api.dto.order.HardCreateCarDto; import com.bsd.pjcloud.hard.api.dto.order.HardOrderDto; import com.bsd.pjcloud.hard.api.dto.order.app.HardAppCreateOrderDto; import com.bsd.pjcloud.hard.api.entity.order.HardCarEntity; import com.bsd.pjcloud.hard.api.entity.order.HardOrderEntity; +import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.thirdparty.dto.ks.KsRecognitionCallbackDto; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; @@ -43,6 +45,16 @@ public interface HardOrderService extends IService { */ Long createOrder(HardCreateOrderDto dto); + /** + * 创建设备二维码扫一扫订单 + */ + HardCreateHardQrCodeScanOrderVo createHardQrCodeScanOrder(@Valid HardCreateOrderDto dto); + + /** + * 用户确认设备二维码扫一扫订单 + */ + void doneHardQrCodeScanOrder(HardDoneHardQrCodeScanOrderDto dto, PjcloudUser user); + /** * app创建食堂预定订单 */ diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java index 2234023be..d12ee5ffc 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardOrderServiceImpl.java @@ -17,6 +17,7 @@ import com.bsd.pjcloud.admin.api.utils.DataUtil; import com.bsd.pjcloud.admin.api.vo.UserVO; import com.bsd.pjcloud.canteen.api.feign.RemoteOnlineCanteenSpuService; import com.bsd.pjcloud.canteen.dto.CanteenSpuUpdateStockReqDTO; +import com.bsd.pjcloud.common.core.constant.CacheConstants; import com.bsd.pjcloud.common.core.constant.enums.MerchantTypeEnum; import com.bsd.pjcloud.common.core.constant.enums.YesNoEnum; import com.bsd.pjcloud.common.core.util.BeanUtils; @@ -31,6 +32,7 @@ import com.bsd.pjcloud.hard.api.constant.order.HardOrderTypeEnum; import com.bsd.pjcloud.hard.api.constant.order.HardPayTypeEnum; import com.bsd.pjcloud.hard.api.dto.ali.AliMicropayDto; import com.bsd.pjcloud.hard.api.dto.ali.AliReverseDto; +import com.bsd.pjcloud.hard.api.dto.hard.HardDoneHardQrCodeScanOrderDto; import com.bsd.pjcloud.hard.api.dto.manager.HardManagerDto; import com.bsd.pjcloud.hard.api.dto.hard.HandCancelCodeDto; import com.bsd.pjcloud.hard.api.dto.hard.HardCreateOrderDto; @@ -50,6 +52,7 @@ import com.bsd.pjcloud.hard.api.utils.HardUtil; import com.bsd.pjcloud.hard.api.vo.HardDoorFlowVo; import com.bsd.pjcloud.hard.api.vo.manager.HardManagerVo; import com.bsd.pjcloud.hard.api.vo.order.HardCarVo; +import com.bsd.pjcloud.hard.api.vo.order.HardCreateHardQrCodeScanOrderVo; import com.bsd.pjcloud.hard.api.vo.order.HardOrderVo; import com.bsd.pjcloud.hard.api.vo.wechat.WechatMicropayVo; import com.bsd.pjcloud.hard.mapper.manager.HardManagerMapper; @@ -82,6 +85,7 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -97,6 +101,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; /** * 订单表 @@ -137,6 +142,8 @@ public class HardOrderServiceImpl extends ServiceImpl pagejoin(Page page, HardOrderDto dto) { Page list = baseMapper.pageJoin(page, dto); @@ -354,6 +361,116 @@ public class HardOrderServiceImpl extends ServiceImpl