|
@@ -48,10 +48,10 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
private EquipmentStatusMapper equipmentStatusMapper;
|
|
private EquipmentStatusMapper equipmentStatusMapper;
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public IPage<WorkOrder> selectWorkOrderList(Integer orderType, Integer orderLevel, Integer orderStatus, String deviceCode, String keyword, String equipmentType, Integer pageNum, Integer pageSize) {
|
|
|
|
|
|
|
+ public IPage<WorkOrder> selectWorkOrderList(Integer orderType, Integer orderLevel, String orderStatus, String deviceCode, String keyword, String equipmentType, Integer pageNum, Integer pageSize) {
|
|
|
Page<WorkOrder> page = new Page<>(pageNum, pageSize);
|
|
Page<WorkOrder> page = new Page<>(pageNum, pageSize);
|
|
|
LambdaQueryWrapper<WorkOrder> wrapper = new LambdaQueryWrapper<>();
|
|
LambdaQueryWrapper<WorkOrder> wrapper = new LambdaQueryWrapper<>();
|
|
|
- // 按设备类型过滤工单:gas-燃气(父类别ID=3),drainage-排水(typeId为drainage的顶级分类)
|
|
|
|
|
|
|
+ // 按设备类型过滤工单:gas-燃气(父类别ID=3),drainage-排水(typeId为drainage的顶级分类),water-供水;为空查询全部设备工单
|
|
|
if (StringUtils.isNotEmpty(equipmentType)) {
|
|
if (StringUtils.isNotEmpty(equipmentType)) {
|
|
|
if ("gas".equals(equipmentType)) {
|
|
if ("gas".equals(equipmentType)) {
|
|
|
wrapper.inSql(WorkOrder::getDeviceId, "SELECT eb.equipment_id FROM app_user.equipment_base eb " + "INNER JOIN app_user.equipment_type et ON eb.equipment_type_id = et.id " + "WHERE et.parent_type_id = '3'");
|
|
wrapper.inSql(WorkOrder::getDeviceId, "SELECT eb.equipment_id FROM app_user.equipment_base eb " + "INNER JOIN app_user.equipment_type et ON eb.equipment_type_id = et.id " + "WHERE et.parent_type_id = '3'");
|
|
@@ -62,13 +62,23 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
// 供水:顶级类型名称为“供水”的分类及其全部子类型
|
|
// 供水:顶级类型名称为“供水”的分类及其全部子类型
|
|
|
wrapper.inSql(WorkOrder::getDeviceId, "SELECT eb.equipment_id FROM app_user.equipment_base eb " + "INNER JOIN app_user.equipment_type et ON eb.equipment_type_id = et.id " + "WHERE et.id IN (SELECT id FROM app_user.equipment_type WHERE type_name = '供水' AND parent_type_id = '0' " + "UNION SELECT id FROM app_user.equipment_type WHERE parent_type_id = (SELECT id FROM app_user.equipment_type WHERE type_name = '供水' AND parent_type_id = '0'))");
|
|
wrapper.inSql(WorkOrder::getDeviceId, "SELECT eb.equipment_id FROM app_user.equipment_base eb " + "INNER JOIN app_user.equipment_type et ON eb.equipment_type_id = et.id " + "WHERE et.id IN (SELECT id FROM app_user.equipment_type WHERE type_name = '供水' AND parent_type_id = '0' " + "UNION SELECT id FROM app_user.equipment_type WHERE parent_type_id = (SELECT id FROM app_user.equipment_type WHERE type_name = '供水' AND parent_type_id = '0'))");
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- // 默认只查询燃气设备类工单(兼容旧逻辑)
|
|
|
|
|
- wrapper.inSql(WorkOrder::getDeviceId, "SELECT eb.equipment_id FROM app_user.equipment_base eb " + "INNER JOIN app_user.equipment_type et ON eb.equipment_type_id = et.id " + "WHERE et.parent_type_id = '3'");
|
|
|
|
|
}
|
|
}
|
|
|
if (orderType != null) wrapper.eq(WorkOrder::getOrderType, orderType);
|
|
if (orderType != null) wrapper.eq(WorkOrder::getOrderType, orderType);
|
|
|
if (orderLevel != null) wrapper.eq(WorkOrder::getOrderLevel, orderLevel);
|
|
if (orderLevel != null) wrapper.eq(WorkOrder::getOrderLevel, orderLevel);
|
|
|
- if (orderStatus != null) wrapper.eq(WorkOrder::getOrderStatus, orderStatus);
|
|
|
|
|
|
|
+ // orderStatus 支持逗号分隔多值,如 1,2,3
|
|
|
|
|
+ if (StringUtils.isNotEmpty(orderStatus)) {
|
|
|
|
|
+ if (orderStatus.contains(",")) {
|
|
|
|
|
+ List<Integer> statusList = Arrays.stream(orderStatus.split(","))
|
|
|
|
|
+ .filter(StringUtils::isNumeric)
|
|
|
|
|
+ .map(Integer::valueOf)
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+ if (!statusList.isEmpty()) {
|
|
|
|
|
+ wrapper.in(WorkOrder::getOrderStatus, statusList);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ wrapper.eq(WorkOrder::getOrderStatus, Integer.valueOf(orderStatus));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
if (StringUtils.isNotEmpty(deviceCode)) wrapper.eq(WorkOrder::getDeviceCode, deviceCode);
|
|
if (StringUtils.isNotEmpty(deviceCode)) wrapper.eq(WorkOrder::getDeviceCode, deviceCode);
|
|
|
if (StringUtils.isNotEmpty(keyword)) {
|
|
if (StringUtils.isNotEmpty(keyword)) {
|
|
|
wrapper.and(w -> w.like(WorkOrder::getOrderNo, keyword).or().like(WorkOrder::getDeviceCode, keyword).or().like(WorkOrder::getOrderDesc, keyword));
|
|
wrapper.and(w -> w.like(WorkOrder::getOrderNo, keyword).or().like(WorkOrder::getDeviceCode, keyword).or().like(WorkOrder::getOrderDesc, keyword));
|
|
@@ -182,7 +192,7 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public boolean processOrder(Long orderId, String handleResult, String solution, Long operUserId, String operUserName) {
|
|
|
|
|
|
|
+ public boolean processOrder(Long orderId, String handleResult, String solution, String maintenanceBeforeImg, Long operUserId, String operUserName) {
|
|
|
WorkOrder order = this.getById(orderId);
|
|
WorkOrder order = this.getById(orderId);
|
|
|
if (order == null) throw new ServiceException("工单不存在");
|
|
if (order == null) throw new ServiceException("工单不存在");
|
|
|
if (!Arrays.asList(3, 4).contains(order.getOrderStatus())) throw new ServiceException("当前工单状态不允许处理");
|
|
if (!Arrays.asList(3, 4).contains(order.getOrderStatus())) throw new ServiceException("当前工单状态不允许处理");
|
|
@@ -191,6 +201,9 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
entity.setOrderId(orderId);
|
|
entity.setOrderId(orderId);
|
|
|
entity.setOrderStatus(4);
|
|
entity.setOrderStatus(4);
|
|
|
entity.setRepairResult(solution);
|
|
entity.setRepairResult(solution);
|
|
|
|
|
+ if (StringUtils.isNotBlank(maintenanceBeforeImg)) {
|
|
|
|
|
+ entity.setMaintenanceBeforeImg(maintenanceBeforeImg);
|
|
|
|
|
+ }
|
|
|
this.updateById(entity);
|
|
this.updateById(entity);
|
|
|
|
|
|
|
|
// 工单处理中 → 同步隐患状态为"整改中"
|
|
// 工单处理中 → 同步隐患状态为"整改中"
|
|
@@ -209,7 +222,7 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public boolean completeOrder(Long orderId, String result, Long operUserId, String operUserName) {
|
|
|
|
|
|
|
+ public boolean completeOrder(Long orderId, String result, String maintenanceAfterImg, Long operUserId, String operUserName) {
|
|
|
WorkOrder order = this.getById(orderId);
|
|
WorkOrder order = this.getById(orderId);
|
|
|
if (order == null) throw new ServiceException("工单不存在");
|
|
if (order == null) throw new ServiceException("工单不存在");
|
|
|
if (order.getOrderStatus() != 4)
|
|
if (order.getOrderStatus() != 4)
|
|
@@ -219,6 +232,9 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
entity.setOrderId(orderId);
|
|
entity.setOrderId(orderId);
|
|
|
entity.setOrderStatus(5);
|
|
entity.setOrderStatus(5);
|
|
|
entity.setRepairResult(result);
|
|
entity.setRepairResult(result);
|
|
|
|
|
+ if (StringUtils.isNotBlank(maintenanceAfterImg)) {
|
|
|
|
|
+ entity.setMaintenanceAfterImg(maintenanceAfterImg);
|
|
|
|
|
+ }
|
|
|
this.updateById(entity);
|
|
this.updateById(entity);
|
|
|
|
|
|
|
|
WorkOrderLog logEntry = new WorkOrderLog();
|
|
WorkOrderLog logEntry = new WorkOrderLog();
|
|
@@ -235,6 +251,9 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public Long createWorkOrderFromHazard(String hazardId, String hazardNo, String hazardDesc, String equipmentId, String hazardLevel, String hazardImages, Date planFinishTime) {
|
|
public Long createWorkOrderFromHazard(String hazardId, String hazardNo, String hazardDesc, String equipmentId, String hazardLevel, String hazardImages, Date planFinishTime) {
|
|
|
|
|
+ // 同一设备存在进行中工单(状态非 6 已结案/7 已驳回)时禁止重复建单
|
|
|
|
|
+ checkDeviceOrderConflict(equipmentId);
|
|
|
|
|
+
|
|
|
// 隐患等级映射到工单优先级:0-重大→紧急(1) 1-较大→一般(2) 2-一般→一般(2) 3-轻微→低(3)
|
|
// 隐患等级映射到工单优先级:0-重大→紧急(1) 1-较大→一般(2) 2-一般→一般(2) 3-轻微→低(3)
|
|
|
Integer orderLevel;
|
|
Integer orderLevel;
|
|
|
if ("0".equals(hazardLevel)) {
|
|
if ("0".equals(hazardLevel)) {
|
|
@@ -261,7 +280,10 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
workOrder.setOrderLevel(orderLevel);
|
|
workOrder.setOrderLevel(orderLevel);
|
|
|
workOrder.setOrderDesc(hazardDesc);
|
|
workOrder.setOrderDesc(hazardDesc);
|
|
|
workOrder.setOrderStatus(1); // 待派单
|
|
workOrder.setOrderStatus(1); // 待派单
|
|
|
- workOrder.setWorkImage(hazardImages);
|
|
|
|
|
|
|
+ // 隐患图片作为维修前图片(如有)
|
|
|
|
|
+ if (StringUtils.isNotEmpty(hazardImages)) {
|
|
|
|
|
+ workOrder.setMaintenanceBeforeImg(hazardImages);
|
|
|
|
|
+ }
|
|
|
workOrder.setPlanFinishTime(planFinishTime);
|
|
workOrder.setPlanFinishTime(planFinishTime);
|
|
|
workOrder.setCreateTime(new Date());
|
|
workOrder.setCreateTime(new Date());
|
|
|
this.save(workOrder);
|
|
this.save(workOrder);
|
|
@@ -278,6 +300,59 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
return workOrder.getOrderId();
|
|
return workOrder.getOrderId();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public Long createWorkOrder(WorkOrder workOrder) {
|
|
|
|
|
+ // 同一设备存在进行中工单(状态非 6 已结案/7 已驳回)时禁止重复建单
|
|
|
|
|
+ checkDeviceOrderConflict(workOrder.getDeviceId());
|
|
|
|
|
+
|
|
|
|
|
+ if (workOrder.getOrderType() == null) {
|
|
|
|
|
+ workOrder.setOrderType(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (workOrder.getOrderLevel() == null) {
|
|
|
|
|
+ workOrder.setOrderLevel(2);
|
|
|
|
|
+ }
|
|
|
|
|
+ workOrder.setOrderNo(generateOrderNo());
|
|
|
|
|
+ // 设备ID存在但未填设备编码时自动补全
|
|
|
|
|
+ if (StringUtils.isNotEmpty(workOrder.getDeviceId()) && StringUtils.isEmpty(workOrder.getDeviceCode())) {
|
|
|
|
|
+ EquipmentBase equipment = equipmentBaseMapper.selectById(workOrder.getDeviceId());
|
|
|
|
|
+ if (equipment != null) {
|
|
|
|
|
+ workOrder.setDeviceCode(equipment.getEquipmentCode());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ workOrder.setOrderStatus(1); // 待派单
|
|
|
|
|
+ workOrder.setCreateTime(new Date());
|
|
|
|
|
+ this.save(workOrder);
|
|
|
|
|
+
|
|
|
|
|
+ // 写入操作日志
|
|
|
|
|
+ WorkOrderLog logEntry = new WorkOrderLog();
|
|
|
|
|
+ logEntry.setOrderId(workOrder.getOrderId());
|
|
|
|
|
+ logEntry.setOperType(1);
|
|
|
|
|
+ logEntry.setOperDesc("手动创建工单");
|
|
|
|
|
+ logEntry.setOperTime(new Date());
|
|
|
|
|
+ workOrderLogMapper.insert(logEntry);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("手动创建工单成功,工单ID={},类型={}", workOrder.getOrderId(), workOrder.getOrderType());
|
|
|
|
|
+ return workOrder.getOrderId();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 校验设备是否存在进行中工单(状态 1-5/8/9),存在则禁止再次创建工单
|
|
|
|
|
+ * 业务规则:同一设备同一时间只能有一个进行中的工单,结案(6)或驳回(7)后方可再次创建
|
|
|
|
|
+ */
|
|
|
|
|
+ private void checkDeviceOrderConflict(String deviceId) {
|
|
|
|
|
+ if (StringUtils.isEmpty(deviceId)) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ Long count = this.lambdaQuery()
|
|
|
|
|
+ .eq(WorkOrder::getDeviceId, deviceId)
|
|
|
|
|
+ .notIn(WorkOrder::getOrderStatus, 6, 7)
|
|
|
|
|
+ .count();
|
|
|
|
|
+ if (count > 0) {
|
|
|
|
|
+ throw new ServiceException("该设备已有处理中的工单,需结案或驳回后才能创建新工单");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 生成工单编号:WO-yyyyMMddHHmmssSSS
|
|
* 生成工单编号:WO-yyyyMMddHHmmssSSS
|
|
|
*/
|
|
*/
|
|
@@ -308,6 +383,30 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public boolean rejectOrder(Long orderId, String reason, Long operUserId, String operUserName) {
|
|
|
|
|
+ WorkOrder order = this.getById(orderId);
|
|
|
|
|
+ if (order == null) throw new ServiceException("工单不存在");
|
|
|
|
|
+ // 仅待派单/待接单可驳回,已流转的工单请使用取消
|
|
|
|
|
+ if (!Arrays.asList(1, 2).contains(order.getOrderStatus())) throw new ServiceException("当前工单状态不允许驳回");
|
|
|
|
|
+
|
|
|
|
|
+ WorkOrder entity = new WorkOrder();
|
|
|
|
|
+ entity.setOrderId(orderId);
|
|
|
|
|
+ entity.setOrderStatus(7);
|
|
|
|
|
+ this.updateById(entity);
|
|
|
|
|
+
|
|
|
|
|
+ WorkOrderLog logEntry = new WorkOrderLog();
|
|
|
|
|
+ logEntry.setOrderId(orderId);
|
|
|
|
|
+ logEntry.setOperType(7);
|
|
|
|
|
+ logEntry.setOperDesc("驳回工单,原因:" + (reason != null ? reason : ""));
|
|
|
|
|
+ logEntry.setOperUserId(operUserId);
|
|
|
|
|
+ logEntry.setOperUserName(operUserName);
|
|
|
|
|
+ logEntry.setOperTime(new Date());
|
|
|
|
|
+ workOrderLogMapper.insert(logEntry);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public boolean closeOrder(Long orderId, String result, Long operUserId, String operUserName) {
|
|
public boolean closeOrder(Long orderId, String result, Long operUserId, String operUserName) {
|