| @@ -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); | |||
| @@ -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; | |||
| /** | |||
| * 限制最小金额 | |||
| */ | |||
| @@ -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,16 @@ public class WxOfflineActivityItem extends TenantEntity { | |||
| @TableField(exist = false) | |||
| private List<WxOfflineActivityGrantItem> activityGrantItemList; | |||
| /** | |||
| * 返现金额 | |||
| */ | |||
| @TableField(exist = false) | |||
| private BigDecimal cashBackPrice; | |||
| /** | |||
| * 返现详情 | |||
| */ | |||
| @TableField(exist = false) | |||
| private String cashBackMsg; | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -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 | |||
| @@ -173,6 +173,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,28 +234,36 @@ 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; | |||
| } | |||
| 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))); | |||
| } | |||
| BigDecimal cashBackPrice = BigDecimal.ZERO; | |||
| //单笔订单计算 | |||
| if(EnumOfflineActivityCalculationMode.ONE.getCode().equals(activityItem.getCalculationMode())){ | |||
| }else{ | |||
| } | |||
| activityItem.setCashBackPrice(BigDecimal.ONE); | |||
| // if(wxOfflineActivityGrantAward.getOrderMoneySum().compareTo(activityItem.getLimitMoney()) < 0){ | |||
| // activityItem.setIsMeet(false); | |||
| // continue; | |||
| // } | |||
| // activityItem.setIsMeet(true); | |||
| // activityItem.setRealAwardsItemLimit(1); | |||
| // for (WxOfflineActivityAwardsItem awardsItem : activityItem.getActivityAwardsItemList()) { | |||
| // //计算返现金额 | |||
| // BigDecimal cashBackPrice = wxOfflineActivityGrantAward.getOrderMoneySum() | |||
| // .multiply(awardsItem.getCashBackRatio().divide(new BigDecimal(100))); | |||
| // if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(activityItem.getAwardsItemRule())){ | |||
| // awardsItem.setPrice(cashBackPrice.setScale(2, 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))); | |||
| // } | |||
| // } | |||
| //计算商户商管分别承担金额 | |||
| handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); | |||
| // handlerAwardsSharePrice(activityItem.getActivityAwardsItemList()); | |||
| } | |||
| } | |||
| } | |||
| @@ -304,7 +313,11 @@ 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.setCusPhone(wxOfflineActivityGrantAward.getCusPhone()); | |||
| List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.findList(recordQ); | |||
| if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) { | |||
| throw new MallinkException(Result.ERROR, "未查询到活动订单"); | |||
| } | |||
| @@ -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; | |||
| } | |||
| @@ -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"/> | |||
| @@ -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> | |||