| @@ -3,6 +3,7 @@ package com.iformall.controller.market; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.annotation.ApiVersion; | |||
| import com.iformall.common.ErrorCode; | |||
| import com.iformall.common.Result; | |||
| import com.iformall.common.ResultData; | |||
| import com.iformall.constant.SwaggerConstant; | |||
| @@ -228,4 +229,88 @@ public class WxVtwoPrizeDrawActivityController extends BaseController { | |||
| wxVtwoActivityOrderService.exportData(request,response,activityOrder,activity.getId()); | |||
| } | |||
| @ApiVersion(group = SwaggerConstant.V_A_2_0) | |||
| @ApiOperation("活动发放页面处理") | |||
| @PostMapping("grantAwardPage") | |||
| public ResultData grantAwardPage(@RequestBody WxVtwoActivityGrant activityGrant) { | |||
| TenantEntity tenantEntity = getTenantInfo(); | |||
| activityGrant.updateTenantInfo(tenantEntity); | |||
| if(activityGrant.getActivityId() == null){ | |||
| return new ResultData(Result.ERROR,"活动ID为空"); | |||
| } | |||
| if(activityGrant.getOrderIdList() == null || activityGrant.getOrderIdList().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"请选择订单"); | |||
| } | |||
| WxVtwoPrizeDrawActivity prizeDrawActivity = wxVtwoPrizeDrawActivityService.getById(activityGrant.getActivityId(), activityGrant.getTenantId()); | |||
| if(prizeDrawActivity == null){ | |||
| return new ResultData(Result.ERROR,"查询不到活动"); | |||
| } | |||
| if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(prizeDrawActivity.getStatus())){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动状态"); | |||
| } | |||
| if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(prizeDrawActivity.getAmountModel())){ | |||
| if(activityGrant.getOrderFilterIdList() == null || activityGrant.getOrderFilterIdList().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"请筛选订单"); | |||
| } | |||
| }else{ | |||
| activityGrant.setOrderFilterIdList(null); | |||
| } | |||
| try{ | |||
| wxVtwoPrizeDrawActivityService.handlerGrantAwardPage(prizeDrawActivity,activityGrant); | |||
| return new ResultData(activityGrant); | |||
| }catch(MallinkException e){ | |||
| logger.error(e.getMessage()); | |||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||
| }catch(Exception e){ | |||
| logger.error("异常:" + e); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||
| } | |||
| } | |||
| @ApiVersion(group = SwaggerConstant.V_A_2_0) | |||
| @ApiOperation("活动发放") | |||
| @PostMapping("grantAward") | |||
| public ResultData grantAward(@RequestBody WxVtwoActivityGrant activityGrant) { | |||
| TenantEntity tenantEntity = getTenantInfo(); | |||
| activityGrant.updateTenantInfo(tenantEntity); | |||
| if(activityGrant.getActivityId() == null){ | |||
| return new ResultData(Result.ERROR,"活动ID为空"); | |||
| } | |||
| if(activityGrant.getOrderIdList() == null || activityGrant.getOrderIdList().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"请选择订单"); | |||
| } | |||
| WxVtwoPrizeDrawActivity prizeDrawActivity = wxVtwoPrizeDrawActivityService.getById(activityGrant.getActivityId(), activityGrant.getTenantId()); | |||
| if(prizeDrawActivity == null){ | |||
| return new ResultData(Result.ERROR,"查询不到活动"); | |||
| } | |||
| if(!EnumOfflineActivityStatus.ON_LINE.getCode().equals(prizeDrawActivity.getStatus())){ | |||
| throw new MallinkException(Result.ERROR, "请检查活动状态"); | |||
| } | |||
| if(EnumOfflineActivityMode.CONDITION_SUM.getCode().equals(prizeDrawActivity.getAmountModel())){ | |||
| if(activityGrant.getOrderFilterIdList() == null || activityGrant.getOrderFilterIdList().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"请筛选订单"); | |||
| } | |||
| }else{ | |||
| activityGrant.setOrderFilterIdList(null); | |||
| } | |||
| if(activityGrant.getGrantAwardList() == null || activityGrant.getGrantAwardList().isEmpty()){ | |||
| return new ResultData(Result.ERROR,"奖励项为空"); | |||
| } | |||
| // if(StringUtils.isBlank(activityGrant.getSignImg())){ | |||
| // return new ResultData(Result.ERROR,"签名为空"); | |||
| // } | |||
| activityGrant.setCreateBy(getUserId()); | |||
| try{ | |||
| wxVtwoPrizeDrawActivityService.grantAward(prizeDrawActivity, activityGrant); | |||
| return new ResultData(); | |||
| }catch(MallinkException e){ | |||
| logger.error(e.getMessage()); | |||
| return new ResultData(e.getErrorCode(), e.getMessage()); | |||
| }catch(Exception e){ | |||
| logger.error("异常:" + e); | |||
| return new ResultData(ErrorCode.SYS_SERVER_ERROR); | |||
| } | |||
| } | |||
| } | |||
| @@ -1,5 +1,7 @@ | |||
| package com.iformall.domain.po; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | |||
| import com.baomidou.mybatisplus.annotation.IdType; | |||
| import com.baomidou.mybatisplus.annotation.TableField; | |||
| import com.baomidou.mybatisplus.annotation.TableId; | |||
| @@ -9,6 +11,7 @@ import java.math.BigDecimal; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import com.iformall.domain.vo.WxVtwoActivityGrantRule; | |||
| import lombok.Data; | |||
| /** | |||
| @@ -65,6 +68,18 @@ public class WxVtwoActivityGrant extends TenantEntity { | |||
| */ | |||
| @TableField(value = "lottery_num") | |||
| private String lotteryNum; | |||
| @TableField(exist = false) | |||
| private List<String> lotteryNumList; | |||
| public List<String> getLotteryNumList() { | |||
| if(StringUtils.isNotBlank(lotteryNum)){ | |||
| try { | |||
| List<String> stringList = JSON.parseArray(lotteryNum, String.class); | |||
| stringList.removeIf(String::isEmpty); | |||
| lotteryNumList = stringList.isEmpty() ? null : stringList; | |||
| } catch (Exception e){} | |||
| } | |||
| return lotteryNumList; | |||
| } | |||
| /** | |||
| * 抽奖券数量 | |||
| @@ -77,6 +92,18 @@ public class WxVtwoActivityGrant extends TenantEntity { | |||
| */ | |||
| @TableField(value = "anniversary_lottery_num") | |||
| private String anniversaryLotteryNum; | |||
| @TableField(exist = false) | |||
| private List<String> anniversaryLotteryNumList; | |||
| public List<String> getAnniversaryLotteryNumList() { | |||
| if(StringUtils.isNotBlank(anniversaryLotteryNum)){ | |||
| try { | |||
| List<String> stringList = JSON.parseArray(anniversaryLotteryNum, String.class); | |||
| stringList.removeIf(String::isEmpty); | |||
| anniversaryLotteryNumList = stringList.isEmpty() ? null : stringList; | |||
| } catch (Exception e){} | |||
| } | |||
| return anniversaryLotteryNumList; | |||
| } | |||
| /** | |||
| * 实际领奖人 | |||
| @@ -126,6 +153,9 @@ public class WxVtwoActivityGrant extends TenantEntity { | |||
| @TableField(value = "update_date") | |||
| private Date updateDate; | |||
| @TableField(exist = false) | |||
| private List<WxVtwoActivityGrantAward> grantAwardList; | |||
| @TableField(exist = false) | |||
| private List<Long> orderIdList; | |||
| @@ -134,4 +164,13 @@ public class WxVtwoActivityGrant extends TenantEntity { | |||
| @TableField(exist = false) | |||
| private List<WxVtwoActivityOrder> orderList; | |||
| @TableField(exist = false) | |||
| private List<WxVtwoActivityGrantRule> ruleList; | |||
| @TableField(exist = false) | |||
| private List<WxVtwoActivityAward> awardList; | |||
| @TableField(exist = false) | |||
| private Integer awardLimit; | |||
| } | |||
| @@ -46,36 +46,12 @@ public class WxVtwoActivityGrantAward extends TenantEntity { | |||
| @TableField(value = "order_id") | |||
| private Long orderId; | |||
| /** | |||
| * 订单金额/总金额 | |||
| */ | |||
| @TableField(value = "order_amount") | |||
| private BigDecimal orderAmount; | |||
| /** | |||
| * 金额/联单 | |||
| */ | |||
| @TableField(value = "mode_type") | |||
| private Integer modeType; | |||
| /** | |||
| * 奖项限制最小金额 | |||
| */ | |||
| @TableField(value = "min_amount") | |||
| private BigDecimal minAmount; | |||
| /** | |||
| * 奖项限制最大金额 | |||
| */ | |||
| @TableField(value = "max_amount") | |||
| private BigDecimal maxAmount; | |||
| /** | |||
| * 联单笔数 | |||
| */ | |||
| @TableField(value = "related_count") | |||
| private Integer relatedCount; | |||
| /** | |||
| * 奖项id | |||
| */ | |||
| @@ -115,8 +91,8 @@ public class WxVtwoActivityGrantAward extends TenantEntity { | |||
| /** | |||
| * 分担规则(0-商管 1-商户 2-分担) | |||
| */ | |||
| @TableField(value = "money_rule") | |||
| private Integer moneyRule; | |||
| @TableField(value = "share_rule") | |||
| private Integer shareRule; | |||
| /** | |||
| * 商管分担比例 | |||
| @@ -46,6 +46,9 @@ public class WxVtwoActivityGrantSettlement extends TenantEntity { | |||
| @TableField(value = "award_id") | |||
| private Long awardId; | |||
| @TableField(exist = false) | |||
| private Integer awardCount; | |||
| /** | |||
| * 发放总价值 | |||
| */ | |||
| @@ -257,4 +257,7 @@ public class WxVtwoActivityOrder extends TenantEntity { | |||
| */ | |||
| @TableField(exist = false) | |||
| private Integer isAmount; | |||
| @TableField(exist = false) | |||
| private BigDecimal orderRatio; | |||
| } | |||
| @@ -43,8 +43,8 @@ public class WxVtwoCashBackGrantAward extends TenantEntity { | |||
| /** | |||
| * | |||
| */ | |||
| @TableField(value = "record_id") | |||
| private Long recordId; | |||
| @TableField(value = "order_id") | |||
| private Long orderId; | |||
| /** | |||
| * 订单金额/总金额 | |||
| @@ -109,8 +109,8 @@ public class WxVtwoCashBackGrantAward extends TenantEntity { | |||
| /** | |||
| * 分担规则(0-商管 1-商户 2-分担) | |||
| */ | |||
| @TableField(value = "money_rule") | |||
| private Integer moneyRule; | |||
| @TableField(value = "share_rule") | |||
| private Integer shareRule; | |||
| /** | |||
| * 商管分担比例 | |||
| @@ -0,0 +1,16 @@ | |||
| package com.iformall.domain.vo; | |||
| import com.iformall.domain.po.WxOfflineActivityRecord; | |||
| import lombok.Data; | |||
| import java.io.Serializable; | |||
| @Data | |||
| public class WxVtwoActivityGrantRule implements Serializable { | |||
| private Long orderId; | |||
| private Integer modeType; | |||
| private String name; | |||
| private Integer awardLimit; | |||
| } | |||
| @@ -3,6 +3,9 @@ package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantAward; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -12,6 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| */ | |||
| public interface WxVtwoActivityGrantAwardMapper extends CommonMapper<WxVtwoActivityGrantAward, Long> { | |||
| void insertList(@Param("grantAwardList")List<WxVtwoActivityGrantAward> grantAwardList); | |||
| } | |||
| @@ -3,6 +3,9 @@ package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantOrder; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -12,6 +15,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| */ | |||
| public interface WxVtwoActivityGrantOrderMapper extends CommonMapper<WxVtwoActivityGrantOrder, Long> { | |||
| void insertList(@Param("grantOrderList")List<WxVtwoActivityGrantOrder> grantOrderList); | |||
| } | |||
| @@ -3,6 +3,9 @@ package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantSettlement; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -14,6 +17,7 @@ public interface WxVtwoActivityGrantSettlementMapper extends CommonMapper<WxVtwo | |||
| Integer getOrderCount(WxVtwoActivityGrantSettlement record); | |||
| void insertList(@Param("settlementList")List<WxVtwoActivityGrantSettlement> settlementList); | |||
| } | |||
| @@ -1,8 +1,12 @@ | |||
| package com.iformall.mapper; | |||
| import com.iformall.common.CommonMapper; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantAward; | |||
| import com.iformall.domain.po.WxVtwoCashBackGrantAward; | |||
| import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -12,6 +16,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
| */ | |||
| public interface WxVtwoCashBackGrantAwardMapper extends CommonMapper<WxVtwoCashBackGrantAward, Long> { | |||
| void insertList(@Param("grantAwardList") List<WxVtwoCashBackGrantAward> grantAwardList); | |||
| } | |||
| @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -14,4 +15,8 @@ import java.util.List; | |||
| public interface WxVtwoActivityAwardService extends IService<WxVtwoActivityAward> { | |||
| void saveFromActivity(TenantEntity tenantEntity, Long activityId, List<WxVtwoActivityAward> awardList); | |||
| List<WxVtwoActivityAward> findActivityAwardList(Long activityId, String tenantId); | |||
| Map<Long, WxVtwoActivityAward> findActivityAwardMap(Long activityId, String tenantId); | |||
| } | |||
| @@ -1,8 +1,11 @@ | |||
| package com.iformall.service; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantAward; | |||
| import com.baomidou.mybatisplus.extension.service.IService; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| * @description 针对表【wx_vtwo_activity_grant_award(线下活动发放奖励)】的数据库操作Service | |||
| @@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||
| */ | |||
| public interface WxVtwoActivityGrantAwardService extends IService<WxVtwoActivityGrantAward> { | |||
| void saveGrantAward(WxVtwoActivityGrant activityGrant); | |||
| } | |||
| @@ -2,6 +2,9 @@ package com.iformall.service; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantOrder; | |||
| import com.baomidou.mybatisplus.extension.service.IService; | |||
| import com.iformall.domain.po.WxVtwoActivityOrder; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||
| */ | |||
| public interface WxVtwoActivityGrantOrderService extends IService<WxVtwoActivityGrantOrder> { | |||
| void saveGrantOrder(Long grantId, Long activityId, List<WxVtwoActivityOrder> orderList); | |||
| } | |||
| @@ -2,6 +2,9 @@ package com.iformall.service; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.baomidou.mybatisplus.extension.service.IService; | |||
| import com.iformall.domain.po.WxVtwoActivityOrder; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -10,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||
| */ | |||
| public interface WxVtwoActivityGrantService extends IService<WxVtwoActivityGrant> { | |||
| void handleFromOrder(String activityName, WxVtwoActivityGrant activityGrant, List<WxVtwoActivityOrder> orderList, boolean isGrant); | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| package com.iformall.service; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantSettlement; | |||
| import com.baomidou.mybatisplus.extension.service.IService; | |||
| @@ -10,4 +11,5 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||
| */ | |||
| public interface WxVtwoActivityGrantSettlementService extends IService<WxVtwoActivityGrantSettlement> { | |||
| void saveGrantSettlement(WxVtwoActivityGrant activityGrant); | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.iformall.domain.po.WxVtwoActivityOrder; | |||
| import com.baomidou.mybatisplus.extension.service.IService; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| @@ -38,4 +39,7 @@ public interface WxVtwoActivityOrderService extends IService<WxVtwoActivityOrder | |||
| WxVtwoActivityOrder getlimitOne(WxVtwoActivityOrder activityOrder); | |||
| List<WxVtwoActivityOrder> findGrantOrder(TenantEntity tenantInfo, List<Long> idList, List<Long> filterIdList); | |||
| Integer getJointCount(Integer relatedModel, List<WxVtwoActivityOrder> orderList); | |||
| } | |||
| @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -15,4 +16,8 @@ import java.util.List; | |||
| public interface WxVtwoCashBackAwardService extends IService<WxVtwoCashBackAward> { | |||
| void saveFromActivity(TenantEntity tenantEntity, Long activityId, List<WxVtwoCashBackAward> amountRulesObject, List<WxVtwoCashBackAward> relatedRulesObject); | |||
| List<WxVtwoCashBackAward> findActivityAwardList(Long activityId, String tenantId); | |||
| Map<Long, WxVtwoCashBackAward> findActivityAwardMap(Long activityId, String tenantId); | |||
| } | |||
| @@ -1,6 +1,7 @@ | |||
| package com.iformall.service; | |||
| import com.github.pagehelper.PageInfo; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.iformall.domain.po.WxVtwoActivityOrder; | |||
| import com.iformall.domain.po.WxVtwoPrizeDrawActivity; | |||
| import com.baomidou.mybatisplus.extension.service.IService; | |||
| @@ -25,4 +26,8 @@ public interface WxVtwoPrizeDrawActivityService extends IService<WxVtwoPrizeDraw | |||
| WxVtwoPrizeDrawActivity getById(Long id, String tenantId); | |||
| void handleSpecialTopicActivity(TenantEntity tenantEntity, WxVtwoSpecialTopicActivity activity); | |||
| void handlerGrantAwardPage(WxVtwoPrizeDrawActivity prizeDrawActivity, WxVtwoActivityGrant activityGrant); | |||
| void grantAward(WxVtwoPrizeDrawActivity prizeDrawActivity,WxVtwoActivityGrant activityGrant); | |||
| } | |||
| @@ -14,8 +14,12 @@ import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.math.BigDecimal; | |||
| import java.util.Collections; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.function.Function; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -51,6 +55,20 @@ public class WxVtwoActivityAwardServiceImpl extends ServiceImpl<WxVtwoActivityAw | |||
| } | |||
| wxVtwoActivityAwardMapper.insertList(awardList); | |||
| } | |||
| @Override | |||
| public List<WxVtwoActivityAward> findActivityAwardList(Long activityId, String tenantId) { | |||
| WxVtwoActivityAward activityAwardQ = new WxVtwoActivityAward(); | |||
| activityAwardQ.setTenantId(tenantId); | |||
| activityAwardQ.setActivityId(activityId); | |||
| return wxVtwoActivityAwardMapper.findList(activityAwardQ); | |||
| } | |||
| @Override | |||
| public Map<Long, WxVtwoActivityAward> findActivityAwardMap(Long activityId, String tenantId) { | |||
| List<WxVtwoActivityAward> activityAwardList = this.findActivityAwardList(activityId, tenantId); | |||
| return activityAwardList.stream().collect(Collectors.toMap(WxVtwoActivityAward::getId, Function.identity())); | |||
| } | |||
| } | |||
| @@ -1,11 +1,26 @@ | |||
| package com.iformall.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.common.Result; | |||
| import com.iformall.domain.po.WxVtwoActivityAward; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantAward; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.service.WxVtwoActivityAwardService; | |||
| import com.iformall.service.WxVtwoActivityGrantAwardService; | |||
| import com.iformall.mapper.WxVtwoActivityGrantAwardMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.math.BigDecimal; | |||
| import java.math.RoundingMode; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import static java.util.stream.Collectors.counting; | |||
| import static java.util.stream.Collectors.groupingBy; | |||
| /** | |||
| * @author xiaohu | |||
| * @description 针对表【wx_vtwo_activity_grant_award(线下活动发放奖励)】的数据库操作Service实现 | |||
| @@ -15,6 +30,61 @@ import org.springframework.stereotype.Service; | |||
| public class WxVtwoActivityGrantAwardServiceImpl extends ServiceImpl<WxVtwoActivityGrantAwardMapper, WxVtwoActivityGrantAward> | |||
| implements WxVtwoActivityGrantAwardService{ | |||
| @Autowired | |||
| private WxVtwoActivityGrantAwardMapper wxVtwoActivityGrantAwardMapper; | |||
| @Autowired | |||
| private WxVtwoActivityAwardService wxVtwoActivityAwardService; | |||
| @Override | |||
| public void saveGrantAward(WxVtwoActivityGrant activityGrant) { | |||
| Map<Long, WxVtwoActivityAward> activityAwardMap = wxVtwoActivityAwardService.findActivityAwardMap(activityGrant.getActivityId(), activityGrant.getTenantId()); | |||
| List<WxVtwoActivityGrantAward> grantAwardList = activityGrant.getGrantAwardList(); | |||
| boolean isAwardId = grantAwardList.stream().anyMatch(grantAward -> grantAward.getAwardId() == null); | |||
| if(isAwardId){ | |||
| throw new MallinkException(Result.ERROR, "请检查是否都选择奖项"); | |||
| } | |||
| boolean isModeType = grantAwardList.stream().anyMatch(grantAward -> grantAward.getModeType() == null); | |||
| if(isModeType){ | |||
| throw new MallinkException(Result.ERROR, "请检查奖项参数"); | |||
| } | |||
| //所得奖项不能重复, 后续计算问题 | |||
| boolean isRepeat = grantAwardList.stream() | |||
| .collect(groupingBy(e -> String.valueOf(e.getAwardId())+String.valueOf(e.getModeType())+String.valueOf(e.getOrderId()), counting())) | |||
| .entrySet().stream().anyMatch(e -> e.getValue() > 1); | |||
| if(isRepeat){ | |||
| throw new MallinkException(Result.ERROR, "请检查奖项存在重复"); | |||
| } | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| for(WxVtwoActivityGrantAward grantAward : grantAwardList){ | |||
| grantAward.setAwardId(idWorker.nextId()); | |||
| grantAward.updateTenantInfo(activityGrant); | |||
| grantAward.setActivityId(activityGrant.getActivityId()); | |||
| grantAward.setActivityName(activityGrant.getActivityName()); | |||
| grantAward.setGrantId(activityGrant.getId()); | |||
| WxVtwoActivityAward activityAward = activityAwardMap.get(grantAward.getAwardId()); | |||
| grantAward.setAwardGrade(activityAward.getGrade()); | |||
| grantAward.setAwardName(activityAward.getName()); | |||
| grantAward.setAwardPrice(activityAward.getPrice()); | |||
| if(grantAward.getAwardCount() == null){ | |||
| grantAward.setAwardCount(1); | |||
| } | |||
| grantAward.setGrantPrice(grantAward.getAwardPrice() | |||
| .multiply(new BigDecimal(grantAward.getAwardCount())) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| grantAward.setShareRule(activityAward.getShareRule()); | |||
| grantAward.setMallShareRate(activityAward.getMallShareRate()); | |||
| grantAward.setMerchantShareRate(activityAward.getMerchantShareRate()); | |||
| grantAward.setCreateDate(activityAward.getUpdateDate()); | |||
| grantAward.setUpdateDate(activityAward.getUpdateDate()); | |||
| } | |||
| wxVtwoActivityGrantAwardMapper.insertList(grantAwardList); | |||
| activityGrant.setGrantAwardList(grantAwardList); | |||
| } | |||
| } | |||
| @@ -1,11 +1,17 @@ | |||
| package com.iformall.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantOrder; | |||
| import com.iformall.domain.po.WxVtwoActivityOrder; | |||
| import com.iformall.service.WxVtwoActivityGrantOrderService; | |||
| import com.iformall.mapper.WxVtwoActivityGrantOrderMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| * @description 针对表【wx_vtwo_activity_grant_order(线下活动发奖订单)】的数据库操作Service实现 | |||
| @@ -15,6 +21,25 @@ import org.springframework.stereotype.Service; | |||
| public class WxVtwoActivityGrantOrderServiceImpl extends ServiceImpl<WxVtwoActivityGrantOrderMapper, WxVtwoActivityGrantOrder> | |||
| implements WxVtwoActivityGrantOrderService{ | |||
| @Autowired | |||
| private WxVtwoActivityGrantOrderMapper wxVtwoActivityGrantOrderMapper; | |||
| @Override | |||
| public void saveGrantOrder(Long grantId, Long activityId, List<WxVtwoActivityOrder> orderList) { | |||
| List<WxVtwoActivityGrantOrder> grantOrderList = new ArrayList<>(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| for (WxVtwoActivityOrder order : orderList) { | |||
| WxVtwoActivityGrantOrder grantOrder = new WxVtwoActivityGrantOrder(); | |||
| grantOrder.setId(idWorker.nextId()); | |||
| grantOrder.updateTenantInfo(order); | |||
| grantOrder.setGrantId(grantId); | |||
| grantOrder.setActivityId(activityId); | |||
| grantOrder.setOrderId(order.getId()); | |||
| grantOrder.setIsAmount(order.getIsAmount()); | |||
| grantOrderList.add(grantOrder); | |||
| } | |||
| wxVtwoActivityGrantOrderMapper.insertList(grantOrderList); | |||
| } | |||
| } | |||
| @@ -1,10 +1,24 @@ | |||
| package com.iformall.service.impl; | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.aliyun.openservices.shade.org.apache.commons.lang3.StringUtils; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.WxVtwoActivityGrant; | |||
| import com.iformall.domain.po.WxVtwoActivityOrder; | |||
| import com.iformall.domain.po.WxVtwoPrizeDrawActivity; | |||
| import com.iformall.enums.EnumOfflineActivityMerchantType; | |||
| import com.iformall.enums.EnumOfflineActivityStatus; | |||
| import com.iformall.service.WxVtwoActivityGrantService; | |||
| import com.iformall.mapper.WxVtwoActivityGrantMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import java.math.BigDecimal; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -15,6 +29,56 @@ import org.springframework.stereotype.Service; | |||
| public class WxVtwoActivityGrantServiceImpl extends ServiceImpl<WxVtwoActivityGrantMapper, WxVtwoActivityGrant> | |||
| implements WxVtwoActivityGrantService{ | |||
| @Autowired | |||
| private WxVtwoActivityGrantMapper wxVtwoActivityGrantMapper; | |||
| @Override | |||
| public void handleFromOrder(String activityName, WxVtwoActivityGrant activityGrant, List<WxVtwoActivityOrder> orderList, boolean isGrant) { | |||
| activityGrant.setActivityName(activityName); | |||
| activityGrant.setOrderList(orderList); | |||
| BigDecimal orderMoneySum = BigDecimal.ZERO; | |||
| List<String> lotteryNumList = new ArrayList<>(); | |||
| int lotteryCount = 0; | |||
| List<String> anniversaryLotteryNumList = new ArrayList<>(); | |||
| for (WxVtwoActivityOrder order : orderList) { | |||
| orderMoneySum = orderMoneySum.add(order.getOrderMoney()); | |||
| if(order.getLotteryNumList() != null && !order.getLotteryNumList().isEmpty()){ | |||
| lotteryNumList.addAll(order.getLotteryNumList()); | |||
| } | |||
| if(order.getLotteryCount() != null){ | |||
| lotteryCount = lotteryCount + order.getLotteryCount(); | |||
| } | |||
| if(StringUtils.isNotBlank(order.getAnniversaryLotteryNum())){ | |||
| anniversaryLotteryNumList.add(order.getAnniversaryLotteryNum()); | |||
| } | |||
| } | |||
| activityGrant.setOrderMoneySum(orderMoneySum); | |||
| activityGrant.setOrderCount(orderList.size()); | |||
| activityGrant.setCusName(orderList.get(0).getCusName()); | |||
| activityGrant.setCusPhone(orderList.get(0).getCusPhone()); | |||
| if(!isGrant){ | |||
| activityGrant.setLotteryNum(JSON.toJSONString(lotteryNumList)); | |||
| activityGrant.setLotteryCount(lotteryCount); | |||
| activityGrant.setAnniversaryLotteryNum(JSON.toJSONString(anniversaryLotteryNumList)); | |||
| } | |||
| } | |||
| @Override | |||
| public boolean saveOrUpdate(WxVtwoActivityGrant activityGrant) { | |||
| Date now = new Date(); | |||
| if(activityGrant.getId() == null){ | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| activityGrant.setId(idWorker.nextId()); | |||
| activityGrant.setCreateDate(now); | |||
| activityGrant.setCreateDate(now); | |||
| wxVtwoActivityGrantMapper.insert(activityGrant); | |||
| } | |||
| else{ | |||
| activityGrant.setUpdateDate(now); | |||
| wxVtwoActivityGrantMapper.updateById(activityGrant); | |||
| } | |||
| return true; | |||
| } | |||
| } | |||
| @@ -1,11 +1,24 @@ | |||
| package com.iformall.service.impl; | |||
| import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
| import com.iformall.domain.po.WxVtwoActivityGrantSettlement; | |||
| import com.iformall.common.IdWorker; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.enums.EnumOfflineActivityAwardsModeType; | |||
| import com.iformall.enums.EnumYesOrNo; | |||
| import com.iformall.service.WxVtwoActivityGrantSettlementService; | |||
| import com.iformall.mapper.WxVtwoActivityGrantSettlementMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.math.BigDecimal; | |||
| import java.math.RoundingMode; | |||
| import java.util.ArrayList; | |||
| import java.util.Comparator; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.function.Function; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * @author xiaohu | |||
| * @description 针对表【wx_vtwo_activity_grant_settlement(线下活动发放奖励结算)】的数据库操作Service实现 | |||
| @@ -15,6 +28,99 @@ import org.springframework.stereotype.Service; | |||
| public class WxVtwoActivityGrantSettlementServiceImpl extends ServiceImpl<WxVtwoActivityGrantSettlementMapper, WxVtwoActivityGrantSettlement> | |||
| implements WxVtwoActivityGrantSettlementService{ | |||
| @Autowired | |||
| private WxVtwoActivityGrantSettlementMapper wxVtwoActivityGrantSettlementMapper; | |||
| @Override | |||
| public void saveGrantSettlement(WxVtwoActivityGrant activityGrant) { | |||
| List<WxVtwoActivityOrder> amountOrderList = activityGrant.getOrderList().stream().filter(o -> EnumYesOrNo.YES.getCode().equals(o.getIsAmount())) | |||
| .sorted(Comparator.comparing(WxVtwoActivityOrder::getOrderMoney).reversed()).collect(Collectors.toList()); | |||
| List<WxVtwoActivityOrder> cmountOrderList = activityGrant.getOrderList().stream().sorted(Comparator.comparing(WxVtwoActivityOrder::getOrderMoney).reversed()).collect(Collectors.toList()); | |||
| List<WxVtwoActivityGrantAward> grantAwardList = activityGrant.getGrantAwardList(); | |||
| Map<Integer, List<WxVtwoActivityGrantAward>> grantAwardMap = grantAwardList.stream().collect(Collectors.groupingBy(WxVtwoActivityGrantAward::getModeType)); | |||
| List<WxVtwoActivityGrantAward> amountGrantAwardList = grantAwardMap.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); | |||
| List<WxVtwoActivityGrantAward> countGrantAwardList = grantAwardMap.get(EnumOfflineActivityAwardsModeType.COUNT.getCode()); | |||
| List<WxVtwoActivityGrantSettlement> settlementList = new ArrayList<>(); | |||
| final IdWorker idWorker = IdWorker.get(); | |||
| if(amountGrantAwardList != null && !amountGrantAwardList.isEmpty()){ | |||
| handleOrderRatio(amountOrderList); | |||
| Map<Long, WxVtwoActivityOrder> amountOrderMap = amountOrderList.stream().collect(Collectors.toMap(WxVtwoActivityOrder::getId, Function.identity())); | |||
| for (WxVtwoActivityGrantAward grant : amountGrantAwardList) { | |||
| if(grant.getOrderId() != null){ | |||
| WxVtwoActivityOrder order = amountOrderMap.get(grant.getOrderId()); | |||
| WxVtwoActivityGrantSettlement settlement = getGrantSettlement(grant,order,idWorker,true); | |||
| settlementList.add(settlement); | |||
| }else{ | |||
| for (WxVtwoActivityOrder order : amountOrderList){ | |||
| WxVtwoActivityGrantSettlement settlement = getGrantSettlement(grant,order,idWorker,false); | |||
| settlementList.add(settlement); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| if(countGrantAwardList != null && !countGrantAwardList.isEmpty()){ | |||
| handleOrderRatio(cmountOrderList); | |||
| for (WxVtwoActivityGrantAward grant : countGrantAwardList) { | |||
| for (WxVtwoActivityOrder order : amountOrderList){ | |||
| WxVtwoActivityGrantSettlement settlement = getGrantSettlement(grant,order,idWorker,false); | |||
| settlementList.add(settlement); | |||
| } | |||
| } | |||
| } | |||
| wxVtwoActivityGrantSettlementMapper.insertList(settlementList); | |||
| } | |||
| private void handleOrderRatio(List<WxVtwoActivityOrder> orderList){ | |||
| BigDecimal orderSumMoney = orderList.stream().map(WxVtwoActivityOrder::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| int size = orderList.size() - 1; | |||
| BigDecimal lastRatio = new BigDecimal(100); | |||
| for(int i=0; i<size; i++){ | |||
| WxVtwoActivityOrder order = orderList.get(i); | |||
| BigDecimal orderRatio = order.getOrderMoney() | |||
| .divide(orderSumMoney,4, RoundingMode.HALF_UP) | |||
| .multiply(new BigDecimal(100)); | |||
| order.setOrderRatio(orderRatio); | |||
| lastRatio = lastRatio.subtract(orderRatio); | |||
| } | |||
| orderList.get(size).setOrderRatio(lastRatio); | |||
| } | |||
| private WxVtwoActivityGrantSettlement getGrantSettlement(WxVtwoActivityGrantAward grant,WxVtwoActivityOrder order,IdWorker idWorker,boolean isOneOrder){ | |||
| WxVtwoActivityGrantSettlement settlement = new WxVtwoActivityGrantSettlement(); | |||
| settlement.setId(idWorker.nextId()); | |||
| settlement.updateTenantInfo(grant); | |||
| settlement.setActivityId(grant.getActivityId()); | |||
| settlement.setGrantId(grant.getGrantId()); | |||
| settlement.setGrantAwardId(grant.getId()); | |||
| settlement.setAwardId(grant.getAwardId()); | |||
| settlement.setAwardCount(grant.getAwardCount()); | |||
| settlement.setGrantPrice(grant.getGrantPrice()); | |||
| settlement.setOrderId(order.getId()); | |||
| settlement.setOrderNo(order.getOrderNo()); | |||
| settlement.setOrderAmount(order.getOrderMoney()); | |||
| settlement.setMerchantId(order.getMerchantId()); | |||
| if(isOneOrder){ | |||
| settlement.setOrderRatio(new BigDecimal(100)); | |||
| }else{ | |||
| settlement.setOrderRatio(order.getOrderRatio()); | |||
| } | |||
| settlement.setOrderGrantPrice(settlement.getGrantPrice() | |||
| .multiply(settlement.getOrderRatio().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| settlement.setMallShareRate(grant.getMallShareRate()); | |||
| settlement.setMerchantShareRate(grant.getMerchantShareRate()); | |||
| settlement.setOrderMallSharePrice(settlement.getOrderGrantPrice() | |||
| .multiply(settlement.getMallShareRate().divide(new BigDecimal(100))) | |||
| .setScale(2, RoundingMode.HALF_UP)); | |||
| settlement.setOrderMerchantSharePrice(settlement.getOrderGrantPrice().subtract(settlement.getOrderMallSharePrice())); | |||
| settlement.setCreateDate(grant.getUpdateDate()); | |||
| settlement.setUpdateDate(grant.getUpdateDate()); | |||
| return settlement; | |||
| } | |||
| } | |||
| @@ -28,6 +28,8 @@ import java.util.*; | |||
| import java.util.function.Function; | |||
| import java.util.stream.Collectors; | |||
| import static java.util.stream.Collectors.toList; | |||
| /** | |||
| * @author xiaohu | |||
| * @description 针对表【wx_vtwo_activity_order(线下活动参与登记)】的数据库操作Service实现 | |||
| @@ -374,6 +376,46 @@ public class WxVtwoActivityOrderServiceImpl extends ServiceImpl<WxVtwoActivityOr | |||
| return wxVtwoActivityOrderMapper.selectLimitOne(activityOrder); | |||
| } | |||
| @Override | |||
| public List<WxVtwoActivityOrder> findGrantOrder(TenantEntity tenantInfo, List<Long> idList, List<Long> filterIdList) { | |||
| WxVtwoActivityOrder orderQ = new WxVtwoActivityOrder(); | |||
| orderQ.updateTenantInfo(tenantInfo); | |||
| orderQ.setIds(idList); | |||
| List<WxVtwoActivityOrder> list = this.findList(orderQ, null); | |||
| if(filterIdList == null || filterIdList.isEmpty()){ | |||
| for (WxVtwoActivityOrder order : list) { | |||
| order.setIsAmount(EnumYesOrNo.YES.getCode()); | |||
| } | |||
| }else{ | |||
| for (WxVtwoActivityOrder order : list) { | |||
| if(filterIdList.contains(order.getId())) { | |||
| order.setIsAmount(EnumYesOrNo.YES.getCode()); | |||
| }else{ | |||
| order.setIsAmount(EnumYesOrNo.NO.getCode()); | |||
| } | |||
| } | |||
| } | |||
| return this.findList(orderQ,null); | |||
| } | |||
| @Override | |||
| public Integer getJointCount(Integer relatedModel, List<WxVtwoActivityOrder> orderList) { | |||
| Integer jointCount = 0; | |||
| if(orderList == null || orderList.isEmpty()){ | |||
| return jointCount; | |||
| } | |||
| if(EnumOfflineActivityCountMode.MERCHANT_MODEL.getCode().equals(relatedModel)){ | |||
| //商户联单 | |||
| List<Long> merchantIds = orderList.stream().map(WxVtwoActivityOrder::getMerchantId).distinct().collect(toList()); | |||
| jointCount = merchantIds.size(); | |||
| }else if(EnumOfflineActivityCountMode.BUSINESS_MODEL.getCode().equals(relatedModel)){ | |||
| //业态联单 | |||
| List<Integer> businessIds = orderList.stream().map(WxVtwoActivityOrder::getBusinessId).distinct().collect(toList()); | |||
| jointCount = businessIds.size(); | |||
| } | |||
| return jointCount; | |||
| } | |||
| } | |||
| @@ -37,9 +37,6 @@ public class WxVtwoAmountGiftActivityServiceImpl extends ServiceImpl<WxVtwoAmoun | |||
| @Autowired | |||
| private WxVtwoAmountGiftActivityMapper wxVtwoAmountGiftActivityMapper; | |||
| @Autowired | |||
| private WxVtwoActivityAwardMapper wxVtwoActivityAwardMapper; | |||
| @Autowired | |||
| private WxVtwoActivityMerchantMapper wxVtwoActivityMerchantMapper; | |||
| @@ -208,10 +205,7 @@ public class WxVtwoAmountGiftActivityServiceImpl extends ServiceImpl<WxVtwoAmoun | |||
| amountGiftActivity.setRelatedRulesObject(JSONObject.parseArray(amountGiftActivity.getRelatedRules(), WxVtwoActivityRuleDetail.class)); | |||
| } | |||
| WxVtwoActivityAward activityAwardQ = new WxVtwoActivityAward(); | |||
| activityAwardQ.setTenantId(tenantId); | |||
| activityAwardQ.setActivityId(id); | |||
| List<WxVtwoActivityAward> activityAwardList = wxVtwoActivityAwardMapper.findList(activityAwardQ); | |||
| List<WxVtwoActivityAward> activityAwardList = wxVtwoActivityAwardService.findActivityAwardList(id, tenantId); | |||
| amountGiftActivity.setAwardList(activityAwardList); | |||
| if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(amountGiftActivity.getMerchantRule())){ | |||
| List<WxVtwoActivityMerchant> activityMerchantList = wxVtwoActivityMerchantService.getActivityMerchantList(id,tenantId); | |||
| @@ -37,9 +37,6 @@ public class WxVtwoCashBackActivityServiceImpl extends ServiceImpl<WxVtwoCashBac | |||
| @Autowired | |||
| private WxVtwoCashBackActivityMapper wxVtwoCashBackActivityMapper; | |||
| @Autowired | |||
| private WxVtwoCashBackAwardMapper wxVtwoCashBackAwardMapper; | |||
| @Autowired | |||
| private WxVtwoActivityMerchantMapper wxVtwoActivityMerchantMapper; | |||
| @@ -207,7 +204,7 @@ public class WxVtwoCashBackActivityServiceImpl extends ServiceImpl<WxVtwoCashBac | |||
| WxVtwoCashBackAward cashBackAwardQ = new WxVtwoCashBackAward(); | |||
| cashBackAwardQ.setTenantId(tenantId); | |||
| cashBackAwardQ.setActivityId(id); | |||
| List<WxVtwoCashBackAward> activityAwardList = wxVtwoCashBackAwardMapper.findList(cashBackAwardQ); | |||
| List<WxVtwoCashBackAward> activityAwardList = wxVtwoCashBackAwardService.findActivityAwardList(id,tenantId); | |||
| Map<Integer, List<WxVtwoCashBackAward>> activityAwardMap = activityAwardList.stream().collect(Collectors.groupingBy(WxVtwoCashBackAward::getModelType)); | |||
| cashBackActivity.setAmountRulesObject(activityAwardMap.get(EnumOfflineActivityAwardsModeType.AMOUNT.getCode())); | |||
| cashBackActivity.setRelatedRulesObject(activityAwardMap.get(EnumOfflineActivityAwardsModeType.COUNT.getCode())); | |||
| @@ -12,9 +12,9 @@ import com.iformall.mapper.WxVtwoCashBackAwardMapper; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.*; | |||
| import java.util.function.Function; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -71,6 +71,20 @@ public class WxVtwoCashBackAwardServiceImpl extends ServiceImpl<WxVtwoCashBackAw | |||
| wxVtwoCashBackAwardMapper.insertList(awardList); | |||
| } | |||
| @Override | |||
| public List<WxVtwoCashBackAward> findActivityAwardList(Long activityId, String tenantId) { | |||
| WxVtwoCashBackAward cashBackAwardQ = new WxVtwoCashBackAward(); | |||
| cashBackAwardQ.setTenantId(tenantId); | |||
| cashBackAwardQ.setActivityId(activityId); | |||
| return wxVtwoCashBackAwardMapper.findList(cashBackAwardQ); | |||
| } | |||
| @Override | |||
| public Map<Long, WxVtwoCashBackAward> findActivityAwardMap(Long activityId, String tenantId) { | |||
| List<WxVtwoCashBackAward> activityAwardList = this.findActivityAwardList(activityId, tenantId); | |||
| return activityAwardList.stream().collect(Collectors.toMap(WxVtwoCashBackAward::getId, Function.identity())); | |||
| } | |||
| } | |||
| @@ -12,10 +12,7 @@ import com.iformall.common.Result; | |||
| import com.iformall.domain.po.*; | |||
| import com.iformall.domain.po.base.BaseEntity; | |||
| import com.iformall.domain.po.base.TenantEntity; | |||
| import com.iformall.domain.vo.OfflineActivityRecordStatistics; | |||
| import com.iformall.domain.vo.WxVtwoActivityOrderStatistics; | |||
| import com.iformall.domain.vo.WxVtwoActivityRule; | |||
| import com.iformall.domain.vo.WxVtwoActivityRuleDetail; | |||
| import com.iformall.domain.vo.*; | |||
| import com.iformall.enums.*; | |||
| import com.iformall.exception.MallinkException; | |||
| import com.iformall.mapper.*; | |||
| @@ -27,9 +24,12 @@ import org.springframework.transaction.annotation.Transactional; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.Collections; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.math.BigDecimal; | |||
| import java.math.RoundingMode; | |||
| import java.util.*; | |||
| import java.util.function.Function; | |||
| import static java.util.stream.Collectors.*; | |||
| /** | |||
| * @author xiaohu | |||
| @@ -43,9 +43,6 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl<WxVtwoPrizeD | |||
| @Autowired | |||
| private WxVtwoPrizeDrawActivityMapper wxVtwoPrizeDrawActivityMapper; | |||
| @Autowired | |||
| private WxVtwoActivityAwardMapper wxVtwoActivityAwardMapper; | |||
| @Autowired | |||
| private WxVtwoActivityMerchantMapper wxVtwoActivityMerchantMapper; | |||
| @@ -64,9 +61,25 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl<WxVtwoPrizeD | |||
| @Autowired | |||
| private WxVtwoActivityMerchantService wxVtwoActivityMerchantService; | |||
| @Autowired | |||
| private WxVtwoActivityOrderService wxVtwoActivityOrderService; | |||
| @Autowired | |||
| private WxVtwoActivityGrantService wxVtwoActivityGrantService; | |||
| @Autowired | |||
| private WxVtwoActivityGrantOrderService wxVtwoActivityGrantOrderService; | |||
| @Autowired | |||
| private WxVtwoActivityGrantAwardService wxVtwoActivityGrantAwardService; | |||
| @Autowired | |||
| private WxVtwoActivityGrantSettlementService wxVtwoActivityGrantSettlementService; | |||
| @Autowired | |||
| private ExcelService excelService; | |||
| @Override | |||
| public PageInfo<WxVtwoPrizeDrawActivity> listAsPage(WxVtwoPrizeDrawActivity prizeDrawActivity, Integer pageNum, Integer pageSize) { | |||
| handlerQuery(prizeDrawActivity); | |||
| @@ -214,10 +227,7 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl<WxVtwoPrizeD | |||
| prizeDrawActivity.setRelatedRulesObject(JSONObject.parseArray(prizeDrawActivity.getRelatedRules(), WxVtwoActivityRuleDetail.class)); | |||
| } | |||
| WxVtwoActivityAward activityAwardQ = new WxVtwoActivityAward(); | |||
| activityAwardQ.setTenantId(tenantId); | |||
| activityAwardQ.setActivityId(id); | |||
| List<WxVtwoActivityAward> activityAwardList = wxVtwoActivityAwardMapper.findList(activityAwardQ); | |||
| List<WxVtwoActivityAward> activityAwardList = wxVtwoActivityAwardService.findActivityAwardList(id, tenantId); | |||
| prizeDrawActivity.setAwardList(activityAwardList); | |||
| if(!EnumOfflineActivityMerchantType.ALL.getCode().equals(prizeDrawActivity.getMerchantRule())){ | |||
| List<WxVtwoActivityMerchant> activityMerchantList = wxVtwoActivityMerchantService.getActivityMerchantList(id,tenantId); | |||
| @@ -246,6 +256,104 @@ public class WxVtwoPrizeDrawActivityServiceImpl extends ServiceImpl<WxVtwoPrizeD | |||
| activity.setActivityStatus(prizeDrawActivity.getStatus()); | |||
| } | |||
| @Override | |||
| public void handlerGrantAwardPage(WxVtwoPrizeDrawActivity prizeDrawActivity,WxVtwoActivityGrant activityGrant) { | |||
| List<WxVtwoActivityOrder> orderList = wxVtwoActivityOrderService.findGrantOrder(activityGrant,activityGrant.getOrderIdList(),activityGrant.getOrderFilterIdList()); | |||
| wxVtwoActivityGrantService.handleFromOrder(prizeDrawActivity.getName(),activityGrant,orderList,false); | |||
| List<WxVtwoActivityAward> activityAwardList = wxVtwoActivityAwardService.findActivityAwardList(activityGrant.getActivityId(), activityGrant.getTenantId()); | |||
| activityGrant.setAwardList(activityAwardList); | |||
| int limitCount = 0; | |||
| List<WxVtwoActivityGrantRule> grantRuleList = new ArrayList<>(); | |||
| if(EnumOfflineActivityMode.ONE.getCode().equals(prizeDrawActivity.getAmountModel())){ | |||
| for(WxVtwoActivityOrder order:orderList){ | |||
| Integer order_limit = 0; | |||
| for (WxVtwoActivityRuleDetail rule :prizeDrawActivity.getAmountRulesObject().getRuleList()){ | |||
| if((rule.getMinAmount() == null || order.getOrderMoney().compareTo(rule.getMinAmount()) >= 0) | |||
| && (rule.getMaxAmount() == null || order.getOrderMoney().compareTo(rule.getMaxAmount()) <= 0)){ | |||
| order_limit = rule.getAwardCount(); | |||
| } | |||
| } | |||
| if(order_limit != null && order_limit > 0){ | |||
| WxVtwoActivityGrantRule grantRule = new WxVtwoActivityGrantRule(); | |||
| grantRule.setOrderId(order.getId()); | |||
| grantRule.setModeType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); | |||
| grantRule.setName("订单抽奖("+order.getOrderNo()+")"); | |||
| grantRule.setAwardLimit(order_limit); | |||
| grantRuleList.add(grantRule); | |||
| limitCount += order_limit; | |||
| } | |||
| } | |||
| }else{ | |||
| BigDecimal orderMoneySum = orderList.stream().filter(order -> EnumYesOrNo.YES.getCode().equals(order.getIsAmount())) | |||
| .map(WxVtwoActivityOrder::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| BigDecimal limitAmount = prizeDrawActivity.getAmountRulesObject().getLimitAmount(); | |||
| BigDecimal awardAmount = prizeDrawActivity.getAmountRulesObject().getAwardAmount(); | |||
| if(limitAmount == null || orderMoneySum.compareTo(limitAmount) > 0){ | |||
| if(awardAmount != null && awardAmount.compareTo(BigDecimal.ZERO) > 0){ | |||
| Integer order_limit = orderMoneySum.divide(awardAmount,0, RoundingMode.HALF_DOWN).intValue(); | |||
| if(order_limit > 0){ | |||
| WxVtwoActivityGrantRule grantRule = new WxVtwoActivityGrantRule(); | |||
| grantRule.setModeType(EnumOfflineActivityAwardsModeType.AMOUNT.getCode()); | |||
| grantRule.setName("订单总金额抽奖"); | |||
| grantRule.setAwardLimit(order_limit); | |||
| grantRuleList.add(grantRule); | |||
| limitCount += order_limit; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| //联单 | |||
| Integer jointCount = wxVtwoActivityOrderService.getJointCount(prizeDrawActivity.getRelatedModel(),orderList); | |||
| if(jointCount != 0){ | |||
| Map<Integer, WxVtwoActivityRuleDetail> jointCountMap = prizeDrawActivity.getRelatedRulesObject().stream().collect(toMap(WxVtwoActivityRuleDetail::getRelatedCount, Function.identity())); | |||
| WxVtwoActivityRuleDetail relatedRule = jointCountMap.get(jointCount); | |||
| if(relatedRule != null && relatedRule.getAwardCount() != null){ | |||
| Integer joint_limit = relatedRule.getAwardCount(); | |||
| if(joint_limit > 0){ | |||
| WxVtwoActivityGrantRule grantRule = new WxVtwoActivityGrantRule(); | |||
| grantRule.setModeType(EnumOfflineActivityAwardsModeType.COUNT.getCode()); | |||
| grantRule.setName("联单抽奖"); | |||
| grantRule.setAwardLimit(joint_limit); | |||
| grantRuleList.add(grantRule); | |||
| limitCount += joint_limit; | |||
| } | |||
| } | |||
| } | |||
| if(prizeDrawActivity.getAwardsLimit() != null && prizeDrawActivity.getAwardsLimit() > 0 | |||
| && prizeDrawActivity.getAwardsLimit() < limitCount){ | |||
| limitCount = prizeDrawActivity.getAwardsLimit(); | |||
| } | |||
| activityGrant.setAwardLimit(limitCount); | |||
| activityGrant.setRuleList(grantRuleList); | |||
| } | |||
| @Override | |||
| @Transactional(rollbackFor = Exception.class) | |||
| public void grantAward(WxVtwoPrizeDrawActivity prizeDrawActivity,WxVtwoActivityGrant activityGrant) { | |||
| List<WxVtwoActivityOrder> orderList = wxVtwoActivityOrderService.findGrantOrder(activityGrant,activityGrant.getOrderIdList(),activityGrant.getOrderFilterIdList()); | |||
| wxVtwoActivityGrantService.handleFromOrder(prizeDrawActivity.getName(),activityGrant,orderList,false); | |||
| wxVtwoActivityGrantService.saveOrUpdate(activityGrant); | |||
| wxVtwoActivityGrantOrderService.saveGrantOrder(activityGrant.getId(),activityGrant.getActivityId(),orderList); | |||
| wxVtwoActivityGrantAwardService.saveGrantAward(activityGrant); | |||
| wxVtwoActivityGrantSettlementService.saveGrantSettlement(activityGrant); | |||
| } | |||
| } | |||
| @@ -12,18 +12,14 @@ | |||
| <result property="activityName" column="activity_name" jdbcType="VARCHAR"/> | |||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||
| <result property="orderId" column="order_id" jdbcType="BIGINT"/> | |||
| <result property="orderAmount" column="order_amount" jdbcType="DECIMAL"/> | |||
| <result property="modeType" column="mode_type" jdbcType="SMALLINT"/> | |||
| <result property="minAmount" column="min_amount" jdbcType="DECIMAL"/> | |||
| <result property="maxAmount" column="max_amount" jdbcType="DECIMAL"/> | |||
| <result property="relatedCount" column="related_count" jdbcType="INTEGER"/> | |||
| <result property="awardId" column="award_id" jdbcType="BIGINT"/> | |||
| <result property="awardGrade" column="award_grade" jdbcType="INTEGER"/> | |||
| <result property="awardName" column="award_name" jdbcType="VARCHAR"/> | |||
| <result property="awardPrice" column="award_price" jdbcType="DECIMAL"/> | |||
| <result property="awardCount" column="award_count" jdbcType="INTEGER"/> | |||
| <result property="grantPrice" column="grant_price" jdbcType="DECIMAL"/> | |||
| <result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/> | |||
| <result property="shareRule" column="share_rule" jdbcType="SMALLINT"/> | |||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | |||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | |||
| <result property="status" column="status" jdbcType="SMALLINT"/> | |||
| @@ -34,11 +30,10 @@ | |||
| <sql id="allColumns"> | |||
| id,tenant_id,parent_tenant_id, | |||
| activity_id,activity_name,grant_id, | |||
| order_id,order_amount,mode_type, | |||
| min_amount,max_amount,related_count, | |||
| order_id,mode_type, | |||
| award_id,award_grade,award_name, | |||
| award_price,award_count,grant_price, | |||
| money_rule,mall_share_rate,merchant_share_rate, | |||
| share_rule,mall_share_rate,merchant_share_rate, | |||
| status,create_date,update_date | |||
| </sql> | |||
| @@ -91,4 +86,25 @@ | |||
| select <include refid="allColumns" /> from wx_vtwo_activity_grant_award | |||
| where id = #{id} and tenant_id=#{tenantId} | |||
| </select> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_vtwo_activity_grant_award | |||
| (id, | |||
| activity_id,activity_name,grant_id, | |||
| order_id,mode_type, | |||
| award_id,award_grade,award_name, | |||
| award_price,award_count,grant_price, | |||
| share_rule,mall_share_rate,merchant_share_rate, | |||
| create_date,update_date) | |||
| values | |||
| <foreach collection="grantAwardList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT}, | |||
| #{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR},#{item.grantId,jdbcType=BIGINT}, | |||
| #{item.orderId,jdbcType=BIGINT},#{item.modeType,jdbcType=SMALLINT}, | |||
| #{item.awardId,jdbcType=BIGINT},#{item.awardGrade,jdbcType=INTEGER},#{item.awardName,jdbcType=VARCHAR}, | |||
| #{item.awardPrice,jdbcType=DECIMAL},#{item.awardCount,jdbcType=INTEGER},#{item.grantPrice,jdbcType=DECIMAL}, | |||
| #{item.shareRule,jdbcType=SMALLINT},#{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL}, | |||
| #{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||
| @@ -64,4 +64,17 @@ | |||
| select <include refid="allColumns" /> from wx_vtwo_activity_grant_order | |||
| where id = #{id} and tenant_id=#{tenantId} | |||
| </select> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_vtwo_activity_grant_order | |||
| (id, | |||
| grant_id,activity_id,order_id, | |||
| is_amount, status) | |||
| values | |||
| <foreach collection="grantOrderList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT}, | |||
| #{item.grantId,jdbcType=BIGINT},#{item.activityId,jdbcType=BIGINT},#{item.orderId,jdbcType=BIGINT}, | |||
| #{item.isAmount,jdbcType=SMALLINT},#{item.status,jdbcType=SMALLINT}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||
| @@ -92,4 +92,27 @@ | |||
| FROM wx_vtwo_activity_grant_settlement | |||
| <include refid="dynamicWhereConditions" /> | |||
| </select> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_vtwo_activity_grant_settlement | |||
| (id, | |||
| activity_id,grant_id,grant_award_id, | |||
| award_id,grant_price,order_id, | |||
| order_no,order_amount,merchant_id, | |||
| order_ratio,order_grant_price,mall_share_rate, | |||
| merchant_share_rate,order_mall_share_price,order_merchant_share_price, | |||
| tax_amount,create_date, | |||
| update_date) | |||
| values | |||
| <foreach collection="settlementList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT}, | |||
| #{item.activityId,jdbcType=BIGINT},#{item.grantId,jdbcType=BIGINT},#{item.grantAwardId,jdbcType=BIGINT}, | |||
| #{item.awardId,jdbcType=BIGINT},#{item.grantPrice,jdbcType=DECIMAL},#{item.orderId,jdbcType=BIGINT}, | |||
| #{item.orderNo,jdbcType=VARCHAR},#{item.orderAmount,jdbcType=DECIMAL},#{item.merchantId,jdbcType=BIGINT}, | |||
| #{item.orderRatio,jdbcType=DECIMAL},#{item.orderGrantPrice,jdbcType=DECIMAL},#{item.mallShareRate,jdbcType=DECIMAL}, | |||
| #{item.merchantShareRate,jdbcType=DECIMAL},#{item.orderMallSharePrice,jdbcType=DECIMAL},#{item.orderMerchantSharePrice,jdbcType=DECIMAL}, | |||
| #{item.taxAmount,jdbcType=DECIMAL},#{item.createDate,jdbcType=TIMESTAMP}, | |||
| #{item.updateDate,jdbcType=TIMESTAMP}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||
| @@ -11,7 +11,7 @@ | |||
| <result property="activityId" column="activity_id" jdbcType="BIGINT"/> | |||
| <result property="activityName" column="activity_name" jdbcType="VARCHAR"/> | |||
| <result property="grantId" column="grant_id" jdbcType="BIGINT"/> | |||
| <result property="recordId" column="record_id" jdbcType="BIGINT"/> | |||
| <result property="orderId" column="order_id" jdbcType="BIGINT"/> | |||
| <result property="orderAmount" column="order_amount" jdbcType="DECIMAL"/> | |||
| <result property="modeType" column="mode_type" jdbcType="SMALLINT"/> | |||
| <result property="minAmount" column="min_amount" jdbcType="DECIMAL"/> | |||
| @@ -22,7 +22,7 @@ | |||
| <result property="cashBackRatio" column="cash_back_ratio" jdbcType="DECIMAL"/> | |||
| <result property="cashBackRule" column="cash_back_rule" jdbcType="SMALLINT"/> | |||
| <result property="cashBack" column="cash_back" jdbcType="DECIMAL"/> | |||
| <result property="moneyRule" column="money_rule" jdbcType="SMALLINT"/> | |||
| <result property="shareRule" column="share_rule" jdbcType="SMALLINT"/> | |||
| <result property="mallShareRate" column="mall_share_rate" jdbcType="DECIMAL"/> | |||
| <result property="merchantShareRate" column="merchant_share_rate" jdbcType="DECIMAL"/> | |||
| <result property="taxDeductionRules" column="tax_deduction_rules" jdbcType="VARCHAR"/> | |||
| @@ -35,10 +35,10 @@ | |||
| <sql id="allColumns"> | |||
| id,tenant_id,parent_tenant_id, | |||
| activity_id,activity_name,grant_id, | |||
| record_id,order_amount,mode_type, | |||
| order_id,order_amount,mode_type, | |||
| min_amount,max_amount,related_count, | |||
| award_id,award_name,cash_back_ratio, | |||
| cash_back_rule,cash_back,money_rule, | |||
| cash_back_rule,cash_back,share_rule, | |||
| mall_share_rate,merchant_share_rate,tax_deduction_rules, | |||
| tax_amount,status,create_date, | |||
| update_date | |||
| @@ -61,8 +61,8 @@ | |||
| <if test=" null != grantId "> | |||
| and `grant_id` = #{grantId} | |||
| </if> | |||
| <if test=" null != recordId "> | |||
| and `record_id` = #{recordId} | |||
| <if test=" null != orderId "> | |||
| and `order_id` = #{orderId} | |||
| </if> | |||
| <if test=" null != ids "> | |||
| @@ -83,4 +83,28 @@ | |||
| select <include refid="allColumns" /> from wx_vtwo_cash_back_grant_award | |||
| where id = #{id} and tenant_id=#{tenantId} | |||
| </select> | |||
| <insert id="insertList" parameterType="java.util.List"> | |||
| insert into wx_vtwo_cash_back_grant_award | |||
| (id, | |||
| activity_id,activity_name,grant_id, | |||
| order_id,order_amount,mode_type, | |||
| min_amount,max_amount,related_count, | |||
| award_id,award_name,cash_back_ratio, | |||
| cash_back_rule,cash_back,share_rule, | |||
| mall_share_rate,merchant_share_rate,tax_deduction_rules, | |||
| tax_amount,create_date, | |||
| update_date) | |||
| values | |||
| <foreach collection="grantAwardList" item="item" index="index" separator=","> | |||
| (#{item.id,jdbcType=BIGINT}, | |||
| #{item.activityId,jdbcType=BIGINT},#{item.activityName,jdbcType=VARCHAR},#{item.grantId,jdbcType=BIGINT}, | |||
| #{item.orderId,jdbcType=BIGINT},#{item.orderAmount,jdbcType=DECIMAL},#{item.modeType,jdbcType=SMALLINT}, | |||
| #{item.minAmount,jdbcType=DECIMAL},#{item.maxAmount,jdbcType=DECIMAL},#{item.relatedCount,jdbcType=INTEGER}, | |||
| #{item.awardId,jdbcType=BIGINT},#{item.awardName,jdbcType=VARCHAR},#{item.cashBackRatio,jdbcType=DECIMAL}, | |||
| #{item.cashBackRule,jdbcType=SMALLINT},#{item.cashBack,jdbcType=DECIMAL},#{item.shareRule,jdbcType=SMALLINT}, | |||
| #{item.mallShareRate,jdbcType=DECIMAL},#{item.merchantShareRate,jdbcType=DECIMAL},#{item.taxDeductionRules,jdbcType=VARCHAR}, | |||
| #{item.taxAmount,jdbcType=DECIMAL},#{item.createDate,jdbcType=TIMESTAMP},#{item.updateDate,jdbcType=TIMESTAMP}) | |||
| </foreach> | |||
| </insert> | |||
| </mapper> | |||