From e423d56d730db1baed24f3f7dbbc4141038776b6 Mon Sep 17 00:00:00 2001
From: 935090232@qq.com <ak473600000>
Date: Fri, 18 Jun 2021 22:12:03 +0800
Subject: [PATCH] 修复每日业绩bug和优化赠送业绩计算方式
---
zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java | 356 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 351 insertions(+), 5 deletions(-)
diff --git a/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java b/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java
index c22744d..6caec1a 100644
--- a/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/activity/action/ActivitySignAwardSetAction.java
@@ -1,18 +1,19 @@
package com.matrix.system.activity.action;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.tools.StringUtils;
import com.matrix.core.tools.WebUtil;
+import com.matrix.system.activity.dao.ActivitySignAwardSetDao;
import com.matrix.system.activity.dto.*;
+import com.matrix.system.activity.entity.ActivitySignAwardSet;
import com.matrix.system.activity.service.ActivitySignAwardSetService;
-import com.matrix.system.activity.vo.ActivitiesListVo;
-import com.matrix.system.activity.vo.CouponVo;
-import com.matrix.system.activity.vo.GoodsVo;
-import com.matrix.system.activity.vo.SignReceiveListVo;
+import com.matrix.system.activity.vo.*;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.shopXcx.bean.ShopActivities;
@@ -23,7 +24,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-import java.util.List;
+import java.util.*;
/**
* @description 奖品设置表
@@ -38,6 +39,351 @@
private ActivitySignAwardSetService activitySignAwardSetService;
@Autowired
private ShopActivitiesDao shopActivitiesDao;
+ @Autowired
+ private ActivitySignAwardSetDao activitySignAwardSetDao;
+
+ /**
+ * 马上创建转盘抽奖
+ */
+ @PostMapping(value = "/createLuckyDrawSet")
+ public @ResponseBody
+ AjaxResult createLuckyDrawSet() {
+ //获取当前登录人员信息
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ Long companyId = user.getCompanyId();
+ //签到活动的唯一性
+ List<ShopActivities> shopActivitiesDone = shopActivitiesDao.selectOneByCompanyIdAndActType(companyId,ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW);
+ if(CollUtil.isNotEmpty(shopActivitiesDone)){
+ return new AjaxResult(AjaxResult.STATUS_FAIL, "转盘抽奖已经创建,请去活动管理菜单查看");
+ }
+ return new AjaxResult(AjaxResult.STATUS_SUCCESS, "");
+ }
+
+ /**
+ * 新增转盘抽奖
+ */
+ @PostMapping(value = "/addLuckyDrawSet")
+ public @ResponseBody
+ AjaxResult addLuckyDrawSet(@RequestBody AddLuckyDrawSetDto addLuckyDrawSetDto) {
+ //获取当前登录人员信息
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ Long companyId = user.getCompanyId();
+ //转盘抽奖活动的唯一性
+ List<ShopActivities> shopActivitiesDone = shopActivitiesDao.selectOneByCompanyIdAndActType(companyId,ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW);
+ if(CollUtil.isNotEmpty(shopActivitiesDone)){
+ return new AjaxResult(AjaxResult.STATUS_FAIL, "转盘抽奖只能创建一次");
+ }
+
+ //新增活动主表信息
+ ShopActivities shopActivities = new ShopActivities();
+ shopActivities.setActName(addLuckyDrawSetDto.getActName());
+ shopActivities.setActCode(addLuckyDrawSetDto.getActCode());
+ shopActivities.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE);
+ shopActivities.setActType(ShopActivities.ACTIVITIES_TYPE_LUCKYDRAW);
+ shopActivities.setActStatus(ShopActivities.ACTSTATUS_STATUS_RELEASE);
+ shopActivities.setActBeginTime(addLuckyDrawSetDto.getBeginTime());
+ shopActivities.setActEndTime(addLuckyDrawSetDto.getEndTime());
+ shopActivities.setCompanyId(companyId);
+ shopActivities.setCreateBy(user.getSuName());
+ shopActivities.setUpdateBy(user.getSuName());
+ //将基本信息转换成JSON字符串存储到活动主表的act_content字段
+ LuckyDrawBasicJsonDto luckyDrawBasicJsonDto = addLuckyDrawSetDto.getLuckyDrawBasicJsonDto();
+ String json= JSON.toJSONString(luckyDrawBasicJsonDto);
+ shopActivities.setActContent(json);
+ int insert = shopActivitiesDao.insert(shopActivities);
+ if(insert > 0){
+ //新增活动奖品信息
+ List<ActivitySignAwardSet> activitySignAwardSets = addLuckyDrawSetDto.getLuckyDrawAwardSets();
+ if(CollUtil.isNotEmpty(activitySignAwardSets)) {
+ for(ActivitySignAwardSet activitySignAwardSet : activitySignAwardSets) {
+ activitySignAwardSet.setCreateBy(user.getSuName());
+ activitySignAwardSet.setCreateTime(new Date());
+ activitySignAwardSet.setUpdateTime(new Date());
+ activitySignAwardSet.setUpdateBy(user.getSuName());
+ activitySignAwardSet.setCompanyId(companyId);
+ activitySignAwardSet.setActivityId(shopActivities.getId());
+ activitySignAwardSet.setAwardState(ActivitySignAwardSet.AWARDSTATE_WORK);
+ activitySignAwardSetDao.insert(activitySignAwardSet);
+ }
+ //生成中奖顺序
+
+ Long actId = shopActivities.getId();
+ List<ActivitySignAwardSet> activitySignAwardSetList = activitySignAwardSetDao
+ .selectActivitySignAwardSetByActIDAndCompanyIdAndAwardType(actId, companyId, ActivitySignAwardSet.AWARDSTATE_WORK,ActivitySignAwardSet.AWARDRULE_CUMULATIVEDAY);
+ if(CollUtil.isNotEmpty(activitySignAwardSetList)){
+ String awrdList = getAwrdList(activitySignAwardSets).toString();
+ ShopActivities shopActivitiesAward = shopActivitiesDao.selectById(actId);
+ String actContent = shopActivitiesAward.getActContent();
+ LuckyDrawAwardCodeListVo luckyDrawAwardCodeListVo = JSON.parseObject(actContent, LuckyDrawAwardCodeListVo.class);
+ luckyDrawAwardCodeListVo.setAwardLine(awrdList);
+ luckyDrawAwardCodeListVo.setAwrdLineIndex(0);
+ String awardJson= JSON.toJSONString(luckyDrawAwardCodeListVo);
+ shopActivitiesAward.setActContent(awardJson);
+ shopActivitiesDao.updateByModel(shopActivitiesAward);
+ }
+ }
+ }else{
+ return new AjaxResult(AjaxResult.STATUS_FAIL, "保存失败");
+ }
+ return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功");
+ }
+
+ //所有奖品ID后的集合
+ public List getAwrdList(List<ActivitySignAwardSet> activitySignAwardSets){
+ //插入所有奖品ID后的集合
+ LinkedList awardIdFinalList = new LinkedList<>();
+ if(CollUtil.isNotEmpty(activitySignAwardSets)){
+ //总数
+ int maxCount = 0;
+ HashMap<Long, ActivitySignAwardSet> integerStringHashMap = new HashMap<>();
+ for(ActivitySignAwardSet activitySignAwardSet : activitySignAwardSets){
+ //总共派发数量
+ int awardInventoryCnt = activitySignAwardSet.getAwardInventoryCnt();
+ integerStringHashMap.put(activitySignAwardSet.getId(),activitySignAwardSet);
+ maxCount = maxCount + awardInventoryCnt;
+ }
+ HashMap<Long, ActivitySignAwardSet> sortHashMap = sortHashMap(integerStringHashMap,2);
+ HashMap<Long, ActivitySignAwardSet> sortHashMapAec = sortHashMap(integerStringHashMap,1);
+ //获取奖品最多的ID
+ Long maxAwardIds = sortHashMap.keySet().stream().findFirst().get();
+ Long minAwardIds = sortHashMapAec.keySet().stream().findFirst().get();
+ //获取最大长度的奖品集合
+ List awardIdList = new LinkedList<Long>();
+ for(int i = 0; i< maxCount ; i++){
+ awardIdList.add(maxAwardIds);
+ }
+
+ Iterator<Map.Entry<Long, ActivitySignAwardSet>> entries = sortHashMap.entrySet().iterator();
+ //插入奖品
+ while (entries.hasNext()) {
+ Map.Entry<Long, ActivitySignAwardSet> entry = entries.next();
+ ActivitySignAwardSet activitySignAwardSetDone = entry.getValue();
+ int awardInventoryCnt = activitySignAwardSetDone.getAwardInventoryCnt();
+ Long awardIdNew = entry.getKey();
+ if(awardIdNew != maxAwardIds){
+ //分段之后的List
+ List splitLists = getSplitList(awardInventoryCnt, awardIdList);
+ for(int j = 0; j<awardInventoryCnt; j++){
+ List splitList = (List) splitLists.get(j);
+ //中间插入对应的奖品ID,如果和maxAwardIds相同,则索引+1
+ List<Long> listInsert = getListInsert(maxAwardIds, awardIdNew, splitList);
+ if(minAwardIds == awardIdNew){
+ awardIdFinalList.addAll(listInsert);
+ }
+ }
+ }
+ }
+ }
+ return awardIdFinalList;
+ }
+
+ //中间插入对应的奖品ID,如果和maxAwardIds相同,则索引+1
+ public static List<Long> getListInsert(Long awardOld,Long awardNew,List splitList){
+ //中间位置索引
+ LinkedList<Integer> indexs = new LinkedList<>();
+ int groupFlag = splitList.size() % 2 == 0 ? (splitList.size() / 2) : (splitList.size() / 2 + 1);
+ for(int j = groupFlag-1; j < splitList.size();j++){
+ if(splitList.get(j) == awardOld){
+ indexs.add(j);
+ }
+ }
+ if(CollUtil.isNotEmpty(indexs)){
+ splitList.set(indexs.get(0),awardNew);
+ }else{
+ splitList.add(groupFlag,awardNew);
+ }
+ return splitList;
+ }
+
+ //等份平分数组,最后剩余的添加到倒数第二个集合中
+ public static List<List<Long>> getSplitList(int splitNum, List<Long> list) {
+ LinkedList<List<Long>> splitList = new LinkedList<>();
+ // groupFlag >= 1
+ int groupFlag = list.size() % splitNum == 0 ? (list.size() / splitNum) : (list.size() / splitNum);
+ if(groupFlag * splitNum < list.size()){
+ for (int j = 1; j <= splitNum +1; j++) {
+ if ((j * groupFlag) <= list.size() ) {
+ splitList.add(list.subList(j * groupFlag - groupFlag, j * groupFlag));
+ } else if ((j * groupFlag) > list.size()) {
+ splitList.add(list.subList(j * groupFlag - groupFlag, list.size()));
+ }
+ }
+ }else if(groupFlag * splitNum > list.size()){
+ for (int j = 1; j < splitNum; j++) {
+ if ((j * groupFlag) <= list.size() ) {
+ splitList.add(list.subList(j * groupFlag - groupFlag, j * groupFlag));
+ } else if ((j * groupFlag) > list.size()) {
+ splitList.add(list.subList(j * groupFlag - groupFlag, list.size()));
+ }
+ }
+ }else{
+ for (int j = 1; j <= splitNum; j++) {
+ if ((j * groupFlag) <= list.size() ) {
+ splitList.add(list.subList(j * groupFlag - groupFlag, j * groupFlag));
+ } else if ((j * groupFlag) > list.size()) {
+ splitList.add(list.subList(j * groupFlag - groupFlag, list.size()));
+ }
+ }
+ }
+ return splitList;
+ }
+
+
+ //对于奖品排序 1:升序进行排,2是倒序就是o2-o1
+ public static HashMap<Long, ActivitySignAwardSet> sortHashMap(HashMap<Long, ActivitySignAwardSet> map,int type) {
+ // 首先拿到 map 的键值对集合
+ Set<Map.Entry<Long, ActivitySignAwardSet>> entrySet = map.entrySet();
+ // 将 set 集合转为 List 集合,为什么,为了使用工具类的排序方法
+ List<Map.Entry<Long, ActivitySignAwardSet>> list = new ArrayList<Map.Entry<Long, ActivitySignAwardSet>>(entrySet);
+ // 使用 Collections 集合工具类对 list 进行排序,排序规则使用匿名内部类来实现
+ Collections.sort(list, new Comparator<Map.Entry<Long, ActivitySignAwardSet>>() {
+ @Override
+ public int compare(Map.Entry<Long, ActivitySignAwardSet> o1, Map.Entry<Long, ActivitySignAwardSet> o2) {
+ if(type == 2){
+ //按照要求根据 升序进行排,如果是倒序就是o2-o1
+ return o2.getValue().getAwardInventoryCnt() - o1.getValue().getAwardInventoryCnt();
+ }
+ return o1.getValue().getAwardInventoryCnt() - o2.getValue().getAwardInventoryCnt();
+ }
+ });
+ //创建一个新的有序的 HashMap 子类的集合
+ LinkedHashMap<Long, ActivitySignAwardSet> linkedHashMap = new LinkedHashMap<Long, ActivitySignAwardSet>();
+ //将 List 中的数据存储在 LinkedHashMap 中
+ for (Map.Entry<Long, ActivitySignAwardSet> entry : list) {
+ linkedHashMap.put(entry.getKey(), entry.getValue());
+ }
+ //返回结果
+ return linkedHashMap;
+ }
+
+ /**
+ *进入修改
+ */
+ @ApiOperation(value = "进入修改")
+ @PostMapping(value = "/findLuckyDrawForUpdate")
+ public @ResponseBody
+ AjaxResult findLuckyDrawForUpdate(@RequestBody LuckyDrawForUpdateDto luckyDrawForUpdateDto) {
+ //设置用户公司ID
+ QueryUtil.setQueryLimitCom(luckyDrawForUpdateDto);
+ Long actId = luckyDrawForUpdateDto.getActId();
+ AjaxResult result= AjaxResult.buildSuccessInstance("查询成功");
+ //获取对应的活动主表信息和对应的奖品设置信息
+ AddLuckyDrawSetVo addLuckyDrawSetVo = new AddLuckyDrawSetVo();
+ ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
+ if(ObjectUtil.isNotEmpty(shopActivity)) {
+ addLuckyDrawSetVo.setId(actId);
+ addLuckyDrawSetVo.setActName(shopActivity.getActName());
+ addLuckyDrawSetVo.setActCode(shopActivity.getActCode());
+ addLuckyDrawSetVo.setBeginTime(shopActivity.getActBeginTime());
+ addLuckyDrawSetVo.setEndTime(shopActivity.getActEndTime());
+
+ String actContent = shopActivity.getActContent();
+ LuckyDrawBasicJsonVo luckyDrawBasicJsonVo = JSON.parseObject(actContent, LuckyDrawBasicJsonVo.class);
+ addLuckyDrawSetVo.setLuckyDrawBasicJsonVo(luckyDrawBasicJsonVo);
+
+ Map<String, Object> columnMap = new HashMap<String, Object>();
+ columnMap.put("activity_id", actId);
+ columnMap.put("company_id", luckyDrawForUpdateDto.getCompanyId());
+ List<ActivitySignAwardSet> activityAwardSets = activitySignAwardSetDao.selectByMap(columnMap);
+ addLuckyDrawSetVo.setActivityluckyDrawSets(activityAwardSets);
+ }
+ result.putInMap("addLuckyDrawSetVo", addLuckyDrawSetVo);
+ return result;
+ }
+ /**
+ * 保存
+ */
+ @PostMapping(value = "/updateLuckyDrawSet")
+ public @ResponseBody
+ AjaxResult updateLuckyDrawSet(@RequestBody UpdateLuckyDrawSetDto updateLuckyDrawSetDto) {
+ //获取当前登录人员信息
+ QueryUtil.setQueryLimitCom(updateLuckyDrawSetDto);
+ SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
+ Long actId = updateLuckyDrawSetDto.getActMainId();
+ Long companyId = user.getCompanyId();
+ ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
+ //更新活动主表信息
+ shopActivity.setActName(updateLuckyDrawSetDto.getActName());
+ shopActivity.setActCode(updateLuckyDrawSetDto.getActCode());
+ shopActivity.setActBeginTime(updateLuckyDrawSetDto.getBeginTime());
+ shopActivity.setActEndTime(updateLuckyDrawSetDto.getEndTime());
+ shopActivity.setCompanyId(companyId);
+ shopActivity.setCreateBy(user.getSuName());
+ shopActivity.setUpdateBy(user.getSuName());
+ //将基本信息转换成JSON字符串存储到活动主表的act_content字段
+ LuckyDrawBasicJsonDto luckyDrawBasicJsonDto = updateLuckyDrawSetDto.getLuckyDrawBasicJsonDto();
+ String json=JSON.toJSONString(luckyDrawBasicJsonDto);
+ shopActivity.setActContent(json);
+ shopActivitiesDao.updateByModel(shopActivity);
+ /**
+ * 比较两个奖品名单,多的新增,减少的更新为已失效,不变的更新
+ */
+ //原有的奖品
+ ArrayList<Long> arrayListOld = new ArrayList<>();
+ Map<String, Object> columnMap = new HashMap<String, Object>();
+ columnMap.put("activity_id", actId);
+ columnMap.put("company_id", updateLuckyDrawSetDto.getCompanyId());
+ List<ActivitySignAwardSet> activitySignAwardSetOld = activitySignAwardSetDao.selectByMap(columnMap);
+ if(CollUtil.isNotEmpty(activitySignAwardSetOld)) {
+ for(ActivitySignAwardSet activitySignAwardSetUpdate : activitySignAwardSetOld) {
+ Long actSubid = activitySignAwardSetUpdate.getId();
+ arrayListOld.add(actSubid);
+ }
+ }
+ //修改后的奖品
+ List<ActivitySignAwardSet> activitySignAwardSetsUpdate = updateLuckyDrawSetDto.getActivityAwardSets();
+ ArrayList<Long> arrayListUpdate = new ArrayList<>();
+ if(CollUtil.isNotEmpty(activitySignAwardSetsUpdate)) {
+ for(ActivitySignAwardSet activitySignAwardSetUpdate : activitySignAwardSetsUpdate) {
+ Long actSubid = activitySignAwardSetUpdate.getId();
+ //如果ID为空则新增,不为空则修改
+ if(ObjectUtil.isEmpty(actSubid)) {
+ activitySignAwardSetUpdate.setCreateBy(user.getSuName());
+ activitySignAwardSetUpdate.setCreateTime(new Date());
+ activitySignAwardSetUpdate.setUpdateTime(new Date());
+ activitySignAwardSetUpdate.setUpdateBy(user.getSuName());
+ activitySignAwardSetUpdate.setCompanyId(companyId);
+ activitySignAwardSetUpdate.setActivityId(actId);
+ activitySignAwardSetUpdate.setAwardState(ActivitySignAwardSet.AWARDSTATE_WORK);
+ activitySignAwardSetDao.insert(activitySignAwardSetUpdate);
+ }else {
+ activitySignAwardSetUpdate.setAwardState(ActivitySignAwardSet.AWARDSTATE_WORK);
+ activitySignAwardSetDao.updateById(activitySignAwardSetUpdate);
+ arrayListUpdate.add(actSubid);
+ }
+ }
+ }
+ //比较获取原来的比现在多出来的奖品,修改状态为失效
+ boolean removeAll = arrayListOld.removeAll(arrayListUpdate);
+ if(removeAll && CollUtil.isNotEmpty(arrayListOld)) {
+ for(long id : arrayListOld) {
+ ActivitySignAwardSet activitySignAwardSetDel = activitySignAwardSetDao.selectById(id);
+ activitySignAwardSetDel.setAwardState(ActivitySignAwardSet.AWARDSTATE_UNWORK);
+ activitySignAwardSetDao.updateById(activitySignAwardSetDel);
+ }
+ }
+
+ //生成中奖顺序
+ List<ActivitySignAwardSet> activitySignAwardSetList = activitySignAwardSetDao
+ .selectActivitySignAwardSetByActIDAndCompanyIdAndAwardType(actId, companyId, ActivitySignAwardSet.AWARDSTATE_WORK,ActivitySignAwardSet.AWARDRULE_CUMULATIVEDAY);
+ if(CollUtil.isNotEmpty(activitySignAwardSetList)){
+ String awrdList = getAwrdList(activitySignAwardSetList).toString();
+ ShopActivities shopActivitiesAward = shopActivitiesDao.selectById(actId);
+ String actContent = shopActivitiesAward.getActContent();
+ LuckyDrawAwardCodeListVo luckyDrawAwardCodeListVo = JSON.parseObject(actContent, LuckyDrawAwardCodeListVo.class);
+ luckyDrawAwardCodeListVo.setAwardLine(awrdList);
+ luckyDrawAwardCodeListVo.setAwrdLineIndex(0);
+ String awardJson= JSON.toJSONString(luckyDrawAwardCodeListVo);
+ shopActivitiesAward.setActContent(awardJson);
+ shopActivitiesDao.updateByModel(shopActivitiesAward);
+ }
+ return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功");
+ }
+
+ public IPage<ActivitiesListVo> findActivitiesList(Page<ActivitiesListVo> page,
+ ActivitiesListDto activitiesListDto) {
+ return shopActivitiesDao.findActivitiesList(page,activitiesListDto);
+ }
/**
* 马上创建签到活动
--
Gitblit v1.9.1