diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java index ec188e1..b16e8de 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java @@ -11,6 +11,7 @@ import org.dromara.platform.domain.vo.PointInfoVo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; import org.dromara.platform.listener.PointInfoListener; import org.dromara.platform.listener.WorkOrderInfoListener; +import org.dromara.platform.service.IContractInfoService; import org.dromara.platform.service.IPointInfoService; import org.dromara.platform.service.IWorkOrderInfoService; import org.springframework.validation.annotation.Validated; @@ -33,6 +34,9 @@ public class ExcelController { @Resource private IPointInfoService pointInfoService ; + @Resource + private IContractInfoService contractInfoService; + @Resource private IWorkOrderInfoService workOrderInfoService ; @PostMapping("/uploadPointInfo") @@ -96,7 +100,7 @@ public class ExcelController { public void uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException { long t1 = System.currentTimeMillis(); // 业务层 - EasyExcel.read(file.getInputStream(), WorkOrderInfoVo.class, new WorkOrderInfoListener(workOrderInfoService)).sheet().doRead(); + EasyExcel.read(file.getInputStream(), WorkOrderInfoVo.class, new WorkOrderInfoListener(workOrderInfoService,contractInfoService)).sheet().doRead(); response.setContentType("text/html;charset=utf8"); long t2 = System.currentTimeMillis(); response.getWriter().println("导入数据成功!,共用时:"+(t2-t1)+"ms"); diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ProjectInfoController.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ProjectInfoController.java index 616c10a..9fed5ea 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ProjectInfoController.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ProjectInfoController.java @@ -120,9 +120,9 @@ public class ProjectInfoController extends BaseController { */ //@SaCheckPermission("platform:projectInfo:getContractNameByProjectName") @GetMapping("/getContractNameByProjectName") - public R getContractNameByProjectName(@Param("projectName") String projectName) { - String contractName = projectInfoService.getContractNameByProjectName(projectName); - return R.ok(contractName); + public R> getContractNameByProjectName(@Param("projectName") String projectName) { + List contractNames = projectInfoService.getContractNameByProjectName(projectName); + return R.ok(contractNames); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java index 73017af..481a8e3 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java @@ -149,6 +149,8 @@ public class WorkOrderInfo extends TenantEntity { * 6 结案 * 7 处理中(已延期) * 8 作废 + * 9 待接单(派遣) + * 10 待接单(转派) * */ private Long status; diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderDelayBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderDelayBo.java index c164e0c..59546a5 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderDelayBo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderDelayBo.java @@ -10,6 +10,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; import java.util.Date; +import java.util.List; + import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -42,6 +44,8 @@ public class WorkOrderDelayBo extends BaseEntity { //@NotBlank(message = "所属合同的名称或编号不能为空", groups = { AddGroup.class, EditGroup.class }) private String contractName; + private List contractNames; + /** * 延期的原因说明 */ diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java index 1d86bef..fb428f3 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java @@ -53,6 +53,9 @@ public class WorkOrderInfoBo extends BaseEntity { //@NotBlank(message = "维护单位不能为空", groups = { AddGroup.class, EditGroup.class }) private String maintenanceUnit; + private List maintenanceUnits; + + /** * 报修人员 */ diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java index 9ef063c..40b87b9 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java @@ -93,6 +93,9 @@ public class PointInfoVo extends TenantEntity implements Serializable { @ExcelProperty(value = "所属项目") private String projectName; + + @ExcelProperty(value = "所属合同") + private String contractName; /** * 项目id */ diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java index 69d0fc1..199f612 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java @@ -92,7 +92,7 @@ public class WorkOrderInfoVo implements Serializable { private String responseLevel; /** - * 响应时限 + * 响应时限(处理) */ @ExcelProperty(value = "响应时限") private Long responseTime; @@ -187,6 +187,8 @@ public class WorkOrderInfoVo implements Serializable { * 6 结案 * 7 处理中(已延期) * 8 作废 + * 9 待接单(派遣) + * 10 待接单(转派) */ @ExcelProperty(value = "当前状态") private Long status; @@ -212,7 +214,12 @@ public class WorkOrderInfoVo implements Serializable { private String handler; /** - * 剩余时间 + * 剩余处理时间 */ private String restTime; + + /** + * 剩余接单时间 + */ + private String orderAcceptDeadline; } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java index a456856..5868867 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java @@ -6,6 +6,8 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.dromara.platform.domain.bo.WorkOrderInfoBo; import org.dromara.platform.domain.vo.WorkOrderInfoVo; +import org.dromara.platform.mapper.ContractInfoMapper; +import org.dromara.platform.service.IContractInfoService; import org.dromara.platform.service.IWorkOrderInfoService; import org.springframework.beans.BeanUtils; @@ -21,6 +23,10 @@ import java.util.List; public class WorkOrderInfoListener implements ReadListener { @Resource private IWorkOrderInfoService workOrderInfoService; + + @Resource + private IContractInfoService contractInfoService; + private List list = new ArrayList<>(); /** * 自己定义一个缓冲量 @@ -28,8 +34,10 @@ public class WorkOrderInfoListener implements ReadListener { private static final int BATCH_COUNT = 10; - public WorkOrderInfoListener(IWorkOrderInfoService workOrderInfoService) { + public WorkOrderInfoListener(IWorkOrderInfoService workOrderInfoService, + IContractInfoService contractInfoService) { this.workOrderInfoService = workOrderInfoService; + this.contractInfoService = contractInfoService; } /** @@ -41,16 +49,26 @@ public class WorkOrderInfoListener implements ReadListener { @Override public void invoke(WorkOrderInfoVo workOrderInfoVo, AnalysisContext analysisContext) { WorkOrderInfoBo bo = new WorkOrderInfoBo(); - BeanUtils.copyProperties(workOrderInfoVo, bo); - + BeanUtils.copyProperties(workOrderInfoVo, bo,"id"); + // TODO 这里需要优化的 改成批量查询 VO转entity // 读取一行数据就添加到集合 - list.add(bo); + //list.add(bo); + //list.forEach(item -> { + String unit = contractInfoService.getIoCompany(bo.getContractName()); + bo.setMaintenanceUnit(unit); + workOrderInfoService.insertByBo(bo); + //}); // 判断是否到达缓存量了 - if (list.size() >= BATCH_COUNT) { - list = new ArrayList<>(BATCH_COUNT); - list.forEach(workOrderInfoService::insertByBo); - } +// if (list.size() >= BATCH_COUNT) { +// list = new ArrayList<>(BATCH_COUNT); +// //list.forEach(workOrderInfoService::insertByBo); +// list.forEach(item -> { +// String unit = contractInfoService.getIoCompany(item.getContractName()); +// item.setMaintenanceUnit(unit); +// workOrderInfoService.insertByBo(item); +// }); +// } } /** @@ -60,8 +78,12 @@ public class WorkOrderInfoListener implements ReadListener { */ @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { - if (list.size() > 0) { - list.forEach(workOrderInfoService::insertByBo); - } +// if (list.size() > 0) { +// list.forEach(item -> { +// String unit = contractInfoService.getIoCompany(item.getContractName()); +// item.setMaintenanceUnit(unit); +// workOrderInfoService.insertByBo(item); +// }); +// } } } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ContractInfoMapper.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ContractInfoMapper.java index 8742fb0..74be872 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ContractInfoMapper.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ContractInfoMapper.java @@ -1,9 +1,14 @@ package org.dromara.platform.mapper; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; import org.dromara.platform.domain.ContractInfo; +import org.dromara.platform.domain.ProjectManager; import org.dromara.platform.domain.vo.ContractInfoVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import java.util.List; + /** * 合同信息Mapper接口 * @@ -11,5 +16,15 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * @date 2025-03-26 */ public interface ContractInfoMapper extends BaseMapperPlus { + /** + * 根据 业主单位名称获取对应的运维单位名称 + * @param partyA + * @return + */ + @Select("SELECT party_b FROM contract_info WHERE party_a = #{partyA} LIMIT 1") + String getPartyB(String partyA); + + @Select("SELECT contract_name FROM contract_info WHERE party_b = #{partyB} LIMIT 1") + String getContractName(String partyB); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ProjectInfoMapper.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ProjectInfoMapper.java index cf37534..db5ba1f 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ProjectInfoMapper.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ProjectInfoMapper.java @@ -1,5 +1,7 @@ package org.dromara.platform.mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import org.dromara.platform.domain.ProjectInfo; import org.dromara.platform.domain.vo.ProjectInfoVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; @@ -14,4 +16,15 @@ public interface ProjectInfoMapper extends BaseMapperPlus queryProjectNames(); + @Select({ + "SELECT", + " pi.order_taking_over_time", + "FROM", + " work_order_info woi", + "LEFT JOIN", + " project_info pi ON woi.project_name = pi.project_name", + "WHERE woi.project_name = #{projectName}", + "LIMIT 1" + }) + String selectOrderTakingOverTimeByProjectName(@Param("projectName") String projectName); } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IProjectInfoService.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IProjectInfoService.java index 82fb21b..e005714 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IProjectInfoService.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IProjectInfoService.java @@ -1,11 +1,10 @@ package org.dromara.platform.service; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.platform.domain.ContractInfo; -import org.dromara.platform.domain.ProjectInfo; -import org.dromara.platform.domain.vo.ProjectInfoVo; import org.dromara.platform.domain.bo.ProjectInfoBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.platform.domain.vo.ProjectInfoVo; import org.dromara.platform.domain.vo.ProjectSelectVo; import java.util.Collection; @@ -81,7 +80,7 @@ public interface IProjectInfoService { * @param projectName * @return */ - String getContractNameByProjectName(String projectName); + List getContractNameByProjectName(String projectName); /** * 根据项目名称查询合同信息 diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java index 206e3ef..1bce297 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.platform.domain.ProjectCategoryPoint; +import org.dromara.platform.domain.WorkOrderInfo; import org.dromara.platform.domain.bo.ProjectCategoryPointBo; import org.dromara.platform.domain.vo.DailyInspectionReportVo; import org.dromara.platform.domain.vo.PointSelectVo; @@ -70,13 +71,6 @@ public class PointInfoServiceImpl implements IPointInfoService { public TableDataInfo queryPageList(PointInfoBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - List records = result.getRecords(); - List sortedRecords = records.stream() - // 默认小到大 反转 为降序 - .sorted(Comparator.comparing(PointInfoVo::getCreateTime).reversed()) - .collect(Collectors.toList()); - result.setRecords(sortedRecords); - return TableDataInfo.build(result); } @@ -108,6 +102,8 @@ public class PointInfoServiceImpl implements IPointInfoService { lqw.eq(StringUtils.isNotBlank(bo.getPort()), PointInfo::getPort, bo.getPort()); lqw.eq(StringUtils.isNotBlank(bo.getIp()), PointInfo::getIp, bo.getIp()); lqw.eq(bo.getStatus() != null, PointInfo::getStatus, bo.getStatus()); + // 添加按创建时间降序排序 + lqw.orderByDesc(PointInfo::getCreateTime); return lqw; } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ProjectInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ProjectInfoServiceImpl.java index 7e3ab86..69d1d2f 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ProjectInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ProjectInfoServiceImpl.java @@ -29,6 +29,7 @@ import org.dromara.platform.mapper.ProjectInfoMapper; import org.dromara.platform.service.IProjectInfoService; import java.util.*; +import java.util.stream.Collectors; /** * 项目信息Service业务层处理 @@ -207,12 +208,20 @@ public class ProjectInfoServiceImpl implements IProjectInfoService { } @Override - public String getContractNameByProjectName(String projectName) { + public List getContractNameByProjectName(String projectName) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ContractInfo::getProjectName, projectName); - ContractInfo contractInfo = contractInfoMapper.selectOne(queryWrapper); - String contractName = contractInfo.getContractName(); - return contractName; + List contractInfoList = contractInfoMapper.selectList(queryWrapper); + if (contractInfoList == null) { + return Collections.emptyList(); + } + List contractNameList = contractInfoList + .stream() + .map(ContractInfo::getContractName) + .collect(Collectors.toList()); + return contractNameList; + + } @Override diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java index be46fb2..573c972 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java @@ -1,6 +1,9 @@ package org.dromara.platform.service.impl; +import cn.hutool.core.collection.CollectionUtil; import jakarta.annotation.Resource; +import org.dromara.common.core.domain.dto.RoleDTO; +import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,19 +12,21 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import org.dromara.platform.domain.Attachment; -import org.dromara.platform.domain.AttachmentSerializer; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.platform.domain.*; +import org.dromara.platform.mapper.ContractInfoMapper; import org.dromara.platform.service.IContractInfoService; import org.springframework.stereotype.Service; import org.dromara.platform.domain.bo.WorkOrderDelayBo; import org.dromara.platform.domain.vo.WorkOrderDelayVo; -import org.dromara.platform.domain.WorkOrderDelay; import org.dromara.platform.mapper.WorkOrderDelayMapper; import org.dromara.platform.service.IWorkOrderDelayService; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 工单延期审核Service业务层处理 @@ -38,6 +43,9 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService { @Resource private IContractInfoService contractInfoService; + @Resource + private ContractInfoMapper contractInfoMapper; + /** * 查询工单延期审核 * @@ -68,6 +76,28 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService { */ @Override public TableDataInfo queryPageList(WorkOrderDelayBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + String deptName = loginUser.getDeptName(); + // 获取用户角色列表 + List roles = loginUser.getRoles(); + + boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName())); + if (hasOwnerRole && deptName.equals("江北公安")){ + // 通过合同甲方获取对应的合同乙方(运维单位) + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(ContractInfo::getContractName, Arrays.asList("电信", "移动","盈力")); + List contractInfos = contractInfoMapper.selectList(queryWrapper); + List contractNames = contractInfos + .stream() + .map(ContractInfo::getContractName) + .collect(Collectors.toList()); + bo.setContractNames(contractNames); + } +// else if (hasOwnerRole && deptName.equals("鄞州公安")){ +// // TODO 鄞州公安 +// }else { +// bo.setContractNames(Arrays.asList("其他")); +// } LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); @@ -89,7 +119,7 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), WorkOrderDelay::getProjectName, bo.getProjectName()); - lqw.like(StringUtils.isNotBlank(bo.getContractName()), WorkOrderDelay::getContractName, bo.getContractName()); + lqw.eq(StringUtils.isNotBlank(bo.getContractName()), WorkOrderDelay::getContractName, bo.getContractName()); lqw.eq(StringUtils.isNotBlank(bo.getDelayReason()), WorkOrderDelay::getDelayReason, bo.getDelayReason()); lqw.eq(bo.getBeforeDelayTime() != null, WorkOrderDelay::getBeforeDelayTime, bo.getBeforeDelayTime()); lqw.eq(bo.getAfterDelayTime() != null, WorkOrderDelay::getAfterDelayTime, bo.getAfterDelayTime()); @@ -110,6 +140,11 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService { lqw.eq(StringUtils.isNotBlank(bo.getHandlerId()), WorkOrderDelay::getHandlerId, bo.getHandlerId()); lqw.eq(StringUtils.isNotBlank(bo.getApprover()), WorkOrderDelay::getApprover, bo.getApprover()); lqw.eq(bo.getStatus() != null, WorkOrderDelay::getStatus, bo.getStatus()); + lqw.in(CollectionUtil.isNotEmpty(bo.getContractNames()), + WorkOrderDelay::getContractName, + bo.getContractNames()); + // 添加按创建时间降序排序 + lqw.orderByDesc(WorkOrderDelay::getCreateTime); return lqw; } diff --git a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java index aee481e..db0bfc4 100644 --- a/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java +++ b/ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.platform.service.impl; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import jakarta.annotation.Resource; @@ -51,6 +52,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { private final WorkOrderInfoMapper baseMapper; + @Resource + private ContractInfoMapper contractInfoMapper; + @Resource + private ProjectInfoMapper projectInfoMapper; + + @Resource private IProjectInfoService projectInfoService; @Resource @@ -130,26 +137,32 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { */ @Override public TableDataInfo queryPageList(WorkOrderInfoBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + String deptName = loginUser.getDeptName(); log.info("用户昵称:{}-->角色{}-->部门:{}",loginUser.getNickname(),loginUser.getRoles(),loginUser.getDeptName()); - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - String username = loginUser.getUsername(); // 获取用户角色列表 List roles = loginUser.getRoles(); // 提前判断是否有 "监理" 和 "业主" 角色 boolean hasUnitRole = roles.stream().anyMatch(role -> "运维人员".equals(role.getRoleName())); boolean hasSupervisorRole = roles.stream().anyMatch(role -> "监理".equals(role.getRoleName())); boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName())); + // 如果是运维角色则增加所属部门作为查询条件 if (hasUnitRole){ - List records = result.getRecords(); - List sortedRecords = records.stream() - //根据单位过滤 - .filter(item -> item.getMaintenanceUnit().equals(loginUser.getDeptName())) - .collect(Collectors.toList()); - result.setRecords(sortedRecords); - result.setTotal(sortedRecords.size()); + bo.setMaintenanceUnit(deptName); + } + if (hasOwnerRole){ + // 通过合同甲方获取对应的合同乙方(运维单位) + if (deptName.equals("江北公安")){ + List partyBList = Arrays.asList("电信", "移动","盈力"); + bo.setMaintenanceUnits(partyBList); + }else if (deptName.equals("鄞州公安")){ + List partyBList = Arrays.asList("时代"); + bo.setMaintenanceUnits(partyBList); + } } + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -188,10 +201,17 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { lqw.eq(StringUtils.isNotBlank(bo.getFaultDescription()), WorkOrderInfo::getFaultDescription, bo.getFaultDescription()); lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), WorkOrderInfo::getAttachment, bo.getAttachment()); lqw.eq(bo.getMaintenanceRequirement() != null, WorkOrderInfo::getMaintenanceRequirement, bo.getMaintenanceRequirement()); + // 运维单位多选 + lqw.in(CollectionUtil.isNotEmpty(bo.getMaintenanceUnits()), + WorkOrderInfo::getMaintenanceUnit, + bo.getMaintenanceUnits()); + lqw.eq(StringUtils.isNotBlank(bo.getDispatchOpinion()), WorkOrderInfo::getDispatchOpinion, bo.getDispatchOpinion()); lqw.eq(bo.getIsDispatched() != null, WorkOrderInfo::getIsDispatched, bo.getIsDispatched()); lqw.eq(StringUtils.isNotBlank(bo.getLatitude()), WorkOrderInfo::getLatitude, bo.getLatitude()); lqw.eq(StringUtils.isNotBlank(bo.getLongitude()), WorkOrderInfo::getLongitude, bo.getLongitude()); + // 运维单位 + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceUnit()), WorkOrderInfo::getMaintenanceUnit, bo.getMaintenanceUnit()); //当前状态:status lqw.eq(bo.getStatus() != null, WorkOrderInfo::getStatus, bo.getStatus()); @@ -375,7 +395,9 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public void takeOrder(String workOrderId) { WorkOrderInfoVo workOrderInfoVo = baseMapper.selectVoById(workOrderId); - if (workOrderInfoVo.getStatus() != 1){ + log.info("当前工单状态为:{}", workOrderInfoVo.getStatus()); + Set allowedStatuses = Set.of(1L, 9L, 10L); + if (!allowedStatuses.contains(workOrderInfoVo.getStatus())) { throw new ServiceException("当前工单状态未处于:待接单状态,不能进行接单操作!"); } @@ -423,20 +445,22 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { public TableDataInfo dealWithList(WorkOrderInfoBo bo, PageQuery pageQuery) { LoginUser loginUser = LoginHelper.getLoginUser(); String username = loginUser.getUsername(); - + //TODO 优化:查询而不是过滤 + // 如果是运维角色则增加所属部门作为查询条件 + List roles = loginUser.getRoles(); + boolean hasUnitRole = roles.stream().anyMatch(role -> "运维人员".equals(role.getRoleName())); + if (hasUnitRole){ + bo.setMaintenanceUnit(loginUser.getDeptName()); + } LambdaQueryWrapper lqw = buildQueryWrapper(bo); + // 设置工单状态:1:待接单 2:处理中 7:处理中(已延期) + lqw.in(WorkOrderInfo::getStatus, Arrays.asList(1, 2, 7,9,10)); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); List records = result.getRecords(); - List filterRecords = records.stream() - .filter(record -> record.getStatus() != null - && (record.getStatus() == 1 || record.getStatus() == 2 || record.getStatus() == 7) - ) - // TODO 角色过滤 - .filter(item -> "admin".equals(username) || item.getMaintenanceUnit().equals(loginUser.getDeptName())) - .collect(Collectors.toList()); + // 封装 - for (WorkOrderInfoVo record : filterRecords) { + for (WorkOrderInfoVo record : records) { String workOrderId = record.getId(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); @@ -446,12 +470,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { queryWrapper.last("LIMIT 1"); WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); - if (target != null && target.getOperationTime() != null) { + if (target != null + && target.getOperationTime() != null + && (record.getStatus() != 9 && record.getStatus() != 10)) { Date operationTime = target.getOperationTime(); // 单位:小时 Long responseTime = record.getResponseTime(); - // 设置剩余时间提示 + //TODO 设置剩余处理时间 record.setRestTime(getTimeLeft(operationTime, responseTime)); + } else { // 如果没有找到接单记录或没有接单时间,可以设为默认值 record.setRestTime("暂无接单信息"); @@ -468,11 +495,39 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { record.setRestTime(getTimeLeft(dueDateTime)); } } - } + LambdaQueryWrapper dispatchQuery = new LambdaQueryWrapper<>(); + dispatchQuery.eq(WorkOrderProcess::getWorkOrderId, workOrderId); + // * 9 待接单(派遣) + // * 10 待接单(转派) + if (record.getStatus() == 10){ + dispatchQuery.eq(WorkOrderProcess::getStage, "事件转派"); + }else { + dispatchQuery.eq(WorkOrderProcess::getStage, "故障派遣"); + } + // 按照时间降序排,最新的记录在最前面 + dispatchQuery.orderByDesc(WorkOrderProcess::getCreateTime); + dispatchQuery.last("LIMIT 1"); + WorkOrderProcess dispatchProcess = workOrderProcessMapper.selectOne(dispatchQuery); + + String projectName = record.getProjectName(); + // 根据项目名称获取接单超期时间 + String orderTakingOverTime = projectInfoMapper.selectOrderTakingOverTimeByProjectName(projectName); + if (dispatchProcess != null + && dispatchProcess.getOperationTime() != null) { + Date operationTime = dispatchProcess.getOperationTime(); + // 设置剩余接单时间 + record.setOrderAcceptDeadline(getTimeLeft(operationTime, Long.valueOf(orderTakingOverTime))); + + } else { + record.setOrderAcceptDeadline("暂无派遣信息"); + } + + if (record.getStatus() == 7 || record.getStatus() == 2){ + record.setOrderAcceptDeadline("正在处理中.."); + } + } - result.setRecords(filterRecords); - result.setTotal(filterRecords.size()); return TableDataInfo.build(result); } @@ -550,39 +605,37 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public TableDataInfo reviewList(WorkOrderInfoBo bo, PageQuery pageQuery) { LoginUser loginUser = LoginHelper.getLoginUser(); - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - List records = result.getRecords(); - + String deptName = loginUser.getDeptName(); // 获取用户角色列表 List roles = loginUser.getRoles(); // 提前判断是否有 "监理" 和 "业主" 角色 boolean hasSupervisorRole = roles.stream().anyMatch(role -> "监理".equals(role.getRoleName())); boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName())); + if (hasOwnerRole){ + // 通过合同甲方获取对应的合同乙方(运维单位) + if (deptName.equals("江北公安")){ + List partyBList = Arrays.asList("电信", "移动","盈力"); + bo.setMaintenanceUnits(partyBList); + }else if (deptName.equals("鄞州公安")){ + List partyBList = Arrays.asList("时代"); + bo.setMaintenanceUnits(partyBList); + } + } + LambdaQueryWrapper lqw = buildQueryWrapper(bo); - List filterRecords = records.stream() - .filter(record -> record.getStatus() != null - && (record.getStatus() == 4 || record.getStatus() == 5)) - .filter(record -> { - // 如果都没有这两个角色,则保留所有 status == 4 || 5 的记录 - if (!hasSupervisorRole && !hasOwnerRole) { - return true; - } - // 监理:只保留 status == 4 - if (hasSupervisorRole && record.getStatus() == 4) { - return true; - } - // 业主:只保留 status == 5 - if (hasOwnerRole && record.getStatus() == 5) { - return true; - } - return false; - }) - .collect(Collectors.toList()); + lqw.in(WorkOrderInfo::getStatus, Arrays.asList(4, 5)); - result.setRecords(filterRecords); - result.setTotal(filterRecords.size()); + if (hasSupervisorRole){ + //监理初审(暂定后续可配) + lqw.in(WorkOrderInfo::getStatus, Arrays.asList(4)); + } + if (hasOwnerRole){ + //业主终审(暂定后续可配) + lqw.in(WorkOrderInfo::getStatus, Arrays.asList(5)); + } + + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -943,6 +996,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); + queryWrapper.orderByDesc(WorkOrderProcess::getOperationTime).last("LIMIT 1"); WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); Date operationTime = target.getOperationTime(); // 1.创建工单延期信息 @@ -1107,16 +1161,28 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { @Override public TableDataInfo dispatchList(WorkOrderInfoBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + String deptName = loginUser.getDeptName(); + log.info("用户昵称:{}-->角色{}-->部门:{}",loginUser.getNickname(),loginUser.getRoles(),loginUser.getDeptName()); + // 获取用户角色列表 + List roles = loginUser.getRoles(); + // 业主只能看到自己负责的工单 + boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName())); + if (hasOwnerRole){ + // 通过合同甲方获取对应的合同乙方(运维单位) + if (deptName.equals("江北公安")){ + List partyBList = Arrays.asList("电信", "移动","盈力"); + bo.setMaintenanceUnits(partyBList); + }else if (deptName.equals("鄞州公安")){ + List partyBList = Arrays.asList("时代"); + bo.setMaintenanceUnits(partyBList); + } + } LambdaQueryWrapper lqw = buildQueryWrapper(bo); + //status 0 待派遣 3 运维单位处理时回退至派遣 + lqw.in(WorkOrderInfo::getStatus, Arrays.asList(0, 3)); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - List records = result.getRecords(); - List filterRecords = records.stream() - .filter(record -> record.getStatus() != null - && (record.getStatus() == 0 || record.getStatus() == 3) - ) - .collect(Collectors.toList()); - result.setRecords(filterRecords); - result.setTotal(filterRecords.size()); return TableDataInfo.build(result); } @@ -1167,7 +1233,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { if (flag) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(WorkOrderInfo::getId, workOrderId) - .set(WorkOrderInfo::getStatus, 1); + //待接单(派遣) + .set(WorkOrderInfo::getStatus, 9); baseMapper.update(null, updateWrapper); log.info("已派遣至运维单位!"); } @@ -1208,6 +1275,45 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService { baseMapper.update(null, updateWrapper); log.info("作废!"); } + }else if (handle.equals("事件转派")){ + WorkOrderProcessBo workOrderProcess = new WorkOrderProcessBo(); + workOrderProcess.setWorkOrderId(workOrderId); + workOrderProcess.setOperator(loginUser.getNickname()); + workOrderProcess.setStage("事件转派"); + workOrderProcess.setOperationName("事件转派"); + workOrderProcess.setDescription("在故障派遣环节进行了事件转派操作,派遣给"+bo.getMaintenanceUnit()+"处理"); + // 获取最近一个节点的操作时间 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId) + .orderByDesc(WorkOrderProcess::getOperationTime) + .last("LIMIT 1"); + WorkOrderProcess recentTarget = workOrderProcessMapper.selectOne(wrapper); + log.info("最近一个节点:{}-->操作时间{}", recentTarget.getOperationName(), recentTarget.getOperationTime()); + Date lastTime = recentTarget.getOperationTime(); + LocalDateTime time1 = LocalDateTime.ofInstant(lastTime.toInstant(), ZoneId.systemDefault()); + // 设置操作时间 + LocalDateTime time2 = LocalDateTime.now(); + Date date2 = Date.from(time2.atZone(ZoneId.systemDefault()).toInstant()); + workOrderProcess.setOperationTime(date2); + // 设置派遣意见返回 + workOrderProcess.setFeedback(bo.getDispatchOpinion()); + // 计算时间差 + Duration duration = Duration.between(time1, time2); + long durationInSeconds = duration.getSeconds(); + String formatDuration = formatDuration((int) durationInSeconds); + workOrderProcess.setDuration(formatDuration); + + Boolean flag = workOrderProcessService.insertByBo(workOrderProcess); + + if (flag) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(WorkOrderInfo::getId, workOrderId) + //待接单(转派) + .set(WorkOrderInfo::getStatus,10) + .set(WorkOrderInfo::getMaintenanceUnit, bo.getMaintenanceUnit()); + baseMapper.update(null, updateWrapper); + log.info("事件转派!"); + } } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java index 968bbe9..fb301eb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java @@ -137,4 +137,9 @@ public class SysDeptController extends BaseController { return R.ok(deptService.selectDeptByIds(deptIds == null ? null : List.of(deptIds))); } + @GetMapping("/getOwnerList") + public R> getOwnerList() { + List depts = deptService.getOwnerList(); + return R.ok(depts); + } } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java index bf16642..fb6c99b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -122,4 +122,6 @@ public interface ISysDeptService { * @return 结果 */ int deleteDeptById(Long deptId); + + List getOwnerList(); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 49b18b7..89146fb 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -336,4 +336,12 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { return baseMapper.deleteById(deptId); } + @Override + public List getOwnerList() { + SysDeptBo bo = new SysDeptBo(); + bo.setDeptCategory("yezhu"); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectDeptList(lqw); + } + }