| @@ -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") | |||
| private Integer activityItemType; | |||
| /** | |||
| * 活动项类型 | |||
| */ | |||
| @TableField(value = "activity_item_mode_type") | |||
| private Integer activityItemModeType; | |||
| /** | |||
| * 返现奖项计算规则(0代表无规则) | |||
| */ | |||
| @@ -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-分担) | |||
| */ | |||
| @@ -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; | |||
| @@ -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<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; | |||
| 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())); | |||
| @@ -14,6 +14,7 @@ | |||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||
| <result property="activityItemName" column="activity_item_name" jdbcType="INTEGER"/> | |||
| <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"/> | |||
| @@ -29,7 +30,8 @@ | |||
| <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, | |||
| 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 | |||
| </sql> | |||
| @@ -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 @@ | |||
| <foreach collection="cashBackList" item="item" index="index" separator=","> | |||
| (#{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}) | |||
| @@ -25,6 +25,11 @@ | |||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | |||
| <result property="awardPrice" column="award_price" jdbcType="DECIMAL"/> | |||
| <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="mallShareRate" column="mall_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, | |||
| 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 | |||
| </sql> | |||
| @@ -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 | |||
| <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.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}) | |||
| </foreach> | |||
| </insert> | |||
| @@ -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, | |||