diff --git a/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 94118bcf..c2fd3709 100644 --- a/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/xinnengyuan/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -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); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java index f47428e3..19bd3f61 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java @@ -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 getProjectPeopleCount() { + PeopleCountVo peopleCountVo = new PeopleCountVo(); + + List 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 getAllAttendanceCount() { + TodayAttendanceCountVo todayAttendanceCountVo = new TodayAttendanceCountVo(); + List list = attendanceService.list(Wrappers.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 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> getProjectAttendanceCount() { + + ArrayList projectAttendanceCountVos = new ArrayList<>(); + + List list = attendanceService.list(Wrappers.lambdaQuery() + .eq(BusAttendance::getClockDate, LocalDate.now()) + .in(BusAttendance::getClockStatus, Arrays.asList("1", "2", "3")) + ); + List relevancyList = userProjectRelevancyService.list(); + + // 转换为 Map + Map 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); + + } + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/PeopleCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/PeopleCountVo.java new file mode 100644 index 00000000..4ea40774 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/PeopleCountVo.java @@ -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; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectAttendanceCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectAttendanceCountVo.java new file mode 100644 index 00000000..b2c7beb3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectAttendanceCountVo.java @@ -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; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/TodayAttendanceCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/TodayAttendanceCountVo.java new file mode 100644 index 00000000..524bc52f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/TodayAttendanceCountVo.java @@ -0,0 +1,19 @@ +package org.dromara.bigscreen.domain.vo; + + +import lombok.Data; + +@Data +public class TodayAttendanceCountVo { + + /** + * 考勤人员数量 + */ + private Long attendanceCount; + + /** + * 出勤率 + */ + private Double attendanceRate; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/app/SubConstructionUserAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/app/SubConstructionUserAppController.java index ff67b806..bb928970 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/app/SubConstructionUserAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/app/SubConstructionUserAppController.java @@ -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 queryUndistributedList(SubConstructionUserQueryReq req, PageQuery pageQuery) { + return constructionUserService.queryUndistributedList(req, pageQuery); + } + + /** + * 添加项目班组 + */ + @RepeatSubmit() + @PostMapping("/addTeam") + public R add(@Validated(AddGroup.class) @RequestBody BusProjectTeamMemberCreateReq req) { + return R.ok(busProjectTeamMemberService.insertByBo(req)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserAppVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserAppVo.java new file mode 100644 index 00000000..b0195286 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserAppVo.java @@ -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; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserService.java index 7a6e3e0a..f437e13b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserService.java @@ -222,4 +222,8 @@ public interface ISubConstructionUserService extends IService queryUndistributedList(SubConstructionUserQueryReq req, PageQuery pageQuery); + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java index 6df151f7..87f8d763 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java @@ -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 queryUndistributedList(SubConstructionUserQueryReq req, PageQuery pageQuery) { + LambdaQueryWrapper 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 result = this.page(pageQuery.build(), lqw); + + ArrayList 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()); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java index b1a1da8d..021f5ba1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java @@ -40,4 +40,7 @@ public class DesVolumeCatalogQueryReq implements Serializable { private String type; + + private String isUpload; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java index 3e67ec93..b506729a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java @@ -334,12 +334,17 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl> registerList() { BusProjectQueryReq busProjectQueryReq = new BusProjectQueryReq(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java index 0cdd866d..9e345f53 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java @@ -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> listByProject(@NotNull(message = "项目id不能为空") + @PathVariable Long projectid) { + BusProjectTeamQueryReq busProjectTeamQueryReq = new BusProjectTeamQueryReq(); + busProjectTeamQueryReq.setProjectId(projectid); + return R.ok(projectTeamService.queryList(busProjectTeamQueryReq)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java index 2233e94a..41c52677 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java @@ -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 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java index 7908d4b6..8687f0e0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/domain/ChatGroup.java @@ -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; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatGroupServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatGroupServiceImpl.java index 4ad9b201..8f8ff777 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatGroupServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/service/Impl/ChatGroupServiceImpl.java @@ -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 { + + public void createSystem(Long userId,String clientKey) { + if (!"app".equals(clientKey)) { + //创建系统通知 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.like(ChatGroup::getMembers, userId + ",").or().like(ChatGroup::getMembers, userId + "]"); + //拿到该用户的房间列表 + List chatGroups = list(queryWrapper); + Set 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); + } + } + } }