diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java index 68da935d0..45ea3a053 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivityGrantController.java @@ -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 grantAwardList = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward); diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java index e299767f3..717f92204 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/market/WxOfflineActivitySettlementController.java @@ -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 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); } diff --git a/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java b/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java index 45def129a..ba81c0a51 100644 --- a/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java +++ b/mallinkBApi/src/main/java/com/iformall/controller/WxOfflineActivityRecordController.java @@ -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()); diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java index dc95ebc54..50d9e9dcf 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityAwardsItem.java @@ -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; + /** * 限制最小金额 */ diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java index ef02730a5..82b7f5362 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantAward.java @@ -161,4 +161,10 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ @TableField(exist = false) private List activityItemList; + + /** + * 是否有效 + */ + @TableField(value = "status") + private Integer status; } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java new file mode 100644 index 000000000..22ae0a1ae --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantCashBack.java @@ -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; + +} \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java index 7bd378699..2aacca789 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantItem.java @@ -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; + } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java index 71430bf2a..0cd97296f 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityGrantSettlement.java @@ -148,4 +148,10 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { @TableField(value = "update_date") private Date updateDate; + /** + * 是否有效 + */ + @TableField(value = "status") + private Integer status; + } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java index 16c1978d2..4781a9440 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityItem.java @@ -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 activityAwardsItemList; + @TableField(exist = false) + private List activityAwardsItemSecondList; /** * 是否满足活动条件 */ @@ -110,4 +136,22 @@ public class WxOfflineActivityItem extends TenantEntity { @TableField(exist = false) private List activityGrantItemList; + /** + * 返现汇总 + */ + @TableField(exist = false) + private WxOfflineActivityGrantCashBack activityGrantCashBack; + + /** + * 返现金额 + */ + @TableField(exist = false) + private BigDecimal cashBackPrice; + + /** + * 返现详情 + */ + @TableField(exist = false) + private String cashBackMsg; + } \ No newline at end of file diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java index 34178ad11..d875371ec 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxOfflineActivityRecord.java @@ -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; diff --git a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java index c1cd8cd96..3842ee2c0 100644 --- a/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java +++ b/mallinkService/src/main/java/com/iformall/domain/vo/OfflineActivitySettlement.java @@ -28,4 +28,6 @@ public class OfflineActivitySettlement extends TenantEntity { private BigDecimal sumMallPrice; @SortColumn(column = "sumMerchantPrice") private BigDecimal sumMerchantPrice; + + private Integer status; } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java new file mode 100644 index 000000000..0d41b696e --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityAwardsItemType.java @@ -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; + } +} diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java new file mode 100644 index 000000000..7073d9a5f --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/enums/EnumOfflineActivityCalculationMode.java @@ -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; + } +} diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java index 1699085fa..ebcf544d0 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantAwardMapper.java @@ -21,6 +21,10 @@ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper findList(WxOfflineActivityGrantAward grantAwardQ); + + void updateStatusNo(WxOfflineActivityGrantAward grantAwardUpd); + + Long getLastId(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java new file mode 100644 index 000000000..33e4abe2d --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantCashBackMapper.java @@ -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 { + + List findList(WxOfflineActivityGrantCashBack offlineActivityGrantCashBack); + + void insertList(@Param("cashBackList")List cashBackList); +} + + diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java index 991ed2d0e..54234f022 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantItemMapper.java @@ -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 findList(WxOfflineActivityGrantItem grantItemQ); + + void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); } diff --git a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java index 659345249..be33e673f 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/WxOfflineActivityGrantSettlementMapper.java @@ -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 getActivitySettlement(OfflineActivitySettlement settlement); List findList(WxOfflineActivityGrantSettlement settlement); + + void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); } diff --git a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java index 9e5dbc3b5..90ff0e430 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOfflineActivityAwardsItemService.java @@ -13,7 +13,7 @@ import java.util.List; */ public interface WxOfflineActivityAwardsItemService { - void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsItemList); + void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsItemList, List activityAwardsItemSecondList); List getActivityAwardsItemList(Long activityItemId, String tenantId); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java index 32ff8784c..55d975e65 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityAwardsItemServiceImpl.java @@ -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 activityAwardsItemList) { + public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List activityAwardsItemList, + List 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 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java index df8f3d9fb..5d500a5e0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantAwardServiceImpl.java @@ -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 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 grantItemList = new ArrayList<>(); + + List 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 merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); + Map 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 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 wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); +// List 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 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 grantActivityItemMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); List activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); - Map 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 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 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 awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); + //获取奖项 + WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId()); + List 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 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 merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); + Map 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 grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { - List grantIds = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId()); - if(grantIds == null || grantIds.isEmpty()){ - return null; - } +// List 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 grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); for (WxOfflineActivityGrantAward grantAward : grantAwardList) { //获取奖项 List activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId()); grantAward.setActivityItemList(activityItemList); + //获取返现汇总 + WxOfflineActivityGrantCashBack cashBackQ = new WxOfflineActivityGrantCashBack(); + cashBackQ.updateTenantInfo(grantAward); + cashBackQ.setGrantId(grantAward.getId()); + List cashBackList = wxOfflineActivityGrantCashBackMapper.findList(cashBackQ); + Map 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 grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ); Map> 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 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 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 grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ); Map> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId)); List grantRecordList = wxOfflineActivityRecordGrantMapper.findGrantRecordList(wxOfflineActivity.getId(),wxOfflineActivity.getTenantId()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java index 5d1ff180e..698fdc573 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantItemServiceImpl.java @@ -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 rantItemList = new ArrayList<>(); + List grantItemList = new ArrayList<>(); + List 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); } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java index fabce08af..f68a16dca 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityGrantSettlementServiceImpl.java @@ -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 settlementList = new ArrayList<>(); final IdWorker idWorker = IdWorker.get(); Date now = new Date(); + Map recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity())); //获取订单占比(占比最少的订单用减法,尽量减少误差) List 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 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 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 activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement); if (activitySettlementList == null || activitySettlementList.isEmpty()) { result.put("recordCount",0); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java index c1631715c..ac4f88e64 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityItemServiceImpl.java @@ -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 itemList = wxOfflineActivityItemMapper.findList(activityItemQuery); for (WxOfflineActivityItem item : itemList) { List activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); - item.setActivityAwardsItemList(activityAwardsItemList); + if(EnumOfflineActivityType.CASHBACK.getCode().equals(item.getType())){ + Map> 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; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java index de2e4df9e..3ea904648 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordGrantServiceImpl.java @@ -25,11 +25,11 @@ public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivit @Override public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { List 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); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java index 478b3e730..4dcc079d6 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityRecordServiceImpl.java @@ -100,6 +100,7 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco } } if(awardQ != null){ + awardQ.setStatus(EnumYesOrNo.YES.getCode()); List rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ); if (null == rids || rids.size() <= 0 ) { record.setId(-1L); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java index 29a9790fe..82c211c90 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOfflineActivityServiceImpl.java @@ -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)); } diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml index 89779a391..9165e9dec 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityAwardsItemMapper.xml @@ -9,8 +9,10 @@ + + @@ -24,7 +26,7 @@ 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} + + and `type` = #{type} + + and `name` like concat('%', #{name},'%') diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml index 406bc5e57..88a638355 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantAwardMapper.xml @@ -22,6 +22,7 @@ + @@ -58,6 +59,9 @@ and `cus_phone` = #{cusPhone} + + and `status` = #{status} + and id in @@ -91,6 +95,9 @@ and `create_date` <= #{createDateEnd} + + and `status` = #{status} + @@ -113,6 +120,9 @@ and ga.`create_date` <= #{createDateEnd} + + and `status` = #{status} + and ga.create_by in @@ -124,4 +134,15 @@ + + + + + update wx_offline_activity_grant_award set status = #{status},update_date = #{updateDate} + where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id} + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml new file mode 100644 index 000000000..c78fce734 --- /dev/null +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantCashBackMapper.xml @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + where 1 = 1 + + + and `id` = #{id} + + + + and `tenant_id` = #{tenantId} + + + and `parent_tenant_id` = #{parentTenantId} + + + + and `grant_id` = #{grantId} + + + + and `activity_id` = #{activityId} + + + and `activity_item_id` = #{activityItemId} + + + + and id in + + #{idItem} + + + order by ${sortColumns} + + + + + + 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 + + (#{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}) + + + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml index e1d55ecc4..184ef2a55 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantItemMapper.xml @@ -28,6 +28,8 @@ + + @@ -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 @@ -69,6 +71,10 @@ and `award_itam_id` = #{awardItamId} + + and `status` = #{status} + + and id in @@ -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 (#{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}) @@ -118,6 +124,17 @@ and activity_id = #{activityId} + + + and `status` = #{status} + + + 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}) + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml index dca024453..e6af0ff54 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityGrantSettlementMapper.xml @@ -25,6 +25,7 @@ + @@ -80,6 +81,9 @@ and `create_date` <= #{createDateEnd} + + and `status` = #{status} + and merchant_id in @@ -149,6 +153,10 @@ and `create_date` <= #{createDateEnd} + + and `status` = #{status} + + @@ -174,6 +182,9 @@ and `merchant_id` = #{merchantId} + + and `status` = #{status} + and merchant_id in @@ -185,4 +196,11 @@ + + 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}) + + diff --git a/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml b/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml index 24d7fae53..35490ea2f 100644 --- a/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml +++ b/mallinkService/src/main/resources/mapper/WxOfflineActivityItemMapper.xml @@ -16,6 +16,10 @@ + + + + @@ -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