Переглянути джерело

//offlineActivity

release_toaliyun_real
xiaohu 1 рік тому
джерело
коміт
232771e777
4 змінених файлів з 54 додано та 48 видалено
  1. +1
    -1
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java
  2. +49
    -43
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  3. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java
  4. +2
    -2
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml

+ 1
- 1
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java Переглянути файл

@@ -18,7 +18,7 @@ public interface WxOfflineActivityGrantCashBackMapper extends CommonMapper<WxOff

List<WxOfflineActivityGrantCashBack> findList(WxOfflineActivityGrantCashBack offlineActivityGrantCashBack);

void insertList(List<WxOfflineActivityGrantCashBack> cashBackList);
void insertList(@Param("cashBackList")List<WxOfflineActivityGrantCashBack> cashBackList);
}



+ 49
- 43
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java Переглянути файл

@@ -505,40 +505,37 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
if(wxOfflineActivityGrantAward.getActivityItemList() == null){
throw new MallinkException(Result.ERROR, "请检查活动项参数");
}
Map<Long, WxOfflineActivityItem> grantActivityItemMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity()));

List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId());
Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity()));

int i = 0;//检查活动奖项
for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) {
if(grantActivityItem.getId() == null){
throw new MallinkException(Result.ERROR, "请检查活动项参数");
}
WxOfflineActivityItem activityItem = activityItemMap.get(grantActivityItem.getId());
if(activityItem == null){
throw new MallinkException(Result.ERROR, "请检查活动项参数");
}
List<WxOfflineActivityGrantItem> activityGrantItemList = grantActivityItem.getActivityGrantItemList();
// if(activityGrantItemList == null || activityGrantItemList.isEmpty()){
// continue;
//// throw new MallinkException(Result.ERROR, "请检查活动奖项参数");
// }
boolean isRepeat = activityGrantItemList.stream()
.collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting()))
.entrySet().stream().anyMatch(e -> e.getValue() > 1);
if(isRepeat){
throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复");
}

Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity()));

for (WxOfflineActivityItem activityItem : activityItemList) {

Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity()));
//获取奖项
WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId());
List<WxOfflineActivityGrantItem> activityGrantItemList = null;
if(grantActivityItem != null){
activityGrantItemList = grantActivityItem.getActivityGrantItemList();
}

if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){

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){
@@ -564,9 +561,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);
}
activityItem.setActivityGrantItemList(activityGrantItemList);

}
else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){
if(activityGrantItemList == null || activityGrantItemList.isEmpty()){
continue;
}

if(activityGrantItemList.size() != 1){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
@@ -588,10 +590,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);

activityItem.setActivityGrantItemList(activityGrantItemList);

}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();
activityGrantItemList = new ArrayList<>();

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算
@@ -614,7 +618,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
grantAwardsItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem);

grantItemList.add(grantGrantItem);
activityGrantItemList.add(grantGrantItem);

cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
@@ -637,7 +641,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
grantAwardsItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem);

grantItemList.add(grantGrantItem);
activityGrantItemList.add(grantGrantItem);
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}

@@ -646,16 +650,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
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());
if(grantAwardsSecondItem != null){
WxOfflineActivityAwardsItem awardsSecondItem = collect.get(merchantIds.size());
if(awardsSecondItem != null){
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
grantAwardsSecondItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsSecondItem);
.multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
awardsSecondItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem);

grantItemList.add(grantGrantItem);
activityGrantItemList.add(grantGrantItem);
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}

@@ -663,7 +667,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

BigDecimal prop = BigDecimal.ONE;
if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal).setScale(4, RoundingMode.HALF_UP);;
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP);
cashBackPriceTotal = activityItem.getMaxAmount();
}
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
@@ -674,18 +678,19 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10));
}
for (WxOfflineActivityGrantItem grantItem:grantItemList){
for (WxOfflineActivityGrantItem grantItem:activityGrantItemList){
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).setScale(2, RoundingMode.HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).setScale(0, RoundingMode.HALF_UP));
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).setScale(0, RoundingMode.HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).multiply(prop).divide(new BigDecimal(10))
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)));
}
}

grantActivityItem.setActivityGrantItemList(grantItemList);
activityItem.setActivityGrantItemList(activityGrantItemList);

WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack();
activityGrantCashBack.setActivityId(activity.getId());
activityGrantCashBack.setActivityName(activity.getName());
@@ -704,20 +709,18 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints())
.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
}
grantActivityItem.setActivityGrantCashBack(activityGrantCashBack);

activityItem.setActivityGrantCashBack(activityGrantCashBack);
}

for (WxOfflineActivityGrantItem grantGrantItem : grantActivityItem.getActivityGrantItemList()) {
for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) {
i++;
if(grantGrantItem.getAwardCount() == null){
grantGrantItem.setAwardCount(1);
}
}
}
if(i == 0){
throw new MallinkException(Result.ERROR, "请检查是否有活动奖项");
}

wxOfflineActivityGrantAward.setActivityItemList(activityItemList);
}

private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){
@@ -734,6 +737,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount());
grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule());
grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio());
if(grantGrantItem.getAwardCount() == null){
grantGrantItem.setAwardCount(1);
}
grantGrantItem.setAwardPrice(awardsItem.getPrice()
.multiply(new BigDecimal(grantGrantItem.getAwardCount()))
.setScale(2, RoundingMode.HALF_UP));


+ 2
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java Переглянути файл

@@ -25,11 +25,11 @@ public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivit
@Override
public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<WxOfflineActivityRecordGrant> recordGrantList = new ArrayList<>();
wxOfflineActivityGrantAward.getRecordIds().forEach(recordId ->{
wxOfflineActivityGrantAward.getRecordList().forEach(record ->{
WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant();
recordGrant.updateTenantInfo(wxOfflineActivityGrantAward);
recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId());
recordGrant.setRecordId(recordId);
recordGrant.setRecordId(record.getId());
recordGrant.setGrantId(wxOfflineActivityGrantAward.getId());

recordGrantList.add(recordGrant);


+ 2
- 2
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml Переглянути файл

@@ -74,7 +74,7 @@
</select>

<insert id="insertList" parameterType="java.util.List">
insert into wx_offline_activity_grant_item
insert into wx_offline_activity_grant_cash_back
(id,
grant_id,activity_id,activity_name,
activity_item_id,activity_item_name,activity_item_type,
@@ -82,7 +82,7 @@
create_date,update_date
,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount)
values
<foreach collection="grantItemList" item="item" index="index" separator=",">
<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},


Завантаження…
Відмінити
Зберегти