| @@ -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`; | |||||
| @@ -62,6 +62,12 @@ public class WxOfflineActivityGrantCashBack extends TenantEntity { | |||||
| @TableField(value = "activity_item_type") | @TableField(value = "activity_item_type") | ||||
| private Integer activityItemType; | private Integer activityItemType; | ||||
| /** | |||||
| * 活动项类型 | |||||
| */ | |||||
| @TableField(value = "activity_item_mode_type") | |||||
| private Integer activityItemModeType; | |||||
| /** | /** | ||||
| * 返现奖项计算规则(0代表无规则) | * 返现奖项计算规则(0代表无规则) | ||||
| */ | */ | ||||
| @@ -124,6 +124,25 @@ public class WxOfflineActivityGrantItem extends TenantEntity { | |||||
| @TableField(value = "award_count") | @TableField(value = "award_count") | ||||
| private Integer awardCount; | 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-分担) | * 分担规则(0-商管 1-商户 2-分担) | ||||
| */ | */ | ||||
| @@ -34,6 +34,10 @@ public class OfflineActivityGrantItemVo extends TenantEntity { | |||||
| private BigDecimal awardPrice; | private BigDecimal awardPrice; | ||||
| private Integer awardCount; | private Integer awardCount; | ||||
| private BigDecimal startingTaxPoint; | |||||
| private BigDecimal taxPoints; | |||||
| private BigDecimal taxPointsAmount; | |||||
| private BigDecimal mallShareRate; | private BigDecimal mallShareRate; | ||||
| private BigDecimal merchantShareRate; | private BigDecimal merchantShareRate; | ||||
| @@ -426,6 +426,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| }else{ | }else{ | ||||
| BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); | BigDecimal orderMoneySum = activityItem.getRecordList().stream().map(WxOfflineActivityRecord::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); | ||||
| @@ -454,7 +455,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| //联单 | |||||
| Integer jointCount = getJointCount(activityItem,recordList); | Integer jointCount = getJointCount(activityItem,recordList); | ||||
| if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ | if(jointCount != 0 && activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ | ||||
| Map<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); | Map<Integer, WxOfflineActivityAwardsItem> jointCountMap = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); | ||||
| @@ -477,12 +478,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| } | } | ||||
| } | } | ||||
| //计算返现金额最大限制 | |||||
| BigDecimal prop = BigDecimal.ONE; | BigDecimal prop = BigDecimal.ONE; | ||||
| if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ | if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ | ||||
| prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); | prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); | ||||
| cashBackPriceTotal = activityItem.getMaxAmount(); | cashBackPriceTotal = activityItem.getMaxAmount(); | ||||
| } | } | ||||
| if(prop.compareTo(BigDecimal.ONE) < 0){ | if(prop.compareTo(BigDecimal.ONE) < 0){ | ||||
| for (WxOfflineActivityGrantItem grantItem:grantItemList){ | for (WxOfflineActivityGrantItem grantItem:grantItemList){ | ||||
| grantItem.setAwardPrice(awardsRulePrice(grantItem.getAwardPrice().multiply(prop),activityItem.getAwardsItemRule())); | 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())); | grantItem.setMerchantSharePrice(grantItem.getAwardPrice().subtract(grantItem.getMallSharePrice())); | ||||
| } | } | ||||
| } | } | ||||
| activityItem.setActivityGrantItemList(grantItemList); | |||||
| //计算税点,单笔订单按单笔计算,订单总额按总额计算 | |||||
| WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); | WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); | ||||
| activityGrantCashBack.setActivityId(activity.getId()); | activityGrantCashBack.setActivityId(activity.getId()); | ||||
| activityGrantCashBack.setActivityName(activity.getName()); | activityGrantCashBack.setActivityName(activity.getName()); | ||||
| activityGrantCashBack.setActivityItemId(activityItem.getId()); | activityGrantCashBack.setActivityItemId(activityItem.getId()); | ||||
| activityGrantCashBack.setActivityItemName(activityItem.getName()); | activityGrantCashBack.setActivityItemName(activityItem.getName()); | ||||
| activityGrantCashBack.setActivityItemType(activityItem.getType()); | activityGrantCashBack.setActivityItemType(activityItem.getType()); | ||||
| activityGrantCashBack.setActivityItemModeType(activityItem.getModeType()); | |||||
| activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); | activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); | ||||
| activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); | 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.setActivityGrantCashBack(activityGrantCashBack); | ||||
| //实际展示返现金额 | //实际展示返现金额 | ||||
| activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount())); | activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount())); | ||||
| @@ -14,6 +14,7 @@ | |||||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | ||||
| <result property="activityItemName" column="activity_item_name" jdbcType="INTEGER"/> | <result property="activityItemName" column="activity_item_name" jdbcType="INTEGER"/> | ||||
| <result property="activityItemType" column="activity_item_type" jdbcType="SMALLINT"/> | <result property="activityItemType" column="activity_item_type" jdbcType="SMALLINT"/> | ||||
| <result property="activityItemModeType" column="activity_item_mode_type" jdbcType="SMALLINT"/> | |||||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | ||||
| @@ -29,7 +30,8 @@ | |||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| id,tenant_id,parent_tenant_id, | id,tenant_id,parent_tenant_id, | ||||
| grant_id,activity_id,activity_name, | 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 | create_date,update_date,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount | ||||
| </sql> | </sql> | ||||
| @@ -76,7 +78,7 @@ | |||||
| insert into wx_offline_activity_grant_cash_back | insert into wx_offline_activity_grant_cash_back | ||||
| (id, | (id, | ||||
| grant_id,activity_id,activity_name, | 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, | awards_item_rule, | ||||
| create_date,update_date | create_date,update_date | ||||
| ,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount) | ,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount) | ||||
| @@ -84,7 +86,7 @@ | |||||
| <foreach collection="cashBackList" item="item" index="index" separator=","> | <foreach collection="cashBackList" item="item" index="index" separator=","> | ||||
| (#{item.id,jdbcType=BIGINT}, | (#{item.id,jdbcType=BIGINT}, | ||||
| #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR}, | #{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.awardsItemRule,jdbcType=INTEGER}, | ||||
| #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}, | #{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}) | #{item.maxAmount,jdbcType=DECIMAL},#{item.startingTaxPoint,jdbcType=DECIMAL},#{item.taxPoints,jdbcType=DECIMAL},#{item.cashBackPrice,jdbcType=DECIMAL},#{item.taxPointsAmount,jdbcType=DECIMAL}) | ||||
| @@ -25,6 +25,11 @@ | |||||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | ||||
| <result property="awardPrice" column="award_price" jdbcType="DECIMAL"/> | <result property="awardPrice" column="award_price" jdbcType="DECIMAL"/> | ||||
| <result property="awardCount" column="award_count" jdbcType="INTEGER"/> | <result property="awardCount" column="award_count" jdbcType="INTEGER"/> | ||||
| <result property="startingTaxPoint" column="starting_tax_point" jdbcType="DECIMAL"/> | |||||
| <result property="taxPoints" column="tax_points" jdbcType="DECIMAL"/> | |||||
| <result property="taxPointsAmount" column="tax_points_amount" jdbcType="DECIMAL"/> | |||||
| <result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/> | <result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/> | ||||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | ||||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | ||||
| @@ -40,8 +45,9 @@ | |||||
| activity_item_id,activity_item_name,activity_item_type, | activity_item_id,activity_item_name,activity_item_type, | ||||
| award_itam_id,award_name,award_grade, | award_itam_id,award_name,award_grade, | ||||
| award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | 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 | create_date,update_date,record_id | ||||
| </sql> | </sql> | ||||
| @@ -102,8 +108,9 @@ | |||||
| activity_item_id,activity_item_name,activity_item_type, | activity_item_id,activity_item_name,activity_item_type, | ||||
| award_itam_id,award_name,award_grade, | award_itam_id,award_name,award_grade, | ||||
| award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | 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) | create_date,update_date,record_id) | ||||
| values | values | ||||
| <foreach collection="grantItemList" item="item" index="index" separator=","> | <foreach collection="grantItemList" item="item" index="index" separator=","> | ||||
| @@ -112,8 +119,9 @@ | |||||
| #{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.awardItamId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.awardGrade,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.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}) | #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},#{item.recordId,jdbcType=BIGINT}) | ||||
| </foreach> | </foreach> | ||||
| </insert> | </insert> | ||||
| @@ -307,6 +307,7 @@ | |||||
| gi.activity_item_id,gi.activity_item_name, | gi.activity_item_id,gi.activity_item_name, | ||||
| gi.award_itam_id,gi.award_name, | gi.award_itam_id,gi.award_name, | ||||
| gi.cash_back_ratio,gi.award_price,gi.award_count, | 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.mall_share_rate,gi.merchant_share_rate, | ||||
| gi.record_id, | gi.record_id, | ||||
| gs.order_no,gs.order_money, | gs.order_no,gs.order_money, | ||||