Browse Source

工单管理若干需求调整

ops-management-platform-backend-dev
gjh 2 weeks ago
parent
commit
c89053e3ca
  1. 6
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ExcelController.java
  2. 6
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/controller/ProjectInfoController.java
  3. 2
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java
  4. 4
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderDelayBo.java
  5. 3
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/bo/WorkOrderInfoBo.java
  6. 3
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/PointInfoVo.java
  7. 11
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/vo/WorkOrderInfoVo.java
  8. 44
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/listener/WorkOrderInfoListener.java
  9. 15
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ContractInfoMapper.java
  10. 13
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ProjectInfoMapper.java
  11. 9
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IProjectInfoService.java
  12. 10
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/PointInfoServiceImpl.java
  13. 17
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/ProjectInfoServiceImpl.java
  14. 43
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java
  15. 224
      ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java
  16. 5
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysDeptController.java
  17. 2
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java
  18. 8
      ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java

6
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.domain.vo.WorkOrderInfoVo;
import org.dromara.platform.listener.PointInfoListener; import org.dromara.platform.listener.PointInfoListener;
import org.dromara.platform.listener.WorkOrderInfoListener; import org.dromara.platform.listener.WorkOrderInfoListener;
import org.dromara.platform.service.IContractInfoService;
import org.dromara.platform.service.IPointInfoService; import org.dromara.platform.service.IPointInfoService;
import org.dromara.platform.service.IWorkOrderInfoService; import org.dromara.platform.service.IWorkOrderInfoService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -33,6 +34,9 @@ public class ExcelController {
@Resource @Resource
private IPointInfoService pointInfoService ; private IPointInfoService pointInfoService ;
@Resource
private IContractInfoService contractInfoService;
@Resource @Resource
private IWorkOrderInfoService workOrderInfoService ; private IWorkOrderInfoService workOrderInfoService ;
@PostMapping("/uploadPointInfo") @PostMapping("/uploadPointInfo")
@ -96,7 +100,7 @@ public class ExcelController {
public void uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException { public void uploadWorkOrderInfo(MultipartFile file, HttpServletResponse response) throws IOException {
long t1 = System.currentTimeMillis(); 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"); response.setContentType("text/html;charset=utf8");
long t2 = System.currentTimeMillis(); long t2 = System.currentTimeMillis();
response.getWriter().println("导入数据成功!,共用时:"+(t2-t1)+"ms"); response.getWriter().println("导入数据成功!,共用时:"+(t2-t1)+"ms");

6
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") //@SaCheckPermission("platform:projectInfo:getContractNameByProjectName")
@GetMapping("/getContractNameByProjectName") @GetMapping("/getContractNameByProjectName")
public R<String> getContractNameByProjectName(@Param("projectName") String projectName) { public R<List<String>> getContractNameByProjectName(@Param("projectName") String projectName) {
String contractName = projectInfoService.getContractNameByProjectName(projectName); List<String> contractNames = projectInfoService.getContractNameByProjectName(projectName);
return R.ok(contractName); return R.ok(contractNames);
} }

2
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/domain/WorkOrderInfo.java

@ -149,6 +149,8 @@ public class WorkOrderInfo extends TenantEntity {
* 6 结案 * 6 结案
* 7 处理中(已延期) * 7 处理中(已延期)
* 8 作废 * 8 作废
* 9 待接单(派遣)
* 10 待接单(转派)
* *
*/ */
private Long status; private Long status;

4
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 lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -42,6 +44,8 @@ public class WorkOrderDelayBo extends BaseEntity {
//@NotBlank(message = "所属合同的名称或编号不能为空", groups = { AddGroup.class, EditGroup.class }) //@NotBlank(message = "所属合同的名称或编号不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractName; private String contractName;
private List<String> contractNames;
/** /**
* 延期的原因说明 * 延期的原因说明
*/ */

3
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 }) //@NotBlank(message = "维护单位不能为空", groups = { AddGroup.class, EditGroup.class })
private String maintenanceUnit; private String maintenanceUnit;
private List<String> maintenanceUnits;
/** /**
* 报修人员 * 报修人员
*/ */

3
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 = "所属项目") @ExcelProperty(value = "所属项目")
private String projectName; private String projectName;
@ExcelProperty(value = "所属合同")
private String contractName;
/** /**
* 项目id * 项目id
*/ */

11
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; private String responseLevel;
/** /**
* 响应时限 * 响应时限(处理)
*/ */
@ExcelProperty(value = "响应时限") @ExcelProperty(value = "响应时限")
private Long responseTime; private Long responseTime;
@ -187,6 +187,8 @@ public class WorkOrderInfoVo implements Serializable {
* 6 结案 * 6 结案
* 7 处理中(已延期) * 7 处理中(已延期)
* 8 作废 * 8 作废
* 9 待接单(派遣)
* 10 待接单(转派)
*/ */
@ExcelProperty(value = "当前状态") @ExcelProperty(value = "当前状态")
private Long status; private Long status;
@ -212,7 +214,12 @@ public class WorkOrderInfoVo implements Serializable {
private String handler; private String handler;
/** /**
* 剩余时间 * 剩余处理时间
*/ */
private String restTime; private String restTime;
/**
* 剩余接单时间
*/
private String orderAcceptDeadline;
} }

44
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 lombok.extern.slf4j.Slf4j;
import org.dromara.platform.domain.bo.WorkOrderInfoBo; import org.dromara.platform.domain.bo.WorkOrderInfoBo;
import org.dromara.platform.domain.vo.WorkOrderInfoVo; 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.dromara.platform.service.IWorkOrderInfoService;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
@ -21,6 +23,10 @@ import java.util.List;
public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> { public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
@Resource @Resource
private IWorkOrderInfoService workOrderInfoService; private IWorkOrderInfoService workOrderInfoService;
@Resource
private IContractInfoService contractInfoService;
private List<WorkOrderInfoBo> list = new ArrayList<>(); private List<WorkOrderInfoBo> list = new ArrayList<>();
/** /**
* 自己定义一个缓冲量 * 自己定义一个缓冲量
@ -28,8 +34,10 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
private static final int BATCH_COUNT = 10; private static final int BATCH_COUNT = 10;
public WorkOrderInfoListener(IWorkOrderInfoService workOrderInfoService) { public WorkOrderInfoListener(IWorkOrderInfoService workOrderInfoService,
IContractInfoService contractInfoService) {
this.workOrderInfoService = workOrderInfoService; this.workOrderInfoService = workOrderInfoService;
this.contractInfoService = contractInfoService;
} }
/** /**
@ -41,16 +49,26 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
@Override @Override
public void invoke(WorkOrderInfoVo workOrderInfoVo, AnalysisContext analysisContext) { public void invoke(WorkOrderInfoVo workOrderInfoVo, AnalysisContext analysisContext) {
WorkOrderInfoBo bo = new WorkOrderInfoBo(); 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) { // if (list.size() >= BATCH_COUNT) {
list = new ArrayList<>(BATCH_COUNT); // list = new ArrayList<>(BATCH_COUNT);
list.forEach(workOrderInfoService::insertByBo); // //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<WorkOrderInfoVo> {
*/ */
@Override @Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) { public void doAfterAllAnalysed(AnalysisContext analysisContext) {
if (list.size() > 0) { // if (list.size() > 0) {
list.forEach(workOrderInfoService::insertByBo); // list.forEach(item -> {
} // String unit = contractInfoService.getIoCompany(item.getContractName());
// item.setMaintenanceUnit(unit);
// workOrderInfoService.insertByBo(item);
// });
// }
} }
} }

15
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ContractInfoMapper.java

@ -1,9 +1,14 @@
package org.dromara.platform.mapper; 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.ContractInfo;
import org.dromara.platform.domain.ProjectManager;
import org.dromara.platform.domain.vo.ContractInfoVo; import org.dromara.platform.domain.vo.ContractInfoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import java.util.List;
/** /**
* 合同信息Mapper接口 * 合同信息Mapper接口
* *
@ -11,5 +16,15 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* @date 2025-03-26 * @date 2025-03-26
*/ */
public interface ContractInfoMapper extends BaseMapperPlus<ContractInfo, ContractInfoVo> { public interface ContractInfoMapper extends BaseMapperPlus<ContractInfo, ContractInfoVo> {
/**
* 根据 业主单位名称获取对应的运维单位名称
* @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);
} }

13
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/mapper/ProjectInfoMapper.java

@ -1,5 +1,7 @@
package org.dromara.platform.mapper; 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.ProjectInfo;
import org.dromara.platform.domain.vo.ProjectInfoVo; import org.dromara.platform.domain.vo.ProjectInfoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@ -14,4 +16,15 @@ public interface ProjectInfoMapper extends BaseMapperPlus<ProjectInfo, ProjectIn
// @Select("SELECT project_name FROM project_info") // @Select("SELECT project_name FROM project_info")
// List<String> queryProjectNames(); // List<String> 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);
} }

9
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/IProjectInfoService.java

@ -1,11 +1,10 @@
package org.dromara.platform.service; 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.ContractInfo;
import org.dromara.platform.domain.ProjectInfo;
import org.dromara.platform.domain.vo.ProjectInfoVo;
import org.dromara.platform.domain.bo.ProjectInfoBo; import org.dromara.platform.domain.bo.ProjectInfoBo;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.platform.domain.vo.ProjectInfoVo;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.platform.domain.vo.ProjectSelectVo; import org.dromara.platform.domain.vo.ProjectSelectVo;
import java.util.Collection; import java.util.Collection;
@ -81,7 +80,7 @@ public interface IProjectInfoService {
* @param projectName * @param projectName
* @return * @return
*/ */
String getContractNameByProjectName(String projectName); List<String> getContractNameByProjectName(String projectName);
/** /**
* 根据项目名称查询合同信息 * 根据项目名称查询合同信息

10
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 com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.platform.domain.ProjectCategoryPoint; import org.dromara.platform.domain.ProjectCategoryPoint;
import org.dromara.platform.domain.WorkOrderInfo;
import org.dromara.platform.domain.bo.ProjectCategoryPointBo; import org.dromara.platform.domain.bo.ProjectCategoryPointBo;
import org.dromara.platform.domain.vo.DailyInspectionReportVo; import org.dromara.platform.domain.vo.DailyInspectionReportVo;
import org.dromara.platform.domain.vo.PointSelectVo; import org.dromara.platform.domain.vo.PointSelectVo;
@ -70,13 +71,6 @@ public class PointInfoServiceImpl implements IPointInfoService {
public TableDataInfo<PointInfoVo> queryPageList(PointInfoBo bo, PageQuery pageQuery) { public TableDataInfo<PointInfoVo> queryPageList(PointInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PointInfo> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<PointInfo> lqw = buildQueryWrapper(bo);
Page<PointInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<PointInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
List<PointInfoVo> records = result.getRecords();
List<PointInfoVo> sortedRecords = records.stream()
// 默认小到大 反转 为降序
.sorted(Comparator.comparing(PointInfoVo::getCreateTime).reversed())
.collect(Collectors.toList());
result.setRecords(sortedRecords);
return TableDataInfo.build(result); 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.getPort()), PointInfo::getPort, bo.getPort());
lqw.eq(StringUtils.isNotBlank(bo.getIp()), PointInfo::getIp, bo.getIp()); lqw.eq(StringUtils.isNotBlank(bo.getIp()), PointInfo::getIp, bo.getIp());
lqw.eq(bo.getStatus() != null, PointInfo::getStatus, bo.getStatus()); lqw.eq(bo.getStatus() != null, PointInfo::getStatus, bo.getStatus());
// 添加按创建时间降序排序
lqw.orderByDesc(PointInfo::getCreateTime);
return lqw; return lqw;
} }

17
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 org.dromara.platform.service.IProjectInfoService;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 项目信息Service业务层处理 * 项目信息Service业务层处理
@ -207,12 +208,20 @@ public class ProjectInfoServiceImpl implements IProjectInfoService {
} }
@Override @Override
public String getContractNameByProjectName(String projectName) { public List<String> getContractNameByProjectName(String projectName) {
LambdaQueryWrapper<ContractInfo> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<ContractInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ContractInfo::getProjectName, projectName); queryWrapper.eq(ContractInfo::getProjectName, projectName);
ContractInfo contractInfo = contractInfoMapper.selectOne(queryWrapper); List<ContractInfo> contractInfoList = contractInfoMapper.selectList(queryWrapper);
String contractName = contractInfo.getContractName(); if (contractInfoList == null) {
return contractName; return Collections.emptyList();
}
List<String> contractNameList = contractInfoList
.stream()
.map(ContractInfo::getContractName)
.collect(Collectors.toList());
return contractNameList;
} }
@Override @Override

43
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderDelayServiceImpl.java

@ -1,6 +1,9 @@
package org.dromara.platform.service.impl; package org.dromara.platform.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import jakarta.annotation.Resource; 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.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; 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.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.dromara.platform.domain.Attachment; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.platform.domain.AttachmentSerializer; import org.dromara.platform.domain.*;
import org.dromara.platform.mapper.ContractInfoMapper;
import org.dromara.platform.service.IContractInfoService; import org.dromara.platform.service.IContractInfoService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.dromara.platform.domain.bo.WorkOrderDelayBo; import org.dromara.platform.domain.bo.WorkOrderDelayBo;
import org.dromara.platform.domain.vo.WorkOrderDelayVo; import org.dromara.platform.domain.vo.WorkOrderDelayVo;
import org.dromara.platform.domain.WorkOrderDelay;
import org.dromara.platform.mapper.WorkOrderDelayMapper; import org.dromara.platform.mapper.WorkOrderDelayMapper;
import org.dromara.platform.service.IWorkOrderDelayService; import org.dromara.platform.service.IWorkOrderDelayService;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.stream.Collectors;
/** /**
* 工单延期审核Service业务层处理 * 工单延期审核Service业务层处理
@ -38,6 +43,9 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService {
@Resource @Resource
private IContractInfoService contractInfoService; private IContractInfoService contractInfoService;
@Resource
private ContractInfoMapper contractInfoMapper;
/** /**
* 查询工单延期审核 * 查询工单延期审核
* *
@ -68,6 +76,28 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService {
*/ */
@Override @Override
public TableDataInfo<WorkOrderDelayVo> queryPageList(WorkOrderDelayBo bo, PageQuery pageQuery) { public TableDataInfo<WorkOrderDelayVo> queryPageList(WorkOrderDelayBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser();
String deptName = loginUser.getDeptName();
// 获取用户角色列表
List<RoleDTO> roles = loginUser.getRoles();
boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName()));
if (hasOwnerRole && deptName.equals("江北公安")){
// 通过合同甲方获取对应的合同乙方(运维单位)
LambdaQueryWrapper<ContractInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(ContractInfo::getContractName, Arrays.asList("电信", "移动","盈力"));
List<ContractInfo> contractInfos = contractInfoMapper.selectList(queryWrapper);
List<String> contractNames = contractInfos
.stream()
.map(ContractInfo::getContractName)
.collect(Collectors.toList());
bo.setContractNames(contractNames);
}
// else if (hasOwnerRole && deptName.equals("鄞州公安")){
// // TODO 鄞州公安
// }else {
// bo.setContractNames(Arrays.asList("其他"));
// }
LambdaQueryWrapper<WorkOrderDelay> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<WorkOrderDelay> lqw = buildQueryWrapper(bo);
Page<WorkOrderDelayVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<WorkOrderDelayVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
@ -89,7 +119,7 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService {
Map<String, Object> params = bo.getParams(); Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WorkOrderDelay> lqw = Wrappers.lambdaQuery(); LambdaQueryWrapper<WorkOrderDelay> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), WorkOrderDelay::getProjectName, bo.getProjectName()); 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(StringUtils.isNotBlank(bo.getDelayReason()), WorkOrderDelay::getDelayReason, bo.getDelayReason());
lqw.eq(bo.getBeforeDelayTime() != null, WorkOrderDelay::getBeforeDelayTime, bo.getBeforeDelayTime()); lqw.eq(bo.getBeforeDelayTime() != null, WorkOrderDelay::getBeforeDelayTime, bo.getBeforeDelayTime());
lqw.eq(bo.getAfterDelayTime() != null, WorkOrderDelay::getAfterDelayTime, bo.getAfterDelayTime()); 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.getHandlerId()), WorkOrderDelay::getHandlerId, bo.getHandlerId());
lqw.eq(StringUtils.isNotBlank(bo.getApprover()), WorkOrderDelay::getApprover, bo.getApprover()); lqw.eq(StringUtils.isNotBlank(bo.getApprover()), WorkOrderDelay::getApprover, bo.getApprover());
lqw.eq(bo.getStatus() != null, WorkOrderDelay::getStatus, bo.getStatus()); 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; return lqw;
} }

224
ruoyi-modules/guoyan-platform/src/main/java/org/dromara/platform/service/impl/WorkOrderInfoServiceImpl.java

@ -1,5 +1,6 @@
package org.dromara.platform.service.impl; package org.dromara.platform.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@ -51,6 +52,12 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
private final WorkOrderInfoMapper baseMapper; private final WorkOrderInfoMapper baseMapper;
@Resource
private ContractInfoMapper contractInfoMapper;
@Resource
private ProjectInfoMapper projectInfoMapper;
@Resource @Resource
private IProjectInfoService projectInfoService; private IProjectInfoService projectInfoService;
@Resource @Resource
@ -130,26 +137,32 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
*/ */
@Override @Override
public TableDataInfo<WorkOrderInfoVo> queryPageList(WorkOrderInfoBo bo, PageQuery pageQuery) { public TableDataInfo<WorkOrderInfoVo> queryPageList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
String deptName = loginUser.getDeptName();
log.info("用户昵称:{}-->角色{}-->部门:{}",loginUser.getNickname(),loginUser.getRoles(),loginUser.getDeptName()); log.info("用户昵称:{}-->角色{}-->部门:{}",loginUser.getNickname(),loginUser.getRoles(),loginUser.getDeptName());
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
String username = loginUser.getUsername();
// 获取用户角色列表 // 获取用户角色列表
List<RoleDTO> roles = loginUser.getRoles(); List<RoleDTO> roles = loginUser.getRoles();
// 提前判断是否有 "监理" 和 "业主" 角色 // 提前判断是否有 "监理" 和 "业主" 角色
boolean hasUnitRole = roles.stream().anyMatch(role -> "运维人员".equals(role.getRoleName())); boolean hasUnitRole = roles.stream().anyMatch(role -> "运维人员".equals(role.getRoleName()));
boolean hasSupervisorRole = 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())); boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName()));
// 如果是运维角色则增加所属部门作为查询条件
if (hasUnitRole){ if (hasUnitRole){
List<WorkOrderInfoVo> records = result.getRecords(); bo.setMaintenanceUnit(deptName);
List<WorkOrderInfoVo> sortedRecords = records.stream() }
//根据单位过滤 if (hasOwnerRole){
.filter(item -> item.getMaintenanceUnit().equals(loginUser.getDeptName())) // 通过合同甲方获取对应的合同乙方(运维单位)
.collect(Collectors.toList()); if (deptName.equals("江北公安")){
result.setRecords(sortedRecords); List<String> partyBList = Arrays.asList("电信", "移动","盈力");
result.setTotal(sortedRecords.size()); bo.setMaintenanceUnits(partyBList);
}else if (deptName.equals("鄞州公安")){
List<String> partyBList = Arrays.asList("时代");
bo.setMaintenanceUnits(partyBList);
}
} }
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); 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.getFaultDescription()), WorkOrderInfo::getFaultDescription, bo.getFaultDescription());
lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), WorkOrderInfo::getAttachment, bo.getAttachment()); lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), WorkOrderInfo::getAttachment, bo.getAttachment());
lqw.eq(bo.getMaintenanceRequirement() != null, WorkOrderInfo::getMaintenanceRequirement, bo.getMaintenanceRequirement()); 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(StringUtils.isNotBlank(bo.getDispatchOpinion()), WorkOrderInfo::getDispatchOpinion, bo.getDispatchOpinion());
lqw.eq(bo.getIsDispatched() != null, WorkOrderInfo::getIsDispatched, bo.getIsDispatched()); lqw.eq(bo.getIsDispatched() != null, WorkOrderInfo::getIsDispatched, bo.getIsDispatched());
lqw.eq(StringUtils.isNotBlank(bo.getLatitude()), WorkOrderInfo::getLatitude, bo.getLatitude()); 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.getLongitude()), WorkOrderInfo::getLongitude, bo.getLongitude());
// 运维单位
lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceUnit()), WorkOrderInfo::getMaintenanceUnit, bo.getMaintenanceUnit());
//当前状态:status //当前状态:status
lqw.eq(bo.getStatus() != null, WorkOrderInfo::getStatus, bo.getStatus()); lqw.eq(bo.getStatus() != null, WorkOrderInfo::getStatus, bo.getStatus());
@ -375,7 +395,9 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
@Override @Override
public void takeOrder(String workOrderId) { public void takeOrder(String workOrderId) {
WorkOrderInfoVo workOrderInfoVo = baseMapper.selectVoById(workOrderId); WorkOrderInfoVo workOrderInfoVo = baseMapper.selectVoById(workOrderId);
if (workOrderInfoVo.getStatus() != 1){ log.info("当前工单状态为:{}", workOrderInfoVo.getStatus());
Set<Long> allowedStatuses = Set.of(1L, 9L, 10L);
if (!allowedStatuses.contains(workOrderInfoVo.getStatus())) {
throw new ServiceException("当前工单状态未处于:待接单状态,不能进行接单操作!"); throw new ServiceException("当前工单状态未处于:待接单状态,不能进行接单操作!");
} }
@ -423,20 +445,22 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
public TableDataInfo<WorkOrderInfoVo> dealWithList(WorkOrderInfoBo bo, PageQuery pageQuery) { public TableDataInfo<WorkOrderInfoVo> dealWithList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
String username = loginUser.getUsername(); String username = loginUser.getUsername();
//TODO 优化:查询而不是过滤
// 如果是运维角色则增加所属部门作为查询条件
List<RoleDTO> roles = loginUser.getRoles();
boolean hasUnitRole = roles.stream().anyMatch(role -> "运维人员".equals(role.getRoleName()));
if (hasUnitRole){
bo.setMaintenanceUnit(loginUser.getDeptName());
}
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
// 设置工单状态:1:待接单 2:处理中 7:处理中(已延期)
lqw.in(WorkOrderInfo::getStatus, Arrays.asList(1, 2, 7,9,10));
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
List<WorkOrderInfoVo> records = result.getRecords(); List<WorkOrderInfoVo> records = result.getRecords();
List<WorkOrderInfoVo> 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(); String workOrderId = record.getId();
LambdaQueryWrapper<WorkOrderProcess> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WorkOrderProcess> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId);
@ -446,12 +470,15 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
queryWrapper.last("LIMIT 1"); queryWrapper.last("LIMIT 1");
WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); 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(); Date operationTime = target.getOperationTime();
// 单位:小时 // 单位:小时
Long responseTime = record.getResponseTime(); Long responseTime = record.getResponseTime();
// 设置剩余时间提示 //TODO 设置剩余处理时间
record.setRestTime(getTimeLeft(operationTime, responseTime)); record.setRestTime(getTimeLeft(operationTime, responseTime));
} else { } else {
// 如果没有找到接单记录或没有接单时间,可以设为默认值 // 如果没有找到接单记录或没有接单时间,可以设为默认值
record.setRestTime("暂无接单信息"); record.setRestTime("暂无接单信息");
@ -468,11 +495,39 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
record.setRestTime(getTimeLeft(dueDateTime)); record.setRestTime(getTimeLeft(dueDateTime));
} }
} }
}
LambdaQueryWrapper<WorkOrderProcess> 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); return TableDataInfo.build(result);
} }
@ -550,39 +605,37 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
@Override @Override
public TableDataInfo<WorkOrderInfoVo> reviewList(WorkOrderInfoBo bo, PageQuery pageQuery) { public TableDataInfo<WorkOrderInfoVo> reviewList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo); String deptName = loginUser.getDeptName();
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
List<WorkOrderInfoVo> records = result.getRecords();
// 获取用户角色列表 // 获取用户角色列表
List<RoleDTO> roles = loginUser.getRoles(); List<RoleDTO> roles = loginUser.getRoles();
// 提前判断是否有 "监理" 和 "业主" 角色 // 提前判断是否有 "监理" 和 "业主" 角色
boolean hasSupervisorRole = 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())); boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName()));
if (hasOwnerRole){
// 通过合同甲方获取对应的合同乙方(运维单位)
if (deptName.equals("江北公安")){
List<String> partyBList = Arrays.asList("电信", "移动","盈力");
bo.setMaintenanceUnits(partyBList);
}else if (deptName.equals("鄞州公安")){
List<String> partyBList = Arrays.asList("时代");
bo.setMaintenanceUnits(partyBList);
}
}
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
List<WorkOrderInfoVo> filterRecords = records.stream() lqw.in(WorkOrderInfo::getStatus, Arrays.asList(4, 5));
.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());
result.setRecords(filterRecords); if (hasSupervisorRole){
result.setTotal(filterRecords.size()); //监理初审(暂定后续可配)
lqw.in(WorkOrderInfo::getStatus, Arrays.asList(4));
}
if (hasOwnerRole){
//业主终审(暂定后续可配)
lqw.in(WorkOrderInfo::getStatus, Arrays.asList(5));
}
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@ -943,6 +996,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
LambdaQueryWrapper<WorkOrderProcess> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<WorkOrderProcess> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId); queryWrapper.eq(WorkOrderProcess::getWorkOrderId, workOrderId);
queryWrapper.eq(WorkOrderProcess::getStage, "故障接单"); queryWrapper.eq(WorkOrderProcess::getStage, "故障接单");
queryWrapper.orderByDesc(WorkOrderProcess::getOperationTime).last("LIMIT 1");
WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper); WorkOrderProcess target = workOrderProcessMapper.selectOne(queryWrapper);
Date operationTime = target.getOperationTime(); Date operationTime = target.getOperationTime();
// 1.创建工单延期信息 // 1.创建工单延期信息
@ -1107,16 +1161,28 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
@Override @Override
public TableDataInfo<WorkOrderInfoVo> dispatchList(WorkOrderInfoBo bo, PageQuery pageQuery) { public TableDataInfo<WorkOrderInfoVo> dispatchList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser();
String deptName = loginUser.getDeptName();
log.info("用户昵称:{}-->角色{}-->部门:{}",loginUser.getNickname(),loginUser.getRoles(),loginUser.getDeptName());
// 获取用户角色列表
List<RoleDTO> roles = loginUser.getRoles();
// 业主只能看到自己负责的工单
boolean hasOwnerRole = roles.stream().anyMatch(role -> "业主".equals(role.getRoleName()));
if (hasOwnerRole){
// 通过合同甲方获取对应的合同乙方(运维单位)
if (deptName.equals("江北公安")){
List<String> partyBList = Arrays.asList("电信", "移动","盈力");
bo.setMaintenanceUnits(partyBList);
}else if (deptName.equals("鄞州公安")){
List<String> partyBList = Arrays.asList("时代");
bo.setMaintenanceUnits(partyBList);
}
}
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
//status 0 待派遣 3 运维单位处理时回退至派遣
lqw.in(WorkOrderInfo::getStatus, Arrays.asList(0, 3));
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
List<WorkOrderInfoVo> records = result.getRecords();
List<WorkOrderInfoVo> 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); return TableDataInfo.build(result);
} }
@ -1167,7 +1233,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
if (flag) { if (flag) {
LambdaUpdateWrapper<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(WorkOrderInfo::getId, workOrderId) updateWrapper.eq(WorkOrderInfo::getId, workOrderId)
.set(WorkOrderInfo::getStatus, 1); //待接单(派遣)
.set(WorkOrderInfo::getStatus, 9);
baseMapper.update(null, updateWrapper); baseMapper.update(null, updateWrapper);
log.info("已派遣至运维单位!"); log.info("已派遣至运维单位!");
} }
@ -1208,6 +1275,45 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
baseMapper.update(null, updateWrapper); baseMapper.update(null, updateWrapper);
log.info("作废!"); 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<WorkOrderProcess> 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<WorkOrderInfo> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(WorkOrderInfo::getId, workOrderId)
//待接单(转派)
.set(WorkOrderInfo::getStatus,10)
.set(WorkOrderInfo::getMaintenanceUnit, bo.getMaintenanceUnit());
baseMapper.update(null, updateWrapper);
log.info("事件转派!");
}
} }
} }

5
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))); return R.ok(deptService.selectDeptByIds(deptIds == null ? null : List.of(deptIds)));
} }
@GetMapping("/getOwnerList")
public R<List<SysDeptVo>> getOwnerList() {
List<SysDeptVo> depts = deptService.getOwnerList();
return R.ok(depts);
}
} }

2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java

@ -122,4 +122,6 @@ public interface ISysDeptService {
* @return 结果 * @return 结果
*/ */
int deleteDeptById(Long deptId); int deleteDeptById(Long deptId);
List<SysDeptVo> getOwnerList();
} }

8
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); return baseMapper.deleteById(deptId);
} }
@Override
public List<SysDeptVo> getOwnerList() {
SysDeptBo bo = new SysDeptBo();
bo.setDeptCategory("yezhu");
LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(bo);
return baseMapper.selectDeptList(lqw);
}
} }

Loading…
Cancel
Save