Procházet zdrojové kódy

//OfflineActivity

release_toaliyun_real
xiaohu před 1 rokem
rodič
revize
2fe3f05469
5 změnil soubory, kde provedl 139 přidání a 8 odebrání
  1. +17
    -2
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java
  2. +11
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java
  3. +12
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java
  4. +2
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java
  5. +97
    -5
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java

+ 17
- 2
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java Zobrazit soubor

@@ -87,11 +87,27 @@ public class WxOfflineActivityGrantController extends BaseController {
wxOfflineActivityGrantAwardService.recordExport(request,response,wxOfflineActivityRecord);
}

@ApiOperation("活动发放页面处理")
@PostMapping("grantAwardPage")
public ResultData grantAwardPage(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
if(wxOfflineActivityGrantAward.getActivityId() == null){
return new ResultData(Result.ERROR,"活动ID为空");
}
if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
return new ResultData(Result.ERROR,"请选择订单");
}
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity);
wxOfflineActivityGrantAwardService.handlerGrantAwardPage(wxOfflineActivityGrantAward);
return new ResultData(wxOfflineActivityGrantAward);
}


@ApiOperation("活动发放")
@PostMapping("grantAward")
public ResultData grantAward(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
if(wxOfflineActivityGrantAward.getActivityId() == null){
return new ResultData(Result.ERROR,"活动ID未空");
return new ResultData(Result.ERROR,"活动ID空");
}
if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
return new ResultData(Result.ERROR,"请选择订单");
@@ -106,5 +122,4 @@ public class WxOfflineActivityGrantController extends BaseController {
return new ResultData();
}


}

+ 11
- 1
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java Zobrazit soubor

@@ -57,7 +57,7 @@ public class WxOfflineActivityItem extends TenantEntity {
private Integer awardsItemPrice;

/**
* 奖项数量限制
* 奖项数量限制(为0时无限制)
*/
@TableField(value = "awards_item_limit")
private Integer awardsItemLimit;
@@ -91,6 +91,16 @@ public class WxOfflineActivityItem extends TenantEntity {
*/
@TableField(exist = false)
private List<WxOfflineActivityAwardsItem> activityAwardsItemList;
/**
* 是否满足活动条件
*/
@TableField(exist = false)
private Boolean isMeet;
/**
* 实际获得奖项限制(为0时无限制)
*/
@TableField(exist = false)
private Integer realAwardsItemLimit;

/**
* 发放奖项


+ 12
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java Zobrazit soubor

@@ -1,6 +1,8 @@
package com.iformall.domain.po;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -88,6 +90,16 @@ public class WxOfflineActivityRecord extends TenantEntity {
*/
@TableField(value = "lottery_num")
private String lotteryNum;
@TableField(exist = false)
private List<String> lotteryNumList;
public List<String> getLotteryNumList() {
if(StringUtils.isNotBlank(lotteryNum)){
try {
lotteryNumList = JSON.parseArray(lotteryNum, String.class);
}catch(Exception e){}
}
return lotteryNumList;
}

/**
* 抽奖券数量


+ 2
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java Zobrazit soubor

@@ -21,6 +21,8 @@ public interface WxOfflineActivityGrantAwardService {

List<WxOfflineActivityRecord> getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord);

void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

Map<String, Object> cusStatistics(TenantEntity tenantInfo);


+ 97
- 5
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java Zobrazit soubor

@@ -1,5 +1,7 @@
package com.iformall.service.impl;

import com.alibaba.fastjson.JSON;
import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
@@ -152,6 +154,77 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
}
}

@Override
public void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityGrantAward.getActivityId(), wxOfflineActivityGrantAward.getTenantId());
if(activity == null){
throw new MallinkException(Result.ERROR, "未查询到活动");
}
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());
wxOfflineActivityGrantAward.setActivityItemList(activityItemList);
for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){

if(wxOfflineActivityGrantAward.getOrderMoneySum() < activityItem.getLimitMoney()){
activityItem.setIsMeet(false);
continue;
}
activityItem.setIsMeet(true);
//奖项限制数量
int limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice();
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0
&& activityItem.getAwardsItemLimit() < limitCount){
limitCount = activityItem.getAwardsItemLimit();
}
activityItem.setRealAwardsItemLimit(limitCount);
}
else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){
List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparingInt(WxOfflineActivityAwardsItem::getMinAmount)).collect(Collectors.toList());
WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if(wxOfflineActivityGrantAward.getOrderMoneySum() > awardsItem.getMinAmount()
&& wxOfflineActivityGrantAward.getOrderMoneySum() < awardsItem.getMaxAmount()){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem == null){
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.setMerchantShareRate(grantAwardsItem.getMerchantShareRate());
activityItem.setActivityGrantItemList(Arrays.asList(grantItem));
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
activityItem.setIsMeet(true);
activityItem.setRealAwardsItemLimit(1);
}
}
}

@Override
@Transactional(rollbackFor = Exception.class)
public void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
@@ -164,7 +237,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
throw new MallinkException(Result.ERROR, "请检查活动状态");
}

handlerGrantData(activity,wxOfflineActivityGrantAward);
handlerGrantData(activity,wxOfflineActivityGrantAward,false);
Date now = new Date();
final IdWorker idWorker = IdWorker.get();
wxOfflineActivityGrantAward.setId(idWorker.nextId());
@@ -183,7 +256,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
}


private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward){
private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward,boolean isForPage){

List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds());
if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) {
@@ -192,6 +265,10 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
if(wxOfflineActivityRecords.stream().map(WxOfflineActivityRecord::getCusPhone).distinct().count() != 1){
throw new MallinkException(Result.ERROR, "请检查活动订单用户是否为同一人");
}

Integer orderMoneySum = 0;
List<String> lotteryNumList = new ArrayList<>();
List<String> anniversaryLotteryNumList = new ArrayList<>();
for (WxOfflineActivityRecord record : wxOfflineActivityRecords) {
if(!EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(record.getAuditStatus())){
throw new MallinkException(Result.ERROR, "请检查活动订单审核状态");
@@ -202,13 +279,27 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
if(wxOfflineActivityRecordGrantMapper.selectGrantCount(activity.getTenantId(),activity.getId(),record.getId()) > 0){
throw new MallinkException(Result.ERROR, "请检查订单是否已参与活动");
}

orderMoneySum += record.getOrderMoney();
if(record.getLotteryNumList() != null && !record.getLotteryNumList().isEmpty()){
lotteryNumList.addAll(record.getLotteryNumList());
}
if(StringUtils.isNotBlank(record.getAnniversaryLotteryNum())){
anniversaryLotteryNumList.add(record.getAnniversaryLotteryNum());
}

}
wxOfflineActivityGrantAward.setRecordList(wxOfflineActivityRecords);
wxOfflineActivityGrantAward.setActivityName(activity.getName());
wxOfflineActivityGrantAward.setCusName(wxOfflineActivityRecords.get(0).getCusName());
wxOfflineActivityGrantAward.setCusPhone(wxOfflineActivityRecords.get(0).getCusPhone());
wxOfflineActivityGrantAward.setOrderCount(wxOfflineActivityRecords.size());
wxOfflineActivityGrantAward.setOrderMoneySum(wxOfflineActivityRecords.stream().mapToInt(WxOfflineActivityRecord::getOrderMoney).sum());
wxOfflineActivityGrantAward.setOrderMoneySum(orderMoneySum);

if(isForPage){
wxOfflineActivityGrantAward.setLotteryNum(JSON.toJSONString(lotteryNumList));
wxOfflineActivityGrantAward.setAnniversaryLotteryNum(JSON.toJSONString(anniversaryLotteryNumList));
}
}

private void handlerGrantItem(WxOfflineActivity activity, WxOfflineActivityGrantAward wxOfflineActivityGrantAward){
@@ -216,7 +307,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId());
Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(Collectors.toMap(WxOfflineActivityItem::getId, Function.identity()));

int i = 0;
int i = 0;//检查活动奖项
for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) {
if(grantActivityItem.getId() == null){
throw new MallinkException(Result.ERROR, "请检查活动项参数");
@@ -247,7 +338,8 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
}
//奖项限制数量
int limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice();
if(activityItem.getAwardsItemLimit() < limitCount){
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0
&& activityItem.getAwardsItemLimit() < limitCount){
limitCount = activityItem.getAwardsItemLimit();
}
if(activityGrantItemList.stream().mapToInt(WxOfflineActivityGrantItem::getAwardCount).sum()>limitCount){


Načítá se…
Zrušit
Uložit