| @@ -0,0 +1,102 @@ | |||
| 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`; | |||
| 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 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`; | |||
| 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`; | |||
| @@ -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; | |||
| } | |||
| @@ -68,12 +68,6 @@ public class WxOfflineActivityGrantCashBack extends TenantEntity { | |||
| @TableField(value = "awards_item_rule") | |||
| private Integer awardsItemRule; | |||
| /** | |||
| * 返现计算模式 | |||
| */ | |||
| @TableField(value = "calculation_mode") | |||
| private Integer calculationMode; | |||
| /** | |||
| * 返现封顶金额 | |||
| */ | |||
| @@ -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 | |||
| */ | |||
| @@ -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; | |||
| } | |||
| @@ -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; | |||
| /** | |||
| * 发放总价值 | |||
| */ | |||
| @@ -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<WxOfflineActivityAwardsModel> activityAwardsModelList; | |||
| @TableField(exist = false) | |||
| private List<WxOfflineActivityAwardsModel> 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<Long> recordIds; | |||
| @TableField(exist = false) | |||
| private List<WxOfflineActivityRecord> recordList; | |||
| } | |||
| @@ -152,6 +152,8 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| @TableField(value = "business_id") | |||
| private Integer businessId; | |||
| @TableField(exist = false) | |||
| private String businessName; | |||
| /** | |||
| * 创建时间 | |||
| @@ -22,7 +22,7 @@ public class OfflineActivityItemStatistics implements Serializable { | |||
| private BigDecimal mallSumPrice;//商场承担 | |||
| private BigDecimal merchantSumPrice;//商户承担 | |||
| private BigDecimal cashSumMoney;//订单返现* | |||
| private BigDecimal cashSumMoney;//金额返现* | |||
| private BigDecimal cashSecondSumMoney;//联单返现* | |||
| } | |||
| @@ -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; | |||
| // } | |||
| //} | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| // } | |||
| //} | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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, Long> { | |||
| WxOfflineActivityAwardsModel selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | |||
| List<WxOfflineActivityAwardsModel> findList(WxOfflineActivityAwardsModel wxOfflineActivityAwardsModel); | |||
| Integer itemCount(WxOfflineActivityAwardsModel wxOfflineActivityAwardsModel); | |||
| void delete(WxOfflineActivityAwardsModel wxOfflineActivityAwardsModel); | |||
| } | |||
| @@ -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<WxOfflineActivityGrantItemRecord, Long> { | |||
| void insertList(@Param("grantItemRecordList")List<WxOfflineActivityGrantItemRecord> grantItemRecordList); | |||
| } | |||
| @@ -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<WxOfflineActivityAwardsModel> activityAwardsModelList, List<WxOfflineActivityAwardsModel> activityAwardsModelSecondList); | |||
| List<WxOfflineActivityAwardsModel> getActivityAwardsModelList(Long activityItemId, String tenantId); | |||
| } | |||
| @@ -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); | |||
| } | |||
| @@ -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; | |||
| @@ -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){ | |||
| @@ -42,11 +43,10 @@ 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); | |||
| awaItem.setGrade(-1); | |||
| awaItem.setMinAmount(null); | |||
| awaItem.setMaxAmount(null); | |||
| } | |||
| @@ -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()); | |||
| @@ -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<WxOfflineActivityAwardsModel> activityAwardsModelList, | |||
| List<WxOfflineActivityAwardsModel> 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<WxOfflineActivityAwardsModel> getActivityAwardsModelList(Long activityItemId, String tenantId) { | |||
| WxOfflineActivityAwardsModel activityAwardsModelQuery = new WxOfflineActivityAwardsModel(); | |||
| activityAwardsModelQuery.setActivityItemId(activityItemId); | |||
| activityAwardsModelQuery.setTenantId(tenantId); | |||
| List<WxOfflineActivityAwardsModel> activityAwardsModelList = wxOfflineActivityAwardsModelMapper.findList(activityAwardsModelQuery); | |||
| return activityAwardsModelList; | |||
| } | |||
| } | |||
| @@ -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,80 +176,65 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(activity.getStatus())){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动状态"); | |||
| } | |||
| //订单合并 | |||
| //订单合并计算 | |||
| handlerGrantData(activity,wxOfflineActivityGrantAward,true); | |||
| //奖项处理 | |||
| //订单参数处理 | |||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||
| if(wxOfflineActivityGrantAward.getActivityItemList() != null && !wxOfflineActivityGrantAward.getActivityItemList().isEmpty()){ | |||
| Map<Long, List<Long>> ActivityItemRecordMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, WxOfflineActivityItem::getRecordIds)); | |||
| for (WxOfflineActivityItem activityItem : activityItemList) { | |||
| if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(activityItem.getModeType())){ | |||
| List<Long> records = ActivityItemRecordMap.get(activityItem.getId()); | |||
| if(records == null || records.isEmpty()){ | |||
| throw new MallinkException(Result.ERROR, "发奖未选择订单"); | |||
| } | |||
| activityItem.setRecordIds(records); | |||
| List<WxOfflineActivityRecord> collect = wxOfflineActivityGrantAward.getRecordList().stream() | |||
| .filter(record -> activityItem.getRecordIds().contains(record.getId())).collect(toList()); | |||
| activityItem.setRecordList(collect); | |||
| }else{ | |||
| activityItem.setRecordList(wxOfflineActivityGrantAward.getRecordList()); | |||
| } | |||
| } | |||
| } | |||
| 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,activityItem.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<WxOfflineActivityAwardsItem> 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<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); | |||
| List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); | |||
| //单笔订单计算 | |||
| if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ | |||
| for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ | |||
| if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ | |||
| for (WxOfflineActivityRecord record : activityItem.getRecordList()){ | |||
| WxOfflineActivityAwardsItem grantAwardsItem = null; | |||
| for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ | |||
| if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) | |||
| @@ -300,27 +283,37 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| } | |||
| }else{ | |||
| 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){ | |||
| 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<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); | |||
| Map<Integer, WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); | |||
| WxOfflineActivityAwardsItem grantAwardsSecondItem = jointCountMap.get(jointCount); | |||
| if(grantAwardsSecondItem != null){ | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| @@ -348,7 +341,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 +377,184 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| } | |||
| } | |||
| private void handleLotteryDrawCount(WxOfflineActivityItem activityItem, List<WxOfflineActivityRecord> 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())){ | |||
| // 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); | |||
| if(jointCount != 0){ | |||
| Map<Integer, WxOfflineActivityAwardsModel> jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); | |||
| WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); | |||
| if(activityAwardsModel != null && activityAwardsModel.getAwardsCount() != null){ | |||
| 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<WxOfflineActivityRecord> recordList){ | |||
| List<WxOfflineActivityGrantItem> grantItem = new ArrayList<>(); | |||
| Map<Integer,WxOfflineActivityGrantItem> grantItemMap = new HashMap<>(); | |||
| Map<Integer, WxOfflineActivityAwardsItem> 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); | |||
| WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(awardsGrade); | |||
| if(wxOfflineActivityGrantItem != null){ | |||
| wxOfflineActivityGrantItem.setAwardCount(wxOfflineActivityGrantItem.getAwardCount() + 1); | |||
| wxOfflineActivityGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(wxOfflineActivityGrantItem.getAwardCount()))); | |||
| }else{ | |||
| if(awardsItem != null){ | |||
| 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; | |||
| } | |||
| } | |||
| 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); | |||
| if(awardsItem != null){ | |||
| 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<Integer, WxOfflineActivityAwardsModel> jointCountMap = activityItem.getActivityAwardsModelSecondList().stream().collect(toMap(WxOfflineActivityAwardsModel::getMerchantCount, Function.identity())); | |||
| WxOfflineActivityAwardsModel activityAwardsModel = jointCountMap.get(jointCount); | |||
| if(activityAwardsModel != null && activityAwardsModel.getAwardsGrade() != null){ | |||
| 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(wxOfflineActivityGrantItem != null){ | |||
| grantItem.add(wxOfflineActivityGrantItem); | |||
| } | |||
| activityItem.setActivityGrantItemList(grantItem); | |||
| } | |||
| private Integer getJointCount(WxOfflineActivityItem activityItem, List<WxOfflineActivityRecord> recordList){ | |||
| Integer jointCount = 0; | |||
| if(recordList == null || recordList.isEmpty()){ | |||
| return jointCount; | |||
| } | |||
| if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(activityItem.getCountModel())){ | |||
| //商户联单 | |||
| List<Long> merchantIds = recordList.stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); | |||
| jointCount = merchantIds.size(); | |||
| }else if(EnumOfflineActivityCountMode.BUSINESS_MODEL.getCode().equals(activityItem.getCountModel())){ | |||
| //业态联单 | |||
| List<Integer> businessIds = recordList.stream().map(WxOfflineActivityRecord::getBusinessId).distinct().collect(toList()); | |||
| jointCount = businessIds.size(); | |||
| } | |||
| return jointCount; | |||
| } | |||
| 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()); | |||
| 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 +594,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 +612,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| upd.setUpdateDate(now); | |||
| wxOfflineActivityGrantAwardMapper.updateStatusNo(upd); | |||
| //创建订单关联 | |||
| wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward); | |||
| wxOfflineActivityGrantItemRecordService.insertFromGrantAward(wxOfflineActivityGrantAward); | |||
| //处理奖项 | |||
| handlerGrantItem(activity,wxOfflineActivityGrantAward); | |||
| @@ -518,13 +691,27 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||
| int i = 0;//检查活动奖项 | |||
| for (WxOfflineActivityItem activityItem : activityItemList) { | |||
| Map<Long, WxOfflineActivityAwardsItem> 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<WxOfflineActivityRecord> collect = wxOfflineActivityGrantAward.getRecordList().stream() | |||
| .filter(record -> activityItem.getRecordIds().contains(record.getId())).collect(toList()); | |||
| activityItem.setRecordList(collect); | |||
| }else{ | |||
| activityItem.setRecordList(wxOfflineActivityGrantAward.getRecordList()); | |||
| } | |||
| //获取发放奖项 | |||
| List<WxOfflineActivityGrantItem> activityGrantItemList = null; | |||
| if(grantActivityItem != null){ | |||
| activityGrantItemList = grantActivityItem.getActivityGrantItemList(); | |||
| @@ -534,30 +721,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||
| continue; | |||
| } | |||
| if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | |||
| 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, "请检查活动奖项存在重复"); | |||
| } | |||
| //奖项限制数量 | |||
| 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()+"奖券超过限制"); | |||
| } | |||
| // if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | |||
| // 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, "请检查活动奖项存在重复"); | |||
| // } | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { | |||
| if(grantGrantItem.getAwardItamId() == null){ | |||
| @@ -567,40 +740,22 @@ 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()){ | |||
| handleGiftAwards(activityItem,wxOfflineActivityGrantAward.getRecordList()); | |||
| if(activityItem.getActivityGrantItemList().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()+"奖项参数(金额不在范围类)"); | |||
| // } | |||
| 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()+"奖项参数(金额不在范围类)"); | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { | |||
| WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||
| } | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||
| activityItem.setActivityGrantItemList(activityGrantItemList); | |||
| } | |||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | |||
| BigDecimal cashBackPriceTotal = BigDecimal.ZERO; | |||
| @@ -608,8 +763,8 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); | |||
| //单笔订单计算 | |||
| if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ | |||
| for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ | |||
| if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ | |||
| for (WxOfflineActivityRecord record : activityItem.getRecordList()){ | |||
| WxOfflineActivityAwardsItem grantAwardsItem = null; | |||
| for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ | |||
| if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) | |||
| @@ -620,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))); | |||
| @@ -634,18 +790,29 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| } | |||
| }else{ | |||
| 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){ | |||
| 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(); | |||
| grantGrantItem.setGrantAwardsMode(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| BigDecimal cashBackPrice = orderMoneySum | |||
| .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| grantAwardsItem.setPrice(cashBackPrice); | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); | |||
| @@ -653,15 +820,15 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| activityGrantItemList.add(grantGrantItem); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ | |||
| List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); | |||
| Map<Integer, WxOfflineActivityAwardsItem> 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<Integer, WxOfflineActivityAwardsItem> 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 = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| @@ -671,7 +838,6 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| activityGrantItemList.add(grantGrantItem); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| BigDecimal prop = BigDecimal.ONE; | |||
| @@ -707,7 +873,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()); | |||
| @@ -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<WxOfflineActivityGrantItemRecord> grantItemRecordList = new ArrayList<>(); | |||
| Map<Long, WxOfflineActivityRecord> 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); | |||
| } | |||
| } | |||
| @@ -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<Long, WxOfflineActivityRecord> recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity())); | |||
| //获取订单占比(占比最少的订单用减法,尽量减少误差) | |||
| List<WxOfflineActivityRecord> 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<size; i++){ | |||
| WxOfflineActivityRecord record = recordDescList.get(i); | |||
| BigDecimal orderRatio = record.getOrderMoney() | |||
| .divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP) | |||
| .multiply(new BigDecimal(100)); | |||
| record.setOrderRatio(orderRatio); | |||
| lastRatio = lastRatio.subtract(orderRatio); | |||
| } | |||
| recordDescList.get(size).setOrderRatio(lastRatio); | |||
| // List<WxOfflineActivityRecord> 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<size; i++){ | |||
| // WxOfflineActivityRecord record = recordDescList.get(i); | |||
| // BigDecimal orderRatio = record.getOrderMoney() | |||
| // .divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP) | |||
| // .multiply(new BigDecimal(100)); | |||
| // record.setOrderRatio(orderRatio); | |||
| // lastRatio = lastRatio.subtract(orderRatio); | |||
| // } | |||
| // recordDescList.get(size).setOrderRatio(lastRatio); | |||
| for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||
| if(activityItem.getActivityGrantItemList() == null){ | |||
| continue; | |||
| } | |||
| //获取订单占比(占比最少的订单用减法,尽量减少误差) | |||
| List<WxOfflineActivityRecord> 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<size; i++){ | |||
| WxOfflineActivityRecord record = recordDescList.get(i); | |||
| BigDecimal orderRatio = record.getOrderMoney() | |||
| .divide(orderMoneySum,4,RoundingMode.HALF_UP) | |||
| .multiply(new BigDecimal(100)); | |||
| record.setOrderRatio(orderRatio); | |||
| lastRatio = lastRatio.subtract(orderRatio); | |||
| } | |||
| recordDescList.get(size).setOrderRatio(lastRatio); | |||
| for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | |||
| List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); | |||
| if(wxOfflineActivityGrantItem.getRecordId() != null){ | |||
| @@ -93,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()); | |||
| @@ -122,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()); | |||
| @@ -3,18 +3,19 @@ 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.EnumOfflineActivityAwardsItemType; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsModeType; | |||
| 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 +34,9 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe | |||
| @Autowired | |||
| WxOfflineActivityAwardsItemService wxOfflineActivityAwardsItemService; | |||
| @Autowired | |||
| WxOfflineActivityAwardsModelService wxOfflineActivityAwardsModelService; | |||
| @Override | |||
| public void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List<WxOfflineActivityItem> activityItemList) { | |||
| WxOfflineActivityItem activityItemDel = new WxOfflineActivityItem(); | |||
| @@ -70,6 +74,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()); | |||
| } | |||
| @@ -85,11 +92,17 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe | |||
| List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); | |||
| if(EnumOfflineActivityType.CASHBACK.getCode().equals(item.getType())){ | |||
| Map<Integer, List<WxOfflineActivityAwardsItem>> 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); | |||
| List<WxOfflineActivityAwardsModel> activityAwardsModelList = wxOfflineActivityAwardsModelService.getActivityAwardsModelList(item.getId(), tenantId); | |||
| Map<Integer, List<WxOfflineActivityAwardsModel>> collect = activityAwardsModelList.stream().collect(Collectors.groupingBy(WxOfflineActivityAwardsModel::getModelType)); | |||
| item.setActivityAwardsModelList(collect.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode())); | |||
| item.setActivityAwardsModelSecondList(collect.get(EnumOfflineActivityAwardsModeType.COUNT.getCode())); | |||
| } | |||
| } | |||
| return itemList; | |||
| } | |||
| @@ -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<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemMapper.findList(activityAwardsItemQ); | |||
| if(activityAwardsItemList != null && !activityAwardsItemList.isEmpty()) { | |||
| return activityAwardsItemList.stream().map(WxOfflineActivityAwardsItem::getId).collect(Collectors.toList()); | |||
| @@ -156,6 +156,8 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||
| userMap = mallUserInfoService.getUserMap(userInfoQ); | |||
| } | |||
| Map<Integer, WxBusiness> 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()); | |||
| @@ -0,0 +1,79 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityAwardsModelMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityAwardsModel"> | |||
| <id property="id" column="id" jdbcType="BIGINT"/> | |||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||
| <result property="modelType" column="model_type" jdbcType="INTEGER"/> | |||
| <result property="merchantCount" column="merchant_count" jdbcType="INTEGER"/> | |||
| <result property="minAmount" column="min_amount" jdbcType="DECIMAL"/> | |||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | |||
| <result property="awardsCount" column="awards_count" jdbcType="INTEGER"/> | |||
| <result property="awardsGrade" column="awards_grade" jdbcType="INTEGER"/> | |||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| 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 | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| where 1 = 1 | |||
| <if test=" null != id "> | |||
| and `id` = #{id} | |||
| </if> | |||
| <if test=" null != tenantId and '' != tenantId"> | |||
| and `tenant_id` = #{tenantId} | |||
| </if> | |||
| <if test=" null != parentTenantId and '' != parentTenantId"> | |||
| and `parent_tenant_id` = #{parentTenantId} | |||
| </if> | |||
| <if test=" null != activityItemId "> | |||
| and `activity_item_id` = #{activityItemId} | |||
| </if> | |||
| <if test=" null != modelType "> | |||
| and `model_type` = #{modelType} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| #{idItem} | |||
| </foreach> | |||
| </if> | |||
| <if test=" null != sortColumns"> order by ${sortColumns} </if> | |||
| </sql> | |||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" /> from wx_offline_activity_awards_model where id = #{id} and tenant_id=#{tenantId} | |||
| </select> | |||
| <select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsModel" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" /> from wx_offline_activity_awards_model | |||
| <include refid="dynamicWhereConditions" /> | |||
| </select> | |||
| <select id="itemCount" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsModel" resultType="Integer"> | |||
| select count(1) from wx_offline_activity_awards_model where `activity_item_id` = #{activityItemId} and tenant_id=#{tenantId} | |||
| </select> | |||
| <delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsModel"> | |||
| delete from wx_offline_activity_awards_model | |||
| <include refid="dynamicWhereConditions" /> | |||
| </delete> | |||
| </mapper> | |||
| @@ -16,7 +16,6 @@ | |||
| <result property="activityItemType" column="activity_item_type" jdbcType="SMALLINT"/> | |||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | |||
| <result property="calculationMode" column="calculation_mode" jdbcType="SMALLINT"/> | |||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||
| @@ -30,7 +29,7 @@ | |||
| <sql id="allColumns"> | |||
| 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 | |||
| </sql> | |||
| @@ -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 | |||
| @@ -86,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}) | |||
| </foreach> | |||
| @@ -9,6 +9,8 @@ | |||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||
| <result property="grantAwardsMode" column="grant_awards_mode" jdbcType="SMALLINT"/> | |||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||
| <result property="activityName" column="activity_name" jdbcType="VARCHAR"/> | |||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||
| @@ -34,7 +36,7 @@ | |||
| <sql id="allColumns"> | |||
| 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} | |||
| </if> | |||
| <if test=" null != grantAwardsMode"> | |||
| and `grant_awards_mode` = #{grantAwardsMode} | |||
| </if> | |||
| <if test=" null != activityId"> | |||
| and `activity_id` = #{activityId} | |||
| </if> | |||
| @@ -92,7 +98,7 @@ | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| 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 | |||
| <foreach collection="grantItemList" item="item" index="index" separator=","> | |||
| (#{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}, | |||
| @@ -0,0 +1,33 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <!DOCTYPE mapper | |||
| PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" | |||
| "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.iformall.mapper.WxOfflineActivityGrantItemRecordMapper"> | |||
| <resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantItemRecord"> | |||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||
| <result property="recordId" column="record_id" jdbcType="BIGINT"/> | |||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| tenant_id,parent_tenant_id,activity_id,activity_item_id, | |||
| record_id,grant_id | |||
| </sql> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_offline_activity_grant_item_record | |||
| (`activity_id`,`activity_item_id`,`record_id`,`grant_id`) | |||
| values | |||
| <foreach collection="grantItemRecordList" item="item" index="index" separator=","> | |||
| (#{item.activityId,jdbcType=BIGINT}, | |||
| #{item.activityItemId,jdbcType=BIGINT}, | |||
| #{item.recordId,jdbcType=BIGINT}, | |||
| #{item.grantId,jdbcType=BIGINT}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||
| @@ -16,6 +16,8 @@ | |||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||
| <result property="awardItamId" column="award_itam_id" jdbcType="BIGINT"/> | |||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||
| <result property="grantItemId" column="grant_item_id" jdbcType="BIGINT"/> | |||
| <result property="grantAwardsMode" column="grant_awards_mode" jdbcType="SMALLINT"/> | |||
| <result property="grantPrice" column="grant_price" jdbcType="DECIMAL"/> | |||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | |||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | |||
| @@ -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 @@ | |||
| <if test=" null != grantId "> | |||
| and `grant_id` = #{grantId} | |||
| </if> | |||
| <if test=" null != grantItemId "> | |||
| and `grant_item_id` = #{grantItemId} | |||
| </if> | |||
| <if test=" null != grantAwardsMode"> | |||
| and `grant_awards_mode` = #{grantAwardsMode} | |||
| </if> | |||
| <if test=" null != createDateBegin"> | |||
| and `create_date` >= #{createDateBegin} | |||
| </if> | |||
| @@ -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}) | |||
| @@ -11,24 +11,26 @@ | |||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||
| <result property="type" column="type" jdbcType="SMALLINT"/> | |||
| <result property="name" column="name" jdbcType="VARCHAR"/> | |||
| <result property="modeType" column="mode_type" jdbcType="SMALLINT"/> | |||
| <result property="limitMoney" column="limit_money" jdbcType="DECIMAL"/> | |||
| <result property="awardsItemPrice" column="awards_item_price" jdbcType="DECIMAL"/> | |||
| <result property="businessOrderCount" column="business_order_count" jdbcType="INTEGER"/> | |||
| <result property="awardsItemLimit" column="awards_item_limit" jdbcType="INTEGER"/> | |||
| <result property="awardsItemCount" column="awards_item_count" jdbcType="INTEGER"/> | |||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | |||
| <result property="calculationMode" column="calculation_mode" jdbcType="SMALLINT"/> | |||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | |||
| <result property="startingTaxPoint" column="starting_tax_point" jdbcType="DECIMAL"/> | |||
| <result property="taxPoints" column="tax_points" jdbcType="DECIMAL"/> | |||
| <result property="countModel" column="count_model" jdbcType="SMALLINT"/> | |||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| 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 | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||