From d7b8bfefa75d90b56182478032551646c7526a9d Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Wed, 19 Feb 2025 05:48:10 +0800 Subject: [PATCH 1/6] //offline --- .../db/migration/V202501000000001.sql | 64 ++++ .../po/WxOfflineActivityAwardsModel.java | 83 +++++ .../po/WxOfflineActivityGrantCashBack.java | 6 - .../po/WxOfflineActivityGrantItemRecord.java | 43 +++ .../domain/po/WxOfflineActivityItem.java | 37 +- .../domain/po/WxOfflineActivityRecord.java | 2 + .../EnumOfflineActivityAwardsModeType.java | 37 ++ .../EnumOfflineActivityCalculationMode.java | 74 ++-- .../enums/EnumOfflineActivityCountMode.java | 37 ++ .../enums/EnumOfflineActivityMode.java | 38 ++ .../WxOfflineActivityAwardsModelMapper.java | 28 ++ ...xOfflineActivityGrantItemRecordMapper.java | 25 ++ .../WxOfflineActivityAwardsModelService.java | 21 ++ ...OfflineActivityGrantItemRecordService.java | 13 + ...xOfflineActivityAwardsItemServiceImpl.java | 1 + ...OfflineActivityAwardsModelServiceImpl.java | 82 ++++ ...xOfflineActivityGrantAwardServiceImpl.java | 352 ++++++++++++------ ...ineActivityGrantItemRecordServiceImpl.java | 53 +++ .../WxOfflineActivityItemServiceImpl.java | 16 +- .../WxOfflineActivityRecordServiceImpl.java | 5 + .../WxOfflineActivityAwardsModelMapper.xml | 79 ++++ .../WxOfflineActivityGrantCashBackMapper.xml | 5 +- ...WxOfflineActivityGrantItemRecordMapper.xml | 33 ++ .../mapper/WxOfflineActivityItemMapper.xml | 10 +- 24 files changed, 969 insertions(+), 175 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsModel.java create mode 100644 mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItemRecord.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsModeType.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCountMode.java create mode 100644 mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMode.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsModelMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemRecordMapper.java create mode 100644 mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsModelService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemRecordService.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsModelServiceImpl.java create mode 100644 mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemRecordServiceImpl.java create mode 100644 mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsModelMapper.xml create mode 100644 mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemRecordMapper.xml diff --git a/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql b/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql new file mode 100644 index 000000000..a4b2a9ece --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql @@ -0,0 +1,64 @@ +ALTER TABLE `wx_offline_activity_item` + ADD COLUMN `mode_type` smallint(1) NULL DEFAULT NULL COMMENT '活动项模式' AFTER `name`; + +update wx_offline_activity_item set mode_type = 2 where type = 1; +update wx_offline_activity_item set mode_type = 2 where type = 2; + +update wx_offline_activity_item set mode_type = calculation_mode where type = 3; +update wx_offline_activity_item set mode_type = 2 where type = 3 and mode_type is null; + +ALTER TABLE `wx_offline_activity_item` + MODIFY COLUMN `mode_type` smallint(1) NOT NULL COMMENT '活动项模式' AFTER `name`; + +ALTER TABLE `wx_offline_activity_item` + DROP COLUMN `calculation_mode`; + +ALTER TABLE `wx_offline_activity_item` + ADD COLUMN `business_order_count` int(11) NULL COMMENT '业态订单限制' AFTER `awards_item_price`; + +ALTER TABLE `wx_offline_activity_item` + ADD COLUMN `count_model` smallint(1) NULL COMMENT '联单模式' AFTER `tax_points`; + +update wx_offline_activity_item set count_model = 1 where type = 3 + and id in(select distinct activity_item_id form wx_offline_activity_awards_item where `type` = 2); + + + +DROP TABLE IF EXISTS `wx_offline_activity_awards_model`; +CREATE TABLE `wx_offline_activity_awards_model` ( + `id` bigint(20) NOT NULL COMMENT '主键ID', + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_item_id` bigint(20) NOT NULL COMMENT '活动项id', + `model_type` smallint(1) NOT NULL COMMENT '模式类型', + `merchant_count` int(11) NULL DEFAULT NULL COMMENT '联单笔数', + `min_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '最小金额', + `max_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '最大金额', + `awards_count` int(11) NULL DEFAULT NULL COMMENT '奖项数量', + `awards_grade` int(11) NULL DEFAULT NULL COMMENT '奖项等级', + `create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `activity_item_id`(`activity_item_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动奖项模式' ROW_FORMAT = DYNAMIC; + + +insert into `wx_offline_activity_awards_model`(`id`,`tenant_id`,`parent_tenant_id`,`activity_item_id`,`model_type`,`merchant_count`,`min_amount`,`max_amount`,`awards_count`,`awards_grade`,`create_date`,`update_date`) +select id,tenant_id,parent_tenant_id,activity_item_id,type,null,min_amount,max_amount,null,grade,create_date,update_date from wx_offline_activity_awards_item +where activity_item_id in (select id from wx_offline_activity_item where type = 2); + + +DROP TABLE IF EXISTS `wx_offline_activity_grant_item_record`; +CREATE TABLE `wx_offline_activity_grant_item_record` ( + `tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID', + `parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID', + `activity_id` bigint(20) NOT NULL COMMENT '活动id', + `activity_item_id` bigint(20) NOT NULL COMMENT '活动项id', + `record_id` bigint(20) NOT NULL COMMENT '参与记录id', + `grant_id` bigint(20) NOT NULL COMMENT '发放id', + INDEX `activity_id`(`activity_id`, `record_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '活动发放筛选订单金额关系表' ROW_FORMAT = DYNAMIC; + + +ALTER TABLE `wx_offline_activity_grant_cash_back` + DROP COLUMN `calculation_mode`; diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsModel.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsModel.java new file mode 100644 index 000000000..0283ec86a --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsModel.java @@ -0,0 +1,83 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 线下活动奖项模式 + * @TableName wx_offline_activity_awards_model + */ +@TableName(value ="wx_offline_activity_awards_model") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityAwardsModel extends TenantEntity { + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 活动项id + */ + @TableField(value = "activity_item_id") + private Long activityItemId; + + /** + * 模式类型(金额or联单) + */ + @TableField(value = "model_type") + private Integer modelType; + + /** + * 联单笔数 + */ + @TableField(value = "merchant_count") + private Integer merchantCount; + + /** + * 限制最小金额 + */ + @TableField(value = "min_amount") + private BigDecimal minAmount; + + /** + * 限制最大金额 + */ + @TableField(value = "max_amount") + private BigDecimal maxAmount; + + /** + * 奖项数量 + */ + @TableField(value = "awards_count") + private Integer awardsCount; + + /** + * 奖项等级 + */ + @TableField(value = "awards_grade") + private Integer awardsGrade; + + /** + * 创建时间 + */ + @TableField(value = "create_date") + private Date createDate; + + /** + * 更新时间 + */ + @TableField(value = "update_date") + private Date updateDate; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java index 22ae0a1ae..7cc0de2f3 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java @@ -68,12 +68,6 @@ public class WxOfflineActivityGrantCashBack extends TenantEntity { @TableField(value = "awards_item_rule") private Integer awardsItemRule; - /** - * 返现计算模式 - */ - @TableField(value = "calculation_mode") - private Integer calculationMode; - /** * 返现封顶金额 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItemRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItemRecord.java new file mode 100644 index 000000000..4db57baea --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItemRecord.java @@ -0,0 +1,43 @@ +package com.iformall.domain.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.iformall.domain.po.base.TenantEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; + +/** + * 活动发放筛选订单金额关系表 + * @TableName wx_offline_activity_grant_item_record + */ +@TableName(value ="wx_offline_activity_grant_item_record") +@Data +@ToString(callSuper = true) +@EqualsAndHashCode(callSuper = true) +public class WxOfflineActivityGrantItemRecord extends TenantEntity { + + /** + * 活动id + */ + @TableField(value = "activity_id") + private Long activityId; + + /** + * 活动项id + */ + @TableField(value = "activity_item_id") + private Long activityItemId; + + /** + * 参与记录id + */ + @TableField(value = "record_id") + private Long recordId; + + /** + * 发放id + */ + @TableField(value = "grant_id") + private Long grantId; +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java index 4781a9440..49351e60c 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java @@ -46,6 +46,12 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(value = "name") private String name; + /** + * 活动项模式 + */ + @TableField(value = "mode_type") + private Integer modeType; + /** * 参与金额 */ @@ -58,6 +64,20 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(value = "awards_item_price") private BigDecimal awardsItemPrice; + /** + * 业态限制 + */ + @TableField(value = "business_order_count") + private Integer businessOrderCount; + + /** + * 模式规则 + */ + @TableField(exist = false) + private List activityAwardsModelList; + @TableField(exist = false) + private List activityAwardsModelSecondList; + /** * 奖项数量限制(为0时无限制) */ @@ -76,12 +96,6 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(value = "awards_item_rule") private Integer awardsItemRule; - /** - * 返现计算模式 - */ - @TableField(value = "calculation_mode") - private Integer calculationMode; - /** * 返现封顶金额 */ @@ -100,6 +114,12 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(value = "tax_points") private BigDecimal taxPoints; + /** + * 联单模式 + */ + @TableField(value = "count_model") + private Integer countModel; + /** * 创建时间 */ @@ -154,4 +174,9 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(exist = false) private String cashBackMsg; + @TableField(exist = false) + private List recordIds; + @TableField(exist = false) + private List recordList; + } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java index 64869810f..505d9013b 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java @@ -152,6 +152,8 @@ public class WxOfflineActivityRecord extends TenantEntity { @TableField(value = "business_id") private Integer businessId; + @TableField(exist = false) + private String businessName; /** * 创建时间 diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsModeType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsModeType.java new file mode 100644 index 000000000..7aaedf71f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsModeType.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityAwardsModeType { + + AMOUNT(1, "金额"), + COUNT(2, "联单"), + ; + + public static EnumOfflineActivityAwardsModeType getEnum(Integer code) { + for (EnumOfflineActivityAwardsModeType value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityAwardsModeType(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java index 7073d9a5f..31c697ad2 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java @@ -1,37 +1,37 @@ -package com.iformall.enums; - - -/** - * @author gongbiao - */ -public enum EnumOfflineActivityCalculationMode { - - ONE(1, "单笔订单计算"), - SUM(2, "订单总额计算"), - ; - - public static EnumOfflineActivityCalculationMode getEnum(Integer code) { - for (EnumOfflineActivityCalculationMode value : values()) { - if (value.getCode().equals(code)) { - return value; - } - } - return null; - } - - private Integer code; - private String message; - - EnumOfflineActivityCalculationMode(Integer code, String message) { - this.code = code; - this.message = message; - } - - public Integer getCode() { - return code; - } - - public String getMessage() { - return message; - } -} +//package com.iformall.enums; +// +// +///** +// * @author gongbiao +// */ +//public enum EnumOfflineActivityCalculationMode { +// +// ONE(1, "单笔订单计算"), +// SUM(2, "订单总额计算"), +// ; +// +// public static EnumOfflineActivityCalculationMode getEnum(Integer code) { +// for (EnumOfflineActivityCalculationMode value : values()) { +// if (value.getCode().equals(code)) { +// return value; +// } +// } +// return null; +// } +// +// private Integer code; +// private String message; +// +// EnumOfflineActivityCalculationMode(Integer code, String message) { +// this.code = code; +// this.message = message; +// } +// +// public Integer getCode() { +// return code; +// } +// +// public String getMessage() { +// return message; +// } +//} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCountMode.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCountMode.java new file mode 100644 index 000000000..75f26a93b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCountMode.java @@ -0,0 +1,37 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityCountMode { + + MERCHANT_MODEL(1, "商户联单"), + BUSINESS_MODEL(2, "业态联单"), + ; + + public static EnumOfflineActivityCountMode getEnum(Integer code) { + for (EnumOfflineActivityCountMode value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityCountMode(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMode.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMode.java new file mode 100644 index 000000000..b0b15df98 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMode.java @@ -0,0 +1,38 @@ +package com.iformall.enums; + + +/** + * @author gongbiao + */ +public enum EnumOfflineActivityMode { + + ONE(1, "单笔订单计算"), + SUM(2, "订单总额计算"), + CONDITION_SUM(3, "筛选订单总额计算"), + ; + + public static EnumOfflineActivityMode getEnum(Integer code) { + for (EnumOfflineActivityMode value : values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return null; + } + + private Integer code; + private String message; + + EnumOfflineActivityMode(Integer code, String message) { + this.code = code; + this.message = message; + } + + public Integer getCode() { + return code; + } + + public String getMessage() { + return message; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsModelMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsModelMapper.java new file mode 100644 index 000000000..090f81c77 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsModelMapper.java @@ -0,0 +1,28 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityAwardsModel; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_awards_model()】的数据库操作Mapper +* @createDate 2024-08-06 13:20:56 +* @Entity com.iformall.domain.po.WxOfflineActivityAwardsModel +*/ +public interface WxOfflineActivityAwardsModelMapper extends CommonMapper { + + WxOfflineActivityAwardsModel selectById(@Param("id")Long id, @Param("tenantId")String tenantId); + + List findList(WxOfflineActivityAwardsModel wxOfflineActivityAwardsModel); + + Integer itemCount(WxOfflineActivityAwardsModel wxOfflineActivityAwardsModel); + + void delete(WxOfflineActivityAwardsModel wxOfflineActivityAwardsModel); +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemRecordMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemRecordMapper.java new file mode 100644 index 000000000..7263a6650 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemRecordMapper.java @@ -0,0 +1,25 @@ +package com.iformall.mapper; + +import com.iformall.common.CommonMapper; +import com.iformall.domain.po.WxOfflineActivityGrantItemRecord; +import com.iformall.domain.po.WxOfflineActivityRecordGrant; +import com.iformall.domain.vo.OfflineActivityGrantRecord; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_item_record(线下活动参与登记与发放关联表)】的数据库操作Mapper +* @createDate 2024-08-09 00:13:44 +* @Entity com.iformall.domain.po.WxOfflineActivityGrantItemRecord +*/ +public interface WxOfflineActivityGrantItemRecordMapper extends CommonMapper { + + void insertList(@Param("grantItemRecordList")List grantItemRecordList); + +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsModelService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsModelService.java new file mode 100644 index 000000000..8da751274 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsModelService.java @@ -0,0 +1,21 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxOfflineActivityAwardsItem; +import com.iformall.domain.po.WxOfflineActivityAwardsModel; +import com.iformall.domain.po.WxOfflineActivityItem; + +import java.util.List; +import java.util.Map; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_awards_model(线下活动奖项)】的数据库操作Service +* @createDate 2024-08-06 13:20:56 +*/ +public interface WxOfflineActivityAwardsModelService { + + void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsModelList, List activityAwardsModelSecondList); + + List getActivityAwardsModelList(Long activityItemId, String tenantId); + +} diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemRecordService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemRecordService.java new file mode 100644 index 000000000..71a300a2f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemRecordService.java @@ -0,0 +1,13 @@ +package com.iformall.service; + +import com.iformall.domain.po.WxOfflineActivityGrantAward; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_item_record(线下活动参与登记与发放关联表)】的数据库操作Service +* @createDate 2024-08-09 00:13:44 +*/ +public interface WxOfflineActivityGrantItemRecordService { + + void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); +} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java index 452a760e3..8f8a0a450 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java @@ -35,6 +35,7 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity activityAwardsItemDel.updateTenantInfo(activityItem); activityAwardsItemDel.setActivityItemId(activityItem.getId()); wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel); + final IdWorker idWorker = IdWorker.get(); for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) { if(awaItem.getId() == null){ diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsModelServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsModelServiceImpl.java new file mode 100644 index 000000000..204fed93e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsModelServiceImpl.java @@ -0,0 +1,82 @@ +package com.iformall.service.impl; + +import com.iformall.common.IdWorker; +import com.iformall.domain.po.WxOfflineActivityAwardsModel; +import com.iformall.domain.po.WxOfflineActivityItem; +import com.iformall.enums.EnumOfflineActivityAwardsModeType; +import com.iformall.mapper.WxOfflineActivityAwardsModelMapper; +import com.iformall.service.WxOfflineActivityAwardsModelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_awards_model(线下活动奖项)】的数据库操作Service实现 +* @createDate 2024-08-06 13:20:56 +*/ +@Service +public class WxOfflineActivityAwardsModelServiceImpl implements WxOfflineActivityAwardsModelService { + + @Autowired + WxOfflineActivityAwardsModelMapper wxOfflineActivityAwardsModelMapper; + + @Override + public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsModelList, + List activityAwardsModelSecondList) { + WxOfflineActivityAwardsModel activityAwardsModelDel = new WxOfflineActivityAwardsModel(); + activityAwardsModelDel.updateTenantInfo(activityItem); + activityAwardsModelDel.setActivityItemId(activityItem.getId()); + wxOfflineActivityAwardsModelMapper.delete(activityAwardsModelDel); + + final IdWorker idWorker = IdWorker.get(); + if(activityAwardsModelList != null && !activityAwardsModelList.isEmpty()) { + for (WxOfflineActivityAwardsModel awaModel : activityAwardsModelList) { + if(awaModel.getId() == null){ + awaModel.setId(idWorker.nextId()); + } + awaModel.updateTenantInfo(activityItem); + awaModel.setActivityItemId(activityItem.getId()); + awaModel.setModelType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); + + if(awaModel.getCreateDate() == null){ + awaModel.setCreateDate(activityItem.getUpdateDate()); + } + awaModel.setUpdateDate(activityItem.getUpdateDate()); + wxOfflineActivityAwardsModelMapper.insert(awaModel); + } + } + + if(activityAwardsModelSecondList != null && !activityAwardsModelSecondList.isEmpty()){ + for (WxOfflineActivityAwardsModel secondAwaModel : activityAwardsModelSecondList) { + if(secondAwaModel.getId() == null){ + secondAwaModel.setId(idWorker.nextId()); + } + secondAwaModel.updateTenantInfo(activityItem); + secondAwaModel.setActivityItemId(activityItem.getId()); + secondAwaModel.setModelType(EnumOfflineActivityAwardsModeType.COUNT.getCode()); + + if(secondAwaModel.getCreateDate() == null){ + secondAwaModel.setCreateDate(activityItem.getUpdateDate()); + } + secondAwaModel.setUpdateDate(activityItem.getUpdateDate()); + wxOfflineActivityAwardsModelMapper.insert(secondAwaModel); + } + } + } + + @Override + public List getActivityAwardsModelList(Long activityItemId, String tenantId) { + WxOfflineActivityAwardsModel activityAwardsModelQuery = new WxOfflineActivityAwardsModel(); + activityAwardsModelQuery.setActivityItemId(activityItemId); + activityAwardsModelQuery.setTenantId(tenantId); + List activityAwardsModelList = wxOfflineActivityAwardsModelMapper.findList(activityAwardsModelQuery); + return activityAwardsModelList; + } + +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index 8a82aa967..bbdc58aba 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -1,11 +1,9 @@ package com.iformall.service.impl; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; -import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; import com.alibaba.fastjson.JSON; import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.iformall.common.IdWorker; import com.iformall.common.Result; import com.iformall.domain.po.*; @@ -17,7 +15,6 @@ import com.iformall.exception.MallinkException; import com.iformall.mapper.*; import com.iformall.service.*; import com.iformall.utils.DateUtils; -import com.iformall.utils.DownFileUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -28,8 +25,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.math.RoundingMode; -import java.net.MalformedURLException; -import java.net.URL; import java.text.NumberFormat; import java.util.*; import java.util.function.Function; @@ -77,6 +72,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity @Autowired WxOfflineActivityRecordGrantService wxOfflineActivityRecordGrantService; + @Autowired + WxOfflineActivityGrantItemRecordService wxOfflineActivityGrantItemRecordService; + @Autowired WxOfflineActivityItemService wxOfflineActivityItemService; @@ -178,79 +176,56 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(activity.getStatus())){ throw new MallinkException(Result.ERROR, "请检查活动状态"); } - //订单合并 + //订单合并计算 handlerGrantData(activity,wxOfflineActivityGrantAward,true); //奖项处理 List activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); + if(wxOfflineActivityGrantAward.getActivityItemList() != null && !wxOfflineActivityGrantAward.getActivityItemList().isEmpty()){ + Map> ActivityItemRecordMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, WxOfflineActivityItem::getRecordIds)); + for (WxOfflineActivityItem activityItem : activityItemList) { + List records = ActivityItemRecordMap.get(activityItem.getId()); + if(records != null && !records.isEmpty()){ + activityItem.setRecordIds(records); + } + } + } wxOfflineActivityGrantAward.setActivityItemList(activityItemList); + // for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){ if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + //计算商户商管分别承担金额 + handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); - if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ - activityItem.setIsMeet(false); - continue; - } + //处理发奖数量 activityItem.setIsMeet(true); - //奖项限制数量 - int limitCount = 0; - if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ - limitCount = wxOfflineActivityGrantAward.getOrderMoneySum().divide(activityItem.getAwardsItemPrice(),0,BigDecimal.ROUND_HALF_DOWN).intValue(); - } - if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 - && activityItem.getAwardsItemLimit() < limitCount){ - limitCount = activityItem.getAwardsItemLimit(); + handleLotteryDrawCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + if(activityItem.getRealAwardsItemLimit() == 0){ + activityItem.setIsMeet(false); } - activityItem.setRealAwardsItemLimit(limitCount); - //计算商户商管分别承担金额 - handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); } else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ + //计算商户商管分别承担金额 handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); - List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); - WxOfflineActivityAwardsItem grantAwardsItem = null; - for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ - if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) - && (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ - grantAwardsItem = awardsItem; - } - } - if(grantAwardsItem == null){ + //处理发放奖项 + handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); + activityItem.setIsMeet(true); + if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){ activityItem.setIsMeet(false); - continue; } - activityItem.setIsMeet(true); - activityItem.setRealAwardsItemLimit(1); - - WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); - grantItem.setActivityItemId(activityItem.getId()); - grantItem.setActivityItemName(activityItem.getName()); - grantItem.setActivityItemType(activityItem.getType()); - grantItem.setAwardItamId(grantAwardsItem.getId()); - grantItem.setAwardName(grantAwardsItem.getName()); - grantItem.setAwardGrade(grantAwardsItem.getGrade()); - grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount()); - grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount()); - grantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); - grantItem.setAwardCount(1); - grantItem.setAwardPrice(grantAwardsItem.getPrice()); - grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); - grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); - grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice()); - grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); - grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice()); - activityItem.setActivityGrantItemList(Collections.singletonList(grantItem)); } else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { + BigDecimal cashBackPriceTotal = BigDecimal.ZERO; List grantItemList = new ArrayList<>(); List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); //单笔订单计算 - if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ + for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ @@ -300,27 +275,33 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ + BigDecimal orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + } WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ - if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) - && (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ + if((awardsItem.getMinAmount() == null || orderMoneySum.compareTo(awardsItem.getMinAmount()) >= 0) + && (awardsItem.getMaxAmount() == null || orderMoneySum.compareTo(awardsItem.getMaxAmount()) <= 0)){ grantAwardsItem = awardsItem; } } if(grantAwardsItem != null){ //计算返现金额 - BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() + BigDecimal cashBackPrice = orderMoneySum .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); } } - if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ - List merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); - Map collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); - WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size()); + Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ + Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); + WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount); if(grantAwardsSecondItem != null){ //计算返现金额 BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() @@ -348,7 +329,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityGrantCashBack.setActivityItemName(activityItem.getName()); activityGrantCashBack.setActivityItemType(activityItem.getType()); activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); - activityGrantCashBack.setCalculationMode(activityItem.getCalculationMode()); activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); @@ -385,6 +365,150 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } + private void handleLotteryDrawCount(WxOfflineActivityItem activityItem, List recordList){ + + int limitCount = 0; + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ + for(WxOfflineActivityRecord record :recordList){ + Integer record_count = 0; + for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ + if((activityAwardsModel.getMinAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMinAmount()) >= 0) + && (activityAwardsModel.getMaxAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMaxAmount()) <= 0)){ + record_count = activityAwardsModel.getAwardsCount(); + } + } + limitCount += record_count; + } + + }else{ + BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + orderMoneySum = recordList.stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + } + if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ + limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); + } + + } + + Integer jointCount = getJointCount(activityItem,recordList); + if(jointCount != 0){ + Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); + WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); + limitCount += activityAwardsModel.getAwardsCount(); + } + + if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 + && activityItem.getAwardsItemLimit() < limitCount){ + limitCount = activityItem.getAwardsItemLimit(); + } + activityItem.setRealAwardsItemLimit(limitCount); + } + + private void handleGiftAwards(WxOfflineActivityItem activityItem, List recordList){ + Map grantItemMap = new HashMap<>(); + + Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getGrade, Function.identity())); + + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ + for(WxOfflineActivityRecord record :recordList){ + Integer awardsGrade = null; + for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ + if((activityAwardsModel.getMinAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMinAmount()) >= 0) + && (activityAwardsModel.getMaxAmount() == null || record.getOrderMoney().compareTo(activityAwardsModel.getMaxAmount()) <= 0)){ + awardsGrade = activityAwardsModel.getAwardsGrade(); + } + } + if(awardsGrade == null){ + break; + } + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(awardsGrade); + if(wxOfflineActivityGrantItem != null){ + wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); + }else{ + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); + wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + } + } + }else{ + BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + orderMoneySum = recordList.stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + } + Integer awardsGrade = null; + for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ + if((activityAwardsModel.getMinAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMinAmount()) >= 0) + && (activityAwardsModel.getMaxAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMaxAmount()) <= 0)){ + awardsGrade = activityAwardsModel.getAwardsGrade(); + } + } + if(awardsGrade != null){ + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + } + } + + Integer jointCount = getJointCount(activityItem,recordList); + if(jointCount != 0){ + Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); + WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); + + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(activityAwardsModel.getAwardsGrade()); + if(wxOfflineActivityGrantItem != null){ + wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); + }else{ + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); + wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + grantItemMap.put(activityAwardsModel.getAwardsGrade(), wxOfflineActivityGrantItem); + } + } + + if(!grantItemMap.isEmpty()){ + activityItem.setActivityGrantItemList(new ArrayList<>(grantItemMap.values())); + } + } + + private Integer getJointCount(WxOfflineActivityItem activityItem, List recordList){ + Integer jointCount = 0; + if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(activityItem.getCountModel())){ + //商户联单 + List merchantIds = recordList.stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); + jointCount = merchantIds.size(); + }else if(EnumOfflineActivityCountMode.BUSINESS_MODEL.getCode().equals(activityItem.getCountModel())){ + //业态联单 + List businessIds = recordList.stream().map(WxOfflineActivityRecord::getBusinessId).distinct().collect(toList()); + jointCount = businessIds.size(); + } + return jointCount; + } + + private WxOfflineActivityGrantItem createGrantItemFromGrant(WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem grantAwardsItem){ + WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); + grantItem.setActivityItemId(activityItem.getId()); + grantItem.setActivityItemName(activityItem.getName()); + grantItem.setActivityItemType(activityItem.getType()); + grantItem.setAwardItamId(grantAwardsItem.getId()); + grantItem.setAwardName(grantAwardsItem.getName()); + grantItem.setAwardGrade(grantAwardsItem.getGrade()); + grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount()); + grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount()); + grantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); + grantItem.setAwardCount(1); + grantItem.setAwardPrice(grantAwardsItem.getPrice()); + grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); + grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); + grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice()); + grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); + grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice()); + return grantItem; + } + private WxOfflineActivityGrantCashBack getLastActivityGrantCashBack(WxOfflineActivityGrantAward wxOfflineActivityGrantAward,Long activityId,Long activityItemId){ Long grantId = wxOfflineActivityGrantAwardMapper.getLastId(wxOfflineActivityGrantAward); if(grantId == null){ @@ -424,6 +548,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } handlerGrantData(activity,wxOfflineActivityGrantAward,false); + Date now = new Date(); final IdWorker idWorker = IdWorker.get(); wxOfflineActivityGrantAward.setId(idWorker.nextId()); @@ -441,7 +566,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity upd.setUpdateDate(now); wxOfflineActivityGrantAwardMapper.updateStatusNo(upd); + //创建订单关联 wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward); + wxOfflineActivityGrantItemRecordService.insertFromGrantAward(wxOfflineActivityGrantAward); //处理奖项 handlerGrantItem(activity,wxOfflineActivityGrantAward); @@ -518,6 +645,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity List activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); + int i = 0;//检查活动奖项 for (WxOfflineActivityItem activityItem : activityItemList) { @@ -530,13 +658,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityGrantItemList = grantActivityItem.getActivityGrantItemList(); } - if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType()) + || EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ continue; } - if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ - throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); - } +// if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ +// throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); +// } boolean isRepeat = activityGrantItemList.stream() .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) @@ -545,20 +674,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); } - //奖项限制数量 - int limitCount = 0; - if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ - limitCount = wxOfflineActivityGrantAward.getOrderMoneySum().divide(activityItem.getAwardsItemPrice(),0,BigDecimal.ROUND_HALF_DOWN).intValue(); - } - if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 - && activityItem.getAwardsItemLimit() < limitCount){ - limitCount = activityItem.getAwardsItemLimit(); - } - if(limitCount != 0 && activityGrantItemList.stream().mapToInt(WxOfflineActivityGrantItem::getAwardCount).sum()>limitCount){ - throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"奖券超过限制"); - } - - for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { if(grantGrantItem.getAwardItamId() == null){ throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); @@ -573,42 +688,40 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityItem.setActivityGrantItemList(activityGrantItemList); } - else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ - if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ - continue; - } - - if(activityGrantItemList.size() != 1){ - throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); - } - WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); - if(grantGrantItem.getAwardItamId() == null){ - throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); - } - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); - if(awardsItem == null){ - throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); - } -// if(awardsItem.getMinAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) < 0){ -// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)"); +// else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ +// if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ +// continue; // } - if((awardsItem.getMinAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) < 0) - || (awardsItem.getMaxAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) > 0)){ - throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)"); - } - - handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); - - activityItem.setActivityGrantItemList(activityGrantItemList); - - } +// +// boolean isRepeat = activityGrantItemList.stream() +// .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) +// .entrySet().stream().anyMatch(e -> e.getValue() > 1); +// if(isRepeat){ +// throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); +// } +// +// for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { +// if(grantGrantItem.getAwardItamId() == null){ +// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); +// } +// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); +// if(awardsItem == null){ +// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); +// } +// +// handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); +// } +// +// activityItem.setActivityGrantItemList(activityGrantItemList); +// +// } else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { BigDecimal cashBackPriceTotal = BigDecimal.ZERO; activityGrantItemList = new ArrayList<>(); List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); //单笔订单计算 - if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ @@ -634,18 +747,24 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ + BigDecimal orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + } WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ - if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) - && (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ + if((awardsItem.getMinAmount() == null || orderMoneySum.compareTo(awardsItem.getMinAmount()) >= 0) + && (awardsItem.getMaxAmount() == null || orderMoneySum.compareTo(awardsItem.getMaxAmount()) <= 0)){ grantAwardsItem = awardsItem; } } if(grantAwardsItem != null){ WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); //计算返现金额 - BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() + BigDecimal cashBackPrice = orderMoneySum .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); grantAwardsItem.setPrice(cashBackPrice); handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); @@ -653,13 +772,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityGrantItemList.add(grantGrantItem); cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); } - } - if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ - List merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); - Map collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); - WxOfflineActivityAwardsItem awardsSecondItem = collect.get(merchantIds.size()); + Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ + Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); + WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); if(awardsSecondItem != null){ WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); //计算返现金额 @@ -671,7 +789,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityGrantItemList.add(grantGrantItem); cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); } - } BigDecimal prop = BigDecimal.ONE; @@ -707,7 +824,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityGrantCashBack.setActivityItemName(activityItem.getName()); activityGrantCashBack.setActivityItemType(activityItem.getType()); activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); - activityGrantCashBack.setCalculationMode(activityItem.getCalculationMode()); activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemRecordServiceImpl.java new file mode 100644 index 000000000..8825aafb8 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemRecordServiceImpl.java @@ -0,0 +1,53 @@ +package com.iformall.service.impl; + +import com.iformall.domain.po.*; +import com.iformall.mapper.WxOfflineActivityGrantItemRecordMapper; +import com.iformall.service.WxOfflineActivityGrantItemRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.Function; + +import static java.util.stream.Collectors.toMap; + + +/** +* @author xiaohu +* @description 针对表【wx_offline_activity_grant_item_record(线下活动参与登记与发放关联表)】的数据库操作Service实现 +* @createDate 2024-08-09 00:13:44 +*/ +@Service +public class WxOfflineActivityGrantItemRecordServiceImpl implements WxOfflineActivityGrantItemRecordService { + + @Autowired + private WxOfflineActivityGrantItemRecordMapper wxOfflineActivityGrantItemRecordMapper; + + @Override + public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { + List grantItemRecordList = new ArrayList<>(); + Map recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(toMap(WxOfflineActivityRecord::getId, Function.identity())); + for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { + if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()) { + for(Long recordId : activityItem.getRecordIds()) { + WxOfflineActivityRecord record = recordMap.get(recordId); + WxOfflineActivityGrantItemRecord grantItemRecord = new WxOfflineActivityGrantItemRecord(); + grantItemRecord.updateTenantInfo(wxOfflineActivityGrantAward); + grantItemRecord.setActivityId(wxOfflineActivityGrantAward.getActivityId()); + grantItemRecord.setActivityItemId(activityItem.getId()); + grantItemRecord.setRecordId(record.getId()); + grantItemRecord.setGrantId(wxOfflineActivityGrantAward.getId()); + grantItemRecordList.add(grantItemRecord); + } + } + } + + wxOfflineActivityGrantItemRecordMapper.insertList(grantItemRecordList); + } +} + + + + diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java index 912c9896f..925e4ffaa 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java @@ -3,18 +3,20 @@ package com.iformall.service.impl; import com.iformall.common.IdWorker; import com.iformall.domain.po.WxOfflineActivity; import com.iformall.domain.po.WxOfflineActivityAwardsItem; +import com.iformall.domain.po.WxOfflineActivityAwardsModel; import com.iformall.domain.po.WxOfflineActivityItem; +import com.iformall.enums.EnumOfflineActivityAwardsModeType; import com.iformall.enums.EnumOfflineActivityAwardsItemType; import com.iformall.enums.EnumOfflineActivityAwardsRule; import com.iformall.enums.EnumOfflineActivityType; import com.iformall.service.WxOfflineActivityAwardsItemService; +import com.iformall.service.WxOfflineActivityAwardsModelService; import com.iformall.service.WxOfflineActivityItemService; import com.iformall.mapper.WxOfflineActivityItemMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -33,6 +35,9 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe @Autowired WxOfflineActivityAwardsItemService wxOfflineActivityAwardsItemService; + @Autowired + WxOfflineActivityAwardsModelService wxOfflineActivityAwardsModelService; + @Override public void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List activityItemList) { WxOfflineActivityItem activityItemDel = new WxOfflineActivityItem(); @@ -70,6 +75,9 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe activityItem.setUpdateDate(wxOfflineActivity.getUpdateDate()); wxOfflineActivityItemMapper.insert(activityItem); + //处理奖项模式 + wxOfflineActivityAwardsModelService.saveOrUpdateFromActivityItem(activityItem,activityItem.getActivityAwardsModelList(),activityItem.getActivityAwardsModelSecondList()); + //处理奖项 wxOfflineActivityAwardsItemService.saveOrUpdateFromActivityItem(activityItem,activityItem.getActivityAwardsItemList(),activityItem.getActivityAwardsItemSecondList()); } @@ -89,7 +97,13 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe item.setActivityAwardsItemSecondList(collect.get(EnumOfflineActivityAwardsItemType.SECOND.getCode())); }else{ item.setActivityAwardsItemList(activityAwardsItemList); + + List activityAwardsModelList = wxOfflineActivityAwardsModelService.getActivityAwardsModelList(item.getId(), tenantId); + Map> collect = activityAwardsModelList.stream().collect(Collectors.groupingBy(WxOfflineActivityAwardsModel::getModelType)); + item.setActivityAwardsModelList(collect.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode())); + item.setActivityAwardsModelSecondList(collect.get(EnumOfflineActivityAwardsModeType.COUNT.getCode())); } + } return itemList; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java index d29219dd9..8fe6041bd 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java @@ -156,6 +156,8 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco userMap = mallUserInfoService.getUserMap(userInfoQ); } + Map bussinessMap = wxBusinessService.findAllMap(tenantEntity); + for (WxOfflineActivityRecord record : recordList) { if(record.getMerchantId() != null){ record.setMerchantName(idAndNamesMap.get(record.getMerchantId())); @@ -164,6 +166,9 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco if(record.getAuditBy() != null){ record.setAuditByName(userMap.get(record.getAuditBy()).getName()); } + if(record.getBusinessId() != null){ + record.setBusinessName(bussinessMap.get(record.getBusinessId()).getTitle()); + } if(activityId != null){ record.setGrantStatus(EnumYesOrNo.NO.getCode()); diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsModelMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsModelMapper.xml new file mode 100644 index 000000000..fa113cb39 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsModelMapper.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + id,tenant_id,parent_tenant_id, + activity_item_id,`model_type`,merchant_count, + min_amount,max_amount, + awards_count,awards_grade, + create_date,update_date + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `activity_item_id` = #{activityItemId} + + + + and `model_type` = #{modelType} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + + + + + delete from wx_offline_activity_awards_model + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml index c78fce734..badb1206f 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml @@ -16,7 +16,6 @@ - @@ -30,7 +29,7 @@ id,tenant_id,parent_tenant_id, grant_id,activity_id,activity_name, - activity_item_id,activity_item_name,activity_item_type,awards_item_rule,calculation_mode, + activity_item_id,activity_item_name,activity_item_type,awards_item_rule, create_date,update_date,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount @@ -78,7 +77,7 @@ (id, grant_id,activity_id,activity_name, activity_item_id,activity_item_name,activity_item_type, - awards_item_rule,calculation_mode, + awards_item_rule, create_date,update_date ,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount) values diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemRecordMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemRecordMapper.xml new file mode 100644 index 000000000..7e40f3e99 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemRecordMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + tenant_id,parent_tenant_id,activity_id,activity_item_id, + record_id,grant_id + + + + insert into wx_offline_activity_grant_item_record + (`activity_id`,`activity_item_id`,`record_id`,`grant_id`) + values + + (#{item.activityId,jdbcType=BIGINT}, + #{item.activityItemId,jdbcType=BIGINT}, + #{item.recordId,jdbcType=BIGINT}, + #{item.grantId,jdbcType=BIGINT}) + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml index 35490ea2f..1b8108a73 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml @@ -11,24 +11,26 @@ + + - + id,tenant_id,parent_tenant_id, - activity_id,`type`,`name`, - limit_money,awards_item_price,awards_item_limit,awards_item_count, - awards_item_rule,calculation_mode,max_amount,starting_tax_point,tax_points,create_date,update_date + activity_id,`type`,`name`,`mode_type`, + limit_money,awards_item_price,business_order_count,awards_item_limit,awards_item_count, + awards_item_rule,max_amount,starting_tax_point,tax_points,count_model,create_date,update_date From f00e7f6503bb257bed8a0533463f0b25fa75a24e Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Thu, 20 Feb 2025 20:33:27 +0800 Subject: [PATCH 2/6] //offline --- ...xOfflineActivityGrantAwardServiceImpl.java | 76 +++++++++++++------ 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index bbdc58aba..69a6ed63f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -277,9 +277,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity }else{ BigDecimal orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ + orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + }else{ + orderMoneySum = BigDecimal.ZERO; + } } WxOfflineActivityAwardsItem grantAwardsItem = null; @@ -383,9 +387,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity }else{ BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - orderMoneySum = recordList.stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ + orderMoneySum = recordList.stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + }else{ + orderMoneySum = BigDecimal.ZERO; + } + } if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); @@ -397,7 +406,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(jointCount != 0){ Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); - limitCount += activityAwardsModel.getAwardsCount(); + if(activityAwardsModel != null && activityAwardsModel.getAwardsCount() != null){ + limitCount += activityAwardsModel.getAwardsCount(); + } } if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0 @@ -429,16 +440,22 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); }else{ WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); - wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); - grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + if(awardsItem != null){ + wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + } } } }else{ BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - orderMoneySum = recordList.stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ + orderMoneySum = recordList.stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + }else{ + orderMoneySum = BigDecimal.ZERO; + } } Integer awardsGrade = null; for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ @@ -449,8 +466,10 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } if(awardsGrade != null){ WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); - grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + if(awardsItem != null){ + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); + } } } @@ -458,14 +477,17 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(jointCount != 0){ Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); - - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(activityAwardsModel.getAwardsGrade()); - if(wxOfflineActivityGrantItem != null){ - wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); - }else{ - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); - wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); - grantItemMap.put(activityAwardsModel.getAwardsGrade(), wxOfflineActivityGrantItem); + if(activityAwardsModel != null && activityAwardsModel.getAwardsGrade() != null){ + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(activityAwardsModel.getAwardsGrade()); + if(wxOfflineActivityGrantItem != null){ + wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); + }else{ + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); + if(awardsItem != null){ + wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + grantItemMap.put(activityAwardsModel.getAwardsGrade(), wxOfflineActivityGrantItem); + } + } } } @@ -749,9 +771,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity }else{ BigDecimal orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ + orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + }else{ + orderMoneySum = BigDecimal.ZERO; + } } WxOfflineActivityAwardsItem grantAwardsItem = null; From 46636e3843a47638ec027644fbefdb53d41ec002 Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Sat, 22 Feb 2025 22:33:48 +0800 Subject: [PATCH 3/6] //offline --- .../service/impl/WxOfflineActivityAwardsItemServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java index 8f8a0a450..30145209a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java @@ -47,7 +47,6 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ awaItem.setCashBackRatio(BigDecimal.ZERO); - awaItem.setGrade(-1); awaItem.setMinAmount(null); awaItem.setMaxAmount(null); } From 69115747e205b64e1ade3829ed3292312bf52e6a Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Sun, 23 Feb 2025 01:52:46 +0800 Subject: [PATCH 4/6] //offline --- ...xOfflineActivityGrantAwardServiceImpl.java | 128 +++++++++++------- ...ineActivityGrantSettlementServiceImpl.java | 47 +++++-- .../WxOfflineActivityGrantCashBackMapper.xml | 2 +- 3 files changed, 112 insertions(+), 65 deletions(-) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index 69a6ed63f..ddd44d151 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -179,14 +179,22 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity //订单合并计算 handlerGrantData(activity,wxOfflineActivityGrantAward,true); - //奖项处理 + //订单参数处理 List activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); if(wxOfflineActivityGrantAward.getActivityItemList() != null && !wxOfflineActivityGrantAward.getActivityItemList().isEmpty()){ Map> ActivityItemRecordMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, WxOfflineActivityItem::getRecordIds)); for (WxOfflineActivityItem activityItem : activityItemList) { - List records = ActivityItemRecordMap.get(activityItem.getId()); - if(records != null && !records.isEmpty()){ + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + List records = ActivityItemRecordMap.get(activityItem.getId()); + if(records == null || records.isEmpty()){ + throw new MallinkException(Result.ERROR, "发奖未选择订单"); + } activityItem.setRecordIds(records); + List collect = wxOfflineActivityGrantAward.getRecordList().stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())).collect(toList()); + activityItem.setRecordList(collect); + }else{ + activityItem.setRecordList(wxOfflineActivityGrantAward.getRecordList()); } } } @@ -200,7 +208,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity //处理发奖数量 activityItem.setIsMeet(true); - handleLotteryDrawCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + handleLotteryDrawCount(activityItem,activityItem.getRecordList()); if(activityItem.getRealAwardsItemLimit() == 0){ activityItem.setIsMeet(false); } @@ -211,7 +219,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); //处理发放奖项 - handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); + handleGiftAwards(activityItem,activityItem.getRecordList()); activityItem.setIsMeet(true); if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){ activityItem.setIsMeet(false); @@ -222,11 +230,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity BigDecimal cashBackPriceTotal = BigDecimal.ZERO; List grantItemList = new ArrayList<>(); + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); //单笔订单计算 if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ - for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ + for (WxOfflineActivityRecord record : activityItem.getRecordList()){ WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) @@ -275,16 +285,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ - BigDecimal orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ - orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - }else{ - orderMoneySum = BigDecimal.ZERO; - } - } +// BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ +// if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ +// orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() +// .filter(record -> activityItem.getRecordIds().contains(record.getId())) +// .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// }else{ +// orderMoneySum = BigDecimal.ZERO; +// } +// } WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ @@ -302,13 +312,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } - Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + Integer jointCount = getJointCount(activityItem,activityItem.getRecordList()); if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount); if(grantAwardsSecondItem != null){ //计算返现金额 - BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() + BigDecimal cashBackPrice = orderMoneySum .multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); } @@ -386,20 +396,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity }else{ BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ - orderMoneySum = recordList.stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - }else{ - orderMoneySum = BigDecimal.ZERO; - } - - } +// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ +// if(activityItem.getRecordList() != null && !activityItem.getRecordList().isEmpty()){ +// orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// }else{ +// orderMoneySum = BigDecimal.ZERO; +// } +// } if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ limitCount = orderMoneySum.divide(activityItem.getAwardsItemPrice(),0, RoundingMode.HALF_DOWN).intValue(); } - } Integer jointCount = getJointCount(activityItem,recordList); @@ -448,15 +454,15 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ - orderMoneySum = recordList.stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - }else{ - orderMoneySum = BigDecimal.ZERO; - } - } +// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ +// if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ +// orderMoneySum = recordList.stream() +// .filter(record -> activityItem.getRecordIds().contains(record.getId())) +// .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// }else{ +// orderMoneySum = BigDecimal.ZERO; +// } +// } Integer awardsGrade = null; for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ if((activityAwardsModel.getMinAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMinAmount()) >= 0) @@ -498,6 +504,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity private Integer getJointCount(WxOfflineActivityItem activityItem, List recordList){ Integer jointCount = 0; + if(recordList == null || recordList.isEmpty()){ + return jointCount; + } if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(activityItem.getCountModel())){ //商户联单 List merchantIds = recordList.stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); @@ -673,8 +682,21 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity for (WxOfflineActivityItem activityItem : activityItemList) { Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); - //获取奖项 + WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId()); + //订单参数处理 + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + if(grantActivityItem.getRecordIds() == null || grantActivityItem.getRecordIds().isEmpty()){ + throw new MallinkException(Result.ERROR, "发奖未选择订单"); + } + activityItem.setRecordIds(grantActivityItem.getRecordIds()); + List collect = wxOfflineActivityGrantAward.getRecordList().stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())).collect(toList()); + activityItem.setRecordList(collect); + }else{ + activityItem.setRecordList(wxOfflineActivityGrantAward.getRecordList()); + } + //获取发放奖项 List activityGrantItemList = null; if(grantActivityItem != null){ activityGrantItemList = grantActivityItem.getActivityGrantItemList(); @@ -741,10 +763,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity BigDecimal cashBackPriceTotal = BigDecimal.ZERO; activityGrantItemList = new ArrayList<>(); + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); //单笔订单计算 if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ - for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ + for (WxOfflineActivityRecord record : activityItem.getRecordList()){ WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) @@ -769,16 +793,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ - BigDecimal orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ - if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ - orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() - .filter(record -> activityItem.getRecordIds().contains(record.getId())) - .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - }else{ - orderMoneySum = BigDecimal.ZERO; - } - } +// BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ +// if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ +// orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() +// .filter(record -> activityItem.getRecordIds().contains(record.getId())) +// .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); +// }else{ +// orderMoneySum = BigDecimal.ZERO; +// } +// } WxOfflineActivityAwardsItem grantAwardsItem = null; for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ @@ -800,14 +824,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } - Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); + Integer jointCount = getJointCount(activityItem,activityItem.getRecordList()); if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); if(awardsSecondItem != null){ WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); //计算返现金额 - BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() + BigDecimal cashBackPrice = orderMoneySum .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); awardsSecondItem.setPrice(cashBackPrice); handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java index 2dea6f481..ee94af6a4 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java @@ -8,6 +8,7 @@ import com.iformall.domain.po.*; import com.iformall.domain.po.base.TenantEntity; import com.iformall.domain.vo.OfflineActivitySettlement; import com.iformall.domain.vo.OfflineActivitySettlementStatistics; +import com.iformall.enums.EnumOfflineActivityMode; import com.iformall.enums.EnumOfflineActivityStatus; import com.iformall.enums.EnumYesOrNo; import com.iformall.mapper.WxMerchantMapper; @@ -57,24 +58,46 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct final IdWorker idWorker = IdWorker.get(); Date now = new Date(); Map recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity())); + //获取订单占比(占比最少的订单用减法,尽量减少误差) - List recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); - int size = recordDescList.size() - 1; - BigDecimal lastRatio = new BigDecimal(100); - for(int i=0; i recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); +// int size = recordDescList.size() - 1; +// BigDecimal lastRatio = new BigDecimal(100); +// for(int i=0; i recordDescList = activityItem.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); +// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType()) +// && activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ +// recordDescList = wxOfflineActivityGrantAward.getRecordList().stream() +// .filter(record -> activityItem.getRecordIds().contains(record.getId())) +// .sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); +// } + BigDecimal orderMoneySum = recordDescList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + int size = recordDescList.size() - 1; + BigDecimal lastRatio = new BigDecimal(100); + for(int i=0; i itemSettlementList = new ArrayList<>(); if(wxOfflineActivityGrantItem.getRecordId() != null){ diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml index badb1206f..5f788aa4b 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml @@ -85,7 +85,7 @@ (#{item.id,jdbcType=BIGINT}, #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, #{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER}, - #{item.awardsItemRule,jdbcType=INTEGER},#{item.calculationMode,jdbcType=INTEGER}, + #{item.awardsItemRule,jdbcType=INTEGER}, #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}, #{item.maxAmount,jdbcType=DECIMAL},#{item.startingTaxPoint,jdbcType=DECIMAL},#{item.taxPoints,jdbcType=DECIMAL},#{item.cashBackPrice,jdbcType=DECIMAL},#{item.taxPointsAmount,jdbcType=DECIMAL}) From 8ddcbd2550b935f9e46f48a12fde1260a8b639f8 Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Tue, 25 Feb 2025 01:18:05 +0800 Subject: [PATCH 5/6] //offline --- .../db/migration/V202501000000001.sql | 38 +++++ .../domain/po/WxOfflineActivityGrantItem.java | 6 + .../po/WxOfflineActivityGrantSettlement.java | 12 ++ .../vo/OfflineActivityItemStatistics.java | 2 +- .../EnumOfflineActivityAwardsItemType.java | 74 ++++----- ...xOfflineActivityAwardsItemServiceImpl.java | 6 +- ...xOfflineActivityGrantAwardServiceImpl.java | 141 +++++++++--------- ...ineActivityGrantSettlementServiceImpl.java | 4 + .../WxOfflineActivityItemServiceImpl.java | 5 +- ...lineActivityItemStatisticsServiceImpl.java | 4 +- .../WxOfflineActivityGrantItemMapper.xml | 12 +- ...WxOfflineActivityGrantSettlementMapper.xml | 14 +- 12 files changed, 195 insertions(+), 123 deletions(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql b/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql index a4b2a9ece..7aea3bfd9 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql @@ -62,3 +62,41 @@ CREATE TABLE `wx_offline_activity_grant_item_record` ( ALTER TABLE `wx_offline_activity_grant_cash_back` DROP COLUMN `calculation_mode`; + + +ALTER TABLE `wx_offline_activity_grant_item` + ADD COLUMN `grant_awards_mode` smallint(1) NULL COMMENT '发放奖励模式' AFTER `grant_id`; + +update wx_offline_activity_grant_item set grant_awards_mode = 2 + where award_itam_id in (select id from wx_offline_activity_awards_item where `type` = 2); +update wx_offline_activity_grant_item set grant_awards_mode = 1 where award_itam_id is null ; + +ALTER TABLE `wx_offline_activity_grant_item` + MODIFY COLUMN `grant_awards_mode` smallint(1) NOT NULL COMMENT '发放奖励模式' AFTER `grant_id`; + + +ALTER TABLE `wx_offline_activity_grant_settlement` + ADD COLUMN `grant_item_id` bigint(20) NULL COMMENT '发放奖励记录id' AFTER `grant_id`, + ADD COLUMN `grant_awards_mode` smallint(20) NULL COMMENT '发放奖励模式' AFTER `grant_item_id`; + +update wx_offline_activity_grant_settlement gs + left join wx_offline_activity_grant_item gi + on gs.grant_id = gi.grant_id and gs.activity_item_id = gi.activity_item_id and gs.award_itam_id = gi.award_itam_id + set gs.grant_item_id = gi.id,gs.grant_awards_mode = gi.grant_awards_mode + where gi.record_id is null; + +update wx_offline_activity_grant_settlement gs + left join wx_offline_activity_grant_item gi + on gs.grant_id = gi.grant_id and gs.activity_item_id = gi.activity_item_id and gs.award_itam_id = gi.award_itam_id and gs.record_id = gi.record_id + set gs.grant_item_id = gi.id,gs.grant_awards_mode = gi.grant_awards_mode + where gi.record_id is not null; + +ALTER TABLE `wx_offline_activity_grant_settlement` + MODIFY COLUMN `grant_item_id` bigint(20) NOT NULL COMMENT '发放奖励记录id' AFTER `grant_id`, + MODIFY COLUMN `grant_awards_mode` smallint(20) NOT NULL COMMENT '发放奖励模式' AFTER `grant_item_id`; + + + + + + diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java index 2aacca789..d29579981 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java @@ -34,6 +34,12 @@ public class WxOfflineActivityGrantItem extends TenantEntity { @TableField(value = "grant_id") private Long grantId; + /** + * 发放奖励模式 + */ + @TableField(value = "grant_awards_mode") + private Integer grantAwardsMode; + /** * 活动id */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java index 0cd97296f..ea4e04d2e 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java @@ -85,6 +85,18 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { @TableField(value = "grant_id") private Long grantId; + /** + * 发放奖励记录id + */ + @TableField(value = "grant_item_id") + private Long grantItemId; + + /** + * 发放奖励模式 + */ + @TableField(value = "grant_awards_mode") + private Integer grantAwardsMode; + /** * 发放总价值 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityItemStatistics.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityItemStatistics.java index a0bf4f0e6..ef401075a 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityItemStatistics.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityItemStatistics.java @@ -22,7 +22,7 @@ public class OfflineActivityItemStatistics implements Serializable { private BigDecimal mallSumPrice;//商场承担 private BigDecimal merchantSumPrice;//商户承担 - private BigDecimal cashSumMoney;//订单返现* + private BigDecimal cashSumMoney;//金额返现* private BigDecimal cashSecondSumMoney;//联单返现* } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java index 0d41b696e..069ba754d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java @@ -1,37 +1,37 @@ -package com.iformall.enums; - - -/** - * @author gongbiao - */ -public enum EnumOfflineActivityAwardsItemType { - - FIRST(1, "基本奖项"), - SECOND(2, "第二奖项"), - ; - - public static EnumOfflineActivityAwardsItemType getEnum(Integer code) { - for (EnumOfflineActivityAwardsItemType value : values()) { - if (value.getCode().equals(code)) { - return value; - } - } - return null; - } - - private Integer code; - private String message; - - EnumOfflineActivityAwardsItemType(Integer code, String message) { - this.code = code; - this.message = message; - } - - public Integer getCode() { - return code; - } - - public String getMessage() { - return message; - } -} +//package com.iformall.enums; +// +// +///** +// * @author gongbiao +// */ +//public enum EnumOfflineActivityAwardsItemType { +// +// FIRST(1, "基本奖项"), +// SECOND(2, "第二奖项"), +// ; +// +// public static EnumOfflineActivityAwardsItemType getEnum(Integer code) { +// for (EnumOfflineActivityAwardsItemType value : values()) { +// if (value.getCode().equals(code)) { +// return value; +// } +// } +// return null; +// } +// +// private Integer code; +// private String message; +// +// EnumOfflineActivityAwardsItemType(Integer code, String message) { +// this.code = code; +// this.message = message; +// } +// +// public Integer getCode() { +// return code; +// } +// +// public String getMessage() { +// return message; +// } +//} diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java index 30145209a..10584bff5 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java @@ -3,7 +3,7 @@ package com.iformall.service.impl; import com.iformall.common.IdWorker; import com.iformall.domain.po.WxOfflineActivityAwardsItem; import com.iformall.domain.po.WxOfflineActivityItem; -import com.iformall.enums.EnumOfflineActivityAwardsItemType; +import com.iformall.enums.EnumOfflineActivityAwardsModeType; import com.iformall.enums.EnumOfflineActivityType; import com.iformall.service.WxOfflineActivityAwardsItemService; import com.iformall.mapper.WxOfflineActivityAwardsItemMapper; @@ -43,7 +43,7 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity } awaItem.updateTenantInfo(activityItem); awaItem.setActivityItemId(activityItem.getId()); - awaItem.setType(EnumOfflineActivityAwardsItemType.FIRST.getCode()); + awaItem.setType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ awaItem.setCashBackRatio(BigDecimal.ZERO); @@ -73,7 +73,7 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity } secondAwaItem.updateTenantInfo(activityItem); secondAwaItem.setActivityItemId(activityItem.getId()); - secondAwaItem.setType(EnumOfflineActivityAwardsItemType.SECOND.getCode()); + secondAwaItem.setType(EnumOfflineActivityAwardsModeType.COUNT.getCode()); if(secondAwaItem.getCreateDate() == null){ secondAwaItem.setCreateDate(activityItem.getUpdateDate()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index ddd44d151..b64f59a32 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -219,7 +219,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); //处理发放奖项 - handleGiftAwards(activityItem,activityItem.getRecordList()); + handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); activityItem.setIsMeet(true); if(activityItem.getActivityGrantItemList() == null || activityItem.getActivityGrantItemList().isEmpty()){ activityItem.setIsMeet(false); @@ -230,8 +230,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity BigDecimal cashBackPriceTotal = BigDecimal.ZERO; List grantItemList = new ArrayList<>(); - BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); //单笔订单计算 if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ @@ -285,7 +283,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ -// BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); // if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ // if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ // orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() @@ -312,13 +310,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } - Integer jointCount = getJointCount(activityItem,activityItem.getRecordList()); + Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount); if(grantAwardsSecondItem != null){ //计算返现金额 - BigDecimal cashBackPrice = orderMoneySum + BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() .multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); } @@ -408,6 +406,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } + //这里是联单, 按选择的订单计算 Integer jointCount = getJointCount(activityItem,recordList); if(jointCount != 0){ Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); @@ -425,6 +424,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } private void handleGiftAwards(WxOfflineActivityItem activityItem, List recordList){ + List grantItem = new ArrayList<>(); Map grantItemMap = new HashMap<>(); Map awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getGrade, Function.identity())); @@ -442,27 +442,28 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity break; } WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(awardsGrade); + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); if(wxOfflineActivityGrantItem != null){ wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); + wxOfflineActivityGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(wxOfflineActivityGrantItem.getAwardCount()))); }else{ - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); if(awardsItem != null){ - wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem,EnumOfflineActivityAwardsModeType.AMOUNT, awardsItem); grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); } } } }else{ BigDecimal orderMoneySum = recordList.stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ -// if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ -// orderMoneySum = recordList.stream() -// .filter(record -> activityItem.getRecordIds().contains(record.getId())) -// .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); -// }else{ -// orderMoneySum = BigDecimal.ZERO; -// } -// } + if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ + if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ + orderMoneySum = recordList.stream() + .filter(record -> activityItem.getRecordIds().contains(record.getId())) + .map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + }else{ + orderMoneySum = BigDecimal.ZERO; + } + } Integer awardsGrade = null; for (WxOfflineActivityAwardsModel activityAwardsModel :activityItem.getActivityAwardsModelList()){ if((activityAwardsModel.getMinAmount() == null || orderMoneySum.compareTo(activityAwardsModel.getMinAmount()) >= 0) @@ -473,33 +474,46 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(awardsGrade != null){ WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); if(awardsItem != null){ - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem,EnumOfflineActivityAwardsModeType.AMOUNT, awardsItem); grantItemMap.put(awardsGrade, wxOfflineActivityGrantItem); } } } + if(!grantItemMap.isEmpty()){ + grantItem.addAll(grantItemMap.values()); + } + + //这里是联单, 按所有订单计算 + WxOfflineActivityGrantItem wxOfflineActivityGrantItem = null; Integer jointCount = getJointCount(activityItem,recordList); if(jointCount != 0){ Map jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); if(activityAwardsModel != null && activityAwardsModel.getAwardsGrade() != null){ - WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(activityAwardsModel.getAwardsGrade()); - if(wxOfflineActivityGrantItem != null){ - wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); - }else{ - WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); - if(awardsItem != null){ - wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); - grantItemMap.put(activityAwardsModel.getAwardsGrade(), wxOfflineActivityGrantItem); - } + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); + if(awardsItem != null){ + wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, EnumOfflineActivityAwardsModeType.COUNT,awardsItem); } + +// WxOfflineActivityGrantItem wxOfflineActivityGrantItem = grantItemMap.get(activityAwardsModel.getAwardsGrade()); +// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(activityAwardsModel.getAwardsGrade()); +// if(wxOfflineActivityGrantItem != null){ +// wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); +// wxOfflineActivityGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(wxOfflineActivityGrantItem.getAwardCount()))); +// }else{ +// if(awardsItem != null){ +// wxOfflineActivityGrantItem = createGrantItemFromGrant(activityItem, awardsItem); +// grantItemMap.put(activityAwardsModel.getAwardsGrade(), wxOfflineActivityGrantItem); +// } +// } } } - if(!grantItemMap.isEmpty()){ - activityItem.setActivityGrantItemList(new ArrayList<>(grantItemMap.values())); + if(wxOfflineActivityGrantItem != null){ + grantItem.add(wxOfflineActivityGrantItem); } + activityItem.setActivityGrantItemList(grantItem); } private Integer getJointCount(WxOfflineActivityItem activityItem, List recordList){ @@ -519,8 +533,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity return jointCount; } - private WxOfflineActivityGrantItem createGrantItemFromGrant(WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem grantAwardsItem){ + private WxOfflineActivityGrantItem createGrantItemFromGrant(WxOfflineActivityItem activityItem,EnumOfflineActivityAwardsModeType modeType,WxOfflineActivityAwardsItem grantAwardsItem){ WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); + grantItem.setGrantAwardsMode(modeType.getCode()); grantItem.setActivityItemId(activityItem.getId()); grantItem.setActivityItemName(activityItem.getName()); grantItem.setActivityItemType(activityItem.getType()); @@ -702,8 +717,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity activityGrantItemList = grantActivityItem.getActivityGrantItemList(); } - if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType()) - || EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ + if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ continue; } @@ -711,12 +725,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity // throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); // } - boolean isRepeat = activityGrantItemList.stream() - .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) - .entrySet().stream().anyMatch(e -> e.getValue() > 1); - if(isRepeat){ - throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); - } +// boolean isRepeat = activityGrantItemList.stream() +// .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) +// .entrySet().stream().anyMatch(e -> e.getValue() > 1); +// if(isRepeat){ +// throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); +// } for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { if(grantGrantItem.getAwardItamId() == null){ @@ -726,45 +740,27 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(awardsItem == null){ throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); } - + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); } activityItem.setActivityGrantItemList(activityGrantItemList); } -// else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ -// if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ -// continue; -// } -// -// boolean isRepeat = activityGrantItemList.stream() -// .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) -// .entrySet().stream().anyMatch(e -> e.getValue() > 1); -// if(isRepeat){ -// throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); -// } -// -// for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { -// if(grantGrantItem.getAwardItamId() == null){ -// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); -// } -// WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); -// if(awardsItem == null){ -// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); -// } -// -// handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); -// } -// -// activityItem.setActivityGrantItemList(activityGrantItemList); -// -// } + else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ + handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); + if(activityItem.getActivityGrantItemList().isEmpty()){ + continue; + } + + for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { + WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); + handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); + } + } else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { BigDecimal cashBackPriceTotal = BigDecimal.ZERO; activityGrantItemList = new ArrayList<>(); - BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); - List sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); //单笔订单计算 if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ @@ -779,6 +775,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity if(grantAwardsItem != null){ WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); grantGrantItem.setRecordId(record.getId()); + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); //计算返现金额 BigDecimal cashBackPrice = record.getOrderMoney() .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); @@ -793,7 +790,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } }else{ -// BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); // if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ // if(activityItem.getRecordIds() != null && !activityItem.getRecordIds().isEmpty()){ // orderMoneySum = wxOfflineActivityGrantAward.getRecordList().stream() @@ -813,6 +810,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } if(grantAwardsItem != null){ WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); //计算返现金额 BigDecimal cashBackPrice = orderMoneySum .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); @@ -824,14 +822,15 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } - Integer jointCount = getJointCount(activityItem,activityItem.getRecordList()); + Integer jointCount = getJointCount(activityItem,wxOfflineActivityGrantAward.getRecordList()); if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); WxOfflineActivityAwardsItem awardsSecondItem = jointCountMap.get(jointCount); if(awardsSecondItem != null){ WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); + grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.COUNT.getCode()); //计算返现金额 - BigDecimal cashBackPrice = orderMoneySum + BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); awardsSecondItem.setPrice(cashBackPrice); handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java index ee94af6a4..956ed7de6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java @@ -116,6 +116,8 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct settlement.setActivityItemId(wxOfflineActivityGrantItem.getActivityItemId()); settlement.setAwardItamId(wxOfflineActivityGrantItem.getAwardItamId()); settlement.setGrantId(wxOfflineActivityGrantItem.getGrantId()); + settlement.setGrantItemId(wxOfflineActivityGrantItem.getId()); + settlement.setGrantAwardsMode(wxOfflineActivityGrantItem.getGrantAwardsMode()); settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate()); @@ -145,6 +147,8 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct settlement.setActivityItemId(wxOfflineActivityGrantItem.getActivityItemId()); settlement.setAwardItamId(wxOfflineActivityGrantItem.getAwardItamId()); settlement.setGrantId(wxOfflineActivityGrantItem.getGrantId()); + settlement.setGrantItemId(wxOfflineActivityGrantItem.getId()); + settlement.setGrantAwardsMode(wxOfflineActivityGrantItem.getGrantAwardsMode()); settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java index 925e4ffaa..8eb84fe7f 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java @@ -6,7 +6,6 @@ import com.iformall.domain.po.WxOfflineActivityAwardsItem; import com.iformall.domain.po.WxOfflineActivityAwardsModel; import com.iformall.domain.po.WxOfflineActivityItem; import com.iformall.enums.EnumOfflineActivityAwardsModeType; -import com.iformall.enums.EnumOfflineActivityAwardsItemType; import com.iformall.enums.EnumOfflineActivityAwardsRule; import com.iformall.enums.EnumOfflineActivityType; import com.iformall.service.WxOfflineActivityAwardsItemService; @@ -93,8 +92,8 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe List activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); if(EnumOfflineActivityType.CASHBACK.getCode().equals(item.getType())){ Map> collect = activityAwardsItemList.stream().collect(Collectors.groupingBy(WxOfflineActivityAwardsItem::getType)); - item.setActivityAwardsItemList(collect.get(EnumOfflineActivityAwardsItemType.FIRST.getCode())); - item.setActivityAwardsItemSecondList(collect.get(EnumOfflineActivityAwardsItemType.SECOND.getCode())); + item.setActivityAwardsItemList(collect.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode())); + item.setActivityAwardsItemSecondList(collect.get(EnumOfflineActivityAwardsModeType.COUNT.getCode())); }else{ item.setActivityAwardsItemList(activityAwardsItemList); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemStatisticsServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemStatisticsServiceImpl.java index 6c8e0dc83..f64b6aa1b 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemStatisticsServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemStatisticsServiceImpl.java @@ -3,7 +3,7 @@ package com.iformall.service.impl; import com.iformall.common.Result; import com.iformall.domain.po.*; import com.iformall.domain.vo.*; -import com.iformall.enums.EnumOfflineActivityAwardsItemType; +import com.iformall.enums.EnumOfflineActivityAwardsModeType; import com.iformall.enums.EnumOfflineActivityType; import com.iformall.exception.MallinkException; import com.iformall.mapper.*; @@ -78,7 +78,7 @@ public class WxOfflineActivityItemStatisticsServiceImpl implements WxOfflineActi WxOfflineActivityAwardsItem activityAwardsItemQ = new WxOfflineActivityAwardsItem(); activityAwardsItemQ.updateTenantInfo(activityItemStatisticsBo); activityAwardsItemQ.setActivityItemId(activityItemStatisticsBo.getActivityItemId()); - activityAwardsItemQ.setType(EnumOfflineActivityAwardsItemType.FIRST.getCode()); + activityAwardsItemQ.setType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); List activityAwardsItemList = wxOfflineActivityAwardsItemMapper.findList(activityAwardsItemQ); if(activityAwardsItemList != null && !activityAwardsItemList.isEmpty()) { return activityAwardsItemList.stream().map(WxOfflineActivityAwardsItem::getId).collect(Collectors.toList()); diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml index 86d5c2508..e7c0bebf8 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml @@ -9,6 +9,8 @@ + + @@ -34,7 +36,7 @@ id,tenant_id,parent_tenant_id, - grant_id,activity_id,activity_name, + grant_id,grant_awards_mode,activity_id,activity_name, activity_item_id,activity_item_name,activity_item_type, award_itam_id,award_name,award_grade, award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, @@ -61,6 +63,10 @@ and `grant_id` = #{grantId} + + and `grant_awards_mode` = #{grantAwardsMode} + + and `activity_id` = #{activityId} @@ -92,7 +98,7 @@ insert into wx_offline_activity_grant_item (id, - grant_id,activity_id,activity_name, + grant_id,grant_awards_mode,activity_id,activity_name, activity_item_id,activity_item_name,activity_item_type, award_itam_id,award_name,award_grade, award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, @@ -102,7 +108,7 @@ values (#{item.id,jdbcType=BIGINT}, - #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, + #{item.grantId,jdbcType=BIGINT},#{item.grantAwardsMode,jdbcType=INTEGER},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, #{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER}, #{item.awardItamId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.awardGrade,jdbcType=INTEGER}, #{item.awardMinAmount,jdbcType=DECIMAL},#{item.awardMaxAmount,jdbcType=DECIMAL},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL}, diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml index 1652f5857..7a607b0a8 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml @@ -16,6 +16,8 @@ + + @@ -32,7 +34,7 @@ id,tenant_id,parent_tenant_id, record_id,order_no,order_money, merchant_id,activity_id,activity_item_id, - award_itam_id,grant_id,grant_price, + award_itam_id,grant_id,grant_item_id,grant_awards_mode,grant_price, mall_share_rate,merchant_share_rate,order_ratio, real_grant_price,real_mall_share_price,real_merchant_share_price, create_date,update_date @@ -74,6 +76,12 @@ and `grant_id` = #{grantId} + + and `grant_item_id` = #{grantItemId} + + + and `grant_awards_mode` = #{grantAwardsMode} + and `create_date` >= #{createDateBegin} @@ -110,7 +118,7 @@ (id, record_id,order_no,order_money, merchant_id,activity_id,activity_item_id, - award_itam_id,grant_id,grant_price, + award_itam_id,grant_id,grant_item_id,grant_awards_mode,grant_price, mall_share_rate,merchant_share_rate,order_ratio, real_grant_price,real_mall_share_price,real_merchant_share_price, create_date,update_date) @@ -119,7 +127,7 @@ (#{item.id,jdbcType=BIGINT}, #{item.recordId,jdbcType=BIGINT},#{item.orderNo,jdbcType=VARCHAR},#{item.orderMoney,jdbcType=DECIMAL}, #{item.merchantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityItemId,jdbcType=BIGINT}, - #{item.awardItamId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantPrice,jdbcType=DECIMAL}, + #{item.awardItamId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantItemId,jdbcType=BIGINT},#{item.grantAwardsMode,jdbcType=INTEGER},#{item.grantPrice,jdbcType=DECIMAL}, #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},#{item.orderRatio,jdbcType=DECIMAL}, #{item.realGrantPrice,jdbcType=DECIMAL},#{item.realMallSharePrice,jdbcType=DECIMAL},#{item.realMerchantSharePrice,jdbcType=DECIMAL}, #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) From 8d82405ae2066943ab24de52bf83753f9a38ce8e Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Tue, 25 Feb 2025 14:17:37 +0800 Subject: [PATCH 6/6] //offline --- .../src/main/resources/db/migration/V202501000000001.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql b/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql index 7aea3bfd9..e50fe7be6 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202501000000001.sql @@ -69,7 +69,7 @@ ALTER TABLE `wx_offline_activity_grant_item` update wx_offline_activity_grant_item set grant_awards_mode = 2 where award_itam_id in (select id from wx_offline_activity_awards_item where `type` = 2); -update wx_offline_activity_grant_item set grant_awards_mode = 1 where award_itam_id is null ; +update wx_offline_activity_grant_item set grant_awards_mode = 1 where grant_awards_mode is null ; ALTER TABLE `wx_offline_activity_grant_item` MODIFY COLUMN `grant_awards_mode` smallint(1) NOT NULL COMMENT '发放奖励模式' AFTER `grant_id`;