From d33b041f4b2a63a22682c9b3f344ef35f84b4542 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期二, 30 九月 2025 14:37:36 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/user_action' into user_action --- framework/src/main/java/cn/lili/modules/lmk/mapper/ScanPrizeMapper.java | 34 + manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java | 15 framework/src/main/java/cn/lili/modules/lmk/domain/form/PrizeClaimRecordForm.java | 66 ++ framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java | 109 +++ framework/src/main/resources/mapper/lmk/StorePrizeProofMapper.xml | 41 + framework/src/main/java/cn/lili/modules/lmk/domain/form/ScanPrizeForm.java | 69 ++ framework/src/main/java/cn/lili/modules/lmk/enums/general/MaterialStatusEnum.java | 13 framework/src/main/java/cn/lili/modules/lmk/enums/general/GenerateStorePrizeStausEnum.java | 13 framework/src/main/java/cn/lili/modules/lmk/mapper/StorePrizeProofMapper.java | 34 + framework/src/main/java/cn/lili/modules/lmk/service/PrizeClaimRecordService.java | 65 ++ framework/src/main/java/cn/lili/modules/lmk/service/ScanPrizeService.java | 69 ++ framework/src/main/java/cn/lili/modules/lmk/domain/form/StorePrizeProofForm.java | 42 + framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreScanPrizeStausEnum.java | 13 framework/src/main/java/cn/lili/modules/lmk/domain/entity/ScanPrize.java | 60 ++ framework/src/main/java/cn/lili/modules/lmk/service/StorePrizeProofService.java | 65 ++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/ScanPrizeVO.java | 63 ++ framework/src/main/java/cn/lili/modules/lmk/domain/query/PrizeClaimRecordQuery.java | 22 manager-api/src/main/java/cn/lili/controller/lmk/ScanPrizeController.java | 98 +++ framework/src/main/resources/mapper/lmk/ScanPrizeMapper.xml | 59 + framework/src/main/java/cn/lili/modules/lmk/domain/entity/PrizeClaimRecord.java | 66 ++ framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java | 5 framework/src/main/java/cn/lili/modules/lmk/mapper/PrizeClaimRecordMapper.java | 34 + framework/src/main/resources/mapper/lmk/PrizeClaimRecordMapper.xml | 59 + framework/src/main/java/cn/lili/modules/lmk/domain/query/StorePrizeProofQuery.java | 22 framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java | 5 framework/src/main/java/cn/lili/modules/lmk/service/impl/ScanPrizeServiceImpl.java | 218 +++++++ framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml | 21 framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeClaimRecordServiceImpl.java | 119 +++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/StorePrizeProofVO.java | 39 + framework/src/main/java/cn/lili/modules/lmk/service/impl/StorePrizeProofServiceImpl.java | 119 +++ framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeClaimRecordVO.java | 63 ++ framework/src/main/java/cn/lili/modules/lmk/domain/query/ScanPrizeQuery.java | 22 framework/src/main/java/cn/lili/modules/lmk/domain/entity/StorePrizeProof.java | 30 + framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java | 6 34 files changed, 1,765 insertions(+), 13 deletions(-) diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/PrizeClaimRecord.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/PrizeClaimRecord.java new file mode 100644 index 0000000..83b2e1e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/PrizeClaimRecord.java @@ -0,0 +1,66 @@ +package cn.lili.modules.lmk.domain.entity; + +import cn.lili.modules.lmk.enums.general.MaterialStatusEnum; +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛� + * + * @author peng + * @since 2025-09-30 + */ +@Data +@TableName("lmk_prize_claim_record") +public class PrizeClaimRecord extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("no") + /** 缂栧彿 */ + private String no; + + @TableField("store_id") + /** 搴楅摵id */ + private String storeId; + + @TableField("store_prize_id") + /** 搴楅摵鎶藉娲诲姩id */ + private String storePrizeId; + + @TableField("store_name") + /** 搴楅摵鍚嶇О */ + private String storeName; + + @TableField("prize_activity_id") + /** 鎶藉娲诲姩id */ + private String prizeActivityId; + + @TableField("prize_activity_name") + /** 鎶藉娲诲姩鍚嶇О */ + private String prizeActivityName; + + @TableField("user_id") + /** 鐢ㄦ埛id */ + private String userId; + + @TableField("nick_name") + /** 鐢ㄦ埛鏄电О */ + private String nickName; + + @TableField("claim_status") + /** 棰嗗彇鐘舵�� */ + private String claimStatus; + + @TableField("material") + /** 鏉愭枡鐘舵�� + * + * @see MaterialStatusEnum + * */ + private String material; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ScanPrize.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ScanPrize.java new file mode 100644 index 0000000..2b88656 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/ScanPrize.java @@ -0,0 +1,60 @@ +package cn.lili.modules.lmk.domain.entity; + +import cn.lili.modules.lmk.enums.general.GenerateStorePrizeStausEnum; +import cn.lili.modules.lmk.enums.general.StoreScanPrizeStausEnum; +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 搴楅摵娲诲姩鍏宠仈 + * + * @author peng + * @since 2025-09-30 + */ +@Data +@TableName("lmk_scan_prize") +public class ScanPrize extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("store_id") + /** 搴楅摵id */ + private String storeId; + + @TableField("store_name") + /** 搴楅摵鍚嶇О */ + private String storeName; + + @TableField("prize_activity_id") + /** 鎶藉娲诲姩id */ + private String prizeActivityId; + + @TableField("prize_activity_nmae") + /** 鎶藉娲诲姩鍚嶇О鍚嶇О */ + private String prizeActivityNmae; + + @TableField("generate_status") + /** 鐢熸垚鐘舵�� + * @see GenerateStorePrizeStausEnum + * */ + private String generateStatus; + + @TableField("generate_num") + /** 鐢熸垚鏁伴噺 */ + private Integer generateNum; + + @TableField("claim_num") + /** 棰嗗彇鏁伴噺 */ + private Integer claimNum; + + @TableField("status") + /** 鏄惁鍚敤 + * @see StoreScanPrizeStausEnum + * */ + private String status; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StorePrizeProof.java b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StorePrizeProof.java new file mode 100644 index 0000000..891752b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/entity/StorePrizeProof.java @@ -0,0 +1,30 @@ +package cn.lili.modules.lmk.domain.entity; + +import cn.lili.mybatis.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import lombok.Data; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑 + * + * @author peng + * @since 2025-09-30 + */ +@Data +@TableName("lmk_store_prize_proof") +public class StorePrizeProof extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("store_prize_claim_id") + /** 鎶藉娲诲姩棰嗗彇琛╥d */ + private String storePrizeClaimId; + + @TableField("url_path") + /** 闄勪欢鍦板潃 */ + private String urlPath; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/PrizeClaimRecordForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/PrizeClaimRecordForm.java new file mode 100644 index 0000000..720c822 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/PrizeClaimRecordForm.java @@ -0,0 +1,66 @@ +package cn.lili.modules.lmk.domain.form; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import cn.lili.base.AbsForm; +import cn.lili.modules.lmk.domain.entity.PrizeClaimRecord; +import org.springframework.beans.BeanUtils; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.lang.NonNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛ㄨ〃鍗� + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "PrizeClaimRecord琛ㄥ崟", description = "搴楅摵鎶藉娲诲姩棰嗗彇琛ㄨ〃鍗�") +public class PrizeClaimRecordForm extends AbsForm { + + @NotBlank(message = "缂栧彿涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("缂栧彿") + private String no; + + @NotNull(message = "搴楅摵id涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("搴楅摵id") + private Long storeId; + + @NotBlank(message = "搴楅摵鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("搴楅摵鍚嶇О") + private String storeName; + + @NotNull(message = "鎶藉娲诲姩id涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鎶藉娲诲姩id") + private Long prizeActivityId; + + @NotBlank(message = "鎶藉娲诲姩鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鎶藉娲诲姩鍚嶇О") + private String prizeActivityName; + + @NotNull(message = "鐢ㄦ埛id涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鐢ㄦ埛id") + private Long userId; + + @NotBlank(message = "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鐢ㄦ埛鏄电О") + private String nickName; + + @NotBlank(message = "棰嗗彇鐘舵�佷笉鑳戒负绌�", groups = {Add.class, Update.class}) + @ApiModelProperty("棰嗗彇鐘舵��") + private String claimStatus; + + public static PrizeClaimRecord getEntityByForm(@NonNull PrizeClaimRecordForm form, PrizeClaimRecord entity) { + if(entity == null) { + entity = new PrizeClaimRecord(); + } + BeanUtils.copyProperties(form, entity); + return entity; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/ScanPrizeForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ScanPrizeForm.java new file mode 100644 index 0000000..87e1a47 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/ScanPrizeForm.java @@ -0,0 +1,69 @@ +package cn.lili.modules.lmk.domain.form; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import cn.lili.base.AbsForm; +import cn.lili.modules.lmk.domain.entity.ScanPrize; +import cn.lili.modules.lmk.enums.general.GenerateStorePrizeStausEnum; +import cn.lili.modules.lmk.enums.general.StoreScanPrizeStausEnum; +import org.springframework.beans.BeanUtils; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.lang.NonNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 搴楅摵娲诲姩鍏宠仈琛ㄥ崟 + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "ScanPrize琛ㄥ崟", description = "搴楅摵娲诲姩鍏宠仈琛ㄥ崟") +public class ScanPrizeForm extends AbsForm { + + @NotNull(message = "搴楅摵id涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("搴楅摵id") + private Long storeId; + + @NotNull(message = "搴楅摵鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("搴楅摵鍚嶇О") + private Long storeName; + + @NotNull(message = "鎶藉娲诲姩id涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鎶藉娲诲姩id") + private Long prizeActivityId; + + @NotBlank(message = "鎶藉娲诲姩鍚嶇О鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鎶藉娲诲姩鍚嶇О鍚嶇О") + private String prizeActivityNmae; + /** + * @see GenerateStorePrizeStausEnum + */ + @ApiModelProperty("鐢熸垚鐘舵��") + private String generateStatus; + + @NotNull(message = "鐢熸垚鏁伴噺涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鐢熸垚鏁伴噺") + private Integer generateNum; + + @ApiModelProperty("棰嗗彇鏁伴噺") + private Integer claimNum; + /** + * @see StoreScanPrizeStausEnum + */ + @ApiModelProperty("鏄惁鍚敤") + private String status; + + public static ScanPrize getEntityByForm(@NonNull ScanPrizeForm form, ScanPrize entity) { + if(entity == null) { + entity = new ScanPrize(); + } + BeanUtils.copyProperties(form, entity); + return entity; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/form/StorePrizeProofForm.java b/framework/src/main/java/cn/lili/modules/lmk/domain/form/StorePrizeProofForm.java new file mode 100644 index 0000000..95aa13e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/form/StorePrizeProofForm.java @@ -0,0 +1,42 @@ +package cn.lili.modules.lmk.domain.form; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import cn.lili.base.AbsForm; +import cn.lili.modules.lmk.domain.entity.StorePrizeProof; +import org.springframework.beans.BeanUtils; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import org.springframework.lang.NonNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑琛ㄥ崟 + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "StorePrizeProof琛ㄥ崟", description = "鎶藉娲诲姩琛ュ綍璇佹槑琛ㄥ崟") +public class StorePrizeProofForm extends AbsForm { + + @NotBlank(message = "鎶藉娲诲姩棰嗗彇琛╥d涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("鎶藉娲诲姩棰嗗彇琛╥d") + private String storePrizeClaimId; + + @NotBlank(message = "闄勪欢鍦板潃涓嶈兘涓虹┖", groups = {Add.class, Update.class}) + @ApiModelProperty("闄勪欢鍦板潃") + private String urlPath; + + public static StorePrizeProof getEntityByForm(@NonNull StorePrizeProofForm form, StorePrizeProof entity) { + if(entity == null) { + entity = new StorePrizeProof(); + } + BeanUtils.copyProperties(form, entity); + return entity; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/PrizeClaimRecordQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/PrizeClaimRecordQuery.java new file mode 100644 index 0000000..330b3bc --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/PrizeClaimRecordQuery.java @@ -0,0 +1,22 @@ +package cn.lili.modules.lmk.domain.query; + +import cn.lili.base.AbsQuery; +import java.util.List; +import org.springframework.lang.NonNull; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛ㄦ煡璇� + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "PrizeClaimRecord鏌ヨ鍙傛暟", description = "搴楅摵鎶藉娲诲姩棰嗗彇琛ㄦ煡璇㈠弬鏁�") +public class PrizeClaimRecordQuery extends AbsQuery { +} + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/ScanPrizeQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ScanPrizeQuery.java new file mode 100644 index 0000000..8daa571 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/ScanPrizeQuery.java @@ -0,0 +1,22 @@ +package cn.lili.modules.lmk.domain.query; + +import cn.lili.base.AbsQuery; +import java.util.List; +import org.springframework.lang.NonNull; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 搴楅摵娲诲姩鍏宠仈鏌ヨ + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "ScanPrize鏌ヨ鍙傛暟", description = "搴楅摵娲诲姩鍏宠仈鏌ヨ鍙傛暟") +public class ScanPrizeQuery extends AbsQuery { +} + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/query/StorePrizeProofQuery.java b/framework/src/main/java/cn/lili/modules/lmk/domain/query/StorePrizeProofQuery.java new file mode 100644 index 0000000..e4911b6 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/query/StorePrizeProofQuery.java @@ -0,0 +1,22 @@ +package cn.lili.modules.lmk.domain.query; + +import cn.lili.base.AbsQuery; +import java.util.List; +import org.springframework.lang.NonNull; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑鏌ヨ + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "StorePrizeProof鏌ヨ鍙傛暟", description = "鎶藉娲诲姩琛ュ綍璇佹槑鏌ヨ鍙傛暟") +public class StorePrizeProofQuery extends AbsQuery { +} + diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeClaimRecordVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeClaimRecordVO.java new file mode 100644 index 0000000..0cb71c7 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/PrizeClaimRecordVO.java @@ -0,0 +1,63 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.base.AbsVo; +import cn.lili.modules.lmk.domain.entity.PrizeClaimRecord; +import java.util.List; +import org.springframework.lang.NonNull; +import org.springframework.beans.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛ㄥ睍绀� + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "搴楅摵鎶藉娲诲姩棰嗗彇琛ㄥ搷搴旀暟鎹�", description = "搴楅摵鎶藉娲诲姩棰嗗彇琛ㄥ搷搴旀暟鎹�") +public class PrizeClaimRecordVO extends AbsVo { + + /** 缂栧彿 */ + @ApiModelProperty("缂栧彿") + private String no; + + /** 搴楅摵id */ + @ApiModelProperty("搴楅摵id") + private Long storeId; + + /** 搴楅摵鍚嶇О */ + @ApiModelProperty("搴楅摵鍚嶇О") + private String storeName; + + /** 鎶藉娲诲姩id */ + @ApiModelProperty("鎶藉娲诲姩id") + private Long prizeActivityId; + + /** 鎶藉娲诲姩鍚嶇О */ + @ApiModelProperty("鎶藉娲诲姩鍚嶇О") + private String prizeActivityName; + + /** 鐢ㄦ埛id */ + @ApiModelProperty("鐢ㄦ埛id") + private Long userId; + + /** 鐢ㄦ埛鏄电О */ + @ApiModelProperty("鐢ㄦ埛鏄电О") + private String nickName; + + /** 棰嗗彇鐘舵�� */ + @ApiModelProperty("棰嗗彇鐘舵��") + private String claimStatus; + + public static PrizeClaimRecordVO getVoByEntity(@NonNull PrizeClaimRecord entity, PrizeClaimRecordVO vo) { + if(vo == null) { + vo = new PrizeClaimRecordVO(); + } + BeanUtils.copyProperties(entity, vo); + return vo; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ScanPrizeVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ScanPrizeVO.java new file mode 100644 index 0000000..d9570bf --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/ScanPrizeVO.java @@ -0,0 +1,63 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.base.AbsVo; +import cn.lili.modules.lmk.domain.entity.ScanPrize; +import java.util.List; +import org.springframework.lang.NonNull; +import org.springframework.beans.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 搴楅摵娲诲姩鍏宠仈灞曠ず + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "搴楅摵娲诲姩鍏宠仈鍝嶅簲鏁版嵁", description = "搴楅摵娲诲姩鍏宠仈鍝嶅簲鏁版嵁") +public class ScanPrizeVO extends AbsVo { + + /** 搴楅摵id */ + @ApiModelProperty("搴楅摵id") + private Long storeId; + + /** 搴楅摵鍚嶇О */ + @ApiModelProperty("搴楅摵鍚嶇О") + private Long storeName; + + /** 鎶藉娲诲姩id */ + @ApiModelProperty("鎶藉娲诲姩id") + private Long prizeActivityId; + + /** 鎶藉娲诲姩鍚嶇О鍚嶇О */ + @ApiModelProperty("鎶藉娲诲姩鍚嶇О鍚嶇О") + private String prizeActivityNmae; + + /** 鐢熸垚鐘舵�� */ + @ApiModelProperty("鐢熸垚鐘舵��") + private String generateStatus; + + /** 鐢熸垚鏁伴噺 */ + @ApiModelProperty("鐢熸垚鏁伴噺") + private Integer generateNum; + + /** 棰嗗彇鏁伴噺 */ + @ApiModelProperty("棰嗗彇鏁伴噺") + private Integer claimNum; + + /** 鏄惁鍚敤 */ + @ApiModelProperty("鏄惁鍚敤") + private String status; + + public static ScanPrizeVO getVoByEntity(@NonNull ScanPrize entity, ScanPrizeVO vo) { + if(vo == null) { + vo = new ScanPrizeVO(); + } + BeanUtils.copyProperties(entity, vo); + return vo; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StorePrizeProofVO.java b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StorePrizeProofVO.java new file mode 100644 index 0000000..b319fe7 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/domain/vo/StorePrizeProofVO.java @@ -0,0 +1,39 @@ +package cn.lili.modules.lmk.domain.vo; + +import cn.lili.base.AbsVo; +import cn.lili.modules.lmk.domain.entity.StorePrizeProof; +import java.util.List; +import org.springframework.lang.NonNull; +import org.springframework.beans.BeanUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.util.Date; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑灞曠ず + * + * @author peng + * @since 2025-09-30 + */ +@Data +@ApiModel(value = "鎶藉娲诲姩琛ュ綍璇佹槑鍝嶅簲鏁版嵁", description = "鎶藉娲诲姩琛ュ綍璇佹槑鍝嶅簲鏁版嵁") +public class StorePrizeProofVO extends AbsVo { + + /** 鎶藉娲诲姩棰嗗彇琛╥d */ + @ApiModelProperty("鎶藉娲诲姩棰嗗彇琛╥d") + private String storePrizeClaimId; + + /** 闄勪欢鍦板潃 */ + @ApiModelProperty("闄勪欢鍦板潃") + private String urlPath; + + public static StorePrizeProofVO getVoByEntity(@NonNull StorePrizeProof entity, StorePrizeProofVO vo) { + if(vo == null) { + vo = new StorePrizeProofVO(); + } + BeanUtils.copyProperties(entity, vo); + return vo; + } + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/GenerateStorePrizeStausEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/GenerateStorePrizeStausEnum.java new file mode 100644 index 0000000..18d7756 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/GenerateStorePrizeStausEnum.java @@ -0,0 +1,13 @@ +package cn.lili.modules.lmk.enums.general; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum GenerateStorePrizeStausEnum { + NOT_GENERATE("娌℃湁鐢熸垚"), + GENERATE("鐢熸垚"); + + private String des; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/MaterialStatusEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/MaterialStatusEnum.java new file mode 100644 index 0000000..be48e56 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/MaterialStatusEnum.java @@ -0,0 +1,13 @@ +package cn.lili.modules.lmk.enums.general; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum MaterialStatusEnum { + NOT_GENERATE("娌℃湁鐢熸垚"), + GENERATE("鐢熸垚"); + + private String des; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreScanPrizeStausEnum.java b/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreScanPrizeStausEnum.java new file mode 100644 index 0000000..1ee2e0e --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/enums/general/StoreScanPrizeStausEnum.java @@ -0,0 +1,13 @@ +package cn.lili.modules.lmk.enums.general; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum StoreScanPrizeStausEnum { + ENABLE("鍚敤"), + DISABLE("绂佺敤"); + + private String des; + + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java index c73915c..90b15b1 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ActionRecordMapper.java @@ -6,6 +6,9 @@ import cn.lili.modules.lmk.domain.vo.ActionRecordVO; import cn.lili.modules.lmk.domain.form.ActionRecordForm; import cn.lili.modules.lmk.domain.query.ActionRecordQuery; + +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -31,4 +34,6 @@ */ IPage getPage(IPage page, @Param("query") ActionRecordQuery query); + BigDecimal getToDayStayTime(@Param("userId") String userId,@Param("begin") LocalDateTime begin ,@Param("end") LocalDateTime end); + } diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/PrizeClaimRecordMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/PrizeClaimRecordMapper.java new file mode 100644 index 0000000..0b79874 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/PrizeClaimRecordMapper.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.mapper; + +import cn.lili.modules.lmk.domain.entity.PrizeClaimRecord; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.lili.modules.lmk.domain.vo.PrizeClaimRecordVO; +import cn.lili.modules.lmk.domain.form.PrizeClaimRecordForm; +import cn.lili.modules.lmk.domain.query.PrizeClaimRecordQuery; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛� Mapper 鎺ュ彛 + * + * @author peng + * @since 2025-09-30 + */ +@Mapper +public interface PrizeClaimRecordMapper extends BaseMapper<PrizeClaimRecord> { + + /** + * id鏌ユ壘搴楅摵鎶藉娲诲姩棰嗗彇琛� + * @param id + * @return + */ + PrizeClaimRecordVO getById(String id); + + /** + * 鍒嗛〉 + */ + IPage getPage(IPage page, @Param("query") PrizeClaimRecordQuery query); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/ScanPrizeMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/ScanPrizeMapper.java new file mode 100644 index 0000000..e4e4169 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/ScanPrizeMapper.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.mapper; + +import cn.lili.modules.lmk.domain.entity.ScanPrize; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.lili.modules.lmk.domain.vo.ScanPrizeVO; +import cn.lili.modules.lmk.domain.form.ScanPrizeForm; +import cn.lili.modules.lmk.domain.query.ScanPrizeQuery; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 搴楅摵娲诲姩鍏宠仈 Mapper 鎺ュ彛 + * + * @author peng + * @since 2025-09-30 + */ +@Mapper +public interface ScanPrizeMapper extends BaseMapper<ScanPrize> { + + /** + * id鏌ユ壘搴楅摵娲诲姩鍏宠仈 + * @param id + * @return + */ + ScanPrizeVO getById(String id); + + /** + * 鍒嗛〉 + */ + IPage getPage(IPage page, @Param("query") ScanPrizeQuery query); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/mapper/StorePrizeProofMapper.java b/framework/src/main/java/cn/lili/modules/lmk/mapper/StorePrizeProofMapper.java new file mode 100644 index 0000000..413ed88 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/mapper/StorePrizeProofMapper.java @@ -0,0 +1,34 @@ +package cn.lili.modules.lmk.mapper; + +import cn.lili.modules.lmk.domain.entity.StorePrizeProof; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import cn.lili.modules.lmk.domain.vo.StorePrizeProofVO; +import cn.lili.modules.lmk.domain.form.StorePrizeProofForm; +import cn.lili.modules.lmk.domain.query.StorePrizeProofQuery; +import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑 Mapper 鎺ュ彛 + * + * @author peng + * @since 2025-09-30 + */ +@Mapper +public interface StorePrizeProofMapper extends BaseMapper<StorePrizeProof> { + + /** + * id鏌ユ壘鎶藉娲诲姩琛ュ綍璇佹槑 + * @param id + * @return + */ + StorePrizeProofVO getById(String id); + + /** + * 鍒嗛〉 + */ + IPage getPage(IPage page, @Param("query") StorePrizeProofQuery query); + +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java index 671ffb5..5012630 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/ActionRecordService.java @@ -5,6 +5,9 @@ import cn.lili.base.Result; import cn.lili.modules.lmk.domain.form.ActionRecordForm; import cn.lili.modules.lmk.domain.query.ActionRecordQuery; + +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.List; /** @@ -64,4 +67,6 @@ Result all(); Result grantSessionId(); + + BigDecimal getToDayStayTime(String userId , LocalDateTime begin , LocalDateTime end); } diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/PrizeClaimRecordService.java b/framework/src/main/java/cn/lili/modules/lmk/service/PrizeClaimRecordService.java new file mode 100644 index 0000000..179988f --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/PrizeClaimRecordService.java @@ -0,0 +1,65 @@ +package cn.lili.modules.lmk.service; + +import cn.lili.modules.lmk.domain.entity.PrizeClaimRecord; +import com.baomidou.mybatisplus.extension.service.IService; +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.form.PrizeClaimRecordForm; +import cn.lili.modules.lmk.domain.query.PrizeClaimRecordQuery; +import java.util.List; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛� 鏈嶅姟绫� + * + * @author peng + * @since 2025-09-30 + */ +public interface PrizeClaimRecordService extends IService<PrizeClaimRecord> { + + /** + * 娣诲姞 + * @param form + * @return + */ + Result add(PrizeClaimRecordForm form); + + /** + * 淇敼 + * @param form + * @return + */ + Result update(PrizeClaimRecordForm form); + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + Result remove(List<String> ids); + + /** + * id鍒犻櫎 + * @param id + * @return + */ + Result removeById(String id); + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + Result page(PrizeClaimRecordQuery query); + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + Result detail(String id); + + /** + * 鍒楄〃 + * @return + */ + Result all(); +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/ScanPrizeService.java b/framework/src/main/java/cn/lili/modules/lmk/service/ScanPrizeService.java new file mode 100644 index 0000000..925e543 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/ScanPrizeService.java @@ -0,0 +1,69 @@ +package cn.lili.modules.lmk.service; + +import cn.lili.modules.lmk.domain.entity.ScanPrize; +import com.baomidou.mybatisplus.extension.service.IService; +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.form.ScanPrizeForm; +import cn.lili.modules.lmk.domain.query.ScanPrizeQuery; +import java.util.List; + +/** + * 搴楅摵娲诲姩鍏宠仈 鏈嶅姟绫� + * + * @author peng + * @since 2025-09-30 + */ +public interface ScanPrizeService extends IService<ScanPrize> { + + /** + * 娣诲姞 + * @param form + * @return + */ + Result add(ScanPrizeForm form); + + /** + * 淇敼 + * @param form + * @return + */ + Result update(ScanPrizeForm form); + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + Result remove(List<String> ids); + + /** + * id鍒犻櫎 + * @param id + * @return + */ + Result removeById(String id); + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + Result page(ScanPrizeQuery query); + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + Result detail(String id); + + /** + * 鍒楄〃 + * @return + */ + Result all(); + + Result changeStatus(String id); + + Result generateStorePrize(String id); +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/StorePrizeProofService.java b/framework/src/main/java/cn/lili/modules/lmk/service/StorePrizeProofService.java new file mode 100644 index 0000000..a2b2f3b --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/StorePrizeProofService.java @@ -0,0 +1,65 @@ +package cn.lili.modules.lmk.service; + +import cn.lili.modules.lmk.domain.entity.StorePrizeProof; +import com.baomidou.mybatisplus.extension.service.IService; +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.form.StorePrizeProofForm; +import cn.lili.modules.lmk.domain.query.StorePrizeProofQuery; +import java.util.List; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑 鏈嶅姟绫� + * + * @author peng + * @since 2025-09-30 + */ +public interface StorePrizeProofService extends IService<StorePrizeProof> { + + /** + * 娣诲姞 + * @param form + * @return + */ + Result add(StorePrizeProofForm form); + + /** + * 淇敼 + * @param form + * @return + */ + Result update(StorePrizeProofForm form); + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + Result remove(List<String> ids); + + /** + * id鍒犻櫎 + * @param id + * @return + */ + Result removeById(String id); + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + Result page(StorePrizeProofQuery query); + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + Result detail(String id); + + /** + * 鍒楄〃 + * @return + */ + Result all(); +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java index e5c2a71..36ea39d 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ActionRecordServiceImpl.java @@ -19,6 +19,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.util.Assert; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @@ -140,4 +141,9 @@ } return Result.ok().data(IdWorker.getIdStr()); } + + @Override + public BigDecimal getToDayStayTime(String userId, LocalDateTime begin , LocalDateTime end) { + return baseMapper.getToDayStayTime(userId,begin,end); + } } \ No newline at end of file diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeClaimRecordServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeClaimRecordServiceImpl.java new file mode 100644 index 0000000..eb80535 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeClaimRecordServiceImpl.java @@ -0,0 +1,119 @@ +package cn.lili.modules.lmk.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.lili.modules.lmk.domain.entity.PrizeClaimRecord; +import cn.lili.modules.lmk.mapper.PrizeClaimRecordMapper; +import cn.lili.modules.lmk.service.PrizeClaimRecordService; +import cn.lili.base.Result; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.lili.modules.lmk.domain.form.PrizeClaimRecordForm; +import cn.lili.modules.lmk.domain.vo.PrizeClaimRecordVO; +import cn.lili.modules.lmk.domain.query.PrizeClaimRecordQuery; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import cn.lili.utils.PageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 搴楅摵鎶藉娲诲姩棰嗗彇琛� 鏈嶅姟瀹炵幇绫� + * + * @author peng + * @since 2025-09-30 + */ +@Service +@RequiredArgsConstructor +public class PrizeClaimRecordServiceImpl extends ServiceImpl<PrizeClaimRecordMapper, PrizeClaimRecord> implements PrizeClaimRecordService { + + private final PrizeClaimRecordMapper prizeClaimRecordMapper; + + /** + * 娣诲姞 + * @param form + * @return + */ + @Override + public Result add(PrizeClaimRecordForm form) { + PrizeClaimRecord entity = PrizeClaimRecordForm.getEntityByForm(form, null); + baseMapper.insert(entity); + return Result.ok("娣诲姞鎴愬姛"); + } + + /** + * 淇敼 + * @param form + * @return + */ + @Override + public Result update(PrizeClaimRecordForm form) { + PrizeClaimRecord entity = baseMapper.selectById(form.getId()); + + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + BeanUtils.copyProperties(form, entity); + baseMapper.updateById(entity); + return Result.ok("淇敼鎴愬姛"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @Override + public Result remove(List<String> ids) { + baseMapper.deleteBatchIds(ids); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * id鍒犻櫎 + * @param id + * @return + */ + @Override + public Result removeById(String id) { + baseMapper.deleteById(id); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + @Override + public Result page(PrizeClaimRecordQuery query) { + IPage<PrizeClaimRecordVO> page = PageUtil.getPage(query, PrizeClaimRecordVO.class); + baseMapper.getPage(page, query); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + @Override + public Result detail(String id) { + PrizeClaimRecordVO vo = baseMapper.getById(id); + Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); + return Result.ok().data(vo); + } + + /** + * 鍒楄〃 + * @return + */ + @Override + public Result all() { + List<PrizeClaimRecord> entities = baseMapper.selectList(null); + List<PrizeClaimRecordVO> vos = entities.stream() + .map(entity -> PrizeClaimRecordVO.getVoByEntity(entity, null)) + .collect(Collectors.toList()); + return Result.ok().data(vos); + } +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java index b550cc6..5a03622 100644 --- a/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/PrizeServiceImpl.java @@ -16,6 +16,8 @@ import cn.lili.modules.lmk.domain.vo.PrizeResultVO; import cn.lili.modules.lmk.enums.general.*; import cn.lili.modules.lmk.service.*; +import cn.lili.modules.member.entity.dos.Member; +import cn.lili.modules.member.service.MemberService; import cn.lili.modules.order.order.entity.dos.Order; import cn.lili.modules.order.order.service.OrderService; import cn.lili.modules.promotion.entity.dos.Coupon; @@ -74,6 +76,9 @@ private final ShareActionService shareActionService; private final AddNumCheekService addNumCheekService; private final OrderService orderService; + private final MemberService memberService; + private final VideoService videoService; + private final VideoAuditRecordService videoAuditRecordService; @Override @Transactional(rollbackFor = Exception.class) @@ -548,6 +553,37 @@ addPrizeNumForm.setUserId(currentUser.getId()); } + String extend = addPrizeNumForm.getExtend(); + JSONObject jsonObject = JSONObject.parseObject(extend); + String shareId =null; + if (jsonObject != null) { + shareId = jsonObject.getString("shareId"); + } + Date date = new Date(); + ShareAction shareAction =null; + //鍒嗕韩杩涙潵鐨勯渶瑕佹坊鍔犲垎浜殑鐢ㄦ埛 + if (StringUtils.isNotBlank(shareId)) { + shareAction = shareActionService.getById(shareId); + String userId = shareAction.getUserId(); + addPrizeNumForm.setUserId(userId); + Date createTime = shareAction.getCreateTime(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(createTime); // 灏咲ate璁剧疆鍒癈alendar涓� + calendar.add(Calendar.DAY_OF_MONTH, 1); // 鍔犱竴澶� + Date nextDay = calendar.getTime(); + //鍒ゆ柇鏄惁鏄柊鐢ㄦ埛 + if (nextDay.before(date)) { + //褰撳墠鍒嗕韩涓嶆槸浠婂ぉ鐨勫垎浜� + log.info("褰撳墠鍒嗕韩涓嶆槸浠婂ぉ鐨勫垎浜珄}",shareId); + return Result.ok().data(0); + } + if (currentUser.getId().equals(userId)) { + //鍒嗕韩鐨勭敤鎴疯嚜宸辩偣鍑讳簡 + log.info("鐢ㄦ埛鑷繁鐐瑰嚮浜嗚嚜宸辩殑鍒嗕韩"); + return Result.ok().data(0); + } + } + String userId = addPrizeNumForm.getUserId(); RLock lock = redissonClient.getLock(PRIZE_ADD_NUM + userId); try { @@ -560,7 +596,6 @@ if (!PrizeActivityStatusEnum.ON.name().equals(activity.getEnableStatus())) { throw new ServiceException("褰撳墠娲诲姩娌″紑鍚�"); } - Date date = new Date(); //娲诲姩缁撴潫涓嶉渶瑕佹坊鍔� if (date.after(activity.getEndTime())) { throw new ServiceException("褰撳墠娲诲姩宸茬粨鏉�"); @@ -595,8 +630,6 @@ break; } } - String extend = addPrizeNumForm.getExtend(); - JSONObject jsonObject = JSONObject.parseObject(extend); LambdaQueryWrapper<AddNumCheek> query = Wrappers.lambdaQuery(); AddNumCheek addNumCheek = null; String orderSn = null; @@ -604,9 +637,8 @@ String ruleValue = null; switch (actionEnum) { case SHARE_GOODS_VIDEO: - String shareId = jsonObject.getString("shareId"); - ShareAction shareAction = shareActionService.getById(shareId); if (shareAction == null) { + log.info("褰撳墠鐢ㄦ埛娌℃湁鍒嗕韩{}",userId); return Result.ok().data(0); } if (addFlag) { @@ -615,17 +647,32 @@ } break; case SHARE_USER_REGISTRY: - String memberId = jsonObject.getString("memberId"); + if (shareAction == null) { + log.info("褰撳墠鐢ㄦ埛娌℃湁鍒嗕韩{}",userId); + return Result.ok().data(0); + } + Member member = memberService.getById(shareAction.getUserId()); + Date createTime = member.getCreateTime(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(createTime); // 灏咲ate璁剧疆鍒癈alendar涓� + calendar.add(Calendar.DAY_OF_MONTH, 1); // 鍔犱竴澶� + Date nextDay = calendar.getTime(); + //鍒ゆ柇鏄惁鏄柊鐢ㄦ埛 + if (nextDay.before(date)) { + //褰撳墠鐢ㄦ埛涓嶆槸鏂扮敤鎴� + log.info("褰撳墠鐢ㄦ埛涓嶆槸鏂扮敤鎴穥}",currentUser.getId()); + return Result.ok().data(0); + } query.eq(AddNumCheek::getType, PrizeUserActionEnum.SHARE_USER_REGISTRY.name()) - .eq(AddNumCheek::getCheckNo, memberId); + .eq(AddNumCheek::getCheckNo, currentUser.getId()); if (addNumCheekService.getOne(query) != null) { - log.info("褰撳墠鐢ㄦ埛宸茬粡琚個璇疯繃浜�----------------->{}", memberId); + log.info("褰撳墠鐢ㄦ埛宸茬粡琚個璇疯繃浜�----------------->{}", currentUser.getId()); return Result.ok().data(0); } addNumCheek = new AddNumCheek(); addNumCheek.setType(PrizeUserActionEnum.SHARE_USER_REGISTRY.name()); addNumCheek.setUserId(userId); - addNumCheek.setCheckNo(memberId); + addNumCheek.setCheckNo(currentUser.getId()); addNumCheekService.save(addNumCheek); break; case SHARE_USER_SHOPPING: @@ -649,11 +696,18 @@ addNumCheekService.save(addNumCheek); break; case USER_STAY_TIME: - //todo 閫氳繃鐢ㄦ埛琛屼负鍒嗘瀽鑾峰彇鏁版嵁杩涜鍒ゆ柇 - ruleValue = addPrizeRule.getRuleValue(); - if (addFlag) { log.info("褰撳墠鐢ㄦ埛褰撳ぉ宸茬粡娣诲姞杩囦簡鍋滅暀鏃堕棿娣诲姞娆℃暟浜�-------->{}", userId); + return Result.ok().data(0); + } + ruleValue = addPrizeRule.getRuleValue(); + LocalDate now = LocalDate.now(); + LocalDateTime begin = LocalDateTime.of(now, LocalTime.MIN); + LocalDateTime end = LocalDateTime.of(now, LocalTime.MAX); + BigDecimal toDayStayTime = actionRecordService.getToDayStayTime(currentUser.getId(), begin, end); + BigDecimal divide = toDayStayTime.divide(new BigDecimal(60), 2, RoundingMode.HALF_UP); + if (divide.compareTo(new BigDecimal(ruleValue)) < 0) { + log.info("褰撳墠鐢ㄦ埛鍋滅暀鏃堕棿涓嶈冻鏃犳硶澧炲姞娆℃暟"); return Result.ok().data(0); } break; @@ -707,7 +761,36 @@ case USER_SCAN_STORE: break; case USER_PUBLISH_EXAMINE: - + String videoId = jsonObject.getString("videoId"); + query.eq(AddNumCheek::getType, PrizeUserActionEnum.USER_PUBLISH_EXAMINE.name()) + .eq(AddNumCheek::getCheckNo, videoId); + if (addNumCheekService.getOne(query) != null) { + log.info("褰撳墠瑙嗛瀹℃牳宸茬粡鍙戞斁杩囦簡----------------->{}", videoId); + return Result.ok().data(0); + } + Video video = videoService.getById(videoId); + if (video == null) { + log.info("褰撳墠瑙嗛涓嶅瓨鍦▄}",videoId); + return Result.ok().data(0); + } + String status = video.getStatus(); + if (!"1".equals(status)) { + log.info("褰撳墠瑙嗛娌℃湁瀹℃牳閫氳繃{}",videoId); + return Result.ok().data(0); + } + LambdaQueryWrapper<VideoAuditRecord> eq = Wrappers.<VideoAuditRecord>lambdaQuery() + .eq(VideoAuditRecord::getVideoId, videoId) + .eq(VideoAuditRecord::getAuditSuccess, true); + List<VideoAuditRecord> list = videoAuditRecordService.list(eq); + if (list.isEmpty()) { + log.info("褰撳墠瑙嗛娌℃湁瀹℃牳閫氳繃{}",videoId); + return Result.ok().data(0); + } + addNumCheek = new AddNumCheek(); + addNumCheek.setType(PrizeUserActionEnum.USER_PUBLISH_EXAMINE.name()); + addNumCheek.setUserId(userId); + addNumCheek.setCheckNo(videoId); + addNumCheekService.save(addNumCheek); break; default: return Result.ok().data(0); diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/ScanPrizeServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ScanPrizeServiceImpl.java new file mode 100644 index 0000000..9e55bd0 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/ScanPrizeServiceImpl.java @@ -0,0 +1,218 @@ +package cn.lili.modules.lmk.service.impl; + +import cn.lili.common.exception.ServiceException; +import cn.lili.modules.lmk.domain.entity.PrizeClaimRecord; +import cn.lili.modules.lmk.domain.entity.StoreCoupon; +import cn.lili.modules.lmk.domain.entity.StoreCouponSingle; +import cn.lili.modules.lmk.enums.general.*; +import cn.lili.modules.lmk.service.PrizeClaimRecordService; +import cn.lili.modules.order.order.entity.enums.ClaimStatusEnum; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.lili.modules.lmk.domain.entity.ScanPrize; +import cn.lili.modules.lmk.mapper.ScanPrizeMapper; +import cn.lili.modules.lmk.service.ScanPrizeService; +import cn.lili.base.Result; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.lili.modules.lmk.domain.form.ScanPrizeForm; +import cn.lili.modules.lmk.domain.vo.ScanPrizeVO; +import cn.lili.modules.lmk.domain.query.ScanPrizeQuery; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import cn.lili.utils.PageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; +import org.springframework.util.Assert; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 搴楅摵娲诲姩鍏宠仈 鏈嶅姟瀹炵幇绫� + * + * @author peng + * @since 2025-09-30 + */ +@Service +@RequiredArgsConstructor +public class ScanPrizeServiceImpl extends ServiceImpl<ScanPrizeMapper, ScanPrize> implements ScanPrizeService { + + private final ScanPrizeMapper scanPrizeMapper; + private final RedissonClient redissonClient; + private static final String STORE_PRIZE_GENERATE = "store_prize_generate:"; + private final PrizeClaimRecordService prizeClaimRecordService; + + /** + * 娣诲姞 + * @param form + * @return + */ + @Override + public Result add(ScanPrizeForm form) { + ScanPrize entity = ScanPrizeForm.getEntityByForm(form, null); + entity.setStatus(StoreScanPrizeStausEnum.ENABLE.name()); + entity.setGenerateStatus(GenerateStorePrizeStausEnum.NOT_GENERATE.name()); + entity.setClaimNum(0); + baseMapper.insert(entity); + return Result.ok("娣诲姞鎴愬姛"); + } + + /** + * 淇敼 + * @param form + * @return + */ + @Override + public Result update(ScanPrizeForm form) { + ScanPrize entity = baseMapper.selectById(form.getId()); + + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + BeanUtils.copyProperties(form, entity); + baseMapper.updateById(entity); + return Result.ok("淇敼鎴愬姛"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @Override + public Result remove(List<String> ids) { + baseMapper.deleteBatchIds(ids); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * id鍒犻櫎 + * @param id + * @return + */ + @Override + public Result removeById(String id) { + baseMapper.deleteById(id); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + @Override + public Result page(ScanPrizeQuery query) { + IPage<ScanPrizeVO> page = PageUtil.getPage(query, ScanPrizeVO.class); + baseMapper.getPage(page, query); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + @Override + public Result detail(String id) { + ScanPrizeVO vo = baseMapper.getById(id); + Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); + return Result.ok().data(vo); + } + + /** + * 鍒楄〃 + * @return + */ + @Override + public Result all() { + List<ScanPrize> entities = baseMapper.selectList(null); + List<ScanPrizeVO> vos = entities.stream() + .map(entity -> ScanPrizeVO.getVoByEntity(entity, null)) + .collect(Collectors.toList()); + return Result.ok().data(vos); + } + + @Override + public Result changeStatus(String id) { + ScanPrize scanPrize = this.getById(id); + if (scanPrize == null) { + throw new ServiceException("褰撳墠搴楅摵鎶藉鏈轰細涓嶅瓨鍦�"); + } + String status = scanPrize.getStatus(); + if (StoreCouponStausEnum.ENABLE.name().equals(status)) { + scanPrize.setStatus(StoreCouponStausEnum.DISABLE.name()); + }else if (StoreCouponStausEnum.DISABLE.name().equals(status)) { + scanPrize.setStatus(StoreCouponStausEnum.ENABLE.name()); + }else { + throw new ServiceException("褰撳墠搴楅摵鎶藉鏈轰細鐘舵�佸紓甯告棤娉曚慨鏀�"); + } + this.updateById(scanPrize); + return Result.ok(); + } + + @Override + public Result generateStorePrize(String id) { + + RLock redissonLock = redissonClient.getLock(STORE_PRIZE_GENERATE + id); + try { + redissonLock.lock(); + LambdaQueryWrapper<ScanPrize> forUpdate = Wrappers.<ScanPrize>lambdaQuery().eq(ScanPrize::getId, id).last("FOR UPDATE"); + ScanPrize scanPrize = this.getOne(forUpdate); + if (scanPrize == null) { + throw new ServiceException("褰撳墠搴楅摵鎶藉鏈轰細涓嶅瓨鍦ㄦ棤娉曠敓鎴�"); + } + if (!GenerateCouponStausEnum.NOT_GENERATE.name().equals( scanPrize.getGenerateStatus())) { + throw new ServiceException("褰撳墠搴楅摵鎶藉鏈轰細鐘舵�佸紓甯告棤娉曠敓鎴�"); + } + //鐢熸垚浼樻儬鍗� + Integer generateNum = scanPrize.getGenerateNum(); + if (generateNum == null) { + throw new ServiceException("鍙戣鏁伴噺涓虹┖涓嶈兘鐢熸垚"); + } + List<PrizeClaimRecord> prizeClaimRecords = new ArrayList<>(); + for (int i = 1; i <= generateNum; i++) { + PrizeClaimRecord prizeClaimRecord = getStoreCouponSingle(scanPrize, i); + prizeClaimRecords.add(prizeClaimRecord); + } + if (!prizeClaimRecords.isEmpty()) { + prizeClaimRecordService.saveBatch(prizeClaimRecords); + } + //鏇存柊鐘舵�佺敓鎴愮姸鎬� + scanPrize.setGenerateStatus(GenerateCouponStausEnum.GENERATE.name()); + this.updateById(scanPrize); + return Result.ok(); + }finally { + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + if (redissonLock.isHeldByCurrentThread()) { + redissonLock.unlock(); + } + } + @Override + public void afterCompletion(int status) { + if (redissonLock.isHeldByCurrentThread()) { + redissonLock.unlock(); + } + } + }); + } + } + private static PrizeClaimRecord getStoreCouponSingle(ScanPrize scanPrize, int i) { + PrizeClaimRecord prizeClaimRecord = new PrizeClaimRecord(); + prizeClaimRecord.setStorePrizeId(scanPrize.getId()); + prizeClaimRecord.setStoreId(scanPrize.getStoreId()); + prizeClaimRecord.setStoreName(scanPrize.getStoreName()); + prizeClaimRecord.setPrizeActivityId(scanPrize.getPrizeActivityId()); + prizeClaimRecord.setPrizeActivityName(scanPrize.getPrizeActivityNmae()); + prizeClaimRecord.setClaimStatus(ClaimStatusEnum.NOT_CLAIM.name()); + prizeClaimRecord.setNo(String.format("%08d", i)); + prizeClaimRecord.setMaterial(MaterialStatusEnum.NOT_GENERATE.name()); + return prizeClaimRecord; + } +} diff --git a/framework/src/main/java/cn/lili/modules/lmk/service/impl/StorePrizeProofServiceImpl.java b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StorePrizeProofServiceImpl.java new file mode 100644 index 0000000..4c55b59 --- /dev/null +++ b/framework/src/main/java/cn/lili/modules/lmk/service/impl/StorePrizeProofServiceImpl.java @@ -0,0 +1,119 @@ +package cn.lili.modules.lmk.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import cn.lili.modules.lmk.domain.entity.StorePrizeProof; +import cn.lili.modules.lmk.mapper.StorePrizeProofMapper; +import cn.lili.modules.lmk.service.StorePrizeProofService; +import cn.lili.base.Result; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.lili.modules.lmk.domain.form.StorePrizeProofForm; +import cn.lili.modules.lmk.domain.vo.StorePrizeProofVO; +import cn.lili.modules.lmk.domain.query.StorePrizeProofQuery; +import org.springframework.stereotype.Service; +import lombok.RequiredArgsConstructor; +import cn.lili.utils.PageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.util.Assert; + +import java.util.List; +import java.util.stream.Collectors; + +/** + * 鎶藉娲诲姩琛ュ綍璇佹槑 鏈嶅姟瀹炵幇绫� + * + * @author peng + * @since 2025-09-30 + */ +@Service +@RequiredArgsConstructor +public class StorePrizeProofServiceImpl extends ServiceImpl<StorePrizeProofMapper, StorePrizeProof> implements StorePrizeProofService { + + private final StorePrizeProofMapper storePrizeProofMapper; + + /** + * 娣诲姞 + * @param form + * @return + */ + @Override + public Result add(StorePrizeProofForm form) { + StorePrizeProof entity = StorePrizeProofForm.getEntityByForm(form, null); + baseMapper.insert(entity); + return Result.ok("娣诲姞鎴愬姛"); + } + + /** + * 淇敼 + * @param form + * @return + */ + @Override + public Result update(StorePrizeProofForm form) { + StorePrizeProof entity = baseMapper.selectById(form.getId()); + + // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊 + Assert.notNull(entity, "璁板綍涓嶅瓨鍦�"); + BeanUtils.copyProperties(form, entity); + baseMapper.updateById(entity); + return Result.ok("淇敼鎴愬姛"); + } + + /** + * 鎵归噺鍒犻櫎 + * @param ids + * @return + */ + @Override + public Result remove(List<String> ids) { + baseMapper.deleteBatchIds(ids); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * id鍒犻櫎 + * @param id + * @return + */ + @Override + public Result removeById(String id) { + baseMapper.deleteById(id); + return Result.ok("鍒犻櫎鎴愬姛"); + } + + /** + * 鍒嗛〉鏌ヨ + * @param query + * @return + */ + @Override + public Result page(StorePrizeProofQuery query) { + IPage<StorePrizeProofVO> page = PageUtil.getPage(query, StorePrizeProofVO.class); + baseMapper.getPage(page, query); + return Result.ok().data(page.getRecords()).total(page.getTotal()); + } + + /** + * 鏍规嵁id鏌ユ壘 + * @param id + * @return + */ + @Override + public Result detail(String id) { + StorePrizeProofVO vo = baseMapper.getById(id); + Assert.notNull(vo, "璁板綍涓嶅瓨鍦�"); + return Result.ok().data(vo); + } + + /** + * 鍒楄〃 + * @return + */ + @Override + public Result all() { + List<StorePrizeProof> entities = baseMapper.selectList(null); + List<StorePrizeProofVO> vos = entities.stream() + .map(entity -> StorePrizeProofVO.getVoByEntity(entity, null)) + .collect(Collectors.toList()); + return Result.ok().data(vos); + } +} diff --git a/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml b/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml index 19b542e..12fd549 100644 --- a/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml +++ b/framework/src/main/resources/mapper/lmk/ActionRecordMapper.xml @@ -65,4 +65,25 @@ LAR.delete_flag = 0 </select> + <select id="getToDayStayTime" resultType="decimal"> + SELECT SUM(t.stay_seconds) + FROM (SELECT user_id, + page_code, + session_id, + MIN(CASE WHEN page_status = 'JOIN' THEN start_time END) AS enter_time, + MIN(CASE WHEN page_status = 'LEAVE' THEN start_time END) AS leave_time, + TIMESTAMPDIFF(SECOND, MIN(CASE WHEN page_status = 'JOIN' THEN start_time END), + MIN(CASE WHEN page_status = 'LEAVE' THEN start_time END) + ) AS stay_seconds + FROM lmk_action_record + WHERE action_type = 'PAGE' + AND page_status IN ('JOIN', 'LEAVE') + AND user_id = #{userId} + AND create_time BETWEEN #{begin} AND #{end} + GROUP BY user_id, page_code, session_id + HAVING enter_time IS NOT NULL + AND leave_time IS NOT NULL + ORDER BY user_id, session_id, enter_time) t + </select> + </mapper> diff --git a/framework/src/main/resources/mapper/lmk/PrizeClaimRecordMapper.xml b/framework/src/main/resources/mapper/lmk/PrizeClaimRecordMapper.xml new file mode 100644 index 0000000..31743ee --- /dev/null +++ b/framework/src/main/resources/mapper/lmk/PrizeClaimRecordMapper.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.lili.modules.lmk.mapper.PrizeClaimRecordMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.PrizeClaimRecordVO"> + <id column="id" property="id"/> + <result column="no" property="no" /> + <result column="store_id" property="storeId" /> + <result column="store_name" property="storeName" /> + <result column="prize_activity_id" property="prizeActivityId" /> + <result column="prize_activity_name" property="prizeActivityName" /> + <result column="user_id" property="userId" /> + <result column="nick_name" property="nickName" /> + <result column="claim_status" property="claimStatus" /> + </resultMap> + + + + + + + + <select id="getById" resultMap="BaseResultMap"> + SELECT + LPCR.no, + LPCR.store_id, + LPCR.store_name, + LPCR.prize_activity_id, + LPCR.prize_activity_name, + LPCR.user_id, + LPCR.nick_name, + LPCR.claim_status, + LPCR.id + FROM + lmk_prize_claim_record LPCR + WHERE + LPCR.id = #{id} AND LPCR.delete_flag = 0 + </select> + + + <select id="getPage" resultMap="BaseResultMap"> + SELECT + LPCR.no, + LPCR.store_id, + LPCR.store_name, + LPCR.prize_activity_id, + LPCR.prize_activity_name, + LPCR.user_id, + LPCR.nick_name, + LPCR.claim_status, + LPCR.id + FROM + lmk_prize_claim_record LPCR + WHERE + LPCR.delete_flag = 0 + </select> + +</mapper> diff --git a/framework/src/main/resources/mapper/lmk/ScanPrizeMapper.xml b/framework/src/main/resources/mapper/lmk/ScanPrizeMapper.xml new file mode 100644 index 0000000..3ddcba9 --- /dev/null +++ b/framework/src/main/resources/mapper/lmk/ScanPrizeMapper.xml @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.lili.modules.lmk.mapper.ScanPrizeMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.ScanPrizeVO"> + <id column="id" property="id"/> + <result column="store_id" property="storeId" /> + <result column="store_name" property="storeName" /> + <result column="prize_activity_id" property="prizeActivityId" /> + <result column="prize_activity_nmae" property="prizeActivityNmae" /> + <result column="generate_status" property="generateStatus" /> + <result column="generate_num" property="generateNum" /> + <result column="claim_num" property="claimNum" /> + <result column="status" property="status" /> + </resultMap> + + + + + + + + <select id="getById" resultMap="BaseResultMap"> + SELECT + LSP.store_id, + LSP.store_name, + LSP.prize_activity_id, + LSP.prize_activity_nmae, + LSP.generate_status, + LSP.generate_num, + LSP.claim_num, + LSP.status, + LSP.id + FROM + lmk_scan_prize LSP + WHERE + LSP.id = #{id} AND LSP.delete_flag = 0 + </select> + + + <select id="getPage" resultMap="BaseResultMap"> + SELECT + LSP.store_id, + LSP.store_name, + LSP.prize_activity_id, + LSP.prize_activity_nmae, + LSP.generate_status, + LSP.generate_num, + LSP.claim_num, + LSP.status, + LSP.id + FROM + lmk_scan_prize LSP + WHERE + LSP.delete_flag = 0 + </select> + +</mapper> diff --git a/framework/src/main/resources/mapper/lmk/StorePrizeProofMapper.xml b/framework/src/main/resources/mapper/lmk/StorePrizeProofMapper.xml new file mode 100644 index 0000000..fcc03f2 --- /dev/null +++ b/framework/src/main/resources/mapper/lmk/StorePrizeProofMapper.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="cn.lili.modules.lmk.mapper.StorePrizeProofMapper"> + + <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 --> + <resultMap id="BaseResultMap" type="cn.lili.modules.lmk.domain.vo.StorePrizeProofVO"> + <id column="id" property="id"/> + <result column="store_prize_claim_id" property="storePrizeClaimId" /> + <result column="url_path" property="urlPath" /> + </resultMap> + + + + + + + + <select id="getById" resultMap="BaseResultMap"> + SELECT + LSPP.store_prize_claim_id, + LSPP.url_path, + LSPP.id + FROM + lmk_store_prize_proof LSPP + WHERE + LSPP.id = #{id} AND LSPP.delete_flag = 0 + </select> + + + <select id="getPage" resultMap="BaseResultMap"> + SELECT + LSPP.store_prize_claim_id, + LSPP.url_path, + LSPP.id + FROM + lmk_store_prize_proof LSPP + WHERE + LSPP.delete_flag = 0 + </select> + +</mapper> diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java b/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java index 4448ec2..d65c86d 100644 --- a/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java +++ b/manager-api/src/main/java/cn/lili/controller/lmk/PrizeActivityController.java @@ -5,10 +5,12 @@ import cn.lili.cache.Cache; import cn.lili.common.security.context.UserContext; import cn.lili.modules.lmk.domain.form.ActivityRefPrizeForm; +import cn.lili.modules.lmk.domain.form.AddPrizeNumForm; import cn.lili.modules.lmk.domain.form.PrizeActivityForm; import cn.lili.modules.lmk.domain.query.PrizeActivityQuery; import cn.lili.modules.lmk.service.ActivityRefPrizeService; import cn.lili.modules.lmk.service.PrizeActivityService; +import cn.lili.modules.lmk.service.PrizeService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -35,6 +37,8 @@ private final PrizeActivityService prizeActivityService; private final ActivityRefPrizeService activityRefPrizeService; + + private final PrizeService prizeService; @@ -78,4 +82,15 @@ public Result publishPrizeActivity(@PathVariable("id") String id){ return prizeActivityService.publishPrizeActivity(id); } + + /** + * 澧炲姞鎶藉娆℃暟 + * + * @param addPrizeNumForm + * @return + */ + @PostMapping("/addPrizeNum") + public Result addPrizeNum( @RequestBody AddPrizeNumForm addPrizeNumForm) { + return prizeService.addPrizeNum(addPrizeNumForm); + } } diff --git a/manager-api/src/main/java/cn/lili/controller/lmk/ScanPrizeController.java b/manager-api/src/main/java/cn/lili/controller/lmk/ScanPrizeController.java new file mode 100644 index 0000000..1bd0e02 --- /dev/null +++ b/manager-api/src/main/java/cn/lili/controller/lmk/ScanPrizeController.java @@ -0,0 +1,98 @@ +package cn.lili.controller.lmk; + +import cn.lili.group.Update; +import cn.lili.group.Add; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import lombok.RequiredArgsConstructor; +import java.util.List; +import org.springframework.validation.annotation.Validated; +import javax.validation.constraints.NotEmpty; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import cn.lili.modules.lmk.service.ScanPrizeService; +import cn.lili.base.Result; +import cn.lili.modules.lmk.domain.form.ScanPrizeForm; +import cn.lili.modules.lmk.domain.query.ScanPrizeQuery; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * 搴楅摵娲诲姩鍏宠仈 鍓嶇鎺у埗鍣� + * + * @author peng + * @since 2025-09-30 + */ +@Validated +@RequiredArgsConstructor +@Api(value = "搴楅摵娲诲姩鍏宠仈", tags = "搴楅摵娲诲姩鍏宠仈绠$悊") +@RestController +@RequestMapping("/manager/lmk/scan-prize") +public class ScanPrizeController { + + private final ScanPrizeService scanPrizeService; + + + @PutMapping + @ApiOperation(value = "淇敼", notes = "淇敼") + public Result update(@RequestBody @Validated(Update.class) ScanPrizeForm form) { + return scanPrizeService.update(form); + } + + @DeleteMapping("/{id}") + @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎") + public Result removeById(@PathVariable("id") String id) { + return scanPrizeService.removeById(id); + } + + @DeleteMapping("/batch") + @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎") + public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) { + return scanPrizeService.remove(ids); + } + + @GetMapping("/page") + @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉") + public Result page(ScanPrizeQuery query) { + return scanPrizeService.page(query); + } + + @GetMapping("/{id}") + @ApiOperation(value = "璇︽儏", notes = "璇︽儏") + public Result detail(@PathVariable("id") String id) { + return scanPrizeService.detail(id); + } + + @GetMapping("/list") + @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃") + public Result list() { + return scanPrizeService.all(); + } + + + @PostMapping + @ApiOperation(value = "娣诲姞", notes = "娣诲姞") + public Result add(@RequestBody @Validated(Add.class) ScanPrizeForm form) { + return scanPrizeService.add(form); + } + + /** + * 淇敼璁㈠崟搴楅摵鎶藉鏈轰細鐘舵�� + * @param id + * @return + */ + @PostMapping("/changeStatus/{id}") + public Result changeStatus(@PathVariable String id){ + return scanPrizeService.changeStatus(id); + } + + /** + * 鏍规嵁搴楅摵鍏宠仈鍏崇郴鐢熸垚鍗曞搧 + * @param id + * @return + */ + @PostMapping("/generateStorePrize/{id}") + public Result generateStorePrize(@PathVariable String id){ + return scanPrizeService.generateStorePrize(id); + } +} -- Gitblit v1.8.0