Przeglądaj źródła

Merge branch 'release_toaliyun_real' of https://git.malls.iformall.com/server/formallProject into release_toaliyun_real

release_toaliyun_real
winter 1 rok temu
rodzic
commit
e2d398d1fa
62 zmienionych plików z 5703 dodań i 1 usunięć
  1. +150
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java
  2. +141
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java
  3. +111
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java
  4. +153
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java
  5. +231
    -0
      mallinkAdmin/src/main/resources/db/migration/V202408000000004.sql
  6. +90
    -0
      mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java
  7. +139
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java
  8. +101
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java
  9. +164
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java
  10. +151
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java
  11. +151
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java
  12. +113
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java
  13. +62
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityMerchant.java
  14. +204
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java
  15. +41
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecordGrant.java
  16. +16
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityRecordStatistics.java
  17. +31
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java
  18. +18
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java
  19. +37
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsMoneyRule.java
  20. +38
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsRule.java
  21. +38
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMerchantType.java
  22. +38
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityRecordStatus.java
  23. +38
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityStatus.java
  24. +38
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityType.java
  25. +28
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsItemMapper.java
  26. +28
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java
  27. +27
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java
  28. +31
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java
  29. +28
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityItemMapper.java
  30. +28
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMapper.java
  31. +27
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMerchantMapper.java
  32. +27
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordGrantMapper.java
  33. +38
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java
  34. +19
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java
  35. +37
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java
  36. +15
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemService.java
  37. +37
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java
  38. +18
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityItemService.java
  39. +19
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityMerchantService.java
  40. +15
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordGrantService.java
  41. +36
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java
  42. +28
    -0
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityService.java
  43. +1
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java
  44. +77
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java
  45. +729
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  46. +70
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java
  47. +326
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java
  48. +88
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java
  49. +81
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityMerchantServiceImpl.java
  50. +44
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java
  51. +260
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java
  52. +164
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java
  53. +14
    -0
      mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java
  54. +82
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml
  55. +127
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml
  56. +123
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml
  57. +188
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml
  58. +80
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml
  59. +107
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityMapper.xml
  60. +76
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityMerchantMapper.xml
  61. +41
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityRecordGrantMapper.xml
  62. +245
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml

+ 150
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityController.java Wyświetl plik

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

import com.github.pagehelper.PageInfo;
import com.iformall.annotation.ApiVersion;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.constant.SwaggerConstant;
import com.iformall.controller.base.BaseController;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.*;

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

@Autowired
private WxOfflineActivityService wxOfflineActivityService;

@Autowired
private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService;

@ApiOperation("分页列表接口")
@GetMapping("list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
public ResultData list(@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 = wxOfflineActivityService.listAsPage(wxOfflineActivity, pageNum, pageSize);
return new ResultData(page);
}
@ApiOperation("新增修改接口")
@PostMapping("saveOrUpdate")
public ResultData saveOrUpdate(@RequestBody WxOfflineActivity wxOfflineActivity) {
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivity.updateTenantInfo(tenantEntity);
if(wxOfflineActivity.getActivityItemList() == null || wxOfflineActivity.getActivityItemList().size() == 0){
return new ResultData(Result.ERROR,"活动项不能为空");
}
if(wxOfflineActivity.getAllMerchant() == null){
return new ResultData(Result.ERROR,"活动商户不能为空");
}
for (WxOfflineActivityItem activityItem:wxOfflineActivity.getActivityItemList()){
if(activityItem.getActivityAwardsItemList() == null || activityItem.getActivityAwardsItemList().size() == 0){
return new ResultData(Result.ERROR,"活动["+activityItem.getName()+"]奖项不能为空");
}
for (WxOfflineActivityAwardsItem activityAwardsItem :activityItem.getActivityAwardsItemList()){
if(EnumOfflineActivityAwardsMoneyRule.MALL_ONLY.getCode().equals(activityAwardsItem.getMoneyRule())){
activityAwardsItem.setMallShareRate(new BigDecimal(100));
activityAwardsItem.setMerchantShareRate(new BigDecimal(0));
}
else if (EnumOfflineActivityAwardsMoneyRule.MERCHANT_ONLY.getCode().equals(activityAwardsItem.getMoneyRule())){
activityAwardsItem.setMallShareRate(new BigDecimal(0));
activityAwardsItem.setMerchantShareRate(new BigDecimal(100));
}
else if (EnumOfflineActivityAwardsMoneyRule.SHARE.getCode().equals(activityAwardsItem.getMoneyRule())) {
if (activityAwardsItem.getMallShareRate().add(activityAwardsItem.getMerchantShareRate()).intValue() != 100) {
return new ResultData(Result.ERROR,"分担规则下,商户和商管的比例总和需要为100%");
}
}

}
}
if(EnumOfflineActivityMerchantType.ADD.getCode().equals(wxOfflineActivity.getAllMerchant())){
if(wxOfflineActivity.getActivityMerchantList() == null || wxOfflineActivity.getActivityMerchantList().size() == 0){
return new ResultData(Result.ERROR,"活动参加商户不能为空");
}
}
else if (EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(wxOfflineActivity.getAllMerchant())) {
if(wxOfflineActivity.getActivityMerchantList() == null || wxOfflineActivity.getActivityMerchantList().size() == 0){
return new ResultData(Result.ERROR,"活动不参加商户不能为空");
}
}
wxOfflineActivityService.saveOrUpdate(wxOfflineActivity);
return new ResultData(wxOfflineActivity);
}
@ApiOperation("上架")
@PostMapping("online")
public ResultData online(@RequestBody WxOfflineActivity wxOfflineActivity) {
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivity.updateTenantInfo(tenantEntity);
wxOfflineActivity.setStatus(EnumOfflineActivityStatus.ON_LINE.getCode());
wxOfflineActivityService.updateStatus(wxOfflineActivity);
return new ResultData();
}
@ApiOperation("下架")
@PostMapping("offline")
public ResultData offline(@RequestBody WxOfflineActivity wxOfflineActivity) {
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivity.updateTenantInfo(tenantEntity);
wxOfflineActivity.setStatus(EnumOfflineActivityStatus.OFF_LINE.getCode());
wxOfflineActivityService.updateStatus(wxOfflineActivity);
return new ResultData();
}
@ApiOperation("查询详情")
@GetMapping("getInfoById")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键id", dataType = "Long", paramType = "query", required = true)})
public ResultData getInfoById(Long id) {
TenantEntity tenantInfo = getTenantInfo();
WxOfflineActivity activity = wxOfflineActivityService.getInfoById(id, tenantInfo.getTenantId());
return new ResultData(activity);
}

@ApiOperation("活动奖品发放明细导出")
@GetMapping("/grantExport")
public void grantExport(@ModelAttribute WxOfflineActivity wxOfflineActivity, HttpServletRequest request, HttpServletResponse response) {
if(wxOfflineActivity.getId() == null){
throw new MallinkException(Result.ERROR,"ID 为空");
}

TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivity.updateTenantInfo(tenantInfo);
wxOfflineActivityGrantAwardService.activityGrantExport(request,response,wxOfflineActivity);
}

}

+ 141
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java Wyświetl plik

@@ -0,0 +1,141 @@
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.*;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxOfflineActivityGrantAwardService;
import io.swagger.annotations.Api;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

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

@Autowired
private WxOfflineActivityGrantAwardService wxOfflineActivityGrantAwardService;

@ApiOperation("参加活动用户订单统计")
@GetMapping("recordStatistics")
public ResultData statisticsCount(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) {
if(wxOfflineActivityRecord.getActivityId() == null){
return new ResultData(Result.ERROR,"请选择活动");
}
if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){
return new ResultData(Result.ERROR,"请输入用户手机号");
}

TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
Map<String,Object> statisticsMap = wxOfflineActivityGrantAwardService.getRecordStatistics(wxOfflineActivityRecord);
return new ResultData(statisticsMap);
}

@ApiOperation("参加活动用户订单列表")
@GetMapping("recordList")
@ApiImplicitParams({})
public ResultData recordList(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) {
if(wxOfflineActivityRecord.getActivityId() == null){
return new ResultData(Result.ERROR,"请选择活动");
}
if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){
return new ResultData(Result.ERROR,"请输入用户手机号");
}

TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC);
List<WxOfflineActivityRecord> recordList = wxOfflineActivityGrantAwardService.getRecordList(wxOfflineActivityRecord);

return new ResultData(recordList);
}

@ApiOperation("参加活动用户订单导出")
@GetMapping("/recordExport")
public void recordExport(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, HttpServletRequest request, HttpServletResponse response) {
if(wxOfflineActivityRecord.getActivityId() == null){
throw new MallinkException(Result.ERROR,"请选择活动");
}
if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){
throw new MallinkException(Result.ERROR,"请输入用户手机号");
}

TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC);
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为空");
}
if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
return new ResultData(Result.ERROR,"请选择订单");
}
// if(StringUtil.isBlank(wxOfflineActivityGrantAward.getSignImg())){
// return new ResultData(Result.ERROR,"签名为空");
// }
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity);
wxOfflineActivityGrantAward.setCreateBy(getUserId());
wxOfflineActivityGrantAwardService.grantAward(wxOfflineActivityGrantAward);
return new ResultData();
}

@ApiOperation("活动发奖详情")
@GetMapping("grantAwardDetail")
@ApiImplicitParams({})
public ResultData grantAwardDetail(@ModelAttribute WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
if(wxOfflineActivityGrantAward.getActivityId() == null){
return new ResultData(Result.ERROR,"活动ID为空");
}
if(wxOfflineActivityGrantAward.getRecordId() == null){
return new ResultData(Result.ERROR,"订单ID为空");
}
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityGrantAward.updateTenantInfo(tenantInfo);
WxOfflineActivityGrantAward grantAward = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward);
return new ResultData(grantAward);
}

}

+ 111
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityRecordController.java Wyświetl plik

@@ -0,0 +1,111 @@
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.*;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule;
import com.iformall.enums.EnumOfflineActivityMerchantType;
import com.iformall.enums.EnumOfflineActivityRecordStatus;
import com.iformall.enums.EnumOfflineActivityStatus;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxOfflineActivityRecordService;
import com.iformall.service.WxOfflineActivityService;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;

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

@Autowired
private WxOfflineActivityRecordService wxOfflineActivityRecordService;

@ApiOperation("分页列表接口")
@GetMapping("list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
public ResultData list(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, Integer pageNum, Integer pageSize) {
if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord();
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC);
final PageInfo<WxOfflineActivityRecord> page = wxOfflineActivityRecordService.listAsPage(wxOfflineActivityRecord, pageNum, pageSize);

return new ResultData(page);
}

@ApiOperation("获取待审批数量")
@GetMapping("waitAudiCount")
public ResultData waitAudiCount() {
Integer waitAudiCount = wxOfflineActivityRecordService.getWaitAudiCount(getTenantInfo());
return new ResultData(waitAudiCount);
}

@ApiOperation("导出")
@GetMapping("/export")
public void export(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, HttpServletRequest request, HttpServletResponse response) {
if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord();
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC);
wxOfflineActivityRecordService.exportData(request,response,wxOfflineActivityRecord);
}
@ApiOperation("审核通过")
@PostMapping("audiPass")
public ResultData audiPass(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) {
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantEntity);
wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode());
wxOfflineActivityRecordService.auditRecord(wxOfflineActivityRecord,getUserId());
return new ResultData();
}
@ApiOperation("审核驳回")
@PostMapping("audtFail")
public ResultData audtFail(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) {

if(StringUtil.isBlank(wxOfflineActivityRecord.getAuditRemark())){
return new ResultData(Result.ERROR,"驳回意见不能为空");
}
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantEntity);
wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode());
wxOfflineActivityRecordService.auditRecord(wxOfflineActivityRecord,getUserId());
return new ResultData();
}
@ApiOperation("查询详情")
@GetMapping("getInfoById")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键id", dataType = "Long", paramType = "query", required = true)})
public ResultData getInfoById(Long id) {
TenantEntity tenantInfo = getTenantInfo();
WxOfflineActivityRecord record = wxOfflineActivityRecordService.getInfoById(id, tenantInfo.getTenantId());
return new ResultData(record);
}


}

+ 153
- 0
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java Wyświetl plik

@@ -0,0 +1,153 @@
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.*;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivitySettlement;
import com.iformall.exception.MallinkException;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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 OfflineActivitySettlement 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("merchantSettlementStatistics")
@ApiImplicitParams({})
public ResultData merchantSettlementStatistics(@ModelAttribute OfflineActivitySettlement 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);
Map<String,Object> recordList = wxOfflineActivityGrantSettlementService.merchantSettlementStatistics(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);
}

@ApiOperation("单个活动单个门店结算记录导出")
@GetMapping("/merchantSettlementExport")
public void exportData(@ModelAttribute WxOfflineActivityGrantSettlement grantSettlement, HttpServletRequest request, HttpServletResponse response) {
if(grantSettlement.getActivityId() == null){
throw new MallinkException(Result.ERROR,"请选择活动");
}
if(grantSettlement.getMerchantId() == null){
throw new MallinkException(Result.ERROR,"请选择门店");
}
TenantEntity tenantInfo = getTenantInfo();
grantSettlement.updateTenantInfo(tenantInfo);
wxOfflineActivityGrantSettlementService.exportData(request,response,grantSettlement);
}

}

+ 231
- 0
mallinkAdmin/src/main/resources/db/migration/V202408000000004.sql Wyświetl plik

@@ -0,0 +1,231 @@
/*
Navicat Premium Dump SQL

Source Server : 101.200.130.134
Source Server Type : MySQL
Source Server Version : 50728 (5.7.28)
Source Host : 101.200.130.134:3306
Source Schema : mallink

Target Server Type : MySQL
Target Server Version : 50728 (5.7.28)
File Encoding : 65001

Date: 15/08/2024 15:28:13
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for wx_offline_activity
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity`;
CREATE TABLE `wx_offline_activity` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '活动名称',
`start_time` datetime NULL DEFAULT NULL COMMENT '开始时间',
`end_time` datetime NULL DEFAULT NULL COMMENT '结束时间',
`status` smallint(2) NOT NULL DEFAULT 0 COMMENT '状态(0:未上架 1:已上架)',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`all_merchant` smallint(1) NOT NULL DEFAULT 0 COMMENT '是否全部商户',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_awards_item
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_awards_item`;
CREATE TABLE `wx_offline_activity_awards_item` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`activity_item_id` bigint(20) NOT NULL COMMENT '活动项id',
`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '奖项名称',
`grade` int(11) NULL DEFAULT NULL COMMENT '奖项等级',
`min_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '限制最小金额',
`max_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '限制最大金额',
`cash_back_ratio` decimal(10, 2) NULL DEFAULT NULL COMMENT '返现比例',
`price` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项价值',
`money_rule` smallint(1) NOT NULL COMMENT '分担规则(0-商管 1-商户 2-分担)',
`mall_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商管分担比例',
`merchant_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商户分担比例',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动奖项' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_grant_award
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_grant_award`;
CREATE TABLE `wx_offline_activity_grant_award` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`activity_id` bigint(20) NOT NULL COMMENT '活动ID',
`order_money_sum` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单总金额',
`order_count` int(11) NULL DEFAULT NULL COMMENT '订单数量',
`cus_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户姓名',
`cus_phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户电话',
`real_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实际领奖人',
`real_card` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '实际领奖人身份证号',
`sign_img` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '签名图片',
`create_by` bigint(20) NULL DEFAULT NULL,
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`lottery_num` json NULL COMMENT '抽奖券编码',
`lottery_count` int(11) NULL DEFAULT NULL COMMENT '抽奖券数量',
`anniversary_lottery_num` json NULL COMMENT '周年庆抽奖编码',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动发放奖励' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_grant_item
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_grant_item`;
CREATE TABLE `wx_offline_activity_grant_item` (
`id` bigint(20) NOT NULL,
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`grant_id` bigint(20) NOT NULL COMMENT '发放id',
`activity_id` bigint(20) NOT NULL COMMENT '活动id',
`activity_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '活动名称',
`activity_item_id` bigint(20) NOT NULL COMMENT '活动项id',
`activity_item_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '活动项名称',
`activity_item_type` smallint(1) NULL DEFAULT NULL COMMENT '活动项类型',
`award_itam_id` bigint(20) NOT NULL COMMENT '奖项id',
`award_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '奖项名称',
`award_grade` int(11) NULL DEFAULT NULL COMMENT '奖项等级',
`award_min_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项限制最小金额',
`award_max_amount` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项限制最大金额',
`awards_item_rule` smallint(1) NULL DEFAULT NULL COMMENT '奖项计算规则',
`cash_back_ratio` decimal(10, 2) NULL DEFAULT NULL COMMENT '返现比例',
`award_price` decimal(10, 2) NOT NULL COMMENT '奖项价值',
`award_count` int(11) NULL DEFAULT NULL COMMENT '奖项数量',
`money_rule` smallint(1) NOT NULL COMMENT '分担规则(0-商管 1-商户 2-分担)',
`mall_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商管分担比例',
`merchant_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商户分担比例',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `activity_id`(`grant_id`, `activity_item_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动发放奖励' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_grant_settlement
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_grant_settlement`;
CREATE TABLE `wx_offline_activity_grant_settlement` (
`id` bigint(20) NOT NULL,
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`record_id` bigint(20) NOT NULL COMMENT '参与记录id',
`order_no` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '订单编号',
`order_money` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单金额',
`merchant_id` bigint(20) NOT NULL COMMENT '商户id',
`activity_id` bigint(20) NOT NULL COMMENT '活动id',
`activity_item_id` bigint(20) NOT NULL COMMENT '活动项id',
`award_itam_id` bigint(20) NOT NULL COMMENT '奖项id',
`grant_id` bigint(20) NOT NULL COMMENT '发放id',
`grant_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '发放总价值',
`mall_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商管承担比率',
`merchant_share_rate` decimal(10, 2) NULL DEFAULT NULL COMMENT '商户承担比率',
`order_ratio` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单占比',
`real_grant_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '实际发放总价值',
`real_mall_share_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '实际商管承担总金额',
`real_merchant_share_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '实际商户承担总金额',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动发放奖励结算' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_item
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_item`;
CREATE TABLE `wx_offline_activity_item` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`activity_id` bigint(20) NOT NULL COMMENT '活动id',
`type` smallint(1) NOT NULL COMMENT '活动项类型',
`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '活动项名称',
`limit_money` decimal(10, 2) NOT NULL COMMENT '参与金额',
`awards_item_price` decimal(10, 2) NULL DEFAULT NULL COMMENT '奖项单价',
`awards_item_limit` int(11) NULL DEFAULT NULL COMMENT '奖项限制',
`awards_item_count` int(11) NULL DEFAULT NULL COMMENT '奖项总数量',
`awards_item_rule` smallint(1) NULL DEFAULT NULL COMMENT '奖项计算规则',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动项目' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_merchant
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_merchant`;
CREATE TABLE `wx_offline_activity_merchant` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`activity_id` bigint(20) NOT NULL COMMENT '活动编号',
`merchant_id` bigint(20) NOT NULL COMMENT '商户编号',
`whether_in` smallint(1) NOT NULL COMMENT '是否参加',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动商户' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_record
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_record`;
CREATE TABLE `wx_offline_activity_record` (
`id` bigint(20) NOT NULL COMMENT '主键ID',
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`order_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '订单号',
`order_money` decimal(10, 2) NULL DEFAULT NULL COMMENT '订单金额',
`cus_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户姓名',
`real_cus_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`cus_phone` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '客户电话',
`cus_address` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '客户地址',
`cus_card` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '身份证号',
`lottery_num` json NULL COMMENT '抽奖券编码',
`lottery_count` int(11) NULL DEFAULT NULL COMMENT '抽奖券数量',
`anniversary_lottery_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '周年庆抽奖编码',
`create_by` bigint(11) NULL DEFAULT NULL,
`merchant_id` bigint(20) NOT NULL COMMENT '商户编号',
`business_id` int(11) NULL DEFAULT NULL COMMENT '业态',
`create_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
`audit_remark` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '审批意见',
`audit_status` int(1) NOT NULL DEFAULT 0 COMMENT '审批状态',
`audit_by` bigint(20) NULL DEFAULT NULL COMMENT '审核人',
`audit_time` datetime NULL DEFAULT NULL COMMENT '审核时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动参与登记' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for wx_offline_activity_record_grant
-- ----------------------------
DROP TABLE IF EXISTS `wx_offline_activity_record_grant`;
CREATE TABLE `wx_offline_activity_record_grant` (
`tenant_id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户ID',
`parent_tenant_id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父租户ID',
`activity_id` bigint(20) NOT NULL COMMENT '活动id',
`record_id` bigint(20) NOT NULL COMMENT '参与记录id',
`grant_id` bigint(20) NOT NULL COMMENT '发放id',
UNIQUE INDEX `activity_id`(`activity_id`, `record_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '线下活动参与登记与发放关联表' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;



ALTER TABLE `mallink`.`wx_offline_activity_grant_item`
DROP INDEX `activity_id`;

+ 90
- 0
mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java Wyświetl plik

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

import com.github.pagehelper.PageInfo;
import com.iformall.common.Result;
import com.iformall.common.ResultData;
import com.iformall.domain.po.WxOfflineActivityRecord;
import com.iformall.domain.po.base.BaseEntity.SortField;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.service.*;
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.Map;

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

@Autowired
private WxOfflineActivityRecordService wxOfflineActivityRecordService;
@ApiOperation("分页列表接口")
@GetMapping("list")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
@ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "int", paramType = "query", required = true)})
public ResultData list(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord, Integer pageNum, Integer pageSize) {
if (null == wxOfflineActivityRecord) wxOfflineActivityRecord = new WxOfflineActivityRecord();
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
wxOfflineActivityRecord.setSortColumns(SortField.CreateDate_DESC);
wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId());
final PageInfo<WxOfflineActivityRecord> page = wxOfflineActivityRecordService.listAsPage(wxOfflineActivityRecord, pageNum, pageSize);
return new ResultData(page);
}

@ApiOperation("新增修改接口")
@PostMapping("saveOrUpdate")
public ResultData saveOrUpdate(@RequestBody WxOfflineActivityRecord wxOfflineActivityRecord) {
if(StringUtil.isBlank(wxOfflineActivityRecord.getCusPhone())){
return new ResultData(Result.ERROR,"客户手机号不能为空");
}
if (null == wxOfflineActivityRecord.getOrderMoney() ) {
return new ResultData(Result.ERROR,"订单金额不能为空");
}
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantEntity);
wxOfflineActivityRecord.setCreateBy(getMerchantBUserId());
wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId());
wxOfflineActivityRecordService.saveOrUpdate(wxOfflineActivityRecord);
return new ResultData();
}
@ApiOperation("查询当前信息详情")
@GetMapping("getInfoById")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "主键id", dataType = "Long", paramType = "query", required = true)})
public ResultData getInfoById(Long id) {
TenantEntity tenantInfo = getTenantInfo();
WxOfflineActivityRecord activity = wxOfflineActivityRecordService.getById(id, tenantInfo.getTenantId());
return new ResultData(activity);
}
@ApiOperation("查询当前信息统计")
@GetMapping("statistics")
public ResultData statisticsCount(@ModelAttribute WxOfflineActivityRecord wxOfflineActivityRecord) {
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantInfo);
wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId());
Map<String,Integer> statisticsMap = wxOfflineActivityRecordService.getStatistics(wxOfflineActivityRecord);
return new ResultData(statisticsMap);
}

}

+ 139
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivity.java Wyświetl plik

@@ -0,0 +1,139 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

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

/**
* 线下活动
* @TableName wx_offline_activity
*/
@TableName(value ="wx_offline_activity")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivity extends TenantEntity {
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;

/**
* 活动名称
*/
@TableField(value = "name")
private String name;

/**
* 开始时间
*/
@TableField(value = "start_time")
private Date startTime;

/**
* 结束时间
*/
@TableField(value = "end_time")
private Date endTime;

/**
* 状态(0:未上架 1:已上架)
*/
@TableField(value = "status")
private Integer status;

/**
* 创建时间
*/
@TableField(value = "create_date")
private Date createDate;

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

/**
* 是否全部商户
*/
@TableField(value = "all_merchant")
private Integer allMerchant;

@TableField(exist = false)
private List<WxOfflineActivityItem> activityItemList;

@TableField(exist = false)
private List<WxOfflineActivityMerchant> activityMerchantList;

@TableField(exist = false)
private Date begin;
@TableField(exist = false)
private Date end;

/**
* 是否过期
*/
@TableField(exist = false)
private Integer validStatus;

/**
* 参与订单数量
*/
@TableField(exist = false)
private Integer recordCount;
/**
* 参与待审核订单数量
*/
@TableField(exist = false)
private Integer waitRecordCount;
/**
* 参与已审核订单数量
*/
@TableField(exist = false)
private Integer successRecordCount;

/**
* 参与商户数量
*/
@TableField(exist = false)
private Integer mershantCount;

/**
* 发放商户数量
*/
@TableField(exist = false)
private Integer grantMershantCount;

/**
* 发放奖项数量
*/
@TableField(exist = false)
private Integer grantItemCount;

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

+ 101
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java Wyświetl plik

@@ -0,0 +1,101 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.math.BigDecimal;
import java.util.Date;

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

/**
* 线下活动奖项
* @TableName wx_offline_activity_awards_item
*/
@TableName(value ="wx_offline_activity_awards_item")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityAwardsItem extends TenantEntity {
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;

/**
* 活动项id
*/
@TableField(value = "activity_item_id")
private Long activityItemId;

/**
* 奖项名称
*/
@TableField(value = "name")
private String name;

/**
* 奖项等级
*/
@TableField(value = "grade")
private Integer grade;

/**
* 限制最小金额
*/
@TableField(value = "min_amount")
private BigDecimal minAmount;

/**
* 限制最大金额
*/
@TableField(value = "max_amount")
private BigDecimal maxAmount;

/**
* 返现比例(与奖项价值2选1)
*/
@TableField(value = "cash_back_ratio")
private BigDecimal cashBackRatio;

/**
* 奖项价值
*/
@TableField(value = "price")
private BigDecimal price;

/**
* 分担规则(0-商管 1-商户 2-分担)
*/
@TableField(value = "money_rule")
private Integer moneyRule;

/**
* 商管分担比例
*/
@TableField(value = "mall_share_rate")
private BigDecimal mallShareRate;

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

/**
* 创建时间
*/
@TableField(value = "create_date")
private Date createDate;

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

}

+ 164
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java Wyświetl plik

@@ -0,0 +1,164 @@
package com.iformall.domain.po;

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;
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;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
* 线下活动发放奖励
* @TableName wx_offline_activity_grant_award
*/
@TableName(value ="wx_offline_activity_grant_award")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityGrantAward extends TenantEntity{
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;

/**
* 活动ID
*/
@TableField(value = "activity_id")
private Long activityId;

@TableField(exist = false)
private String activityName;

/**
* 订单总金额
*/
@TableField(value = "order_money_sum")
private BigDecimal orderMoneySum;

/**
* 订单数量
*/
@TableField(value = "order_count")
private Integer orderCount;

/**
* 客户姓名
*/
@TableField(value = "cus_name")
private String cusName;

/**
* 客户电话
*/
@TableField(value = "cus_phone")
private String cusPhone;

/**
* 实际领奖人
*/
@TableField(value = "real_name")
private String realName;

/**
* 实际领奖人身份证号
*/
@TableField(value = "real_card")
private String realCard;

/**
* 签名图片
*/
@TableField(value = "sign_img")
private String signImg;

/**
*
*/
@TableField(value = "create_by")
private Long createBy;
@TableField(exist = false)
private List<Long> createByName;
@TableField(exist = false)
private List<Long> createByIds;

/**
* 创建时间
*/
@TableField(value = "create_date")
private Date createDate;

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

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

/**
* 抽奖券编码
*/
@TableField(value = "lottery_num")
private String lotteryNum;
@TableField(exist = false)
private List<String> lotteryNumList;
public List<String> getLotteryNumList() {
if(StringUtils.isNotBlank(lotteryNum)){
try {
List<String> stringList = JSON.parseArray(lotteryNum, String.class);
stringList.removeIf(String::isEmpty);
lotteryNumList = stringList.isEmpty() ? null : stringList;
}catch(Exception e){}
}
return lotteryNumList;
}

/**
* 抽奖券数量
*/
@TableField(value = "lottery_count")
private Integer lotteryCount;

/**
* 周年庆抽奖编码
*/
@TableField(value = "anniversary_lottery_num")
private String anniversaryLotteryNum;
@TableField(exist = false)
private List<String> anniversaryLotteryNumList;
public List<String> getAnniversaryLotteryNumList() {
if(StringUtils.isNotBlank(anniversaryLotteryNum)){
try {
List<String> stringList = JSON.parseArray(anniversaryLotteryNum, String.class);
stringList.removeIf(String::isEmpty);
anniversaryLotteryNumList = stringList.isEmpty() ? null : stringList;
}catch(Exception e){}
}
return anniversaryLotteryNumList;
}

@TableField(exist = false)
private Long recordId;
@TableField(exist = false)
private List<Long> recordIds;
@TableField(exist = false)
private List<WxOfflineActivityRecord> recordList;

@TableField(exist = false)
private List<WxOfflineActivityItem> activityItemList;
}

+ 151
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java Wyświetl plik

@@ -0,0 +1,151 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

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

/**
* 线下活动发放奖励
* @TableName wx_offline_activity_grant_item
*/
@TableName(value ="wx_offline_activity_grant_item")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityGrantItem extends TenantEntity {
/**
*
*/
@TableId(value = "id")
private Long id;

/**
* 发放id
*/
@TableField(value = "grant_id")
private Long grantId;

/**
* 活动id
*/
@TableField(value = "activity_id")
private Long activityId;

/**
* 活动名称
*/
@TableField(value = "activity_name")
private String activityName;

/**
* 活动项id
*/
@TableField(value = "activity_item_id")
private Long activityItemId;

/**
* 活动项名称
*/
@TableField(value = "activity_item_name")
private String activityItemName;

/**
* 活动项类型
*/
@TableField(value = "activity_item_type")
private Integer activityItemType;

/**
* 奖项id
*/
@TableField(value = "award_itam_id")
private Long awardItamId;

/**
* 奖项名称
*/
@TableField(value = "award_name")
private String awardName;

/**
* 奖项等级
*/
@TableField(value = "award_grade")
private Integer awardGrade;

/**
* 奖项限制最小金额
*/
@TableField(value = "award_min_amount")
private BigDecimal awardMinAmount;

/**
* 奖项限制最大金额
*/
@TableField(value = "award_max_amount")
private BigDecimal awardMaxAmount;

/**
* 奖项计算规则
*/
@TableField(value = "awards_item_rule")
private Integer awardsItemRule;

/**
* 返现比例
*/
@TableField(value = "cash_back_ratio")
private BigDecimal cashBackRatio;

/**
* 奖项价值
*/
@TableField(value = "award_price")
private BigDecimal awardPrice;

/**
* 奖项数量
*/
@TableField(value = "award_count")
private Integer awardCount;

/**
* 分担规则(0-商管 1-商户 2-分担)
*/
@TableField(value = "money_rule")
private Integer moneyRule;

/**
* 商管分担比例
*/
@TableField(value = "mall_share_rate")
private BigDecimal mallShareRate;

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

/**
* 创建时间
*/
@TableField(value = "create_date")
private Date createDate;

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

}

+ 151
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java Wyświetl plik

@@ -0,0 +1,151 @@
package com.iformall.domain.po;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
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;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
* 线下活动发放奖励结算
* @TableName wx_offline_activity_grant_settlement
*/
@TableName(value ="wx_offline_activity_grant_settlement")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityGrantSettlement extends TenantEntity {

/**
*
*/
@TableId(value = "id")
private Long id;

/**
* 参与记录id
*/
@TableField(value = "record_id")
private Long recordId;

/**
* 订单编号
*/
@Excel(name = "订单号", width = 20, orderNum = "1")
@TableField(value = "order_no")
private String orderNo;

/**
* 订单金额
*/
@Excel(name = "订单金额(元)", width = 20, orderNum = "3")
@TableField(value = "order_money")
private BigDecimal orderMoney;

/**
* 商户id
*/
@TableField(value = "merchant_id")
private Long merchantId;
@TableField(exist = false)
private String merchantName;
@TableField(exist = false)
private List<Long> merchantIdList;

/**
* 活动id
*/
@TableField(value = "activity_id")
private Long activityId;

/**
* 活动项id
*/
@TableField(value = "activity_item_id")
private Long activityItemId;

/**
* 奖项id
*/
@TableField(value = "award_itam_id")
private Long awardItamId;

/**
* 发放id
*/
@TableField(value = "grant_id")
private Long grantId;

/**
* 发放总价值
*/
@TableField(value = "grant_price")
private BigDecimal grantPrice;

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

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

/**
* 订单占比
*/
@TableField(value = "order_ratio")
private BigDecimal orderRatio;

/**
* 实际发放总价值
*/
@Excel(name = "发放价值(元)", width = 20, orderNum = "4")
@TableField(value = "real_grant_price")
private BigDecimal realGrantPrice;

/**
* 实际商管承担总金额
*/
@Excel(name = "商管承担金额(元)", width = 20, orderNum = "5")
@TableField(value = "real_mall_share_price")
private BigDecimal realMallSharePrice;

/**
* 实际商户承担总金额
*/
@Excel(name = "商户承担金额(元)", width = 20, orderNum = "6")
@TableField(value = "real_merchant_share_price")
private BigDecimal realMerchantSharePrice;

/**
* 创建时间
*/
@Excel(name = "发放时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "2")
@TableField(value = "create_date")
private Date createDate;

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

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

}

+ 113
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java Wyświetl plik

@@ -0,0 +1,113 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

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

/**
* 线下活动项目
* @TableName wx_offline_activity_item
*/
@TableName(value ="wx_offline_activity_item")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityItem extends TenantEntity {
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;

/**
* 活动id
*/
@TableField(value = "activity_id")
private Long activityId;

/**
* 活动项类型
*/
@TableField(value = "type")
private Integer type;

/**
* 活动项名称
*/
@TableField(value = "name")
private String name;

/**
* 参与金额
*/
@TableField(value = "limit_money")
private BigDecimal limitMoney;

/**
* 奖项价值(用来计算奖券数量)
*/
@TableField(value = "awards_item_price")
private BigDecimal awardsItemPrice;

/**
* 奖项数量限制(为0时无限制)
*/
@TableField(value = "awards_item_limit")
private Integer awardsItemLimit;

/**
* 奖项总数量
*/
@TableField(value = "awards_item_count")
private Integer awardsItemCount;

/**
* 奖项计算规则(0代表无规则)
*/
@TableField(value = "awards_item_rule")
private Integer awardsItemRule;

/**
* 创建时间
*/
@TableField(value = "create_date")
private Date createDate;

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

/**
* 奖项集合
*/
@TableField(exist = false)
private List<WxOfflineActivityAwardsItem> activityAwardsItemList;
/**
* 是否满足活动条件
*/
@TableField(exist = false)
private Boolean isMeet;
/**
* 实际获得奖项限制(为0时无限制)
*/
@TableField(exist = false)
private Integer realAwardsItemLimit;

/**
* 发放奖项
*/
@TableField(exist = false)
private List<WxOfflineActivityGrantItem> activityGrantItemList;

}

+ 62
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityMerchant.java Wyświetl plik

@@ -0,0 +1,62 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;

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

/**
* 线下活动商户
* @TableName wx_offline_activity_merchant
*/
@TableName(value ="wx_offline_activity_merchant")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityMerchant extends TenantEntity {
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;

/**
* 活动编号
*/
@TableField(value = "activity_id")
private Long activityId;

/**
* 商户编号
*/
@TableField(value = "merchant_id")
private Long merchantId;

/**
*
*/
@TableField(value = "whether_in")
private Integer whetherIn;


/**
* 创建时间
*/
@TableField(value = "create_date")
private Date createDate;

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

@TableField(exist = false)
private WxMerchant merchant;

}

+ 204
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java Wyświetl plik

@@ -0,0 +1,204 @@
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;
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;
import lombok.EqualsAndHashCode;
import lombok.ToString;

/**
* 线下活动参与登记
* @TableName wx_offline_activity_record
*/
@TableName(value ="wx_offline_activity_record")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityRecord extends TenantEntity {

/**
* 主键ID
*/
@TableId(value = "id")
private Long id;

/**
* 订单号
*/
@Excel(name = "订单号", width = 20, orderNum = "1")
@TableField(value = "order_no")
private String orderNo;

/**
* 订单金额
*/
@Excel(name = "订单金额(元)", width = 20, orderNum = "7")
@TableField(value = "order_money")
private BigDecimal orderMoney;

/**
* 客户姓名
*/
@Excel(name = "客户姓名", width = 20, orderNum = "3")
@TableField(value = "cus_name")
private String cusName;

/**
*
*/
@TableField(value = "real_cus_name")
private String realCusName;

/**
* 客户电话
*/
@Excel(name = "客户电话", width = 20, orderNum = "4")
@TableField(value = "cus_phone")
private String cusPhone;

/**
* 客户地址
*/
@Excel(name = "客户地址", width = 20, orderNum = "5")
@TableField(value = "cus_address")
private String cusAddress;

/**
* 身份证号
*/
@TableField(value = "cus_card")
private String cusCard;

/**
* 抽奖券编码
*/
@TableField(value = "lottery_num")
private String lotteryNum;
@TableField(exist = false)
private List<String> lotteryNumList;
public List<String> getLotteryNumList() {
if(StringUtils.isNotBlank(lotteryNum)){
try {
List<String> stringList = JSON.parseArray(lotteryNum, String.class);
stringList.removeIf(String::isEmpty);
lotteryNumList = stringList.isEmpty() ? null : stringList;
}catch(Exception e){}
}
return lotteryNumList;
}

/**
* 抽奖券数量
*/
@TableField(value = "lottery_count")
private Integer lotteryCount;

/**
* 周年庆抽奖编码
*/
@TableField(value = "anniversary_lottery_num")
private String anniversaryLotteryNum;

/**
*
*/
@TableField(value = "create_by")
private Long createBy;

/**
* 商户编号
*/
@TableField(value = "merchant_id")
private Long merchantId;

@Excel(name = "商户名称", width = 20, orderNum = "6")
@TableField(exist = false)
private String merchantName;

@TableField(exist = false)
private List<Long> merchantIdList;
@TableField(exist = false)
private List<Long> notMerchantIdList;

@TableField(value = "business_id")
private Integer businessId;

/**
* 创建时间
*/
@Excel(name = "提交时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "2")
@TableField(value = "create_date")
private Date createDate;

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

/**
* 更新时间
*/
@TableField(value = "update_date")
private Date updateDate;

/**
* 审批意见
*/
@Excel(name = "审核意见", width = 20, orderNum = "9")
@TableField(value = "audit_remark")
private String auditRemark;

/**
* 审批状态
*/
@Excel(name = "审核状态", width = 20, orderNum = "8", replace = {"审核中_0", "已审批_1", "已驳回_2", "已发奖_10"})
@TableField(value = "audit_status")
private Integer auditStatus;

/**
* 审核人
*/
@TableField(value = "audit_by")
private Long auditBy;

@Excel(name = "审核人", width = 20, orderNum = "11")
@TableField(exist = false)
private String auditByName;

/**
* 审核时间
*/
@Excel(name = "审核意见", width = 20, format = "yyyy-MM-dd HH:mm:ss", orderNum = "10")
@TableField(value = "audit_time")
private Date auditTime;

@TableField(exist = false)
private Date auditTimeBegin;
@TableField(exist = false)
private Date auditTimeEnd;

@TableField(exist = false)
private String sendByName;
@TableField(exist = false)
private Date sendTimeBegin;
@TableField(exist = false)
private Date sendTimeEnd;

@TableField(exist = false)
private Long activityId;

@TableField(exist = false)
private BigDecimal orderRatio;

}

+ 41
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecordGrant.java Wyświetl plik

@@ -0,0 +1,41 @@
package com.iformall.domain.po;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;

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

/**
* 线下活动参与登记与发放关联表
* @TableName wx_offline_activity_record_grant
*/
@TableName(value ="wx_offline_activity_record_grant")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityRecordGrant extends TenantEntity {

/**
* 活动id
*/
@TableField(value = "activity_id")
private Long activityId;

/**
* 参与记录id
*/
@TableField(value = "record_id")
private Long recordId;

/**
* 发放id
*/
@TableField(value = "grant_id")
private Long grantId;
}

+ 16
- 0
mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivityRecordStatistics.java Wyświetl plik

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

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

@Data
public class OfflineActivityRecordStatistics implements Serializable {

private static final long serialVersionUID = 1L;

private Integer auditStatus;
private Integer count;
private BigDecimal sumMoney;
}

+ 31
- 0
mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java Wyświetl plik

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

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

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

@Data
public class OfflineActivitySettlement extends TenantEntity {

private Long id;
private List<Long> merchantIdList;

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

@SortColumn(column = "recordCount")
private Integer recordCount;
@SortColumn(column = "sumOrderMoney")
private BigDecimal sumOrderMoney;
@SortColumn(column = "sumGrantPrice")
private BigDecimal sumGrantPrice;
@SortColumn(column = "sumMallPrice")
private BigDecimal sumMallPrice;
@SortColumn(column = "sumMerchantPrice")
private BigDecimal sumMerchantPrice;
}

+ 18
- 0
mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlementStatistics.java Wyświetl plik

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

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;

@Data
public class OfflineActivitySettlementStatistics implements Serializable {

private static final long serialVersionUID = 1L;

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

+ 37
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsMoneyRule.java Wyświetl plik

@@ -0,0 +1,37 @@
package com.iformall.enums;

/**
* @author gongbiao
*/
public enum EnumOfflineActivityAwardsMoneyRule {

MALL_ONLY(0, "商管承担全部"),
MERCHANT_ONLY(1, "商户承担全部"),
SHARE(2, "商管商户分担");

public static EnumOfflineActivityAwardsMoneyRule getEnum(Integer code) {
for (EnumOfflineActivityAwardsMoneyRule value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumOfflineActivityAwardsMoneyRule(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 38
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsRule.java Wyświetl plik

@@ -0,0 +1,38 @@
package com.iformall.enums;


/**
* @author gongbiao
*/
public enum EnumOfflineActivityAwardsRule {

DEF(0, "四舍五入(分)"),
YUAN(1, "四舍五入(元)"),
TEN(2, "四舍五入(十)"),
;

public static EnumOfflineActivityAwardsRule getEnum(Integer code) {
for (EnumOfflineActivityAwardsRule value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumOfflineActivityAwardsRule(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 38
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityMerchantType.java Wyświetl plik

@@ -0,0 +1,38 @@
package com.iformall.enums;


/**
* @author gongbiao
*/
public enum EnumOfflineActivityMerchantType {

ALL(0, "全部商户"),
ADD(1, "参加商户"),
UN_ADD(2, "不参加商户")
;

public static EnumOfflineActivityMerchantType getEnum(Integer code) {
for (EnumOfflineActivityMerchantType value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumOfflineActivityMerchantType(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 38
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityRecordStatus.java Wyświetl plik

@@ -0,0 +1,38 @@
package com.iformall.enums;


/**
* @author gongbiao
*/
public enum EnumOfflineActivityRecordStatus {

AUDTING(0, "审核中"),
AUDI_SUCCESS(1, "审批通过"),
AUDT_FAIL(2, "审批拒绝"),
IS_GRANT(10, "已发奖"),;

public static EnumOfflineActivityRecordStatus getEnum(Integer code) {
for (EnumOfflineActivityRecordStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumOfflineActivityRecordStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 38
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityStatus.java Wyświetl plik

@@ -0,0 +1,38 @@
package com.iformall.enums;


/**
* @author gongbiao
*/
public enum EnumOfflineActivityStatus {

OFF_LINE(0, "未上架"),
ON_LINE(1, "已上架"),
EXPIRE(2, "已过期")
;

public static EnumOfflineActivityStatus getEnum(Integer code) {
for (EnumOfflineActivityStatus value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumOfflineActivityStatus(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 38
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityType.java Wyświetl plik

@@ -0,0 +1,38 @@
package com.iformall.enums;


/**
* @author gongbiao
*/
public enum EnumOfflineActivityType {

LOTTERY_DRAW(1, "抽奖活动"),
GIFT(2, "满额赠礼"),
CASHBACK(3, "返现活动")
;

public static EnumOfflineActivityType getEnum(Integer code) {
for (EnumOfflineActivityType value : values()) {
if (value.getCode().equals(code)) {
return value;
}
}
return null;
}

private Integer code;
private String message;

EnumOfflineActivityType(Integer code, String message) {
this.code = code;
this.message = message;
}

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 28
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityAwardsItemMapper.java Wyświetl plik

@@ -0,0 +1,28 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityAwardsItem;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_awards_item(线下活动奖项)】的数据库操作Mapper
* @createDate 2024-08-06 13:20:56
* @Entity com.iformall.domain.po.WxOfflineActivityAwardsItem
*/
public interface WxOfflineActivityAwardsItemMapper extends CommonMapper<WxOfflineActivityAwardsItem, Long> {

WxOfflineActivityAwardsItem selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<WxOfflineActivityAwardsItem> findList(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem);

Integer itemCount(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem);

void delete(WxOfflineActivityAwardsItem wxOfflineActivityAwardsItem);
}





+ 28
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java Wyświetl plik

@@ -0,0 +1,28 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Mapper
* @createDate 2024-08-09 00:13:44
* @Entity com.iformall.domain.po.WxOfflineActivityGrantAward
*/
public interface WxOfflineActivityGrantAwardMapper extends CommonMapper<WxOfflineActivityGrantAward, Long> {

Integer getCusCount(WxOfflineActivityGrantAward grantAwardQ);

List<Long> getRecordIdList(WxOfflineActivityGrantAward grantAwardQ);

WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<WxOfflineActivityGrantAward> findList(WxOfflineActivityGrantAward grantAwardQ);
}





+ 27
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java Wyświetl plik

@@ -0,0 +1,27 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Mapper
* @createDate 2024-08-09 00:13:44
* @Entity com.iformall.domain.po.WxOfflineActivityGrantItem
*/
public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOfflineActivityGrantItem, Long> {

void insertList(@Param("grantItemList")List<WxOfflineActivityGrantItem> grantItemList);

Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ);

List<WxOfflineActivityGrantItem> findList(WxOfflineActivityGrantItem grantItemQ);
}





+ 31
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java Wyświetl plik

@@ -0,0 +1,31 @@
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 org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Mapper
* @createDate 2024-08-09 00:13:44
* @Entity com.iformall.domain.po.WxOfflineActivityGrantSettlement
*/
public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxOfflineActivityGrantSettlement, Long> {

void insertList(@Param("settlementList")List<WxOfflineActivityGrantSettlement> settlementList);

OfflineActivitySettlementStatistics settlementStatistics(WxOfflineActivityGrantSettlement settlement);

List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement settlement);

List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement);
}





+ 28
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityItemMapper.java Wyświetl plik

@@ -0,0 +1,28 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityItem;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_item(线下活动项目)】的数据库操作Mapper
* @createDate 2024-08-06 13:20:56
* @Entity com.iformall.domain.po.WxOfflineActivityItem
*/
public interface WxOfflineActivityItemMapper extends CommonMapper<WxOfflineActivityItem, Long> {

WxOfflineActivityItem selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<WxOfflineActivityItem> findList(WxOfflineActivityItem wxOfflineActivityItem);

List<Long> findIds(WxOfflineActivityItem wxOfflineActivityItem);

void delete(WxOfflineActivityItem wxOfflineActivityItem);
}





+ 28
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMapper.java Wyświetl plik

@@ -0,0 +1,28 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity(线下活动)】的数据库操作Mapper
* @createDate 2024-08-06 13:20:56
* @Entity com.iformall.domain.po.WxOfflineActivity
*/
public interface WxOfflineActivityMapper extends CommonMapper<WxOfflineActivity, Long> {

WxOfflineActivity selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<WxOfflineActivity> findList(WxOfflineActivity wxOfflineActivity);

void updateStatus(WxOfflineActivity wxOfflineActivity);

List<Long> findIds(WxOfflineActivity wxOfflineActivity);
}





+ 27
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityMerchantMapper.java Wyświetl plik

@@ -0,0 +1,27 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityMerchant;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_merchant(线下活动商户)】的数据库操作Mapper
* @createDate 2024-08-06 13:20:56
* @Entity com.iformall.domain.po.WxOfflineActivityMerchant
*/
public interface WxOfflineActivityMerchantMapper extends CommonMapper<WxOfflineActivityMerchant, Long> {

List<Long> getMerchantIdList(@Param("activityId")Long activityId, @Param("tenantId")String tenantId);

List<WxOfflineActivityMerchant> findList(WxOfflineActivityMerchant wxOfflineActivityMerchant);

void delete(WxOfflineActivityMerchant wxOfflineActivityMerchant);

}





+ 27
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordGrantMapper.java Wyświetl plik

@@ -0,0 +1,27 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityRecordGrant;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Mapper
* @createDate 2024-08-09 00:13:44
* @Entity com.iformall.domain.po.WxOfflineActivityRecordGrant
*/
public interface WxOfflineActivityRecordGrantMapper extends CommonMapper<WxOfflineActivityRecordGrant, Long> {

Integer selectGrantCount(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId);

void insertList(@Param("recordGrantList")List<WxOfflineActivityRecordGrant> recordGrantList);

Long selectGrantId(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId);
}





+ 38
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityRecordMapper.java Wyświetl plik

@@ -0,0 +1,38 @@
package com.iformall.mapper;

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityRecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iformall.domain.vo.OfflineActivityRecordStatistics;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Mapper
* @createDate 2024-08-09 00:13:44
* @Entity com.iformall.domain.po.WxOfflineActivityRecord
*/
public interface WxOfflineActivityRecordMapper extends CommonMapper<WxOfflineActivityRecord, Long> {

List<WxOfflineActivityRecord> findList(WxOfflineActivityRecord record);

WxOfflineActivityRecord selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<OfflineActivityRecordStatistics> auditStatusStatistics(WxOfflineActivityRecord wxOfflineActivityRecord);

void updateAuditStatus(WxOfflineActivityRecord record);

WxOfflineActivityRecord selectLimitOne(WxOfflineActivityRecord wxOfflineActivityRecord);

Integer getCount(WxOfflineActivityRecord recordQ);

Integer getMerchantCount(WxOfflineActivityRecord recordQ);

List<WxOfflineActivityRecord> findGrantList(@Param("grantId")Long grantId, @Param("tenantId")String tenantId);
}





+ 19
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java Wyświetl plik

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

import com.iformall.domain.po.WxOfflineActivityAwardsItem;
import com.baomidou.mybatisplus.extension.service.IService;
import com.iformall.domain.po.WxOfflineActivityItem;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_awards_item(线下活动奖项)】的数据库操作Service
* @createDate 2024-08-06 13:20:56
*/
public interface WxOfflineActivityAwardsItemService {

void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList);

List<WxOfflineActivityAwardsItem> getActivityAwardsItemList(Long activityItemId, String tenantId);
}

+ 37
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantAwardService.java Wyświetl plik

@@ -0,0 +1,37 @@
package com.iformall.service;

import com.iformall.domain.po.WxOfflineActivity;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.MalformedURLException;
import java.util.List;
import java.util.Map;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Service
* @createDate 2024-08-09 00:13:44
*/
public interface WxOfflineActivityGrantAwardService {

Map<String, Object> getRecordStatistics(WxOfflineActivityRecord wxOfflineActivityRecord);

List<WxOfflineActivityRecord> getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord);

void handlerGrantAwardPage(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

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

void recordExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord);

WxOfflineActivityGrantAward grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);

void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity);
}

+ 15
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantItemService.java Wyświetl plik

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

import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantItem;
import com.baomidou.mybatisplus.extension.service.IService;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Service
* @createDate 2024-08-09 00:13:44
*/
public interface WxOfflineActivityGrantItemService {

void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);
}

+ 37
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityGrantSettlementService.java Wyświetl plik

@@ -0,0 +1,37 @@
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service
* @createDate 2024-08-09 00:13:44
*/
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(OfflineActivitySettlement grantSettlement);

Map<String, Object> merchantSettlementStatistics(OfflineActivitySettlement grantSettlement);

List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement grantSettlement);

void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement);

}

+ 18
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityItemService.java Wyświetl plik

@@ -0,0 +1,18 @@
package com.iformall.service;

import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityItem;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_item(线下活动项目)】的数据库操作Service
* @createDate 2024-08-06 13:20:56
*/
public interface WxOfflineActivityItemService {

void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List<WxOfflineActivityItem> activityItemList);

List<WxOfflineActivityItem> getActivityItemList(Long activityId, String tenantId);
}

+ 19
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityMerchantService.java Wyświetl plik

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


import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityMerchant;

import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_merchant(线下活动商户)】的数据库操作Service
* @createDate 2024-08-06 13:20:56
*/
public interface WxOfflineActivityMerchantService {

void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List<WxOfflineActivityMerchant> activityMerchantList);

List<WxOfflineActivityMerchant> getActivityMerchantList(Long activityId, String tenantId);
}

+ 15
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordGrantService.java Wyświetl plik

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

import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityRecordGrant;
import com.baomidou.mybatisplus.extension.service.IService;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Service
* @createDate 2024-08-09 00:13:44
*/
public interface WxOfflineActivityRecordGrantService{

void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);
}

+ 36
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityRecordService.java Wyświetl plik

@@ -0,0 +1,36 @@
package com.iformall.service;

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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Service
* @createDate 2024-08-09 00:13:44
*/
public interface WxOfflineActivityRecordService {

PageInfo<WxOfflineActivityRecord> listAsPage(WxOfflineActivityRecord record, Integer pageNum, Integer pageSize);

void saveOrUpdate(WxOfflineActivityRecord wxOfflineActivityRecord);

WxOfflineActivityRecord getById(Long id, String tenantId);
WxOfflineActivityRecord getInfoById(Long id, String tenantId);

Map<String, Integer> getStatistics(WxOfflineActivityRecord wxOfflineActivityRecord);

void auditRecord(WxOfflineActivityRecord wxOfflineActivityRecord, Long userId);

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

void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord);

Integer getWaitAudiCount(TenantEntity tenantInfo);
}

+ 28
- 0
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityService.java Wyświetl plik

@@ -0,0 +1,28 @@
package com.iformall.service;

import com.github.pagehelper.PageInfo;
import com.iformall.domain.po.WxOfflineActivity;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity(线下活动)】的数据库操作Service
* @createDate 2024-08-06 13:20:56
*/
public interface WxOfflineActivityService{

/**
* 根据实体查询分页列表
*
* @param record
* @param pageIndex
* @param pageSize
* @return
*/
PageInfo<WxOfflineActivity> listAsPage(WxOfflineActivity record, Integer pageIndex, Integer pageSize);

void saveOrUpdate(WxOfflineActivity wxOfflineActivity);

void updateStatus(WxOfflineActivity wxOfflineActivity);

WxOfflineActivity getInfoById(Long id, String tenantId);
}

+ 1
- 1
mallinkService/src/main/java/com/iformall/service/impl/WxGameServiceImpl.java Wyświetl plik

@@ -451,7 +451,7 @@ public class WxGameServiceImpl implements WxGameService {
List<Object> couponIdsList = wxGame.getCouponIdsList();
int x = (int)(Math.random()*100+1);
int y = 0;
if(couponIdsList != null || couponIdsList.size() > 0){
if(couponIdsList != null && !couponIdsList.isEmpty()){
for (Object a:couponIdsList) {
int weight = 0;
if(a instanceof WxCouponChannelVo){


+ 77
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java Wyświetl plik

@@ -0,0 +1,77 @@
package com.iformall.service.impl;

import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxOfflineActivityAwardsItem;
import com.iformall.domain.po.WxOfflineActivityItem;
import com.iformall.enums.EnumOfflineActivityType;
import com.iformall.service.WxOfflineActivityAwardsItemService;
import com.iformall.mapper.WxOfflineActivityAwardsItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_awards_item(线下活动奖项)】的数据库操作Service实现
* @createDate 2024-08-06 13:20:56
*/
@Service
public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivityAwardsItemService{

@Autowired
WxOfflineActivityAwardsItemMapper wxOfflineActivityAwardsItemMapper;

@Override
public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList) {
WxOfflineActivityAwardsItem activityAwardsItemDel = new WxOfflineActivityAwardsItem();
activityAwardsItemDel.updateTenantInfo(activityItem);
activityAwardsItemDel.setActivityItemId(activityItem.getId());
wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel);

for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) {
if(awaItem.getId() == null){
final IdWorker idWorker = IdWorker.get();
awaItem.setId(idWorker.nextId());
}
awaItem.updateTenantInfo(activityItem);
awaItem.setActivityItemId(activityItem.getId());

if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
awaItem.setCashBackRatio(BigDecimal.ZERO);
awaItem.setGrade(-1);
awaItem.setMinAmount(null);
awaItem.setMaxAmount(null);
}
else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) {
awaItem.setCashBackRatio(BigDecimal.ZERO);
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
awaItem.setGrade(-1);
awaItem.setMinAmount(null);
awaItem.setMaxAmount(null);
awaItem.setPrice(BigDecimal.ZERO);
}
if(awaItem.getCreateDate() == null){
awaItem.setCreateDate(activityItem.getUpdateDate());
}
awaItem.setUpdateDate(activityItem.getUpdateDate());
wxOfflineActivityAwardsItemMapper.insert(awaItem);
}
}

@Override
public List<WxOfflineActivityAwardsItem> getActivityAwardsItemList(Long activityItemId, String tenantId) {
WxOfflineActivityAwardsItem activityAwardsItemQuery = new WxOfflineActivityAwardsItem();
activityAwardsItemQuery.setActivityItemId(activityItemId);
activityAwardsItemQuery.setTenantId(tenantId);
List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemMapper.findList(activityAwardsItemQuery);
return activityAwardsItemList;
}
}





+ 729
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java Wyświetl plik

@@ -0,0 +1,729 @@
package com.iformall.service.impl;

import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants;
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;
import com.iformall.domain.po.*;
import com.iformall.domain.po.base.TenantEntity;
import com.iformall.domain.vo.OfflineActivityRecordStatistics;
import com.iformall.enums.*;
import com.iformall.exception.MallinkException;
import com.iformall.mapper.*;
import com.iformall.service.*;
import com.iformall.utils.DateUtils;
import com.iformall.utils.DownFileUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.NumberFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

import static java.util.stream.Collectors.*;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_award(线下活动发放奖励)】的数据库操作Service实现
* @createDate 2024-08-09 00:13:44
*/
@Service
public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivityGrantAwardService{

@Autowired
private WxOfflineActivityGrantAwardMapper wxOfflineActivityGrantAwardMapper;

@Autowired
private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper;

@Autowired
WxOfflineActivityMapper wxOfflineActivityMapper;

@Autowired
WxOfflineActivityMerchantMapper wxOfflineActivityMerchantMapper;

@Autowired
WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper;

@Autowired
WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper;

@Autowired
WxOfflineActivityGrantItemService wxOfflineActivityGrantItemService;

@Autowired
WxOfflineActivityRecordGrantService wxOfflineActivityRecordGrantService;

@Autowired
WxOfflineActivityItemService wxOfflineActivityItemService;

@Autowired
WxOfflineActivityService wxOfflineActivityService;

@Autowired
WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService;

@Autowired
WxMerchantService wxMerchantService;
@Autowired
MallUserInfoService mallUserInfoService;

@Autowired
ExcelService excelService;


@Override
public Map<String, Object> getRecordStatistics(WxOfflineActivityRecord wxOfflineActivityRecord) {
handlerRecordQuery(wxOfflineActivityRecord);
WxOfflineActivityRecord limitOne = wxOfflineActivityRecordMapper.selectLimitOne(wxOfflineActivityRecord);
Map<String, Object> result = new HashMap<>();
Integer audting = 0, audi_success = 0, audt_fail = 0;
BigDecimal sum_success = BigDecimal.ZERO, sum_fail = BigDecimal.ZERO;
if (limitOne == null) {
result.put("cus_name","查无此人");
result.put("cus_phone",wxOfflineActivityRecord.getCusPhone());
}else{
result.put("cus_name",limitOne.getCusName());
result.put("cus_phone",limitOne.getCusPhone());

List<OfflineActivityRecordStatistics> recordStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord);

for(OfflineActivityRecordStatistics statistics : recordStatistics){
if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){
audting = statistics.getCount();
} else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) {
audi_success = statistics.getCount();
sum_success = statistics.getSumMoney();
} else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) {
audt_fail = statistics.getCount();
}
}
}

result.put("audting",audting);
result.put("audi_success",audi_success);
result.put("sum_success",sum_success);
result.put("audt_fail",audt_fail);
result.put("sum_count",audting+audi_success+audt_fail);
return result;
}

@Override
public List<WxOfflineActivityRecord> getRecordList(WxOfflineActivityRecord wxOfflineActivityRecord) {
handlerRecordQuery(wxOfflineActivityRecord);
List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findList(wxOfflineActivityRecord);
handlerRecordList(wxOfflineActivityRecord,recordList);
return recordList;
}

private void handlerRecordQuery(WxOfflineActivityRecord wxOfflineActivityRecord){
WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityRecord.getActivityId(), wxOfflineActivityRecord.getTenantId());
if (activity == null) {
wxOfflineActivityRecord.setId(-1l);
return;
}
wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime());
wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime());

if(EnumOfflineActivityMerchantType.ADD.getCode().equals(activity.getAllMerchant())){
List<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId());
wxOfflineActivityRecord.setMerchantIdList(merchantIds);
}else if(EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(activity.getAllMerchant())){
List<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId());
wxOfflineActivityRecord.setNotMerchantIdList(merchantIds);
}
}

private void handlerRecordList(WxOfflineActivityRecord wxOfflineActivityRecord, List<WxOfflineActivityRecord> recordList) {
if (recordList == null || recordList.isEmpty()) {
return;
}
WxMerchant merchantQ = new WxMerchant();
merchantQ.updateTenantInfo(wxOfflineActivityRecord);
Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ);
MallUserInfo userInfoQ = new MallUserInfo();
userInfoQ.updateTenantInfo(wxOfflineActivityRecord);
Map<Long, MallUserInfo> userMap = mallUserInfoService.getUserMap(userInfoQ);

for (WxOfflineActivityRecord record : recordList) {
record.setMerchantName(idAndNamesMap.get(record.getMerchantId()));
if(record.getAuditBy() != null){
record.setAuditByName(userMap.get(record.getAuditBy()).getName());
}
//判断订单是否发奖
Integer grantCount = wxOfflineActivityRecordGrantMapper.selectGrantCount(wxOfflineActivityRecord.getTenantId(),wxOfflineActivityRecord.getActivityId(),record.getId());
if(grantCount >= 1){
record.setAuditStatus(EnumOfflineActivityRecordStatus.IS_GRANT.getCode());
}

}
}

@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().compareTo(activityItem.getLimitMoney()) < 0){
activityItem.setIsMeet(false);
continue;
}
activityItem.setIsMeet(true);
//奖项限制数量
int limitCount = 0;
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){
limitCount = wxOfflineActivityGrantAward.getOrderMoneySum().divide(activityItem.getAwardsItemPrice(),0,BigDecimal.ROUND_HALF_DOWN).intValue();
}
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0
&& activityItem.getAwardsItemLimit() < limitCount){
limitCount = activityItem.getAwardsItemLimit();
}
if(limitCount == 0){
activityItem.setIsMeet(false);
}
activityItem.setRealAwardsItemLimit(limitCount);
}
else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){
List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){
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(Collections.singletonList(grantItem));
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){
activityItem.setIsMeet(false);
continue;
}
activityItem.setIsMeet(true);
activityItem.setRealAwardsItemLimit(1);
for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) {
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(awardsItem.getCashBackRatio().divide(new BigDecimal(100)));
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
awardsItem.setPrice(cashBackPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
awardsItem.setPrice(cashBackPrice.setScale(0, BigDecimal.ROUND_HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP);
awardsItem.setPrice(cashBackPriceTen.multiply(new BigDecimal(10)));
}
}
}
}
}

@Override
@Transactional(rollbackFor = Exception.class)
public void grantAward(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,false);
Date now = new Date();
final IdWorker idWorker = IdWorker.get();
wxOfflineActivityGrantAward.setId(idWorker.nextId());
wxOfflineActivityGrantAward.setCreateDate(now);
wxOfflineActivityGrantAward.setUpdateDate(now);
wxOfflineActivityGrantAwardMapper.insert(wxOfflineActivityGrantAward);

wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward);

//处理奖项
handlerGrantItem(activity,wxOfflineActivityGrantAward);
wxOfflineActivityGrantItemService.insertFromGrantAward(wxOfflineActivityGrantAward);

//结算
wxOfflineActivityGrantSettlementService.settlement(wxOfflineActivityGrantAward);
}


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

List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds());
if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) {
throw new MallinkException(Result.ERROR, "未查询到活动订单");
}
if(wxOfflineActivityRecords.stream().map(WxOfflineActivityRecord::getCusPhone).distinct().count() != 1){
throw new MallinkException(Result.ERROR, "请检查活动订单用户是否为同一人");
}

BigDecimal orderMoneySum = BigDecimal.ZERO;
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, "请检查活动订单审核状态");
}
if(record.getCreateDate().before(activity.getStartTime()) || record.getCreateDate().after(activity.getEndTime())){
throw new MallinkException(Result.ERROR, "请检查活动时间");
}
if(wxOfflineActivityRecordGrantMapper.selectGrantCount(activity.getTenantId(),activity.getId(),record.getId()) > 0){
throw new MallinkException(Result.ERROR, "请检查订单是否已参与活动");
}

orderMoneySum = orderMoneySum.add(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(orderMoneySum);

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

private void handlerGrantItem(WxOfflineActivity activity, WxOfflineActivityGrantAward wxOfflineActivityGrantAward){
if(wxOfflineActivityGrantAward.getActivityItemList() == null){
throw new MallinkException(Result.ERROR, "请检查活动项参数");
}

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 (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) {
i++;
if(grantGrantItem.getAwardCount() == null){
grantGrantItem.setAwardCount(1);
}
}

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

if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){
throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足");
}
//奖项限制数量
int limitCount = 0;
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){
limitCount = wxOfflineActivityGrantAward.getOrderMoneySum().divide(activityItem.getAwardsItemPrice(),0,BigDecimal.ROUND_HALF_DOWN).intValue();
}
if(activityItem.getAwardsItemLimit() != null && activityItem.getAwardsItemLimit() > 0
&& activityItem.getAwardsItemLimit() < limitCount){
limitCount = activityItem.getAwardsItemLimit();
}
if(activityGrantItemList.stream().mapToInt(WxOfflineActivityGrantItem::getAwardCount).sum()>limitCount){
throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"奖券超过限制");
}


for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) {
if(grantGrantItem.getAwardItamId() == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId());
if(awardsItem == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);
}

}
else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){
if(activityGrantItemList.size() != 1){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0);
if(grantGrantItem.getAwardItamId() == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId());
if(awardsItem == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
// if(awardsItem.getMinAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) < 0){
// throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)");
// }
if((awardsItem.getMinAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) < 0)
|| (awardsItem.getMaxAmount() != null && wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) > 0)){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)");
}

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);

}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
if(activityGrantItemList.size() != 1){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0);
if(grantGrantItem.getAwardItamId() == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}
WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId());
if(awardsItem == null){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
}

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);

}
}
if(i == 0){
throw new MallinkException(Result.ERROR, "请检查是否有活动奖项");
}
}

private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){
// grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId());
grantGrantItem.setActivityId(activity.getId());
grantGrantItem.setActivityName(activity.getName());
grantGrantItem.setActivityItemId(activityItem.getId());
grantGrantItem.setActivityItemName(activityItem.getName());
grantGrantItem.setActivityItemType(activityItem.getType());
grantGrantItem.setAwardItamId(awardsItem.getId());
grantGrantItem.setAwardName(awardsItem.getName());
grantGrantItem.setAwardGrade(awardsItem.getGrade());
grantGrantItem.setAwardMinAmount(awardsItem.getMinAmount());
grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount());
grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule());
grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio());
grantGrantItem.setAwardPrice(awardsItem.getPrice().multiply(new BigDecimal(grantGrantItem.getAwardCount())).setScale(2, BigDecimal.ROUND_HALF_UP));
grantGrantItem.setMoneyRule(awardsItem.getMoneyRule());
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;
}

@Override
public void recordExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord wxOfflineActivityRecord) {
handlerRecordQuery(wxOfflineActivityRecord);
List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findList(wxOfflineActivityRecord);
handlerRecordList(wxOfflineActivityRecord,recordList);
excelService.exportExcel(recordList, null, "用户参加活动订单列表", WxOfflineActivityRecord.class, "用户参加活动订单列表.xlsx", response, false);
}

@Override
public WxOfflineActivityGrantAward grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
Long grantId = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId());
if(grantId == null){
return null;
}
WxOfflineActivityGrantAward grantAward = wxOfflineActivityGrantAwardMapper.selectById(grantId,wxOfflineActivityGrantAward.getTenantId());
//获取奖项
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId());
grantAward.setActivityItemList(activityItemList);
//获取实际获得奖项
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(grantAward);
grantItemQ.setGrantId(grantId);
List<WxOfflineActivityGrantItem> grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ);
Map<Long, List<WxOfflineActivityGrantItem>> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId));
for (WxOfflineActivityItem activityItem : grantAward.getActivityItemList()) {
List<WxOfflineActivityGrantItem> grantActivityItemList = activityItemGrantMap.get(activityItem.getId());
if (grantActivityItemList == null || grantActivityItemList.isEmpty()) {
activityItem.setIsMeet(false);
continue;
}
activityItem.setIsMeet(true);
activityItem.setActivityGrantItemList(grantActivityItemList);
}
return grantAward;
}

@Override
public void activityGrantExport(HttpServletRequest request, HttpServletResponse response, WxOfflineActivity wxOfflineActivity) {
WxOfflineActivity activity = wxOfflineActivityService.getInfoById(wxOfflineActivity.getId(), wxOfflineActivity.getTenantId());
if(activity == null){
throw new MallinkException(Result.ERROR, "未查询到活动");
}
List<ExcelExportEntity> headList = getActivityGrantExportHead(activity);

List<Map<String,Object>> activityGrantObjectList = new ArrayList<>();

WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward();
grantAwardQ.updateTenantInfo(wxOfflineActivity);
grantAwardQ.setActivityId(wxOfflineActivity.getId());
List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ);
if(grantAwardList != null){
WxMerchant merchantQ = new WxMerchant();
merchantQ.updateTenantInfo(wxOfflineActivity);
Map<Long, String> merchantMap = wxMerchantService.getIdAndNamesMap(merchantQ);

MallUserInfo userInfoQ = new MallUserInfo();
userInfoQ.updateTenantInfo(wxOfflineActivity);
Map<Long, MallUserInfo> userMap = mallUserInfoService.getUserMap(userInfoQ);
//
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(wxOfflineActivity);
grantItemQ.setActivityId(wxOfflineActivity.getId());
List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ);
Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId));
for (WxOfflineActivityGrantAward grantAward : grantAwardList) {
List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findGrantList(grantAward.getId(),grantAward.getTenantId());
List<WxOfflineActivityGrantItem> grantItemList = grantItemMap.get(grantAward.getId());
Map<String,Object> activityGrantObject = new HashMap<>();
activityGrantObject.put("activityName",activity.getName());
List<String> merchantOrder = new ArrayList<>();
for (WxOfflineActivityRecord record : recordList) {
merchantOrder.add(record.getOrderNo()+"["+merchantMap.get(record.getMerchantId())+"]");
}
activityGrantObject.put("merchantOrder", String.join(";", merchantOrder));
activityGrantObject.put("orderMoneySum",grantAward.getOrderMoneySum());
activityGrantObject.put("cusName",grantAward.getCusName());
activityGrantObject.put("cusPhone",grantAward.getCusPhone());
activityGrantObject.put("realName",grantAward.getRealName());
activityGrantObject.put("realCard",grantAward.getRealCard());
activityGrantObject.put("createByName",grantAward.getCreateBy()!=null?userMap.get(grantAward.getCreateBy()).getName():"");
activityGrantObject.put("createDate",DateUtils.date2String(grantAward.getCreateDate()));
Map<Long, List<WxOfflineActivityGrantItem>> granActivityItemMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId));
for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) {
List<WxOfflineActivityGrantItem> granActivityItemList = granActivityItemMap.get(activityItem.getId());
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
Map<Long, WxOfflineActivityGrantItem> granAwardItamMap = new HashMap<>();
if(granActivityItemList != null && !granActivityItemList.isEmpty()){
granAwardItamMap = granActivityItemList.stream().collect(toMap(WxOfflineActivityGrantItem::getAwardItamId, Function.identity()));
}
for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) {
WxOfflineActivityGrantItem grantAwardsItem = granAwardItamMap.get(awardsItem.getId());
if(grantAwardsItem != null){
activityGrantObject.put(String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),grantAwardsItem.getAwardCount());
} else {
activityGrantObject.put(String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),0);
}
}
}else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){
if(granActivityItemList != null && !granActivityItemList.isEmpty()){
activityGrantObject.put(String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardName());
}
}else if(EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())){
if(granActivityItemList != null && !granActivityItemList.isEmpty()){
activityGrantObject.put("r"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getCashBackRatio().toString()+"%");
activityGrantObject.put("p"+String.valueOf(activityItem.getId()),granActivityItemList.get(0).getAwardPrice());
}else{
activityGrantObject.put("r"+String.valueOf(activityItem.getId()),"%");
activityGrantObject.put("p"+String.valueOf(activityItem.getId()),0);
}
}
}
if(grantAward.getLotteryNumList() != null && !grantAward.getLotteryNumList().isEmpty()){
activityGrantObject.put("lotteryNum",String.join(";", grantAward.getLotteryNumList()));
}
activityGrantObject.put("lotteryCount",grantAward.getLotteryCount());
if(grantAward.getAnniversaryLotteryNumList() != null && !grantAward.getAnniversaryLotteryNumList().isEmpty()){
activityGrantObject.put("anniversaryLotteryNum",String.join(";", grantAward.getAnniversaryLotteryNumList()));
}
// if(StringUtils.isNotBlank(grantAward.getSignImg())){
// try{
// activityGrantObject.put("signImg",DownFileUtil.url2byte(grantAward.getSignImg()));
// }catch (Exception e){}
// }
activityGrantObject.put("signImg",grantAward.getSignImg());
activityGrantObjectList.add(activityGrantObject);
}
}

excelService.exportExcel(headList, activityGrantObjectList, null, "活动奖品发放明细", "活动奖品发放明细.xlsx",true, response);
}

private List<ExcelExportEntity> getActivityGrantExportHead(WxOfflineActivity activity){
List<ExcelExportEntity> headList = new ArrayList<>();
ExcelExportEntity entity1 = new ExcelExportEntity("活动名称","activityName",20);
headList.add(entity1);
ExcelExportEntity entity2 = new ExcelExportEntity("订单[门店]","merchantOrder",30);
headList.add(entity2);
ExcelExportEntity entity3 = new ExcelExportEntity("订单总金额","orderMoneySum",20);
headList.add(entity3);
ExcelExportEntity entity4 = new ExcelExportEntity("客户姓名","cusName",20);
headList.add(entity4);
ExcelExportEntity entity5 = new ExcelExportEntity("客户电话","cusPhone",20);
headList.add(entity5);
ExcelExportEntity entity6 = new ExcelExportEntity("实际领奖人","realName",20);
headList.add(entity6);
ExcelExportEntity entity7 = new ExcelExportEntity("实际领奖人身份证号","realCard",20);
headList.add(entity7);
ExcelExportEntity entity8 = new ExcelExportEntity("发奖人","createByName",20);
headList.add(entity8);
ExcelExportEntity entity9 = new ExcelExportEntity("发奖时间","createDate",20);
headList.add(entity9);

for (WxOfflineActivityItem activityItem : activity.getActivityItemList()) {
//抽奖活动
//【活动项名称】【奖项名称】数量
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) {
ExcelExportEntity entity10 = new ExcelExportEntity("【"+activityItem.getName()+"】【"+awardsItem.getName()+"】数量",
String.valueOf(activityItem.getId())+String.valueOf(awardsItem.getId()),20);
headList.add(entity10);
}
}
//满额赠礼活动
//【活动项名称】奖项
else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) {
ExcelExportEntity entity11 = new ExcelExportEntity("【"+activityItem.getName()+"】奖项",
String.valueOf(activityItem.getId()),20);
headList.add(entity11);
}
//返现活动
//【活动项名称】返现比例
//【活动项名称】返现金额
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
ExcelExportEntity entity12 = new ExcelExportEntity("【"+activityItem.getName()+"】返现比例",
"r"+String.valueOf(activityItem.getId()),20);
headList.add(entity12);
ExcelExportEntity entity13 = new ExcelExportEntity("【"+activityItem.getName()+"】返现金额",
"p"+String.valueOf(activityItem.getId()),20);
headList.add(entity13);
}
}
ExcelExportEntity entity14 = new ExcelExportEntity("抽奖券编码","lotteryNum",20);
headList.add(entity14);
ExcelExportEntity entity15 = new ExcelExportEntity("抽奖券数量","lotteryCount",20);
headList.add(entity15);
ExcelExportEntity entity16 = new ExcelExportEntity("周年庆抽奖编码","anniversaryLotteryNum",20);
headList.add(entity16);
ExcelExportEntity entity17 = new ExcelExportEntity("签名图片","signImg",40);
// entity17.setType(BaseEntityTypeConstants.IMAGE_TYPE);
// entity17.setExportImageType(1);
// entity17.setHeight(20);

headList.add(entity17);

return headList;
}

}





+ 70
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java Wyświetl plik

@@ -0,0 +1,70 @@
package com.iformall.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantItem;
import com.iformall.domain.po.WxOfflineActivityItem;
import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule;
import com.iformall.enums.EnumOfflineActivityAwardsRule;
import com.iformall.enums.EnumOfflineActivityType;
import com.iformall.service.WxOfflineActivityGrantItemService;
import com.iformall.mapper.WxOfflineActivityGrantItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Service实现
* @createDate 2024-08-09 00:13:44
*/
@Service
public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityGrantItemService{

@Autowired
private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper;

@Override
public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<WxOfflineActivityGrantItem> rantItemList = new ArrayList<>();
final IdWorker idWorker = IdWorker.get();
Date now = new Date();
for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) {
if(activityItem.getActivityGrantItemList() == null){
continue;
}
for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) {
grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId());
grantGrantItem.setId(idWorker.nextId());
grantGrantItem.updateTenantInfo(wxOfflineActivityGrantAward);
grantGrantItem.setCreateDate(now);
grantGrantItem.setUpdateDate(now);
if(EnumOfflineActivityType.CASHBACK.getCode().equals(grantGrantItem.getActivityItemType())){
BigDecimal awardPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantGrantItem.getCashBackRatio().divide(new BigDecimal(100)));
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){
grantGrantItem.setAwardPrice(awardPrice.setScale(2, BigDecimal.ROUND_HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) {
grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){
BigDecimal awardPriceTen = awardPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP);
grantGrantItem.setAwardPrice(awardPriceTen.multiply(new BigDecimal(10)));
}
}
rantItemList.add(grantGrantItem);
}
}
wxOfflineActivityGrantItemMapper.insertList(rantItemList);

}

}





+ 326
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java Wyświetl plik

@@ -0,0 +1,326 @@
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.*;
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.ExcelService;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.*;
import java.util.stream.Collectors;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service实现
* @createDate 2024-08-09 00:13:44
*/
@Service
public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineActivityGrantSettlementService{

@Autowired
private WxOfflineActivityGrantSettlementMapper wxOfflineActivityGrantSettlementMapper;

@Autowired
WxOfflineActivityMapper wxOfflineActivityMapper;

@Autowired
WxMerchantMapper wxMerchantMapper;
@Autowired
WxMerchantService wxMerchantService;

@Autowired
ExcelService excelService;

@Override
public void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>();
final IdWorker idWorker = IdWorker.get();
Date now = new Date();
//获取订单占比(占比最少的订单用减法,尽量减少误差)
List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
int size = recordDescList.size() - 1;
BigDecimal lastRatio = new BigDecimal(100);
for(int i=0; i<size; i++){
WxOfflineActivityRecord record = recordDescList.get(i);
BigDecimal orderRatio = record.getOrderMoney()
.divide(wxOfflineActivityGrantAward.getOrderMoneySum(),4,RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
record.setOrderRatio(orderRatio);
lastRatio = lastRatio.subtract(orderRatio);
}
recordDescList.get(size).setOrderRatio(lastRatio);

for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) {
if(activityItem.getActivityGrantItemList() == null){
continue;
}
for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) {
List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>();
for (WxOfflineActivityRecord record : recordDescList){
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.setId(idWorker.nextId());
settlement.updateTenantInfo(wxOfflineActivityGrantItem);

settlement.setRecordId(record.getId());
settlement.setOrderNo(record.getOrderNo());
settlement.setOrderMoney(record.getOrderMoney());
settlement.setMerchantId(record.getMerchantId());

settlement.setActivityId(wxOfflineActivityGrantItem.getActivityId());
settlement.setActivityItemId(wxOfflineActivityGrantItem.getActivityItemId());
settlement.setAwardItamId(wxOfflineActivityGrantItem.getAwardItamId());
settlement.setGrantId(wxOfflineActivityGrantItem.getGrantId());
settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice());
settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate());
settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate());
settlement.setOrderRatio(record.getOrderRatio());

settlement.setCreateDate(now);
settlement.setUpdateDate(now);
itemSettlementList.add(settlement);
}
//计算订单分担金额,(占比最少的订单用减法,尽量减少误差)
int itemSize = itemSettlementList.size() - 1;
BigDecimal lastGrantPrice = wxOfflineActivityGrantItem.getAwardPrice();
for (int i = 0; i < itemSize; i++) {
WxOfflineActivityGrantSettlement settlement = itemSettlementList.get(i);
BigDecimal realGrantPrice = wxOfflineActivityGrantItem.getAwardPrice().multiply(settlement.getOrderRatio().divide(new BigDecimal(100))).setScale(0, RoundingMode.HALF_UP);
settlement.setRealGrantPrice(realGrantPrice);
settlement.setRealMallSharePrice(settlement.getRealGrantPrice()
.multiply(settlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(0, RoundingMode.HALF_UP));
settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice()));

lastGrantPrice = lastGrantPrice.subtract(realGrantPrice);
}
WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize);
lastSettlement.setRealGrantPrice(lastGrantPrice);
lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice()
.multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(0, RoundingMode.HALF_UP));
lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice()));

settlementList.addAll(itemSettlementList);
}
}

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(BigDecimal yes, BigDecimal yesYes){

String percentage = "--";
if(yesYes.compareTo(BigDecimal.ZERO) > 0){
BigDecimal count = yes.subtract(yesYes);
percentage = count.divide(yesYes,2,BigDecimal.ROUND_HALF_UP).toString();
}
return percentage;
}

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

String percentage = "--";
if(yesYes > 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(OfflineActivitySettlement 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 Map<String, Object> merchantSettlementStatistics(OfflineActivitySettlement grantSettlement) {
Map<String, Object> result = new HashMap<>();
WxOfflineActivity activity = wxOfflineActivityMapper.selectById(grantSettlement.getActivityId(),grantSettlement.getTenantId());
if(activity == null){
result.put("activityName","查无此活动");
}else{
result.put("activityName",activity.getName());
}
WxMerchant merchant = wxMerchantMapper.selectById(grantSettlement.getMerchantId());
if(merchant == null){
result.put("merchantName","查无此门店");
}else{
result.put("merchantName",merchant.getName());
}
List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement);
if (activitySettlementList == null || activitySettlementList.isEmpty()) {
result.put("recordCount",0);
result.put("sumOrderMoney",0);
result.put("sumGrantPrice",0);
result.put("sumMallPrice",0);
result.put("sumMerchantPrice",0);
return result;
}else{
OfflineActivitySettlement offlineActivitySettlement = activitySettlementList.get(0);
result.put("recordCount",offlineActivitySettlement.getRecordCount());
result.put("sumOrderMoney",offlineActivitySettlement.getSumOrderMoney());
result.put("sumGrantPrice",offlineActivitySettlement.getSumGrantPrice());
result.put("sumMallPrice",offlineActivitySettlement.getSumMallPrice());
result.put("sumMerchantPrice",offlineActivitySettlement.getSumMerchantPrice());
}

return result;
}

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

@Override
public void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityGrantSettlement grantSettlement) {
List<WxOfflineActivityGrantSettlement> list = wxOfflineActivityGrantSettlementMapper.findList(grantSettlement);
excelService.exportExcel(list, null, "活动商户结算", WxOfflineActivityGrantSettlement.class, "活动商户结算.xlsx", response, false);
}
}





+ 88
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java Wyświetl plik

@@ -0,0 +1,88 @@
package com.iformall.service.impl;

import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityAwardsItem;
import com.iformall.domain.po.WxOfflineActivityItem;
import com.iformall.enums.EnumOfflineActivityAwardsRule;
import com.iformall.enums.EnumOfflineActivityType;
import com.iformall.service.WxOfflineActivityAwardsItemService;
import com.iformall.service.WxOfflineActivityItemService;
import com.iformall.mapper.WxOfflineActivityItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_item(线下活动项目)】的数据库操作Service实现
* @createDate 2024-08-06 13:20:56
*/
@Service
public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemService{

@Autowired
WxOfflineActivityItemMapper wxOfflineActivityItemMapper;

@Autowired
WxOfflineActivityAwardsItemService wxOfflineActivityAwardsItemService;

@Override
public void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List<WxOfflineActivityItem> activityItemList) {
WxOfflineActivityItem activityItemDel = new WxOfflineActivityItem();
activityItemDel.updateTenantInfo(wxOfflineActivity);
activityItemDel.setActivityId(wxOfflineActivity.getId());
wxOfflineActivityItemMapper.delete(activityItemDel);

final IdWorker idWorker = IdWorker.get();

for (WxOfflineActivityItem activityItem : activityItemList) {
if(activityItem.getId() == null){
activityItem.setId(idWorker.nextId());
}

activityItem.updateTenantInfo(wxOfflineActivity);
activityItem.setActivityId(wxOfflineActivity.getId());
if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
activityItem.setAwardsItemRule(EnumOfflineActivityAwardsRule.DEF.getCode());
}
else if (EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())) {
activityItem.setLimitMoney(BigDecimal.ZERO);
activityItem.setAwardsItemPrice(BigDecimal.ZERO);
activityItem.setAwardsItemRule(EnumOfflineActivityAwardsRule.DEF.getCode());
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
activityItem.setAwardsItemPrice(BigDecimal.ZERO);
activityItem.setAwardsItemCount(0);
}
if(activityItem.getCreateDate() == null){
activityItem.setCreateDate(wxOfflineActivity.getUpdateDate());
}
activityItem.setUpdateDate(wxOfflineActivity.getUpdateDate());
wxOfflineActivityItemMapper.insert(activityItem);

//处理奖项
wxOfflineActivityAwardsItemService.saveOrUpdateFromActivityItem(activityItem,activityItem.getActivityAwardsItemList());
}
}

@Override
public List<WxOfflineActivityItem> getActivityItemList(Long activityId, String tenantId) {
WxOfflineActivityItem activityItemQuery = new WxOfflineActivityItem();
activityItemQuery.setActivityId(activityId);
activityItemQuery.setTenantId(tenantId);
List<WxOfflineActivityItem> itemList = wxOfflineActivityItemMapper.findList(activityItemQuery);
for (WxOfflineActivityItem item : itemList) {
List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId);
item.setActivityAwardsItemList(activityAwardsItemList);
}
return itemList;
}
}





+ 81
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityMerchantServiceImpl.java Wyświetl plik

@@ -0,0 +1,81 @@
package com.iformall.service.impl;

import com.iformall.common.IdWorker;
import com.iformall.domain.po.WxMerchant;
import com.iformall.domain.po.WxOfflineActivity;
import com.iformall.domain.po.WxOfflineActivityMerchant;
import com.iformall.enums.EnumOfflineActivityMerchantType;
import com.iformall.enums.EnumYesOrNo;
import com.iformall.service.WxMerchantService;
import com.iformall.service.WxOfflineActivityMerchantService;
import com.iformall.mapper.WxOfflineActivityMerchantMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

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

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_merchant(线下活动商户)】的数据库操作Service实现
* @createDate 2024-08-06 13:20:56
*/
@Service
public class WxOfflineActivityMerchantServiceImpl implements WxOfflineActivityMerchantService{

@Autowired
private WxOfflineActivityMerchantMapper wxOfflineActivityMerchantMapper;

@Autowired
WxMerchantService wxMerchantService;

@Override
public void saveOrUpdateFromActivity(WxOfflineActivity wxOfflineActivity, List<WxOfflineActivityMerchant> activityMerchantList) {
WxOfflineActivityMerchant activityMerchantDel = new WxOfflineActivityMerchant();
activityMerchantDel.updateTenantInfo(wxOfflineActivity);
activityMerchantDel.setActivityId(wxOfflineActivity.getId());
wxOfflineActivityMerchantMapper.delete(activityMerchantDel);

if(EnumOfflineActivityMerchantType.ALL.getCode().equals(wxOfflineActivity.getAllMerchant())){
return;
}
for (WxOfflineActivityMerchant wxOfflineActivityMerchant : activityMerchantList) {
if(wxOfflineActivityMerchant.getId() == null){
final IdWorker idWorker = IdWorker.get();
wxOfflineActivityMerchant.setId(idWorker.nextId());
}

wxOfflineActivityMerchant.updateTenantInfo(wxOfflineActivity);
wxOfflineActivityMerchant.setActivityId(wxOfflineActivity.getId());
if(EnumOfflineActivityMerchantType.ADD.getCode().equals(wxOfflineActivity.getAllMerchant())){
wxOfflineActivityMerchant.setWhetherIn(EnumYesOrNo.YES.getCode());
}
else if (EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(wxOfflineActivity.getAllMerchant())) {
wxOfflineActivityMerchant.setWhetherIn(EnumYesOrNo.NO.getCode());
}
wxOfflineActivityMerchantMapper.insert(wxOfflineActivityMerchant);
}
}

@Override
public List<WxOfflineActivityMerchant> getActivityMerchantList(Long activityId, String tenantId) {
WxOfflineActivityMerchant activityMerchantQuery = new WxOfflineActivityMerchant();
activityMerchantQuery.setActivityId(activityId);
activityMerchantQuery.setTenantId(tenantId);
List<WxOfflineActivityMerchant> activityMerchantList = wxOfflineActivityMerchantMapper.findList(activityMerchantQuery);

WxMerchant merchantQ = new WxMerchant();
merchantQ.setTenantId(tenantId);
Map<Long, WxMerchant> merchantMap = wxMerchantService.findMerchantMap(merchantQ);

for (WxOfflineActivityMerchant wxOfflineActivityMerchant : activityMerchantList) {
wxOfflineActivityMerchant.setMerchant(merchantMap.get(wxOfflineActivityMerchant.getMerchantId()));
}
return activityMerchantList;
}
}





+ 44
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java Wyświetl plik

@@ -0,0 +1,44 @@
package com.iformall.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityRecordGrant;
import com.iformall.service.WxOfflineActivityRecordGrantService;
import com.iformall.mapper.WxOfflineActivityRecordGrantMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Service实现
* @createDate 2024-08-09 00:13:44
*/
@Service
public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivityRecordGrantService{

@Autowired
private WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper;

@Override
public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<WxOfflineActivityRecordGrant> recordGrantList = new ArrayList<>();
wxOfflineActivityGrantAward.getRecordIds().forEach(recordId ->{
WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant();
recordGrant.updateTenantInfo(wxOfflineActivityGrantAward);
recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId());
recordGrant.setRecordId(recordId);
recordGrant.setGrantId(wxOfflineActivityGrantAward.getId());

recordGrantList.add(recordGrant);
});

wxOfflineActivityRecordGrantMapper.insertList(recordGrantList);
}
}





+ 260
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java Wyświetl plik

@@ -0,0 +1,260 @@
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.*;
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.mapper.WxOfflineActivityGrantAwardMapper;
import com.iformall.service.ExcelService;
import com.iformall.service.MallUserInfoService;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.NumberFormat;
import java.util.*;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity_record(线下活动参与登记)】的数据库操作Service实现
* @createDate 2024-08-09 00:13:44
*/
@Service
public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityRecordService{

@Autowired
private WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper;

@Autowired
WxOfflineActivityGrantAwardMapper wxOfflineActivityGrantAwardMapper;

@Autowired
WxMerchantMapper wxMerchantMapper;
@Autowired
WxMerchantService wxMerchantService;
@Autowired
MallUserInfoService mallUserInfoService;

@Autowired
ExcelService excelService;

@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);
}
}
//发奖处理(多对多关系)
WxOfflineActivityGrantAward awardQ = null;
if(StringUtils.isNotBlank(record.getSendByName())){
MallUserInfo userInfo = new MallUserInfo();
userInfo.updateTenantInfo(record);
userInfo.setUsername(record.getSendByName());
List<Long> mids = mallUserInfoService.getUserIdList(userInfo);
if (null == mids || mids.size() <= 0 ) {
record.setId(-1L);
}else {
awardQ = new WxOfflineActivityGrantAward();
awardQ.updateTenantInfo(record);
awardQ.setCreateByIds(mids);
}
}
if(record.getSendTimeBegin() != null || record.getSendTimeEnd() != null){
if(awardQ == null){
awardQ = new WxOfflineActivityGrantAward();
awardQ.updateTenantInfo(record);
awardQ.setCreateDateBegin(record.getSendTimeBegin());
awardQ.setCreateDateEnd(record.getSendTimeEnd());
}
}
if(awardQ != null){
List<Long> rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ);
if (null == rids || rids.size() <= 0 ) {
record.setId(-1L);
}else{
record.setIds(rids);
}
}
}

private void handlerRecordList(TenantEntity tenantEntity,List<WxOfflineActivityRecord> recordList) {
if (recordList == null || recordList.size() <= 0) {
return;
}
WxMerchant merchantQ = new WxMerchant();
merchantQ.updateTenantInfo(tenantEntity);
Map<Long, String> idAndNamesMap = wxMerchantService.getIdAndNamesMap(merchantQ);
MallUserInfo userInfoQ = new MallUserInfo();
userInfoQ.updateTenantInfo(tenantEntity);
Map<Long, MallUserInfo> userMap = mallUserInfoService.getUserMap(userInfoQ);

for (WxOfflineActivityRecord record : recordList) {
record.setMerchantName(idAndNamesMap.get(record.getMerchantId()));
if(record.getAuditBy() != null){
record.setAuditByName(userMap.get(record.getAuditBy()).getName());
}
}
}

@Override
public void saveOrUpdate(WxOfflineActivityRecord wxOfflineActivityRecord) {
if(wxOfflineActivityRecord.getMerchantId() != null){
WxMerchant merchant = wxMerchantService.selectById(wxOfflineActivityRecord.getMerchantId());
wxOfflineActivityRecord.setBusinessId(merchant.getBusinessId());
}
Date now = new Date();
if(wxOfflineActivityRecord.getId() == null){
final IdWorker idWorker = IdWorker.get();
wxOfflineActivityRecord.setId(idWorker.nextId());
wxOfflineActivityRecord.setCreateDate(now);
wxOfflineActivityRecord.setUpdateDate(now);
wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode());
wxOfflineActivityRecordMapper.insert(wxOfflineActivityRecord);
}
else{
wxOfflineActivityRecord.setAuditRemark("");
wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode());
wxOfflineActivityRecord.setUpdateDate(now);
wxOfflineActivityRecordMapper.updateById(wxOfflineActivityRecord);
}
}

@Override
public WxOfflineActivityRecord getById(Long id, String tenantId) {
return wxOfflineActivityRecordMapper.selectById(id,tenantId);
}

@Override
public WxOfflineActivityRecord getInfoById(Long id, String tenantId) {
WxOfflineActivityRecord record = wxOfflineActivityRecordMapper.selectById(id, tenantId);
if(record != null){
WxMerchant merchant = wxMerchantService.selectById(record.getMerchantId());
record.setMerchantName(merchant.getName());
}
return record;
}

@Override
public Map<String, Integer> getStatistics(WxOfflineActivityRecord wxOfflineActivityRecord) {
List<OfflineActivityRecordStatistics> auditStatusStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord);
Map<String, Integer> result = new HashMap<>();
Integer audting = 0, audi_success = 0, audt_fail = 0;
for(OfflineActivityRecordStatistics statistics : auditStatusStatistics){
if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){
audting = statistics.getCount();
} else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) {
audi_success = statistics.getCount();
} else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) {
audt_fail = statistics.getCount();
}
}
result.put("audting",audting);
result.put("audi_success",audi_success);
result.put("audt_fail",audt_fail);
result.put("sum_count",audting+audi_success+audt_fail);
return result;
}

@Override
public void auditRecord(WxOfflineActivityRecord record, Long userId) {
Date now = new Date();
record.setUpdateDate(now);
record.setAuditTime(now);
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;
}

@Override
public void exportData(HttpServletRequest request, HttpServletResponse response, WxOfflineActivityRecord record) {
handlerQuery(record);
List<WxOfflineActivityRecord> list = wxOfflineActivityRecordMapper.findList(record);
handlerRecordList(record,list);
excelService.exportExcel(list, null, "活动订单列表", WxOfflineActivityRecord.class, "活动订单列表.xlsx", response, false);
}

@Override
public Integer getWaitAudiCount(TenantEntity tenantInfo) {
WxOfflineActivityRecord record = new WxOfflineActivityRecord();
record.updateTenantInfo(tenantInfo);
record.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode());
return wxOfflineActivityRecordMapper.getCount(record);
}
}





+ 164
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java Wyświetl plik

@@ -0,0 +1,164 @@
package com.iformall.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.iformall.common.IdWorker;
import com.iformall.domain.po.*;
import com.iformall.domain.vo.OfflineActivityRecordStatistics;
import com.iformall.enums.EnumOfflineActivityMerchantType;
import com.iformall.enums.EnumOfflineActivityRecordStatus;
import com.iformall.enums.EnumOfflineActivityStatus;
import com.iformall.enums.EnumYesOrNo;
import com.iformall.mapper.WxOfflineActivityGrantItemMapper;
import com.iformall.mapper.WxOfflineActivityMerchantMapper;
import com.iformall.mapper.WxOfflineActivityRecordMapper;
import com.iformall.service.WxOfflineActivityItemService;
import com.iformall.service.WxOfflineActivityMerchantService;
import com.iformall.service.WxOfflineActivityService;
import com.iformall.mapper.WxOfflineActivityMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author xiaohu
* @description 针对表【wx_offline_activity(线下活动)】的数据库操作Service实现
* @createDate 2024-08-06 13:20:56
*/
@Service
public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{

@Autowired
WxOfflineActivityMapper wxOfflineActivityMapper;

@Autowired
WxOfflineActivityItemService wxOfflineActivityItemService;
@Autowired
WxOfflineActivityMerchantMapper wxOfflineActivityMerchantMapper;
@Autowired
WxOfflineActivityMerchantService wxOfflineActivityMerchantService;
@Autowired
WxOfflineActivityRecordMapper wxOfflineActivityRecordMapper;
@Autowired
WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper;

@Override
public PageInfo<WxOfflineActivity> listAsPage(WxOfflineActivity record, Integer pageIndex, Integer pageSize) {
handlerQuery(record);
PageInfo<WxOfflineActivity> activityPageInfo = PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxOfflineActivityMapper.findList(record));
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 (null != list && !list.isEmpty()) {
Date now = new Date();
for (WxOfflineActivity activity : list) {
if(now.after(activity.getEndTime())){
activity.setStatus(EnumOfflineActivityStatus.EXPIRE.getCode());
}
//参与订单数
WxOfflineActivityRecord wxOfflineActivityRecord = new WxOfflineActivityRecord();
wxOfflineActivityRecord.updateTenantInfo(activity);
wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime());
wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime());
if(EnumOfflineActivityMerchantType.ADD.getCode().equals(activity.getAllMerchant())){
List<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId());
wxOfflineActivityRecord.setMerchantIdList(merchantIds);
}else if(EnumOfflineActivityMerchantType.UN_ADD.getCode().equals(activity.getAllMerchant())){
List<Long> merchantIds = wxOfflineActivityMerchantMapper.getMerchantIdList(activity.getId(), activity.getTenantId());
wxOfflineActivityRecord.setNotMerchantIdList(merchantIds);
}
List<OfflineActivityRecordStatistics> auditStatusStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord);
Integer audting = 0, audi_success = 0, audt_fail = 0;
for(OfflineActivityRecordStatistics statistics : auditStatusStatistics){
if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){
audting = statistics.getCount();
} else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) {
audi_success = statistics.getCount();
} else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) {
audt_fail = statistics.getCount();
}
}
activity.setRecordCount(audting+audi_success+audt_fail);
activity.setWaitRecordCount(audting);
activity.setSuccessRecordCount(audi_success);

//参与商户数
activity.setMershantCount(wxOfflineActivityRecordMapper.getMerchantCount(wxOfflineActivityRecord));

//发放奖项数量
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(activity);
grantItemQ.setActivityId(activity.getId());
activity.setGrantItemCount(wxOfflineActivityGrantItemMapper.getSumAwardCount(grantItemQ));

}
}
}

@Override
@Transactional(rollbackFor = Exception.class)
public void saveOrUpdate(WxOfflineActivity wxOfflineActivity) {
Date now = new Date();
if(wxOfflineActivity.getId() == null){
final IdWorker idWorker = IdWorker.get();
wxOfflineActivity.setId(idWorker.nextId());
wxOfflineActivity.setCreateDate(now);
wxOfflineActivity.setCreateDate(now);
wxOfflineActivity.setStatus(EnumOfflineActivityStatus.OFF_LINE.getCode());
wxOfflineActivityMapper.insert(wxOfflineActivity);
}
else{
wxOfflineActivity.setUpdateDate(now);
wxOfflineActivityMapper.updateById(wxOfflineActivity);
}
//处理活动项
wxOfflineActivityItemService.saveOrUpdateFromActivity(wxOfflineActivity,wxOfflineActivity.getActivityItemList());
//处理活动商户
wxOfflineActivityMerchantService.saveOrUpdateFromActivity(wxOfflineActivity,wxOfflineActivity.getActivityMerchantList());
}

@Override
public void updateStatus(WxOfflineActivity wxOfflineActivity) {
wxOfflineActivityMapper.updateStatus(wxOfflineActivity);
}

@Override
public WxOfflineActivity getInfoById(Long id, String tenantId) {
WxOfflineActivity wxOfflineActivity = wxOfflineActivityMapper.selectById(id, tenantId);
if (wxOfflineActivity == null) {
return null;
}
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(wxOfflineActivity.getId(),tenantId);
wxOfflineActivity.setActivityItemList(activityItemList);
if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(wxOfflineActivity.getAllMerchant())){
List<WxOfflineActivityMerchant> activityMerchantList = wxOfflineActivityMerchantService.getActivityMerchantList(wxOfflineActivity.getId(),tenantId);
wxOfflineActivity.setActivityMerchantList(activityMerchantList);
}
return wxOfflineActivity;
}
}





+ 14
- 0
mallinkService/src/main/java/com/iformall/utils/DownFileUtil.java Wyświetl plik

@@ -82,4 +82,18 @@ public class DownFileUtil {
return bos.toByteArray();
}

public static byte[] url2byte(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3 * 1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

//得到输入流
InputStream inputStream = conn.getInputStream();
//获取自己数组
return readInputStream(inputStream);
}

}

+ 82
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml Wyświetl plik

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityAwardsItemMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityAwardsItem">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="grade" column="grade" jdbcType="INTEGER"/>
<result property="minAmount" column="min_amount" jdbcType="DECIMAL"/>
<result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/>
<result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/>
<result property="price" column="price" 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"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
activity_item_id,`name`,grade,
min_amount,max_amount,cash_back_ratio,price,
money_rule,mall_share_rate,merchant_share_rate,
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 != activityItemId ">
and `activity_item_id` = #{activityItemId}
</if>

<if test=" null != name ">
and `name` like concat('%', #{name},'%')
</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="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_awards_item where id = #{id} and tenant_id=#{tenantId}
</select>

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

<select id="itemCount" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsItem" resultType="Integer">
select count(1) from wx_offline_activity_awards_item where `activity_item_id` = #{activityItemId} and tenant_id=#{tenantId}
</select>

<delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityAwardsItem">
delete from wx_offline_activity_awards_item
<include refid="dynamicWhereConditions" />
</delete>

</mapper>

+ 127
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml Wyświetl plik

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityGrantAwardMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantAward">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="activityId" column="activity_id" jdbcType="BIGINT"/>
<result property="orderMoneySum" column="order_money_sum" jdbcType="DECIMAL"/>
<result property="orderCount" column="order_count" jdbcType="INTEGER"/>
<result property="cusName" column="cus_name" jdbcType="VARCHAR"/>
<result property="cusPhone" column="cus_phone" jdbcType="VARCHAR"/>
<result property="realName" column="real_name" jdbcType="VARCHAR"/>
<result property="realCard" column="real_card" jdbcType="VARCHAR"/>
<result property="signImg" column="sign_img" jdbcType="VARCHAR"/>
<result property="createBy" column="create_by" jdbcType="BIGINT"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/>
<result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/>
<result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
activity_id,order_money_sum,order_count,
cus_name,cus_phone,real_name,
real_card,sign_img,create_by,
create_date,update_date,lottery_num,
lottery_count,anniversary_lottery_num
</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 != activityId">
and `activity_id` = #{activityId}
</if>

<if test=" null != cusName and cusName != '' ">
and `cus_name` like concat('%', #{cusName},'%')
</if>

<if test=" null != cusPhone and cusPhone != '' ">
and `cus_phone` = #{cusPhone}
</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.WxOfflineActivityGrantAward" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_grant_award
<include refid="dynamicWhereConditions" />
</select>


<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>


<select id="getRecordIdList" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Long">
SELECT DISTINCT rg.record_id
from wx_offline_activity_record_grant rg
left join wx_offline_activity_grant_award ga on ga.id = rg.grant_id
where 1 = 1
<if test=" null != tenantId and '' != tenantId">
and ga.`tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and ga.`parent_tenant_id` = #{parentTenantId}
</if>

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

<if test=" null != createDateEnd">
and ga.`create_date` &lt;= #{createDateEnd}
</if>
<if test=" null != createByIds ">
and ga.create_by in
<foreach collection="createByIds" index="index" item="sendItem" open="(" separator="," close=")">
#{sendItem}
</foreach>
</if>
</select>

<select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_grant_award where id = #{id} and tenant_id=#{tenantId}
</select>
</mapper>

+ 123
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml Wyświetl plik

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityGrantItemMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantItem">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="grantId" column="grant_id" jdbcType="BIGINT"/>
<result property="activityId" column="activity_id" jdbcType="BIGINT"/>
<result property="activityName" column="activity_name" jdbcType="VARCHAR"/>
<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="awardItamId" column="award_itam_id" jdbcType="BIGINT"/>
<result property="awardName" column="award_name" jdbcType="VARCHAR"/>
<result property="awardGrade" column="award_grade" jdbcType="INTEGER"/>
<result property="awardMinAmount" column="award_min_amount" jdbcType="DECIMAL"/>
<result property="awardMaxAmount" column="award_max_amount" jdbcType="DECIMAL"/>
<result property="awardsItemRule" column="awards_item_rule" jdbcType="INTEGER"/>
<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="moneyRule" column="money_rule" jdbcType="SMALLINT"/>
<result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/>
<result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
grant_id,activity_id,activity_name,
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,
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 != grantId">
and `grant_id` = #{grantId}
</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 != 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.WxOfflineActivityGrantItem" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_grant_item
<include refid="dynamicWhereConditions" />
</select>

<insert id="insertList" parameterType="java.util.List">
insert into wx_offline_activity_grant_item
(id,
grant_id,activity_id,activity_name,
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,
create_date,update_date)
values
<foreach collection="grantItemList" 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.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.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP})
</foreach>
</insert>

<select id="getSumAwardCount" parameterType="com.iformall.domain.po.WxOfflineActivityGrantItem" resultType="Integer">
SELECT COUNT(1) FROM wx_offline_activity_grant_item
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>
</select>

</mapper>

+ 188
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml Wyświetl plik

@@ -0,0 +1,188 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityGrantSettlementMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantSettlement">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="recordId" column="record_id" jdbcType="BIGINT"/>
<result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
<result property="orderMoney" column="order_money" jdbcType="DECIMAL"/>
<result property="merchantId" column="merchant_id" jdbcType="BIGINT"/>
<result property="activityId" column="activity_id" jdbcType="BIGINT"/>
<result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/>
<result property="awardItamId" column="award_itam_id" jdbcType="BIGINT"/>
<result property="grantId" column="grant_id" jdbcType="BIGINT"/>
<result property="grantPrice" column="grant_price" jdbcType="DECIMAL"/>
<result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/>
<result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/>
<result property="orderRatio" column="order_ratio" jdbcType="DECIMAL"/>
<result property="realGrantPrice" column="real_grant_price" jdbcType="DECIMAL"/>
<result property="realMallSharePrice" column="real_mall_share_price" jdbcType="DECIMAL"/>
<result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="DECIMAL"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
record_id,order_no,order_money,
merchant_id,activity_id,activity_item_id,
award_itam_id,grant_id,grant_price,
mall_share_rate,merchant_share_rate,order_ratio,
real_grant_price,real_mall_share_price,real_merchant_share_price,
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_settlement
(id,
record_id,order_no,order_money,
merchant_id,activity_id,activity_item_id,
award_itam_id,grant_id,grant_price,
mall_share_rate,merchant_share_rate,order_ratio,
real_grant_price,real_mall_share_price,real_merchant_share_price,
create_date,update_date)
values
<foreach collection="settlementList" item="item" index="index" separator=",">
(#{item.id,jdbcType=BIGINT},
#{item.recordId,jdbcType=BIGINT},#{item.orderNo,jdbcType=VARCHAR},#{item.orderMoney,jdbcType=DECIMAL},
#{item.merchantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityItemId,jdbcType=BIGINT},
#{item.awardItamId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantPrice,jdbcType=DECIMAL},
#{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},#{item.orderRatio,jdbcType=DECIMAL},
#{item.realGrantPrice,jdbcType=DECIMAL},#{item.realMallSharePrice,jdbcType=DECIMAL},#{item.realMerchantSharePrice,jdbcType=DECIMAL},
#{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 IFNULL(sum(real_grant_price),0) as 'sumGrantPrice',
count(DISTINCT record_id) as 'recordCount',
count(DISTINCT merchant_id) as 'merchantCount',
IFNULL(sum(real_mall_share_price),0) as 'sumMallPrice',
IFNULL(sum(real_merchant_share_price),0) 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.vo.OfflineActivitySettlement" resultType="com.iformall.domain.vo.OfflineActivitySettlement">
SELECT merchant_id as 'merchantId',
activity_id as 'activityId',
count(record_id) as 'recordCount',
IFNULL(sum(order_money),0) as 'sumOrderMoney',
IFNULL(sum(real_grant_price),0) as 'sumGrantPrice',
IFNULL(sum(real_mall_share_price),0) as 'sumMallPrice',
IFNULL(sum(real_merchant_share_price),0) 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 != merchantId ">
and `merchant_id` = #{merchantId}
</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>

+ 80
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml Wyświetl plik

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityItemMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityItem">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="activityId" column="activity_id" jdbcType="BIGINT"/>
<result property="type" column="type" jdbcType="SMALLINT"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="limitMoney" column="limit_money" jdbcType="DECIMAL"/>
<result property="awardsItemPrice" column="awards_item_price" jdbcType="DECIMAL"/>
<result property="awardsItemLimit" column="awards_item_limit" jdbcType="INTEGER"/>
<result property="awardsItemCount" column="awards_item_count" jdbcType="INTEGER"/>
<result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
activity_id,`type`,`name`,
limit_money,awards_item_price,awards_item_limit,awards_item_count,
awards_item_rule,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 != activityId ">
and `activity_id` = #{activityId}
</if>

<if test=" null != name and name != '' ">
and `name` like concat('%', #{name},'%')
</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="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_item where id = #{id} and tenant_id=#{tenantId}
</select>

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

<select id="findIds" parameterType="com.iformall.domain.po.WxOfflineActivityItem" resultType="Long">
select id from wx_offline_activity_item
<include refid="dynamicWhereConditions" />
</select>

<delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityItem">
delete from wx_offline_activity_item
<include refid="dynamicWhereConditions" />
</delete>

</mapper>

+ 107
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityMapper.xml Wyświetl plik

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivity">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="startTime" column="start_time" jdbcType="TIMESTAMP"/>
<result property="endTime" column="end_time" jdbcType="TIMESTAMP"/>
<result property="status" column="status" jdbcType="SMALLINT"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="allMerchant" column="all_merchant" jdbcType="SMALLINT"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
`name`,start_time,end_time,
status,create_date,update_date,
all_merchant
</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 != begin">
and `start_time` &gt;= #{begin}
</if>

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

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

<!-- 未过期 -->
<if test=" 0 == validStatus">
and end_time &gt;= now()
</if>

<!-- 已过期 -->
<if test=" 1 == validStatus">
and end_time &lt;= now()
</if>

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

<if test=" null != status ">
and `status` = #{status}
</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="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity where id = #{id} and tenant_id=#{tenantId}
</select>

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

<select id="findIds" parameterType="com.iformall.domain.po.WxOfflineActivity" resultType="Long">
select id from wx_offline_activity
<include refid="dynamicWhereConditions" />
</select>

<update id="updateStatus" parameterType="com.iformall.domain.po.WxOfflineActivity">
update wx_offline_activity
set `status` = #{status},
`update_date` = #{updateDate}
where id=#{id}
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>
</update>

</mapper>

+ 76
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityMerchantMapper.xml Wyświetl plik

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityMerchantMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityMerchant">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="activityId" column="activity_id" jdbcType="BIGINT"/>
<result property="merchantId" column="merchant_id" jdbcType="BIGINT"/>
<result property="whetherIn" column="whether_in" jdbcType="SMALLINT"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
activity_id,merchant_id,whether_in,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 != activityId ">
and `activity_id` = #{activityId}
</if>

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

<if test=" null != whetherIn ">
and `whether_in` = #{whetherIn}
</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.WxOfflineActivityMerchant" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_merchant
<include refid="dynamicWhereConditions" />
</select>

<delete id="delete" parameterType="com.iformall.domain.po.WxOfflineActivityMerchant">
delete from wx_offline_activity_merchant
where `activity_id` = #{activityId}
<if test=" null != merchantId ">
and `merchant_id` = #{merchantId}
</if>
</delete>

<select id="getMerchantIdList" parameterType="java.util.HashMap" resultType="Long">
select merchant_id from wx_offline_activity_merchant where activity_id = #{activityId} and tenant_id = #{tenantId}
</select>

</mapper>

+ 41
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityRecordGrantMapper.xml Wyświetl plik

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityRecordGrantMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityRecordGrant">
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="activityId" column="activity_id" jdbcType="BIGINT"/>
<result property="recordId" column="record_id" jdbcType="BIGINT"/>
<result property="grantId" column="grant_id" jdbcType="BIGINT"/>
</resultMap>

<sql id="allColumns">
tenant_id,parent_tenant_id,activity_id,
record_id,grant_id
</sql>

<select id="selectGrantCount" parameterType="java.util.HashMap" resultType="java.lang.Integer">
select COUNT(1) from wx_offline_activity_record_grant
where activity_id = #{activityId} and record_id = #{recordId} and tenant_id=#{tenantId}
</select>

<insert id="insertList" parameterType="java.util.List">
insert into wx_offline_activity_record_grant
(`activity_id`,`record_id`,`grant_id`)
values
<foreach collection="recordGrantList" item="item" index="index" separator=",">
(#{item.activityId,jdbcType=BIGINT},
#{item.recordId,jdbcType=BIGINT},
#{item.grantId,jdbcType=BIGINT})
</foreach>
</insert>

<select id="selectGrantId" parameterType="java.util.HashMap" resultType="java.lang.Long">
select grant_id from wx_offline_activity_record_grant
where activity_id = #{activityId} and record_id = #{recordId} and tenant_id=#{tenantId}
</select>

</mapper>

+ 245
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityRecordMapper.xml Wyświetl plik

@@ -0,0 +1,245 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.iformall.mapper.WxOfflineActivityRecordMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityRecord">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/>
<result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/>
<result property="orderNo" column="order_no" jdbcType="VARCHAR"/>
<result property="orderMoney" column="order_money" jdbcType="DECIMAL"/>
<result property="cusName" column="cus_name" jdbcType="VARCHAR"/>
<result property="realCusName" column="real_cus_name" jdbcType="VARCHAR"/>
<result property="cusPhone" column="cus_phone" jdbcType="VARCHAR"/>
<result property="cusAddress" column="cus_address" jdbcType="VARCHAR"/>
<result property="cusCard" column="cus_card" jdbcType="VARCHAR"/>
<result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/>
<result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/>
<result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/>
<result property="createBy" column="create_by" jdbcType="BIGINT"/>
<result property="merchantId" column="merchant_id" jdbcType="BIGINT"/>
<result property="businessId" column="business_id" jdbcType="INTEGER"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="auditRemark" column="audit_remark" jdbcType="VARCHAR"/>
<result property="auditStatus" column="audit_status" jdbcType="INTEGER"/>
<result property="auditBy" column="audit_by" jdbcType="BIGINT"/>
<result property="auditTime" column="audit_time" jdbcType="TIMESTAMP"/>
</resultMap>

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
order_no,order_money,cus_name,
real_cus_name,cus_phone,cus_address,
cus_card,lottery_num,lottery_count,
anniversary_lottery_num,create_by,merchant_id,business_id,
create_date,update_date,audit_remark,
audit_status,audit_by,audit_time
</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 != merchantId ">
and `merchant_id` = #{merchantId}
</if>
<if test=" null != businessId ">
and `business_id` = #{businessId}
</if>

<if test=" null != cusName and cusName != '' ">
and `cus_name` like concat('%', #{cusName},'%')
</if>

<if test=" null != cusPhone and cusPhone != '' ">
and `cus_phone` = #{cusPhone}
</if>

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


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

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

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

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

<if test=" null != auditStatus ">
and `audit_status` = #{auditStatus}
</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 != notMerchantIdList ">
and merchant_id not in
<foreach collection="notMerchantIdList" 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.WxOfflineActivityRecord" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_record
<include refid="dynamicWhereConditions" />
</select>


<select id="selectLimitOne" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_record
<include refid="dynamicWhereConditions" />
limit 1
</select>

<select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_record where id = #{id} and tenant_id=#{tenantId}
</select>

<select id="auditStatusStatistics" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="com.iformall.domain.vo.OfflineActivityRecordStatistics">
SELECT audit_status as 'auditStatus',
count(1) as 'count',
IFNULL(sum(order_money),0) as 'sumMoney'
FROM wx_offline_activity_record
<include refid="statisticsWhereConditions" />
GROUP BY audit_status
</select>

<update id="updateAuditStatus" parameterType="com.iformall.domain.po.WxOfflineActivityRecord">
update wx_offline_activity_record
set `audit_status` = #{auditStatus},

<if test=" null != lotteryNum and '' != lotteryNum">
`lottery_num` = #{lotteryNum},
</if>
<if test=" null != lotteryCount and '' != lotteryCount">
`lottery_Count` = #{lotteryCount},
</if>
<if test=" null != anniversaryLotteryNum and '' != anniversaryLotteryNum">
`anniversary_lottery_num` = #{anniversaryLotteryNum},
</if>

<if test=" null != auditRemark and '' != auditRemark">
`audit_remark` = #{auditRemark},
</if>
<if test=" null != auditTime">
`audit_time` = #{auditTime},
</if>
<if test=" null != auditBy">
`audit_by` = #{auditBy},
</if>
`update_date` = #{updateDate}
where id=#{id}
<if test=" null != tenantId and '' != tenantId">
and `tenant_id` = #{tenantId}
</if>
<if test=" null != parentTenantId and '' != parentTenantId">
and `parent_tenant_id` = #{parentTenantId}
</if>
</update>

<select id="getCount" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="Integer">
SELECT COUNT(1) FROM wx_offline_activity_record
<include refid="statisticsWhereConditions" />
</select>

<select id="getMerchantCount" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultType="Integer">
SELECT COUNT(distinct merchant_id) FROM wx_offline_activity_record
<include refid="statisticsWhereConditions" />
</select>

<sql id="statisticsWhereConditions">
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 != merchantId ">
and `merchant_id` = #{merchantId}
</if>
<if test=" null != businessId ">
and `business_id` = #{businessId}
</if>
<if test=" null != cusPhone and cusPhone != '' ">
and `cus_phone` = #{cusPhone}
</if>

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

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

<if test=" null != auditStatus ">
and `audit_status` = #{auditStatus}
</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 != notMerchantIdList ">
and merchant_id not in
<foreach collection="notMerchantIdList" index="index" item="midItem" open="(" separator="," close=")">
#{midItem}
</foreach>
</if>

</sql>

<select id="findGrantList" parameterType="java.util.HashMap" resultMap="BaseResultMap">
select r.id,r.tenant_id,r.parent_tenant_id,
r.order_no,r.order_money,r.cus_name,
r.real_cus_name,r.cus_phone,r.cus_address,
r.cus_card,r.lottery_num,r.lottery_count,
r.anniversary_lottery_num,r.create_by,r.merchant_id,r.business_id,
r.create_date,r.update_date,r.audit_remark,
r.audit_status,r.audit_by,audit_time
from wx_offline_activity_record_grant rg
left join wx_offline_activity_record r on rg.record_id = r.id
where rg.grant_id = #{grantId} and rg.tenant_id=#{tenantId}
</select>

</mapper>

Ładowanie…
Anuluj
Zapisz