Browse Source

Merge branch 'release_toaliyun_real' into release_toaliyun_real_new_finance

release_toaliyun_real
winter 1 year ago
parent
commit
dc239f1e7b
32 changed files with 983 additions and 133 deletions
  1. +15
    -6
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java
  2. +3
    -0
      mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java
  3. +3
    -2
      mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java
  4. +12
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java
  5. +6
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java
  6. +119
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java
  7. +9
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java
  8. +6
    -0
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java
  9. +45
    -1
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java
  10. +13
    -3
      mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java
  11. +2
    -0
      mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java
  12. +37
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java
  13. +37
    -0
      mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java
  14. +4
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java
  15. +24
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java
  16. +3
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java
  17. +3
    -0
      mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java
  18. +1
    -1
      mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java
  19. +21
    -5
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java
  20. +336
    -60
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java
  21. +42
    -23
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java
  22. +61
    -23
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java
  23. +11
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java
  24. +2
    -2
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java
  25. +1
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java
  26. +1
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java
  27. +7
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml
  28. +21
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml
  29. +95
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml
  30. +20
    -3
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml
  31. +18
    -0
      mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml
  32. +5
    -1
      mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml

+ 15
- 6
mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java View File

@@ -94,8 +94,11 @@ public class WxOfflineActivityGrantController extends BaseController {
if(wxOfflineActivityGrantAward.getActivityId() == null){
return new ResultData(Result.ERROR,"活动ID为空");
}
if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
return new ResultData(Result.ERROR,"请选择订单");
// if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
// return new ResultData(Result.ERROR,"请选择订单");
// }
if(StringUtil.isBlank(wxOfflineActivityGrantAward.getCusPhone())){
throw new MallinkException(Result.ERROR,"用户手机号为空");
}
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity);
@@ -110,8 +113,11 @@ public class WxOfflineActivityGrantController extends BaseController {
if(wxOfflineActivityGrantAward.getActivityId() == null){
return new ResultData(Result.ERROR,"活动ID为空");
}
if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
return new ResultData(Result.ERROR,"请选择订单");
// if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){
// return new ResultData(Result.ERROR,"请选择订单");
// }
if(StringUtil.isBlank(wxOfflineActivityGrantAward.getCusPhone())){
throw new MallinkException(Result.ERROR,"用户手机号为空");
}
// if(StringUtil.isBlank(wxOfflineActivityGrantAward.getSignImg())){
// return new ResultData(Result.ERROR,"签名为空");
@@ -138,9 +144,12 @@ public class WxOfflineActivityGrantController extends BaseController {
if(wxOfflineActivityGrantAward.getActivityId() == null){
return new ResultData(Result.ERROR,"活动ID为空");
}
if(wxOfflineActivityGrantAward.getRecordId() == null){
return new ResultData(Result.ERROR,"订单ID为空");
if(StringUtil.isBlank(wxOfflineActivityGrantAward.getCusPhone())){
throw new MallinkException(Result.ERROR,"用户手机号为空");
}
// if(wxOfflineActivityGrantAward.getRecordId() == null){
// return new ResultData(Result.ERROR,"订单ID为空");
// }
TenantEntity tenantInfo = getTenantInfo();
wxOfflineActivityGrantAward.updateTenantInfo(tenantInfo);
List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward);


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

@@ -8,6 +8,7 @@ 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.enums.EnumYesOrNo;
import com.iformall.exception.MallinkException;
import com.iformall.service.WxOfflineActivityGrantAwardService;
import com.iformall.service.WxOfflineActivityGrantSettlementService;
@@ -131,6 +132,7 @@ public class WxOfflineActivitySettlementController extends BaseController {

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

return new ResultData(recordList);
@@ -147,6 +149,7 @@ public class WxOfflineActivitySettlementController extends BaseController {
}
TenantEntity tenantInfo = getTenantInfo();
grantSettlement.updateTenantInfo(tenantInfo);
grantSettlement.setStatus(EnumYesOrNo.YES.getCode());
wxOfflineActivityGrantSettlementService.exportData(request,response,grantSettlement);
}



+ 3
- 2
mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java View File

@@ -59,6 +59,9 @@ public class WxOfflineActivityRecordController extends BaseController {
if (null == wxOfflineActivityRecord.getOrderMoney() ) {
return new ResultData(Result.ERROR,"订单金额不能为空");
}
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantEntity);

if(wxOfflineActivityRecord.getId() != null){
WxOfflineActivityRecord record = wxOfflineActivityRecordService.getById(wxOfflineActivityRecord.getId(),wxOfflineActivityRecord.getTenantId());
if(!EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(record.getAuditStatus())){
@@ -66,8 +69,6 @@ public class WxOfflineActivityRecordController extends BaseController {
}
wxOfflineActivityRecord.setAuditRemark("");
}
TenantEntity tenantEntity = getTenantInfo();
wxOfflineActivityRecord.updateTenantInfo(tenantEntity);
wxOfflineActivityRecord.setCreateBy(getMerchantBUserId());
wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId());
wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode());


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

@@ -32,6 +32,12 @@ public class WxOfflineActivityAwardsItem extends TenantEntity {
@TableField(value = "activity_item_id")
private Long activityItemId;

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

/**
* 奖项名称
*/
@@ -44,6 +50,12 @@ public class WxOfflineActivityAwardsItem extends TenantEntity {
@TableField(value = "grade")
private Integer grade;

/**
* 联单笔数
*/
@TableField(value = "merchant_count")
private Integer merchantCount;

/**
* 限制最小金额
*/


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

@@ -161,4 +161,10 @@ public class WxOfflineActivityGrantAward extends TenantEntity{

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

/**
* 是否有效
*/
@TableField(value = "status")
private Integer status;
}

+ 119
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java View File

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

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.iformall.domain.po.base.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

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

/**
* 线下活动发放奖励
* @TableName wx_offline_activity_grant_cash_back
*/
@TableName(value ="wx_offline_activity_grant_cash_back")
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class WxOfflineActivityGrantCashBack 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;

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

/**
* 返现计算模式
*/
@TableField(value = "calculation_mode")
private Integer calculationMode;

/**
* 返现封顶金额
*/
@TableField(value = "max_amount")
private BigDecimal maxAmount;

/**
* 返现起征税点金额
*/
@TableField(value = "starting_tax_point")
private BigDecimal startingTaxPoint;

/**
* 返现税点比例
*/
@TableField(value = "tax_points")
private BigDecimal taxPoints;

/**
* 返现金额
*/
@TableField(value = "cash_back_price")
private BigDecimal cashBackPrice;

/**
* 税收
*/
@TableField(value = "tax_points_amount")
private BigDecimal taxPointsAmount;

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

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

}

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

@@ -152,4 +152,13 @@ public class WxOfflineActivityGrantItem extends TenantEntity {
@TableField(value = "update_date")
private Date updateDate;

@TableField(value = "record_id")
private Long recordId;

/**
* 是否有效
*/
@TableField(value = "status")
private Integer status;

}

+ 6
- 0
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java View File

@@ -148,4 +148,10 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity {
@TableField(value = "update_date")
private Date updateDate;

/**
* 是否有效
*/
@TableField(value = "status")
private Integer status;

}

+ 45
- 1
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java View File

@@ -71,11 +71,35 @@ public class WxOfflineActivityItem extends TenantEntity {
private Integer awardsItemCount;

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

/**
* 返现计算模式
*/
@TableField(value = "calculation_mode")
private Integer calculationMode;

/**
* 返现封顶金额
*/
@TableField(value = "max_amount")
private BigDecimal maxAmount;

/**
* 返现起征税点金额
*/
@TableField(value = "starting_tax_point")
private BigDecimal startingTaxPoint;

/**
* 返现税点比例
*/
@TableField(value = "tax_points")
private BigDecimal taxPoints;

/**
* 创建时间
*/
@@ -93,6 +117,8 @@ public class WxOfflineActivityItem extends TenantEntity {
*/
@TableField(exist = false)
private List<WxOfflineActivityAwardsItem> activityAwardsItemList;
@TableField(exist = false)
private List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList;
/**
* 是否满足活动条件
*/
@@ -110,4 +136,22 @@ public class WxOfflineActivityItem extends TenantEntity {
@TableField(exist = false)
private List<WxOfflineActivityGrantItem> activityGrantItemList;

/**
* 返现汇总
*/
@TableField(exist = false)
private WxOfflineActivityGrantCashBack activityGrantCashBack;

/**
* 返现金额
*/
@TableField(exist = false)
private BigDecimal cashBackPrice;

/**
* 返现详情
*/
@TableField(exist = false)
private String cashBackMsg;

}

+ 13
- 3
mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java View File

@@ -103,10 +103,20 @@ public class WxOfflineActivityRecord extends TenantEntity {
}
return lotteryNumList;
}
@Excel(name = "抽奖券编码", width = 20, orderNum = "9")
@TableField(exist = false)
private String lotteryNumStr;
public String getLotteryNumStr() {
if(this.getLotteryNumList() != null && !lotteryNumList.isEmpty()){
lotteryNumStr = String.join(",", lotteryNumList);
}
return lotteryNumStr;
}

/**
* 抽奖券数量
*/
@Excel(name = "抽奖券数量", width = 20, orderNum = "10")
@TableField(value = "lottery_count")
private Integer lotteryCount;

@@ -164,14 +174,14 @@ public class WxOfflineActivityRecord extends TenantEntity {
/**
* 审批意见
*/
@Excel(name = "审核意见", width = 20, orderNum = "10")
@Excel(name = "审核意见", width = 20, orderNum = "12")
@TableField(value = "audit_remark")
private String auditRemark;

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

@@ -187,7 +197,7 @@ public class WxOfflineActivityRecord extends TenantEntity {
@TableField(value = "audit_by")
private Long auditBy;

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



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

@@ -28,4 +28,6 @@ public class OfflineActivitySettlement extends TenantEntity {
private BigDecimal sumMallPrice;
@SortColumn(column = "sumMerchantPrice")
private BigDecimal sumMerchantPrice;

private Integer status;
}

+ 37
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java View File

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


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

FIRST(1, "基本奖项"),
SECOND(2, "第二奖项"),
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 37
- 0
mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java View File

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


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

ONE(1, "单笔订单计算"),
SUM(2, "订单总额计算"),
;

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

private Integer code;
private String message;

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

public Integer getCode() {
return code;
}

public String getMessage() {
return message;
}
}

+ 4
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java View File

@@ -21,6 +21,10 @@ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper<WxOfflin
WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId);

List<WxOfflineActivityGrantAward> findList(WxOfflineActivityGrantAward grantAwardQ);

void updateStatusNo(WxOfflineActivityGrantAward grantAwardUpd);

Long getLastId(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);
}




+ 24
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java View File

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

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantCashBack;
import com.iformall.domain.po.WxOfflineActivityGrantItem;
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 WxOfflineActivityGrantCashBackMapper extends CommonMapper<WxOfflineActivityGrantCashBack, Long> {

List<WxOfflineActivityGrantCashBack> findList(WxOfflineActivityGrantCashBack offlineActivityGrantCashBack);

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



+ 3
- 0
mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java View File

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

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantItem;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
@@ -20,6 +21,8 @@ public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOffline
Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ);

List<WxOfflineActivityGrantItem> findList(WxOfflineActivityGrantItem grantItemQ);

void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);
}




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

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

import com.iformall.common.CommonMapper;
import com.iformall.domain.po.WxOfflineActivityGrantAward;
import com.iformall.domain.po.WxOfflineActivityGrantSettlement;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.iformall.domain.vo.OfflineActivitySettlement;
@@ -24,6 +25,8 @@ public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxO
List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement settlement);

List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement);

void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward);
}




+ 1
- 1
mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java View File

@@ -13,7 +13,7 @@ import java.util.List;
*/
public interface WxOfflineActivityAwardsItemService {

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

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

+ 21
- 5
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java View File

@@ -3,6 +3,7 @@ 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.EnumOfflineActivityAwardsItemType;
import com.iformall.enums.EnumOfflineActivityType;
import com.iformall.service.WxOfflineActivityAwardsItemService;
import com.iformall.mapper.WxOfflineActivityAwardsItemMapper;
@@ -25,19 +26,20 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity
WxOfflineActivityAwardsItemMapper wxOfflineActivityAwardsItemMapper;

@Override
public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList) {
public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList,
List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList) {
WxOfflineActivityAwardsItem activityAwardsItemDel = new WxOfflineActivityAwardsItem();
activityAwardsItemDel.updateTenantInfo(activityItem);
activityAwardsItemDel.setActivityItemId(activityItem.getId());
wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel);
final IdWorker idWorker = IdWorker.get();
for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) {
if(awaItem.getId() == null){
final IdWorker idWorker = IdWorker.get();
awaItem.setId(idWorker.nextId());
}
awaItem.updateTenantInfo(activityItem);
awaItem.setActivityItemId(activityItem.getId());
awaItem.setType(EnumOfflineActivityAwardsItemType.FIRST.getCode());

if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){
awaItem.setCashBackRatio(BigDecimal.ZERO);
@@ -50,8 +52,6 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
awaItem.setGrade(-1);
awaItem.setMinAmount(null);
awaItem.setMaxAmount(null);
awaItem.setPrice(BigDecimal.ZERO);
}
if(awaItem.getPrice() == null){
@@ -63,6 +63,22 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity
awaItem.setUpdateDate(activityItem.getUpdateDate());
wxOfflineActivityAwardsItemMapper.insert(awaItem);
}
if(activityAwardsItemSecondList != null && !activityAwardsItemSecondList.isEmpty()){
for (WxOfflineActivityAwardsItem secondAwaItem : activityAwardsItemSecondList) {
if(secondAwaItem.getId() == null){
secondAwaItem.setId(idWorker.nextId());
}
secondAwaItem.updateTenantInfo(activityItem);
secondAwaItem.setActivityItemId(activityItem.getId());
secondAwaItem.setType(EnumOfflineActivityAwardsItemType.SECOND.getCode());

if(secondAwaItem.getCreateDate() == null){
secondAwaItem.setCreateDate(activityItem.getUpdateDate());
}
secondAwaItem.setUpdateDate(activityItem.getUpdateDate());
wxOfflineActivityAwardsItemMapper.insert(secondAwaItem);
}
}
}

@Override


+ 336
- 60
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java View File

@@ -4,6 +4,7 @@ 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.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.iformall.common.IdWorker;
import com.iformall.common.Result;
@@ -52,6 +53,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
@Autowired
private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper;

@Autowired
private WxOfflineActivityGrantCashBackMapper wxOfflineActivityGrantCashBackMapper;

@Autowired
WxOfflineActivityMapper wxOfflineActivityMapper;

@@ -173,6 +177,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
//奖项处理
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())){

@@ -233,32 +238,160 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
activityItem.setActivityGrantItemList(Collections.singletonList(grantItem));
}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){
activityItem.setIsMeet(false);
continue;
BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算
if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){
WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem != null){
//计算返现金额
BigDecimal cashBackPrice = record.getOrderMoney()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}

// 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);
//
// //计算返现金额
// BigDecimal cashBackPrice = record.getOrderMoney()
// .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
// if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
// grantItem.setAwardPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP));
// } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())){
// grantItem.setAwardPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP));
// }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
// BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10))
// .setScale(0, RoundingMode.HALF_UP);
// grantItem.setAwardPrice(cashBackPriceTen.multiply(new BigDecimal(10)));
// }
// grantItem.setMoneyRule(grantAwardsItem.getMoneyRule());
// grantItem.setMallShareRate(grantAwardsItem.getMallShareRate());
// grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice());
//// grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate());
//// grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice());
// grantItemList.add(grantItem);


}
}else{

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){
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}

}

if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){
List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList());
Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity()));
WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size());
if(grantAwardsSecondItem != null){
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}
}

if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){
cashBackPriceTotal = activityItem.getMaxAmount();
}
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPriceTotal = cashBackPriceTotal.setScale(2, RoundingMode.HALF_UP);
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
cashBackPriceTotal = cashBackPriceTotal.setScale(0, RoundingMode.HALF_UP);
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10));
}

WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack();
activityGrantCashBack.setActivityId(activity.getId());
activityGrantCashBack.setActivityName(activity.getName());
activityGrantCashBack.setActivityItemId(activityItem.getId());
activityGrantCashBack.setActivityItemName(activityItem.getName());
activityGrantCashBack.setActivityItemType(activityItem.getType());
activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule());
activityGrantCashBack.setCalculationMode(activityItem.getCalculationMode());
activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount());
activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint());
activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints());
activityGrantCashBack.setCashBackPrice(cashBackPriceTotal);
activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO);
if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0
&& activityGrantCashBack.getTaxPoints() != null){
activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints())
.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
}
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, RoundingMode.HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
awardsItem.setPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP);
awardsItem.setPrice(cashBackPriceTen.multiply(new BigDecimal(10)));
activityItem.setActivityGrantCashBack(activityGrantCashBack);
activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount()));

WxOfflineActivityGrantCashBack lastActivityGrantCashBack = getLastActivityGrantCashBack(wxOfflineActivityGrantAward, activity.getId(), activityItem.getId());
if(lastActivityGrantCashBack != null){
BigDecimal subtracted = lastActivityGrantCashBack.getCashBackPrice().subtract(lastActivityGrantCashBack.getTaxPointsAmount());
String msg = "已返现:"+subtracted+"元 ";
if(subtracted.compareTo(activityItem.getCashBackPrice()) > 0){
msg += "顾客应退:"+subtracted.subtract(activityItem.getCashBackPrice())+"元 ";
}else{
msg += "应补顾客:"+activityItem.getCashBackPrice().subtract(subtracted)+"元 ";
}
if(lastActivityGrantCashBack.getTaxPointsAmount().compareTo(activityGrantCashBack.getTaxPointsAmount()) > 0){
msg += "税款退还:"+lastActivityGrantCashBack.getTaxPointsAmount().subtract(activityGrantCashBack.getTaxPointsAmount())+"元 ";
}else{
msg += "顾客补税:"+activityGrantCashBack.getTaxPointsAmount().subtract(lastActivityGrantCashBack.getTaxPointsAmount())+"元 ";
}
activityItem.setCashBackMsg(msg);
}
//计算商户商管分别承担金额
handlerAwardsSharePrice(activityItem.getActivityAwardsItemList());
}
}
}

private WxOfflineActivityGrantCashBack getLastActivityGrantCashBack(WxOfflineActivityGrantAward wxOfflineActivityGrantAward,Long activityId,Long activityItemId){
Long grantId = wxOfflineActivityGrantAwardMapper.getLastId(wxOfflineActivityGrantAward);
if(grantId == null){
return null;
}

WxOfflineActivityGrantCashBack cashBackQ = new WxOfflineActivityGrantCashBack();
cashBackQ.updateTenantInfo(wxOfflineActivityGrantAward);
cashBackQ.setGrantId(grantId);
cashBackQ.setActivityId(activityId);
cashBackQ.setActivityItemId(activityItemId);
return wxOfflineActivityGrantCashBackMapper.selectOne(new QueryWrapper<>(cashBackQ));
}

private void handlerAwardsSharePrice(List<WxOfflineActivityAwardsItem> awardsItemList){
if(awardsItemList == null || awardsItemList.isEmpty()){
return;
@@ -291,6 +424,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
wxOfflineActivityGrantAward.setUpdateDate(now);
wxOfflineActivityGrantAwardMapper.insert(wxOfflineActivityGrantAward);

//失效
WxOfflineActivityGrantAward upd = new WxOfflineActivityGrantAward();
upd.setId(wxOfflineActivityGrantAward.getId());
upd.updateTenantInfo(wxOfflineActivityGrantAward);
upd.setStatus(EnumYesOrNo.NO.getCode());
upd.setActivityId(activity.getId());
upd.setCusPhone(wxOfflineActivityGrantAward.getCusPhone());
upd.setUpdateDate(now);
wxOfflineActivityGrantAwardMapper.updateStatusNo(upd);

wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward);

//处理奖项
@@ -304,7 +447,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

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

List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds());
// List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds());
WxOfflineActivityRecord recordQ = new WxOfflineActivityRecord();
recordQ.updateTenantInfo(wxOfflineActivityGrantAward);
recordQ.setActivityId(activity.getId());
recordQ.setCusPhone(wxOfflineActivityGrantAward.getCusPhone());
recordQ.setAuditStatus(EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode());
List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.findList(recordQ);
if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) {
throw new MallinkException(Result.ERROR, "未查询到活动订单");
}
@@ -357,45 +506,37 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
if(wxOfflineActivityGrantAward.getActivityItemList() == null){
throw new MallinkException(Result.ERROR, "请检查活动项参数");
}
Map<Long, WxOfflineActivityItem> grantActivityItemMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity()));

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

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

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

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

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

if(activityGrantItemList == null || activityGrantItemList.isEmpty()){
continue;
}
if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){
throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足");
}

boolean isRepeat = activityGrantItemList.stream()
.collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting()))
.entrySet().stream().anyMatch(e -> e.getValue() > 1);
if(isRepeat){
throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复");
}

//奖项限制数量
int limitCount = 0;
if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){
@@ -421,9 +562,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

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

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

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

handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem);

activityItem.setActivityGrantItemList(activityGrantItemList);

}
else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) {
if(activityGrantItemList.size() != 1){
throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数");
BigDecimal cashBackPriceTotal = BigDecimal.ZERO;
activityGrantItemList = new ArrayList<>();

List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList());
//单笔订单计算
if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){
for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){
WxOfflineActivityAwardsItem grantAwardsItem = null;
for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){
if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0)
&& (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){
grantAwardsItem = awardsItem;
}
}
if(grantAwardsItem != null){
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
grantGrantItem.setRecordId(record.getId());
//计算返现金额
BigDecimal cashBackPrice = record.getOrderMoney()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));

grantAwardsItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem);

activityGrantItemList.add(grantGrantItem);

cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice);
}

}
}else{

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){
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100)));
grantAwardsItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem);

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

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

if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){
List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList());
Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity()));
WxOfflineActivityAwardsItem awardsSecondItem = collect.get(merchantIds.size());
if(awardsSecondItem != null){
WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem();
//计算返现金额
BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum()
.multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100)));
awardsSecondItem.setPrice(cashBackPrice);
handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem);

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

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

BigDecimal prop = BigDecimal.ONE;
if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){
prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP);
cashBackPriceTotal = activityItem.getMaxAmount();
}
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPriceTotal = cashBackPriceTotal.setScale(2, RoundingMode.HALF_UP);
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
cashBackPriceTotal = cashBackPriceTotal.setScale(0, RoundingMode.HALF_UP);
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10));
}
for (WxOfflineActivityGrantItem grantItem:activityGrantItemList){
if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).setScale(2, RoundingMode.HALF_UP));
} else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) {
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).setScale(0, RoundingMode.HALF_UP));
}else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){
grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).divide(new BigDecimal(10))
.setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)));
}
}

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

WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack();
activityGrantCashBack.setActivityId(activity.getId());
activityGrantCashBack.setActivityName(activity.getName());
activityGrantCashBack.setActivityItemId(activityItem.getId());
activityGrantCashBack.setActivityItemName(activityItem.getName());
activityGrantCashBack.setActivityItemType(activityItem.getType());
activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule());
activityGrantCashBack.setCalculationMode(activityItem.getCalculationMode());
activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount());
activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint());
activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints());
activityGrantCashBack.setCashBackPrice(cashBackPriceTotal);
activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO);
if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0
&& activityGrantCashBack.getTaxPoints() != null){
activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints())
.divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP));
}
activityItem.setActivityGrantCashBack(activityGrantCashBack);
}

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

wxOfflineActivityGrantAward.setActivityItemList(activityItemList);
}

private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){
@@ -482,6 +738,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount());
grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule());
grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio());
if(grantGrantItem.getAwardCount() == null){
grantGrantItem.setAwardCount(1);
}
grantGrantItem.setAwardPrice(awardsItem.getPrice()
.multiply(new BigDecimal(grantGrantItem.getAwardCount()))
.setScale(2, RoundingMode.HALF_UP));
@@ -505,6 +764,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
//最近30天数据
WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward();
grantAwardQ.updateTenantInfo(tenantInfo);
grantAwardQ.setStatus(EnumYesOrNo.YES.getCode());
grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate));
Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ);
//一周前的昨天
@@ -550,18 +810,26 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity

@Override
public List<WxOfflineActivityGrantAward> grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<Long> grantIds = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId());
if(grantIds == null || grantIds.isEmpty()){
return null;
}
// List<Long> grantIds = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId());
// if(grantIds == null || grantIds.isEmpty()){
// return null;
// }
WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward();
grantAwardQ.updateTenantInfo(wxOfflineActivityGrantAward);
grantAwardQ.setIds(grantIds);
// grantAwardQ.setIds(grantIds);
grantAwardQ.setActivityId(wxOfflineActivityGrantAward.getActivityId());
grantAwardQ.setCusPhone(wxOfflineActivityGrantAward.getCusPhone());
List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ);
for (WxOfflineActivityGrantAward grantAward : grantAwardList) {
//获取奖项
List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId());
grantAward.setActivityItemList(activityItemList);
//获取返现汇总
WxOfflineActivityGrantCashBack cashBackQ = new WxOfflineActivityGrantCashBack();
cashBackQ.updateTenantInfo(grantAward);
cashBackQ.setGrantId(grantAward.getId());
List<WxOfflineActivityGrantCashBack> cashBackList = wxOfflineActivityGrantCashBackMapper.findList(cashBackQ);
Map<Long, WxOfflineActivityGrantCashBack> cashBackMap = cashBackList.stream().collect(Collectors.toMap(WxOfflineActivityGrantCashBack::getActivityItemId, Function.identity()));
//获取实际获得奖项
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(grantAward);
@@ -569,6 +837,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
List<WxOfflineActivityGrantItem> grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ);
Map<Long, List<WxOfflineActivityGrantItem>> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId));
for (WxOfflineActivityItem activityItem : grantAward.getActivityItemList()) {
WxOfflineActivityGrantCashBack cashBack = cashBackMap.get(activityItem.getId());
if(cashBack != null){
activityItem.setActivityGrantCashBack(cashBackMap.get(activityItem.getId()));
activityItem.setCashBackPrice(cashBack.getCashBackPrice().subtract(cashBack.getTaxPointsAmount()));
}

List<WxOfflineActivityGrantItem> grantActivityItemList = activityItemGrantMap.get(activityItem.getId());
if (grantActivityItemList == null || grantActivityItemList.isEmpty()) {
activityItem.setIsMeet(false);
@@ -601,6 +875,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward();
grantAwardQ.updateTenantInfo(wxOfflineActivity);
grantAwardQ.setActivityId(wxOfflineActivity.getId());
grantAwardQ.setStatus(EnumYesOrNo.YES.getCode());
List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ);
if(grantAwardList != null){
WxMerchant merchantQ = new WxMerchant();
@@ -614,6 +889,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(wxOfflineActivity);
grantItemQ.setActivityId(wxOfflineActivity.getId());
grantItemQ.setStatus(EnumYesOrNo.YES.getCode());
List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ);
Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId));
List<OfflineActivityGrantRecord> grantRecordList = wxOfflineActivityRecordGrantMapper.findGrantRecordList(wxOfflineActivity.getId(),wxOfflineActivity.getTenantId());


+ 42
- 23
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java View File

@@ -3,11 +3,13 @@ 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.WxOfflineActivityGrantCashBack;
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.mapper.WxOfflineActivityGrantCashBackMapper;
import com.iformall.service.WxOfflineActivityGrantItemService;
import com.iformall.mapper.WxOfflineActivityGrantItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,37 +31,54 @@ public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityG
@Autowired
private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper;

@Autowired
private WxOfflineActivityGrantCashBackMapper wxOfflineActivityGrantCashBackMapper;

@Override
public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) {
List<WxOfflineActivityGrantItem> rantItemList = new ArrayList<>();
List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>();
List<WxOfflineActivityGrantCashBack> cashBackList = 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)));
}
if(activityItem.getActivityGrantItemList() != null){
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)));
// }
// }
grantItemList.add(grantGrantItem);
}
rantItemList.add(grantGrantItem);
}

if(activityItem.getActivityGrantCashBack() != null){
WxOfflineActivityGrantCashBack activityGrantCashBack = activityItem.getActivityGrantCashBack();
activityGrantCashBack.setGrantId(wxOfflineActivityGrantAward.getId());
activityGrantCashBack.setId(idWorker.nextId());
activityGrantCashBack.updateTenantInfo(wxOfflineActivityGrantAward);
activityGrantCashBack.setCreateDate(now);
activityGrantCashBack.setUpdateDate(now);
cashBackList.add(activityGrantCashBack);
}
}
wxOfflineActivityGrantItemMapper.insertList(rantItemList);
wxOfflineActivityGrantItemMapper.insertList(grantItemList);

wxOfflineActivityGrantItemMapper.updateStatusNo(wxOfflineActivityGrantAward);

if(!cashBackList.isEmpty()) wxOfflineActivityGrantCashBackMapper.insertList(cashBackList);

}



+ 61
- 23
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java View File

@@ -26,6 +26,7 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.NumberFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
@@ -55,6 +56,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>();
final IdWorker idWorker = IdWorker.get();
Date now = new Date();
Map<Long, WxOfflineActivityRecord> recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity()));
//获取订单占比(占比最少的订单用减法,尽量减少误差)
List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList());
int size = recordDescList.size() - 1;
@@ -75,11 +77,13 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
}
for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) {
List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>();
for (WxOfflineActivityRecord record : recordDescList){
if(wxOfflineActivityGrantItem.getRecordId() != null){
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.setId(idWorker.nextId());
settlement.updateTenantInfo(wxOfflineActivityGrantItem);

WxOfflineActivityRecord record = recordMap.get(wxOfflineActivityGrantItem.getRecordId());

settlement.setRecordId(record.getId());
settlement.setOrderNo(record.getOrderNo());
settlement.setOrderMoney(record.getOrderMoney());
@@ -92,34 +96,64 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice());
settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate());
settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate());
settlement.setOrderRatio(record.getOrderRatio());
settlement.setOrderRatio(new BigDecimal(100));

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(2, RoundingMode.HALF_UP);
settlement.setRealGrantPrice(realGrantPrice);
settlement.setRealGrantPrice(settlement.getGrantPrice());
settlement.setRealMallSharePrice(settlement.getRealGrantPrice()
.multiply(settlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP));
settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice()));

lastGrantPrice = lastGrantPrice.subtract(realGrantPrice);
settlement.setCreateDate(now);
settlement.setUpdateDate(now);
itemSettlementList.add(settlement);
}else{
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(2, RoundingMode.HALF_UP);
settlement.setRealGrantPrice(realGrantPrice);
settlement.setRealMallSharePrice(settlement.getRealGrantPrice()
.multiply(settlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, 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(2, RoundingMode.HALF_UP));
lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice()));
}
WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize);
lastSettlement.setRealGrantPrice(lastGrantPrice);
lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice()
.multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100)))
.setScale(2, RoundingMode.HALF_UP));
lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice()));

settlementList.addAll(itemSettlementList);
@@ -127,6 +161,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
}

wxOfflineActivityGrantSettlementMapper.insertList(settlementList);
wxOfflineActivityGrantSettlementMapper.updateStatusNo(wxOfflineActivityGrantAward);
}

@Override
@@ -143,6 +178,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
//最近30天
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.updateTenantInfo(tenantInfo);
settlement.setStatus(EnumYesOrNo.YES.getCode());
settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate));
OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);
//一周前的昨天
@@ -236,6 +272,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
//获取结算相关
WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement();
settlement.updateTenantInfo(activity);
settlement.setStatus(EnumYesOrNo.YES.getCode());
settlement.setActivityId(activity.getId());
OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement);
activity.setGrantMershantCount(settlementStatistics.getMerchantCount());
@@ -260,7 +297,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
record.setMerchantIdList(mids);
}
}
record.setStatus(EnumYesOrNo.YES.getCode());
List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record);
if (activitySettlementList != null && !activitySettlementList.isEmpty()) {

@@ -291,6 +328,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct
}else{
result.put("merchantName",merchant.getName());
}
grantSettlement.setStatus(EnumYesOrNo.YES.getCode());
List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement);
if (activitySettlementList == null || activitySettlementList.isEmpty()) {
result.put("recordCount",0);


+ 11
- 2
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java View File

@@ -4,6 +4,7 @@ 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.EnumOfflineActivityAwardsItemType;
import com.iformall.enums.EnumOfflineActivityAwardsRule;
import com.iformall.enums.EnumOfflineActivityType;
import com.iformall.service.WxOfflineActivityAwardsItemService;
@@ -15,6 +16,8 @@ import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
* @author xiaohu
@@ -68,7 +71,7 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe
wxOfflineActivityItemMapper.insert(activityItem);

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

@@ -80,7 +83,13 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe
List<WxOfflineActivityItem> itemList = wxOfflineActivityItemMapper.findList(activityItemQuery);
for (WxOfflineActivityItem item : itemList) {
List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId);
item.setActivityAwardsItemList(activityAwardsItemList);
if(EnumOfflineActivityType.CASHBACK.getCode().equals(item.getType())){
Map<Integer, List<WxOfflineActivityAwardsItem>> collect = activityAwardsItemList.stream().collect(Collectors.groupingBy(WxOfflineActivityAwardsItem::getType));
item.setActivityAwardsItemList(collect.get(EnumOfflineActivityAwardsItemType.FIRST.getCode()));
item.setActivityAwardsItemSecondList(collect.get(EnumOfflineActivityAwardsItemType.SECOND.getCode()));
}else{
item.setActivityAwardsItemList(activityAwardsItemList);
}
}
return itemList;
}


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

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

recordGrantList.add(recordGrant);


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

@@ -100,6 +100,7 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco
}
}
if(awardQ != null){
awardQ.setStatus(EnumYesOrNo.YES.getCode());
List<Long> rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ);
if (null == rids || rids.size() <= 0 ) {
record.setId(-1L);


+ 1
- 0
mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java View File

@@ -112,6 +112,7 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{
WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem();
grantItemQ.updateTenantInfo(activity);
grantItemQ.setActivityId(activity.getId());
grantItemQ.setStatus(EnumYesOrNo.YES.getCode());
activity.setGrantItemCount(wxOfflineActivityGrantItemMapper.getSumAwardCount(grantItemQ));

}


+ 7
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml View File

@@ -9,8 +9,10 @@
<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="type" column="type" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="grade" column="grade" jdbcType="INTEGER"/>
<result property="merchantCount" column="merchant_count" 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"/>
@@ -24,7 +26,7 @@

<sql id="allColumns">
id,tenant_id,parent_tenant_id,
activity_item_id,`name`,grade,
activity_item_id,`type`,`name`,grade,merchant_count,
min_amount,max_amount,cash_back_ratio,price,
money_rule,mall_share_rate,merchant_share_rate,
create_date,update_date
@@ -48,6 +50,10 @@
and `activity_item_id` = #{activityItemId}
</if>

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

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


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

@@ -22,6 +22,7 @@
<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="status" column="status" jdbcType="INTEGER"/>
</resultMap>

<sql id="allColumns">
@@ -58,6 +59,9 @@
<if test=" null != cusPhone and cusPhone != '' ">
and `cus_phone` = #{cusPhone}
</if>
<if test=" null != status">
and `status` = #{status}
</if>

<if test=" null != ids ">
and id in
@@ -91,6 +95,9 @@
<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>
<if test=" null != status">
and `status` = #{status}
</if>
</select>


@@ -113,6 +120,9 @@
<if test=" null != createDateEnd">
and ga.`create_date` &lt;= #{createDateEnd}
</if>
<if test=" null != status">
and `status` = #{status}
</if>
<if test=" null != createByIds ">
and ga.create_by in
<foreach collection="createByIds" index="index" item="sendItem" open="(" separator="," close=")">
@@ -124,4 +134,15 @@
<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>

<select id="getLastId" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Long">
select id from wx_offline_activity_grant_award
where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone}
order by create_date desc limit 1
</select>

<update id="updateStatusNo" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" >
update wx_offline_activity_grant_award set status = #{status},update_date = #{updateDate}
where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id}
</update>
</mapper>

+ 95
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml View File

@@ -0,0 +1,95 @@
<?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.WxOfflineActivityGrantCashBackMapper">

<resultMap id="BaseResultMap" type="com.iformall.domain.po.WxOfflineActivityGrantCashBack">
<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="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/>
<result property="calculationMode" column="calculation_mode" jdbcType="SMALLINT"/>

<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
<result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/>
<result property="startingTaxPoint" column="starting_tax_point" jdbcType="DECIMAL"/>
<result property="taxPoints" column="tax_points" jdbcType="DECIMAL"/>
<result property="cashBackPrice" column="cash_back_price" jdbcType="DECIMAL"/>
<result property="taxPointsAmount" column="tax_points_amount" jdbcType="DECIMAL"/>
</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,awards_item_rule,calculation_mode,
create_date,update_date,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount
</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 != 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.WxOfflineActivityGrantCashBack" resultMap="BaseResultMap">
select <include refid="allColumns" /> from wx_offline_activity_grant_cash_back
<include refid="dynamicWhereConditions" />
</select>

<insert id="insertList" parameterType="java.util.List">
insert into wx_offline_activity_grant_cash_back
(id,
grant_id,activity_id,activity_name,
activity_item_id,activity_item_name,activity_item_type,
awards_item_rule,calculation_mode,
create_date,update_date
,max_amount,starting_tax_point,tax_points,cash_back_price,tax_points_amount)
values
<foreach collection="cashBackList" item="item" index="index" separator=",">
(#{item.id,jdbcType=BIGINT},
#{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR},
#{item.activityItemId,jdbcType=BIGINT},#{item.activityItemName,jdbcType=VARCHAR},#{item.activityItemType,jdbcType=INTEGER},
#{item.awardsItemRule,jdbcType=INTEGER},#{item.calculationMode,jdbcType=INTEGER},
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},
#{item.maxAmount,jdbcType=DECIMAL},#{item.startingTaxPoint,jdbcType=DECIMAL},#{item.taxPoints,jdbcType=DECIMAL},#{item.cashBackPrice,jdbcType=DECIMAL},#{item.taxPointsAmount,jdbcType=DECIMAL})
</foreach>
</insert>

</mapper>

+ 20
- 3
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml View File

@@ -28,6 +28,8 @@
<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"/>
<result property="recordId" column="record_id" jdbcType="BIGINT"/>
<result property="status" column="status" jdbcType="INTEGER"/>
</resultMap>

<sql id="allColumns">
@@ -38,7 +40,7 @@
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
create_date,update_date,record_id
</sql>

<sql id="dynamicWhereConditions">
@@ -69,6 +71,10 @@
and `award_itam_id` = #{awardItamId}
</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=")">
@@ -92,7 +98,7 @@
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)
create_date,update_date,record_id)
values
<foreach collection="grantItemList" item="item" index="index" separator=",">
(#{item.id,jdbcType=BIGINT},
@@ -102,7 +108,7 @@
#{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})
#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},#{item.recordId,jdbcType=BIGINT})
</foreach>
</insert>

@@ -118,6 +124,17 @@
<if test=" null != activityId ">
and activity_id = #{activityId}
</if>

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

<update id="updateStatusNo" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" >
update wx_offline_activity_grant_item set status = 0,update_date = now()
where grant_id in (
select id from wx_offline_activity_grant_award
where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id})
</update>

</mapper>

+ 18
- 0
mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml View File

@@ -25,6 +25,7 @@
<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"/>
<result property="status" column="status" jdbcType="INTEGER"/>
</resultMap>

<sql id="allColumns">
@@ -80,6 +81,9 @@
<if test=" null != createDateEnd">
and `create_date` &lt;= #{createDateEnd}
</if>
<if test=" null != status">
and `status` = #{status}
</if>
<if test=" null != merchantIdList ">
and merchant_id in
<foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")">
@@ -149,6 +153,10 @@
and `create_date` &lt;= #{createDateEnd}
</if>

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

</select>


@@ -174,6 +182,9 @@
<if test=" null != merchantId ">
and `merchant_id` = #{merchantId}
</if>
<if test=" null != status">
and `status` = #{status}
</if>
<if test=" null != merchantIdList ">
and merchant_id in
<foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")">
@@ -185,4 +196,11 @@
</select>


<update id="updateStatusNo" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" >
update wx_offline_activity_grant_settlement set status = 0,update_date = now()
where grant_id in (
select id from wx_offline_activity_grant_award
where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id})
</update>

</mapper>

+ 5
- 1
mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml View File

@@ -16,6 +16,10 @@
<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="calculationMode" column="calculation_mode" jdbcType="SMALLINT"/>
<result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/>
<result property="startingTaxPoint" column="starting_tax_point" jdbcType="DECIMAL"/>
<result property="taxPoints" column="tax_points" jdbcType="DECIMAL"/>
<result property="createDate" column="create_date" jdbcType="TIMESTAMP"/>
<result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/>
</resultMap>
@@ -24,7 +28,7 @@
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
awards_item_rule,calculation_mode,max_amount,starting_tax_point,tax_points,create_date,update_date
</sql>

<sql id="dynamicWhereConditions">


Loading…
Cancel
Save