935090232@qq.com
2021-04-14 95f9ea7eb339c36cade6c67d0385c49ec2d81477
zq-erp/src/main/java/com/matrix/system/activity/service/ActivitySignAwardSetService.java
New file
@@ -0,0 +1,271 @@
package com.matrix.system.activity.service;
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.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.tools.WebUtil;
import com.matrix.system.activity.dao.ActivitySignAwardSetDao;
import com.matrix.system.activity.dao.ActivitySignReceiveRecordDao;
import com.matrix.system.activity.dto.*;
import com.matrix.system.activity.entity.ActivitySignAwardSet;
import com.matrix.system.activity.vo.ActivitiesListVo;
import com.matrix.system.activity.vo.AddSignAwardSetVo;
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.SignSetBasicJsonVo;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.shopXcx.bean.ShopActivities;
import com.matrix.system.shopXcx.dao.ShopActivitiesDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * @description 奖品设置表
 * @author yourName
 * @date 2021-03-31 16:57
 */
@Service
public class ActivitySignAwardSetService  extends ServiceImpl<ActivitySignAwardSetDao, ActivitySignAwardSet>{
   @Autowired
    private ShopActivitiesDao shopActivitiesDao;
   @Autowired
   private ActivitySignAwardSetDao activitySignAwardSetDao;
   @Autowired
   private ActivitySignReceiveRecordDao activitySignReceiveRecordDao;
   @Transactional
   public AjaxResult activitySignAwardSetService(AddSignAwardSetDto addSignAwardSetDto) {
      //获取当前登录人员信息
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        Long companyId = user.getCompanyId();
        /**
         * todo签到活动的唯一性
         */
        //新增活动主表信息
        ShopActivities shopActivities = new ShopActivities();
        shopActivities.setActName(addSignAwardSetDto.getActName());
        shopActivities.setActCode(addSignAwardSetDto.getActCode());
        shopActivities.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE);
        shopActivities.setActType(ShopActivities.ACTIVITIES_TYPE_SIGN);
        shopActivities.setActStatus(ShopActivities.ACTSTATUS_STATUS_RELEASE);
        shopActivities.setActBeginTime(addSignAwardSetDto.getBeginTime());
        shopActivities.setActEndTime(addSignAwardSetDto.getEndTime());
        shopActivities.setCompanyId(companyId);
      shopActivities.setCreateBy(user.getSuName());
      shopActivities.setUpdateBy(user.getSuName());
        //将基本信息转换成JSON字符串存储到活动主表的act_content字段
        SignSetBasicJsonDto signSetBasicJsonDto = addSignAwardSetDto.getSignSetBasicJsonDto();
      String json=JSON.toJSONString(signSetBasicJsonDto);
      shopActivities.setActContent(json);
      int insert = shopActivitiesDao.insert(shopActivities);
      if(insert > 0){
         //新增活动奖品信息
         List<ActivitySignAwardSet> activitySignAwardSets = addSignAwardSetDto.getActivitySignAwardSets();
         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);
            }
         }
      }else{
         return new AjaxResult(AjaxResult.STATUS_FAIL, "保存失败");
      }
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功");
   }
   public IPage<ActivitiesListVo> findActivitiesList(Page<ActivitiesListVo> page,
         ActivitiesListDto activitiesListDto) {
      return shopActivitiesDao.findActivitiesList(page,activitiesListDto);
   }
   @Transactional
   public AjaxResult beReady(BeReadyDto beReadyDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(beReadyDto);
        Long actId = beReadyDto.getActId();
        ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
        if(ObjectUtil.isEmpty(shopActivity)) {
           return AjaxResult.buildFailInstance("网络不通畅,请刷新页面");
        }
        /**
         * 未发布状态即使达到活动时间也不进入进行中状态
         */
        //未发布状态点击发布,状态变成未开始,且是开启状态
        shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_READY);
        shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_OPEN);
        shopActivitiesDao.updateByModel(shopActivity);
      return AjaxResult.buildSuccessInstance("操作成功");
   }
   public AjaxResult delRow(DelRowDto delRowDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(delRowDto);
        Long actId = delRowDto.getActId();
        ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
        if(ObjectUtil.isEmpty(shopActivity)) {
           return AjaxResult.buildFailInstance("网络不通畅,请刷新页面");
        }
        /**
         * 删除状态更新状态为已删除,只能查看活动统计
         */
        shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_DEL);
        shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE);
        shopActivitiesDao.updateByModel(shopActivity);
      return AjaxResult.buildSuccessInstance("操作成功");
   }
   public AjaxResult beClose(BeCloseDto beCloseDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(beCloseDto);
        Long actId = beCloseDto.getActId();
        ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
        if(ObjectUtil.isEmpty(shopActivity)) {
           return AjaxResult.buildFailInstance("网络不通畅,请刷新页面");
        }
        /**
         * 关闭状态
         */
        shopActivity.setActStatus(ShopActivities.ACTSTATUS_STATUS_END);
        shopActivity.setIsStart(ShopActivities.ACTIVITIES_STATUS_CLOSE);
        shopActivitiesDao.updateByModel(shopActivity);
      return AjaxResult.buildSuccessInstance("操作成功");
   }
   public IPage<SignReceiveListVo> findSignReceiveList(Page<SignReceiveListVo> page,
         SignReceiveListDto signReceiveListDto) {
      return activitySignReceiveRecordDao.findSignReceiveList(page,signReceiveListDto);
   }
   public AjaxResult findSignForUpdate(SignForUpdateDto signForUpdateDto) {
      //设置用户公司ID
        QueryUtil.setQueryLimitCom(signForUpdateDto);
        Long actId = signForUpdateDto.getActId();
        AjaxResult result= AjaxResult.buildSuccessInstance("查询成功");
        //获取对应的活动主表信息和对应的奖品设置信息
        AddSignAwardSetVo addSignAwardSetVo = new AddSignAwardSetVo();
        ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
        if(ObjectUtil.isNotEmpty(shopActivity)) {
           addSignAwardSetVo.setId(actId);
           addSignAwardSetVo.setActName(shopActivity.getActName());
           addSignAwardSetVo.setActCode(shopActivity.getActCode());
           addSignAwardSetVo.setBeginTime(shopActivity.getActBeginTime());
           addSignAwardSetVo.setEndTime(shopActivity.getActEndTime());
           String actContent = shopActivity.getActContent();
           SignSetBasicJsonVo signSetBasicJsonVo = JSON.parseObject(actContent, SignSetBasicJsonVo.class);
           addSignAwardSetVo.setSignSetBasicJsonDto(signSetBasicJsonVo);
           Map<String, Object> columnMap = new HashMap<String, Object>();
           columnMap.put("activity_id", actId);
           columnMap.put("company_id", signForUpdateDto.getCompanyId());
         List<ActivitySignAwardSet> activitySignAwardSets = activitySignAwardSetDao.selectByMap(columnMap);
         addSignAwardSetVo.setActivitySignAwardSets(activitySignAwardSets);
        }
        result.putInMap("addSignAwardSetVo", addSignAwardSetVo);
        return result;
   }
   @Transactional
   public AjaxResult updateSignAwardSet(UpdateSignAwardSetDto updateSignAwardSetDto) {
      //获取当前登录人员信息
        QueryUtil.setQueryLimitCom(updateSignAwardSetDto);
        SysUsers user = WebUtil.getSessionAttribute(MatrixConstance.LOGIN_KEY);
        Long actId = updateSignAwardSetDto.getActMainId();
        Long companyId = user.getCompanyId();
        ShopActivities shopActivity = shopActivitiesDao.selectById(actId);
        //更新活动主表信息
        shopActivity.setActName(updateSignAwardSetDto.getActName());
        shopActivity.setActCode(updateSignAwardSetDto.getActCode());
        shopActivity.setActBeginTime(updateSignAwardSetDto.getBeginTime());
        shopActivity.setActEndTime(updateSignAwardSetDto.getEndTime());
        shopActivity.setCompanyId(companyId);
        shopActivity.setCreateBy(user.getSuName());
        shopActivity.setUpdateBy(user.getSuName());
        //将基本信息转换成JSON字符串存储到活动主表的act_content字段
        SignSetBasicJsonDto signSetBasicJsonDto = updateSignAwardSetDto.getSignSetBasicJsonDto();
      String json=JSON.toJSONString(signSetBasicJsonDto);
      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", updateSignAwardSetDto.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 = updateSignAwardSetDto.getActivitySignAwardSets();
      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);
               activitySignAwardSetDao.insert(activitySignAwardSetUpdate);
            }else {
               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);
         }
      }
        return new AjaxResult(AjaxResult.STATUS_SUCCESS, "保存成功");
   }
   public IPage<CouponVo> selectCouponList(Page<CouponVo> page, CouponDto couponDto) {
      return activitySignReceiveRecordDao.selectCouponList(page,couponDto);
   }
   public IPage<GoodsVo> selectGoodsList(Page<GoodsVo> page, GoodsDto goodsDto) {
      return activitySignReceiveRecordDao.selectGoodsList(page,goodsDto);
   }
}