From 9602ef96f7f0332cae50432cbce0d1adb6a4eb1e Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Tue, 29 Jul 2025 17:27:56 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=AD=E5=8C=BA?= =?UTF-8?q?=E7=AE=A1=E7=90=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/api/RemoteUserService.java | 7 +++ .../MachineMaintainPlanController.java | 2 +- .../property/domain/MachineMaintainPlan.java | 2 +- .../property/domain/bo/MeetAttachBo.java | 2 +- .../domain/vo/MachineMaintainPlanStaffVo.java | 5 ++ .../impl/InspectionPlanServiceImpl.java | 37 ++++++++--- .../impl/MachineMaintainPlanServiceImpl.java | 61 ++++++++++++++++--- .../service/impl/MeetAttachServiceImpl.java | 2 +- .../service/impl/MeetServiceImpl.java | 2 +- .../impl/ServiceWorkOrdersServiceImpl.java | 52 +++++++++------- .../system/dubbo/RemoteUserServiceImpl.java | 8 +++ 11 files changed, 133 insertions(+), 47 deletions(-) diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java index 3e8b5485..305d58af 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/org/dromara/system/api/RemoteUserService.java @@ -25,6 +25,13 @@ public interface RemoteUserService { * @return 结果 */ LoginUser getUserInfo(String username, String tenantId) throws UserException; + /** + * 通过用户id查询用户信息 + * + * @param userId 用户id + * @return 结果 + */ + RemoteUserVo getUserInfoById(Long userId) throws UserException; /** * 通过用户id查询用户信息 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MachineMaintainPlanController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MachineMaintainPlanController.java index 860e48f1..4adf34e0 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MachineMaintainPlanController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/MachineMaintainPlanController.java @@ -62,7 +62,7 @@ public class MachineMaintainPlanController extends BaseController { * * @param id 主键 */ - @SaCheckPermission("system:maintainPlan:query") + //@SaCheckPermission("system:maintainPlan:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable("id") Long id) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MachineMaintainPlan.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MachineMaintainPlan.java index 3309a767..7cc2e89f 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MachineMaintainPlan.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/MachineMaintainPlan.java @@ -73,7 +73,7 @@ public class MachineMaintainPlan extends TenantEntity { private Date endDate; /** - * 状态(0启用,1停用) + * 状态(1启用,0停用) */ private String state; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachBo.java index 8e35e93a..21bfb459 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/MeetAttachBo.java @@ -60,7 +60,7 @@ public class MeetAttachBo extends BaseEntity { * 状态 */ @NotNull(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - private int state; + private Integer state; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MachineMaintainPlanStaffVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MachineMaintainPlanStaffVo.java index 23387133..bc5995a8 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MachineMaintainPlanStaffVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/MachineMaintainPlanStaffVo.java @@ -39,6 +39,11 @@ public class MachineMaintainPlanStaffVo implements Serializable { */ @ExcelProperty(value = "保养执行计划人id") private Long userId; + /** + * 保养执行计划人名称 + */ + @ExcelProperty(value = "保养执行计划人名称") + private String userName; /** * 保养计划id diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java index 199e7915..c555a10d 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/InspectionPlanServiceImpl.java @@ -1,13 +1,17 @@ package org.dromara.property.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; @@ -16,8 +20,11 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.domain.InspectionPlan; import org.dromara.property.domain.InspectionPlanStaff; import org.dromara.property.domain.InspectionRoute; +import org.dromara.property.domain.MachineMaintainPlanStaff; import org.dromara.property.domain.bo.InspectionPlanBo; import org.dromara.property.domain.bo.InspectionPlanStaffBo; +import org.dromara.property.domain.bo.MachineMaintainPlanBo; +import org.dromara.property.domain.bo.MachineMaintainPlanStaffBo; import org.dromara.property.domain.vo.InspectionPlanDetailVo; import org.dromara.property.domain.vo.InspectionPlanStaffVo; import org.dromara.property.domain.vo.InspectionPlanVo; @@ -27,6 +34,8 @@ import org.dromara.property.mapper.InspectionPlanStaffMapper; import org.dromara.property.mapper.InspectionRouteMapper; import org.dromara.property.mapper.ResidentPersonMapper; import org.dromara.property.service.IInspectionPlanService; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -51,6 +60,9 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { private final InspectionPlanStaffMapper inspectionPlanStaffMapper; private final InspectionRouteMapper inspectionRouteMapper; + @DubboReference + private RemoteUserService remoteUserService; + /** * 查询巡检计划 * @@ -71,12 +83,12 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { if (CollectionUtil.isNotEmpty(userIdlist)) { new ServiceException("执行计划人不存在"); } - List residentPersonVolist = residentPersonMapper.selectVoByIds(userIdlist); - if (CollectionUtil.isNotEmpty(residentPersonVolist)) { + List remoteUserVoList = remoteUserService.selectListByIds(userIdlist); + if (CollectionUtil.isNotEmpty(remoteUserVoList)) { inspectionPlanStaffVos.stream().forEach(s -> { - ResidentPersonVo residentPersonVo = residentPersonVolist.stream() - .filter(vo -> vo.getId() != null && vo.getId().equals(s.getUserId())).findFirst().orElse(null); - s.setUserName(residentPersonVo.getUserName()); + RemoteUserVo remoteUserVo = remoteUserVoList.stream() + .filter(vo -> vo.getUserId() != null && vo.getUserId().equals(s.getUserId())).findFirst().orElse(null); + s.setUserName(remoteUserVo.getNickName()); }); inspectionPlanDetailVo.setInspectionPlanStaffVoList(inspectionPlanStaffVos); } @@ -138,7 +150,6 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(InspectionPlanBo bo) { InspectionPlan add = MapstructUtils.convert(bo, InspectionPlan.class); - validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); @@ -164,15 +175,23 @@ public class InspectionPlanServiceImpl implements IInspectionPlanService { @Transactional(rollbackFor = Exception.class) public Boolean updateByBo(InspectionPlanBo bo) { InspectionPlan update = MapstructUtils.convert(bo, InspectionPlan.class); - validEntityBeforeSave(update); + validEntityBeforebo(bo.getId(),bo); return baseMapper.updateById(update) > 0; } - /** * 保存前的数据校验 */ - private void validEntityBeforeSave(InspectionPlan entity) { + private void validEntityBeforebo(Long id,InspectionPlanBo bo) { //TODO 做一些数据校验,如唯一约束 + Assert.isTrue(CollUtil.isNotEmpty(bo.getInspectionPlanStaffBoList()), "巡检人员不存在"); + QueryWrapper staffLambdaQueryWrapper = new QueryWrapper<>(); + staffLambdaQueryWrapper.eq("inspection_plan_id", id); + inspectionPlanStaffMapper.delete(staffLambdaQueryWrapper); + List inspectionPlanStaffBoList = bo.getInspectionPlanStaffBoList(); + inspectionPlanStaffBoList.stream().forEach(s->{ + s.setInspectionPlanId(id); + }); + inspectionPlanStaffMapper.insertBatch(BeanUtil.copyToList(inspectionPlanStaffBoList, InspectionPlanStaff.class)); } /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java index a4e227dc..f58714aa 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainPlanServiceImpl.java @@ -1,8 +1,13 @@ package org.dromara.property.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Assert; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.ObjectUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; @@ -22,11 +27,14 @@ import org.dromara.property.domain.vo.MachineMaintainPlanVo; import org.dromara.property.mapper.MachineMaintainPlanMapper; import org.dromara.property.mapper.MachineMaintainPlanStaffMapper; import org.dromara.property.service.IMachineMaintainPlanService; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 设备保养计划Service业务层处理 @@ -41,6 +49,8 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi private final MachineMaintainPlanMapper baseMapper; private final MachineMaintainPlanStaffMapper machineMaintainPlanStaffMapper; + @DubboReference + private RemoteUserService remoteUserService; /** * 查询设备保养计划 @@ -49,15 +59,36 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi * @return 设备保养计划 */ @Override - public MachineMaintainPlanVo queryById(Long id){ + public MachineMaintainPlanVo queryById(Long id) { MachineMaintainPlanVo machineMaintainPlanVo = baseMapper.selectVoById(id); LambdaQueryWrapper planQueryWrapper = new LambdaQueryWrapper<>(); - planQueryWrapper.eq(MachineMaintainPlanStaff::getMaintainPlanId,id); + planQueryWrapper.eq(MachineMaintainPlanStaff::getMaintainPlanId, id); List machineMaintainPlanStaffVos = machineMaintainPlanStaffMapper.selectVoList(planQueryWrapper); - machineMaintainPlanVo.setMachineMaintainPlanStaffVos(machineMaintainPlanStaffVos ); + List userIdlist = machineMaintainPlanStaffVos.stream() + .map(vo -> vo.getUserId()) + .distinct() + .collect(Collectors.toList()); + List remoteUserVoList = remoteUserService.selectListByIds(userIdlist); + machineMaintainPlanStaffVos.stream().forEach(s -> { + disposeMaintainPlanStaffVo(s, remoteUserVoList); + }); + machineMaintainPlanVo.setMachineMaintainPlanStaffVos(machineMaintainPlanStaffVos); return machineMaintainPlanVo; } + /** + * 处理保养人 + * + * @param machineMaintainPlanStaffVos + */ + private void disposeMaintainPlanStaffVo(MachineMaintainPlanStaffVo machineMaintainPlanStaffVos, List remoteUserVoList) { + if (ObjectUtils.isNotNull(machineMaintainPlanStaffVos.getUserId()) && CollUtil.isNotEmpty(remoteUserVoList)) { + RemoteUserVo remoteUserVo = remoteUserVoList.stream() + .filter(vo -> vo.getUserId() != null && vo.getUserId().equals(machineMaintainPlanStaffVos.getUserId())).findFirst().orElse(null); + machineMaintainPlanStaffVos.setUserName(remoteUserVo.getNickName()); + } + } + /** * 分页查询设备保养计划列表 * @@ -111,8 +142,7 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi @Override public Boolean insertByBo(MachineMaintainPlanBo bo) { MachineMaintainPlan add = MapstructUtils.convert(bo, MachineMaintainPlan.class); - add.setState("0"); - validEntityBeforeSave(add); + add.setState("1"); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); @@ -121,7 +151,10 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi for (MachineMaintainPlanStaffBo staffBo : machineMaintainPlanStaffBoList) { staffBo.setMaintainPlanId(add.getId()); } - machineMaintainPlanStaffMapper.insertBatch(BeanUtil.copyToList(machineMaintainPlanStaffBoList, MachineMaintainPlanStaff.class)); + List machineMaintainPlanStaffs = BeanUtil.copyToList(machineMaintainPlanStaffBoList, MachineMaintainPlanStaff.class); + + machineMaintainPlanStaffMapper.insertBatch(machineMaintainPlanStaffs); + } } return flag; @@ -136,16 +169,24 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi @Override public Boolean updateByBo(MachineMaintainPlanBo bo) { MachineMaintainPlan update = MapstructUtils.convert(bo, MachineMaintainPlan.class); - validEntityBeforeSave(update); + validEntityBeforebo(update.getId(), bo); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ - private void validEntityBeforeSave(MachineMaintainPlan entity){ + private void validEntityBeforebo(Long id, MachineMaintainPlanBo bo) { //TODO 做一些数据校验,如唯一约束 - + Assert.isTrue(CollUtil.isNotEmpty(bo.getMachineMaintainPlanStaffBoList()), "巡检人员不存在"); + QueryWrapper staffLambdaQueryWrapper = new QueryWrapper<>(); + staffLambdaQueryWrapper.eq("maintain_plan_id", id); + machineMaintainPlanStaffMapper.delete(staffLambdaQueryWrapper); + List machineMaintainPlanStaffBoList = bo.getMachineMaintainPlanStaffBoList(); + machineMaintainPlanStaffBoList.stream().forEach(s->{ + s.setMaintainPlanId(id); + }); + machineMaintainPlanStaffMapper.insertBatch(BeanUtil.copyToList(machineMaintainPlanStaffBoList, MachineMaintainPlanStaff.class)); } /** @@ -157,7 +198,7 @@ public class MachineMaintainPlanServiceImpl implements IMachineMaintainPlanServi */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetAttachServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetAttachServiceImpl.java index 4a0866d5..2c80ce61 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetAttachServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetAttachServiceImpl.java @@ -83,7 +83,7 @@ public class MeetAttachServiceImpl implements IMeetAttachService { lqw.eq(bo.getPrice() != null, MeetAttach::getPrice, bo.getPrice()); lqw.eq(StringUtils.isNotBlank(bo.getUnit()), MeetAttach::getUnit, bo.getUnit()); lqw.eq(StringUtils.isNotBlank(bo.getType()), MeetAttach::getType, bo.getType()); - lqw.eq(MeetAttach::getState, bo.getState()); + lqw.eq(ObjectUtil.isNotEmpty(bo.getState()),MeetAttach::getState, bo.getState()); return lqw; } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java index 931d9e89..70961cd2 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MeetServiceImpl.java @@ -142,7 +142,7 @@ public class MeetServiceImpl implements IMeetService { lqw.orderByAsc(Meet::getId); lqw.like(StringUtils.isNotBlank(bo.getName()), Meet::getName, bo.getName()); // lqw.eq(StringUtils.isNotBlank(bo.getLocation()), Meet::getLocation, bo.getLocation()); -// lqw.eq(bo.getPersonNumber() != null, Meet::getPersonNumber, bo.getPersonNumber()); + lqw.eq(bo.getPersonNumber() != null, Meet::getPersonNumber, bo.getPersonNumber()); // lqw.eq(bo.getBaseService() != null, Meet::getBaseService, bo.getBaseService()); // lqw.eq(bo.getBasePrice() != null, Meet::getBasePrice, bo.getBasePrice()); lqw.eq(bo.getPrincipals() != null, Meet::getPrincipals, bo.getPrincipals()); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java index bab10962..6ad53831 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersServiceImpl.java @@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -27,6 +28,8 @@ import org.dromara.property.mapper.ServiceWorkOrdersMapper; import org.dromara.property.mapper.ServiceWorkOrdersRecordMapper; import org.dromara.property.mapper.ServiceWorkOrdersTypeMapper; import org.dromara.property.service.IServiceWorkOrdersService; +import org.dromara.system.api.RemoteUserService; +import org.dromara.system.api.domain.vo.RemoteUserVo; import org.dromara.system.api.model.LoginUser; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -52,6 +55,8 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { private final ServiceWorkOrdersTypeMapper typesMapper; private final ResidentPersonMapper residentPersonMapper; private final ServiceWorkOrdersRecordMapper workOrdersRecordMapper; + @DubboReference + private RemoteUserService remoteUserService; /** * 查询【工单处理】 @@ -70,23 +75,24 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { if (Objects.nonNull(serviceWorkOrdersTypeVo)) { serviceWorkOrdersInfoVo.setTypeName(serviceWorkOrdersTypeVo.getOrderTypeName()); } - ResidentPersonVo residentPersonHandler = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getHandler())); - if (Objects.nonNull(residentPersonHandler)) { - serviceWorkOrdersInfoVo.setHandlerText(residentPersonHandler.getUserName()); - serviceWorkOrdersInfoVo.setHandlerPhone(residentPersonHandler.getPhone()); + //ResidentPersonVo residentPersonHandler = residentPersonMapper.selectVoById(Long.valueOf(serviceWorkOrdersVo.getHandler())); + + RemoteUserVo userInfo = remoteUserService.getUserInfoById(Long.valueOf(serviceWorkOrdersVo.getHandler())); + if (ObjectUtil.isNotEmpty(userInfo)) { + serviceWorkOrdersInfoVo.setHandlerText(userInfo.getNickName()); + serviceWorkOrdersInfoVo.setHandlerPhone(userInfo.getPhonenumber()); } //查询工单处理记录 List serviceWorkOrdersRecordVoList = workOrdersRecordMapper.selectVoList(new LambdaQueryWrapper().eq(ServiceWorkOrdersRecord::getOrderId, id)); if (CollUtil.isNotEmpty(serviceWorkOrdersRecordVoList)) { List serviceWorkOrdersRecordInfoVos = BeanUtil.copyToList(serviceWorkOrdersRecordVoList, ServiceWorkOrdersRecordInfoVo.class); List residentPersonIdList = serviceWorkOrdersRecordInfoVos.stream().map(vo -> vo.getHandler()).distinct().collect(Collectors.toList()); - List residentPeople = residentPersonMapper.selectByIds(residentPersonIdList); + // List residentPeople = residentPersonMapper.selectByIds(residentPersonIdList); + List remoteUserVos = remoteUserService.selectListByIds(residentPersonIdList); serviceWorkOrdersRecordInfoVos.stream().forEach(workOrdersRecordVo -> { - ResidentPerson residentPerson = residentPeople.stream().filter(vo -> vo.getId() != null && vo.getId().equals(serviceWorkOrdersVo.getHandler())).findFirst().orElse(null); - workOrdersRecordVo.setHandlerName(Objects.nonNull(residentPerson) ? residentPerson.getUserName() : null); - if (Objects.nonNull(serviceWorkOrdersTypeVo)) { - workOrdersRecordVo.setInitiatorPeople(serviceWorkOrdersVo.getInitiatorPeople()); - } + RemoteUserVo remoteUserVo = remoteUserVos.stream().filter(vo -> vo.getUserId() != null && vo.getUserId().equals(serviceWorkOrdersVo.getHandler())).findFirst().orElse(null); + workOrdersRecordVo.setHandlerName(Objects.nonNull(remoteUserVo) ? remoteUserVo.getNickName() : null); + workOrdersRecordVo.setInitiatorPeople(Objects.nonNull(serviceWorkOrdersTypeVo)?serviceWorkOrdersVo.getInitiatorPeople():null); if (workOrdersRecordVo.getStatus().equals("1") || workOrdersRecordVo.getStatus().equals("2")) { serviceWorkOrdersInfoVo.setDispatchTime(workOrdersRecordVo.getCreateTime()); } @@ -122,7 +128,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { s.setTypeName(ObjectUtil.isNotNull(serviceWorkOrdersTypeVo) ? serviceWorkOrdersTypeVo.getOrderTypeName() : null); serviceWorkOrdersVoList.add(s); }); - return TableDataInfo.build(new Page().setRecords(serviceWorkOrdersVoList)); + return TableDataInfo.build(new Page().setRecords(serviceWorkOrdersVoList).setTotal(result.getTotal())); } /** @@ -177,7 +183,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { ServiceWorkOrdersRecord serviceWorkOrdersRecord = new ServiceWorkOrdersRecord(); serviceWorkOrdersRecord.setOrderId(add.getId()); serviceWorkOrdersRecord.setStatus(add.getStatus()); - serviceWorkOrdersRecord.setHandler(add.getHandler()); + //serviceWorkOrdersRecord.setHandler(add.getHandler()); workOrdersRecordMapper.insert(serviceWorkOrdersRecord); } return flag; @@ -210,12 +216,6 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { * 修改前的数据校验 */ private void validEntityBeforeUpdate(ServiceWorkOrders entity) { - LambdaQueryWrapper residentPersonQueryWrapper = new LambdaQueryWrapper<>(); - residentPersonQueryWrapper.eq(ResidentPerson::getUserId, entity.getHandler()); - residentPersonQueryWrapper.last("LIMIT 1"); - ResidentPerson residentPerson = residentPersonMapper.selectOne(residentPersonQueryWrapper); - Assert.notNull(residentPerson, "该用户未入住不能抢单"); - entity.setHandler(residentPerson.getId()); LambdaQueryWrapper ordersLambdaQueryWrapper = new LambdaQueryWrapper<>(); ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getOrderId, entity.getId()); ordersLambdaQueryWrapper.eq(ServiceWorkOrdersRecord::getStatus, entity.getStatus()); @@ -314,7 +314,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { // 获取满意度分布 List satisfactionRateList = calculateSatisfactionRate(serviceWorkOrdersList); - // 获取近半年工单柱状图数据 + // 获取近半年工单柱状图数据 List recentSixMonthWorkOrders = getRecentSixMonthsWorkOrders(serviceWorkOrdersList); // 构建 VO 并返回 return new ServiceWorkOrderAnalysisVo.ServiceWorkOrderCount() @@ -332,7 +332,9 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { .setSatisfactionChartList(satisfactionChartList) .setRecentSixMonthWorkOrders(recentSixMonthWorkOrders) .build(); - } /** + } + + /** * 计算满意度指数占比 * * @return 满意度比例列表 @@ -363,11 +365,12 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { default -> "未知"; }; - satisfactionRateList.add(new ServiceWorkOrderAnalysisVo.SatisfactionChartVo(name,count,rate)); + satisfactionRateList.add(new ServiceWorkOrderAnalysisVo.SatisfactionChartVo(name, count, rate)); } return satisfactionRateList; } + // 近一周工单统计方法 private List getRecentWeekWorkOrders(List serviceWorkOrdersList) { LocalDate today = LocalDate.now(); @@ -419,10 +422,12 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { return result; } + private boolean isProcessed(ServiceWorkOrders order) { // 假设有一个字段 status 表示状态,"COMPLETED" 表示已处理 return "4".equalsIgnoreCase(order.getStatus()); } + // 计算工单类型分布 private List calculateWorkOrderTypeDistribution(List serviceWorkOrdersList) { // 按 typeId 分组统计数量 @@ -445,6 +450,7 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { return result; } + private List getRecentSixMonthsWorkOrders(List ordersList) { LocalDate today = LocalDate.now(); // 获取近6个月的日期范围(含当月) @@ -459,9 +465,9 @@ public class ServiceWorkOrdersServiceImpl implements IServiceWorkOrdersService { Collectors.counting() )); - // 构建柱状图数据 + // 构建柱状图数据 return months.stream() - .map(month -> new ServiceWorkOrderAnalysisVo.BarChartVo(month,Math.toIntExact(orderCountMap.getOrDefault(month, 0L)))) + .map(month -> new ServiceWorkOrderAnalysisVo.BarChartVo(month, Math.toIntExact(orderCountMap.getOrDefault(month, 0L)))) .collect(Collectors.toList()); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java index aad3b1a3..29c70695 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java @@ -83,6 +83,14 @@ public class RemoteUserServiceImpl implements RemoteUserService { }); } + @Override + public RemoteUserVo getUserInfoById(Long userId) throws UserException { + SysUserVo sysUser = userMapper.selectVoById(userId); + // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 + // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 + return BeanUtil.copyProperties(sysUser,RemoteUserVo.class); + } + /** * 通过用户id查询用户信息 * From 6938640419fc0ef9623267242ef3f3f0fded1090 Mon Sep 17 00:00:00 2001 From: zcxlsm Date: Wed, 30 Jul 2025 09:09:27 +0800 Subject: [PATCH 2/4] feat(Sis): 1 --- .../dromara/sis/service/impl/SisDeviceChannelServiceImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java index 3c5e2de5..de6f6f12 100644 --- a/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java +++ b/ruoyi-modules/Sis/src/main/java/org/dromara/sis/service/impl/SisDeviceChannelServiceImpl.java @@ -248,7 +248,6 @@ public class SisDeviceChannelServiceImpl implements ISisDeviceChannelService { channel.setDevicePwd(item.getChannelPwd()); } // nvr 设备信息 - channel.setNvrId(bo.getId()); channel.setNvrIp(bo.getDeviceIp()); channel.setNvrPort(HikSdkConstans.DEFAULT_RTSP_PORT); channel.setNvrAccount(bo.getDeviceAccount()); From 17f342ed763cbfdded0ba8bf2025214f26fe66c9 Mon Sep 17 00:00:00 2001 From: yuyongle <1150359267@qq.com> Date: Wed, 30 Jul 2025 16:06:47 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9B=AD=E5=8C=BA?= =?UTF-8?q?=E7=AE=A1=E7=90=86bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TbCommunityController.java | 3 +- .../dromara/property/domain/bo/TbFloorBo.java | 7 +- .../domain/bo/TbVisitorManagementBo.java | 2 +- .../MachineMaintainTaskDetailMapper.java | 10 +-- .../MachineMaintainTaskDetailServiceImpl.java | 71 ++++++++----------- .../ServiceWorkOrdersTypeServiceImpl.java | 2 + .../service/impl/TbCommunityServiceImpl.java | 39 +++++----- .../service/impl/TbFloorServiceImpl.java | 18 ++--- 8 files changed, 71 insertions(+), 81 deletions(-) diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java index 3bcd85df..bba1bb73 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/TbCommunityController.java @@ -66,7 +66,8 @@ public class TbCommunityController extends BaseController { LoginUser loginUser = LoginHelper.getLoginUser(); Assert.notNull(loginUser, "获取账户信息失败!"); Assert.notEmpty(loginUser.getTenantId(), "获取租户信息失败"); - return R.ok(tbCommunityService.tree(level, loginUser.getTenantId())); + List> tree = tbCommunityService.tree(level, loginUser.getTenantId()); + return R.ok(tree); } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java index 65e65bc4..2e4ecaec 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbFloorBo.java @@ -27,11 +27,10 @@ public class TbFloorBo extends BaseEntity { private Long id; /** - * 单元编码 + * 建筑编码 */ - @NotNull(message = "单元编码不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long unitId; - + @NotNull(message = "建筑编码不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long buildingId; /** * 楼层数名称 */ diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java index 9e26f81b..f6466cd7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/TbVisitorManagementBo.java @@ -52,7 +52,7 @@ public class TbVisitorManagementBo extends BaseEntity { @NotBlank(message = "拜访事由不能为空", groups = { AddGroup.class, EditGroup.class }) private String visitingReason; - @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + //@NotNull(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer type; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java index b4b2e4da..6ec74beb 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/MachineMaintainTaskDetailMapper.java @@ -1,19 +1,15 @@ package org.dromara.property.mapper; -import com.github.yulichang.base.MPJBaseMapper; -import org.apache.ibatis.annotations.Mapper; import org.dromara.property.domain.MachineMaintainTaskDetail; import org.dromara.property.domain.vo.MachineMaintainTaskDetailVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; - /** - * 设备保养任务明细Mapper接口 + * 保养明细Mapper接口 * * @author mocheng - * @date 2025-07-16 + * @date 2025-07-30 */ -@Mapper -public interface MachineMaintainTaskDetailMapper extends MPJBaseMapper { +public interface MachineMaintainTaskDetailMapper extends BaseMapperPlus { } diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java index d088e18b..2f6988a5 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/MachineMaintainTaskDetailServiceImpl.java @@ -1,9 +1,5 @@ package org.dromara.property.service.impl; -import cn.hutool.core.bean.BeanUtil; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.github.yulichang.query.MPJLambdaQueryWrapper; -import com.github.yulichang.wrapper.MPJLambdaWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -13,7 +9,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.property.domain.MachineMaintainTask; import org.springframework.stereotype.Service; import org.dromara.property.domain.bo.MachineMaintainTaskDetailBo; import org.dromara.property.domain.vo.MachineMaintainTaskDetailVo; @@ -26,10 +21,10 @@ import java.util.Map; import java.util.Collection; /** - * 设备保养任务明细Service业务层处理 + * 保养明细Service业务层处理 * * @author mocheng - * @date 2025-07-16 + * @date 2025-07-30 */ @Slf4j @RequiredArgsConstructor @@ -39,70 +34,66 @@ public class MachineMaintainTaskDetailServiceImpl implements IMachineMaintainTas private final MachineMaintainTaskDetailMapper baseMapper; /** - * 查询设备保养任务明细 + * 查询保养明细 * * @param id 主键 - * @return 设备保养任务明细 + * @return 保养明细 */ @Override public MachineMaintainTaskDetailVo queryById(Long id){ - MachineMaintainTaskDetail machineMaintainTaskDetail = baseMapper.selectById(id); - MachineMaintainTaskDetailVo machineMaintainTaskDetailVo = BeanUtil.copyProperties(machineMaintainTaskDetail, MachineMaintainTaskDetailVo.class); - return machineMaintainTaskDetailVo; + return baseMapper.selectVoById(id); } /** - * 分页查询设备保养任务明细列表 + * 分页查询保养明细列表 * * @param bo 查询条件 * @param pageQuery 分页参数 - * @return 设备保养任务明细分页列表 + * @return 保养明细分页列表 */ @Override public TableDataInfo queryPageList(MachineMaintainTaskDetailBo bo, PageQuery pageQuery) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - IPage result = baseMapper.selectJoinPage(pageQuery.build(),MachineMaintainTaskDetailVo.class, lqw); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); - } /** - * 查询符合条件的设备保养任务明细列表 + * 查询符合条件的保养明细列表 * * @param bo 查询条件 - * @return 设备保养任务明细列表 + * @return 保养明细列表 */ @Override public List queryList(MachineMaintainTaskDetailBo bo) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectJoinList(MachineMaintainTaskDetailVo.class, lqw); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); } - private MPJLambdaWrapper buildQueryWrapper(MachineMaintainTaskDetailBo bo) { - return new MPJLambdaWrapper() - .orderByAsc(MachineMaintainTaskDetail::getId) - .eq(bo.getTaskId() != null, MachineMaintainTaskDetail::getTaskId, bo.getTaskId()) - .eq(bo.getMachineId() != null, MachineMaintainTaskDetail::getMachineId, bo.getMachineId()) - .eq(StringUtils.isNotBlank(bo.getSendFlag()), MachineMaintainTaskDetail::getSendFlag, bo.getSendFlag()) - .eq(bo.getSortNumber() != null, MachineMaintainTaskDetail::getSortNumber, bo.getSortNumber()) - .eq(StringUtils.isNotBlank(bo.getState()), MachineMaintainTaskDetail::getState, bo.getState()) - .eq(StringUtils.isNotBlank(bo.getSearchValue()), MachineMaintainTaskDetail::getSearchValue, bo.getSearchValue()) - .selectAll(MachineMaintainTaskDetail.class) - .select(MachineMaintainTask::getMaintainTaskNo) - .leftJoin(MachineMaintainTask.class, MachineMaintainTask::getId, MachineMaintainTaskDetail::getTaskId); + private LambdaQueryWrapper buildQueryWrapper(MachineMaintainTaskDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByAsc(MachineMaintainTaskDetail::getId); + lqw.eq(bo.getTaskId() != null, MachineMaintainTaskDetail::getTaskId, bo.getTaskId()); + lqw.eq(bo.getMachineId() != null, MachineMaintainTaskDetail::getMachineId, bo.getMachineId()); + lqw.eq(StringUtils.isNotBlank(bo.getSendFlag()), MachineMaintainTaskDetail::getSendFlag, bo.getSendFlag()); + lqw.eq(bo.getSortNumber() != null, MachineMaintainTaskDetail::getSortNumber, bo.getSortNumber()); + lqw.eq(StringUtils.isNotBlank(bo.getState()), MachineMaintainTaskDetail::getState, bo.getState()); + lqw.eq(StringUtils.isNotBlank(bo.getSearchValue()), MachineMaintainTaskDetail::getSearchValue, bo.getSearchValue()); + return lqw; } /** - * 新增设备保养任务明细 + * 新增保养明细 * - * @param bo 设备保养任务明细 + * @param bo 保养明细 * @return 是否新增成功 */ @Override public Boolean insertByBo(MachineMaintainTaskDetailBo bo) { MachineMaintainTaskDetail add = MapstructUtils.convert(bo, MachineMaintainTaskDetail.class); validEntityBeforeSave(add); - boolean flag = this.insertByBo(bo); + boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } @@ -110,16 +101,16 @@ public class MachineMaintainTaskDetailServiceImpl implements IMachineMaintainTas } /** - * 修改设备保养任务明细 + * 修改保养明细 * - * @param bo 设备保养任务明细 + * @param bo 保养明细 * @return 是否修改成功 */ @Override public Boolean updateByBo(MachineMaintainTaskDetailBo bo) { MachineMaintainTaskDetail update = MapstructUtils.convert(bo, MachineMaintainTaskDetail.class); validEntityBeforeSave(update); - return baseMapper.updateById(update)>0; + return baseMapper.updateById(update) > 0; } /** @@ -130,7 +121,7 @@ public class MachineMaintainTaskDetailServiceImpl implements IMachineMaintainTas } /** - * 校验并批量删除设备保养任务明细信息 + * 校验并批量删除保养明细信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java index adf8c123..ca7db910 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/ServiceWorkOrdersTypeServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.property.service.impl; +import cn.hutool.core.util.IdUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -92,6 +93,7 @@ public class ServiceWorkOrdersTypeServiceImpl implements IServiceWorkOrdersTypeS @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(ServiceWorkOrdersTypeBo bo) { ServiceWorkOrdersType add = MapstructUtils.convert(bo, ServiceWorkOrdersType.class); + add.setOrderTypeNo("TD" + IdUtil.getSnowflakeNextIdStr()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java index 81aae67e..61ad865b 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbCommunityServiceImpl.java @@ -1,6 +1,5 @@ package org.dromara.property.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -76,22 +75,22 @@ public class TbCommunityServiceImpl implements ITbCommunityService { community.addAll(list); } } + //if (level >= 4) { + // List vos = unitService.queryAll(); + // if (vos != null && !vos.isEmpty()) { + // List> list = vos.stream().map(item -> { + // TreeNode node = new TreeNode<>(); + // node.setChildren(new ArrayList<>()); + // node.setCode(item.getId()); + // node.setLabel(item.getUnitName()); + // node.setParentCode(item.getBuildingId()); + // node.setLevel(3); + // return node; + // }).toList(); + // community.addAll(list); + // } + //} if (level >= 3) { - List vos = unitService.queryAll(); - if (vos != null && !vos.isEmpty()) { - List> list = vos.stream().map(item -> { - TreeNode node = new TreeNode<>(); - node.setChildren(new ArrayList<>()); - node.setCode(item.getId()); - node.setLabel(item.getUnitName()); - node.setParentCode(item.getBuildingId()); - node.setLevel(3); - return node; - }).toList(); - community.addAll(list); - } - } - if (level >= 4) { List vos = floorService.queryAll(); if (vos != null && !vos.isEmpty()) { List> list = vos.stream().map(item -> { @@ -99,15 +98,15 @@ public class TbCommunityServiceImpl implements ITbCommunityService { node.setChildren(new ArrayList<>()); node.setCode(item.getId()); node.setLabel(item.getFloorName()); - node.setParentCode(item.getUnitId()); - node.setLevel(4); + node.setParentCode(item.getBuildingId()); + node.setLevel(3); return node; }).toList(); community.addAll(list); } } - if (level >= 5) { + if (level >= 4) { List vos = roomService.queryAll(); if (vos != null && !vos.isEmpty()) { List> list = vos.stream().map(item -> { @@ -116,7 +115,7 @@ public class TbCommunityServiceImpl implements ITbCommunityService { node.setCode(item.getId()); node.setLabel(item.getRoomNumber()); node.setParentCode(item.getFloorId()); - node.setLevel(5); + node.setLevel(4); return node; }).toList(); community.addAll(list); diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java index e7a47942..549616a1 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/TbFloorServiceImpl.java @@ -12,9 +12,10 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.property.domain.TbFloor; import org.dromara.property.domain.bo.TbFloorBo; +import org.dromara.property.domain.vo.TbBuildingVo; import org.dromara.property.domain.vo.TbFloorVo; -import org.dromara.property.domain.vo.TbUnitVo; import org.dromara.property.mapper.TbFloorMapper; +import org.dromara.property.service.ITbBuildingService; import org.dromara.property.service.ITbFloorService; import org.dromara.property.service.ITbUnitService; import org.springframework.stereotype.Service; @@ -37,6 +38,7 @@ public class TbFloorServiceImpl implements ITbFloorService { private final TbFloorMapper baseMapper; private final ITbUnitService tbUnitService; + private final ITbBuildingService iTbBuildingService; /** * 查询楼层 @@ -81,7 +83,7 @@ public class TbFloorServiceImpl implements ITbFloorService { lqw.orderByAsc(TbFloor::getId); lqw.like(StringUtils.isNotBlank(bo.getFloorName()), TbFloor::getFloorName, bo.getFloorName()); lqw.eq(bo.getFloorNumber() != null, TbFloor::getFloorNumber, bo.getFloorNumber()); - lqw.eq(bo.getUnitId() != null, TbFloor::getUnitId, bo.getUnitId()); + lqw.eq(bo.getBuildingId()!= null, TbFloor::getUnitId, bo.getBuildingId()); lqw.eq(bo.getFloorType() != null, TbFloor::getFloorType, bo.getFloorType()); lqw.eq(bo.getRoomCount() != null, TbFloor::getRoomCount, bo.getRoomCount()); lqw.eq(bo.getFloorHeight() != null, TbFloor::getFloorHeight, bo.getFloorHeight()); @@ -98,19 +100,19 @@ public class TbFloorServiceImpl implements ITbFloorService { @Transactional(rollbackFor = Exception.class) public Boolean insertByBo(TbFloorBo bo) { // 验证单元是否存在 - TbUnitVo tbUnitVo = tbUnitService.queryById(bo.getUnitId()); - Assert.notNull(tbUnitVo, "单元:{},不存在。", bo.getUnitId()); + TbBuildingVo tbBuildingVo = iTbBuildingService.queryById(bo.getBuildingId()); + Assert.notNull(tbBuildingVo, "建筑:{},不存在。", tbBuildingVo); // 验证同一单元楼层是否已经存在 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(TbFloor::getUnitId, bo.getUnitId()) + lqw.eq(TbFloor::getBuildingId, bo.getBuildingId()) .eq(TbFloor::getFloorNumber, bo.getFloorNumber()); boolean numberExists = baseMapper.selectCount(lqw) > 0; - Assert.isFalse(numberExists, "单元:{},楼层:{}已存在。", bo.getUnitId(), bo.getFloorNumber()); + Assert.isFalse(numberExists, "单元:{},建筑:{}已存在。", bo.getBuildingId(), bo.getFloorNumber()); TbFloor add = MapstructUtils.convert(bo, TbFloor.class); - add.setCommunityId(tbUnitVo.getCommunityId()); - add.setBuildingId(tbUnitVo.getBuildingId()); + add.setCommunityId(tbBuildingVo.getCommunityId()); + add.setBuildingId(tbBuildingVo.getId()); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; Assert.isTrue(flag, "新增楼层失败"); From 6965b78db0456dd0975019f551c0efe3548621c1 Mon Sep 17 00:00:00 2001 From: dy <2389062315@qq.com> Date: Wed, 30 Jul 2025 16:17:52 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8E=92=E7=8F=AD=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AttendanceArrangementController.java | 55 ++-- .../AttendanceArrangementGroupController.java | 22 ++ .../AttendanceFixedScheduleController.java | 31 +-- .../domain/AttendanceArrangement.java | 11 +- .../domain/AttendanceArrangementGroup.java | 35 +++ .../domain/bo/AttendanceArrangementBo.java | 12 +- .../bo/AttendanceArrangementGroupBo.java | 54 ++++ .../vo/AttendanceArrangementGroupVo.java | 46 ++++ .../domain/vo/AttendanceArrangementVo.java | 6 +- .../AttendanceArrangementGroupMapper.java | 16 ++ .../IAttendanceArrangementGroupService.java | 12 + .../IAttendanceArrangementService.java | 9 +- ...AttendanceArrangementGroupServiceImpl.java | 40 +++ .../AttendanceArrangementServiceImpl.java | 249 ++++++++++-------- .../AttendanceArrangementGroupMapper.xml | 7 + 15 files changed, 431 insertions(+), 174 deletions(-) create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java create mode 100644 ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java create mode 100644 ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java index 1c4e647d..dd5d0c02 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementController.java @@ -1,29 +1,25 @@ package org.dromara.property.controller; -import java.time.LocalDate; -import java.util.List; - -import cn.hutool.core.date.DateTime; -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; +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.excel.utils.ExcelUtil; -import org.dromara.property.domain.vo.AttendanceArrangementVo; -import org.dromara.property.domain.bo.AttendanceArrangementBo; -import org.dromara.property.service.IAttendanceArrangementService; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.bo.AttendanceArrangementBo; +import org.dromara.property.domain.vo.AttendanceArrangementVo; +import org.dromara.property.service.IAttendanceArrangementService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 排班 @@ -50,16 +46,25 @@ public class AttendanceArrangementController extends BaseController { } /** - * 导出排班列表 + * 查询排班列表 */ - @SaCheckPermission("Property:arrangement:export") - @Log(title = "排班", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(AttendanceArrangementBo bo, HttpServletResponse response) { - List list = attendanceArrangementService.queryList(bo); - ExcelUtil.exportExcel(list, "排班", AttendanceArrangementVo.class, response); + @SaCheckPermission("Property:arrangement:explore") + @GetMapping("/explore") + public List list(AttendanceArrangementBo bo) { + return attendanceArrangementService.queryList(bo); } +// /** +// * 导出排班列表 +// */ +// @SaCheckPermission("Property:arrangement:export") +// @Log(title = "排班", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(AttendanceArrangementBo bo, HttpServletResponse response) { +// List list = attendanceArrangementService.queryList(bo); +// ExcelUtil.exportExcel(list, "排班", AttendanceArrangementVo.class, response); +// } + /** * 获取排班详细信息 * diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java new file mode 100644 index 00000000..7b6d553b --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceArrangementGroupController.java @@ -0,0 +1,22 @@ +package org.dromara.property.controller; + +import lombok.RequiredArgsConstructor; +import org.dromara.common.web.core.BaseController; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 排班考勤组的中间表控制层 + * 前端访问路由地址为:/Property/arrangementGroup + * + * @author mocheng + * @date 2025-07-15 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/arrangementGroup") +public class AttendanceArrangementGroupController extends BaseController { + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java index 1a00104a..6df6a500 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/controller/AttendanceFixedScheduleController.java @@ -1,26 +1,27 @@ package org.dromara.property.controller; -import java.util.List; - -import lombok.RequiredArgsConstructor; -import jakarta.servlet.http.HttpServletResponse; -import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; -import org.springframework.web.bind.annotation.*; -import org.springframework.validation.annotation.Validated; -import org.dromara.common.idempotent.annotation.RepeatSubmit; -import org.dromara.common.log.annotation.Log; -import org.dromara.common.web.core.BaseController; -import org.dromara.common.mybatis.core.page.PageQuery; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; -import org.dromara.common.log.enums.BusinessType; import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.property.domain.vo.AttendanceFixedScheduleVo; -import org.dromara.property.domain.bo.AttendanceFixedScheduleBo; -import org.dromara.property.service.IAttendanceFixedScheduleService; +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; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.property.domain.bo.AttendanceFixedScheduleBo; +import org.dromara.property.domain.vo.AttendanceFixedScheduleVo; +import org.dromara.property.service.IAttendanceFixedScheduleService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 固定班制表 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java index fb83467d..77c7a7d7 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangement.java @@ -1,16 +1,13 @@ package org.dromara.property.domain; -import cn.hutool.core.date.DateTime; -import org.dromara.common.tenant.core.TenantEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; - -import java.time.LocalDate; -import java.util.Date; -import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; +import java.util.Date; /** * 排班对象 attendance_arrangement diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java new file mode 100644 index 00000000..7439ef85 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/AttendanceArrangementGroup.java @@ -0,0 +1,35 @@ +package org.dromara.property.domain; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.tenant.core.TenantEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 考勤排班组中间表对象 attendance_arrangement_group + * + * @author ruoyi + * @date 2025-07-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("attendance_arrangement_group") +public class AttendanceArrangementGroup extends TenantEntity +{ + + @Serial + private static final long serialVersionUID = 1L; + /** 主键ID */ + private Long id; + + /** 排班id */ + private Long arrangementId; + + /** 考勤组ID */ + private Long groupId; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java index f935281a..6cd85bde 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementBo.java @@ -1,6 +1,7 @@ package org.dromara.property.domain.bo; import cn.hutool.core.date.DateTime; +import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.property.domain.AttendanceArrangement; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; @@ -14,6 +15,7 @@ import org.dromara.property.domain.AttendanceUserGroup; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; +import java.time.YearMonth; import java.util.Date; import java.util.List; @@ -67,16 +69,16 @@ public class AttendanceArrangementBo extends BaseEntity { @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endDate; - /** - * 前端传日历的开始时间和结束时间 - */ - private Date calendarStartDate; - private Date calendarEndTimeDate; /** * 前端传某天的当前日期 */ private Date currentDate; + /** + * 日期月份 + */ + @JsonFormat(pattern = "yyyy-MM") + private YearMonth month; /** diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java new file mode 100644 index 00000000..af5efea2 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/bo/AttendanceArrangementGroupBo.java @@ -0,0 +1,54 @@ +package org.dromara.property.domain.bo; + +import cn.hutool.core.date.DateTime; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.property.domain.AttendanceArrangementGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import org.dromara.property.domain.AttendanceScheduleCycle; +import org.dromara.property.domain.AttendanceUserGroup; +import org.dromara.property.domain.AttendanceWeekSet; +import org.dromara.property.domain.AttendanceShift; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDate; +import java.time.YearMonth; +import java.util.Date; +import java.util.List; + +/** + * 考勤排班组业务对象 attendance_arrangement_group + * + * @author mocheng + * @date 2025-07-30 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = AttendanceArrangementGroup.class, reverseConvertGenerate = false) +public class AttendanceArrangementGroupBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 排班名称 + */ + @NotBlank(message = "排班id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long arrangementId; + + /** + * 考勤组ID + */ + @NotNull(message = "考勤组ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long groupId; + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java new file mode 100644 index 00000000..116b52bf --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementGroupVo.java @@ -0,0 +1,46 @@ +package org.dromara.property.domain.vo; + +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.property.domain.*; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * 考勤排班组视图对象 attendance_arrangement_group + * + * @author mocheng + * @date 2025-07-30 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = AttendanceArrangementGroup.class) +public class AttendanceArrangementGroupVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 排班名称 + */ + @ExcelProperty(value = "排班id") + private Long arrangementId; + + /** + * 考勤组ID + */ + @ExcelProperty(value = "考勤组ID") + private Long groupId; + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java index 9f9fc293..c6ca7b0a 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/domain/vo/AttendanceArrangementVo.java @@ -8,7 +8,7 @@ import org.dromara.property.domain.*; import java.io.Serial; import java.io.Serializable; -import java.util.Date; +import java.time.LocalDate; import java.util.List; @@ -60,13 +60,13 @@ public class AttendanceArrangementVo implements Serializable { * 开始日期 */ @ExcelProperty(value = "开始日期") - private Date startDate; + private LocalDate startDate; /** * 结束日期(仅date_type=3时有效) */ @ExcelProperty(value = "结束日期(仅date_type=3时有效)") - private Date endDate; + private LocalDate endDate; /** * 状态:0-未生效,1-已生效 diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java new file mode 100644 index 00000000..a4fa14f6 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/mapper/AttendanceArrangementGroupMapper.java @@ -0,0 +1,16 @@ +package org.dromara.property.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.property.domain.AttendanceArrangementGroup; +import org.dromara.property.domain.vo.AttendanceArrangementGroupVo; + +/** + * 排班Mapper接口 + * + * @author mocheng + * @date 2025-07-15 + */ +public interface AttendanceArrangementGroupMapper extends BaseMapperPlus { + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java new file mode 100644 index 00000000..0e5d6d91 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementGroupService.java @@ -0,0 +1,12 @@ +package org.dromara.property.service; + +/** + * 排班Service接口 + * + * @author mocheng + * @date 2025-07-15 + */ +public interface IAttendanceArrangementGroupService { + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java index 5b659c76..e889d044 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/IAttendanceArrangementService.java @@ -1,13 +1,10 @@ package org.dromara.property.service; -import cn.hutool.core.date.DateTime; -import org.dromara.property.domain.AttendanceArrangement; -import org.dromara.property.domain.vo.AttendanceArrangementVo; -import org.dromara.property.domain.bo.AttendanceArrangementBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.bo.AttendanceArrangementBo; +import org.dromara.property.domain.vo.AttendanceArrangementVo; -import java.time.LocalDate; import java.util.Collection; import java.util.List; diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java new file mode 100644 index 00000000..a4a6be14 --- /dev/null +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementGroupServiceImpl.java @@ -0,0 +1,40 @@ +package org.dromara.property.service.impl; + +import cn.hutool.core.date.DateUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.property.domain.*; +import org.dromara.property.domain.bo.AttendanceArrangementBo; +import org.dromara.property.domain.constant.StatusConstant; +import org.dromara.property.domain.vo.AttendanceArrangementVo; +import org.dromara.property.mapper.*; +import org.dromara.property.service.IAttendanceArrangementGroupService; +import org.dromara.property.service.IAttendanceArrangementService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 排班Service业务层处理 + * + * @author mocheng + * @date 2025-07-15 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class AttendanceArrangementGroupServiceImpl implements IAttendanceArrangementGroupService { + + +} diff --git a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java index 2271d73c..cca1a7d9 100644 --- a/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java +++ b/ruoyi-modules/Property/src/main/java/org/dromara/property/service/impl/AttendanceArrangementServiceImpl.java @@ -41,11 +41,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS private final AttendanceGroupMapper attendanceGroupMapper; - private final AttendanceWeekSetMapper weekSetMapper; - - private final AttendanceShiftMapper attendanceShiftMapper; - - private final AttendanceScheduleCycleMapper scheduleCycleMapper; + private final AttendanceArrangementGroupMapper arrangementGroupMapper; /** * 查询排班 @@ -80,68 +76,9 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS Page attendanceArrangementVoPage = result.setRecords(result.getRecords().stream().peek(vo -> { - //1.如:在2号到10号有固定班制和排班制,根据当前日期查询出所有的考勤组id - //查询指定日期在哪些排班中 - List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate())); - //根据排班查询出考勤组id - List groupIds = arrangementList.stream().map(AttendanceArrangement::getGroupId).distinct().toList(); - - // 2.循环将所有的考勤组id设置到考勤组中 - //循环groupIds,循环和AttendanceGroup中的id做对比,如果有相同的,则取出attendanceGroup中的所有数据 - groupIds.forEach( - groupId -> { - //从数据库查询出当前考勤组的所有数据 - AttendanceGroup group = attendanceGroupMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceGroup::getId, groupId)); - - // 3.查询出当前考勤组的所有数据,从考勤组判断当前id是固定班制还是排班制 - if (group.getAttendanceType().equals(StatusConstant.FIXEDSCHEDULE)) { - // 3.1固定班制:将当前的日期转为周几,然后与数据库中的班次周数作对比,取出当前日期的班次信息 - //将传来的日期参数转为周几 - int week = DateUtil.dayOfWeek(bo.getCurrentDate()); - //取出当前日期的周数,与数据库中的班次周数作对比,取出当前日期的班次信息 - AttendanceWeekSet weekSet = weekSetMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId).eq(AttendanceWeekSet::getDayOfWeek, week)); - //将weekSet存到结果中 - AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); - arrangementVo.setWeekSet(weekSet); - //根据weekSet取出id,根据id查询出attendanceWeekSetShift表中的shiftId - Long shiftId = weekSet.getId(); - //根据shiftId查询attendanceShift表中对应的id的数据 - AttendanceShift shift = attendanceShiftMapper.selectById(shiftId); - //将shift存到结果中 - arrangementVo.setShift(shift); - - } else if (group.getAttendanceType().equals(StatusConstant.SHIFTSCHEDULE)) { - // 3.2排班制:判断第一天是从几号开始,循环判断,判断当前是循环中的第几天,取出当前天数的班次信息。 - //取出排班中的开始时间和结束时间 - Date startDate = bo.getStartDate(); - Date endDate = bo.getEndDate(); - Date currentDate = bo.getCurrentDate(); - //取出attendanceScheduleCycle表中的天数 - Integer cycleDays = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).getDayNumber(); - //在startDate和endDate之间循环,判端当前日期是cycleDays中的第几天 - int cycleDay = 0; - while (startDate.before(currentDate) || endDate.after(currentDate)) { - cycleDay++; - startDate = DateUtil.offsetDay(startDate, 1); - //判断当前日期是clcleDays中的第几天 - if (cycleDay > cycleDays) { - cycleDay = 1; - } - } - //根据cycleDay查询出当前日期的班次信息 - AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); - //将cycle存到结果中 - AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); - arrangementVo.setCycle(cycle); - - } - } - ); }).collect(Collectors.toList())); - - // //1.根据当前日期查询出排班信息 // AttendanceArrangementVo arrangementvo = baseMapper.selectVoByTime(bo.getCurrentDate()); // //2.查询人员组的信息 @@ -166,7 +103,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS } /** - * 查询符合条件的排班列表 + * 查询某个月的日历排班信息的排班列表 * * @param bo 查询条件 * @return 排班列表 @@ -174,60 +111,141 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS @Override public List queryList(AttendanceArrangementBo bo) { - Date startDate = bo.getStartDate(); - Date endDate = bo.getEndDate(); - Date calendarStartDate = bo.getCalendarStartDate(); - Date calendarEndTimeDate = bo.getCalendarEndTimeDate(); + LocalDate month = bo.getMonth().atEndOfMonth(); + // 1. 拿到日历的开始时间和结束时间 + LocalDate calendarStartDate = month.withDayOfMonth(1); + LocalDate calendarEndDate = month.withDayOfMonth(calendarStartDate.lengthOfMonth()); + + // 2. 根据日历的开始时间和结束时间查询出每一天的排班信息 + // 2.1 循环日历的开始时间和结束时间,判断 calendarStartDate 在哪些排班中 + List result = new ArrayList<>(); + + for (LocalDate date = calendarStartDate; date.isBefore(calendarEndDate); date = date.plusDays(1)) { + // 查询指定日期在哪些排班中 + List arrangementList = baseMapper.selectList( + Wrappers.lambdaQuery() + .ge(AttendanceArrangement::getStartDate, date.atStartOfDay(ZoneId.systemDefault()).toInstant()) + .le(AttendanceArrangement::getEndDate, date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1)) + ); + + // 根据排班查询出考勤组id + List groupIds = arrangementList.stream() + .map(AttendanceArrangement::getGroupId) + .distinct() + .toList(); + + // 如果当前日期没有排班,则跳过当前日期 + if (groupIds.isEmpty()) { + continue; + } + + // 循环 groupIds,循环和 AttendanceGroup 中的 id 做对比,如果有相同的,则取出 attendanceGroup 中的所有数据 + for (Long groupId : groupIds) { + AttendanceGroup attendanceGroup = attendanceGroupMapper.selectById(groupId); + if (attendanceGroup != null) { + // 创建 AttendanceArrangementVo 对象并设置属性 + AttendanceArrangementVo vo = new AttendanceArrangementVo(); + vo.setStartDate(LocalDate.from(date.atStartOfDay(ZoneId.systemDefault()))); + vo.setEndDate(LocalDate.from(date.atStartOfDay(ZoneId.systemDefault()).plusDays(1).toInstant().minusSeconds(1))); + // 设置其他属性... + result.add(vo); + } + } + + // 如果 collected 不为空,则返回 result + if (!result.isEmpty()) { + return result; + } + } + + // 循环结束后如果 result 仍为空,则返回空列表 + return Collections.emptyList(); - - - - //1.根据日历的开始时间和日历的结束时间查询所有的排班信息 - List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCalendarStartDate()).le(AttendanceArrangement::getEndDate, bo.getCalendarEndTimeDate())); - //2.查询人员组的信息 - //根据开始时间查询排班的id - List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); - //根据排班的id查询出排班的人员详细信息 - List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); - //3.将排班人员信息添加到排班信息中 - - return arrangementList.stream().map(arrangement -> { - AttendanceArrangementVo vo = MapstructUtils.convert(arrangement, AttendanceArrangementVo.class); - assert vo != null; - vo.setUserGroupList(userGroupList.stream().filter(userGroup -> userGroup.getScheduleId().equals(arrangement.getId())).collect(Collectors.toList())); - return vo; - }).collect(Collectors.toList()); - - -// //判断参数是固定排班制还是排班制 -// if (Objects.equals(bo.getScheduleType(), StatusConstant.FIXEDSCHEDULE)) { -// //固定班制 -// //获取所有的排班信息 -// List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceArrangement::getScheduleType, StatusConstant.FIXEDSCHEDULE)); -// //判断排班信息是否在日历的开始时间和结束时间之间 -// List filterList = arrangementList.stream().filter(arrangement -> { -// LocalDate startDate = arrangement.getStartDate(); -// LocalDate endDate = arrangement.getEndDate(); -// return startDate.isAfter(calendarStartDate) && endDate.isBefore(calendarEndTimeDate); -// }).toList(); +// //1.如:在2号到10号有固定班制和排班制,根据当前日期查询出所有的考勤组id +// //查询指定日期在哪些排班中 +// List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCurrentDate()).le(AttendanceArrangement::getEndDate, bo.getCurrentDate())); +// //根据排班查询出考勤组id +// List groupIds = arrangementList.stream().map(AttendanceArrangement::getGroupId).distinct().toList(); // -// //在日历的开始日期和结束日期之间,则获取所有固定班次的考勤组id -// List groupIds = filterList.stream().map(AttendanceArrangement::getGroupId).distinct().collect(Collectors.toList()); -// //根据考勤组id查询所有的固定班制 -// List weekSetList = weekSetMapper.selectList(Wrappers.lambdaQuery().in(AttendanceWeekSet::getGroupId, groupIds)); +// // 2.循环将所有的考勤组id设置到考勤组中 +// //循环groupIds,循环和AttendanceGroup中的id做对比,如果有相同的,则取出attendanceGroup中的所有数据 +// groupIds.forEach( +// groupId -> { +// //从数据库查询出当前考勤组的所有数据 +// AttendanceGroup group = attendanceGroupMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceGroup::getId, groupId)); // -// //根据固定班制的groupId查询出week_set_shift表中的数据 -// List shiftList = weekSetList.stream().flatMap(weekSet -> weekSet.getWeeksetShiftList().stream()).toList(); +// // 3.查询出当前考勤组的所有数据,从考勤组判断当前id是固定班制还是排班制 +// if (group.getAttendanceType().equals(StatusConstant.FIXEDSCHEDULE)) { +// // 3.1固定班制:将当前的日期转为周几,然后与数据库中的班次周数作对比,取出当前日期的班次信息 +// //将传来的日期参数转为周几 +// int week = DateUtil.dayOfWeek(bo.getCurrentDate()); +// //取出当前日期的周数,与数据库中的班次周数作对比,取出当前日期的班次信息 +// AttendanceWeekSet weekSet = weekSetMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceWeekSet::getGroupId, groupId).eq(AttendanceWeekSet::getDayOfWeek, week)); +// //将weekSet存到结果中 +// AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); +// arrangementVo.setWeekSet(weekSet); +// //根据weekSet取出id,根据id查询出attendanceWeekSetShift表中的shiftId +// Long shiftId = weekSet.getId(); +// //根据shiftId查询attendanceShift表中对应的id的数据 +// AttendanceShift shift = attendanceShiftMapper.selectById(shiftId); +// //将shift存到结果中 +// arrangementVo.setShift(shift); // -// } else if (Objects.equals(bo.getScheduleType(), StatusConstant.SHIFTSCHEDULE)) { -// //排班制 -// //获取所有的排班信息 -// List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().eq(AttendanceArrangement::getScheduleType, StatusConstant.SHIFTSCHEDULE)); -// } +// } else if (group.getAttendanceType().equals(StatusConstant.SHIFTSCHEDULE)) { +// // 3.2排班制:判断第一天是从几号开始,循环判断,判断当前是循环中的第几天,取出当前天数的班次信息。 +// //取出排班中的开始时间和结束时间 +// Date startDate = bo.getStartDate(); +// Date endDate = bo.getEndDate(); +// Date currentDate = bo.getCurrentDate(); +// //取出attendanceScheduleCycle表中的天数 +// Integer cycleDays = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId)).getDayNumber(); +// //在startDate和endDate之间循环,判端当前日期是cycleDays中的第几天 +// int cycleDay = 0; +// while (startDate.before(currentDate) || endDate.after(currentDate)) { +// cycleDay++; +// startDate = DateUtil.offsetDay(startDate, 1); +// //判断当前日期是clcleDays中的第几天 +// if (cycleDay > cycleDays) { +// cycleDay = 1; +// } +// } +// //根据cycleDay查询出当前日期的班次信息 +// AttendanceScheduleCycle cycle = scheduleCycleMapper.selectOne(Wrappers.lambdaQuery().eq(AttendanceScheduleCycle::getGroupId, groupId).eq(AttendanceScheduleCycle::getDayNumber, cycleDay)); +// //将cycle存到结果中 +// AttendanceArrangementVo arrangementVo = new AttendanceArrangementVo(); +// arrangementVo.setCycle(cycle); +// +// } +// } +// ); + +// // 计算交集的开始时间(取较晚的开始时间)和结束时间(取较早的结束时间) +// Date overlapStart = calendarStartDate.after(startDate) +// ? calendarStartDate : startDate; +// Date overlapEnd = calendarEndTimeDate.before(endDate) +// ? calendarEndTimeDate : endDate; + + //根据交集的时间范围查询排班信息 + + +// //1.根据日历的开始时间和日历的结束时间查询所有的排班信息 +//// List arrangementList = baseMapper.selectList(Wrappers.lambdaQuery().ge(AttendanceArrangement::getStartDate, bo.getCalendarStartDate()).le(AttendanceArrangement::getEndDate, bo.getCalendarEndTimeDate())); +// //2.查询人员组的信息 +// //根据开始时间查询排班的id +// List scheduleIdList = arrangementList.stream().map(AttendanceArrangement::getId).collect(Collectors.toList()); +// //根据排班的id查询出排班的人员详细信息 +// List userGroupList = userGroupMapper.selectList(Wrappers.lambdaQuery().in(AttendanceUserGroup::getScheduleId, scheduleIdList)); +// //3.将排班人员信息添加到排班信息中 +// +// return arrangementList.stream().map(arrangement -> { +// AttendanceArrangementVo vo = MapstructUtils.convert(arrangement, AttendanceArrangementVo.class); +// assert vo != null; +// vo.setUserGroupList(userGroupList.stream().filter(userGroup -> userGroup.getScheduleId().equals(arrangement.getId())).collect(Collectors.toList())); +// return vo; +// }).collect(Collectors.toList()); -// return voList; } @@ -264,6 +282,11 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS judgeDate(bo, add); + AttendanceArrangementGroup attendanceArrangementGroup = new AttendanceArrangementGroup(); + //向排班和考勤组中间表中插入数据 + attendanceArrangementGroup.setGroupId(add.getGroupId()); + attendanceArrangementGroup.setArrangementId(bo.getId()); + arrangementGroupMapper.insert(attendanceArrangementGroup); //取出当前新增的排班的id Long ArrangementId = add.getId(); @@ -290,7 +313,7 @@ public class AttendanceArrangementServiceImpl implements IAttendanceArrangementS LocalDate longTimeEndDate = LocalDate.of(2099, 12, 31); add.setEndDate(Date.from(longTimeEndDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); } - if (bo.getDateType().equals(StatusConstant.SHORTTIME)){ + if (bo.getDateType().equals(StatusConstant.SHORTTIME)) { add.setEndDate(bo.getEndDate()); } } diff --git a/ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml b/ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml new file mode 100644 index 00000000..afa306e3 --- /dev/null +++ b/ruoyi-modules/Property/src/main/resources/mapper/Property/AttendanceArrangementGroupMapper.xml @@ -0,0 +1,7 @@ + + + + +