diff --git a/db/810pjcloudx_wallet_act.sql b/db/810pjcloudx_wallet_act.sql index 66da835a7..f5a234a9b 100644 --- a/db/810pjcloudx_wallet_act.sql +++ b/db/810pjcloudx_wallet_act.sql @@ -1,26 +1,23 @@ --- ---------------------------- --- Table structure for act_cancel --- ---------------------------- -DROP TABLE IF EXISTS act_cancel; -CREATE TABLE act_cancel +create table act_cancel ( - id bigint NOT NULL AUTO_INCREMENT COMMENT '活动项id', - mch_id bigint NOT NULL COMMENT '活动商户id', - notice_id bigint NOT NULL COMMENT '公告id', - active_org_price int DEFAULT NULL COMMENT '活动原价', - active_cancel_price int NOT NULL COMMENT '活动核销价', - expire_time datetime NOT NULL COMMENT '到期时间', - act_status char(32) NOT NULL COMMENT '活动状态(1:正常 2:关闭)', - act_title char(32) NOT NULL COMMENT '活动标题', - act_content char(32) DEFAULT NULL COMMENT '活动内容', - create_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', - create_time datetime DEFAULT NULL COMMENT '创建时间', - update_by varchar(64) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人', - update_time datetime DEFAULT NULL COMMENT '修改时间', - del_flag char(1) COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标记', - tenant_id bigint DEFAULT NULL COMMENT '租户ID', - PRIMARY KEY (id) -) ENGINE = InnoDB COMMENT ='核销活动'; + id BIGINT(19) auto_increment comment '活动项id' + primary key, + mch_id BIGINT(19) not null comment '活动商户id', + notice_id BIGINT(19) not null comment '公告id', + active_org_price INT(10) null comment '活动原价', + active_cancel_price INT(10) not null comment '活动核销价', + start_time DATETIME null comment '开始时间', + expire_time DATETIME not null comment '到期时间', + act_status CHAR(32) not null comment '活动状态(1:正常 2:关闭)', + act_title CHAR(32) not null comment '活动标题', + act_content CHAR(32) null comment '活动内容', + create_by VARCHAR(64) null comment '创建人', + create_time DATETIME null comment '创建时间', + update_by VARCHAR(64) null comment '修改人', + update_time DATETIME null comment '修改时间', + del_flag CHAR default '0' null comment '删除标记', + tenant_id BIGINT(19) null comment '租户ID' +); -- ---------------------------- -- Table structure for act_cancel_item diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java index 3e73af2fe..97f8887bc 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/HardTypeEnum.java @@ -28,7 +28,7 @@ public enum HardTypeEnum { private final String description; // 是否能预定 - public static final List isReserveList = List.of(SUPERMARKET, CANTEEN); + public static final List isReserveList = List.of(SUPERMARKET, CANTEEN, FARMER); // 不需要创建购物车 public static final List isNoneCar = List.of(MERCHANT_QR_CODE); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java index d911f876f..88b7c7009 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/constant/order/HardOrderTypeEnum.java @@ -29,7 +29,7 @@ public enum HardOrderTypeEnum { return Arrays.stream(values()).filter(v -> ObjectUtil.equals(type, v.getType())).findFirst().get(); } - public static final List refundList = List.of(BELOW, RESERVE, FOREIGN_TICKET, ZY, LB); + public static final List refundList = List.of(BELOW, RESERVE, FOREIGN_TICKET, ZY, LB, FARMER); public static final List payList = List.of(BELOW, RESERVE); diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/act/HardCreateActOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/act/HardCreateActOrderDto.java index f3f1134ec..74a162a9e 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/act/HardCreateActOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/act/HardCreateActOrderDto.java @@ -10,13 +10,9 @@ public class HardCreateActOrderDto { @Schema(description = "活动类型") private String actType; - @Schema(description = "活动id") - @NotNull(message = "活动id") - private Long actId; - - @Schema(description = "总金额不能为空") - @NotNull(message = "总金额") - private Integer totalPrice; + @Schema(description = "核销id") + @NotNull(message = "核销id不能为空") + private Long cancelId; @Schema(description = "核销用户id") private Long cancelUserId; diff --git a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateFarmerOrderDto.java b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateFarmerOrderDto.java index 386d94c74..065bb1873 100644 --- a/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateFarmerOrderDto.java +++ b/pjcloud-hardware/pjcloud-hardware-api/src/main/java/com/bsd/pjcloud/hard/api/dto/order/app/HardAppCreateFarmerOrderDto.java @@ -19,7 +19,7 @@ public class HardAppCreateFarmerOrderDto { @NotNull(message = "购物车id不能为空") private Long carParentId; - @NotNull(message = "钱包类型id") + // @NotNull(message = "钱包类型id") private Long walletTypeId; @NotNull(message = "自提点id不能为空") diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java index 9c8de2742..7370fee9f 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardAfterSaleController.java @@ -114,7 +114,7 @@ public class HardAfterSaleController { @PostMapping(value = "/admin-reinforce-refund") @Operation(summary = "后台强化退款") - @Idempotent(expireTime = 5, info = "正在退款中,请勿重复操作") + @Idempotent(expireTime = 5, key = "'/hard-after-sale/admin-reinforce-refund' + #dto.getOrderId() ", info = "正在退款中,请勿重复操作") @PreAuthorize("@pms.hasPermission('hard_hardAfterSale_adminRefund')") public R adminReinforceRefund(@RequestBody HardAdminRefundReinforceDto dto) { PjcloudUser user = SecurityUtils.getUser(); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java index 7b4a4af52..6846600a1 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/controller/order/HardOrderController.java @@ -135,6 +135,16 @@ public class HardOrderController { return R.ok(hardwareOrderService.pagejoin(page, dto)); } + @Operation(summary = "app查询共富商城列表", description = "app查询共富商城列表") + @GetMapping("/app/farmer-page-join") + public R appFarmerPageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) { + PjcloudUser user = SecurityUtils.getUser(); + dto.setUserId(user.getId()); + dto.setIsFindCarList(true); + dto.setMchTypeCodes(List.of(MerchantTypeEnum.FARMER.getType())); + return R.ok(hardwareOrderService.pagejoin(page, dto)); + } + @Operation(summary = "app商户查询订单列表", description = "app商户查询订单列表") @GetMapping("/app/mch-page-join") public R appMchPageJoin(@ParameterObject Page page, @ParameterObject HardOrderDto dto) { @@ -165,7 +175,7 @@ public class HardOrderController { @Operation(summary = "app创建食堂预定订单", description = "app创建食堂预定订单") @GetMapping("/app/create-order") - @Idempotent(expireTime = 3, info = "正在创建订单中,请勿重复操作") + @Idempotent(expireTime = 3, key = "'/app/hard-order/app/create-order' + #carParentId ", info = "正在创建订单中,请勿重复操作") public R appCreateOrder(@RequestParam Long carParentId, @RequestParam Long apptId, @RequestParam HardTypeEnum hardType) { PjcloudUser user = SecurityUtils.getUser(); HardAppCreateOrderDto dto = HardAppCreateOrderDto.builder().carParentId(carParentId).walletType(WalletTypeEnum.EAT).hardType(hardType).userId(user.getId()).orderType(HardOrderTypeEnum.RESERVE).payType(HardPayTypeEnum.WALLET_DEFAULT).apptId(apptId).build(); @@ -174,7 +184,7 @@ public class HardOrderController { @Operation(summary = "app创建线上超市预定订单", description = "app创建线上超市预定订单") @GetMapping("/app/create-supermarket-order") - @Idempotent(expireTime = 3, info = "正在创建订单中,请勿重复操作") + @Idempotent(expireTime = 3, key = "'/app/hard-order/app/create-supermarket-order' + #carParentId ", info = "正在创建订单中,请勿重复操作") public R appCreateSupermarketReserveOrder(@RequestParam Long carParentId, @RequestParam HardTypeEnum hardType) { PjcloudUser user = SecurityUtils.getUser(); HardAppCreateOrderDto dto = HardAppCreateOrderDto.builder() @@ -220,7 +230,7 @@ public class HardOrderController { @Operation(summary = "app创建活动订单", description = "app创建活动订单") @PostMapping("/app/create-act-order") - @Idempotent(expireTime = 5, info = "正在创建订单中,请勿重复操作") + @Idempotent(expireTime = 3, key = "'/hard-order/app/create-act-order' + #body.getCancelId() ", info = "正在创建订单中,请勿重复操作") public R appCreateActOrder(@Validated @RequestBody HardCreateActOrderDto body) { PjcloudUser user = SecurityUtils.getUser(); body.setCancelUserId(user.getId()); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java index 6ba685927..10da93fd7 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/order/HardCarServiceImpl.java @@ -239,6 +239,37 @@ public class HardCarServiceImpl extends ServiceImpl { + AtomicInteger doorTotalPrice = new AtomicInteger(); + List spuList = remoteMallProductService.getSkusWithSpuBySkuIds(productIds).getData(); + for (HardCreateCarDto v : list) { + spu: + for (MallProductDetailAppVo spu : spuList) { + if (ObjectUtil.isEmpty(spu) || ObjectUtil.isEmpty(spu.getSkuList())) { + continue spu; + } + MallProductSkuAppVo sku = spu.getSkuList().stream().filter(_item -> ObjectUtil.equals(_item.getId(), v.getProductId())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(sku)) { + continue spu; + } + if (ObjectUtil.isEmpty(spu.getSkuList())) { + throw new RuntimeException("共富商城商品无SKU信息商品名字:" + spu.getTitle() + "商品ID:" + spu.getId() + "请联系管理员"); + } + Integer price = sku.getPrice(); + if (ObjectUtil.isNotEmpty(v.getProductCount()) && !ObjectUtil.equals(v.getProductCount(), 0)) { + // 按数量 + int itemTotalPrice = v.getProductCount() * price; + doorTotalPrice.addAndGet(itemTotalPrice); + } else if (ObjectUtil.isNotEmpty(v.getProductWeight()) && v.getProductWeight().compareTo(BigDecimal.valueOf(0)) != 0) { + // 按重量 + // 向上取整 + int itemTotalPrice = v.getProductWeight().multiply(BigDecimal.valueOf(price)).setScale(0, RoundingMode.CEILING).intValue(); + doorTotalPrice.addAndGet(itemTotalPrice); + } + } + } + yield doorTotalPrice.get(); + } default -> null; }; } @@ -452,8 +483,10 @@ public class HardCarServiceImpl extends ServiceImpl supList = remoteMallProductService.getDetailByIds(productIds).getData(); + List spuList = remoteMallProductService.getSkusWithSpuBySkuIds(productIds).getData(); for (HardCreateCarDto v : list) { - supList.stream().filter(i -> ObjectUtil.equals(i.getId(), v.getProductId())).findFirst().ifPresent(spu -> { - str.append(spu.getTitle()).append("x"); - if (ObjectUtil.equals(spu.getProductNature(), HardProductNatureEnum.DEFAULT.getType())) { - str.append(v.getProductCount()); - } else if (ObjectUtil.equals(spu.getProductNature(), HardProductNatureEnum.WEIGHT.getType())) { - str.append(v.getProductWeight()).append("/kg"); + spu: + for (MallProductDetailAppVo spu : spuList) { + if (ObjectUtil.isEmpty(spu) || ObjectUtil.isEmpty(spu.getSkuList())) { + continue spu; } - str.append(";"); - }); + MallProductSkuAppVo sku = spu.getSkuList().stream().filter(_item -> ObjectUtil.equals(_item.getId(), v.getProductId())).findFirst().orElse(null); + if (ObjectUtil.isEmpty(sku)) { + continue spu; + } + if (ObjectUtil.isEmpty(spu.getSkuList())) { + throw new RuntimeException("共富商城商品无SKU信息商品名字:" + spu.getTitle() + "商品ID:" + spu.getId() + "请联系管理员"); + } + str.append(spu.getTitle()).append("/").append(sku.getSkuName()).append("x").append(v.getProductCount()).append(";"); + } } } return str.toString(); 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 3d1d9b4f4..4c622f1a4 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 @@ -92,6 +92,7 @@ import com.bsd.pjcloud.wallet.api.utils.WalletDataUtil; import com.bsd.pjcloud.wallet.api.vo.MchManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletManageVo; import com.bsd.pjcloud.wallet.api.vo.WalletSettingVo; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemVo; import com.bsd.pjcloud.wallet.api.vo.mch.MchPickUpVo; import com.bsd.pjcloud.wallet.api.vo.mch.MchRuleJoinDtoVo; import jakarta.validation.Valid; @@ -645,7 +646,12 @@ public class HardOrderServiceImpl extends ServiceImpl cancelVo = remoteActCancelService.cancel(cancelDto); if (ObjectUtil.notEqual(cancelVo.getCode(), CommonConstants.SUCCESS)) { @@ -1136,6 +1144,10 @@ public class HardOrderServiceImpl extends ServiceImpl res = remoteCodeUseService.generateCode(order.getId(), order.getUserId(), codeType, 1); if (res.getCode() != 0 || !res.getData()) { @@ -1455,7 +1467,8 @@ public class HardOrderServiceImpl extends ServiceImpl typeList = List.of(HardOrderTypeEnum.RESERVE, HardOrderTypeEnum.FARMER); + if (!typeList.contains(orderTypeEnum)) { return false; } HardTypeEnum hardTypeEnum = HardTypeEnum.valueOfByType(order.getSysType()); diff --git a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java index 94c910258..2aabf8955 100644 --- a/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java +++ b/pjcloud-hardware/pjcloud-hardware-biz/src/main/java/com/bsd/pjcloud/hard/service/impl/spu/HardSpuServiceImpl.java @@ -187,8 +187,8 @@ public class HardSpuServiceImpl extends ServiceImpl and a.spu_category_id is not null - and a.ks_status = 5 + and a.ks_status in ('5','2') diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java index 91f0f6093..9a05b57c4 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/WalletCodeBizEnum.java @@ -14,6 +14,7 @@ public enum WalletCodeBizEnum { CANTEEN_RESERVE("3", "食堂线上预订"), SUPERMARKET_RESERVE("4", "超市线上预订"), USER_WALLET("5", "用户钱包二维码"), + FARMER_RESERVE("6", "用户钱包二维码"), ; private final String code; diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelDto.java index 9da345a6b..764b78fb6 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelDto.java @@ -3,7 +3,10 @@ package com.bsd.pjcloud.wallet.api.dto.act; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelEntity; import lombok.Data; +import java.util.List; + @Data public class ActCancelDto extends ActCancelEntity { + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelItemDto.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelItemDto.java index 6c6632aaf..5a3f46453 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelItemDto.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelItemDto.java @@ -4,10 +4,15 @@ import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity; import lombok.Data; import java.time.LocalDateTime; +import java.util.List; @Data public class ActCancelItemDto extends ActCancelItemEntity { + private List actIdList; + + private List mchIdList; + private LocalDateTime[] cancelTimeList; } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCancelEntity.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCancelEntity.java index 81af4e11a..eea81ad7c 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCancelEntity.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCancelEntity.java @@ -51,6 +51,12 @@ public class ActCancelEntity extends Model { @Schema(description = "活动核销价") private Integer activeCancelPrice; + /** + * 开始时间 + */ + @Schema(description = "开始时间") + private LocalDateTime startTime; + /** * 到期时间 */ diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCancelService.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCancelService.java index dbc2d56c3..541cee5af 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCancelService.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/feign/RemoteActCancelService.java @@ -5,6 +5,7 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.feign.annotation.NoToken; import com.bsd.pjcloud.wallet.api.dto.act.ActCancelItemDto; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemVo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -17,7 +18,7 @@ public interface RemoteActCancelService { @NoToken @GetMapping("/act/cancel-item/get-detail") - R getDetail(@RequestParam Long id); + R getDetail(@RequestParam Long cancelId); @NoToken @PostMapping("/act/cancel-item/cancel") diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemCountVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemCountVo.java new file mode 100644 index 000000000..a54225d01 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemCountVo.java @@ -0,0 +1,25 @@ +package com.bsd.pjcloud.wallet.api.vo.act; + +import lombok.Data; + +@Data +public class ActCancelItemCountVo { + + private Long actId; + + /** + * 预约总数 + */ + private Long totalCount; + + /** + * 核销总数 + */ + private Long cancelCount; + + /** + * 未核销总数 + */ + private Long cancelAwaitCount; + +} diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemVo.java index e858df4a7..2a708fbba 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelItemVo.java @@ -3,6 +3,8 @@ package com.bsd.pjcloud.wallet.api.vo.act; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity; import lombok.Data; +import java.time.LocalDateTime; + @Data public class ActCancelItemVo extends ActCancelItemEntity { @@ -21,4 +23,24 @@ public class ActCancelItemVo extends ActCancelItemEntity { */ private String mchName; + /** + * 活动核销价格 + */ + private Integer activeCancelPrice; + + /** + * 活动名称 + */ + private String actTitlel; + + /** + * 活动开始时间 + */ + private LocalDateTime actStartTime; + + /** + * 活动结束时间 + */ + private LocalDateTime actExpireTime; + } diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelVo.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelVo.java index b8ae483f4..4a3da5ba5 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelVo.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelVo.java @@ -18,4 +18,9 @@ public class ActCancelVo extends ActCancelEntity implements BaseMchInterface { private String merchantType; + /** + * 统计相关 + */ + private ActCancelItemCountVo countVo; + } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelController.java index 11fa7467a..8b691cd22 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelController.java @@ -7,6 +7,7 @@ import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.wallet.api.dto.act.ActCancelDto; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelEntity; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelVo; import com.bsd.pjcloud.wallet.service.ActCancelService; import org.springframework.security.access.prepost.PreAuthorize; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -30,10 +31,27 @@ public class ActCancelController { private final ActCancelService actCancelService; + /* ************************************* start app start ************************************* */ + + @Operation(summary = "根据公告id查询活动", description = "根据公告id查询活动") + @GetMapping("/app/detail-by-notice-id") + public R getDetailByNoticeId(@RequestParam Long id) { + return R.ok(actCancelService.getDetailByNoticeId(id)); + } + + @Operation(summary = "根据活动id查询核销活动", description = "根据活动id查询核销活动") + @GetMapping("/app/detail-by-id") + public R getDetailById(@RequestParam Long id) { + return R.ok(actCancelService.getDetailById(id)); + } + + + /* ************************************* end app end ************************************* */ + @Operation(summary = "分页查询", description = "分页查询") @GetMapping("/page") @PreAuthorize("@pms.hasPermission('wallet_actCancel_view')") - public R getActCancelPage(@ParameterObject Page page, @ParameterObject ActCancelDto dto) { + public R> getActCancelPage(@ParameterObject Page page, @ParameterObject ActCancelDto dto) { return R.ok(actCancelService.scopePageJoin(page, dto, DataScope.of())); } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelItemController.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelItemController.java index 13cce628b..856dd547b 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelItemController.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelItemController.java @@ -1,8 +1,7 @@ package com.bsd.pjcloud.wallet.controller.act; import cn.hutool.core.collection.CollUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.idempotent.annotation.Idempotent; @@ -35,13 +34,11 @@ public class ActCancelItemController { private final ActCancelItemService actCancelItemService; - /* ************************************* start 远程调用 start ************************************* */ - @Inner() @Operation(summary = "查询优惠券详情", description = "查询优惠券详情") @GetMapping("/get-detail") - public R getDetail(@RequestParam Long id) { - return R.ok(actCancelItemService.getById(id)); + public R getDetail(@RequestParam Long cancelId) { + return R.ok(actCancelItemService.getDetail(cancelId)); } @Inner() @@ -59,15 +56,17 @@ public class ActCancelItemController { @PostMapping("/app/get") @Idempotent(expireTime = 2, key = "'/act/cancel/app/get/' + #dto.getReceiverUserId()", info = "正在领取中,请勿重复操作") public R appGet(@RequestBody ActCancelItemDto dto) { + if (ObjectUtil.isEmpty(dto.getActId())) throw new RuntimeException("活动id不能为空"); + if (ObjectUtil.isEmpty(dto.getMchId())) throw new RuntimeException("商户id不能为空"); PjcloudUser user = SecurityUtils.getUser(); return R.ok(actCancelItemService.appGet(user, dto)); } @Operation(summary = "app查询用户的唯一优惠券", description = "app查询用户的唯一优惠券") @GetMapping("/app/find-unique") - public R appFindUnique() { + public R appFindUnique(@RequestParam Long actId) { PjcloudUser user = SecurityUtils.getUser(); - return R.ok(actCancelItemService.appFindUnique(user)); + return R.ok(actCancelItemService.appFindUnique(actId, user)); } @Operation(summary = "app查询本店优惠券列表", description = "app查询本店优惠券列表") diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelItemMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelItemMapper.java index 878549da6..305a480f0 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelItemMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelItemMapper.java @@ -1,11 +1,18 @@ package com.bsd.pjcloud.wallet.mapper.act; import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +import com.bsd.pjcloud.wallet.api.dto.act.ActCancelDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCancelItemDto; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemCountVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; @Mapper public interface ActCancelItemMapper extends PjcloudBaseMapper { + List count(@Param("dto") ActCancelItemDto dto); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelMapper.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelMapper.java index b1b23fcd9..dcaea07be 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelMapper.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelMapper.java @@ -14,6 +14,6 @@ import java.util.List; @Mapper public interface ActCancelMapper extends PjcloudBaseMapper { - List scopePageJoin(Page page, @Param("dto") ActCancelDto dto, DataScope dataScope); + Page scopePageJoin(Page page, @Param("dto") ActCancelDto dto, DataScope dataScope); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java index dad0ccc65..5acc3833a 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelItemService.java @@ -20,7 +20,7 @@ public interface ActCancelItemService extends IService { /** * 查询用户的唯一优惠券 */ - ActCancelItemVo appFindUnique(PjcloudUser user); + ActCancelItemVo appFindUnique(Long actId, PjcloudUser user); /** * app查询本店优惠券列表 @@ -31,4 +31,9 @@ public interface ActCancelItemService extends IService { * 核销 */ Boolean cancel(ActCancelItemDto dto); + + /** + * 查询详情 + */ + ActCancelItemVo getDetail(Long cancelId); } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java index 93f55215f..dca25d064 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java @@ -15,13 +15,23 @@ public interface ActCancelService extends IService { /** * 分页查询 */ - List scopePageJoin(Page page, ActCancelDto dto, DataScope dataScope); + Page scopePageJoin(Page page, ActCancelDto dto, DataScope dataScope); /** * 新增 */ Long create(ActCancelDto dto); + /** + * 根据公告id查询核销活动 + */ + ActCancelEntity getDetailByNoticeId(Long noticeId); + + /** + * 根据活动id查询核销活动 + */ + ActCancelEntity getDetailById(Long id); + /** * 根据ids删除 */ diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java index 1c473ed77..1206e5513 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/WalletCodeUseServiceImpl.java @@ -100,6 +100,10 @@ public class WalletCodeUseServiceImpl extends ServiceImpl pageList(Page page, ActCancelItemDto dto) { Page pageList = baseMapper.selectPage(page, new LambdaQueryWrapper() + .eq(ObjectUtil.isNotEmpty(dto.getActId()), ActCancelItemEntity::getActId, dto.getActId()) .eq(ObjectUtil.isNotEmpty(dto.getMchId()), ActCancelItemEntity::getMchId, dto.getMchId()) .eq(ObjectUtil.isNotEmpty(dto.getReceiverUserId()), ActCancelItemEntity::getReceiverUserId, dto.getReceiverUserId()) .like(ObjectUtil.isNotEmpty(dto.getReceiverUserName()), ActCancelItemEntity::getReceiverUserName, dto.getReceiverUserName()) @@ -109,6 +118,24 @@ public class ActCancelItemServiceImpl extends ServiceImpl actIds = list.stream().map(ActCancelItemVo::getActId).distinct().filter(ObjectUtil::isNotEmpty).toList(); + if (ObjectUtil.isNotEmpty(actIds)) { + // 活动信息 + List actList = actCancelMapper.selectList(new LambdaQueryWrapper() + .in(ActCancelEntity::getId, actIds) + ); + if (ObjectUtil.isNotEmpty(actList)) { + Map actMap = CollectionUtils.convertMap(actList, ActCancelEntity::getId); + for (ActCancelItemVo item : list) { + ActCancelEntity act = actMap.get(item.getActId()); + if (ObjectUtil.isNotEmpty(act)) { + item.setActTitlel(act.getActTitle()); + item.setActExpireTime(act.getExpireTime()); + item.setActStartTime(act.getStartTime()); + } + } + } + } } /** @@ -116,30 +143,40 @@ public class ActCancelItemServiceImpl extends ServiceImpl() + .eq(ActCancelItemEntity::getActId, actId) .eq(ActCancelItemEntity::getReceiverUserId, user.getId()) ); - if (ObjectUtil.isEmpty(detail)) throw new RuntimeException("您未领取优惠券,请前往领取"); + if (ObjectUtil.isEmpty(detail)) return null; if (ObjectUtil.isNotEmpty(detail.getExpireTime())) { if (detail.getExpireTime().isBefore(LocalDateTime.now())) { throw new RuntimeException("您领取的优惠券已过期"); } } - return BeanUtil.toBean(detail, ActCancelItemVo.class); + ActCancelItemVo result = BeanUtil.toBean(detail, ActCancelItemVo.class); + result.setActTitlel(act.getActTitle()); + result.setActExpireTime(act.getExpireTime()); + return result; } /** @@ -192,12 +236,12 @@ public class ActCancelItemServiceImpl extends ServiceImpl() + .eq(ActCancelItemEntity::getId, cancelId) + ); + if (ObjectUtil.isEmpty(detail)) return null; + result = BeanUtils.toBean(detail, ActCancelItemVo.class); + // 查询活动 + ActCancelEntity actDetail = actCancelMapper.selectById(detail.getActId()); + if (ObjectUtil.isNotEmpty(actDetail)) { + result.setActiveCancelPrice(actDetail.getActiveCancelPrice()); + } + result.setActStartTime(actDetail.getStartTime()); + result.setActExpireTime(actDetail.getExpireTime()); + return result; + } + // 判断车牌号是否重复 - private boolean existAct(Long userId) { + private boolean existAct(Long userId, Long actId) { Long count = baseMapper.selectCount(new LambdaQueryWrapper() .eq(ObjectUtil.isNotEmpty(userId), ActCancelItemEntity::getReceiverUserId, userId) + .eq(ObjectUtil.isNotEmpty(actId), ActCancelItemEntity::getActId, actId) ); return count > 0; } diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCancelServiceImpl.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCancelServiceImpl.java index 2d136e349..efaa071f4 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCancelServiceImpl.java +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCancelServiceImpl.java @@ -1,5 +1,6 @@ package com.bsd.pjcloud.wallet.service.impl.act; +import cn.hutool.core.collection.IterUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,8 +9,11 @@ import com.bsd.pjcloud.common.core.util.BeanUtils; import com.bsd.pjcloud.common.data.datascope.DataScope; import com.bsd.pjcloud.wallet.api.constant.act.ActStatusEnum; import com.bsd.pjcloud.wallet.api.dto.act.ActCancelDto; +import com.bsd.pjcloud.wallet.api.dto.act.ActCancelItemDto; +import com.bsd.pjcloud.wallet.api.entity.WalletTypeEntity; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelEntity; import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity; +import com.bsd.pjcloud.wallet.api.vo.act.ActCancelItemCountVo; import com.bsd.pjcloud.wallet.api.vo.act.ActCancelVo; import com.bsd.pjcloud.wallet.mapper.act.ActCancelItemMapper; import com.bsd.pjcloud.wallet.mapper.act.ActCancelMapper; @@ -20,6 +24,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 核销活动 @@ -35,8 +40,27 @@ public class ActCancelServiceImpl extends ServiceImpl scopePageJoin(Page page, ActCancelDto dto, DataScope dataScope) { - return baseMapper.scopePageJoin(page, dto, dataScope); + public Page scopePageJoin(Page page, ActCancelDto dto, DataScope dataScope) { + Page pageList = baseMapper.scopePageJoin(page, dto, dataScope); + disposeList(pageList.getRecords(), dto); + return pageList; + } + + public void disposeList(List list, ActCancelDto dto) { + if (ObjectUtil.isEmpty(list)) return; + List actIds = list.stream().map(ActCancelVo::getId).toList(); + // 统计总数 + ActCancelItemDto queryDto = new ActCancelItemDto(); + queryDto.setActIdList(actIds); + List countList = actCancelItemMapper.count(queryDto); + if (ObjectUtil.isNotEmpty(countList)) { + Map countMap = IterUtil.toMap(countList, ActCancelItemCountVo::getActId); + for (ActCancelVo v : list) { + if (ObjectUtil.isEmpty(countMap.get(v.getId()))) continue; + ActCancelItemCountVo targetCunt = countMap.get(v.getId()); + v.setCountVo(targetCunt); + } + } } /** @@ -44,6 +68,7 @@ public class ActCancelServiceImpl extends ServiceImpl() + .eq(ActCancelEntity::getNoticeId, noticeId) + ); + } + + /** + * 根据公告id查询核销活动 + */ + @Override + public ActCancelEntity getDetailById(Long id) { + return baseMapper.selectOne(new LambdaQueryWrapper() + .eq(ActCancelEntity::getId, id) + ); + } + /** * 根据ids删除 */ @@ -70,4 +115,15 @@ public class ActCancelServiceImpl extends ServiceImpl() + .ne(ObjectUtil.isNotEmpty(id), ActCancelEntity::getId, id) + .eq(ObjectUtil.isNotEmpty(noticeId), ActCancelEntity::getNoticeId, noticeId) + ); + if (ObjectUtil.isNotEmpty(id)) { + return count >= 1; + } + return count > 0; + } } \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelItemMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelItemMapper.xml index 3e56356f7..8c91d93d1 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelItemMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelItemMapper.xml @@ -3,4 +3,63 @@ + + select a.id, + a.act_id, + a.mch_id, + a.receiver_user_id, + a.receiver_user_name, + a.receiver_time, + a.act_status, + a.cancel_user_id, + a.cancel_time, + a.expire_time, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id + + + + a.del_flag = '0' + + and a.act_id = #{dto.actId} + + + and a.mch_id = #{dto.mchId} + + + and a.receiver_user_id = #{dto.receiverUserId} + + + and a.act_status = #{dto.actStatus} + + + and a.act_id in + + #{v} + + + + and a.mch_id in + + #{v} + + + + + + \ No newline at end of file diff --git a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelMapper.xml b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelMapper.xml index f2ffa68a3..3f124aae0 100644 --- a/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelMapper.xml +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelMapper.xml @@ -8,6 +8,7 @@ a.notice_id, a.active_org_price, a.active_cancel_price, + a.start_time, a.expire_time, a.act_status, a.act_title,