From 26d35f09d8bd64f2436def072caa062c5f0de5de Mon Sep 17 00:00:00 2001 From: xiaohu <1901900812@qq.com> Date: Wed, 16 Apr 2025 00:16:13 +0800 Subject: [PATCH] //cashback --- .../db/migration/V202504000000001.sql | 12 +++++ .../po/WxOfflineActivityGrantCashBack.java | 6 +++ .../domain/po/WxOfflineActivityGrantItem.java | 19 ++++++++ .../domain/vo/OfflineActivityGrantItemVo.java | 4 ++ ...xOfflineActivityGrantAwardServiceImpl.java | 45 ++++++++++++++----- .../WxOfflineActivityGrantCashBackMapper.xml | 8 ++-- .../WxOfflineActivityGrantItemMapper.xml | 20 ++++++--- ...WxOfflineActivityGrantSettlementMapper.xml | 1 + 8 files changed, 95 insertions(+), 20 deletions(-) create mode 100644 mallinkAdmin/src/main/resources/db/migration/V202504000000001.sql diff --git a/mallinkAdmin/src/main/resources/db/migration/V202504000000001.sql b/mallinkAdmin/src/main/resources/db/migration/V202504000000001.sql new file mode 100644 index 000000000..ed23c3332 --- /dev/null +++ b/mallinkAdmin/src/main/resources/db/migration/V202504000000001.sql @@ -0,0 +1,12 @@ +ALTER TABLE `mallink`.`wx_offline_activity_grant_item` + ADD COLUMN `starting_tax_point` decimal(10, 2) NULL COMMENT '税点金额起点' AFTER `award_count`, +ADD COLUMN `tax_points` decimal(10, 2) NULL COMMENT '税点比例' AFTER `starting_tax_point`, +ADD COLUMN `tax_points_amount` decimal(10, 2) NULL COMMENT '税点金额' AFTER `tax_points`; + +ALTER TABLE `mallink`.`wx_offline_activity_grant_cash_back` + ADD COLUMN `activity_item_mode_type` smallint(1) NULL COMMENT '活动项模式' AFTER `activity_item_type`; + +update wx_offline_activity_grant_cash_back set activity_item_mode_type = 2; + +ALTER TABLE `mallink`.`wx_offline_activity_grant_cash_back` + MODIFY COLUMN `activity_item_mode_type` smallint(1) NOT NULL COMMENT '活动项模式' AFTER `activity_item_type`; \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java index 7cc0de2f3..f29388689 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java @@ -62,6 +62,12 @@ public class WxOfflineActivityGrantCashBack extends TenantEntity { @TableField(value = "activity_item_type") private Integer activityItemType; + /** + * 活动项类型 + */ + @TableField(value = "activity_item_mode_type") + private Integer activityItemModeType; + /** * 返现奖项计算规则(0代表无规则) */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java index 04ca424a9..511c7fb32 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java @@ -124,6 +124,25 @@ public class WxOfflineActivityGrantItem extends TenantEntity { @TableField(value = "award_count") private Integer awardCount; + /** + * 返现起征税点金额 + */ + @TableField(value = "starting_tax_point") + private BigDecimal startingTaxPoint; + + /** + * 返现税点比例 + */ + @TableField(value = "tax_points") + private BigDecimal taxPoints; + + /** + * 税收 + */ + @TableField(value = "tax_points_amount") + private BigDecimal taxPointsAmount; + + /** * 分担规则(0-商管 1-商户 2-分担) */ diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantItemVo.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantItemVo.java index f15a60daa..80b4d6234 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantItemVo.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityGrantItemVo.java @@ -34,6 +34,10 @@ public class OfflineActivityGrantItemVo extends TenantEntity { private BigDecimal awardPrice; private Integer awardCount; + private BigDecimal startingTaxPoint; + private BigDecimal taxPoints; + private BigDecimal taxPointsAmount; + private BigDecimal mallShareRate; private BigDecimal merchantShareRate; diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index eca6ac0c7..ea37f2882 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -426,6 +426,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } } + }else{ BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); @@ -454,7 +455,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } } - + //联单 Integer jointCount = getJointCount(activityItem,recordList); if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ Map jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); @@ -477,12 +478,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity } } + //计算返现金额最大限制 BigDecimal prop = BigDecimal.ONE; if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); cashBackPriceTotal = activityItem.getMaxAmount(); } - if(prop.compareTo(BigDecimal.ONE) < 0){ for (WxOfflineActivityGrantItem grantItem:grantItemList){ grantItem.setAwardPrice(awardsRulePrice(grantItem.getAwardPrice().multiply(prop),activityItem.getAwardsItemRule())); @@ -493,25 +494,47 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity grantItem.setMerchantSharePrice(grantItem.getAwardPrice().subtract(grantItem.getMallSharePrice())); } } - activityItem.setActivityGrantItemList(grantItemList); + //计算税点,单笔订单按单笔计算,订单总额按总额计算 WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); activityGrantCashBack.setActivityId(activity.getId()); activityGrantCashBack.setActivityName(activity.getName()); activityGrantCashBack.setActivityItemId(activityItem.getId()); activityGrantCashBack.setActivityItemName(activityItem.getName()); activityGrantCashBack.setActivityItemType(activityItem.getType()); + activityGrantCashBack.setActivityItemModeType(activityItem.getModeType()); activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); - activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); - activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); - activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); - activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); - if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 - && activityGrantCashBack.getTaxPoints() != null){ - activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) - .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); + if(EnumOfflineActivityMode.ONE.getCode().equals(activityItem.getModeType())){ + BigDecimal cashBackPrice = BigDecimal.ZERO; + BigDecimal taxPointsAmount = BigDecimal.ZERO; + for(WxOfflineActivityGrantItem grantItem:grantItemList){ + grantItem.setStartingTaxPoint(activityItem.getStartingTaxPoint()); + grantItem.setTaxPoints(activityItem.getTaxPoints()); + grantItem.setTaxPointsAmount(BigDecimal.ZERO); + if(grantItem.getStartingTaxPoint() != null && grantItem.getAwardPrice().compareTo(grantItem.getStartingTaxPoint()) > 0 + && grantItem.getTaxPoints() != null){ + grantItem.setTaxPointsAmount(grantItem.getAwardPrice().multiply(grantItem.getTaxPoints()) + .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); + } + cashBackPrice = cashBackPrice.add(grantItem.getAwardPrice()); + taxPointsAmount = taxPointsAmount.add(grantItem.getTaxPointsAmount()); + } + activityGrantCashBack.setCashBackPrice(cashBackPrice); + activityGrantCashBack.setTaxPointsAmount(taxPointsAmount); + }else{ + activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); + activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); + activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); + activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); + if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 + && activityGrantCashBack.getTaxPoints() != null){ + activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) + .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); + } } + activityItem.setActivityGrantItemList(grantItemList); + activityItem.setActivityGrantCashBack(activityGrantCashBack); //实际展示返现金额 activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount())); diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml index 5f788aa4b..e6d8c1250 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml @@ -14,6 +14,7 @@ + @@ -29,7 +30,8 @@ id,tenant_id,parent_tenant_id, grant_id,activity_id,activity_name, - activity_item_id,activity_item_name,activity_item_type,awards_item_rule, + activity_item_id,activity_item_name,activity_item_type,activity_item_mode_type, + awards_item_rule, create_date,update_date,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount @@ -76,7 +78,7 @@ insert into wx_offline_activity_grant_cash_back (id, grant_id,activity_id,activity_name, - activity_item_id,activity_item_name,activity_item_type, + activity_item_id,activity_item_name,activity_item_type,activity_item_mode_type, awards_item_rule, create_date,update_date ,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount) @@ -84,7 +86,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.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER},#{item.activityItemModeType,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}) diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml index e7c0bebf8..5e0b791af 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml @@ -25,6 +25,11 @@ + + + + + @@ -40,8 +45,9 @@ 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, - award_price,award_count,money_rule, - mall_share_rate,merchant_share_rate, + award_price,award_count, + starting_tax_point,tax_points,tax_points_amount, + money_rule,mall_share_rate,merchant_share_rate, create_date,update_date,record_id @@ -102,8 +108,9 @@ 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, - award_price,award_count,money_rule, - mall_share_rate,merchant_share_rate, + award_price,award_count, + starting_tax_point,tax_points,tax_points_amount, + money_rule,mall_share_rate,merchant_share_rate, create_date,update_date,record_id) values @@ -112,8 +119,9 @@ #{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}, - #{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER}, - #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, + #{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER}, + #{item.startingTaxPoint,jdbcType=DECIMAL},,#{item.taxPoints,jdbcType=DECIMAL},,#{item.taxPointsAmount,jdbcType=DECIMAL}, + #{item.moneyRule,jdbcType=INTEGER},#{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},#{item.recordId,jdbcType=BIGINT}) diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml index 535b46d8b..ef85244a3 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml @@ -307,6 +307,7 @@ gi.activity_item_id,gi.activity_item_name, gi.award_itam_id,gi.award_name, gi.cash_back_ratio,gi.award_price,gi.award_count, + gi.starting_tax_point,gi.tax_points,gi.tax_points_amount, gi.mall_share_rate,gi.merchant_share_rate, gi.record_id, gs.order_no,gs.order_money,