| @@ -94,8 +94,11 @@ public class WxOfflineActivityGrantController extends BaseController { | |||||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | if(wxOfflineActivityGrantAward.getActivityId() == null){ | ||||
| return new ResultData(Result.ERROR,"活动ID为空"); | return new ResultData(Result.ERROR,"活动ID为空"); | ||||
| } | } | ||||
| if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||||
| return new ResultData(Result.ERROR,"请选择订单"); | |||||
| // 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(); | TenantEntity tenantEntity = getTenantInfo(); | ||||
| wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); | wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); | ||||
| @@ -110,8 +113,11 @@ public class WxOfflineActivityGrantController extends BaseController { | |||||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | if(wxOfflineActivityGrantAward.getActivityId() == null){ | ||||
| return new ResultData(Result.ERROR,"活动ID为空"); | return new ResultData(Result.ERROR,"活动ID为空"); | ||||
| } | } | ||||
| if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||||
| return new ResultData(Result.ERROR,"请选择订单"); | |||||
| // 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())){ | // if(StringUtil.isBlank(wxOfflineActivityGrantAward.getSignImg())){ | ||||
| // return new ResultData(Result.ERROR,"签名为空"); | // return new ResultData(Result.ERROR,"签名为空"); | ||||
| @@ -138,9 +144,12 @@ public class WxOfflineActivityGrantController extends BaseController { | |||||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | if(wxOfflineActivityGrantAward.getActivityId() == null){ | ||||
| return new ResultData(Result.ERROR,"活动ID为空"); | 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(); | TenantEntity tenantInfo = getTenantInfo(); | ||||
| wxOfflineActivityGrantAward.updateTenantInfo(tenantInfo); | wxOfflineActivityGrantAward.updateTenantInfo(tenantInfo); | ||||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward); | List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward); | ||||
| @@ -8,6 +8,7 @@ import com.iformall.domain.po.*; | |||||
| import com.iformall.domain.po.base.BaseEntity.SortField; | import com.iformall.domain.po.base.BaseEntity.SortField; | ||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.domain.vo.OfflineActivitySettlement; | import com.iformall.domain.vo.OfflineActivitySettlement; | ||||
| import com.iformall.enums.EnumYesOrNo; | |||||
| import com.iformall.exception.MallinkException; | import com.iformall.exception.MallinkException; | ||||
| import com.iformall.service.WxOfflineActivityGrantAwardService; | import com.iformall.service.WxOfflineActivityGrantAwardService; | ||||
| import com.iformall.service.WxOfflineActivityGrantSettlementService; | import com.iformall.service.WxOfflineActivityGrantSettlementService; | ||||
| @@ -131,6 +132,7 @@ public class WxOfflineActivitySettlementController extends BaseController { | |||||
| TenantEntity tenantInfo = getTenantInfo(); | TenantEntity tenantInfo = getTenantInfo(); | ||||
| grantSettlement.updateTenantInfo(tenantInfo); | grantSettlement.updateTenantInfo(tenantInfo); | ||||
| grantSettlement.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| List<WxOfflineActivityGrantSettlement> recordList = wxOfflineActivityGrantSettlementService.findList(grantSettlement); | List<WxOfflineActivityGrantSettlement> recordList = wxOfflineActivityGrantSettlementService.findList(grantSettlement); | ||||
| return new ResultData(recordList); | return new ResultData(recordList); | ||||
| @@ -147,6 +149,7 @@ public class WxOfflineActivitySettlementController extends BaseController { | |||||
| } | } | ||||
| TenantEntity tenantInfo = getTenantInfo(); | TenantEntity tenantInfo = getTenantInfo(); | ||||
| grantSettlement.updateTenantInfo(tenantInfo); | grantSettlement.updateTenantInfo(tenantInfo); | ||||
| grantSettlement.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| wxOfflineActivityGrantSettlementService.exportData(request,response,grantSettlement); | wxOfflineActivityGrantSettlementService.exportData(request,response,grantSettlement); | ||||
| } | } | ||||
| @@ -59,6 +59,9 @@ public class WxOfflineActivityRecordController extends BaseController { | |||||
| if (null == wxOfflineActivityRecord.getOrderMoney() ) { | if (null == wxOfflineActivityRecord.getOrderMoney() ) { | ||||
| return new ResultData(Result.ERROR,"订单金额不能为空"); | return new ResultData(Result.ERROR,"订单金额不能为空"); | ||||
| } | } | ||||
| TenantEntity tenantEntity = getTenantInfo(); | |||||
| wxOfflineActivityRecord.updateTenantInfo(tenantEntity); | |||||
| if(wxOfflineActivityRecord.getId() != null){ | if(wxOfflineActivityRecord.getId() != null){ | ||||
| WxOfflineActivityRecord record = wxOfflineActivityRecordService.getById(wxOfflineActivityRecord.getId(),wxOfflineActivityRecord.getTenantId()); | WxOfflineActivityRecord record = wxOfflineActivityRecordService.getById(wxOfflineActivityRecord.getId(),wxOfflineActivityRecord.getTenantId()); | ||||
| if(!EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(record.getAuditStatus())){ | if(!EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(record.getAuditStatus())){ | ||||
| @@ -66,8 +69,6 @@ public class WxOfflineActivityRecordController extends BaseController { | |||||
| } | } | ||||
| wxOfflineActivityRecord.setAuditRemark(""); | wxOfflineActivityRecord.setAuditRemark(""); | ||||
| } | } | ||||
| TenantEntity tenantEntity = getTenantInfo(); | |||||
| wxOfflineActivityRecord.updateTenantInfo(tenantEntity); | |||||
| wxOfflineActivityRecord.setCreateBy(getMerchantBUserId()); | wxOfflineActivityRecord.setCreateBy(getMerchantBUserId()); | ||||
| wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId()); | wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId()); | ||||
| wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); | wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); | ||||
| @@ -32,6 +32,12 @@ public class WxOfflineActivityAwardsItem extends TenantEntity { | |||||
| @TableField(value = "activity_item_id") | @TableField(value = "activity_item_id") | ||||
| private Long activityItemId; | private Long activityItemId; | ||||
| /** | |||||
| * 奖项类型 | |||||
| */ | |||||
| @TableField(value = "type") | |||||
| private Integer type; | |||||
| /** | /** | ||||
| * 奖项名称 | * 奖项名称 | ||||
| */ | */ | ||||
| @@ -44,6 +50,12 @@ public class WxOfflineActivityAwardsItem extends TenantEntity { | |||||
| @TableField(value = "grade") | @TableField(value = "grade") | ||||
| private Integer grade; | private Integer grade; | ||||
| /** | |||||
| * 联单笔数 | |||||
| */ | |||||
| @TableField(value = "merchant_count") | |||||
| private Integer merchantCount; | |||||
| /** | /** | ||||
| * 限制最小金额 | * 限制最小金额 | ||||
| */ | */ | ||||
| @@ -161,4 +161,10 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private List<WxOfflineActivityItem> activityItemList; | private List<WxOfflineActivityItem> activityItemList; | ||||
| /** | |||||
| * 是否有效 | |||||
| */ | |||||
| @TableField(value = "status") | |||||
| private Integer status; | |||||
| } | } | ||||
| @@ -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; | |||||
| } | |||||
| @@ -152,4 +152,13 @@ public class WxOfflineActivityGrantItem extends TenantEntity { | |||||
| @TableField(value = "update_date") | @TableField(value = "update_date") | ||||
| private Date updateDate; | private Date updateDate; | ||||
| @TableField(value = "record_id") | |||||
| private Long recordId; | |||||
| /** | |||||
| * 是否有效 | |||||
| */ | |||||
| @TableField(value = "status") | |||||
| private Integer status; | |||||
| } | } | ||||
| @@ -148,4 +148,10 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { | |||||
| @TableField(value = "update_date") | @TableField(value = "update_date") | ||||
| private Date updateDate; | private Date updateDate; | ||||
| /** | |||||
| * 是否有效 | |||||
| */ | |||||
| @TableField(value = "status") | |||||
| private Integer status; | |||||
| } | } | ||||
| @@ -71,11 +71,35 @@ public class WxOfflineActivityItem extends TenantEntity { | |||||
| private Integer awardsItemCount; | private Integer awardsItemCount; | ||||
| /** | /** | ||||
| * 奖项计算规则(0代表无规则) | |||||
| * 返现奖项计算规则(0代表无规则) | |||||
| */ | */ | ||||
| @TableField(value = "awards_item_rule") | @TableField(value = "awards_item_rule") | ||||
| private Integer awardsItemRule; | 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) | @TableField(exist = false) | ||||
| private List<WxOfflineActivityAwardsItem> activityAwardsItemList; | private List<WxOfflineActivityAwardsItem> activityAwardsItemList; | ||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList; | |||||
| /** | /** | ||||
| * 是否满足活动条件 | * 是否满足活动条件 | ||||
| */ | */ | ||||
| @@ -110,4 +136,22 @@ public class WxOfflineActivityItem extends TenantEntity { | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private List<WxOfflineActivityGrantItem> activityGrantItemList; | private List<WxOfflineActivityGrantItem> activityGrantItemList; | ||||
| /** | |||||
| * 返现汇总 | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private WxOfflineActivityGrantCashBack activityGrantCashBack; | |||||
| /** | |||||
| * 返现金额 | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private BigDecimal cashBackPrice; | |||||
| /** | |||||
| * 返现详情 | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private String cashBackMsg; | |||||
| } | } | ||||
| @@ -103,10 +103,20 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||||
| } | } | ||||
| return lotteryNumList; | 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") | @TableField(value = "lottery_count") | ||||
| private Integer lotteryCount; | 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") | @TableField(value = "audit_remark") | ||||
| private String auditRemark; | 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") | @TableField(value = "audit_status") | ||||
| private Integer auditStatus; | private Integer auditStatus; | ||||
| @@ -187,7 +197,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||||
| @TableField(value = "audit_by") | @TableField(value = "audit_by") | ||||
| private Long auditBy; | private Long auditBy; | ||||
| @Excel(name = "审核人", width = 20, orderNum = "12") | |||||
| @Excel(name = "审核人", width = 20, orderNum = "14") | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private String auditByName; | private String auditByName; | ||||
| @@ -28,4 +28,6 @@ public class OfflineActivitySettlement extends TenantEntity { | |||||
| private BigDecimal sumMallPrice; | private BigDecimal sumMallPrice; | ||||
| @SortColumn(column = "sumMerchantPrice") | @SortColumn(column = "sumMerchantPrice") | ||||
| private BigDecimal sumMerchantPrice; | private BigDecimal sumMerchantPrice; | ||||
| private Integer status; | |||||
| } | } | ||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -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; | |||||
| } | |||||
| } | |||||
| @@ -21,6 +21,10 @@ public interface WxOfflineActivityGrantAwardMapper extends CommonMapper<WxOfflin | |||||
| WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | WxOfflineActivityGrantAward selectById(@Param("id")Long id, @Param("tenantId")String tenantId); | ||||
| List<WxOfflineActivityGrantAward> findList(WxOfflineActivityGrantAward grantAwardQ); | List<WxOfflineActivityGrantAward> findList(WxOfflineActivityGrantAward grantAwardQ); | ||||
| void updateStatusNo(WxOfflineActivityGrantAward grantAwardUpd); | |||||
| Long getLastId(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -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); | |||||
| } | |||||
| @@ -1,6 +1,7 @@ | |||||
| package com.iformall.mapper; | package com.iformall.mapper; | ||||
| import com.iformall.common.CommonMapper; | import com.iformall.common.CommonMapper; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | import com.iformall.domain.po.WxOfflineActivityGrantItem; | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import org.apache.ibatis.annotations.Param; | import org.apache.ibatis.annotations.Param; | ||||
| @@ -20,6 +21,8 @@ public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOffline | |||||
| Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ); | Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ); | ||||
| List<WxOfflineActivityGrantItem> findList(WxOfflineActivityGrantItem grantItemQ); | List<WxOfflineActivityGrantItem> findList(WxOfflineActivityGrantItem grantItemQ); | ||||
| void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -1,6 +1,7 @@ | |||||
| package com.iformall.mapper; | package com.iformall.mapper; | ||||
| import com.iformall.common.CommonMapper; | import com.iformall.common.CommonMapper; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import com.iformall.domain.vo.OfflineActivitySettlement; | import com.iformall.domain.vo.OfflineActivitySettlement; | ||||
| @@ -24,6 +25,8 @@ public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxO | |||||
| List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement settlement); | List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement settlement); | ||||
| List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement); | List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement); | ||||
| void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -13,7 +13,7 @@ import java.util.List; | |||||
| */ | */ | ||||
| public interface WxOfflineActivityAwardsItemService { | 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); | List<WxOfflineActivityAwardsItem> getActivityAwardsItemList(Long activityItemId, String tenantId); | ||||
| } | } | ||||
| @@ -3,6 +3,7 @@ package com.iformall.service.impl; | |||||
| import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
| import com.iformall.domain.po.WxOfflineActivityAwardsItem; | import com.iformall.domain.po.WxOfflineActivityAwardsItem; | ||||
| import com.iformall.domain.po.WxOfflineActivityItem; | import com.iformall.domain.po.WxOfflineActivityItem; | ||||
| import com.iformall.enums.EnumOfflineActivityAwardsItemType; | |||||
| import com.iformall.enums.EnumOfflineActivityType; | import com.iformall.enums.EnumOfflineActivityType; | ||||
| import com.iformall.service.WxOfflineActivityAwardsItemService; | import com.iformall.service.WxOfflineActivityAwardsItemService; | ||||
| import com.iformall.mapper.WxOfflineActivityAwardsItemMapper; | import com.iformall.mapper.WxOfflineActivityAwardsItemMapper; | ||||
| @@ -25,19 +26,20 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||||
| WxOfflineActivityAwardsItemMapper wxOfflineActivityAwardsItemMapper; | WxOfflineActivityAwardsItemMapper wxOfflineActivityAwardsItemMapper; | ||||
| @Override | @Override | ||||
| public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList) { | |||||
| public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList, | |||||
| List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList) { | |||||
| WxOfflineActivityAwardsItem activityAwardsItemDel = new WxOfflineActivityAwardsItem(); | WxOfflineActivityAwardsItem activityAwardsItemDel = new WxOfflineActivityAwardsItem(); | ||||
| activityAwardsItemDel.updateTenantInfo(activityItem); | activityAwardsItemDel.updateTenantInfo(activityItem); | ||||
| activityAwardsItemDel.setActivityItemId(activityItem.getId()); | activityAwardsItemDel.setActivityItemId(activityItem.getId()); | ||||
| wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel); | wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel); | ||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) { | for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) { | ||||
| if(awaItem.getId() == null){ | if(awaItem.getId() == null){ | ||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| awaItem.setId(idWorker.nextId()); | awaItem.setId(idWorker.nextId()); | ||||
| } | } | ||||
| awaItem.updateTenantInfo(activityItem); | awaItem.updateTenantInfo(activityItem); | ||||
| awaItem.setActivityItemId(activityItem.getId()); | awaItem.setActivityItemId(activityItem.getId()); | ||||
| awaItem.setType(EnumOfflineActivityAwardsItemType.FIRST.getCode()); | |||||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | ||||
| awaItem.setCashBackRatio(BigDecimal.ZERO); | awaItem.setCashBackRatio(BigDecimal.ZERO); | ||||
| @@ -50,8 +52,6 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||||
| } | } | ||||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | ||||
| awaItem.setGrade(-1); | awaItem.setGrade(-1); | ||||
| awaItem.setMinAmount(null); | |||||
| awaItem.setMaxAmount(null); | |||||
| awaItem.setPrice(BigDecimal.ZERO); | awaItem.setPrice(BigDecimal.ZERO); | ||||
| } | } | ||||
| if(awaItem.getPrice() == null){ | if(awaItem.getPrice() == null){ | ||||
| @@ -63,6 +63,22 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||||
| awaItem.setUpdateDate(activityItem.getUpdateDate()); | awaItem.setUpdateDate(activityItem.getUpdateDate()); | ||||
| wxOfflineActivityAwardsItemMapper.insert(awaItem); | 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 | @Override | ||||
| @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; | |||||
| import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; | import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; | ||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | 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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| @@ -52,6 +53,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| @Autowired | @Autowired | ||||
| private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | ||||
| @Autowired | |||||
| private WxOfflineActivityGrantCashBackMapper wxOfflineActivityGrantCashBackMapper; | |||||
| @Autowired | @Autowired | ||||
| WxOfflineActivityMapper wxOfflineActivityMapper; | WxOfflineActivityMapper wxOfflineActivityMapper; | ||||
| @@ -173,6 +177,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| //奖项处理 | //奖项处理 | ||||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | ||||
| wxOfflineActivityGrantAward.setActivityItemList(activityItemList); | wxOfflineActivityGrantAward.setActivityItemList(activityItemList); | ||||
| for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){ | for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){ | ||||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | ||||
| @@ -233,32 +238,160 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| activityItem.setActivityGrantItemList(Collections.singletonList(grantItem)); | activityItem.setActivityGrantItemList(Collections.singletonList(grantItem)); | ||||
| } | } | ||||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | 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.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){ | private void handlerAwardsSharePrice(List<WxOfflineActivityAwardsItem> awardsItemList){ | ||||
| if(awardsItemList == null || awardsItemList.isEmpty()){ | if(awardsItemList == null || awardsItemList.isEmpty()){ | ||||
| return; | return; | ||||
| @@ -291,6 +424,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| wxOfflineActivityGrantAward.setUpdateDate(now); | wxOfflineActivityGrantAward.setUpdateDate(now); | ||||
| wxOfflineActivityGrantAwardMapper.insert(wxOfflineActivityGrantAward); | 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); | wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward); | ||||
| //处理奖项 | //处理奖项 | ||||
| @@ -304,7 +447,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward,boolean isForPage){ | 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()) { | if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) { | ||||
| throw new MallinkException(Result.ERROR, "未查询到活动订单"); | throw new MallinkException(Result.ERROR, "未查询到活动订单"); | ||||
| } | } | ||||
| @@ -357,45 +506,37 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| if(wxOfflineActivityGrantAward.getActivityItemList() == null){ | if(wxOfflineActivityGrantAward.getActivityItemList() == null){ | ||||
| throw new MallinkException(Result.ERROR, "请检查活动项参数"); | 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()); | List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | ||||
| Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); | |||||
| int i = 0;//检查活动奖项 | int i = 0;//检查活动奖项 | ||||
| for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||||
| if(grantActivityItem.getId() == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动项参数"); | |||||
| } | |||||
| 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(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | ||||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||||
| continue; | |||||
| } | |||||
| if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | ||||
| throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); | 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; | int limitCount = 0; | ||||
| if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 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); | handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | ||||
| } | } | ||||
| activityItem.setActivityGrantItemList(activityGrantItemList); | |||||
| } | } | ||||
| else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ | else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ | ||||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||||
| continue; | |||||
| } | |||||
| if(activityGrantItemList.size() != 1){ | if(activityGrantItemList.size() != 1){ | ||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | ||||
| } | } | ||||
| @@ -445,27 +591,137 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | ||||
| activityItem.setActivityGrantItemList(activityGrantItemList); | |||||
| } | } | ||||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | 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){ | if(i == 0){ | ||||
| throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); | throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); | ||||
| } | } | ||||
| wxOfflineActivityGrantAward.setActivityItemList(activityItemList); | |||||
| } | } | ||||
| private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ | 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.setAwardMaxAmount(awardsItem.getMaxAmount()); | ||||
| grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); | grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); | ||||
| grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio()); | grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio()); | ||||
| if(grantGrantItem.getAwardCount() == null){ | |||||
| grantGrantItem.setAwardCount(1); | |||||
| } | |||||
| grantGrantItem.setAwardPrice(awardsItem.getPrice() | grantGrantItem.setAwardPrice(awardsItem.getPrice() | ||||
| .multiply(new BigDecimal(grantGrantItem.getAwardCount())) | .multiply(new BigDecimal(grantGrantItem.getAwardCount())) | ||||
| .setScale(2, RoundingMode.HALF_UP)); | .setScale(2, RoundingMode.HALF_UP)); | ||||
| @@ -505,6 +764,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| //最近30天数据 | //最近30天数据 | ||||
| WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | ||||
| grantAwardQ.updateTenantInfo(tenantInfo); | grantAwardQ.updateTenantInfo(tenantInfo); | ||||
| grantAwardQ.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); | grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); | ||||
| Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); | Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); | ||||
| //一周前的昨天 | //一周前的昨天 | ||||
| @@ -550,18 +810,26 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| @Override | @Override | ||||
| public List<WxOfflineActivityGrantAward> grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | 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(); | WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | ||||
| grantAwardQ.updateTenantInfo(wxOfflineActivityGrantAward); | grantAwardQ.updateTenantInfo(wxOfflineActivityGrantAward); | ||||
| grantAwardQ.setIds(grantIds); | |||||
| // grantAwardQ.setIds(grantIds); | |||||
| grantAwardQ.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | |||||
| grantAwardQ.setCusPhone(wxOfflineActivityGrantAward.getCusPhone()); | |||||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | ||||
| for (WxOfflineActivityGrantAward grantAward : grantAwardList) { | for (WxOfflineActivityGrantAward grantAward : grantAwardList) { | ||||
| //获取奖项 | //获取奖项 | ||||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId()); | List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId()); | ||||
| grantAward.setActivityItemList(activityItemList); | 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(); | WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | ||||
| grantItemQ.updateTenantInfo(grantAward); | grantItemQ.updateTenantInfo(grantAward); | ||||
| @@ -569,6 +837,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| List<WxOfflineActivityGrantItem> grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | List<WxOfflineActivityGrantItem> grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | ||||
| Map<Long, List<WxOfflineActivityGrantItem>> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); | Map<Long, List<WxOfflineActivityGrantItem>> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); | ||||
| for (WxOfflineActivityItem activityItem : grantAward.getActivityItemList()) { | 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()); | List<WxOfflineActivityGrantItem> grantActivityItemList = activityItemGrantMap.get(activityItem.getId()); | ||||
| if (grantActivityItemList == null || grantActivityItemList.isEmpty()) { | if (grantActivityItemList == null || grantActivityItemList.isEmpty()) { | ||||
| activityItem.setIsMeet(false); | activityItem.setIsMeet(false); | ||||
| @@ -601,6 +875,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | ||||
| grantAwardQ.updateTenantInfo(wxOfflineActivity); | grantAwardQ.updateTenantInfo(wxOfflineActivity); | ||||
| grantAwardQ.setActivityId(wxOfflineActivity.getId()); | grantAwardQ.setActivityId(wxOfflineActivity.getId()); | ||||
| grantAwardQ.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | ||||
| if(grantAwardList != null){ | if(grantAwardList != null){ | ||||
| WxMerchant merchantQ = new WxMerchant(); | WxMerchant merchantQ = new WxMerchant(); | ||||
| @@ -614,6 +889,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | ||||
| grantItemQ.updateTenantInfo(wxOfflineActivity); | grantItemQ.updateTenantInfo(wxOfflineActivity); | ||||
| grantItemQ.setActivityId(wxOfflineActivity.getId()); | grantItemQ.setActivityId(wxOfflineActivity.getId()); | ||||
| grantItemQ.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | ||||
| Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId)); | Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId)); | ||||
| List<OfflineActivityGrantRecord> grantRecordList = wxOfflineActivityRecordGrantMapper.findGrantRecordList(wxOfflineActivity.getId(),wxOfflineActivity.getTenantId()); | List<OfflineActivityGrantRecord> grantRecordList = wxOfflineActivityRecordGrantMapper.findGrantRecordList(wxOfflineActivity.getId(),wxOfflineActivity.getTenantId()); | ||||
| @@ -3,11 +3,13 @@ package com.iformall.service.impl; | |||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import com.iformall.common.IdWorker; | import com.iformall.common.IdWorker; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | import com.iformall.domain.po.WxOfflineActivityGrantAward; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantCashBack; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | import com.iformall.domain.po.WxOfflineActivityGrantItem; | ||||
| import com.iformall.domain.po.WxOfflineActivityItem; | import com.iformall.domain.po.WxOfflineActivityItem; | ||||
| import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule; | import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule; | ||||
| import com.iformall.enums.EnumOfflineActivityAwardsRule; | import com.iformall.enums.EnumOfflineActivityAwardsRule; | ||||
| import com.iformall.enums.EnumOfflineActivityType; | import com.iformall.enums.EnumOfflineActivityType; | ||||
| import com.iformall.mapper.WxOfflineActivityGrantCashBackMapper; | |||||
| import com.iformall.service.WxOfflineActivityGrantItemService; | import com.iformall.service.WxOfflineActivityGrantItemService; | ||||
| import com.iformall.mapper.WxOfflineActivityGrantItemMapper; | import com.iformall.mapper.WxOfflineActivityGrantItemMapper; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| @@ -29,37 +31,54 @@ public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityG | |||||
| @Autowired | @Autowired | ||||
| private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | ||||
| @Autowired | |||||
| private WxOfflineActivityGrantCashBackMapper wxOfflineActivityGrantCashBackMapper; | |||||
| @Override | @Override | ||||
| public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | 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(); | final IdWorker idWorker = IdWorker.get(); | ||||
| Date now = new Date(); | Date now = new Date(); | ||||
| for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | 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); | |||||
| } | } | ||||
| @@ -26,6 +26,7 @@ import java.math.BigDecimal; | |||||
| import java.math.RoundingMode; | import java.math.RoundingMode; | ||||
| import java.text.NumberFormat; | import java.text.NumberFormat; | ||||
| import java.util.*; | import java.util.*; | ||||
| import java.util.function.Function; | |||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
| /** | /** | ||||
| @@ -55,6 +56,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>(); | List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>(); | ||||
| final IdWorker idWorker = IdWorker.get(); | final IdWorker idWorker = IdWorker.get(); | ||||
| Date now = new Date(); | 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()); | List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); | ||||
| int size = recordDescList.size() - 1; | int size = recordDescList.size() - 1; | ||||
| @@ -75,11 +77,13 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| } | } | ||||
| for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | ||||
| List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); | List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); | ||||
| for (WxOfflineActivityRecord record : recordDescList){ | |||||
| if(wxOfflineActivityGrantItem.getRecordId() != null){ | |||||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | ||||
| settlement.setId(idWorker.nextId()); | settlement.setId(idWorker.nextId()); | ||||
| settlement.updateTenantInfo(wxOfflineActivityGrantItem); | settlement.updateTenantInfo(wxOfflineActivityGrantItem); | ||||
| WxOfflineActivityRecord record = recordMap.get(wxOfflineActivityGrantItem.getRecordId()); | |||||
| settlement.setRecordId(record.getId()); | settlement.setRecordId(record.getId()); | ||||
| settlement.setOrderNo(record.getOrderNo()); | settlement.setOrderNo(record.getOrderNo()); | ||||
| settlement.setOrderMoney(record.getOrderMoney()); | settlement.setOrderMoney(record.getOrderMoney()); | ||||
| @@ -92,34 +96,64 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); | settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); | ||||
| settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); | settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); | ||||
| settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate()); | 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() | settlement.setRealMallSharePrice(settlement.getRealGrantPrice() | ||||
| .multiply(settlement.getMallShareRate().divide(new BigDecimal(100))) | .multiply(settlement.getMallShareRate().divide(new BigDecimal(100))) | ||||
| .setScale(2, RoundingMode.HALF_UP)); | .setScale(2, RoundingMode.HALF_UP)); | ||||
| settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice())); | 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); | settlementList.addAll(itemSettlementList); | ||||
| @@ -127,6 +161,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| } | } | ||||
| wxOfflineActivityGrantSettlementMapper.insertList(settlementList); | wxOfflineActivityGrantSettlementMapper.insertList(settlementList); | ||||
| wxOfflineActivityGrantSettlementMapper.updateStatusNo(wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -143,6 +178,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| //最近30天 | //最近30天 | ||||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | ||||
| settlement.updateTenantInfo(tenantInfo); | settlement.updateTenantInfo(tenantInfo); | ||||
| settlement.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); | settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); | ||||
| OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); | OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); | ||||
| //一周前的昨天 | //一周前的昨天 | ||||
| @@ -236,6 +272,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| //获取结算相关 | //获取结算相关 | ||||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | ||||
| settlement.updateTenantInfo(activity); | settlement.updateTenantInfo(activity); | ||||
| settlement.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| settlement.setActivityId(activity.getId()); | settlement.setActivityId(activity.getId()); | ||||
| OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); | OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); | ||||
| activity.setGrantMershantCount(settlementStatistics.getMerchantCount()); | activity.setGrantMershantCount(settlementStatistics.getMerchantCount()); | ||||
| @@ -260,7 +297,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| record.setMerchantIdList(mids); | record.setMerchantIdList(mids); | ||||
| } | } | ||||
| } | } | ||||
| record.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record); | List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record); | ||||
| if (activitySettlementList != null && !activitySettlementList.isEmpty()) { | if (activitySettlementList != null && !activitySettlementList.isEmpty()) { | ||||
| @@ -291,6 +328,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||||
| }else{ | }else{ | ||||
| result.put("merchantName",merchant.getName()); | result.put("merchantName",merchant.getName()); | ||||
| } | } | ||||
| grantSettlement.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement); | List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement); | ||||
| if (activitySettlementList == null || activitySettlementList.isEmpty()) { | if (activitySettlementList == null || activitySettlementList.isEmpty()) { | ||||
| result.put("recordCount",0); | result.put("recordCount",0); | ||||
| @@ -4,6 +4,7 @@ import com.iformall.common.IdWorker; | |||||
| import com.iformall.domain.po.WxOfflineActivity; | import com.iformall.domain.po.WxOfflineActivity; | ||||
| import com.iformall.domain.po.WxOfflineActivityAwardsItem; | import com.iformall.domain.po.WxOfflineActivityAwardsItem; | ||||
| import com.iformall.domain.po.WxOfflineActivityItem; | import com.iformall.domain.po.WxOfflineActivityItem; | ||||
| import com.iformall.enums.EnumOfflineActivityAwardsItemType; | |||||
| import com.iformall.enums.EnumOfflineActivityAwardsRule; | import com.iformall.enums.EnumOfflineActivityAwardsRule; | ||||
| import com.iformall.enums.EnumOfflineActivityType; | import com.iformall.enums.EnumOfflineActivityType; | ||||
| import com.iformall.service.WxOfflineActivityAwardsItemService; | import com.iformall.service.WxOfflineActivityAwardsItemService; | ||||
| @@ -15,6 +16,8 @@ import org.springframework.stereotype.Service; | |||||
| import java.math.BigDecimal; | import java.math.BigDecimal; | ||||
| import java.util.Collections; | import java.util.Collections; | ||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Map; | |||||
| import java.util.stream.Collectors; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| @@ -68,7 +71,7 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe | |||||
| wxOfflineActivityItemMapper.insert(activityItem); | 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); | List<WxOfflineActivityItem> itemList = wxOfflineActivityItemMapper.findList(activityItemQuery); | ||||
| for (WxOfflineActivityItem item : itemList) { | for (WxOfflineActivityItem item : itemList) { | ||||
| List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); | 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; | return itemList; | ||||
| } | } | ||||
| @@ -25,11 +25,11 @@ public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivit | |||||
| @Override | @Override | ||||
| public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | ||||
| List<WxOfflineActivityRecordGrant> recordGrantList = new ArrayList<>(); | List<WxOfflineActivityRecordGrant> recordGrantList = new ArrayList<>(); | ||||
| wxOfflineActivityGrantAward.getRecordIds().forEach(recordId ->{ | |||||
| wxOfflineActivityGrantAward.getRecordList().forEach(record ->{ | |||||
| WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant(); | WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant(); | ||||
| recordGrant.updateTenantInfo(wxOfflineActivityGrantAward); | recordGrant.updateTenantInfo(wxOfflineActivityGrantAward); | ||||
| recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | ||||
| recordGrant.setRecordId(recordId); | |||||
| recordGrant.setRecordId(record.getId()); | |||||
| recordGrant.setGrantId(wxOfflineActivityGrantAward.getId()); | recordGrant.setGrantId(wxOfflineActivityGrantAward.getId()); | ||||
| recordGrantList.add(recordGrant); | recordGrantList.add(recordGrant); | ||||
| @@ -100,6 +100,7 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||||
| } | } | ||||
| } | } | ||||
| if(awardQ != null){ | if(awardQ != null){ | ||||
| awardQ.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| List<Long> rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ); | List<Long> rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ); | ||||
| if (null == rids || rids.size() <= 0 ) { | if (null == rids || rids.size() <= 0 ) { | ||||
| record.setId(-1L); | record.setId(-1L); | ||||
| @@ -112,6 +112,7 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ | |||||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | ||||
| grantItemQ.updateTenantInfo(activity); | grantItemQ.updateTenantInfo(activity); | ||||
| grantItemQ.setActivityId(activity.getId()); | grantItemQ.setActivityId(activity.getId()); | ||||
| grantItemQ.setStatus(EnumYesOrNo.YES.getCode()); | |||||
| activity.setGrantItemCount(wxOfflineActivityGrantItemMapper.getSumAwardCount(grantItemQ)); | activity.setGrantItemCount(wxOfflineActivityGrantItemMapper.getSumAwardCount(grantItemQ)); | ||||
| } | } | ||||
| @@ -9,8 +9,10 @@ | |||||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | ||||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | ||||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | <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="name" column="name" jdbcType="VARCHAR"/> | ||||
| <result property="grade" column="grade" jdbcType="INTEGER"/> | <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="minAmount" column="min_amount" jdbcType="DECIMAL"/> | ||||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | ||||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | ||||
| @@ -24,7 +26,7 @@ | |||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| id,tenant_id,parent_tenant_id, | 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, | min_amount,max_amount,cash_back_ratio,price, | ||||
| money_rule,mall_share_rate,merchant_share_rate, | money_rule,mall_share_rate,merchant_share_rate, | ||||
| create_date,update_date | create_date,update_date | ||||
| @@ -48,6 +50,10 @@ | |||||
| and `activity_item_id` = #{activityItemId} | and `activity_item_id` = #{activityItemId} | ||||
| </if> | </if> | ||||
| <if test=" null != type "> | |||||
| and `type` = #{type} | |||||
| </if> | |||||
| <if test=" null != name "> | <if test=" null != name "> | ||||
| and `name` like concat('%', #{name},'%') | and `name` like concat('%', #{name},'%') | ||||
| </if> | </if> | ||||
| @@ -22,6 +22,7 @@ | |||||
| <result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/> | <result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/> | ||||
| <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | ||||
| <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/> | <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/> | ||||
| <result property="status" column="status" jdbcType="INTEGER"/> | |||||
| </resultMap> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| @@ -58,6 +59,9 @@ | |||||
| <if test=" null != cusPhone and cusPhone != '' "> | <if test=" null != cusPhone and cusPhone != '' "> | ||||
| and `cus_phone` = #{cusPhone} | and `cus_phone` = #{cusPhone} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != ids "> | <if test=" null != ids "> | ||||
| and id in | and id in | ||||
| @@ -91,6 +95,9 @@ | |||||
| <if test=" null != createDateEnd"> | <if test=" null != createDateEnd"> | ||||
| and `create_date` <= #{createDateEnd} | and `create_date` <= #{createDateEnd} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| </select> | </select> | ||||
| @@ -113,6 +120,9 @@ | |||||
| <if test=" null != createDateEnd"> | <if test=" null != createDateEnd"> | ||||
| and ga.`create_date` <= #{createDateEnd} | and ga.`create_date` <= #{createDateEnd} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != createByIds "> | <if test=" null != createByIds "> | ||||
| and ga.create_by in | and ga.create_by in | ||||
| <foreach collection="createByIds" index="index" item="sendItem" open="(" separator="," close=")"> | <foreach collection="createByIds" index="index" item="sendItem" open="(" separator="," close=")"> | ||||
| @@ -124,4 +134,15 @@ | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | <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 <include refid="allColumns" /> from wx_offline_activity_grant_award where id = #{id} and tenant_id=#{tenantId} | ||||
| </select> | </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> | </mapper> | ||||
| @@ -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> | |||||
| @@ -28,6 +28,8 @@ | |||||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | ||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="updateDate" column="update_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> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| @@ -38,7 +40,7 @@ | |||||
| award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | ||||
| award_price,award_count,money_rule, | award_price,award_count,money_rule, | ||||
| mall_share_rate,merchant_share_rate, | mall_share_rate,merchant_share_rate, | ||||
| create_date,update_date | |||||
| create_date,update_date,record_id | |||||
| </sql> | </sql> | ||||
| <sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||
| @@ -69,6 +71,10 @@ | |||||
| and `award_itam_id` = #{awardItamId} | and `award_itam_id` = #{awardItamId} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != ids "> | <if test=" null != ids "> | ||||
| and id in | and id in | ||||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | <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_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | ||||
| award_price,award_count,money_rule, | award_price,award_count,money_rule, | ||||
| mall_share_rate,merchant_share_rate, | mall_share_rate,merchant_share_rate, | ||||
| create_date,update_date) | |||||
| create_date,update_date,record_id) | |||||
| values | values | ||||
| <foreach collection="grantItemList" item="item" index="index" separator=","> | <foreach collection="grantItemList" item="item" index="index" separator=","> | ||||
| (#{item.id,jdbcType=BIGINT}, | (#{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.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.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER}, | ||||
| #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, | #{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> | </foreach> | ||||
| </insert> | </insert> | ||||
| @@ -118,6 +124,17 @@ | |||||
| <if test=" null != activityId "> | <if test=" null != activityId "> | ||||
| and activity_id = #{activityId} | and activity_id = #{activityId} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| </select> | </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> | </mapper> | ||||
| @@ -25,6 +25,7 @@ | |||||
| <result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="DECIMAL"/> | <result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="DECIMAL"/> | ||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="status" column="status" jdbcType="INTEGER"/> | |||||
| </resultMap> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| @@ -80,6 +81,9 @@ | |||||
| <if test=" null != createDateEnd"> | <if test=" null != createDateEnd"> | ||||
| and `create_date` <= #{createDateEnd} | and `create_date` <= #{createDateEnd} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != merchantIdList "> | <if test=" null != merchantIdList "> | ||||
| and merchant_id in | and merchant_id in | ||||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | ||||
| @@ -149,6 +153,10 @@ | |||||
| and `create_date` <= #{createDateEnd} | and `create_date` <= #{createDateEnd} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| </select> | </select> | ||||
| @@ -174,6 +182,9 @@ | |||||
| <if test=" null != merchantId "> | <if test=" null != merchantId "> | ||||
| and `merchant_id` = #{merchantId} | and `merchant_id` = #{merchantId} | ||||
| </if> | </if> | ||||
| <if test=" null != status"> | |||||
| and `status` = #{status} | |||||
| </if> | |||||
| <if test=" null != merchantIdList "> | <if test=" null != merchantIdList "> | ||||
| and merchant_id in | and merchant_id in | ||||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | ||||
| @@ -185,4 +196,11 @@ | |||||
| </select> | </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> | </mapper> | ||||
| @@ -16,6 +16,10 @@ | |||||
| <result property="awardsItemLimit" column="awards_item_limit" jdbcType="INTEGER"/> | <result property="awardsItemLimit" column="awards_item_limit" jdbcType="INTEGER"/> | ||||
| <result property="awardsItemCount" column="awards_item_count" jdbcType="INTEGER"/> | <result property="awardsItemCount" column="awards_item_count" jdbcType="INTEGER"/> | ||||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | <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="createDate" column="create_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | ||||
| </resultMap> | </resultMap> | ||||
| @@ -24,7 +28,7 @@ | |||||
| id,tenant_id,parent_tenant_id, | id,tenant_id,parent_tenant_id, | ||||
| activity_id,`type`,`name`, | activity_id,`type`,`name`, | ||||
| limit_money,awards_item_price,awards_item_limit,awards_item_count, | 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> | ||||
| <sql id="dynamicWhereConditions"> | <sql id="dynamicWhereConditions"> | ||||