| @@ -4,9 +4,11 @@ import com.github.pagehelper.PageInfo; | |||||
| import com.iformall.common.Result; | import com.iformall.common.Result; | ||||
| import com.iformall.common.ResultData; | import com.iformall.common.ResultData; | ||||
| import com.iformall.controller.base.BaseController; | import com.iformall.controller.base.BaseController; | ||||
| import com.iformall.domain.po.WxOfflineActivityRecord; | |||||
| import com.iformall.domain.po.*; | |||||
| import com.iformall.domain.po.base.BaseEntity.SortField; | import com.iformall.domain.po.base.BaseEntity.SortField; | ||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.enums.EnumOfflineActivityAwardsMoneyRule; | |||||
| import com.iformall.enums.EnumOfflineActivityMerchantType; | |||||
| import com.iformall.enums.EnumOfflineActivityRecordStatus; | import com.iformall.enums.EnumOfflineActivityRecordStatus; | ||||
| import com.iformall.service.WxOfflineActivityGrantAwardService; | import com.iformall.service.WxOfflineActivityGrantAwardService; | ||||
| import com.iformall.service.WxOfflineActivityRecordService; | import com.iformall.service.WxOfflineActivityRecordService; | ||||
| @@ -20,6 +22,7 @@ import org.slf4j.LoggerFactory; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
| import java.math.BigDecimal; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.Map; | import java.util.Map; | ||||
| @@ -71,5 +74,24 @@ public class WxOfflineActivityGrantController extends BaseController { | |||||
| return new ResultData(recordList); | return new ResultData(recordList); | ||||
| } | } | ||||
| @ApiOperation("活动发放") | |||||
| @PostMapping("grantAward") | |||||
| public ResultData grantAward(@RequestBody WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||||
| if(wxOfflineActivityGrantAward.getActivityId() == null){ | |||||
| return new ResultData(Result.ERROR,"活动ID未空"); | |||||
| } | |||||
| if(wxOfflineActivityGrantAward.getRecordIds() == null || wxOfflineActivityGrantAward.getRecordIds().isEmpty()){ | |||||
| return new ResultData(Result.ERROR,"请选择订单"); | |||||
| } | |||||
| if(StringUtil.isBlank(wxOfflineActivityGrantAward.getSignImg())){ | |||||
| return new ResultData(Result.ERROR,"签名为空"); | |||||
| } | |||||
| TenantEntity tenantEntity = getTenantInfo(); | |||||
| wxOfflineActivityGrantAward.updateTenantInfo(tenantEntity); | |||||
| wxOfflineActivityGrantAward.setCreateBy(getUserId()); | |||||
| wxOfflineActivityGrantAwardService.grantAward(wxOfflineActivityGrantAward); | |||||
| return new ResultData(); | |||||
| } | |||||
| } | } | ||||
| @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.annotation.TableName; | |||||
| import java.io.Serializable; | import java.io.Serializable; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | |||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import lombok.Data; | import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| @@ -33,6 +35,9 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ | |||||
| @TableField(value = "activity_id") | @TableField(value = "activity_id") | ||||
| private Long activityId; | private Long activityId; | ||||
| @TableField(exist = false) | |||||
| private String activityName; | |||||
| /** | /** | ||||
| * 订单总金额 | * 订单总金额 | ||||
| */ | */ | ||||
| @@ -97,7 +102,7 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ | |||||
| * 抽奖券编码 | * 抽奖券编码 | ||||
| */ | */ | ||||
| @TableField(value = "lottery_num") | @TableField(value = "lottery_num") | ||||
| private Object lotteryNum; | |||||
| private String lotteryNum; | |||||
| /** | /** | ||||
| * 抽奖券数量 | * 抽奖券数量 | ||||
| @@ -109,5 +114,13 @@ public class WxOfflineActivityGrantAward extends TenantEntity{ | |||||
| * 周年庆抽奖编码 | * 周年庆抽奖编码 | ||||
| */ | */ | ||||
| @TableField(value = "anniversary_lottery_num") | @TableField(value = "anniversary_lottery_num") | ||||
| private Object anniversaryLotteryNum; | |||||
| private String anniversaryLotteryNum; | |||||
| @TableField(exist = false) | |||||
| private List<Long> recordIds; | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityRecord> recordList; | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityItem> activityItemList; | |||||
| } | } | ||||
| @@ -56,7 +56,7 @@ public class WxOfflineActivityGrantItem extends TenantEntity { | |||||
| * 活动项名称 | * 活动项名称 | ||||
| */ | */ | ||||
| @TableField(value = "activity_item_name") | @TableField(value = "activity_item_name") | ||||
| private Integer activityItemName; | |||||
| private String activityItemName; | |||||
| /** | /** | ||||
| * 活动项类型 | * 活动项类型 | ||||
| @@ -94,6 +94,12 @@ public class WxOfflineActivityGrantItem extends TenantEntity { | |||||
| @TableField(value = "award_max_amount") | @TableField(value = "award_max_amount") | ||||
| private Integer awardMaxAmount; | private Integer awardMaxAmount; | ||||
| /** | |||||
| * 奖项计算规则 | |||||
| */ | |||||
| @TableField(value = "awards_item_rule") | |||||
| private Integer awardsItemRule; | |||||
| /** | /** | ||||
| * 返现比例 | * 返现比例 | ||||
| */ | */ | ||||
| @@ -77,6 +77,13 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { | |||||
| @TableField(value = "grant_id") | @TableField(value = "grant_id") | ||||
| private Long grantId; | private Long grantId; | ||||
| /** | |||||
| * 发放订单总金额 | |||||
| */ | |||||
| @TableField(value = "grant_money") | |||||
| private Integer grantMoney; | |||||
| /** | /** | ||||
| * 发放总价值 | * 发放总价值 | ||||
| */ | */ | ||||
| @@ -111,13 +118,13 @@ public class WxOfflineActivityGrantSettlement extends TenantEntity { | |||||
| * 实际商管承担总金额 | * 实际商管承担总金额 | ||||
| */ | */ | ||||
| @TableField(value = "real_mall_share_price") | @TableField(value = "real_mall_share_price") | ||||
| private BigDecimal realMallSharePrice; | |||||
| private Integer realMallSharePrice; | |||||
| /** | /** | ||||
| * 实际商户承担总金额 | * 实际商户承担总金额 | ||||
| */ | */ | ||||
| @TableField(value = "real_merchant_share_price") | @TableField(value = "real_merchant_share_price") | ||||
| private BigDecimal realMerchantSharePrice; | |||||
| private Integer realMerchantSharePrice; | |||||
| /** | /** | ||||
| * 创建时间 | * 创建时间 | ||||
| @@ -51,7 +51,7 @@ public class WxOfflineActivityItem extends TenantEntity { | |||||
| private Integer limitMoney; | private Integer limitMoney; | ||||
| /** | /** | ||||
| * 奖项单价 | |||||
| * 奖项价值(用来计算奖券数量) | |||||
| */ | */ | ||||
| @TableField(value = "awards_item_price") | @TableField(value = "awards_item_price") | ||||
| private Integer awardsItemPrice; | private Integer awardsItemPrice; | ||||
| @@ -86,7 +86,16 @@ public class WxOfflineActivityItem extends TenantEntity { | |||||
| @TableField(value = "update_date") | @TableField(value = "update_date") | ||||
| private Date updateDate; | private Date updateDate; | ||||
| /** | |||||
| * 奖项集合 | |||||
| */ | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private List<WxOfflineActivityAwardsItem> activityAwardsItemList; | private List<WxOfflineActivityAwardsItem> activityAwardsItemList; | ||||
| /** | |||||
| * 发放奖项 | |||||
| */ | |||||
| @TableField(exist = false) | |||||
| private List<WxOfflineActivityGrantItem> activityGrantItemList; | |||||
| } | } | ||||
| @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField; | |||||
| import com.baomidou.mybatisplus.annotation.TableId; | import com.baomidou.mybatisplus.annotation.TableId; | ||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import java.io.Serializable; | import java.io.Serializable; | ||||
| import java.math.BigDecimal; | |||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | import java.util.List; | ||||
| @@ -159,6 +160,17 @@ public class WxOfflineActivityRecord extends TenantEntity { | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private Date auditTimeEnd; | private Date auditTimeEnd; | ||||
| @TableField(exist = false) | |||||
| private Long sendByName; | |||||
| @TableField(exist = false) | |||||
| private Date sendTimeBegin; | |||||
| @TableField(exist = false) | |||||
| private Date sendTimeEnd; | |||||
| @TableField(exist = false) | @TableField(exist = false) | ||||
| private Long activityId; | private Long activityId; | ||||
| @TableField(exist = false) | |||||
| private BigDecimal orderRatio; | |||||
| } | } | ||||
| @@ -4,6 +4,8 @@ import com.iformall.common.CommonMapper; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | import com.iformall.domain.po.WxOfflineActivityGrantItem; | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import java.util.List; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Mapper | * @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Mapper | ||||
| @@ -12,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
| */ | */ | ||||
| public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOfflineActivityGrantItem, Long> { | public interface WxOfflineActivityGrantItemMapper extends CommonMapper<WxOfflineActivityGrantItem, Long> { | ||||
| void insertList(List<WxOfflineActivityGrantItem> rantItemList); | |||||
| } | } | ||||
| @@ -4,6 +4,8 @@ import com.iformall.common.CommonMapper; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | ||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import java.util.List; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Mapper | * @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Mapper | ||||
| @@ -12,6 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
| */ | */ | ||||
| public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxOfflineActivityGrantSettlement, Long> { | public interface WxOfflineActivityGrantSettlementMapper extends CommonMapper<WxOfflineActivityGrantSettlement, Long> { | ||||
| void insertList(List<WxOfflineActivityGrantSettlement> settlementList); | |||||
| } | } | ||||
| @@ -5,6 +5,8 @@ import com.iformall.domain.po.WxOfflineActivityRecordGrant; | |||||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | import com.baomidou.mybatisplus.core.mapper.BaseMapper; | ||||
| import org.apache.ibatis.annotations.Param; | import org.apache.ibatis.annotations.Param; | ||||
| import java.util.List; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Mapper | * @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Mapper | ||||
| @@ -15,6 +17,7 @@ public interface WxOfflineActivityRecordGrantMapper extends CommonMapper<WxOffli | |||||
| Integer selectGrantCount(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); | Integer selectGrantCount(@Param("tenantId")String tenantId, @Param("activityId")Long activityId, @Param("recordId")Long recordId); | ||||
| void insertList(List<WxOfflineActivityRecordGrant> recordGrantList); | |||||
| } | } | ||||
| @@ -23,6 +23,8 @@ public interface WxOfflineActivityRecordMapper extends CommonMapper<WxOfflineAct | |||||
| List<OfflineActivityRecordStatistics> auditStatusStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); | List<OfflineActivityRecordStatistics> auditStatusStatistics(WxOfflineActivityRecord wxOfflineActivityRecord); | ||||
| void updateAuditStatus(WxOfflineActivityRecord record); | void updateAuditStatus(WxOfflineActivityRecord record); | ||||
| WxOfflineActivityRecord selectLimitOne(WxOfflineActivityRecord wxOfflineActivityRecord); | |||||
| } | } | ||||
| @@ -17,4 +17,6 @@ public interface WxOfflineActivityGrantAwardService { | |||||
| Map<String, Object> getRecordStatistics(Long activityId, WxOfflineActivityRecord wxOfflineActivityRecord); | Map<String, Object> getRecordStatistics(Long activityId, WxOfflineActivityRecord wxOfflineActivityRecord); | ||||
| List<WxOfflineActivityRecord> getRecordList(Long activityId, WxOfflineActivityRecord wxOfflineActivityRecord); | List<WxOfflineActivityRecord> getRecordList(Long activityId, WxOfflineActivityRecord wxOfflineActivityRecord); | ||||
| void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.service; | package com.iformall.service; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | import com.iformall.domain.po.WxOfflineActivityGrantItem; | ||||
| import com.baomidou.mybatisplus.extension.service.IService; | import com.baomidou.mybatisplus.extension.service.IService; | ||||
| @@ -10,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||||
| */ | */ | ||||
| public interface WxOfflineActivityGrantItemService { | public interface WxOfflineActivityGrantItemService { | ||||
| void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.service; | package com.iformall.service; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | ||||
| import com.baomidou.mybatisplus.extension.service.IService; | import com.baomidou.mybatisplus.extension.service.IService; | ||||
| @@ -10,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||||
| */ | */ | ||||
| public interface WxOfflineActivityGrantSettlementService { | public interface WxOfflineActivityGrantSettlementService { | ||||
| void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -1,5 +1,6 @@ | |||||
| package com.iformall.service; | package com.iformall.service; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityRecordGrant; | import com.iformall.domain.po.WxOfflineActivityRecordGrant; | ||||
| import com.baomidou.mybatisplus.extension.service.IService; | import com.baomidou.mybatisplus.extension.service.IService; | ||||
| @@ -10,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||||
| */ | */ | ||||
| public interface WxOfflineActivityRecordGrantService{ | public interface WxOfflineActivityRecordGrantService{ | ||||
| void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward); | |||||
| } | } | ||||
| @@ -1,24 +1,29 @@ | |||||
| package com.iformall.service.impl; | package com.iformall.service.impl; | ||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import com.iformall.common.IdWorker; | |||||
| import com.iformall.common.Result; | |||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import com.iformall.domain.vo.OfflineActivityRecordStatistics; | import com.iformall.domain.vo.OfflineActivityRecordStatistics; | ||||
| import com.iformall.enums.EnumOfflineActivityAwardsRule; | |||||
| import com.iformall.enums.EnumOfflineActivityRecordStatus; | import com.iformall.enums.EnumOfflineActivityRecordStatus; | ||||
| import com.iformall.enums.EnumOfflineActivityStatus; | |||||
| import com.iformall.enums.EnumOfflineActivityType; | |||||
| import com.iformall.exception.MallinkException; | |||||
| import com.iformall.mapper.WxOfflineActivityMapper; | import com.iformall.mapper.WxOfflineActivityMapper; | ||||
| import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; | import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; | ||||
| import com.iformall.mapper.WxOfflineActivityRecordMapper; | import com.iformall.mapper.WxOfflineActivityRecordMapper; | ||||
| import com.iformall.service.MallUserInfoService; | |||||
| import com.iformall.service.WxMerchantService; | |||||
| import com.iformall.service.WxOfflineActivityGrantAwardService; | |||||
| import com.iformall.service.*; | |||||
| import com.iformall.mapper.WxOfflineActivityGrantAwardMapper; | import com.iformall.mapper.WxOfflineActivityGrantAwardMapper; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | |||||
| import java.util.Collections; | |||||
| import java.util.HashMap; | |||||
| import java.util.List; | |||||
| import java.util.Map; | |||||
| import java.math.BigDecimal; | |||||
| import java.util.*; | |||||
| import java.util.function.Function; | |||||
| import java.util.stream.Collectors; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| @@ -40,6 +45,18 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| @Autowired | @Autowired | ||||
| WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; | WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; | ||||
| @Autowired | |||||
| WxOfflineActivityGrantItemService wxOfflineActivityGrantItemService; | |||||
| @Autowired | |||||
| WxOfflineActivityRecordGrantService wxOfflineActivityRecordGrantService; | |||||
| @Autowired | |||||
| WxOfflineActivityItemService wxOfflineActivityItemService; | |||||
| @Autowired | |||||
| WxOfflineActivityGrantSettlementService wxOfflineActivityGrantSettlementService; | |||||
| @Autowired | @Autowired | ||||
| WxMerchantService wxMerchantService; | WxMerchantService wxMerchantService; | ||||
| @Autowired | @Autowired | ||||
| @@ -53,20 +70,30 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| } | } | ||||
| wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime()); | wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime()); | ||||
| wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime()); | wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime()); | ||||
| List<OfflineActivityRecordStatistics> recordStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord); | |||||
| WxOfflineActivityRecord limitOne = wxOfflineActivityRecordMapper.selectLimitOne(wxOfflineActivityRecord); | |||||
| Map<String, Object> result = new HashMap<>(); | Map<String, Object> result = new HashMap<>(); | ||||
| Integer audting = 0, audi_success = 0, audt_fail = 0,sum_success = 0, sum_fail = 0; | Integer audting = 0, audi_success = 0, audt_fail = 0,sum_success = 0, sum_fail = 0; | ||||
| for(OfflineActivityRecordStatistics statistics : recordStatistics){ | |||||
| if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){ | |||||
| audting = statistics.getCount(); | |||||
| } else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) { | |||||
| audi_success = statistics.getCount(); | |||||
| sum_success = statistics.getSumMoney(); | |||||
| } else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) { | |||||
| audt_fail = statistics.getCount(); | |||||
| if (limitOne == null) { | |||||
| result.put("cus_name","查无此人"); | |||||
| result.put("cus_phone",wxOfflineActivityRecord.getCusPhone()); | |||||
| }else{ | |||||
| result.put("cus_name",limitOne.getCusName()); | |||||
| result.put("cus_phone",limitOne.getCusPhone()); | |||||
| List<OfflineActivityRecordStatistics> recordStatistics = wxOfflineActivityRecordMapper.auditStatusStatistics(wxOfflineActivityRecord); | |||||
| for(OfflineActivityRecordStatistics statistics : recordStatistics){ | |||||
| if(EnumOfflineActivityRecordStatus.AUDTING.getCode().equals(statistics.getAuditStatus())){ | |||||
| audting = statistics.getCount(); | |||||
| } else if (EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(statistics.getAuditStatus())) { | |||||
| audi_success = statistics.getCount(); | |||||
| sum_success = statistics.getSumMoney(); | |||||
| } else if (EnumOfflineActivityRecordStatus.AUDT_FAIL.getCode().equals(statistics.getAuditStatus())) { | |||||
| audt_fail = statistics.getCount(); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| result.put("audting",audting); | result.put("audting",audting); | ||||
| result.put("audi_success",audi_success); | result.put("audi_success",audi_success); | ||||
| result.put("sum_success",sum_success); | result.put("sum_success",sum_success); | ||||
| @@ -84,11 +111,11 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime()); | wxOfflineActivityRecord.setCreateDateBegin(activity.getStartTime()); | ||||
| wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime()); | wxOfflineActivityRecord.setCreateDateEnd(activity.getEndTime()); | ||||
| List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findList(wxOfflineActivityRecord); | List<WxOfflineActivityRecord> recordList = wxOfflineActivityRecordMapper.findList(wxOfflineActivityRecord); | ||||
| handleRecordList(wxOfflineActivityRecord,activity,recordList); | |||||
| handlerRecordList(wxOfflineActivityRecord,activity,recordList); | |||||
| return recordList; | return recordList; | ||||
| } | } | ||||
| private void handleRecordList(TenantEntity tenantEntity, WxOfflineActivity activity, List<WxOfflineActivityRecord> recordList) { | |||||
| private void handlerRecordList(TenantEntity tenantEntity, WxOfflineActivity activity, List<WxOfflineActivityRecord> recordList) { | |||||
| if (recordList == null || recordList.isEmpty()) { | if (recordList == null || recordList.isEmpty()) { | ||||
| return; | return; | ||||
| } | } | ||||
| @@ -112,6 +139,175 @@ public class WxOfflineActivityGrantAwardServiceImpl implements WxOfflineActivity | |||||
| } | } | ||||
| } | } | ||||
| @Override | |||||
| @Transactional(rollbackFor = Exception.class) | |||||
| public void grantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||||
| WxOfflineActivity activity = wxOfflineActivityMapper.selectById(wxOfflineActivityGrantAward.getActivityId(), wxOfflineActivityGrantAward.getTenantId()); | |||||
| if(activity == null){ | |||||
| throw new MallinkException(Result.ERROR, "未查询到活动"); | |||||
| } | |||||
| if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(activity.getStatus())){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动状态"); | |||||
| } | |||||
| handlerGrantData(activity,wxOfflineActivityGrantAward); | |||||
| Date now = new Date(); | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| wxOfflineActivityGrantAward.setId(idWorker.nextId()); | |||||
| wxOfflineActivityGrantAward.setCreateDate(now); | |||||
| wxOfflineActivityGrantAward.setUpdateDate(now); | |||||
| wxOfflineActivityGrantAwardMapper.insert(wxOfflineActivityGrantAward); | |||||
| wxOfflineActivityRecordGrantService.insertFromGrantAward(wxOfflineActivityGrantAward); | |||||
| //处理奖项 | |||||
| handlerGrantItem(activity,wxOfflineActivityGrantAward); | |||||
| wxOfflineActivityGrantItemService.insertFromGrantAward(wxOfflineActivityGrantAward); | |||||
| //结算 | |||||
| wxOfflineActivityGrantSettlementService.settlement(wxOfflineActivityGrantAward); | |||||
| } | |||||
| private void handlerGrantData(WxOfflineActivity activity,WxOfflineActivityGrantAward wxOfflineActivityGrantAward){ | |||||
| List<WxOfflineActivityRecord> wxOfflineActivityRecords = wxOfflineActivityRecordMapper.selectBatchIds(wxOfflineActivityGrantAward.getRecordIds()); | |||||
| if (wxOfflineActivityRecords == null || wxOfflineActivityRecords.isEmpty()) { | |||||
| throw new MallinkException(Result.ERROR, "未查询到活动订单"); | |||||
| } | |||||
| if(wxOfflineActivityRecords.stream().map(WxOfflineActivityRecord::getCusPhone).distinct().count() != 1){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动订单用户是否为同一人"); | |||||
| } | |||||
| for (WxOfflineActivityRecord record : wxOfflineActivityRecords) { | |||||
| if(!EnumOfflineActivityRecordStatus.AUDI_SUCCESS.getCode().equals(record.getAuditStatus())){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动订单审核状态"); | |||||
| } | |||||
| if(record.getCreateDate().before(activity.getStartTime()) || record.getCreateDate().after(activity.getEndTime())){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动时间"); | |||||
| } | |||||
| } | |||||
| wxOfflineActivityGrantAward.setRecordList(wxOfflineActivityRecords); | |||||
| wxOfflineActivityGrantAward.setActivityName(activity.getName()); | |||||
| wxOfflineActivityGrantAward.setCusName(wxOfflineActivityRecords.get(0).getCusName()); | |||||
| wxOfflineActivityGrantAward.setCusPhone(wxOfflineActivityRecords.get(0).getCusPhone()); | |||||
| wxOfflineActivityGrantAward.setOrderCount(wxOfflineActivityRecords.size()); | |||||
| wxOfflineActivityGrantAward.setOrderMoneySum(wxOfflineActivityRecords.stream().mapToInt(WxOfflineActivityRecord::getOrderMoney).sum()); | |||||
| } | |||||
| private void handlerGrantItem(WxOfflineActivity activity, WxOfflineActivityGrantAward wxOfflineActivityGrantAward){ | |||||
| List<WxOfflineActivityItem> activityItemList = wxOfflineActivityItemService.getActivityItemList(activity.getId(), activity.getTenantId()); | |||||
| Map<Long, WxOfflineActivityItem> activityItemMap = activityItemList.stream().collect(Collectors.toMap(WxOfflineActivityItem::getId, Function.identity())); | |||||
| 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; | |||||
| } | |||||
| Map<Long, WxOfflineActivityAwardsItem> awardsItemMap = activityItem.getActivityAwardsItemList().stream().collect(Collectors.toMap(WxOfflineActivityAwardsItem::getId, Function.identity())); | |||||
| for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { | |||||
| if(grantGrantItem.getAwardCount() == null){ | |||||
| grantGrantItem.setAwardCount(1); | |||||
| } | |||||
| } | |||||
| if(EnumOfflineActivityType.LOTTERY_DRAW.getCode().equals(activityItem.getType())){ | |||||
| if(wxOfflineActivityGrantAward.getOrderMoneySum() < activityItem.getLimitMoney()){ | |||||
| throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"金额不满足"); | |||||
| } | |||||
| //奖项限制数量 | |||||
| int limitCount = wxOfflineActivityGrantAward.getOrderMoneySum() / activityItem.getAwardsItemPrice(); | |||||
| if(activityItem.getAwardsItemLimit() < limitCount){ | |||||
| limitCount = activityItem.getAwardsItemLimit(); | |||||
| } | |||||
| if(activityGrantItemList.stream().mapToInt(WxOfflineActivityGrantItem::getAwardCount).sum()>limitCount){ | |||||
| throw new MallinkException(Result.ERROR, "活动项"+activityItem.getName()+"奖券超过限制"); | |||||
| } | |||||
| for (WxOfflineActivityGrantItem grantGrantItem : activityGrantItemList) { | |||||
| if(grantGrantItem.getAwardItamId() == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); | |||||
| if(awardsItem == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||||
| } | |||||
| } | |||||
| else if(EnumOfflineActivityType.GIFT.getCode().equals(activityItem.getType())){ | |||||
| if(activityGrantItemList.size() != 1){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); | |||||
| if(grantGrantItem.getAwardItamId() == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); | |||||
| if(awardsItem == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| if(wxOfflineActivityGrantAward.getOrderMoneySum() > awardsItem.getMaxAmount() | |||||
| || wxOfflineActivityGrantAward.getOrderMoneySum() < awardsItem.getMinAmount()){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数(金额不在范围类)"); | |||||
| } | |||||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||||
| } | |||||
| else if (EnumOfflineActivityType.CASHBACK.getCode().equals(activityItem.getType())) { | |||||
| if(activityGrantItemList.size() != 1){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| WxOfflineActivityGrantItem grantGrantItem = activityGrantItemList.get(0); | |||||
| if(grantGrantItem.getAwardItamId() == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| WxOfflineActivityAwardsItem awardsItem = awardsItemMap.get(grantGrantItem.getAwardItamId()); | |||||
| if(awardsItem == null){ | |||||
| throw new MallinkException(Result.ERROR, "请检查活动"+activityItem.getName()+"奖项参数"); | |||||
| } | |||||
| handlerGrantItem(grantGrantItem,activity,activityItem,awardsItem); | |||||
| } | |||||
| } | |||||
| } | |||||
| private void handlerGrantItem(WxOfflineActivityGrantItem grantGrantItem,WxOfflineActivity activity,WxOfflineActivityItem activityItem,WxOfflineActivityAwardsItem awardsItem){ | |||||
| // grantGrantItem.setGrantId(wxOfflineActivityGrantAward.getId()); | |||||
| grantGrantItem.setActivityId(activity.getId()); | |||||
| grantGrantItem.setActivityName(activity.getName()); | |||||
| grantGrantItem.setActivityItemId(activityItem.getId()); | |||||
| grantGrantItem.setActivityItemName(activityItem.getName()); | |||||
| grantGrantItem.setActivityItemType(activityItem.getType()); | |||||
| grantGrantItem.setAwardItamId(awardsItem.getId()); | |||||
| grantGrantItem.setAwardName(awardsItem.getName()); | |||||
| grantGrantItem.setAwardGrade(awardsItem.getGrade()); | |||||
| grantGrantItem.setAwardMinAmount(awardsItem.getMinAmount()); | |||||
| grantGrantItem.setAwardMaxAmount(awardsItem.getMaxAmount()); | |||||
| grantGrantItem.setAwardsItemRule(activityItem.getAwardsItemRule()); | |||||
| grantGrantItem.setCashBackRatio(awardsItem.getCashBackRatio()); | |||||
| grantGrantItem.setAwardPrice(awardsItem.getPrice()*grantGrantItem.getAwardCount()); | |||||
| grantGrantItem.setMoneyRule(awardsItem.getMoneyRule()); | |||||
| grantGrantItem.setMallShareRate(awardsItem.getMallShareRate()); | |||||
| grantGrantItem.setMerchantShareRate(awardsItem.getMerchantShareRate()); | |||||
| } | |||||
| } | } | ||||
| @@ -1,11 +1,23 @@ | |||||
| package com.iformall.service.impl; | package com.iformall.service.impl; | ||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import com.iformall.common.IdWorker; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityGrantItem; | 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.service.WxOfflineActivityGrantItemService; | import com.iformall.service.WxOfflineActivityGrantItemService; | ||||
| import com.iformall.mapper.WxOfflineActivityGrantItemMapper; | import com.iformall.mapper.WxOfflineActivityGrantItemMapper; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.math.BigDecimal; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Service实现 | * @description 针对表【wx_offline_activity_grant_item(线下活动发放奖励)】的数据库操作Service实现 | ||||
| @@ -14,6 +26,45 @@ import org.springframework.stereotype.Service; | |||||
| @Service | @Service | ||||
| public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityGrantItemService{ | public class WxOfflineActivityGrantItemServiceImpl implements WxOfflineActivityGrantItemService{ | ||||
| @Autowired | |||||
| private WxOfflineActivityGrantItemMapper wxOfflineActivityGrantItemMapper; | |||||
| @Override | |||||
| public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||||
| List<WxOfflineActivityGrantItem> rantItemList = 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 = new BigDecimal(wxOfflineActivityGrantAward.getOrderMoneySum()).multiply(grantGrantItem.getCashBackRatio()); | |||||
| if(EnumOfflineActivityAwardsRule.DEF.getCode().equals(grantGrantItem.getAwardsItemRule())){ | |||||
| grantGrantItem.setAwardPrice(awardPrice.setScale(0, BigDecimal.ROUND_HALF_UP).intValue()); | |||||
| } else if (EnumOfflineActivityAwardsRule.YUAN.getCode().equals(grantGrantItem.getAwardsItemRule())) { | |||||
| int awardPriceYuan = awardPrice.divide(new BigDecimal(100)).setScale(0, BigDecimal.ROUND_HALF_UP).intValue(); | |||||
| grantGrantItem.setAwardPrice(awardPriceYuan*100); | |||||
| }else if (EnumOfflineActivityAwardsRule.TEN.getCode().equals(grantGrantItem.getAwardsItemRule())){ | |||||
| int awardPriceTen = awardPrice.divide(new BigDecimal(1000)).setScale(0, BigDecimal.ROUND_HALF_UP).intValue(); | |||||
| grantGrantItem.setAwardPrice(awardPriceTen*1000); | |||||
| } | |||||
| } | |||||
| grantGrantItem.setMallSharePrice(new BigDecimal(grantGrantItem.getAwardPrice()).multiply(grantGrantItem.getMallShareRate()).setScale(0, BigDecimal.ROUND_HALF_UP).intValue()); | |||||
| grantGrantItem.setMerchantSharePrice(grantGrantItem.getAwardPrice() - grantGrantItem.getMallSharePrice()); | |||||
| rantItemList.add(grantGrantItem); | |||||
| } | |||||
| } | |||||
| wxOfflineActivityGrantItemMapper.insertList(rantItemList); | |||||
| } | |||||
| } | } | ||||
| @@ -1,11 +1,21 @@ | |||||
| package com.iformall.service.impl; | package com.iformall.service.impl; | ||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantSettlement; | |||||
| import com.iformall.common.IdWorker; | |||||
| import com.iformall.domain.po.*; | |||||
| import com.iformall.service.WxOfflineActivityGrantSettlementService; | import com.iformall.service.WxOfflineActivityGrantSettlementService; | ||||
| import com.iformall.mapper.WxOfflineActivityGrantSettlementMapper; | import com.iformall.mapper.WxOfflineActivityGrantSettlementMapper; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.math.BigDecimal; | |||||
| import java.math.RoundingMode; | |||||
| import java.util.ArrayList; | |||||
| import java.util.Comparator; | |||||
| import java.util.Date; | |||||
| import java.util.List; | |||||
| import java.util.stream.Collectors; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service实现 | * @description 针对表【wx_offline_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service实现 | ||||
| @@ -14,6 +24,59 @@ import org.springframework.stereotype.Service; | |||||
| @Service | @Service | ||||
| public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineActivityGrantSettlementService{ | public class WxOfflineActivityGrantSettlementServiceImpl implements WxOfflineActivityGrantSettlementService{ | ||||
| @Autowired | |||||
| private WxOfflineActivityGrantSettlementMapper wxOfflineActivityGrantSettlementMapper; | |||||
| @Override | |||||
| public void settlement(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||||
| List<WxOfflineActivityGrantSettlement> settlementList = new ArrayList<>(); | |||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| Date now = new Date(); | |||||
| //获取订单占比(占比最少的订单用减法,尽量减少误差) | |||||
| List<WxOfflineActivityRecord> recordDescList = wxOfflineActivityGrantAward.getRecordList().stream().sorted(Comparator.comparingInt(WxOfflineActivityRecord::getOrderMoney).reversed()).collect(Collectors.toList()); | |||||
| int size = recordDescList.size() - 1; | |||||
| BigDecimal lastRatio = BigDecimal.ONE; | |||||
| for(int i=0; i<size; i++){ | |||||
| WxOfflineActivityRecord record = recordDescList.get(i); | |||||
| BigDecimal orderRatio = new BigDecimal(record.getOrderMoney()).divide(new BigDecimal(wxOfflineActivityGrantAward.getOrderMoneySum()), 2, RoundingMode.HALF_UP); | |||||
| record.setOrderRatio(orderRatio); | |||||
| lastRatio = lastRatio.subtract(orderRatio); | |||||
| } | |||||
| recordDescList.get(size).setOrderRatio(lastRatio); | |||||
| for (WxOfflineActivityItem activityItem : wxOfflineActivityGrantAward.getActivityItemList()) { | |||||
| if(activityItem.getActivityGrantItemList() == null){ | |||||
| continue; | |||||
| } | |||||
| for (WxOfflineActivityGrantItem wxOfflineActivityGrantItem : activityItem.getActivityGrantItemList()) { | |||||
| 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.setGrantMoney(wxOfflineActivityGrantAward.getOrderMoneySum()); | |||||
| settlement.setGrantPrice(wxOfflineActivityGrantItem.getAwardPrice()); | |||||
| settlement.setMallSharePrice(wxOfflineActivityGrantItem.getMallSharePrice()); | |||||
| settlement.setMerchantSharePrice(wxOfflineActivityGrantItem.getMerchantSharePrice()); | |||||
| //todo | |||||
| settlementList.add(settlement); | |||||
| } | |||||
| } | |||||
| } | |||||
| wxOfflineActivityGrantSettlementMapper.insertList(settlementList); | |||||
| } | |||||
| } | } | ||||
| @@ -36,9 +36,10 @@ public class WxOfflineActivityItemServiceImpl implements WxOfflineActivityItemSe | |||||
| activityItemDel.setActivityId(wxOfflineActivity.getId()); | activityItemDel.setActivityId(wxOfflineActivity.getId()); | ||||
| wxOfflineActivityItemMapper.delete(activityItemDel); | wxOfflineActivityItemMapper.delete(activityItemDel); | ||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| for (WxOfflineActivityItem activityItem : activityItemList) { | for (WxOfflineActivityItem activityItem : activityItemList) { | ||||
| if(activityItem.getId() == null){ | if(activityItem.getId() == null){ | ||||
| final IdWorker idWorker = IdWorker.get(); | |||||
| activityItem.setId(idWorker.nextId()); | activityItem.setId(idWorker.nextId()); | ||||
| } | } | ||||
| @@ -1,11 +1,16 @@ | |||||
| package com.iformall.service.impl; | package com.iformall.service.impl; | ||||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | ||||
| import com.iformall.domain.po.WxOfflineActivityGrantAward; | |||||
| import com.iformall.domain.po.WxOfflineActivityRecordGrant; | import com.iformall.domain.po.WxOfflineActivityRecordGrant; | ||||
| import com.iformall.service.WxOfflineActivityRecordGrantService; | import com.iformall.service.WxOfflineActivityRecordGrantService; | ||||
| import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; | import com.iformall.mapper.WxOfflineActivityRecordGrantMapper; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.util.ArrayList; | |||||
| import java.util.List; | |||||
| /** | /** | ||||
| * @author xiaohu | * @author xiaohu | ||||
| * @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Service实现 | * @description 针对表【wx_offline_activity_record_grant(线下活动参与登记与发放关联表)】的数据库操作Service实现 | ||||
| @@ -14,6 +19,22 @@ import org.springframework.stereotype.Service; | |||||
| @Service | @Service | ||||
| public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivityRecordGrantService{ | public class WxOfflineActivityRecordGrantServiceImpl implements WxOfflineActivityRecordGrantService{ | ||||
| @Autowired | |||||
| private WxOfflineActivityRecordGrantMapper wxOfflineActivityRecordGrantMapper; | |||||
| @Override | |||||
| public void insertFromGrantAward(WxOfflineActivityGrantAward wxOfflineActivityGrantAward) { | |||||
| List<WxOfflineActivityRecordGrant> recordGrantList = new ArrayList<>(); | |||||
| wxOfflineActivityGrantAward.getRecordIds().forEach(recordId ->{ | |||||
| WxOfflineActivityRecordGrant recordGrant = new WxOfflineActivityRecordGrant(); | |||||
| recordGrant.updateTenantInfo(wxOfflineActivityGrantAward); | |||||
| recordGrant.setActivityId(wxOfflineActivityGrantAward.getActivityId()); | |||||
| recordGrant.setRecordId(recordId); | |||||
| recordGrant.setGrantId(wxOfflineActivityGrantAward.getId()); | |||||
| }); | |||||
| wxOfflineActivityRecordGrantMapper.insertList(recordGrantList); | |||||
| } | |||||
| } | } | ||||
| @@ -19,9 +19,9 @@ | |||||
| <result property="createBy" column="create_by" jdbcType="BIGINT"/> | <result property="createBy" column="create_by" jdbcType="BIGINT"/> | ||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="lotteryNum" column="lottery_num" jdbcType="OTHER"/> | |||||
| <result property="lotteryNum" column="lottery_num" jdbcType="VARCHAR"/> | |||||
| <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | <result property="lotteryCount" column="lottery_count" jdbcType="INTEGER"/> | ||||
| <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="OTHER"/> | |||||
| <result property="anniversaryLotteryNum" column="anniversary_lottery_num" jdbcType="VARCHAR"/> | |||||
| </resultMap> | </resultMap> | ||||
| <sql id="allColumns"> | <sql id="allColumns"> | ||||
| @@ -19,6 +19,7 @@ | |||||
| <result property="awardGrade" column="award_grade" jdbcType="INTEGER"/> | <result property="awardGrade" column="award_grade" jdbcType="INTEGER"/> | ||||
| <result property="awardMinAmount" column="award_min_amount" jdbcType="INTEGER"/> | <result property="awardMinAmount" column="award_min_amount" jdbcType="INTEGER"/> | ||||
| <result property="awardMaxAmount" column="award_max_amount" jdbcType="INTEGER"/> | <result property="awardMaxAmount" column="award_max_amount" jdbcType="INTEGER"/> | ||||
| <result property="awardsItemRule" column="awards_item_rule" jdbcType="INTEGER"/> | |||||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | ||||
| <result property="awardPrice" column="award_price" jdbcType="INTEGER"/> | <result property="awardPrice" column="award_price" jdbcType="INTEGER"/> | ||||
| <result property="awardCount" column="award_count" jdbcType="INTEGER"/> | <result property="awardCount" column="award_count" jdbcType="INTEGER"/> | ||||
| @@ -36,9 +37,32 @@ | |||||
| grant_id,activity_id,activity_name, | grant_id,activity_id,activity_name, | ||||
| activity_item_id,activity_item_name,activity_item_type, | activity_item_id,activity_item_name,activity_item_type, | ||||
| award_itam_id,award_name,award_grade, | award_itam_id,award_name,award_grade, | ||||
| award_min_amount,award_max_amount,cash_back_ratio, | |||||
| award_min_amount,award_max_amount,awards_item_rule,cash_back_ratio, | |||||
| award_price,award_count,money_rule, | award_price,award_count,money_rule, | ||||
| mall_share_rate,mall_share_price,merchant_share_rate, | mall_share_rate,mall_share_price,merchant_share_rate, | ||||
| merchant_share_price,create_date,update_date | merchant_share_price,create_date,update_date | ||||
| </sql> | </sql> | ||||
| <insert id="insertList" parameterType="java.util.List"> | |||||
| insert into wx_offline_activity_grant_item | |||||
| (`id`,`tenant_id`,`parent_tenant_id`, | |||||
| `grant_id`,`activity_id`,`activity_name`, | |||||
| `activity_item_id`,`activity_item_name`,`activity_item_type`, | |||||
| `award_itam_id`,`award_name`,`award_grade`, | |||||
| `award_min_amount`,`award_max_amount`,`awards_item_rule`,`cash_back_ratio`, | |||||
| `award_price`,`award_count`,`money_rule`, | |||||
| `mall_share_rate`,`mall_share_price`,`merchant_share_rate`, | |||||
| `merchant_share_price`,`create_date`,`update_date`) | |||||
| values | |||||
| <foreach collection="addList" item="item" index="index" separator=","> | |||||
| (#{item.id,jdbcType=BIGINT},#{item.tenantId,jdbcType=VARCHAR},#{item.parentTenantId,jdbcType=VARCHAR}, | |||||
| #{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.awardItamId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.awardGrade,jdbcType=INTEGER}, | |||||
| #{item.awardMinAmount,jdbcType=INTEGER},#{item.awardMaxAmount,jdbcType=INTEGER},#{item.awardsItemRule,jdbcType=INTEGER},#{item.cashBackRatio,jdbcType=DECIMAL}, | |||||
| #{item.awardPrice,jdbcType=INTEGER},#{item.awardCount,jdbcType=INTEGER},#{item.moneyRule,jdbcType=INTEGER}, | |||||
| #{item.mallShareRate,jdbcType=DECIMAL},#{item.mallSharePrice,jdbcType=INTEGER},#{item.merchantShareRate,jdbcType=DECIMAL}, | |||||
| #{item.merchantSharePrice,jdbcType=INTEGER},#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) | |||||
| </foreach> | |||||
| </insert> | |||||
| </mapper> | </mapper> | ||||
| @@ -16,13 +16,14 @@ | |||||
| <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | <result property="activityItemId" column="activity_item_id" jdbcType="BIGINT"/> | ||||
| <result property="awardItamId" column="award_itam_id" jdbcType="BIGINT"/> | <result property="awardItamId" column="award_itam_id" jdbcType="BIGINT"/> | ||||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | ||||
| <result property="grantMoney" column="grant_money" jdbcType="INTEGER"/> | |||||
| <result property="grantPrice" column="grant_price" jdbcType="INTEGER"/> | <result property="grantPrice" column="grant_price" jdbcType="INTEGER"/> | ||||
| <result property="mallSharePrice" column="mall_share_price" jdbcType="INTEGER"/> | <result property="mallSharePrice" column="mall_share_price" jdbcType="INTEGER"/> | ||||
| <result property="merchantSharePrice" column="merchant_share_price" jdbcType="INTEGER"/> | <result property="merchantSharePrice" column="merchant_share_price" jdbcType="INTEGER"/> | ||||
| <result property="orderRatio" column="order_ratio" jdbcType="DECIMAL"/> | <result property="orderRatio" column="order_ratio" jdbcType="DECIMAL"/> | ||||
| <result property="realGrantPrice" column="real_grant_price" jdbcType="INTEGER"/> | <result property="realGrantPrice" column="real_grant_price" jdbcType="INTEGER"/> | ||||
| <result property="realMallSharePrice" column="real_mall_share_price" jdbcType="DECIMAL"/> | |||||
| <result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="DECIMAL"/> | |||||
| <result property="realMallSharePrice" column="real_mall_share_price" jdbcType="INTEGER"/> | |||||
| <result property="realMerchantSharePrice" column="real_merchant_share_price" jdbcType="INTEGER"/> | |||||
| <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | <result property="createDate" column="create_date" jdbcType="TIMESTAMP"/> | ||||
| <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | <result property="updateDate" column="update_date" jdbcType="TIMESTAMP"/> | ||||
| </resultMap> | </resultMap> | ||||
| @@ -31,9 +32,30 @@ | |||||
| id,tenant_id,parent_tenant_id, | id,tenant_id,parent_tenant_id, | ||||
| record_id,order_no,order_money, | record_id,order_no,order_money, | ||||
| merchant_id,activity_id,activity_item_id, | merchant_id,activity_id,activity_item_id, | ||||
| award_itam_id,grant_id,grant_price, | |||||
| award_itam_id,grant_id,grant_money,grant_price, | |||||
| mall_share_price,merchant_share_price,order_ratio, | mall_share_price,merchant_share_price,order_ratio, | ||||
| real_grant_price,real_mall_share_price,real_merchant_share_price, | real_grant_price,real_mall_share_price,real_merchant_share_price, | ||||
| create_date,update_date | create_date,update_date | ||||
| </sql> | </sql> | ||||
| <insert id="insertList" parameterType="java.util.List"> | |||||
| insert into wx_offline_activity_grant_item | |||||
| (id,tenant_id,parent_tenant_id, | |||||
| record_id,order_no,order_money, | |||||
| merchant_id,activity_id,activity_item_id, | |||||
| award_itam_id,grant_id,grant_money,grant_price, | |||||
| mall_share_price,merchant_share_price,order_ratio, | |||||
| real_grant_price,real_mall_share_price,real_merchant_share_price, | |||||
| create_date,update_date) | |||||
| values | |||||
| <foreach collection="addList" item="item" index="index" separator=","> | |||||
| (#{item.id,jdbcType=BIGINT},#{item.tenantId,jdbcType=VARCHAR},#{item.parentTenantId,jdbcType=VARCHAR}, | |||||
| #{item.recordId,jdbcType=BIGINT},#{item.orderNo,jdbcType=VARCHAR},#{item.orderMoney,jdbcType=INTEGER}, | |||||
| #{item.merchantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.activityItemId,jdbcType=BIGINT}, | |||||
| #{item.awardItamId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantMoney,jdbcType=INTEGER},#{item.grantPrice,jdbcType=INTEGER}, | |||||
| #{item.mallSharePrice,jdbcType=INTEGER},#{item.merchantSharePrice,jdbcType=INTEGER},#{item.orderRatio,jdbcType=DECIMAL}, | |||||
| #{item.realGrantPrice,jdbcType=INTEGER},#{item.realMallSharePrice,jdbcType=INTEGER},#{item.realMerchantSharePrice,jdbcType=INTEGER}, | |||||
| #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) | |||||
| </foreach> | |||||
| </insert> | |||||
| </mapper> | </mapper> | ||||
| @@ -23,4 +23,17 @@ | |||||
| where activity_id = #{activityId} and record_id = #{recordId} and tenant_id=#{tenantId} | where activity_id = #{activityId} and record_id = #{recordId} and tenant_id=#{tenantId} | ||||
| </select> | </select> | ||||
| <insert id="insertList" parameterType="java.util.List"> | |||||
| insert into wx_offline_activity_record_grant | |||||
| (`tenant_id`,`parent_tenant_id`,`activity_id`,`record_id`,`grant_id`) | |||||
| values | |||||
| <foreach collection="addList" item="item" index="index" separator=","> | |||||
| (#{item.tenantId,jdbcType=VARCHAR}, | |||||
| #{item.parentTenantId,jdbcType=VARCHAR}, | |||||
| #{item.activityId,jdbcType=BIGINT}, | |||||
| #{item.recordId,jdbcType=BIGINT}, | |||||
| #{item.grantId,jdbcType=BIGINT}) | |||||
| </foreach> | |||||
| </insert> | |||||
| </mapper> | </mapper> | ||||
| @@ -113,6 +113,13 @@ | |||||
| <include refid="dynamicWhereConditions" /> | <include refid="dynamicWhereConditions" /> | ||||
| </select> | </select> | ||||
| <select id="selectLimitOne" parameterType="com.iformall.domain.po.WxOfflineActivityRecord" resultMap="BaseResultMap"> | |||||
| select <include refid="allColumns" /> from wx_offline_activity_record | |||||
| <include refid="dynamicWhereConditions" /> | |||||
| limit 1 | |||||
| </select> | |||||
| <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | <select id="selectById" parameterType="java.util.HashMap" resultMap="BaseResultMap"> | ||||
| select <include refid="allColumns" /> from wx_offline_activity_record where id = #{id} and tenant_id=#{tenantId} | select <include refid="allColumns" /> from wx_offline_activity_record where id = #{id} and tenant_id=#{tenantId} | ||||
| </select> | </select> | ||||
| @@ -146,6 +153,10 @@ | |||||
| and `create_date` <= #{createDateEnd} | and `create_date` <= #{createDateEnd} | ||||
| </if> | </if> | ||||
| <if test=" null != auditStatus "> | |||||
| and `audit_status` = #{auditStatus} | |||||
| </if> | |||||
| GROUP BY audit_status | GROUP BY audit_status | ||||
| </select> | </select> | ||||