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.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");

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")
@GetMapping("/getContractNameByProjectName")
public R<String> getContractNameByProjectName(@Param("projectName") String projectName) {
String contractName = projectInfoService.getContractNameByProjectName(projectName);
return R.ok(contractName);
public R<List<String>> getContractNameByProjectName(@Param("projectName") String projectName) {
List<String> contractNames = projectInfoService.getContractNameByProjectName(projectName);
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 结案
* 7 处理中(已延期)
* 8 作废
* 9 待接单(派遣)
* 10 待接单(转派)
*
*/
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 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<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 })
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 = "所属项目")
private String projectName;
@ExcelProperty(value = "所属合同")
private String contractName;
/**
* 项目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;
/**
* 响应时限
* 响应时限(处理)
*/
@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;
}

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 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<WorkOrderInfoVo> {
@Resource
private IWorkOrderInfoService workOrderInfoService;
@Resource
private IContractInfoService contractInfoService;
private List<WorkOrderInfoBo> list = new ArrayList<>();
/**
* 自己定义一个缓冲量
@ -28,8 +34,10 @@ public class WorkOrderInfoListener implements ReadListener<WorkOrderInfoVo> {
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<WorkOrderInfoVo> {
@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<WorkOrderInfoVo> {
*/
@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);
// });
// }
}
}

15
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<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;
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<ProjectInfo, ProjectIn
// @Select("SELECT project_name FROM project_info")
// 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;
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<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 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<PointInfoVo> queryPageList(PointInfoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<PointInfo> lqw = buildQueryWrapper(bo);
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);
}
@ -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;
}

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 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<String> getContractNameByProjectName(String projectName) {
LambdaQueryWrapper<ContractInfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ContractInfo::getProjectName, projectName);
ContractInfo contractInfo = contractInfoMapper.selectOne(queryWrapper);
String contractName = contractInfo.getContractName();
return contractName;
List<ContractInfo> contractInfoList = contractInfoMapper.selectList(queryWrapper);
if (contractInfoList == null) {
return Collections.emptyList();
}
List<String> contractNameList = contractInfoList
.stream()
.map(ContractInfo::getContractName)
.collect(Collectors.toList());
return contractNameList;
}
@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;
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<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);
Page<WorkOrderDelayVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
@ -89,7 +119,7 @@ public class WorkOrderDelayServiceImpl implements IWorkOrderDelayService {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WorkOrderDelay> 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;
}

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;
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<WorkOrderInfoVo> queryPageList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser();
String deptName = 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();
// 提前判断是否有 "监理" 和 "业主" 角色
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<WorkOrderInfoVo> records = result.getRecords();
List<WorkOrderInfoVo> 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<String> partyBList = Arrays.asList("电信", "移动","盈力");
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);
}
@ -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<Long> 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<WorkOrderInfoVo> dealWithList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser();
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);
// 设置工单状态:1:待接单 2:处理中 7:处理中(已延期)
lqw.in(WorkOrderInfo::getStatus, Arrays.asList(1, 2, 7,9,10));
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() == 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<WorkOrderProcess> 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<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);
}
@ -550,39 +605,37 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
@Override
public TableDataInfo<WorkOrderInfoVo> reviewList(WorkOrderInfoBo bo, PageQuery pageQuery) {
LoginUser loginUser = LoginHelper.getLoginUser();
LambdaQueryWrapper<WorkOrderInfo> lqw = buildQueryWrapper(bo);
Page<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
List<WorkOrderInfoVo> records = result.getRecords();
String deptName = loginUser.getDeptName();
// 获取用户角色列表
List<RoleDTO> 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<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()
.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<WorkOrderInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
@ -943,6 +996,7 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
LambdaQueryWrapper<WorkOrderProcess> 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<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);
//status 0 待派遣 3 运维单位处理时回退至派遣
lqw.in(WorkOrderInfo::getStatus, Arrays.asList(0, 3));
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);
}
@ -1167,7 +1233,8 @@ public class WorkOrderInfoServiceImpl implements IWorkOrderInfoService {
if (flag) {
LambdaUpdateWrapper<WorkOrderInfo> 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<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)));
}
@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 结果
*/
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);
}
@Override
public List<SysDeptVo> getOwnerList() {
SysDeptBo bo = new SysDeptBo();
bo.setDeptCategory("yezhu");
LambdaQueryWrapper<SysDept> lqw = buildQueryWrapper(bo);
return baseMapper.selectDeptList(lqw);
}
}

Loading…
Cancel
Save