Browse Source

//OfflineActivity

release_toaliyun_real
xiaohu 1 year ago
parent
commit
3ab78f8382
21 changed files with 696 additions and 30 deletions
  1. +120
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java
  2. +21
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java
  3. +5
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java
  4. +0
    -12
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java
  5. +12
    -2
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java
  6. +21
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java
  7. +17
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java
  8. +2
    -1
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java
  9. +8
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java
  10. +2
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java
  11. +3
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java
  12. +15
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java
  13. +2
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java
  14. +54
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  15. +0
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java
  16. +163
    -4
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java
  17. +72
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java
  18. +20
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml
  19. +6
    -8
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml
  20. +134
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml
  21. +19
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml

+ 120
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java View File

@@ -0,0 +1,120 @@
package com.iformall.controller.market;

import com.github.pagehelper.PageInfo;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantSettlement;
import com.iformall.domain.po.WxOfflineActivityRecord;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivitySettlement;
import com.iformall.service.WxOfflineActivityGrantAwardService;
import com.iformall.service.WxOfflineActivityGrantSettlementService;
import com.iformall.service.WxOfflineActivityRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import jodd.util.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
* @author alascor
*
*/
@RestController
@RequestMapping("/offlineSettlement")
@Api(description = "线下活动结算相关接口")
public class WxOfflineActivitySettlementController extends BaseController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());

@Autowired
private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService;

@Autowired
private WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService;

@Autowired
private WxOfflineActivityRecordService wxOfflineActivityRecordService;

@ApiOperation("中奖会员相关统计")
@GetMapping("cusStatistics")
public ResultData cusStatistics() {
Map<String,Object> statisticsMap = wxOfflineActivityGrantAwardService.cusStatistics(getTenantInfo());
return new ResultData(statisticsMap);
}

@ApiOperation("发奖结算相关统计")
@GetMapping("settlementStatistics")
public ResultData settlementStatistics() {
Map<String,Object> statisticsMap = wxOfflineActivityGrantSettlementService.settlementStatistics(getTenantInfo());
return new ResultData(statisticsMap);
}

@ApiOperation("订单相关统计")
@GetMapping("recordStatistics")
public ResultData recordStatistics() {
Map<String,Object> statisticsMap = wxOfflineActivityRecordService.orderStatistics(getTenantInfo());
return new ResultData(statisticsMap);
}

@ApiOperation("活动结算分页列表接口")
@GetMapping("activityList")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
public ResultData activityList(@ModelAttribute WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize) {
if (null == wxOfflineActivity) wxOfflineActivity = new WxOfflineActivity();
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivity.updateTenantInfo(tenantInfo);
wxOfflineActivity.setSortColumns(SortField.CreateDate_DESC);
final PageInfo<WxOfflineActivity> page = wxOfflineActivityGrantSettlementService.activityListAsPage(wxOfflineActivity, pageNum, pageSize);

return new ResultData(page);
}

@ApiOperation("单个活动结算列表")
@GetMapping("activitySettlement")
@ApiImplicitParams({})
public ResultData activitySettlement(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement) {

if(grantSettlement.getActivityId() == null){
return new ResultData(Result.ERROR,"请选择活动");
}

TenantEntity tenantInfo = getTenantInfo();
grantSettlement.updateTenantInfo(tenantInfo);
List<OfflineActivitySettlement> recordList = wxOfflineActivityGrantSettlementService.getActivitySettlement(grantSettlement);

return new ResultData(recordList);
}

@ApiOperation("单个活动单个门店结算列表")
@GetMapping("merchantSettlement")
@ApiImplicitParams({})
public ResultData merchantSettlement(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement) {

if(grantSettlement.getActivityId() == null){
return new ResultData(Result.ERROR,"请选择活动");
}
if(grantSettlement.getMerchantId() == null){
return new ResultData(Result.ERROR,"请选择门店");
}

TenantEntity tenantInfo = getTenantInfo();
grantSettlement.updateTenantInfo(tenantInfo);
List<WxOfflineActivityGrantSettlement> recordList = wxOfflineActivityGrantSettlementService.findList(grantSettlement);

return new ResultData(recordList);
}

}

+ 21
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java View File

@@ -85,4 +85,25 @@ public class WxOfflineActivity extends TenantEntity {
@TableField(exist = false)
private Integer validStatus;


/**
* 参与订单数
*/
@TableField(exist = false)
private Integer grantMershantCount;
/**
* 发放订单数
*/
@TableField(exist = false)
private Integer grantRecordCount;
/**
* 发放总额
*/
@TableField(exist = false)
private Integer grantPrice;
/**
* 商户结算总额
*/
@TableField(exist = false)
private Integer merchantSettlmentPrice;
}

+ 5
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java View File

@@ -92,6 +92,11 @@ public class WxOfflineActivityGrantAward extends TenantEntity{
@TableField(value = "create_date")
private Date createDate;

@TableField(exist = false)
private Date createDateBegin;
@TableField(exist = false)
private Date createDateEnd;

/**
* 更新时间
*/


+ 0
- 12
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java View File

@@ -130,24 +130,12 @@ public class WxOfflineActivityGrantItem extends TenantEntity {
@TableField(value = "mall_share_rate")
private BigDecimal mallShareRate;

/**
*
*/
@TableField(value = "mall_share_price")
private Integer mallSharePrice;

/**
* 商户分担比例
*/
@TableField(value = "merchant_share_rate")
private BigDecimal merchantShareRate;

/**
*
*/
@TableField(value = "merchant_share_price")
private Integer merchantSharePrice;

/**
* 创建时间
*/


+ 12
- 2
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java View File

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.iformall.domain.po.base.TenantEntity;
import lombok.Data;
@@ -52,6 +53,10 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity {
*/
@TableField(value = "merchant_id")
private Long merchantId;
@TableField(exist = false)
private String merchantName;
@TableField(exist = false)
private List<Long> merchantIdList;

/**
* 活动id
@@ -84,13 +89,13 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity {
private Integer grantPrice;

/**
* 商管承担总金额
* 商管承担z占比
*/
@TableField(value = "mall_share_rate")
private BigDecimal mallShareRate;

/**
* 商户承担总金额
* 商户承担占比
*/
@TableField(value = "merchant_share_rate")
private BigDecimal merchantShareRate;
@@ -125,6 +130,11 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity {
@TableField(value = "create_date")
private Date createDate;

@TableField(exist = false)
private Date createDateBegin;
@TableField(exist = false)
private Date createDateEnd;

/**
* 更新时间
*/


+ 21
- 0
mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java View File

@@ -0,0 +1,21 @@
package com.iformall.domain.vo;

import com.iformall.domain.po.base.TenantEntity;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
public class OfflineActivitySettlement extends TenantEntity {

private Long activityId;
private Long merchantId;
private String merchantName;

private Integer recordCount;
private Integer sumOrderMoney;
private Integer sumGrantPrice;
private Integer sumMallPrice;
private Integer sumMerchantPrice;
}

+ 17
- 0
mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java View File

@@ -0,0 +1,17 @@
package com.iformall.domain.vo;

import lombok.Data;

import java.io.Serializable;

@Data
public class OfflineActivitySettlementStatistics implements Serializable {

private static final long serialVersionUID = 1L;

private Integer sumGrantPrice;
private Integer recordCount;
private Integer merchantCount;
private Integer sumMallPrice;
private Integer sumMerchantPrice;
}

+ 2
- 1
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java View File

@@ -2,7 +2,6 @@ package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

/**
* @author xiaohu
@@ -12,6 +11,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface WxOfflineActivityGrantAwardMapper extends CommonMapper<WxOfflineActivityGrantAward, Long> {

Integer getCusCount(WxOfflineActivityGrantAward grantAwardQ);

}




+ 8
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java View File

@@ -3,6 +3,8 @@ package com.iformall.mapper;
import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantSettlement;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iformall.domain.vo.OfflineActivitySettlement;
import com.iformall.domain.vo.OfflineActivitySettlementStatistics;

import java.util.List;

@@ -15,6 +17,12 @@ import java.util.List;
public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxOfflineActivityGrantSettlement, Long> {

void insertList(List<WxOfflineActivityGrantSettlement> settlementList);

OfflineActivitySettlementStatistics settlementStatistics(WxOfflineActivityGrantSettlement settlement);

List<OfflineActivitySettlement> getActivitySettlement(WxOfflineActivityGrantSettlement settlement);

List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement);
}




+ 2
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java View File

@@ -25,6 +25,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper<WxOfflineAct
void updateAuditStatus(WxOfflineActivityRecord record);

WxOfflineActivityRecord selectLimitOne(WxOfflineActivityRecord wxOfflineActivityRecord);

Integer getCount(WxOfflineActivityRecord recordQ);
}




+ 3
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java View File

@@ -3,6 +3,7 @@ package com.iformall.service;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iformall.domain.po.WxOfflineActivityRecord;
import com.iformall.domain.po.base.TenantEntity;

import java.util.List;
import java.util.Map;
@@ -19,4 +20,6 @@ public interface WxOfflineActivityGrantAwardService {
List<WxOfflineActivityRecord> getRecordList(Long activityId, WxOfflineActivityRecord wxOfflineActivityRecord);

void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

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

+ 15
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java View File

@@ -1,8 +1,15 @@
package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantSettlement;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivitySettlement;

import java.util.List;
import java.util.Map;

/**
* @author xiaohu
@@ -12,4 +19,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
public interface WxOfflineActivityGrantSettlementService {

void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

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

PageInfo<WxOfflineActivity> activityListAsPage(WxOfflineActivity wxOfflineActivity, Integer pageNum, Integer pageSize);

List<OfflineActivitySettlement> getActivitySettlement(WxOfflineActivityGrantSettlement grantSettlement);

List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement grantSettlement);
}

+ 2
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java View File

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxOfflineActivityRecord;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iformall.domain.po.WxRaffleActivityRecord;
import com.iformall.domain.po.base.TenantEntity;

import java.util.Map;

@@ -25,4 +26,5 @@ public interface WxOfflineActivityRecordService {

void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId);

Map<String, Object> orderStatistics(TenantEntity tenantInfo);
}

+ 54
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java View File

@@ -16,11 +16,13 @@ import com.iformall.mapper.WxOfflineActivityRecordGrantMapper;
import com.iformall.mapper.WxOfflineActivityRecordMapper;
import com.iformall.service.*;
import com.iformall.mapper.WxOfflineActivityGrantAwardMapper;
import com.iformall.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -170,6 +172,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
wxOfflineActivityGrantSettlementService.settlement(wxOfflineActivityGrantAward);
}


private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward){

List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds());
@@ -308,6 +311,57 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
grantGrantItem.setMallShareRate(awardsItem.getMallShareRate());
grantGrantItem.setMerchantShareRate(awardsItem.getMerchantShareRate());
}


@Override
public Map<String, Object> cusStatistics(TenantEntity tenantInfo) {
//最近30天
Date now = new Date();
String monthStartdate = DateUtils.getTimeBefore(30, now);
String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间
String weekStartdate = DateUtils.getTimeBefore(7, now);
String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间
String yesterdayDate = DateUtils.getTimeBefore(1, now);
String today = DateUtils.getTimeBefore(0, now);

//最近30天数据
WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward();
grantAwardQ.updateTenantInfo(tenantInfo);
grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate));
Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ);
//一周前的昨天
grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate));
grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(weekStartdate));
Integer yesWeekCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ);
//昨天的昨天
grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesyesDate));
grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate));
Integer yesYesCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ);
//昨天
grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate));
grantAwardQ.setCreateDateEnd(DateUtils.stringToDate(today));
Integer yesCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ);

Map<String, Object> result = new HashMap<>();
result.put("monthCount",monthCount);

NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
String dayPercentage = "--";
if (yesYesCount > 0) {
Integer count = yesCount - yesYesCount;
dayPercentage = nf.format(count.doubleValue() / new Double(yesYesCount).doubleValue());
}
result.put("dayPercentage",dayPercentage);
String weekPercentage = "--";
if (yesWeekCount > 0) {
Integer count = yesCount - yesWeekCount;
weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue());
}
result.put("weekPercentage",weekPercentage);
return result;
}

}




+ 0
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java View File

@@ -56,8 +56,6 @@ public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityG
grantGrantItem.setAwardPrice(awardPriceTen*1000);
}
}
grantGrantItem.setMallSharePrice(new BigDecimal(grantGrantItem.getAwardPrice()).multiply(grantGrantItem.getMallShareRate()).setScale(0, BigDecimal.ROUND_HALF_UP).intValue());
grantGrantItem.setMerchantSharePrice(grantGrantItem.getAwardPrice() - grantGrantItem.getMallSharePrice());
rantItemList.add(grantGrantItem);
}
}


+ 163
- 4
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java View File

@@ -1,19 +1,29 @@
package com.iformall.service.impl;

import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivitySettlement;
import com.iformall.domain.vo.OfflineActivitySettlementStatistics;
import com.iformall.enums.EnumOfflineActivityStatus;
import com.iformall.enums.EnumYesOrNo;
import com.iformall.mapper.WxMerchantMapper;
import com.iformall.mapper.WxOfflineActivityMapper;
import com.iformall.service.WxMerchantService;
import com.iformall.service.WxOfflineActivityGrantSettlementService;
import com.iformall.mapper.WxOfflineActivityGrantSettlementMapper;
import com.iformall.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.text.NumberFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
@@ -27,6 +37,14 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
@Autowired
private WxOfflineActivityGrantSettlementMapper wxOfflineActivityGrantSettlementMapper;

@Autowired
WxOfflineActivityMapper wxOfflineActivityMapper;

@Autowired
WxMerchantMapper wxMerchantMapper;
@Autowired
WxMerchantService wxMerchantService;

@Override
public void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>();
@@ -97,6 +115,147 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct

wxOfflineActivityGrantSettlementMapper.insertList(settlementList);
}

@Override
public Map<String, Object> settlementStatistics(TenantEntity tenantInfo) {
//最近30天
Date now = new Date();
String monthStartdate = DateUtils.getTimeBefore(30, now);
String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间
String weekStartdate = DateUtils.getTimeBefore(7, now);
String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间
String yesterdayDate = DateUtils.getTimeBefore(1, now);
String today = DateUtils.getTimeBefore(0, now);

//最近30天
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.updateTenantInfo(tenantInfo);
settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate));
OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);
//一周前的昨天
settlement.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate));
settlement.setCreateDateEnd(DateUtils.stringToDate(weekStartdate));
OfflineActivitySettlementStatistics yesWeekStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);
//昨天的昨天
settlement.setCreateDateBegin(DateUtils.stringToDate(yesyesDate));
settlement.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate));
OfflineActivitySettlementStatistics yesYesStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);
//昨天
settlement.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate));
settlement.setCreateDateEnd(DateUtils.stringToDate(today));
OfflineActivitySettlementStatistics yesStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);

Map<String, Object> result = new HashMap<>();
result.put("monthGrantPrice",monthStatistics.getSumGrantPrice());
result.put("grantPriceDayPercentage",getPercentage(yesStatistics.getSumGrantPrice(),yesYesStatistics.getSumGrantPrice()));
result.put("grantPriceWeekPercentage",getPercentage(yesStatistics.getSumGrantPrice(),yesWeekStatistics.getSumGrantPrice()));

result.put("monthRecordCount",monthStatistics.getRecordCount());
result.put("recordCountDayPercentage",getPercentage(yesStatistics.getRecordCount(),yesYesStatistics.getRecordCount()));
result.put("recordCountWeekPercentage",getPercentage(yesStatistics.getRecordCount(),yesWeekStatistics.getRecordCount()));

result.put("monthMallPrice",monthStatistics.getSumMallPrice());
result.put("mallPriceDayPercentage",getPercentage(yesStatistics.getSumMallPrice(),yesYesStatistics.getSumMallPrice()));
result.put("mallPriceWeekPercentage",getPercentage(yesStatistics.getSumMallPrice(),yesWeekStatistics.getSumMallPrice()));

result.put("monthMerchantPrice",monthStatistics.getSumMerchantPrice());
result.put("merchantPriceDayPercentage",getPercentage(yesStatistics.getSumMerchantPrice(),yesYesStatistics.getSumMerchantPrice()));
result.put("merchantPriceWeekPercentage",getPercentage(yesStatistics.getSumMerchantPrice(),yesWeekStatistics.getSumMerchantPrice()));

return result;
}


private String getPercentage(Integer yes, Integer yesYes){
NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);

String percentage = "--";
if(yes > 0){
Integer count = yes - yesYes;
percentage = nf.format(count.doubleValue() / new Double(yesYes).doubleValue());
}
return percentage;
}

@Override
public PageInfo<WxOfflineActivity> activityListAsPage(WxOfflineActivity activity, Integer pageNum, Integer pageSize) {
handlerQuery(activity);
PageInfo<WxOfflineActivity> activityPageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxOfflineActivityMapper.findList(activity));
handlerReturnList(activityPageInfo.getList());
return activityPageInfo;
}

private void handlerQuery(WxOfflineActivity record) {
if (null != record.getStatus()) {
//已上架
if(EnumOfflineActivityStatus.ON_LINE.getCode().equals(record.getStatus())){
record.setValidStatus(EnumYesOrNo.NO.getCode());
}
//已过期
else if(EnumOfflineActivityStatus.EXPIRE.getCode().equals(record.getStatus())){
record.setStatus(null);
record.setValidStatus(EnumYesOrNo.YES.getCode());
}
}
}

private void handlerReturnList(List<WxOfflineActivity> list) {
if (list == null || list.isEmpty()) {
return;
}

for (WxOfflineActivity activity : list) {
if(new Date().before(activity.getStartTime())){
activity.setStatus(EnumOfflineActivityStatus.EXPIRE.getCode());
}
//获取结算相关
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.updateTenantInfo(activity);
settlement.setActivityId(activity.getId());
OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);
activity.setGrantMershantCount(settlementStatistics.getMerchantCount());
activity.setGrantPrice(settlementStatistics.getSumGrantPrice());
activity.setGrantRecordCount(settlementStatistics.getRecordCount());
activity.setMerchantSettlmentPrice(settlementStatistics.getSumMerchantPrice());

}
}

@Override
public List<OfflineActivitySettlement> getActivitySettlement(WxOfflineActivityGrantSettlement record) {

if (StringUtils.isNotBlank(record.getMerchantName())) {
WxMerchant merchant = new WxMerchant();
merchant.updateTenantInfo(record);
merchant.setName(record.getMerchantName());
List<Long> mids = wxMerchantMapper.findIdList(merchant);
if (null == mids || mids.size() <= 0 ) {
record.setId(-1L);
}else {
record.setMerchantIdList(mids);
}
}

List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record);
if (activitySettlementList != null && !activitySettlementList.isEmpty()) {

WxMerchant merchantQ = new WxMerchant();
merchantQ.updateTenantInfo(record);
Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ);

for (OfflineActivitySettlement activitySettlement : activitySettlementList) {
activitySettlement.setMerchantName(idAndNamesMap.get(activitySettlement.getMerchantId()));

}
}
return activitySettlementList;
}

@Override
public List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement grantSettlement) {
return wxOfflineActivityGrantSettlementMapper.findList(grantSettlement);
}
}




+ 72
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java View File

@@ -1,19 +1,24 @@
package com.iformall.service.impl;

import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityRecord;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivityRecordStatistics;
import com.iformall.enums.EnumOfflineActivityRecordStatus;
import com.iformall.mapper.WxMerchantMapper;
import com.iformall.service.WxMerchantService;
import com.iformall.service.WxOfflineActivityRecordService;
import com.iformall.mapper.WxOfflineActivityRecordMapper;
import com.iformall.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.NumberFormat;
import java.util.*;

/**
@@ -27,16 +32,34 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco
@Autowired
private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper;

@Autowired
WxMerchantMapper wxMerchantMapper;
@Autowired
WxMerchantService wxMerchantService;

@Override
public PageInfo<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize) {
handlerQuery(record);
PageInfo<WxOfflineActivityRecord> recordPageInfo = PageHelper.startPage(pageNum, pageSize).doSelectPageInfo(() -> wxOfflineActivityRecordMapper.findList(record));
handlerRecordList(record,recordPageInfo.getList());
return recordPageInfo;
}

private void handlerQuery(WxOfflineActivityRecord record) {
//商户处理
if (StringUtils.isNotBlank(record.getMerchantName())) {
WxMerchant merchant = new WxMerchant();
merchant.updateTenantInfo(record);
merchant.setName(record.getMerchantName());
List<Long> mids = wxMerchantMapper.findIdList(merchant);
if (null == mids || mids.size() <= 0 ) {
record.setId(-1L);
}else {
record.setMerchantIdList(mids);
}
}
}

private void handlerRecordList(TenantEntity tenantEntity,List<WxOfflineActivityRecord> recordList) {
if (recordList != null && recordList.size() > 0) {
WxMerchant merchantQ = new WxMerchant();
@@ -113,6 +136,55 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco
record.setAuditBy(userId);
wxOfflineActivityRecordMapper.updateAuditStatus(record);
}

@Override
public Map<String, Object> orderStatistics(TenantEntity tenantInfo) {
//最近30天
Date now = new Date();
String monthStartdate = DateUtils.getTimeBefore(30, now);
String yesyeweekDate = DateUtils.getTimeBefore(8, now);//计算周同比时间
String weekStartdate = DateUtils.getTimeBefore(7, now);
String yesyesDate = DateUtils.getTimeBefore(2, now);//计算日同比时间
String yesterdayDate = DateUtils.getTimeBefore(1, now);
String today = DateUtils.getTimeBefore(0, now);

//最近30天数据
WxOfflineActivityRecord recordQ = new WxOfflineActivityRecord();
recordQ.updateTenantInfo(tenantInfo);
recordQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate));
Integer monthCount = wxOfflineActivityRecordMapper.getCount(recordQ);
//一周前的昨天
recordQ.setCreateDateBegin(DateUtils.stringToDate(yesyeweekDate));
recordQ.setCreateDateEnd(DateUtils.stringToDate(weekStartdate));
Integer yesWeekCount = wxOfflineActivityRecordMapper.getCount(recordQ);
//昨天的昨天
recordQ.setCreateDateBegin(DateUtils.stringToDate(yesyesDate));
recordQ.setCreateDateEnd(DateUtils.stringToDate(yesterdayDate));
Integer yesYesCount = wxOfflineActivityRecordMapper.getCount(recordQ);
//昨天
recordQ.setCreateDateBegin(DateUtils.stringToDate(yesterdayDate));
recordQ.setCreateDateEnd(DateUtils.stringToDate(today));
Integer yesCount = wxOfflineActivityRecordMapper.getCount(recordQ);

Map<String, Object> result = new HashMap<>();
result.put("monthCount",monthCount);

NumberFormat nf = NumberFormat.getPercentInstance();
nf.setMinimumFractionDigits(2);
String dayPercentage = "--";
if (yesYesCount > 0) {
Integer count = yesCount - yesYesCount;
dayPercentage = nf.format(count.doubleValue() / new Double(yesYesCount).doubleValue());
}
result.put("dayPercentage",dayPercentage);
String weekPercentage = "--";
if (yesWeekCount > 0) {
Integer count = yesCount - yesWeekCount;
weekPercentage = nf.format(count.doubleValue() / new Double(yesWeekCount).doubleValue());
}
result.put("weekPercentage",weekPercentage);
return result;
}
}




+ 20
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml View File

@@ -32,4 +32,24 @@
create_date,update_date,lottery_num,
lottery_count,anniversary_lottery_num
</sql>


<select id="getCusCount" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Integer">
SELECT COUNT(DISTINCT cus_phone) FROM wx_offline_activity_grant_award
where 1 = 1
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != createDateBegin">
and `create_date` &gt;= #{createDateBegin}
</if>

<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>
</select>
</mapper>

+ 6
- 8
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml View File

@@ -25,9 +25,7 @@
<result property="awardCount" column="award_count" jdbcType="INTEGER"/>
<result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/>
<result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/>
<result property="mallSharePrice" column="mall_share_price" jdbcType="INTEGER"/>
<result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/>
<result property="merchantSharePrice" column="merchant_share_price" jdbcType="INTEGER"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>
@@ -39,8 +37,8 @@
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,mall_share_price,merchant_share_rate,
merchant_share_price,create_date,update_date
mall_share_rate,merchant_share_rate,
create_date,update_date
</sql>

<insert id="insertList" parameterType="java.util.List">
@@ -51,8 +49,8 @@
`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`,`mall_share_price`,`merchant_share_rate`,
`merchant_share_price`,`create_date`,`update_date`)
`mall_share_rate`,`merchant_share_rate`,
`create_date`,`update_date`)
values
<foreach collection="addList" item="item" index="index" separator=",">
(#{item.id,jdbcType=BIGINT},#{item.tenantId,jdbcType=VARCHAR},#{item.parentTenantId,jdbcType=VARCHAR},
@@ -61,8 +59,8 @@
#{item.awardItamId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.awardGrade,jdbcType=INTEGER},
#{item.awardMinAmount,jdbcType=INTEGER},#{item.awardMaxAmount,jdbcType=INTEGER},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL},
#{item.awardPrice,jdbcType=INTEGER},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER},
#{item.mallShareRate,jdbcType=DECIMAL},#{item.mallSharePrice,jdbcType=INTEGER},#{item.merchantShareRate,jdbcType=DECIMAL},
#{item.merchantSharePrice,jdbcType=INTEGER},#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP})
#{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP})
</foreach>
</insert>
</mapper>

+ 134
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml View File

@@ -37,8 +37,72 @@
create_date,update_date
</sql>

<sql id="dynamicWhereConditions">
where 1 = 1

<if test=" null != id ">
and `id` = #{id}
</if>

<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != recordId ">
and `record_id` = #{recordId}
</if>
<if test=" null != orderNo and orderNo != '' ">
and `order_no` like concat('%', #{orderNo},'%')
</if>

<if test=" null != merchantId ">
and `merchant_id` = #{merchantId}
</if>
<if test=" null != activityId ">
and `activity_id` = #{activityId}
</if>
<if test=" null != activityItemId ">
and `activity_item_id` = #{activityItemId}
</if>
<if test=" null != awardItamId ">
and `award_itam_id` = #{awardItamId}
</if>
<if test=" null != grantId ">
and `grant_id` = #{grantId}
</if>
<if test=" null != createDateBegin">
and `create_date` &gt;= #{createDateBegin}
</if>

<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>
<if test=" null != merchantIdList ">
and merchant_id in
<foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")">
#{midItem}
</foreach>
</if>

<if test=" null != ids ">
and id in
<foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")">
#{idItem}
</foreach>
</if>
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</sql>

<select id="findList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantSettlement" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_grant_settlement
<include refid="dynamicWhereConditions" />
</select>

<insert id="insertList" parameterType="java.util.List">
insert into wx_offline_activity_grant_item
insert into wx_offline_activity_grant_settlement
(id,tenant_id,parent_tenant_id,
record_id,order_no,order_money,
merchant_id,activity_id,activity_item_id,
@@ -57,4 +121,73 @@
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP})
</foreach>
</insert>

<select id="settlementStatistics" parameterType="com.iformall.domain.po.WxOfflineActivityGrantSettlement" resultType="com.iformall.domain.vo.OfflineActivitySettlementStatistics">
SELECT sum(real_grant_price) as 'sumGrantPrice',
count(DISTINCT record_id) as 'recordCount',
count(DISTINCT merchant_id) as 'merchantCount',
sum(real_mall_share_price) as 'sumMallPrice',
sum(real_merchant_share_price) as 'sumMerchantPrice'
FROM wx_offline_activity_grant_settlement
where 1 = 1
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != activityId">
and `activity_id` = #{activityId}
</if>

<if test=" null != createDateBegin">
and `create_date` &gt;= #{createDateBegin}
</if>

<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>

</select>


<select id="getActivitySettlement" parameterType="com.iformall.domain.po.WxOfflineActivityGrantSettlement" resultType="com.iformall.domain.vo.OfflineActivitySettlement">
SELECT merchant_id as 'merchantId',
activity_id as 'activityId',
count(DISTINCT record_id) as 'recordCount',
sum(order_money) as 'sumOrderMoney',
sum(real_grant_price) as 'sumGrantPrice',
sum(real_mall_share_price) as 'sumMallPrice',
sum(real_merchant_share_price) as 'sumMerchantPrice'
FROM wx_offline_activity_grant_settlement
where `activity_id` = #{activityId}
<if test=" null != id ">
and `id` = #{id}
</if>
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != createDateBegin">
and `create_date` &gt;= #{createDateBegin}
</if>

<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>
<if test=" null != merchantIdList ">
and merchant_id in
<foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")">
#{midItem}
</foreach>
</if>
group by merchant_id
<if test=" null != sortColumns"> order by ${sortColumns} </if>
</select>


</mapper>

+ 19
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml View File

@@ -193,4 +193,23 @@
</if>
</update>

<select id="getCount" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="Integer">
SELECT COUNT(1) FROM wx_offline_activity_record
where 1 = 1
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>

<if test=" null != createDateBegin">
and `create_date` &gt;= #{createDateBegin}
</if>

<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>
</select>

</mapper>

Loading…
Cancel
Save