k94314517
2024-09-19 4df9fdf92a0a3461d53a08d797a63145af48e0c6
代码初始化
已添加2个文件
已修改15个文件
419 ■■■■■ 文件已修改
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/core/wx/MeetConstants.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/admin/request/BusinessOverDTO.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Rooms.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/RoomDetailResponse.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/RoomsResponse.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/InterestedListVO.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/PCWorkPlatformDataVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/admin/MeetingCloudController.java
@@ -15,6 +15,7 @@
import com.doumee.dao.web.response.MeetingDetailResponse;
import com.doumee.dao.web.response.MeetingListResponse;
import com.doumee.dao.web.response.MonthDataResponse;
import com.doumee.dao.web.response.RoomDetailResponse;
import com.doumee.service.business.BookingsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -136,8 +137,28 @@
    @PostMapping("/reservationCancel")
    public ApiResponse reservationCancel(@RequestBody BusinessOverDTO businessOverDTO, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo user = getLoginUser(token);
        businessOverDTO.setUserId(user.getId())   ;
        businessOverDTO.setUserId(user.getId());
        bookingsService.reservationCancel(businessOverDTO);
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("提前开始会议")
    @PostMapping("/startEarly")
    public ApiResponse startEarly(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo user = getLoginUser(token);
        businessOverDTO.setUserId(user.getId());
        businessOverDTO.setStartType(Constants.ZERO);
        bookingsService.startEarly(businessOverDTO);
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("开始会议")
    @PostMapping("/start")
    public ApiResponse start(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo user = getLoginUser(token);
        businessOverDTO.setUserId(user.getId());
        businessOverDTO.setStartType(Constants.ONE);
        bookingsService.start(businessOverDTO);
        return ApiResponse.success("操作成功");
    }
@@ -152,4 +173,5 @@
}
server/meeting/meeting_admin/src/main/java/com/doumee/cloud/web/MeetingApi.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.doumee.api.BaseController;
import com.doumee.config.annotation.LoginNoRequired;
import com.doumee.core.annotation.trace.Trace;
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.LoginUserInfo;
@@ -17,6 +18,7 @@
import com.doumee.dao.web.response.MeetingDetailResponse;
import com.doumee.dao.web.response.MeetingListResponse;
import com.doumee.dao.web.response.MonthDataResponse;
import com.doumee.dao.web.response.RoomDetailResponse;
import com.doumee.service.business.BookingsService;
import com.doumee.service.system.SystemUserService;
import io.swagger.annotations.Api;
@@ -162,5 +164,34 @@
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("提前开始会议")
    @PostMapping("/startEarly")
    public ApiResponse startEarly(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo user = getLoginUser(token);
        businessOverDTO.setUserId(user.getId());
        businessOverDTO.setStartType(Constants.ZERO);
        bookingsService.startEarly(businessOverDTO);
        return ApiResponse.success("操作成功");
    }
    @ApiOperation("开始会议")
    @PostMapping("/start")
    public ApiResponse start(@RequestBody BusinessOverDTO businessOverDTO,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
        LoginUserInfo user = getLoginUser(token);
        businessOverDTO.setUserId(user.getId());
        businessOverDTO.setStartType(Constants.ONE);
        bookingsService.start(businessOverDTO);
        return ApiResponse.success("操作成功");
    }
    @LoginNoRequired
    @ApiOperation("会议屏信息")
    @GetMapping("/meetScreenData")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "roomId", value = "会议室主键", required = true),
    })
    public ApiResponse<RoomDetailResponse> meetScreenData(@RequestParam Integer roomId) {
        return ApiResponse.success("查询成功",bookingsService.getRoomDetail(roomId));
    }
}
server/meeting/meeting_service/src/main/java/com/doumee/core/wx/MeetConstants.java
@@ -16,6 +16,9 @@
    //发送会议开始  å®šæ—¶æå‰å¤šå°‘分钟发送
    public static final String NOTICE_TIME = "NOTICE_TIME";
    public static final String SYSTEM ="SYSTEM";
    public static final String EARLY_START = "EARLY_START";
    public static final String SOON_START = "SOON_START";
    public static final String MEET_CODE_PREFIX = "MEET_CODE_PREFIX";
server/meeting/meeting_service/src/main/java/com/doumee/dao/admin/request/BusinessOverDTO.java
@@ -18,5 +18,7 @@
    private  String businessRemark;
    @ApiModelProperty(value = "用户主键",required = true)
    private  Integer userId  ;
    @ApiModelProperty(value = "开始类型 0 æå‰å¼€å§‹ 1 æ­£å¸¸å¼€å§‹",required = true)
    private  Integer startType  ;
}
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/BookingsMapper.java
@@ -24,7 +24,8 @@
    @Select(" select a.id , a.START_TIME , a.END_TIME , b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Y-%m-%d') as meetingDate , a.START_TIME as startTime, a.status ," +
            " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUser ," +
            " CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN ( (a.END_TIME < now()  AND a.`STATUS` = 0 ) or a.`STATUS` = 2 ) THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            //" CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN ( (a.END_TIME < now()  AND a.`STATUS` = 0 ) or a.`STATUS` = 2 ) THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            " CASE WHEN a.START_TIME_REAL IS NULL AND a.`STATUS` = 0 THEN 1  WHEN ( (a.END_TIME < now()  AND a.`STATUS` = 0 ) or a.`STATUS` = 2 ) THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            " b.IMGURL as imgUrl ," +
            " a.remark  " +
            " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
@@ -32,11 +33,21 @@
            " ${ew.customSqlSegment} ")
    IPage<MeetingListResponse> myMeetingPage(IPage<MeetingListResponse> page, @Param(Constants.WRAPPER) Wrapper wrapper);
    @Select(" select a.id , a.START_TIME , a.END_TIME , b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Y-%m-%d') as meetingDate , a.START_TIME as startTime, a.status ," +
            " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUser ," +
            //" CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN ( (a.END_TIME < now()  AND a.`STATUS` = 0 ) or a.`STATUS` = 2 ) THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            " CASE WHEN a.START_TIME_REAL IS NULL AND a.`STATUS` = 0 THEN 1  WHEN ( (a.END_TIME < now()  AND a.`STATUS` = 0 ) or a.`STATUS` = 2 ) THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            " b.IMGURL as imgUrl ," +
            " a.remark  " +
            " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
            " inner join system_user c on a.CREATOR = c.id  " +
            " ${ew.customSqlSegment} ")
    List<MeetingListResponse> meetingList(@Param(Constants.WRAPPER) Wrapper wrapper);
    @Select(" select a.id , a.START_TIME , a.END_TIME , b.id as roomId,  b.`NAME` as roomName , a.`NAME` as meetingName  ,date_format(a.START_TIME,'%Yå¹´%m月%d日') as meetingDate ," +
            " CONCAT(date_format(a.START_TIME,'%H:%i') , ' ~ ',date_format(a.END_TIME,'%H:%i')) as meetingTime,  c.REALNAME as bookingUserName ," +
            "  CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN a.END_TIME < now() AND a.`STATUS` = 0  THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            //"  CASE WHEN a.START_TIME > now() AND a.`STATUS` = 0 THEN 1  WHEN a.END_TIME < now() AND a.`STATUS` = 0  THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            "  CASE WHEN a.START_TIME_REAL IS NULL AND a.`STATUS` = 0 THEN 1  WHEN a.END_TIME < now() AND a.`STATUS` = 0  THEN 3 WHEN a.`STATUS` = 1 THEN 5 ELSE  2  END meetingStatus ," +
            " a.CONTENT as meetingContent, c.MOBILE as bookingUserMobile , e.`NAME` as bookingUserDepartment , a.CREATOR as bookingUserId  , a.remark  " +
            " from meeting_book a inner join meeting_rooms b  on a.ROOM_ID = b.ID  " +
            " left join system_user c on a.CREATOR = c.id " +
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Bookings.java
@@ -105,6 +105,9 @@
    @ApiModelProperty(value = "取消备注")
    private String doneInfo;
    @ApiModelProperty(value = "提前开始时间")
    private Date startTimeReal;
    @ApiModelProperty(value = "预约人")
    @TableField(exist = false)
    private String realName ;
server/meeting/meeting_service/src/main/java/com/doumee/dao/business/model/Rooms.java
@@ -1,8 +1,10 @@
package com.doumee.dao.business.model;
import cn.hutool.core.img.Img;
import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.core.model.LoginUserModel;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -73,6 +75,9 @@
    @ExcelColumn(name="容纳人数")
    private Integer limitNum;
    @ApiModelProperty(value = "会议室文件类型:0=图片(多图),1=视频,2=无")
    private Integer fileType;
    @ApiModelProperty(value = "会议室图片")
    @ExcelColumn(name="会议室图片")
    private String imgurl;
@@ -111,7 +116,9 @@
    @TableField(exist = false)
    private String imgFullUrl;
    @ApiModelProperty(value = "附件文件")
    @TableField(exist = false)
    private List<Multifile> multifileList;
}
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/MeetingListResponse.java
@@ -1,5 +1,6 @@
package com.doumee.dao.web.response;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -7,6 +8,7 @@
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
@@ -39,7 +41,7 @@
    @ApiModelProperty(value = "会议开始时间",hidden = true)
    private Date startTime;
    @ApiModelProperty(value = "状态 0已预约 1已撤销 ",hidden = true)
    @ApiModelProperty(value = "状态 0已预约 1已撤销 2已结束",hidden = true)
    private Integer status;
    @ApiModelProperty(value = "会议预约人")
@@ -48,6 +50,12 @@
    @ApiModelProperty(value = "会议室图片")
    private String imgUrl;
    @ApiModelProperty(value = "文件类型")
    private Integer fileType;
    @ApiModelProperty(value = "会议室附件信息")
    private List<Multifile> multifileList;
    @ApiModelProperty(value = "前缀")
    private String prefixUrl;
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/RoomDetailResponse.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.doumee.dao.web.response;
import com.doumee.dao.system.model.Multifile;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2023/3/23 9:25
 */
@Data
@ApiModel("会议室屏信息返回类")
public class RoomDetailResponse {
    @ApiModelProperty(value = "主键")
    private Integer id;
    @ApiModelProperty(value = "会议室名称")
    private String roomName;
    @ApiModelProperty(value = "会议室文件类型:0=图片(多图),1=视频,2=无")
    private Integer fileType;
    @ApiModelProperty(value = "二维码前缀")
    private String prefix;
    @ApiModelProperty(value = "会议室文件")
    private List<Multifile> multifileList;
    @ApiModelProperty(value = "会议列表")
    private List<MeetingListResponse> meetingListResponseList;
}
server/meeting/meeting_service/src/main/java/com/doumee/dao/web/response/RoomsResponse.java
@@ -8,6 +8,7 @@
import com.doumee.dao.business.model.ProjectRel;
import com.doumee.dao.business.model.RoomTime;
import com.doumee.dao.business.model.UserRel;
import com.doumee.dao.system.model.Multifile;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@@ -52,6 +53,9 @@
    @ApiModelProperty(value = "使用须知")
    private String tips;
    @ApiModelProperty(value = "会议室文件类型:0=图片(多图),1=视频,2=无")
    private Integer fileType;
    @ApiModelProperty(value = "参会人员")
    @TableField(exist = false)
    private List<UserRel> sysList;
@@ -59,4 +63,8 @@
    @ApiModelProperty(value = "服务项目")
    @TableField(exist = false)
    private List<ProjectRel> projectList;
    @ApiModelProperty(value = "附件文件")
    private List<Multifile> multifileList;
}
server/meeting/meeting_service/src/main/java/com/doumee/service/business/BookingsService.java
@@ -17,6 +17,7 @@
import com.doumee.dao.web.response.DateTimeResourceDate;
import com.doumee.dao.web.response.MeetingDetailResponse;
import com.doumee.dao.web.response.MeetingListResponse;
import com.doumee.dao.web.response.RoomDetailResponse;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
@@ -166,8 +167,6 @@
    /**
     * ä¼šè®®é¢„约记录取消
     * @param id
     * @param userId
     */
    void reservationCancel(BusinessOverDTO businessOverDTO);
@@ -210,4 +209,10 @@
    IPage<UserResponse> getUserPage(PageWrap<UserPageRequest> pageWrap);
    void reservationOver(BusinessOverDTO businessOverDTO);
    void start(BusinessOverDTO businessOverDTO);
    void startEarly(BusinessOverDTO businessOverDTO);
    RoomDetailResponse getRoomDetail(Integer roomId);
}
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/BookingsServiceImpl.java
@@ -841,19 +841,7 @@
                .orderByAsc(Constants.equalsInteger(pageWrap.getModel().getQueryType(),MeetConstants.ONE),"a.START_TIME");
        IPage<MeetingListResponse> page = bookingsMapper.myMeetingPage(pageWrap.toPage(), queryWrapper);
        String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
        page.getRecords().forEach(i -> {
            i.setPrefixUrl(path);
            if(i.getMeetingStatus().equals(Constants.ZERO)){
                if(i.getMeetingStatus()==Constants.ONE){
                    //开始前120分钟 å¤§äºŽå½“前时间 åˆ™æ˜¾ç¤ºå³å°†å¼€å§‹
                    if(DateUtil.afterMinutesDate(i.getStartTime(),-120).getTime()>System.currentTimeMillis()){
                        i.setMeetingStatus(4);
                    }
                }
            }
        });
        this.dealMeetingStatus(page.getRecords());
        return page;
    }
@@ -904,9 +892,7 @@
                .eq("BOOKING_ID", id)
                .eq("ISDELETED", MeetConstants.ZERO)
        ));
        //参会人员列表
        List<UserResponse> userResponseList = systemUserService.getUserList(id);
        String avatarPath = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode()
                +systemDictDataBiz.queryByCode(Constants.FTP,Constants.MEMBER_IMG).getCode();
@@ -1074,9 +1060,145 @@
                bookingTimeJoinMapper.updateById(bookingTime);
            }
        }
    }
    /**
     * æ­£å¸¸å¼€å§‹
     * @param businessOverDTO
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void start(BusinessOverDTO businessOverDTO) {
        this.startEarly(businessOverDTO);
    }
    /**
     * æå‰å¼€å§‹
     * @param businessOverDTO
     */
    @Override
    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
    public void startEarly(BusinessOverDTO businessOverDTO) {
        if(Objects.isNull(businessOverDTO)
                || Objects.isNull(businessOverDTO.getUserId())
                || Objects.isNull(businessOverDTO.getStartType())
                || Objects.isNull(businessOverDTO.getId())
        ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST);
        }
        Bookings bookings = bookingsMapper.selectById(businessOverDTO.getId());
        if (Objects.isNull(bookings)) {
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "未查询到预约记录");
        }
        Long userRelList = userRelMapper.selectCount(new QueryWrapper<UserRel>().lambda()
                .eq(UserRel::getIsdeleted,Constants.ZERO)
                .eq(UserRel::getObjId,bookings.getRoomId())
                .eq(UserRel::getObjType,Constants.ONE)
                .eq(UserRel::getUserId,businessOverDTO.getUserId()));
        if (!bookings.getCreator().equals(businessOverDTO.getUserId()) && userRelList <= 0) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "非你的预约记录,无法进行该操作");
        }
        if(!Constants.equalsInteger(bookings.getStatus(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议状态已流转,无法进行该操作");
        }
        if(Objects.nonNull(bookings.getStartTimeReal())){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议已开始,请勿重复操作");
        }
        if (System.currentTimeMillis() > bookings.getEndTime().getTime()) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "会议已结束,无法进行该操作");
        }
        if(Constants.equalsInteger(businessOverDTO.getStartType(),Constants.ZERO)){
            //根据配置获取提前开始的分钟数量
            String configMinute = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.EARLY_START).getCode();
            Integer beforeMinutes = StringUtils.isNotBlank(configMinute) ? Integer.valueOf(configMinute) : 120;
            if(DateUtil.afterMinutesDate(bookings.getStartTime(),-beforeMinutes).getTime()>System.currentTimeMillis()){
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"会议仅可以提前"+beforeMinutes+"分钟开始");
            }
        }else{
            if(bookings.getStartTime().getTime() > System.currentTimeMillis()){
                throw  new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"未到会议申请开始时间,无法进行开启");
            }
        }
        bookings.setStartTimeReal(new Date());
        bookings.setEditDate(new Date());
        bookings.setEditor(businessOverDTO.getUserId());
        bookingsMapper.updateById(bookings);
        //更新已结束但未结束的会议信息为已结束
        bookingsMapper.update(null,new UpdateWrapper<Bookings>()
                .lambda()
                .set(Bookings::getStatus,Constants.TWO)
                .set(Bookings::getDoneDate,new Date())
                .apply(" END_TIME < now() ")
                .eq(Bookings::getStatus,Constants.ZERO)
                .eq(Bookings::getRoomId,bookings.getRoomId())
        );
    }
    @Override
    public RoomDetailResponse getRoomDetail(Integer roomId){
        Rooms rooms =  roomsMapper.selectById(roomId);
        if(Objects.isNull(rooms) ||  !Constants.equalsInteger(rooms.getIsdeleted(),Constants.ZERO)
         || !Constants.equalsInteger(rooms.getStatus(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"会议室信息无效,请联系管理员");
        }
        RoomDetailResponse response = new RoomDetailResponse();
        response.setRoomName(rooms.getName());
        response.setFileType(rooms.getFileType());
        List<Multifile> multifileList = multifileJoinMapper.selectList(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,roomId)
                .eq(Multifile::getObjType,Constants.FOUR)
        );
        String prefix = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.MEET_CODE_PREFIX).getCode() ;
        response.setPrefix(prefix);
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
            for (Multifile multifile:multifileList) {
                multifile.setFileurlFull(path + multifile.getFileurl());
            }
            response.setMultifileList(multifileList);
        }
        //查询会议列表
        List<MeetingListResponse> meetingList = bookingsMapper.meetingList(
                new QueryWrapper<Bookings>()
                .eq( "b.id", rooms.getId())
                .eq("b.ISDELETED",MeetConstants.ZERO)
                .eq("b.STATUS",MeetConstants.ZERO)
                .eq("a.ISDELETED",MeetConstants.ZERO)
                .eq("a.status",Constants.ZERO)
                .like("a.start_time",DateUtil.getCurrDate())
                .orderByAsc("a.start_time")
        );
        this.dealMeetingStatus(meetingList);
        response.setMeetingListResponseList(meetingList);
        return response;
    }
    public void dealMeetingStatus(List<MeetingListResponse> meetingResponseList){
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(meetingResponseList)){
            String path = systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.FTP_RESOURCE_PATH).getCode() + systemDictDataBiz.queryByCode(MeetConstants.FTP, MeetConstants.PROJECTS).getCode();
            String configMinute = systemDictDataBiz.queryByCode(MeetConstants.SYSTEM, MeetConstants.SOON_START).getCode();
            Integer minute = StringUtils.isNotBlank(configMinute) ? Integer.valueOf(configMinute) : 120;
            for (MeetingListResponse m:meetingResponseList) {
                if(Constants.equalsInteger(m.getStatus(),Constants.ZERO)&&Constants.equalsInteger(m.getMeetingStatus(),Constants.ONE)){
                    //开始前120分钟 å¤§äºŽå½“前时间 åˆ™æ˜¾ç¤ºå³å°†å¼€å§‹
                    if(DateUtil.afterMinutesDate(m.getStartTime(),-minute).getTime()>System.currentTimeMillis()){
                        m.setMeetingStatus(4);
                    }
                }
                m.setPrefixUrl(path);
            }
        }
    }
    /**
     * å®šæ—¶å‘送会议 å³å°†å¼€å§‹é€šçŸ¥
     */
server/meeting/meeting_service/src/main/java/com/doumee/service/business/impl/RoomsServiceImpl.java
@@ -16,6 +16,7 @@
import com.doumee.dao.business.RoomsMapper;
import com.doumee.dao.business.join.*;
import com.doumee.dao.business.model.*;
import com.doumee.dao.system.model.Multifile;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.web.request.MeetingPageRequest;
import com.doumee.dao.web.request.RoomsRequest;
@@ -56,6 +57,9 @@
    private RoomsMapper roomsMapper;
    @Autowired
    private RoomsJoinMapper roomsJoinMapper;
    @Autowired
    private MultifileJoinMapper multifileJoinMapper;
    @Autowired
    private RoomTimeJoinMapper roomTimeJoinMapper;
@@ -90,7 +94,9 @@
        if (starttime.after(endtime) || starttime.equals(endtime)) {
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "日期区间错误");
        }
        if(!Constants.equalsInteger(rooms.getFileType(),Constants.TWO)&&CollectionUtils.isEmpty(rooms.getMultifileList())){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未上传文件图片");
        }
        rooms.setCreateDate(new Date());
        rooms.setIsdeleted(Constants.ZERO);
@@ -98,7 +104,21 @@
        rooms.setStatus(Constants.ZERO);
        rooms.setEditDate(rooms.getCreateDate());
        roomsMapper.insert(rooms);
        if(!Constants.equalsInteger(rooms.getFileType(),Constants.TWO)){
            List<Multifile> multifileList = rooms.getMultifileList();
            for (Multifile multifile:multifileList) {
                if(Objects.isNull(multifile)
                || StringUtils.isBlank(multifile.getFileurl())){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件参数错误");
                }
                multifile.setCreateDate(new Date());
                multifile.setObjId(rooms.getId());
                multifile.setObjType(Constants.FOUR);
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setCreator(user.getId());
            }
            multifileJoinMapper.insert(multifileList);
        }
        rooms.setStartTime(rooms.getStartTime()+":00");
        rooms.setEndTime(rooms.getEndTime()+":00");
        rooms.setStartTime(DateUtil.formatDate(starttime.getTime(), "yyyy-MM-dd HH:mm:ss"));
@@ -117,6 +137,7 @@
        if (StringUtils.isBlank(rooms.getName()) ||
                StringUtils.isBlank(rooms.getStartTime()) ||
                StringUtils.isBlank(rooms.getEndTime()) ||
                Objects.isNull(rooms.getFileType()) ||
                rooms.getIntervalTime() == null
        ) {
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
@@ -352,15 +373,43 @@
            rooms.setIntervalTime(null);
        }
        rooms.setEditDate(new Date());
        rooms.setEditor(user.getId());
//        if(!Constants.equalsInteger(rooms.getFileType(),Constants.TWO)&&StringUtils.isBlank(rooms.getImgurl())){
//            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"未上传文件图片");
//        }
//        if(Constants.equalsInteger(rooms.getFileType(),Constants.TWO)){
//            rooms.setImgurl(null);
//        }
        roomsMapper.update(rooms, Wrappers.<Rooms>lambdaUpdate()
                .set(Rooms::getFileType, rooms.getFileType())
                .set(Rooms::getLimitNum, rooms.getLimitNum())
                .set(Rooms::getTips, rooms.getTips())
                .set(Rooms::getImgurl, rooms.getImgurl())
                .eq(Rooms::getId, rooms.getId()));
        multifileJoinMapper.delete(new QueryWrapper<Multifile>().lambda()
                .eq(Multifile::getObjId,rooms.getId())
                .eq(Multifile::getObjType,Constants.FOUR)
        );
        if(!Constants.equalsInteger(rooms.getFileType(),Constants.TWO)){
            List<Multifile> multifileList = rooms.getMultifileList();
            for (Multifile multifile:multifileList) {
                if(Objects.isNull(multifile)
                        || StringUtils.isBlank(multifile.getFileurl())){
                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"附件参数错误");
                }
                multifile.setCreateDate(new Date());
                multifile.setObjId(rooms.getId());
                multifile.setObjType(Constants.FOUR);
                multifile.setIsdeleted(Constants.ZERO);
                multifile.setCreator(user.getId());
            }
            multifileJoinMapper.insert(multifileList);
        }
        rooms.setStartTime(rooms.getStartTime()+":00");
        rooms.setEndTime(rooms.getEndTime()+":00");
@@ -483,6 +532,19 @@
            findpr.leftJoin(Projects.class,Projects::getId,ProjectRel::getProjectId);
            List<ProjectRel> projectLisr=  projectRelJoinMapper.selectJoinList(ProjectRel.class,findpr);
            s.setProjectList(projectLisr);
            if(!Constants.equalsInteger(s.getFileType(),Constants.TWO)){
                List<Multifile > multifileList = multifileJoinMapper.selectList(new QueryWrapper<Multifile>().lambda()
                        .eq(Multifile::getObjId,s.getId())
                        .eq(Multifile::getObjType,Constants.FOUR)
                );
                if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){
                    for (Multifile multifile:multifileList) {
                        multifile.setFileurlFull(path + multifile.getFileurl());
                    }
                    s.setMultifileList(multifileList);
                }
            }
        });
        return PageData.from(result);
@@ -591,6 +653,13 @@
        List<ProjectRel> projectList=  projectRelJoinMapper.selectJoinList(ProjectRel.class,findProjectRel);
        roomsResponse.setProjectList(projectList);
        if(Objects.nonNull(roomsResponse.getFileType()) && !Constants.equalsInteger(roomsResponse.getFileType(),Constants.TWO)){
            roomsResponse.setMultifileList(
                     multifileJoinMapper.selectList(new QueryWrapper<Multifile>().lambda().eq(Multifile::getObjId,roomsResponse.getId())
                             .eq(Multifile::getObjType,Constants.FOUR))
            );
        }
        return roomsResponse;
    }
server/system_service/src/main/java/com/doumee/dao/system/model/Multifile.java
@@ -63,8 +63,8 @@
    @ExcelColumn(name="类型0图片 1视频 2其他")
    private Integer type;
    @ApiModelProperty(value = "关联对象类型 0会议室预定附件", example = "1")
    @ExcelColumn(name="关联对象类型 0会议室预定附件")
    @ApiModelProperty(value = "关联对象类型 0隐患现场情况 1隐患处理前情况 2隐患处理后情况 3隐患退回说明 4会议室文件", example = "1")
    @ExcelColumn(name="关联对象类型 0隐患现场情况 1隐患处理前情况 2隐患处理后情况 3隐患退回说明 4会议室文件")
    private Integer objType;
    @ApiModelProperty(value = "文件地址")
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/InterestedListVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.doumee.dao.admin.response;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Rk
 * @create 2024/2/26 11:02
 */
@Data
@ApiModel("工作台相关方数据")
public class InterestedListVO {
    @ApiModelProperty(value = "人数")
    private Long userNum;
    @ApiModelProperty(value = "名称")
    private String interestedName;
}
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/response/PCWorkPlatformDataVO.java
@@ -56,7 +56,8 @@
    @ApiModelProperty(value = "出园车次")
    private Long todayOutCarNum;
    @ApiModelProperty(value = "相关方数据")
    private List<InterestedListVO> interestedListVOList;
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/HiddenDangerServiceImpl.java
@@ -46,10 +46,13 @@
    @Autowired
    private HiddenDangerMapper hiddenDangerMapper;
    @Autowired
    private MultifileMapper multifileMapper;
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Autowired
    private MemberMapper memberMapper;
@@ -370,6 +373,7 @@
                .set(Notices::getReaded,Constants.ONE)
                .set(Notices::getStatus,Constants.ONE)
                .set(Notices::getParam2,hiddenDanger.getStatus())
                .set(Notices::getParam4,hiddenDanger.getLoginUserInfo().getMemberId())
                .eq(Notices::getObjId,hiddenDanger.getId())
                .eq(Notices::getObjType,Constants.THREE)
                .eq(Notices::getUserId,hiddenDanger.getLoginUserInfo().getMemberId())