From 069e329d9ffd3e9ca866300b238f6a49a37c4148 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Fri, 31 Oct 2025 11:19:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=B4=BB=E5=8A=A8=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/810pjcloudx_wallet_act.sql | 24 ++++ .../api/constant/act/ActCancelStatusEnum.java | 1 - .../api/constant/act/ActStatusEnum.java | 35 ++++++ .../wallet/api/dto/act/ActCancelDto.java | 9 ++ .../api/entity/act/ActCancelEntity.java | 119 ++++++++++++++++++ .../wallet/api/vo/act/ActCancelVo.java | 21 ++++ .../controller/act/ActCancelController.java | 72 +++++++++++ .../wallet/mapper/act/ActCancelMapper.java | 19 +++ .../wallet/service/ActCancelService.java | 29 +++++ .../impl/act/ActCancelServiceImpl.java | 73 +++++++++++ .../resources/mapper/act/ActCancelMapper.xml | 52 ++++++++ 11 files changed, 453 insertions(+), 1 deletion(-) create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActStatusEnum.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelDto.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCancelEntity.java create mode 100644 pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelVo.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelController.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelMapper.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCancelServiceImpl.java create mode 100644 pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelMapper.xml diff --git a/db/810pjcloudx_wallet_act.sql b/db/810pjcloudx_wallet_act.sql index 96592a588..66da835a7 100644 --- a/db/810pjcloudx_wallet_act.sql +++ b/db/810pjcloudx_wallet_act.sql @@ -1,3 +1,27 @@ +-- ---------------------------- +-- Table structure for act_cancel +-- ---------------------------- +DROP TABLE IF EXISTS 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 ='核销活动'; + -- ---------------------------- -- Table structure for act_cancel_item -- ---------------------------- diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java index 9bbf0c09f..a9cd679d3 100644 --- a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActCancelStatusEnum.java @@ -18,7 +18,6 @@ public enum ActCancelStatusEnum { CANCEL_EXPIRE("3", "已过期"), ; private final String code; - private final String desc; public static ActCancelStatusEnum valueOfByType(String code) { diff --git a/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActStatusEnum.java b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActStatusEnum.java new file mode 100644 index 000000000..bb94f0985 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/constant/act/ActStatusEnum.java @@ -0,0 +1,35 @@ +package com.bsd.pjcloud.wallet.api.constant.act; + +import cn.hutool.core.util.ObjectUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 核销活动状体啊 + */ +@Getter +@AllArgsConstructor +public enum ActStatusEnum { + + ACT_OPEN("1", "开启"), + ACT_CANCEL("2", "关闭活动"), + ; + + private final String code; + private final String desc; + + public static ActStatusEnum valueOfByType(String code) { + return Arrays.stream(ActStatusEnum.values()) + .filter(v -> ObjectUtil.equal(v.getCode(), code)) + .findFirst().get(); + } + + public static ActStatusEnum descOf(String description) { + return Arrays.stream(ActStatusEnum.values()) + .filter(v -> ObjectUtil.equal(v.getDesc(), description)) + .findFirst().get(); + } + +} 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 new file mode 100644 index 000000000..9da345a6b --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/dto/act/ActCancelDto.java @@ -0,0 +1,9 @@ +package com.bsd.pjcloud.wallet.api.dto.act; + +import com.bsd.pjcloud.wallet.api.entity.act.ActCancelEntity; +import lombok.Data; + +@Data +public class ActCancelDto extends ActCancelEntity { + +} 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 new file mode 100644 index 000000000..81af4e11a --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/entity/act/ActCancelEntity.java @@ -0,0 +1,119 @@ +package com.bsd.pjcloud.wallet.api.entity.act; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import com.bsd.pjcloud.common.core.util.TenantTable; + +import java.time.LocalDateTime; + +/** + * 核销活动 + */ +@Data +@TenantTable +@TableName("act_cancel") +@EqualsAndHashCode(callSuper = true) +@Schema(description = "核销活动") +public class ActCancelEntity extends Model { + + + /** + * 活动项id + */ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "活动项id") + private Long id; + + /** + * 活动商户id + */ + @Schema(description = "活动商户id") + private Long mchId; + + /** + * 公告id + */ + @Schema(description = "公告id") + private Long noticeId; + + /** + * 活动原价 + */ + @Schema(description = "活动原价") + private Integer activeOrgPrice; + + /** + * 活动核销价 + */ + @Schema(description = "活动核销价") + private Integer activeCancelPrice; + + /** + * 到期时间 + */ + @Schema(description = "到期时间") + private LocalDateTime expireTime; + + /** + * 活动状态(1:正常 2:关闭) + */ + @Schema(description = "活动状态(1:正常 2:关闭)") + private String actStatus; + + /** + * 活动标题 + */ + @Schema(description = "活动标题") + private String actTitle; + + /** + * 活动内容 + */ + @Schema(description = "活动内容") + private String actContent; + + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建人") + private String createBy; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + @Schema(description = "创建时间") + private LocalDateTime createTime; + + /** + * 修改人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "修改人") + private String updateBy; + + /** + * 修改时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + @Schema(description = "修改时间") + private LocalDateTime updateTime; + + /** + * 删除标记 + */ + @TableLogic + @TableField(fill = FieldFill.INSERT) + @Schema(description = "删除标记") + private String delFlag; + + /** + * 租户ID + */ + @Schema(description = "租户ID") + private Long tenantId; +} \ No newline at end of file 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 new file mode 100644 index 000000000..b8ae483f4 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-api/src/main/java/com/bsd/pjcloud/wallet/api/vo/act/ActCancelVo.java @@ -0,0 +1,21 @@ +package com.bsd.pjcloud.wallet.api.vo.act; + +import com.bsd.pjcloud.wallet.api.entity.act.ActCancelEntity; +import com.bsd.pjcloud.wallet.api.vo.base.BaseMchInterface; +import lombok.Data; + +@Data +public class ActCancelVo extends ActCancelEntity implements BaseMchInterface { + + /** + * 商户相关 + */ + private Long merchantId; + + private String merchantName; + + private String logoPic; + + private String merchantType; + +} 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 new file mode 100644 index 000000000..11fa7467a --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/controller/act/ActCancelController.java @@ -0,0 +1,72 @@ +package com.bsd.pjcloud.wallet.controller.act; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.core.util.R; +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.service.ActCancelService; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springdoc.core.annotations.ParameterObject; +import org.springframework.http.HttpHeaders; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + + +/** + * 核销活动 + */ +@RestController +@RequiredArgsConstructor +@RequestMapping("/act/act-cancel") +@Tag(description = "act-cancel", name = "核销活动管理") +@SecurityRequirement(name = HttpHeaders.AUTHORIZATION) +public class ActCancelController { + + private final ActCancelService actCancelService; + + @Operation(summary = "分页查询", description = "分页查询") + @GetMapping("/page") + @PreAuthorize("@pms.hasPermission('wallet_actCancel_view')") + public R getActCancelPage(@ParameterObject Page page, @ParameterObject ActCancelDto dto) { + return R.ok(actCancelService.scopePageJoin(page, dto, DataScope.of())); + } + + @Operation(summary = "通过id查询", description = "通过id查询") + @GetMapping("/{id}") + @PreAuthorize("@pms.hasPermission('wallet_actCancel_view')") + public R getById(@PathVariable("id") Long id) { + return R.ok(actCancelService.getById(id)); + } + + @Operation(summary = "新增核销活动", description = "新增核销活动") + @SysLog("新增核销活动") + @PostMapping + @PreAuthorize("@pms.hasPermission('wallet_actCancel_add')") + public R save(@RequestBody ActCancelDto dto) { + return R.ok(actCancelService.create(dto)); + } + + @Operation(summary = "修改核销活动", description = "修改核销活动") + @SysLog("修改核销活动") + @PutMapping + @PreAuthorize("@pms.hasPermission('wallet_actCancel_edit')") + public R updateById(@RequestBody ActCancelEntity actCancel) { + return R.ok(actCancelService.updateById(actCancel)); + } + + @Operation(summary = "通过id删除核销活动", description = "通过id删除核销活动") + @SysLog("通过id删除核销活动") + @DeleteMapping + @PreAuthorize("@pms.hasPermission('wallet_actCancel_del')") + public R removeById(@RequestBody Long[] ids) { + actCancelService.delByIds(CollUtil.toList(ids)); + return R.ok(); + } + +} \ 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 new file mode 100644 index 000000000..b1b23fcd9 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/mapper/act/ActCancelMapper.java @@ -0,0 +1,19 @@ +package com.bsd.pjcloud.wallet.mapper.act; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.bsd.pjcloud.common.data.datascope.DataScope; +import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper; +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 org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface ActCancelMapper extends PjcloudBaseMapper { + + List 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/ActCancelService.java b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java new file mode 100644 index 000000000..93f55215f --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/ActCancelService.java @@ -0,0 +1,29 @@ +package com.bsd.pjcloud.wallet.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.bsd.pjcloud.common.data.datascope.DataScope; +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 java.util.ArrayList; +import java.util.List; + +public interface ActCancelService extends IService { + + /** + * 分页查询 + */ + List scopePageJoin(Page page, ActCancelDto dto, DataScope dataScope); + + /** + * 新增 + */ + Long create(ActCancelDto dto); + + /** + * 根据ids删除 + */ + void delByIds(ArrayList list); +} \ No newline at end of file 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 new file mode 100644 index 000000000..2d136e349 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/java/com/bsd/pjcloud/wallet/service/impl/act/ActCancelServiceImpl.java @@ -0,0 +1,73 @@ +package com.bsd.pjcloud.wallet.service.impl.act; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.entity.act.ActCancelEntity; +import com.bsd.pjcloud.wallet.api.entity.act.ActCancelItemEntity; +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; +import com.bsd.pjcloud.wallet.service.ActCancelService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 核销活动 + */ +@Service +@Slf4j +@RequiredArgsConstructor +public class ActCancelServiceImpl extends ServiceImpl implements ActCancelService { + + private final ActCancelItemMapper actCancelItemMapper; + + /** + * 分页查询 + */ + @Override + public List scopePageJoin(Page page, ActCancelDto dto, DataScope dataScope) { + return baseMapper.scopePageJoin(page, dto, dataScope); + } + + /** + * 新增 + */ + @Override + public Long create(ActCancelDto dto) { + ActCancelEntity savObj = BeanUtils.toBean(dto, ActCancelEntity.class); + if (ObjectUtil.isEmpty(savObj.getActStatus())) { + savObj.setActStatus(ActStatusEnum.ACT_OPEN.getCode()); + } + baseMapper.insert(savObj); + return savObj.getId(); + } + + /** + * 根据ids删除 + */ + @Override + public void delByIds(ArrayList actIds) { + if (ObjectUtil.isEmpty(actIds)) return; + List list = baseMapper.selectList(new LambdaQueryWrapper().in(ActCancelEntity::getId, actIds)); + if (ObjectUtil.isEmpty(list)) return; + for (ActCancelEntity v : list) { + if (ObjectUtil.equals(v.getActStatus(), ActStatusEnum.ACT_OPEN.getCode())) { + throw new RuntimeException("<" + v.getActTitle() + ">,该活动未关闭,无法删除!"); + } + Long cout = actCancelItemMapper.selectCount(new LambdaQueryWrapper().eq(ActCancelItemEntity::getActId, v.getId())); + if (ObjectUtil.isNotEmpty(cout) && cout > 0) { + throw new RuntimeException("<" + v.getActTitle() + ">,该活动已有人参加活动,无法删除!"); + } + } + } +} \ 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 new file mode 100644 index 000000000..f2ffa68a3 --- /dev/null +++ b/pjcloud-wallet/pjcloud-wallet-biz/src/main/resources/mapper/act/ActCancelMapper.xml @@ -0,0 +1,52 @@ + + + + + + select a.id, + a.mch_id, + a.notice_id, + a.active_org_price, + a.active_cancel_price, + a.expire_time, + a.act_status, + a.act_title, + a.act_content, + a.create_by, + a.create_time, + a.update_by, + a.update_time, + a.del_flag, + a.tenant_id + + + + a.del_flag = '0' + + and a.mch_id = #{dto.mchId} + + + and a.notice_id = #{dto.noticeId} + + + and a.act_status = #{dto.noticeId} + + + and a.actTitle LIKE concat('%',#{dto.actTitle},'%') + + + + + + \ No newline at end of file