fuliqi
2024-07-04 ae58bdb65b5c0f052801a291a7b48916bc2d5730
src/main/java/com/ycl/jxkg/service/impl/MeetServiceImpl.java
@@ -1,29 +1,31 @@
package com.ycl.jxkg.service.impl;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.base.SystemCode;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.entity.Meet;
import com.ycl.jxkg.domain.form.MeetForm;
import com.ycl.jxkg.domain.query.MeetQuery;
import com.ycl.jxkg.domain.vo.MeetVO;
import com.ycl.jxkg.enums.MeetStatusEnum;
import com.ycl.jxkg.mapper.ClassesUserMapper;
import com.ycl.jxkg.mapper.MeetMapper;
import com.ycl.jxkg.rabbitmq.msg.MeetStatusMsg;
import com.ycl.jxkg.rabbitmq.product.Producer;
import com.ycl.jxkg.service.MeetService;
import com.ycl.jxkg.base.Result;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.jxkg.domain.form.MeetForm;
import com.ycl.jxkg.domain.vo.MeetVO;
import com.ycl.jxkg.domain.query.MeetQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import com.ycl.jxkg.utils.DateTimeUtil;
import com.ycl.jxkg.utils.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@@ -43,6 +45,7 @@
    private WebContext webContext;
    @Autowired
    private ClassesUserMapper classesUserMapper;
    private final Producer producer;
    /**
     * 添加
     * @param form
@@ -53,7 +56,11 @@
        Meet entity = MeetForm.getEntityByForm(form, null);
        entity.setStatus(MeetStatusEnum.Wait.getCode());
        entity.setCreateUser(webContext.getCurrentUser().getId());
        baseMapper.insert(entity);
        // 设置乐观锁版本
        entity.setUpdateVersion(0);
        if (baseMapper.insert(entity) > 0) {
            this.sendMQ(entity, 0);
        }
        return Result.ok("添加成功");
    }
@@ -69,7 +76,10 @@
        // 为空抛IllegalArgumentException,做全局异常处理
        Assert.notNull(entity, "记录不存在");
        BeanUtils.copyProperties(form, entity);
        baseMapper.updateById(entity);
        // 如果修改成功发送mq消息
        if (baseMapper.updateById(entity) > 0) {
            this.sendMQ(entity, entity.getUpdateVersion() + 1);
        }
        return Result.ok("修改成功");
    }
@@ -131,6 +141,19 @@
        return Result.ok().data(page.getRecords()).total(page.getTotal());
    }
    @Override
    public Result start(MeetForm form) {
        Meet entity = baseMapper.selectById(form.getId());
        // 为空抛IllegalArgumentException,做全局异常处理
        Assert.notNull(entity, "记录不存在");
        BeanUtils.copyProperties(form, entity);
        // 不使用updateById这种方式,避免乐观锁加一。
        new LambdaUpdateChainWrapper<>(meetMapper)
                .eq(Meet::getId, entity.getId())
                .update();
        return Result.ok();
    }
    /**
     * 根据id查找
     * @param id
@@ -140,7 +163,11 @@
    public Result detail(Integer id) {
        MeetVO vo = baseMapper.getById(id);
        Assert.notNull(vo, "记录不存在");
        return Result.ok().data(vo);
        if(vo.getStatus().equals(MeetStatusEnum.Starting.getCode())){
            return Result.ok();
        }else {
            return Result.fail(SystemCode.InnerError.getCode(),"房间尚未开始或已结束");
        }
    }
    /**
@@ -155,4 +182,19 @@
                .collect(Collectors.toList());
        return Result.ok().data(vos);
    }
    /**
     * 发送mq消息
     *
     * @param entity 考试实体类
     * @param version 乐观锁版本
     */
    public void sendMQ(Meet entity, Integer version) {
        MeetStatusMsg finishedMsg = new MeetStatusMsg();
        finishedMsg.setVersion(version);
        finishedMsg.setMeetId(entity.getId());
        finishedMsg.setMeetStatus(MeetStatusEnum.End.getCode());
        producer.meetMsg(entity.getId(), JSON.toJSONString(finishedMsg), DateTimeUtil.getTwoTimeDiffMS(entity.getEndTime(), new Date()));
    }
}