| @@ -94,8 +94,11 @@ public class WxOfflineActivityGrantController extends BaseController { | |||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | |||
| return new ResultData(Result.ERROR,"活动ID为空"); | |||
| } | |||
| if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"请选择订单"); | |||
| // if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||
| // return new ResultData(Result.ERROR,"请选择订单"); | |||
| // } | |||
| if(StringUtil.isBlank(wxOfflineActivityGrantAward.getCusPhone())){ | |||
| throw new MallinkException(Result.ERROR,"用户手机号为空"); | |||
| } | |||
| TenantEntity tenantEntity = getTenantInfo(); | |||
| wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); | |||
| @@ -110,8 +113,11 @@ public class WxOfflineActivityGrantController extends BaseController { | |||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | |||
| return new ResultData(Result.ERROR,"活动ID为空"); | |||
| } | |||
| if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"请选择订单"); | |||
| // if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||
| // return new ResultData(Result.ERROR,"请选择订单"); | |||
| // } | |||
| if(StringUtil.isBlank(wxOfflineActivityGrantAward.getCusPhone())){ | |||
| throw new MallinkException(Result.ERROR,"用户手机号为空"); | |||
| } | |||
| // if(StringUtil.isBlank(wxOfflineActivityGrantAward.getSignImg())){ | |||
| // return new ResultData(Result.ERROR,"签名为空"); | |||
| @@ -138,9 +144,12 @@ public class WxOfflineActivityGrantController extends BaseController { | |||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | |||
| return new ResultData(Result.ERROR,"活动ID为空"); | |||
| } | |||
| if(wxOfflineActivityGrantAward.getRecordId() == null){ | |||
| return new ResultData(Result.ERROR,"订单ID为空"); | |||
| if(StringUtil.isBlank(wxOfflineActivityGrantAward.getCusPhone())){ | |||
| throw new MallinkException(Result.ERROR,"用户手机号为空"); | |||
| } | |||
| // if(wxOfflineActivityGrantAward.getRecordId() == null){ | |||
| // return new ResultData(Result.ERROR,"订单ID为空"); | |||
| // } | |||
| TenantEntity tenantInfo = getTenantInfo(); | |||
| wxOfflineActivityGrantAward.updateTenantInfo(tenantInfo); | |||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardService.grantAwardDetail(wxOfflineActivityGrantAward); | |||
| @@ -8,6 +8,7 @@ import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.BaseEntity.SortField; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.vo.OfflineActivitySettlement; | |||
| import com.iformall.enums.EnumYesOrNo; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.service.WxOfflineActivityGrantAwardService; | |||
| import com.iformall.service.WxOfflineActivityGrantSettlementService; | |||
| @@ -131,6 +132,7 @@ public class WxOfflineActivitySettlementController extends BaseController { | |||
| TenantEntity tenantInfo = getTenantInfo(); | |||
| grantSettlement.updateTenantInfo(tenantInfo); | |||
| grantSettlement.setStatus(EnumYesOrNo.YES.getCode()); | |||
| List<WxOfflineActivityGrantSettlement> recordList = wxOfflineActivityGrantSettlementService.findList(grantSettlement); | |||
| return new ResultData(recordList); | |||
| @@ -147,6 +149,7 @@ public class WxOfflineActivitySettlementController extends BaseController { | |||
| } | |||
| TenantEntity tenantInfo = getTenantInfo(); | |||
| grantSettlement.updateTenantInfo(tenantInfo); | |||
| grantSettlement.setStatus(EnumYesOrNo.YES.getCode()); | |||
| wxOfflineActivityGrantSettlementService.exportData(request,response,grantSettlement); | |||
| } | |||
| @@ -59,6 +59,9 @@ public class WxOfflineActivityRecordController extends BaseController { | |||
| if (null == wxOfflineActivityRecord.getOrderMoney() ) { | |||
| return new ResultData(Result.ERROR,"订单金额不能为空"); | |||
| } | |||
| TenantEntity tenantEntity = getTenantInfo(); | |||
| wxOfflineActivityRecord.updateTenantInfo(tenantEntity); | |||
| if(wxOfflineActivityRecord.getId() != null){ | |||
| WxOfflineActivityRecord record = wxOfflineActivityRecordService.getById(wxOfflineActivityRecord.getId(),wxOfflineActivityRecord.getTenantId()); | |||
| if(!EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(record.getAuditStatus())){ | |||
| @@ -66,8 +69,6 @@ public class WxOfflineActivityRecordController extends BaseController { | |||
| } | |||
| wxOfflineActivityRecord.setAuditRemark(""); | |||
| } | |||
| TenantEntity tenantEntity = getTenantInfo(); | |||
| wxOfflineActivityRecord.updateTenantInfo(tenantEntity); | |||
| wxOfflineActivityRecord.setCreateBy(getMerchantBUserId()); | |||
| wxOfflineActivityRecord.setMerchantId(getLoginBUser().getMerchantId()); | |||
| wxOfflineActivityRecord.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); | |||
| @@ -32,6 +32,12 @@ public class WxOfflineActivityAwardsItem extends TenantEntity { | |||
| @TableField(value = "activity_item_id") | |||
| private Long activityItemId; | |||
| /** | |||
| * 奖项类型 | |||
| */ | |||
| @TableField(value = "type") | |||
| private Integer type; | |||
| /** | |||
| * 奖项名称 | |||
| */ | |||
| @@ -44,6 +50,12 @@ public class WxOfflineActivityAwardsItem extends TenantEntity { | |||
| @TableField(value = "grade") | |||
| private Integer grade; | |||
| /** | |||
| * 联单笔数 | |||
| */ | |||
| @TableField(value = "merchant_count") | |||
| private Integer merchantCount; | |||
| /** | |||
| * 限制最小金额 | |||
| */ | |||
| @@ -161,4 +161,10 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ | |||
| @TableField(exist = false) | |||
| 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") | |||
| 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") | |||
| private Date updateDate; | |||
| /** | |||
| * 是否有效 | |||
| */ | |||
| @TableField(value = "status") | |||
| private Integer status; | |||
| } | |||
| @@ -71,11 +71,35 @@ public class WxOfflineActivityItem extends TenantEntity { | |||
| private Integer awardsItemCount; | |||
| /** | |||
| * 奖项计算规则(0代表无规则) | |||
| * 返现奖项计算规则(0代表无规则) | |||
| */ | |||
| @TableField(value = "awards_item_rule") | |||
| private Integer awardsItemRule; | |||
| /** | |||
| * 返现计算模式 | |||
| */ | |||
| @TableField(value = "calculation_mode") | |||
| private Integer calculationMode; | |||
| /** | |||
| * 返现封顶金额 | |||
| */ | |||
| @TableField(value = "max_amount") | |||
| private BigDecimal maxAmount; | |||
| /** | |||
| * 返现起征税点金额 | |||
| */ | |||
| @TableField(value = "starting_tax_point") | |||
| private BigDecimal startingTaxPoint; | |||
| /** | |||
| * 返现税点比例 | |||
| */ | |||
| @TableField(value = "tax_points") | |||
| private BigDecimal taxPoints; | |||
| /** | |||
| * 创建时间 | |||
| */ | |||
| @@ -93,6 +117,8 @@ public class WxOfflineActivityItem extends TenantEntity { | |||
| */ | |||
| @TableField(exist = false) | |||
| private List<WxOfflineActivityAwardsItem> activityAwardsItemList; | |||
| @TableField(exist = false) | |||
| private List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList; | |||
| /** | |||
| * 是否满足活动条件 | |||
| */ | |||
| @@ -110,4 +136,22 @@ public class WxOfflineActivityItem extends TenantEntity { | |||
| @TableField(exist = false) | |||
| private List<WxOfflineActivityGrantItem> activityGrantItemList; | |||
| /** | |||
| * 返现汇总 | |||
| */ | |||
| @TableField(exist = false) | |||
| private WxOfflineActivityGrantCashBack activityGrantCashBack; | |||
| /** | |||
| * 返现金额 | |||
| */ | |||
| @TableField(exist = false) | |||
| private BigDecimal cashBackPrice; | |||
| /** | |||
| * 返现详情 | |||
| */ | |||
| @TableField(exist = false) | |||
| private String cashBackMsg; | |||
| } | |||
| @@ -103,10 +103,20 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| } | |||
| return lotteryNumList; | |||
| } | |||
| @Excel(name = "抽奖券编码", width = 20, orderNum = "9") | |||
| @TableField(exist = false) | |||
| private String lotteryNumStr; | |||
| public String getLotteryNumStr() { | |||
| if(this.getLotteryNumList() != null && !lotteryNumList.isEmpty()){ | |||
| lotteryNumStr = String.join(",", lotteryNumList); | |||
| } | |||
| return lotteryNumStr; | |||
| } | |||
| /** | |||
| * 抽奖券数量 | |||
| */ | |||
| @Excel(name = "抽奖券数量", width = 20, orderNum = "10") | |||
| @TableField(value = "lottery_count") | |||
| private Integer lotteryCount; | |||
| @@ -164,14 +174,14 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| /** | |||
| * 审批意见 | |||
| */ | |||
| @Excel(name = "审核意见", width = 20, orderNum = "10") | |||
| @Excel(name = "审核意见", width = 20, orderNum = "12") | |||
| @TableField(value = "audit_remark") | |||
| private String auditRemark; | |||
| /** | |||
| * 审批状态 | |||
| */ | |||
| @Excel(name = "审核状态", width = 20, orderNum = "9", replace = {"审核中_0", "已审批_1", "已驳回_2", "已退单_3", "已发奖_10"}) | |||
| @Excel(name = "审核状态", width = 20, orderNum = "13", replace = {"审核中_0", "已审批_1", "已驳回_2", "已退单_3", "已发奖_10"}) | |||
| @TableField(value = "audit_status") | |||
| private Integer auditStatus; | |||
| @@ -187,7 +197,7 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||
| @TableField(value = "audit_by") | |||
| private Long auditBy; | |||
| @Excel(name = "审核人", width = 20, orderNum = "12") | |||
| @Excel(name = "审核人", width = 20, orderNum = "14") | |||
| @TableField(exist = false) | |||
| private String auditByName; | |||
| @@ -28,4 +28,6 @@ public class OfflineActivitySettlement extends TenantEntity { | |||
| private BigDecimal sumMallPrice; | |||
| @SortColumn(column = "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); | |||
| 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; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| @@ -20,6 +21,8 @@ public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOffline | |||
| Integer getSumAwardCount(WxOfflineActivityGrantItem grantItemQ); | |||
| List<WxOfflineActivityGrantItem> findList(WxOfflineActivityGrantItem grantItemQ); | |||
| void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import com.iformall.domain.vo.OfflineActivitySettlement; | |||
| @@ -24,6 +25,8 @@ public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxO | |||
| List<OfflineActivitySettlement> getActivitySettlement(OfflineActivitySettlement settlement); | |||
| List<WxOfflineActivityGrantSettlement> findList(WxOfflineActivityGrantSettlement settlement); | |||
| void updateStatusNo(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||
| } | |||
| @@ -13,7 +13,7 @@ import java.util.List; | |||
| */ | |||
| public interface WxOfflineActivityAwardsItemService { | |||
| void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList); | |||
| void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList, List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList); | |||
| List<WxOfflineActivityAwardsItem> getActivityAwardsItemList(Long activityItemId, String tenantId); | |||
| } | |||
| @@ -3,6 +3,7 @@ package com.iformall.service.impl; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.WxOfflineActivityAwardsItem; | |||
| import com.iformall.domain.po.WxOfflineActivityItem; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsItemType; | |||
| import com.iformall.enums.EnumOfflineActivityType; | |||
| import com.iformall.service.WxOfflineActivityAwardsItemService; | |||
| import com.iformall.mapper.WxOfflineActivityAwardsItemMapper; | |||
| @@ -25,19 +26,20 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||
| WxOfflineActivityAwardsItemMapper wxOfflineActivityAwardsItemMapper; | |||
| @Override | |||
| public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList) { | |||
| public void saveOrUpdateFromActivityItem(WxOfflineActivityItem activityItem, List<WxOfflineActivityAwardsItem> activityAwardsItemList, | |||
| List<WxOfflineActivityAwardsItem> activityAwardsItemSecondList) { | |||
| WxOfflineActivityAwardsItem activityAwardsItemDel = new WxOfflineActivityAwardsItem(); | |||
| activityAwardsItemDel.updateTenantInfo(activityItem); | |||
| activityAwardsItemDel.setActivityItemId(activityItem.getId()); | |||
| wxOfflineActivityAwardsItemMapper.delete(activityAwardsItemDel); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| for (WxOfflineActivityAwardsItem awaItem : activityAwardsItemList) { | |||
| if(awaItem.getId() == null){ | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| awaItem.setId(idWorker.nextId()); | |||
| } | |||
| awaItem.updateTenantInfo(activityItem); | |||
| awaItem.setActivityItemId(activityItem.getId()); | |||
| awaItem.setType(EnumOfflineActivityAwardsItemType.FIRST.getCode()); | |||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | |||
| awaItem.setCashBackRatio(BigDecimal.ZERO); | |||
| @@ -50,8 +52,6 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||
| } | |||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | |||
| awaItem.setGrade(-1); | |||
| awaItem.setMinAmount(null); | |||
| awaItem.setMaxAmount(null); | |||
| awaItem.setPrice(BigDecimal.ZERO); | |||
| } | |||
| if(awaItem.getPrice() == null){ | |||
| @@ -63,6 +63,22 @@ public class WxOfflineActivityAwardsItemServiceImpl implements WxOfflineActivity | |||
| awaItem.setUpdateDate(activityItem.getUpdateDate()); | |||
| wxOfflineActivityAwardsItemMapper.insert(awaItem); | |||
| } | |||
| if(activityAwardsItemSecondList != null && !activityAwardsItemSecondList.isEmpty()){ | |||
| for (WxOfflineActivityAwardsItem secondAwaItem : activityAwardsItemSecondList) { | |||
| if(secondAwaItem.getId() == null){ | |||
| secondAwaItem.setId(idWorker.nextId()); | |||
| } | |||
| secondAwaItem.updateTenantInfo(activityItem); | |||
| secondAwaItem.setActivityItemId(activityItem.getId()); | |||
| secondAwaItem.setType(EnumOfflineActivityAwardsItemType.SECOND.getCode()); | |||
| if(secondAwaItem.getCreateDate() == null){ | |||
| secondAwaItem.setCreateDate(activityItem.getUpdateDate()); | |||
| } | |||
| secondAwaItem.setUpdateDate(activityItem.getUpdateDate()); | |||
| wxOfflineActivityAwardsItemMapper.insert(secondAwaItem); | |||
| } | |||
| } | |||
| } | |||
| @Override | |||
| @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; | |||
| import cn.afterturn.easypoi.excel.entity.vo.BaseEntityTypeConstants; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | |||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.Result; | |||
| @@ -52,6 +53,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| @Autowired | |||
| private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | |||
| @Autowired | |||
| private WxOfflineActivityGrantCashBackMapper wxOfflineActivityGrantCashBackMapper; | |||
| @Autowired | |||
| WxOfflineActivityMapper wxOfflineActivityMapper; | |||
| @@ -173,6 +177,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| //奖项处理 | |||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||
| wxOfflineActivityGrantAward.setActivityItemList(activityItemList); | |||
| for(WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()){ | |||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | |||
| @@ -233,32 +238,160 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| activityItem.setActivityGrantItemList(Collections.singletonList(grantItem)); | |||
| } | |||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | |||
| if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | |||
| activityItem.setIsMeet(false); | |||
| continue; | |||
| BigDecimal cashBackPriceTotal = BigDecimal.ZERO; | |||
| List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); | |||
| List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); | |||
| //单笔订单计算 | |||
| if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ | |||
| for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ | |||
| WxOfflineActivityAwardsItem grantAwardsItem = null; | |||
| for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ | |||
| if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) | |||
| && (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){ | |||
| grantAwardsItem = awardsItem; | |||
| } | |||
| } | |||
| if(grantAwardsItem != null){ | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = record.getOrderMoney() | |||
| .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| // WxOfflineActivityGrantItem grantItem = new WxOfflineActivityGrantItem(); | |||
| // grantItem.setActivityItemId(activityItem.getId()); | |||
| // grantItem.setActivityItemName(activityItem.getName()); | |||
| // grantItem.setActivityItemType(activityItem.getType()); | |||
| // grantItem.setAwardItamId(grantAwardsItem.getId()); | |||
| // grantItem.setAwardName(grantAwardsItem.getName()); | |||
| // grantItem.setAwardGrade(grantAwardsItem.getGrade()); | |||
| // grantItem.setAwardMinAmount(grantAwardsItem.getMinAmount()); | |||
| // grantItem.setAwardMaxAmount(grantAwardsItem.getMaxAmount()); | |||
| // grantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); | |||
| // grantItem.setAwardCount(1); | |||
| // | |||
| // //计算返现金额 | |||
| // BigDecimal cashBackPrice = record.getOrderMoney() | |||
| // .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| // if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| // grantItem.setAwardPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP)); | |||
| // } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| // grantItem.setAwardPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP)); | |||
| // }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| // BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10)) | |||
| // .setScale(0, RoundingMode.HALF_UP); | |||
| // grantItem.setAwardPrice(cashBackPriceTen.multiply(new BigDecimal(10))); | |||
| // } | |||
| // grantItem.setMoneyRule(grantAwardsItem.getMoneyRule()); | |||
| // grantItem.setMallShareRate(grantAwardsItem.getMallShareRate()); | |||
| // grantItem.setMallSharePrice(grantAwardsItem.getMallSharePrice()); | |||
| //// grantItem.setMerchantShareRate(grantAwardsItem.getMerchantShareRate()); | |||
| //// grantItem.setMerchantSharePrice(grantAwardsItem.getMerchantSharePrice()); | |||
| // grantItemList.add(grantItem); | |||
| } | |||
| }else{ | |||
| WxOfflineActivityAwardsItem grantAwardsItem = null; | |||
| for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ | |||
| if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) | |||
| && (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ | |||
| grantAwardsItem = awardsItem; | |||
| } | |||
| } | |||
| if(grantAwardsItem != null){ | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ | |||
| List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); | |||
| Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); | |||
| WxOfflineActivityAwardsItem grantAwardsSecondItem = collect.get(merchantIds.size()); | |||
| if(grantAwardsSecondItem != null){ | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(grantAwardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ | |||
| cashBackPriceTotal = activityItem.getMaxAmount(); | |||
| } | |||
| if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| cashBackPriceTotal = cashBackPriceTotal.setScale(2, RoundingMode.HALF_UP); | |||
| } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { | |||
| cashBackPriceTotal = cashBackPriceTotal.setScale(0, RoundingMode.HALF_UP); | |||
| }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10)) | |||
| .setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); | |||
| } | |||
| WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); | |||
| activityGrantCashBack.setActivityId(activity.getId()); | |||
| activityGrantCashBack.setActivityName(activity.getName()); | |||
| activityGrantCashBack.setActivityItemId(activityItem.getId()); | |||
| activityGrantCashBack.setActivityItemName(activityItem.getName()); | |||
| activityGrantCashBack.setActivityItemType(activityItem.getType()); | |||
| activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); | |||
| activityGrantCashBack.setCalculationMode(activityItem.getCalculationMode()); | |||
| activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); | |||
| activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); | |||
| activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); | |||
| activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); | |||
| activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); | |||
| if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 | |||
| && activityGrantCashBack.getTaxPoints() != null){ | |||
| activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) | |||
| .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); | |||
| } | |||
| activityItem.setIsMeet(true); | |||
| activityItem.setRealAwardsItemLimit(1); | |||
| for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) { | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(awardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| awardsItem.setPrice(cashBackPrice.setScale(2, RoundingMode.HALF_UP)); | |||
| } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { | |||
| awardsItem.setPrice(cashBackPrice.setScale(0, RoundingMode.HALF_UP)); | |||
| }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| BigDecimal cashBackPriceTen = cashBackPrice.divide(new BigDecimal(10)) | |||
| .setScale(0, RoundingMode.HALF_UP); | |||
| awardsItem.setPrice(cashBackPriceTen.multiply(new BigDecimal(10))); | |||
| activityItem.setActivityGrantCashBack(activityGrantCashBack); | |||
| activityItem.setCashBackPrice(activityGrantCashBack.getCashBackPrice().subtract(activityGrantCashBack.getTaxPointsAmount())); | |||
| WxOfflineActivityGrantCashBack lastActivityGrantCashBack = getLastActivityGrantCashBack(wxOfflineActivityGrantAward, activity.getId(), activityItem.getId()); | |||
| if(lastActivityGrantCashBack != null){ | |||
| BigDecimal subtracted = lastActivityGrantCashBack.getCashBackPrice().subtract(lastActivityGrantCashBack.getTaxPointsAmount()); | |||
| String msg = "已返现:"+subtracted+"元 "; | |||
| if(subtracted.compareTo(activityItem.getCashBackPrice()) > 0){ | |||
| msg += "顾客应退:"+subtracted.subtract(activityItem.getCashBackPrice())+"元 "; | |||
| }else{ | |||
| msg += "应补顾客:"+activityItem.getCashBackPrice().subtract(subtracted)+"元 "; | |||
| } | |||
| if(lastActivityGrantCashBack.getTaxPointsAmount().compareTo(activityGrantCashBack.getTaxPointsAmount()) > 0){ | |||
| msg += "税款退还:"+lastActivityGrantCashBack.getTaxPointsAmount().subtract(activityGrantCashBack.getTaxPointsAmount())+"元 "; | |||
| }else{ | |||
| msg += "顾客补税:"+activityGrantCashBack.getTaxPointsAmount().subtract(lastActivityGrantCashBack.getTaxPointsAmount())+"元 "; | |||
| } | |||
| activityItem.setCashBackMsg(msg); | |||
| } | |||
| //计算商户商管分别承担金额 | |||
| handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); | |||
| } | |||
| } | |||
| } | |||
| private WxOfflineActivityGrantCashBack getLastActivityGrantCashBack(WxOfflineActivityGrantAward wxOfflineActivityGrantAward,Long activityId,Long activityItemId){ | |||
| Long grantId = wxOfflineActivityGrantAwardMapper.getLastId(wxOfflineActivityGrantAward); | |||
| if(grantId == null){ | |||
| return null; | |||
| } | |||
| WxOfflineActivityGrantCashBack cashBackQ = new WxOfflineActivityGrantCashBack(); | |||
| cashBackQ.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| cashBackQ.setGrantId(grantId); | |||
| cashBackQ.setActivityId(activityId); | |||
| cashBackQ.setActivityItemId(activityItemId); | |||
| return wxOfflineActivityGrantCashBackMapper.selectOne(new QueryWrapper<>(cashBackQ)); | |||
| } | |||
| private void handlerAwardsSharePrice(List<WxOfflineActivityAwardsItem> awardsItemList){ | |||
| if(awardsItemList == null || awardsItemList.isEmpty()){ | |||
| return; | |||
| @@ -291,6 +424,16 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| wxOfflineActivityGrantAward.setUpdateDate(now); | |||
| wxOfflineActivityGrantAwardMapper.insert(wxOfflineActivityGrantAward); | |||
| //失效 | |||
| WxOfflineActivityGrantAward upd = new WxOfflineActivityGrantAward(); | |||
| upd.setId(wxOfflineActivityGrantAward.getId()); | |||
| upd.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| upd.setStatus(EnumYesOrNo.NO.getCode()); | |||
| upd.setActivityId(activity.getId()); | |||
| upd.setCusPhone(wxOfflineActivityGrantAward.getCusPhone()); | |||
| upd.setUpdateDate(now); | |||
| wxOfflineActivityGrantAwardMapper.updateStatusNo(upd); | |||
| wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward); | |||
| //处理奖项 | |||
| @@ -304,7 +447,13 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward,boolean isForPage){ | |||
| List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); | |||
| // List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); | |||
| WxOfflineActivityRecord recordQ = new WxOfflineActivityRecord(); | |||
| recordQ.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| recordQ.setActivityId(activity.getId()); | |||
| recordQ.setCusPhone(wxOfflineActivityGrantAward.getCusPhone()); | |||
| recordQ.setAuditStatus(EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode()); | |||
| List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.findList(recordQ); | |||
| if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) { | |||
| throw new MallinkException(Result.ERROR, "未查询到活动订单"); | |||
| } | |||
| @@ -357,45 +506,37 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| if(wxOfflineActivityGrantAward.getActivityItemList() == null){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动项参数"); | |||
| } | |||
| Map<Long, WxOfflineActivityItem> grantActivityItemMap = wxOfflineActivityGrantAward.getActivityItemList().stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); | |||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||
| Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(toMap(WxOfflineActivityItem::getId, Function.identity())); | |||
| int i = 0;//检查活动奖项 | |||
| for (WxOfflineActivityItem grantActivityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||
| if(grantActivityItem.getId() == null){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动项参数"); | |||
| } | |||
| WxOfflineActivityItem activityItem = activityItemMap.get(grantActivityItem.getId()); | |||
| if(activityItem == null){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动项参数"); | |||
| } | |||
| List<WxOfflineActivityGrantItem> activityGrantItemList = grantActivityItem.getActivityGrantItemList(); | |||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||
| continue; | |||
| // throw new MallinkException(Result.ERROR, "请检查活动奖项参数"); | |||
| } | |||
| boolean isRepeat = activityGrantItemList.stream() | |||
| .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) | |||
| .entrySet().stream().anyMatch(e -> e.getValue() > 1); | |||
| if(isRepeat){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); | |||
| } | |||
| Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); | |||
| for (WxOfflineActivityItem activityItem : activityItemList) { | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { | |||
| i++; | |||
| if(grantGrantItem.getAwardCount() == null){ | |||
| grantGrantItem.setAwardCount(1); | |||
| } | |||
| Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); | |||
| //获取奖项 | |||
| WxOfflineActivityItem grantActivityItem = grantActivityItemMap.get(activityItem.getId()); | |||
| List<WxOfflineActivityGrantItem> activityGrantItemList = null; | |||
| if(grantActivityItem != null){ | |||
| activityGrantItemList = grantActivityItem.getActivityGrantItemList(); | |||
| } | |||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | |||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||
| continue; | |||
| } | |||
| if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | |||
| throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); | |||
| } | |||
| boolean isRepeat = activityGrantItemList.stream() | |||
| .collect(groupingBy(WxOfflineActivityGrantItem::getAwardItamId, counting())) | |||
| .entrySet().stream().anyMatch(e -> e.getValue() > 1); | |||
| if(isRepeat){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动奖项存在重复"); | |||
| } | |||
| //奖项限制数量 | |||
| int limitCount = 0; | |||
| if(activityItem.getAwardsItemPrice() != null && activityItem.getAwardsItemPrice().compareTo(BigDecimal.ZERO) > 0){ | |||
| @@ -421,9 +562,14 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||
| } | |||
| activityItem.setActivityGrantItemList(activityGrantItemList); | |||
| } | |||
| else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ | |||
| if(activityGrantItemList == null || activityGrantItemList.isEmpty()){ | |||
| continue; | |||
| } | |||
| if(activityGrantItemList.size() != 1){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||
| } | |||
| @@ -445,27 +591,137 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||
| activityItem.setActivityGrantItemList(activityGrantItemList); | |||
| } | |||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | |||
| if(activityGrantItemList.size() != 1){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||
| BigDecimal cashBackPriceTotal = BigDecimal.ZERO; | |||
| activityGrantItemList = new ArrayList<>(); | |||
| List<WxOfflineActivityAwardsItem> sortAwardsItemList = activityItem.getActivityAwardsItemList().stream().sorted(Comparator.comparing(WxOfflineActivityAwardsItem::getMinAmount)).collect(toList()); | |||
| //单笔订单计算 | |||
| if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ | |||
| for (WxOfflineActivityRecord record : wxOfflineActivityGrantAward.getRecordList()){ | |||
| WxOfflineActivityAwardsItem grantAwardsItem = null; | |||
| for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ | |||
| if((awardsItem.getMinAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMinAmount()) >= 0) | |||
| && (awardsItem.getMaxAmount() == null || record.getOrderMoney().compareTo(awardsItem.getMaxAmount()) <= 0)){ | |||
| grantAwardsItem = awardsItem; | |||
| } | |||
| } | |||
| if(grantAwardsItem != null){ | |||
| WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); | |||
| grantGrantItem.setRecordId(record.getId()); | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = record.getOrderMoney() | |||
| .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| grantAwardsItem.setPrice(cashBackPrice); | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); | |||
| activityGrantItemList.add(grantGrantItem); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| }else{ | |||
| WxOfflineActivityAwardsItem grantAwardsItem = null; | |||
| for(WxOfflineActivityAwardsItem awardsItem : sortAwardsItemList){ | |||
| if((awardsItem.getMinAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMinAmount()) >= 0) | |||
| && (awardsItem.getMaxAmount() == null || wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(awardsItem.getMaxAmount()) <= 0)){ | |||
| grantAwardsItem = awardsItem; | |||
| } | |||
| } | |||
| if(grantAwardsItem != null){ | |||
| WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(grantAwardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| grantAwardsItem.setPrice(cashBackPrice); | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,grantAwardsItem); | |||
| activityGrantItemList.add(grantGrantItem); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); | |||
| if(grantGrantItem.getAwardItamId() == null){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||
| if(activityItem.getActivityAwardsItemSecondList() != null && !activityItem.getActivityAwardsItemSecondList().isEmpty()){ | |||
| List<Long> merchantIds = wxOfflineActivityGrantAward.getRecordList().stream().map(WxOfflineActivityRecord::getMerchantId).distinct().collect(toList()); | |||
| Map<Integer, WxOfflineActivityAwardsItem> collect = activityItem.getActivityAwardsItemSecondList().stream().collect(toMap(WxOfflineActivityAwardsItem::getMerchantCount, Function.identity())); | |||
| WxOfflineActivityAwardsItem awardsSecondItem = collect.get(merchantIds.size()); | |||
| if(awardsSecondItem != null){ | |||
| WxOfflineActivityGrantItem grantGrantItem = new WxOfflineActivityGrantItem(); | |||
| //计算返现金额 | |||
| BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(awardsSecondItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| awardsSecondItem.setPrice(cashBackPrice); | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsSecondItem); | |||
| activityGrantItemList.add(grantGrantItem); | |||
| cashBackPriceTotal = cashBackPriceTotal.add(cashBackPrice); | |||
| } | |||
| } | |||
| WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); | |||
| if(awardsItem == null){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||
| BigDecimal prop = BigDecimal.ONE; | |||
| if(cashBackPriceTotal.compareTo(activityItem.getMaxAmount()) >= 0){ | |||
| prop = activityItem.getMaxAmount().divide(cashBackPriceTotal,4,RoundingMode.HALF_UP); | |||
| cashBackPriceTotal = activityItem.getMaxAmount(); | |||
| } | |||
| if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| cashBackPriceTotal = cashBackPriceTotal.setScale(2, RoundingMode.HALF_UP); | |||
| } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { | |||
| cashBackPriceTotal = cashBackPriceTotal.setScale(0, RoundingMode.HALF_UP); | |||
| }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| cashBackPriceTotal = cashBackPriceTotal.divide(new BigDecimal(10)) | |||
| .setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10)); | |||
| } | |||
| for (WxOfflineActivityGrantItem grantItem:activityGrantItemList){ | |||
| if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).setScale(2, RoundingMode.HALF_UP)); | |||
| } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(activityItem.getAwardsItemRule())) { | |||
| grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).setScale(0, RoundingMode.HALF_UP)); | |||
| }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| grantItem.setAwardPrice(grantItem.getAwardPrice().multiply(prop).divide(new BigDecimal(10)) | |||
| .setScale(0, RoundingMode.HALF_UP).multiply(new BigDecimal(10))); | |||
| } | |||
| } | |||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||
| activityItem.setActivityGrantItemList(activityGrantItemList); | |||
| WxOfflineActivityGrantCashBack activityGrantCashBack = new WxOfflineActivityGrantCashBack(); | |||
| activityGrantCashBack.setActivityId(activity.getId()); | |||
| activityGrantCashBack.setActivityName(activity.getName()); | |||
| activityGrantCashBack.setActivityItemId(activityItem.getId()); | |||
| activityGrantCashBack.setActivityItemName(activityItem.getName()); | |||
| activityGrantCashBack.setActivityItemType(activityItem.getType()); | |||
| activityGrantCashBack.setAwardsItemRule(activityItem.getAwardsItemRule()); | |||
| activityGrantCashBack.setCalculationMode(activityItem.getCalculationMode()); | |||
| activityGrantCashBack.setMaxAmount(activityItem.getMaxAmount()); | |||
| activityGrantCashBack.setStartingTaxPoint(activityItem.getStartingTaxPoint()); | |||
| activityGrantCashBack.setTaxPoints(activityItem.getTaxPoints()); | |||
| activityGrantCashBack.setCashBackPrice(cashBackPriceTotal); | |||
| activityGrantCashBack.setTaxPointsAmount(BigDecimal.ZERO); | |||
| if(activityGrantCashBack.getStartingTaxPoint() != null && activityGrantCashBack.getCashBackPrice().compareTo(activityGrantCashBack.getStartingTaxPoint()) > 0 | |||
| && activityGrantCashBack.getTaxPoints() != null){ | |||
| activityGrantCashBack.setTaxPointsAmount(activityGrantCashBack.getCashBackPrice().multiply(activityGrantCashBack.getTaxPoints()) | |||
| .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); | |||
| } | |||
| activityItem.setActivityGrantCashBack(activityGrantCashBack); | |||
| } | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { | |||
| i++; | |||
| } | |||
| } | |||
| if(i == 0){ | |||
| throw new MallinkException(Result.ERROR, "请检查是否有活动奖项"); | |||
| } | |||
| wxOfflineActivityGrantAward.setActivityItemList(activityItemList); | |||
| } | |||
| private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ | |||
| @@ -482,6 +738,9 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount()); | |||
| grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); | |||
| grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio()); | |||
| if(grantGrantItem.getAwardCount() == null){ | |||
| grantGrantItem.setAwardCount(1); | |||
| } | |||
| grantGrantItem.setAwardPrice(awardsItem.getPrice() | |||
| .multiply(new BigDecimal(grantGrantItem.getAwardCount())) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| @@ -505,6 +764,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| //最近30天数据 | |||
| WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | |||
| grantAwardQ.updateTenantInfo(tenantInfo); | |||
| grantAwardQ.setStatus(EnumYesOrNo.YES.getCode()); | |||
| grantAwardQ.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); | |||
| Integer monthCount = wxOfflineActivityGrantAwardMapper.getCusCount(grantAwardQ); | |||
| //一周前的昨天 | |||
| @@ -550,18 +810,26 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| @Override | |||
| public List<WxOfflineActivityGrantAward> grantAwardDetail(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||
| List<Long> grantIds = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId()); | |||
| if(grantIds == null || grantIds.isEmpty()){ | |||
| return null; | |||
| } | |||
| // List<Long> grantIds = wxOfflineActivityRecordGrantMapper.selectGrantId(wxOfflineActivityGrantAward.getTenantId(),wxOfflineActivityGrantAward.getActivityId(),wxOfflineActivityGrantAward.getRecordId()); | |||
| // if(grantIds == null || grantIds.isEmpty()){ | |||
| // return null; | |||
| // } | |||
| WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | |||
| grantAwardQ.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| grantAwardQ.setIds(grantIds); | |||
| // grantAwardQ.setIds(grantIds); | |||
| grantAwardQ.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | |||
| grantAwardQ.setCusPhone(wxOfflineActivityGrantAward.getCusPhone()); | |||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | |||
| for (WxOfflineActivityGrantAward grantAward : grantAwardList) { | |||
| //获取奖项 | |||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(grantAward.getActivityId(), grantAward.getTenantId()); | |||
| grantAward.setActivityItemList(activityItemList); | |||
| //获取返现汇总 | |||
| WxOfflineActivityGrantCashBack cashBackQ = new WxOfflineActivityGrantCashBack(); | |||
| cashBackQ.updateTenantInfo(grantAward); | |||
| cashBackQ.setGrantId(grantAward.getId()); | |||
| List<WxOfflineActivityGrantCashBack> cashBackList = wxOfflineActivityGrantCashBackMapper.findList(cashBackQ); | |||
| Map<Long, WxOfflineActivityGrantCashBack> cashBackMap = cashBackList.stream().collect(Collectors.toMap(WxOfflineActivityGrantCashBack::getActivityItemId, Function.identity())); | |||
| //获取实际获得奖项 | |||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | |||
| grantItemQ.updateTenantInfo(grantAward); | |||
| @@ -569,6 +837,12 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| List<WxOfflineActivityGrantItem> grantItemList = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | |||
| Map<Long, List<WxOfflineActivityGrantItem>> activityItemGrantMap = grantItemList.stream().collect(groupingBy(WxOfflineActivityGrantItem::getActivityItemId)); | |||
| for (WxOfflineActivityItem activityItem : grantAward.getActivityItemList()) { | |||
| WxOfflineActivityGrantCashBack cashBack = cashBackMap.get(activityItem.getId()); | |||
| if(cashBack != null){ | |||
| activityItem.setActivityGrantCashBack(cashBackMap.get(activityItem.getId())); | |||
| activityItem.setCashBackPrice(cashBack.getCashBackPrice().subtract(cashBack.getTaxPointsAmount())); | |||
| } | |||
| List<WxOfflineActivityGrantItem> grantActivityItemList = activityItemGrantMap.get(activityItem.getId()); | |||
| if (grantActivityItemList == null || grantActivityItemList.isEmpty()) { | |||
| activityItem.setIsMeet(false); | |||
| @@ -601,6 +875,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| WxOfflineActivityGrantAward grantAwardQ = new WxOfflineActivityGrantAward(); | |||
| grantAwardQ.updateTenantInfo(wxOfflineActivity); | |||
| grantAwardQ.setActivityId(wxOfflineActivity.getId()); | |||
| grantAwardQ.setStatus(EnumYesOrNo.YES.getCode()); | |||
| List<WxOfflineActivityGrantAward> grantAwardList = wxOfflineActivityGrantAwardMapper.findList(grantAwardQ); | |||
| if(grantAwardList != null){ | |||
| WxMerchant merchantQ = new WxMerchant(); | |||
| @@ -614,6 +889,7 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | |||
| grantItemQ.updateTenantInfo(wxOfflineActivity); | |||
| grantItemQ.setActivityId(wxOfflineActivity.getId()); | |||
| grantItemQ.setStatus(EnumYesOrNo.YES.getCode()); | |||
| List<WxOfflineActivityGrantItem> grantItem = wxOfflineActivityGrantItemMapper.findList(grantItemQ); | |||
| Map<Long, List<WxOfflineActivityGrantItem>> grantItemMap = grantItem.stream().collect(groupingBy(WxOfflineActivityGrantItem::getGrantId)); | |||
| List<OfflineActivityGrantRecord> grantRecordList = wxOfflineActivityRecordGrantMapper.findGrantRecordList(wxOfflineActivity.getId(),wxOfflineActivity.getTenantId()); | |||
| @@ -3,11 +3,13 @@ package com.iformall.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantCashBack; | |||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | |||
| import com.iformall.domain.po.WxOfflineActivityItem; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsRule; | |||
| import com.iformall.enums.EnumOfflineActivityType; | |||
| import com.iformall.mapper.WxOfflineActivityGrantCashBackMapper; | |||
| import com.iformall.service.WxOfflineActivityGrantItemService; | |||
| import com.iformall.mapper.WxOfflineActivityGrantItemMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| @@ -29,37 +31,54 @@ public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityG | |||
| @Autowired | |||
| private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | |||
| @Autowired | |||
| private WxOfflineActivityGrantCashBackMapper wxOfflineActivityGrantCashBackMapper; | |||
| @Override | |||
| public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||
| List<WxOfflineActivityGrantItem> rantItemList = new ArrayList<>(); | |||
| List<WxOfflineActivityGrantItem> grantItemList = new ArrayList<>(); | |||
| List<WxOfflineActivityGrantCashBack> cashBackList = new ArrayList<>(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| Date now = new Date(); | |||
| for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||
| if(activityItem.getActivityGrantItemList() == null){ | |||
| continue; | |||
| } | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { | |||
| grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); | |||
| grantGrantItem.setId(idWorker.nextId()); | |||
| grantGrantItem.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| grantGrantItem.setCreateDate(now); | |||
| grantGrantItem.setUpdateDate(now); | |||
| if(EnumOfflineActivityType.CASHBACK.getCode().equals(grantGrantItem.getActivityItemType())){ | |||
| BigDecimal awardPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| .multiply(grantGrantItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){ | |||
| grantGrantItem.setAwardPrice(awardPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); | |||
| } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) { | |||
| grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP)); | |||
| }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){ | |||
| BigDecimal awardPriceTen = awardPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP); | |||
| grantGrantItem.setAwardPrice(awardPriceTen.multiply(new BigDecimal(10))); | |||
| } | |||
| if(activityItem.getActivityGrantItemList() != null){ | |||
| for (WxOfflineActivityGrantItem grantGrantItem : activityItem.getActivityGrantItemList()) { | |||
| grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); | |||
| grantGrantItem.setId(idWorker.nextId()); | |||
| grantGrantItem.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| grantGrantItem.setCreateDate(now); | |||
| grantGrantItem.setUpdateDate(now); | |||
| // if(EnumOfflineActivityType.CASHBACK.getCode().equals(grantGrantItem.getActivityItemType())){ | |||
| // BigDecimal awardPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| // .multiply(grantGrantItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| // if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){ | |||
| // grantGrantItem.setAwardPrice(awardPrice.setScale(2, BigDecimal.ROUND_HALF_UP)); | |||
| // } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) { | |||
| // grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP)); | |||
| // }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){ | |||
| // BigDecimal awardPriceTen = awardPrice.divide(new BigDecimal(10)).setScale(0, BigDecimal.ROUND_HALF_UP); | |||
| // grantGrantItem.setAwardPrice(awardPriceTen.multiply(new BigDecimal(10))); | |||
| // } | |||
| // } | |||
| grantItemList.add(grantGrantItem); | |||
| } | |||
| rantItemList.add(grantGrantItem); | |||
| } | |||
| if(activityItem.getActivityGrantCashBack() != null){ | |||
| WxOfflineActivityGrantCashBack activityGrantCashBack = activityItem.getActivityGrantCashBack(); | |||
| activityGrantCashBack.setGrantId(wxOfflineActivityGrantAward.getId()); | |||
| activityGrantCashBack.setId(idWorker.nextId()); | |||
| activityGrantCashBack.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| activityGrantCashBack.setCreateDate(now); | |||
| activityGrantCashBack.setUpdateDate(now); | |||
| cashBackList.add(activityGrantCashBack); | |||
| } | |||
| } | |||
| wxOfflineActivityGrantItemMapper.insertList(rantItemList); | |||
| wxOfflineActivityGrantItemMapper.insertList(grantItemList); | |||
| wxOfflineActivityGrantItemMapper.updateStatusNo(wxOfflineActivityGrantAward); | |||
| if(!cashBackList.isEmpty()) wxOfflineActivityGrantCashBackMapper.insertList(cashBackList); | |||
| } | |||
| @@ -26,6 +26,7 @@ import java.math.BigDecimal; | |||
| import java.math.RoundingMode; | |||
| import java.text.NumberFormat; | |||
| import java.util.*; | |||
| import java.util.function.Function; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| @@ -55,6 +56,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| Date now = new Date(); | |||
| Map<Long, WxOfflineActivityRecord> recordMap = wxOfflineActivityGrantAward.getRecordList().stream().collect(Collectors.toMap(WxOfflineActivityRecord::getId, Function.identity())); | |||
| //获取订单占比(占比最少的订单用减法,尽量减少误差) | |||
| List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparing(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); | |||
| int size = recordDescList.size() - 1; | |||
| @@ -75,11 +77,13 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| } | |||
| for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | |||
| List<WxOfflineActivityGrantSettlement> itemSettlementList = new ArrayList<>(); | |||
| for (WxOfflineActivityRecord record : recordDescList){ | |||
| if(wxOfflineActivityGrantItem.getRecordId() != null){ | |||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | |||
| settlement.setId(idWorker.nextId()); | |||
| settlement.updateTenantInfo(wxOfflineActivityGrantItem); | |||
| WxOfflineActivityRecord record = recordMap.get(wxOfflineActivityGrantItem.getRecordId()); | |||
| settlement.setRecordId(record.getId()); | |||
| settlement.setOrderNo(record.getOrderNo()); | |||
| settlement.setOrderMoney(record.getOrderMoney()); | |||
| @@ -92,34 +96,64 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); | |||
| settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); | |||
| settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate()); | |||
| settlement.setOrderRatio(record.getOrderRatio()); | |||
| settlement.setOrderRatio(new BigDecimal(100)); | |||
| settlement.setCreateDate(now); | |||
| settlement.setUpdateDate(now); | |||
| itemSettlementList.add(settlement); | |||
| } | |||
| //计算订单分担金额,(占比最少的订单用减法,尽量减少误差) | |||
| int itemSize = itemSettlementList.size() - 1; | |||
| BigDecimal lastGrantPrice = wxOfflineActivityGrantItem.getAwardPrice(); | |||
| for (int i = 0; i < itemSize; i++) { | |||
| WxOfflineActivityGrantSettlement settlement = itemSettlementList.get(i); | |||
| BigDecimal realGrantPrice = wxOfflineActivityGrantItem.getAwardPrice() | |||
| .multiply(settlement.getOrderRatio().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP); | |||
| settlement.setRealGrantPrice(realGrantPrice); | |||
| settlement.setRealGrantPrice(settlement.getGrantPrice()); | |||
| settlement.setRealMallSharePrice(settlement.getRealGrantPrice() | |||
| .multiply(settlement.getMallShareRate().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice())); | |||
| lastGrantPrice = lastGrantPrice.subtract(realGrantPrice); | |||
| settlement.setCreateDate(now); | |||
| settlement.setUpdateDate(now); | |||
| itemSettlementList.add(settlement); | |||
| }else{ | |||
| for (WxOfflineActivityRecord record : recordDescList){ | |||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | |||
| settlement.setId(idWorker.nextId()); | |||
| settlement.updateTenantInfo(wxOfflineActivityGrantItem); | |||
| settlement.setRecordId(record.getId()); | |||
| settlement.setOrderNo(record.getOrderNo()); | |||
| settlement.setOrderMoney(record.getOrderMoney()); | |||
| settlement.setMerchantId(record.getMerchantId()); | |||
| settlement.setActivityId(wxOfflineActivityGrantItem.getActivityId()); | |||
| settlement.setActivityItemId(wxOfflineActivityGrantItem.getActivityItemId()); | |||
| settlement.setAwardItamId(wxOfflineActivityGrantItem.getAwardItamId()); | |||
| settlement.setGrantId(wxOfflineActivityGrantItem.getGrantId()); | |||
| settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); | |||
| settlement.setMallShareRate(wxOfflineActivityGrantItem.getMallShareRate()); | |||
| settlement.setMerchantShareRate(wxOfflineActivityGrantItem.getMerchantShareRate()); | |||
| settlement.setOrderRatio(record.getOrderRatio()); | |||
| settlement.setCreateDate(now); | |||
| settlement.setUpdateDate(now); | |||
| itemSettlementList.add(settlement); | |||
| } | |||
| //计算订单分担金额,(占比最少的订单用减法,尽量减少误差) | |||
| int itemSize = itemSettlementList.size() - 1; | |||
| BigDecimal lastGrantPrice = wxOfflineActivityGrantItem.getAwardPrice(); | |||
| for (int i = 0; i < itemSize; i++) { | |||
| WxOfflineActivityGrantSettlement settlement = itemSettlementList.get(i); | |||
| BigDecimal realGrantPrice = wxOfflineActivityGrantItem.getAwardPrice() | |||
| .multiply(settlement.getOrderRatio().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP); | |||
| settlement.setRealGrantPrice(realGrantPrice); | |||
| settlement.setRealMallSharePrice(settlement.getRealGrantPrice() | |||
| .multiply(settlement.getMallShareRate().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| settlement.setRealMerchantSharePrice(settlement.getRealGrantPrice().subtract(settlement.getRealMallSharePrice())); | |||
| lastGrantPrice = lastGrantPrice.subtract(realGrantPrice); | |||
| } | |||
| WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize); | |||
| lastSettlement.setRealGrantPrice(lastGrantPrice); | |||
| lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice() | |||
| .multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice())); | |||
| } | |||
| WxOfflineActivityGrantSettlement lastSettlement = itemSettlementList.get(itemSize); | |||
| lastSettlement.setRealGrantPrice(lastGrantPrice); | |||
| lastSettlement.setRealMallSharePrice(lastSettlement.getRealGrantPrice() | |||
| .multiply(lastSettlement.getMallShareRate().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| lastSettlement.setRealMerchantSharePrice(lastSettlement.getRealGrantPrice().subtract(lastSettlement.getRealMallSharePrice())); | |||
| settlementList.addAll(itemSettlementList); | |||
| @@ -127,6 +161,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| } | |||
| wxOfflineActivityGrantSettlementMapper.insertList(settlementList); | |||
| wxOfflineActivityGrantSettlementMapper.updateStatusNo(wxOfflineActivityGrantAward); | |||
| } | |||
| @Override | |||
| @@ -143,6 +178,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| //最近30天 | |||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | |||
| settlement.updateTenantInfo(tenantInfo); | |||
| settlement.setStatus(EnumYesOrNo.YES.getCode()); | |||
| settlement.setCreateDateBegin(DateUtils.stringToDate(monthStartdate)); | |||
| OfflineActivitySettlementStatistics monthStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); | |||
| //一周前的昨天 | |||
| @@ -236,6 +272,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| //获取结算相关 | |||
| WxOfflineActivityGrantSettlement settlement = new WxOfflineActivityGrantSettlement(); | |||
| settlement.updateTenantInfo(activity); | |||
| settlement.setStatus(EnumYesOrNo.YES.getCode()); | |||
| settlement.setActivityId(activity.getId()); | |||
| OfflineActivitySettlementStatistics settlementStatistics = wxOfflineActivityGrantSettlementMapper.settlementStatistics(settlement); | |||
| activity.setGrantMershantCount(settlementStatistics.getMerchantCount()); | |||
| @@ -260,7 +297,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| record.setMerchantIdList(mids); | |||
| } | |||
| } | |||
| record.setStatus(EnumYesOrNo.YES.getCode()); | |||
| List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(record); | |||
| if (activitySettlementList != null && !activitySettlementList.isEmpty()) { | |||
| @@ -291,6 +328,7 @@ public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineAct | |||
| }else{ | |||
| result.put("merchantName",merchant.getName()); | |||
| } | |||
| grantSettlement.setStatus(EnumYesOrNo.YES.getCode()); | |||
| List<OfflineActivitySettlement> activitySettlementList = wxOfflineActivityGrantSettlementMapper.getActivitySettlement(grantSettlement); | |||
| if (activitySettlementList == null || activitySettlementList.isEmpty()) { | |||
| result.put("recordCount",0); | |||
| @@ -4,6 +4,7 @@ import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.WxOfflineActivity; | |||
| import com.iformall.domain.po.WxOfflineActivityAwardsItem; | |||
| import com.iformall.domain.po.WxOfflineActivityItem; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsItemType; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsRule; | |||
| import com.iformall.enums.EnumOfflineActivityType; | |||
| import com.iformall.service.WxOfflineActivityAwardsItemService; | |||
| @@ -15,6 +16,8 @@ import org.springframework.stereotype.Service; | |||
| import java.math.BigDecimal; | |||
| import java.util.Collections; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -68,7 +71,7 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe | |||
| wxOfflineActivityItemMapper.insert(activityItem); | |||
| //处理奖项 | |||
| wxOfflineActivityAwardsItemService.saveOrUpdateFromActivityItem(activityItem,activityItem.getActivityAwardsItemList()); | |||
| wxOfflineActivityAwardsItemService.saveOrUpdateFromActivityItem(activityItem,activityItem.getActivityAwardsItemList(),activityItem.getActivityAwardsItemSecondList()); | |||
| } | |||
| } | |||
| @@ -80,7 +83,13 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe | |||
| List<WxOfflineActivityItem> itemList = wxOfflineActivityItemMapper.findList(activityItemQuery); | |||
| for (WxOfflineActivityItem item : itemList) { | |||
| List<WxOfflineActivityAwardsItem> activityAwardsItemList = wxOfflineActivityAwardsItemService.getActivityAwardsItemList(item.getId(),tenantId); | |||
| item.setActivityAwardsItemList(activityAwardsItemList); | |||
| if(EnumOfflineActivityType.CASHBACK.getCode().equals(item.getType())){ | |||
| Map<Integer, List<WxOfflineActivityAwardsItem>> collect = activityAwardsItemList.stream().collect(Collectors.groupingBy(WxOfflineActivityAwardsItem::getType)); | |||
| item.setActivityAwardsItemList(collect.get(EnumOfflineActivityAwardsItemType.FIRST.getCode())); | |||
| item.setActivityAwardsItemSecondList(collect.get(EnumOfflineActivityAwardsItemType.SECOND.getCode())); | |||
| }else{ | |||
| item.setActivityAwardsItemList(activityAwardsItemList); | |||
| } | |||
| } | |||
| return itemList; | |||
| } | |||
| @@ -25,11 +25,11 @@ public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivit | |||
| @Override | |||
| public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||
| List<WxOfflineActivityRecordGrant> recordGrantList = new ArrayList<>(); | |||
| wxOfflineActivityGrantAward.getRecordIds().forEach(recordId ->{ | |||
| wxOfflineActivityGrantAward.getRecordList().forEach(record ->{ | |||
| WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant(); | |||
| recordGrant.updateTenantInfo(wxOfflineActivityGrantAward); | |||
| recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | |||
| recordGrant.setRecordId(recordId); | |||
| recordGrant.setRecordId(record.getId()); | |||
| recordGrant.setGrantId(wxOfflineActivityGrantAward.getId()); | |||
| recordGrantList.add(recordGrant); | |||
| @@ -100,6 +100,7 @@ public class WxOfflineActivityRecordServiceImpl implements WxOfflineActivityReco | |||
| } | |||
| } | |||
| if(awardQ != null){ | |||
| awardQ.setStatus(EnumYesOrNo.YES.getCode()); | |||
| List<Long> rids = wxOfflineActivityGrantAwardMapper.getRecordIdList(awardQ); | |||
| if (null == rids || rids.size() <= 0 ) { | |||
| record.setId(-1L); | |||
| @@ -112,6 +112,7 @@ public class WxOfflineActivityServiceImpl implements WxOfflineActivityService{ | |||
| WxOfflineActivityGrantItem grantItemQ = new WxOfflineActivityGrantItem(); | |||
| grantItemQ.updateTenantInfo(activity); | |||
| grantItemQ.setActivityId(activity.getId()); | |||
| grantItemQ.setStatus(EnumYesOrNo.YES.getCode()); | |||
| activity.setGrantItemCount(wxOfflineActivityGrantItemMapper.getSumAwardCount(grantItemQ)); | |||
| } | |||
| @@ -9,8 +9,10 @@ | |||
| <result property="tenantId" column="tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="parentTenantId" column="parent_tenant_id" jdbcType="VARCHAR"/> | |||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | |||
| <result property="type" column="type" jdbcType="INTEGER"/> | |||
| <result property="name" column="name" jdbcType="VARCHAR"/> | |||
| <result property="grade" column="grade" jdbcType="INTEGER"/> | |||
| <result property="merchantCount" column="merchant_count" jdbcType="INTEGER"/> | |||
| <result property="minAmount" column="min_amount" jdbcType="DECIMAL"/> | |||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | |||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | |||
| @@ -24,7 +26,7 @@ | |||
| <sql id="allColumns"> | |||
| id,tenant_id,parent_tenant_id, | |||
| activity_item_id,`name`,grade, | |||
| activity_item_id,`type`,`name`,grade,merchant_count, | |||
| min_amount,max_amount,cash_back_ratio,price, | |||
| money_rule,mall_share_rate,merchant_share_rate, | |||
| create_date,update_date | |||
| @@ -48,6 +50,10 @@ | |||
| and `activity_item_id` = #{activityItemId} | |||
| </if> | |||
| <if test=" null != type "> | |||
| and `type` = #{type} | |||
| </if> | |||
| <if test=" null != name "> | |||
| and `name` like concat('%', #{name},'%') | |||
| </if> | |||
| @@ -22,6 +22,7 @@ | |||
| <result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/> | |||
| <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | |||
| <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/> | |||
| <result property="status" column="status" jdbcType="INTEGER"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| @@ -58,6 +59,9 @@ | |||
| <if test=" null != cusPhone and cusPhone != '' "> | |||
| and `cus_phone` = #{cusPhone} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and id in | |||
| @@ -91,6 +95,9 @@ | |||
| <if test=" null != createDateEnd"> | |||
| and `create_date` <= #{createDateEnd} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| </select> | |||
| @@ -113,6 +120,9 @@ | |||
| <if test=" null != createDateEnd"> | |||
| and ga.`create_date` <= #{createDateEnd} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| <if test=" null != createByIds "> | |||
| and ga.create_by in | |||
| <foreach collection="createByIds" index="index" item="sendItem" open="(" separator="," close=")"> | |||
| @@ -124,4 +134,15 @@ | |||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | |||
| select <include refid="allColumns" /> from wx_offline_activity_grant_award where id = #{id} and tenant_id=#{tenantId} | |||
| </select> | |||
| <select id="getLastId" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" resultType="Long"> | |||
| select id from wx_offline_activity_grant_award | |||
| where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} | |||
| order by create_date desc limit 1 | |||
| </select> | |||
| <update id="updateStatusNo" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" > | |||
| update wx_offline_activity_grant_award set status = #{status},update_date = #{updateDate} | |||
| where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id} | |||
| </update> | |||
| </mapper> | |||
| @@ -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="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||
| <result property="recordId" column="record_id" jdbcType="BIGINT"/> | |||
| <result property="status" column="status" jdbcType="INTEGER"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| @@ -38,7 +40,7 @@ | |||
| award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | |||
| award_price,award_count,money_rule, | |||
| mall_share_rate,merchant_share_rate, | |||
| create_date,update_date | |||
| create_date,update_date,record_id | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||
| @@ -69,6 +71,10 @@ | |||
| and `award_itam_id` = #{awardItamId} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| and id in | |||
| <foreach collection="ids" index="index" item="idItem" open="(" separator="," close=")"> | |||
| @@ -92,7 +98,7 @@ | |||
| award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | |||
| award_price,award_count,money_rule, | |||
| mall_share_rate,merchant_share_rate, | |||
| create_date,update_date) | |||
| create_date,update_date,record_id) | |||
| values | |||
| <foreach collection="grantItemList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT}, | |||
| @@ -102,7 +108,7 @@ | |||
| #{item.awardMinAmount,jdbcType=DECIMAL},#{item.awardMaxAmount,jdbcType=DECIMAL},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL}, | |||
| #{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER}, | |||
| #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, | |||
| #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) | |||
| #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP},#{item.recordId,jdbcType=BIGINT}) | |||
| </foreach> | |||
| </insert> | |||
| @@ -118,6 +124,17 @@ | |||
| <if test=" null != activityId "> | |||
| and activity_id = #{activityId} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| </select> | |||
| <update id="updateStatusNo" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" > | |||
| update wx_offline_activity_grant_item set status = 0,update_date = now() | |||
| where grant_id in ( | |||
| select id from wx_offline_activity_grant_award | |||
| where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id}) | |||
| </update> | |||
| </mapper> | |||
| @@ -25,6 +25,7 @@ | |||
| <result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="DECIMAL"/> | |||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||
| <result property="status" column="status" jdbcType="INTEGER"/> | |||
| </resultMap> | |||
| <sql id="allColumns"> | |||
| @@ -80,6 +81,9 @@ | |||
| <if test=" null != createDateEnd"> | |||
| and `create_date` <= #{createDateEnd} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| <if test=" null != merchantIdList "> | |||
| and merchant_id in | |||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||
| @@ -149,6 +153,10 @@ | |||
| and `create_date` <= #{createDateEnd} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| </select> | |||
| @@ -174,6 +182,9 @@ | |||
| <if test=" null != merchantId "> | |||
| and `merchant_id` = #{merchantId} | |||
| </if> | |||
| <if test=" null != status"> | |||
| and `status` = #{status} | |||
| </if> | |||
| <if test=" null != merchantIdList "> | |||
| and merchant_id in | |||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||
| @@ -185,4 +196,11 @@ | |||
| </select> | |||
| <update id="updateStatusNo" parameterType="com.iformall.domain.po.WxOfflineActivityGrantAward" > | |||
| update wx_offline_activity_grant_settlement set status = 0,update_date = now() | |||
| where grant_id in ( | |||
| select id from wx_offline_activity_grant_award | |||
| where `activity_id` = #{activityId} and `cus_phone` = #{cusPhone} and `id` != #{id}) | |||
| </update> | |||
| </mapper> | |||
| @@ -16,6 +16,10 @@ | |||
| <result property="awardsItemLimit" column="awards_item_limit" jdbcType="INTEGER"/> | |||
| <result property="awardsItemCount" column="awards_item_count" jdbcType="INTEGER"/> | |||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="SMALLINT"/> | |||
| <result property="calculationMode" column="calculation_mode" jdbcType="SMALLINT"/> | |||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | |||
| <result property="startingTaxPoint" column="starting_tax_point" jdbcType="DECIMAL"/> | |||
| <result property="taxPoints" column="tax_points" jdbcType="DECIMAL"/> | |||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | |||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | |||
| </resultMap> | |||
| @@ -24,7 +28,7 @@ | |||
| id,tenant_id,parent_tenant_id, | |||
| activity_id,`type`,`name`, | |||
| limit_money,awards_item_price,awards_item_limit,awards_item_count, | |||
| awards_item_rule,create_date,update_date | |||
| awards_item_rule,calculation_mode,max_amount,starting_tax_point,tax_points,create_date,update_date | |||
| </sql> | |||
| <sql id="dynamicWhereConditions"> | |||