大屏,消息
This commit is contained in:
@ -6,6 +6,7 @@ import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -41,16 +42,20 @@ import org.dromara.web.domain.vo.TenantListVo;
|
||||
import org.dromara.web.service.IAuthStrategy;
|
||||
import org.dromara.web.service.SysLoginService;
|
||||
import org.dromara.web.service.SysRegisterService;
|
||||
import org.dromara.websocket.domain.ChatGroup;
|
||||
import org.dromara.websocket.service.Impl.ChatGroupServiceImpl;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 认证
|
||||
@ -72,6 +77,7 @@ public class AuthController {
|
||||
private final ISysSocialService socialUserService;
|
||||
private final ISysClientService clientService;
|
||||
private final ScheduledExecutorService scheduledExecutorService;
|
||||
private final ChatGroupServiceImpl chatGroupService;
|
||||
|
||||
|
||||
/**
|
||||
@ -101,13 +107,10 @@ public class AuthController {
|
||||
// 登录
|
||||
LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
|
||||
|
||||
// Long userId = LoginHelper.getUserId();
|
||||
// scheduledExecutorService.schedule(() -> {
|
||||
// SseMessageDto dto = new SseMessageDto();
|
||||
// dto.setMessage("欢迎登录新能源项目管理系统");
|
||||
// dto.setUserIds(List.of(userId));
|
||||
// SseMessageUtils.publishMessage(dto);
|
||||
// }, 5, TimeUnit.SECONDS);
|
||||
Long userId = LoginHelper.getUserId();
|
||||
scheduledExecutorService.schedule(() -> {
|
||||
chatGroupService.createSystem(userId,client.getClientKey());
|
||||
}, 5, TimeUnit.SECONDS);
|
||||
return R.ok(loginVo);
|
||||
}
|
||||
|
||||
|
@ -1,22 +1,34 @@
|
||||
package org.dromara.bigscreen.controller;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.dromara.bigscreen.domain.dto.WeatherQueryReq;
|
||||
import org.dromara.bigscreen.domain.vo.EnterpriseKeyIndexVo;
|
||||
import org.dromara.bigscreen.domain.vo.OutputValueComparisonVo;
|
||||
import org.dromara.bigscreen.domain.vo.ProjectProgressAnalysisVo;
|
||||
import org.dromara.bigscreen.domain.vo.*;
|
||||
import org.dromara.bigscreen.service.EnterpriseBigScreenService;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.manager.weathermanager.vo.WeatherVo;
|
||||
import org.dromara.project.domain.BusAttendance;
|
||||
import org.dromara.project.domain.BusProject;
|
||||
import org.dromara.project.domain.BusUserProjectRelevancy;
|
||||
import org.dromara.project.service.IBusAttendanceService;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.project.service.IBusUserProjectRelevancyService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.LocalDate;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 企业级大屏
|
||||
@ -32,6 +44,16 @@ public class EnterpriseBigScreenController {
|
||||
@Resource
|
||||
private EnterpriseBigScreenService enterpriseBigScreenService;
|
||||
|
||||
@Resource
|
||||
private IBusUserProjectRelevancyService userProjectRelevancyService;
|
||||
|
||||
@Resource
|
||||
private IBusAttendanceService attendanceService;
|
||||
|
||||
@Resource
|
||||
private IBusProjectService projectService;
|
||||
|
||||
|
||||
/**
|
||||
* 获取关键指标
|
||||
*/
|
||||
@ -80,4 +102,109 @@ public class EnterpriseBigScreenController {
|
||||
return R.ok(days);
|
||||
}
|
||||
|
||||
/**
|
||||
* 人数统计
|
||||
*/
|
||||
@SaCheckPermission("enterprise:bigScreen:peopleCount")
|
||||
@GetMapping("/peopleCount")
|
||||
public R<PeopleCountVo> getProjectPeopleCount() {
|
||||
PeopleCountVo peopleCountVo = new PeopleCountVo();
|
||||
|
||||
List<BusUserProjectRelevancy> list = userProjectRelevancyService.list();
|
||||
//0系统管理员 1普通人员 2项目管理员 3分包人员
|
||||
peopleCountVo.setConstructionPersonnelCount(list.stream().filter(item -> "1".equals(item.getUserType()))
|
||||
.map(BusUserProjectRelevancy::getUserId)
|
||||
.distinct().count());
|
||||
|
||||
peopleCountVo.setManagersCount(list.stream().filter(item -> "2".equals(item.getUserType()))
|
||||
.map(BusUserProjectRelevancy::getUserId)
|
||||
.distinct().count());
|
||||
|
||||
peopleCountVo.setSubcontractorsCount(list.stream().filter(item -> "3".equals(item.getUserType()))
|
||||
.map(BusUserProjectRelevancy::getUserId)
|
||||
.distinct().count());
|
||||
|
||||
return R.ok(peopleCountVo);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 出勤人数统计
|
||||
*/
|
||||
@SaCheckPermission("enterprise:bigScreen:allAttendanceCount")
|
||||
@GetMapping("/allAttendanceCount")
|
||||
public R<TodayAttendanceCountVo> getAllAttendanceCount() {
|
||||
TodayAttendanceCountVo todayAttendanceCountVo = new TodayAttendanceCountVo();
|
||||
List<BusAttendance> list = attendanceService.list(Wrappers.<BusAttendance>lambdaQuery()
|
||||
.eq(BusAttendance::getClockDate, LocalDate.now())
|
||||
.in(BusAttendance::getClockStatus, Arrays.asList("1", "2", "3"))
|
||||
);
|
||||
|
||||
long attendanceCount = list.stream().map(BusAttendance::getUserId).distinct().count();
|
||||
todayAttendanceCountVo.setAttendanceCount(attendanceCount);
|
||||
|
||||
// 查询总人数
|
||||
List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list();
|
||||
long totalUserCount = relevancyList.stream().map(BusUserProjectRelevancy::getUserId).distinct().count();
|
||||
|
||||
// 计算考勤率(保留一位小数)
|
||||
if (totalUserCount > 0) {
|
||||
BigDecimal rate = new BigDecimal(attendanceCount * 100)
|
||||
.divide(new BigDecimal(totalUserCount), 1, RoundingMode.HALF_UP);
|
||||
todayAttendanceCountVo.setAttendanceRate(rate.doubleValue());
|
||||
} else {
|
||||
todayAttendanceCountVo.setAttendanceRate(0.0);
|
||||
}
|
||||
return R.ok(todayAttendanceCountVo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 每个项目的出勤人数
|
||||
*/
|
||||
@SaCheckPermission("enterprise:bigScreen:projectAttendanceCount")
|
||||
@GetMapping("/projectAttendanceCount")
|
||||
public R<List<ProjectAttendanceCountVo>> getProjectAttendanceCount() {
|
||||
|
||||
ArrayList<ProjectAttendanceCountVo> projectAttendanceCountVos = new ArrayList<>();
|
||||
|
||||
List<BusAttendance> list = attendanceService.list(Wrappers.<BusAttendance>lambdaQuery()
|
||||
.eq(BusAttendance::getClockDate, LocalDate.now())
|
||||
.in(BusAttendance::getClockStatus, Arrays.asList("1", "2", "3"))
|
||||
);
|
||||
List<BusUserProjectRelevancy> relevancyList = userProjectRelevancyService.list();
|
||||
|
||||
// 转换为 Map<projectId, 去重后的 userId 数量>
|
||||
Map<Long, Integer> projectUserCountMap = relevancyList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
BusUserProjectRelevancy::getProjectId,
|
||||
Collectors.mapping(
|
||||
BusUserProjectRelevancy::getUserId,
|
||||
Collectors.collectingAndThen(
|
||||
Collectors.toSet(),
|
||||
Set::size
|
||||
)
|
||||
)
|
||||
));
|
||||
for (Long projectId : projectUserCountMap.keySet()) {
|
||||
ProjectAttendanceCountVo projectAttendanceCountVo = new ProjectAttendanceCountVo();
|
||||
BusProject byId = projectService.getById(projectId);
|
||||
|
||||
if (byId == null) {
|
||||
continue;
|
||||
}
|
||||
projectAttendanceCountVo.setProjectName(byId.getProjectName());
|
||||
long count = list.stream().filter(item -> item.getProjectId().equals(projectId))
|
||||
.map(BusAttendance::getUserId)
|
||||
.distinct()
|
||||
.count();
|
||||
BigDecimal rate = new BigDecimal(count * 100)
|
||||
.divide(new BigDecimal(projectUserCountMap.get(projectId)), 1, RoundingMode.HALF_UP);
|
||||
projectAttendanceCountVo.setAttendanceRate(rate.doubleValue());
|
||||
}
|
||||
|
||||
return R.ok(projectAttendanceCountVos);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,22 @@
|
||||
package org.dromara.bigscreen.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class PeopleCountVo {
|
||||
|
||||
/**
|
||||
* 施工人员
|
||||
*/
|
||||
private Long constructionPersonnelCount;
|
||||
|
||||
/**
|
||||
* 分包人员
|
||||
*/
|
||||
private Long SubcontractorsCount;
|
||||
|
||||
/**
|
||||
* 管理人员
|
||||
*/
|
||||
private Long managersCount;
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package org.dromara.bigscreen.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ProjectAttendanceCountVo {
|
||||
|
||||
/**
|
||||
* 项目id
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 项目名称
|
||||
*/
|
||||
private String projectName;
|
||||
|
||||
/**
|
||||
* 考勤人数
|
||||
*/
|
||||
private Long attendanceCount;
|
||||
|
||||
/**
|
||||
* 考勤率
|
||||
*/
|
||||
private Double attendanceRate;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package org.dromara.bigscreen.domain.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class TodayAttendanceCountVo {
|
||||
|
||||
/**
|
||||
* 考勤人员数量
|
||||
*/
|
||||
private Long attendanceCount;
|
||||
|
||||
/**
|
||||
* 出勤率
|
||||
*/
|
||||
private Double attendanceRate;
|
||||
|
||||
}
|
@ -1,8 +1,11 @@
|
||||
package org.dromara.contractor.controller.app;
|
||||
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
@ -11,10 +14,13 @@ import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.contractor.domain.SubConstructionUser;
|
||||
import org.dromara.contractor.domain.dto.constructionuser.SubConstructionUserAuthenticationReq;
|
||||
import org.dromara.contractor.domain.dto.constructionuser.SubConstructionUserQueryReq;
|
||||
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserAppVo;
|
||||
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserOrcBankVo;
|
||||
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserOrcIdCardVo;
|
||||
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo;
|
||||
import org.dromara.contractor.service.ISubConstructionUserService;
|
||||
import org.dromara.project.domain.dto.projectteammember.BusProjectTeamMemberCreateReq;
|
||||
import org.dromara.project.service.IBusProjectTeamMemberService;
|
||||
import org.dromara.system.domain.vo.SysOssVo;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@ -34,6 +40,9 @@ public class SubConstructionUserAppController {
|
||||
@Resource
|
||||
private ISubConstructionUserService constructionUserService;
|
||||
|
||||
@Resource
|
||||
private IBusProjectTeamMemberService busProjectTeamMemberService;
|
||||
|
||||
/**
|
||||
* 查询施工人员列表
|
||||
*/
|
||||
@ -130,4 +139,21 @@ public class SubConstructionUserAppController {
|
||||
return R.ok(constructionUserService.faceComparison(file));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询未分配施工人员列表
|
||||
*/
|
||||
@GetMapping("/undistributedList")
|
||||
public TableDataInfo<SubConstructionUserAppVo> queryUndistributedList(SubConstructionUserQueryReq req, PageQuery pageQuery) {
|
||||
return constructionUserService.queryUndistributedList(req, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加项目班组
|
||||
*/
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/addTeam")
|
||||
public R<Long> add(@Validated(AddGroup.class) @RequestBody BusProjectTeamMemberCreateReq req) {
|
||||
return R.ok(busProjectTeamMemberService.insertByBo(req));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,85 @@
|
||||
package org.dromara.contractor.domain.vo.constructionuser;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.excel.annotation.ExcelDictFormat;
|
||||
import org.dromara.common.excel.convert.ExcelDictConvert;
|
||||
import org.dromara.common.translation.annotation.Translation;
|
||||
import org.dromara.common.translation.constant.TransConstant;
|
||||
import org.dromara.contractor.domain.SubConstructionUser;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
* 施工人员视图对象 bus_construction_user
|
||||
*
|
||||
* @author lilemy
|
||||
* @date 2025-03-07
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
@AutoMapper(target = SubConstructionUser.class)
|
||||
public class SubConstructionUserAppVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@ExcelProperty(value = "主键id")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 人员姓名
|
||||
*/
|
||||
@ExcelProperty(value = "人员姓名")
|
||||
private String userName;
|
||||
|
||||
/**
|
||||
* 联系电话
|
||||
*/
|
||||
@ExcelProperty(value = "联系电话")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 工种
|
||||
*/
|
||||
@ExcelProperty(value = "工种", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(dictType = "type_of_work")
|
||||
private String typeOfWork;
|
||||
|
||||
/**
|
||||
* 工种名
|
||||
*/
|
||||
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "typeOfWork",other = "type_of_work")
|
||||
private String typeOfWorkName;
|
||||
|
||||
/**
|
||||
* 用户Id
|
||||
*/
|
||||
private Long sysUserId;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String avatar;
|
||||
|
||||
/**
|
||||
* 入驻天数
|
||||
*/
|
||||
private Long days;
|
||||
|
||||
|
||||
/**
|
||||
* 用户性别(0男 1女 2未知)
|
||||
*/
|
||||
private String sex;
|
||||
}
|
@ -222,4 +222,8 @@ public interface ISubConstructionUserService extends IService<SubConstructionUse
|
||||
* @return 施工人员
|
||||
*/
|
||||
SubConstructionUser getBySysUserId(Long sysUserId);
|
||||
|
||||
|
||||
TableDataInfo<SubConstructionUserAppVo> queryUndistributedList(SubConstructionUserQueryReq req, PageQuery pageQuery);
|
||||
|
||||
}
|
||||
|
@ -66,10 +66,8 @@ import org.springframework.web.multipart.MultipartFile;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.Period;
|
||||
import java.time.YearMonth;
|
||||
import java.time.*;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -1297,4 +1295,42 @@ public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionU
|
||||
return reqBase64;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TableDataInfo<SubConstructionUserAppVo> queryUndistributedList(SubConstructionUserQueryReq req, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<SubConstructionUser> lqw = Wrappers.lambdaQuery();
|
||||
String userName = req.getUserName();
|
||||
String typeOfWork = req.getTypeOfWork();
|
||||
lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName);
|
||||
lqw.eq(ObjectUtils.isNotEmpty(typeOfWork), SubConstructionUser::getTypeOfWork, typeOfWork);
|
||||
|
||||
lqw.isNull(SubConstructionUser::getProjectId);
|
||||
lqw.isNull(SubConstructionUser::getTeamId);
|
||||
|
||||
Page<SubConstructionUser> result = this.page(pageQuery.build(), lqw);
|
||||
|
||||
ArrayList<SubConstructionUserAppVo> list = new ArrayList<>();
|
||||
for ( SubConstructionUser constructionUser : result.getRecords()){
|
||||
SubConstructionUserAppVo subConstructionUserAppVo = new SubConstructionUserAppVo();
|
||||
BeanUtils.copyProperties(constructionUser, subConstructionUserAppVo);
|
||||
SysUserVo sysUserVo = userService.selectUserById(subConstructionUserAppVo.getSysUserId());
|
||||
if(sysUserVo.getAvatar() != null)
|
||||
subConstructionUserAppVo.setAvatar(ossService.getById(sysUserVo.getAvatar()).getUrl());
|
||||
//计算日期
|
||||
Date createTime = sysUserVo.getCreateTime();
|
||||
Instant createInstant = createTime.toInstant();
|
||||
Instant nowInstant = Instant.now();
|
||||
long days = ChronoUnit.DAYS.between(
|
||||
createInstant.atZone(ZoneId.systemDefault()).toLocalDateTime(),
|
||||
nowInstant.atZone(ZoneId.systemDefault()).toLocalDateTime()
|
||||
);
|
||||
subConstructionUserAppVo.setDays(days);
|
||||
subConstructionUserAppVo.setSex(sysUserVo.getSex());
|
||||
|
||||
list.add(subConstructionUserAppVo);
|
||||
}
|
||||
|
||||
|
||||
return new TableDataInfo<>(list,result.getTotal());
|
||||
}
|
||||
}
|
||||
|
@ -40,4 +40,7 @@ public class DesVolumeCatalogQueryReq implements Serializable {
|
||||
|
||||
private String type;
|
||||
|
||||
|
||||
private String isUpload;
|
||||
|
||||
}
|
||||
|
@ -334,12 +334,17 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl<DesVolumeCatalogMap
|
||||
String volumeNumber = req.getVolumeNumber();
|
||||
String documentName = req.getDocumentName();
|
||||
String auditStatus = req.getAuditStatus();
|
||||
String isUpload = req.getIsUpload();
|
||||
// lqw.orderByDesc(DesVolumeCatalog::getCreateTime);
|
||||
lqw.orderByAsc(DesVolumeCatalog::getSerialNumber);
|
||||
lqw.like(StringUtils.isNotBlank(documentName), DesVolumeCatalog::getDocumentName, documentName);
|
||||
lqw.eq(StringUtils.isNotBlank(volumeNumber), DesVolumeCatalog::getVolumeNumber, volumeNumber);
|
||||
lqw.eq(ObjectUtils.isNotEmpty(projectId), DesVolumeCatalog::getProjectId, projectId);
|
||||
lqw.eq(StringUtils.isNotBlank(auditStatus), DesVolumeCatalog::getAuditStatus, auditStatus);
|
||||
|
||||
lqw.exists("1".equals(isUpload),"SELECT 1 FROM des_volume_file WHERE volume_catalog_id = des_volume_catalog.design");
|
||||
lqw.notExists("0".equals(isUpload),"SELECT 1 FROM des_volume_file WHERE volume_catalog_id = des_volume_catalog.design");
|
||||
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
@ -64,9 +64,8 @@ public class BusProjectAppController {
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册项目选择列表
|
||||
* 项目选择列表
|
||||
*/
|
||||
@SaIgnore
|
||||
@GetMapping("/register/list")
|
||||
public R<List<BusProjectVo>> registerList() {
|
||||
BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq();
|
||||
|
@ -4,7 +4,9 @@ import jakarta.annotation.Resource;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq;
|
||||
import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo;
|
||||
import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo;
|
||||
import org.dromara.project.service.IBusProjectTeamService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@ -12,6 +14,8 @@ import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目班组 app 接口
|
||||
*
|
||||
@ -34,4 +38,15 @@ public class BusProjectTeamAppController extends BaseController {
|
||||
@PathVariable Long id) {
|
||||
return R.ok(projectTeamService.queryForemanListById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询项目下的班组
|
||||
*/
|
||||
@GetMapping("/listByProject/{projectid}")
|
||||
public R<List<BusProjectTeamVo>> listByProject(@NotNull(message = "项目id不能为空")
|
||||
@PathVariable Long projectid) {
|
||||
BusProjectTeamQueryReq busProjectTeamQueryReq = new BusProjectTeamQueryReq();
|
||||
busProjectTeamQueryReq.setProjectId(projectid);
|
||||
return R.ok(projectTeamService.queryList(busProjectTeamQueryReq));
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package org.dromara.websocket;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import io.netty.channel.Channel;
|
||||
import io.netty.channel.ChannelHandler;
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
@ -34,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
|
@ -33,6 +33,8 @@ public class ChatGroup implements Serializable {
|
||||
|
||||
private Date lastMessageTime;
|
||||
|
||||
private String avatarUrl;
|
||||
|
||||
@TableField(exist = false)
|
||||
@Translation(type = TransConstant.OSS_ID_TO_URL)
|
||||
private Long avatar;
|
||||
|
@ -1,10 +1,35 @@
|
||||
package org.dromara.websocket.service.Impl;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.websocket.domain.ChatGroup;
|
||||
import org.dromara.websocket.mapper.ChatGroupMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGroup> {
|
||||
|
||||
public void createSystem(Long userId,String clientKey) {
|
||||
if (!"app".equals(clientKey)) {
|
||||
//创建系统通知
|
||||
LambdaQueryWrapper<ChatGroup> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.like(ChatGroup::getMembers, userId + ",").or().like(ChatGroup::getMembers, userId + "]");
|
||||
//拿到该用户的房间列表
|
||||
List<ChatGroup> chatGroups = list(queryWrapper);
|
||||
Set<String> collect = chatGroups.stream().map(ChatGroup::getType).collect(Collectors.toSet());
|
||||
if (!collect.contains("2")) {
|
||||
ChatGroup chatGroup = new ChatGroup();
|
||||
chatGroup.setType("2");
|
||||
chatGroup.setName("系统通知");
|
||||
chatGroup.setMembers(JSONObject.toJSONString(Collections.singletonList(userId)));
|
||||
save(chatGroup);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user